	 k  CACAby name         by name         ppsbld          d   
kn -PBm  7u     >  9CA9CA9CA             >      ./lpp_name s/msg                   m          4 R S csm.core {
csm.core 1.3.3.5 01 N B en_US Cluster Systems Management Core
[
*ifreq csm.client (1.3.0.0) 1.3.3.2
*ifreq csm.dsh (1.3.0.0) 1.3.3.3
*ifreq csm.gui.dcem (1.3.0.0) 1.3.3.1
*ifreq csm.server (1.3.0.0) 1.3.3.4
*prereq csm.core 1.3.3.0
%
/usr/lpp/csm.core/csm.core/1.3.3.5/inst_root/etc/opt/csm 8
/usr/lpp/SAVESPACE 4896
/opt/csm/bin 296
/usr/lib/objrepos 32
/opt/csm/codebase 32
/opt/csm/csmbin 872
/opt/csm/csmbin/diagnostics 1056
/opt/csm/install 40
/opt/csm/install/defs 56
/opt/csm/install/pkgdefs 568
/opt/csm/lib 96
/opt/csm/man/man1 8
/opt/csm/msgmaps 200
/opt/csm/pm 1352
/opt/csm/pm/Rpm 88
/usr/lib/nls/msg/C 208
/usr/sbin/rsct/trctmplts 8
/usr/websm/config/factory_defaults 8
INSTWORK 144 80
/lpp/csm.core 32
/etc/opt/csm 8
/lpp/SAVESPACE 8
/etc/objrepos 8
%
%
%
IY55834  3 FIXES AND UPDATES FOR CSM 1.3.3.0
IY47873  3 Service support required for CSM 1.3.2
IY50991  2 Required Maintenance Upgrade for CSM 1.3.2.
IY56212  2 FIXES AND UPDATES FOR CSM 1.3.3.1
IY58665  5 Support of several fixes for CSM 1.3.3.2 for AIX
IY58282  2  UPDATENODE REMOVES ENTRIES FROM /ETC/XTAB
IY60036  1 LX: Provide a way to not set up dhcpd.conf from csmsetupks/yast
IY60039  1 <scaling> need env to skip isrv sync
IY62825  1  IF DU -S ON CDROM MOUNT POINT RETURNS 0 CSMSETUPYAST EXITS
IY64638  1  CANNOT REJECT OR COMMIT CSM 1.3.3.4
]
}
  k -PBm  7u     y  AAAAAA             y      ./usr/lpp/csm.core/csm.core/1.3.3.5/liblpp.a 172                   m          <aiaff>
30658       0           68          28942       0           20          188         0           1100298298  30007       1           644         9   productid `
csm.core 5765-E88AP
268         564         68          1100298298  30007       1           644         18  csm.core.copyright`
 Licensed Materials - Property of IBM

 5765E88AP
   (C) Copyright International Business Machines Corp. 1985, 2004.

 All rights reserved.
 US Government Users Restricted Rights - Use, duplication or disclosure
 restricted by GSA ADP Schedule Contract with IBM Corp.
351         1028        188         1100298299  30007       1           755         20  csm.core.1330.odmdel`

if [ "$INUSAVE" = "1" ] ; then

   odmget -q " text = 'Install the Management Server' AND id_seq_num = '010' AND id = 'csm_inst' " sm_menu_opt >> $SAVEDIR/csm.core.1330.rodmadd

chmod a+x $SAVEDIR/csm.core.1330.rodmadd

fi
odmdelete -o sm_menu_opt -q " text = 'Install the Management Server' AND id_seq_num = '010' AND id = 'csm_inst' " > /dev/null

   1251        2390        564         1100298299  30007       1           755         17  csm.core.config_u `
#!/usr/bin/ksh

    ODMDIR=/usr/lib/objrepos
    /usr/bin/odmget -q "lpp_name='csm.core' AND  ver='1' AND rel='3' AND mod='3' AND fix='4'" product > /tmp/csm.core.odm1
    if [[ -s /tmp/csm.core.odm1 ]]
    then
        if (/bin/grep "*prereq csm.core 1.3.3. " /tmp/csm.core.odm1 > /dev/null 2>&1)
        then
            /bin/ed -s /tmp/csm.core.odm1 - <<EOF
/*prereq csm.core 1.3.3. /s/*prereq csm.core 1.3.3. /*prereq csm.core 1.3.3.0/
w
q
EOF
            /usr/bin/odmdelete -o product  -q "lpp_name='csm.core' AND  ver='1' AND rel='3' AND mod='3' AND fix='4'"
            /usr/bin/odmadd /tmp/csm.core.odm1
        fi

    fi

    ODMDIR=/etc/objrepos
    /usr/bin/odmget -q "lpp_name='csm.core' AND  ver='1' AND rel='3' AND mod='3' AND fix='4'" product > /tmp/csm.core.odm1
    if [[ -s /tmp/csm.core.odm1 ]]
    then
        if (/bin/grep "*prereq csm.core 1.3.3. " /tmp/csm.core.odm1 > /dev/null 2>&1)
        then
            /bin/ed -s /tmp/csm.core.odm1 - <<EOF
/*prereq csm.core 1.3.3. /s/*prereq csm.core 1.3.3. /*prereq csm.core 1.3.3.0/
w
q
EOF
            /usr/bin/odmdelete -o product  -q "lpp_name='csm.core' AND  ver='1' AND rel='3' AND mod='3' AND fix='4'"
            /usr/bin/odmadd /tmp/csm.core.odm1
        fi

    fi

exit 0
   2847        5368        1028        1097076597  30007       1           644         37  csm.core.csm_smit_core_stanzas.odmadd `
sm_menu_opt:
	id = "top_menu"
	id_seq_num = "710"
	next_id = "csm"
	text = "Cluster Systems Management"
	text_msg_file = "csmSMIT.cat"
	text_msg_set = 4
	text_msg_id = 71
	next_type = "m"
	alias = ""
	help_msg_id = 1,594
	help_msg_loc = "csmSMIT.cat"

sm_menu_opt:
	id = "csm"
	id_seq_num = "010"
	next_id = "csm_inst"
	text = "CSM Install"
	text_msg_file = "csmSMIT.cat"
	text_msg_set = 4
	text_msg_id = 2
	next_type = "m"
	alias = ""
	help_msg_id = 1,628
	help_msg_loc = "csmSMIT.cat"

sm_menu_opt:
	id = "csm_inst"
	id_seq_num = "080"
	next_id = "csm_uninstallms"
	text = "Uninstall the Management Server"
	text_msg_file = "csmSMIT.cat"
	text_msg_set = 4
	text_msg_id = 4
	next_type = "d"
	alias = ""
	help_msg_id = 1,596
	help_msg_loc = "csmSMIT.cat"

sm_cmd_hdr:
	id = "csm_uninstallms"
	option_id = "csm_uninstms_dialog"
	has_name_select = "n"
	name = "Uninstall the Management Server"
	name_msg_file = "csmSMIT.cat"
	name_msg_set = 4
	name_msg_id = 4
	cmd_to_exec = \
"csm_uninstms_proc ()
{
 /opt/csm/bin/uninstallms $1 $2 $3
}
csm_uninstms_proc "
	ask = "y"
	exec_mode = "p"
	ghost = "n"
	cmd_to_discover = ""
	cmd_to_discover_postfix = ""
	name_size = 0
	value_size = 0
	help_msg_id = 1,596
	help_msg_loc = "csmSMIT.cat"

sm_cmd_opt:
	id = "csm_uninstms_dialog"
	id_seq_num = "020"
	disc_field_name = ""
	name = "Remove and cleanup CSM cluster nodes\
\n before uninstalling"
	name_msg_file = "csmSMIT.cat"
	name_msg_set = 2
	name_msg_id = 424
	op_type = "r"
	entry_type = ""
	entry_size = 0
	required = "?"
	prefix = ""
	cmd_to_list_mode = ""
	cmd_to_list = ""
	cmd_to_list_postfix = ""
	multi_select = ""
	value_index = 1
	disp_values = "yes,no"
	values_msg_file = "csmSMIT.cat"
	values_msg_set = 3
	values_msg_id = 1
	aix_values = "-u,"
	help_msg_id = 1,611
	help_msg_loc = "csmSMIT.cat"

sm_cmd_opt:
	id = "csm_uninstms_dialog"
	id_seq_num = "030"
	disc_field_name = ""
	name = "Display Verbose Messages?"
	name_msg_file = "csmSMIT.cat"
	name_msg_set = 2
	name_msg_id = 2
	op_type = "r"
	entry_type = ""
	entry_size = 0
	required = "?"
	prefix = ""
	cmd_to_list_mode = ""
	cmd_to_list = ""
	cmd_to_list_postfix = ""
	multi_select = ""
	value_index = 1
	disp_values = "yes,no"
	values_msg_file = "csmSMIT.cat"
	values_msg_set = 3
	values_msg_id = 1
	aix_values = "-v,"
	help_msg_id = 1,609
	help_msg_loc = "csmSMIT.cat"

sm_cmd_opt:
	id = "csm_uninstms_dialog"
	id_seq_num = "040"
	disc_field_name = ""
	name = "Force"
	name_msg_file = "csmSMIT.cat"
	name_msg_set = 2
	name_msg_id = 110
	op_type = "r"
	entry_type = ""
	entry_size = 0
	required = "?"
	prefix = ""
	cmd_to_list_mode = ""
	cmd_to_list = ""
	cmd_to_list_postfix = ""
	multi_select = ""
	value_index = 1
	disp_values = "yes,no"
	values_msg_file = "csmSMIT.cat"
	values_msg_set = 3
	values_msg_id = 1
	aix_values = "-f,"
	help_msg_id = 1,240
	help_msg_loc = "csmSMIT.cat"

   652         6150        2390        1097076597  30007       1           755         39  csm.core.csm_smit_core_stanzas.unodmadd `
odmdelete -o sm_menu_opt -q "id = 'top_menu' AND id_seq_num = '710' AND next_id = 'csm'" > /dev/null
odmdelete -o sm_menu_opt -q "id = 'csm' AND id_seq_num = '010' AND next_id = 'csm_inst'" > /dev/null
odmdelete -o sm_menu_opt -q "id = 'csm_inst' AND id_seq_num = '080' AND next_id = 'csm_uninstallms'" > /dev/null
odmdelete -o sm_cmd_hdr -q "id = 'csm_uninstallms'" > /dev/null
odmdelete -o sm_cmd_opt -q "id = 'csm_uninstms_dialog' AND id_seq_num = '020'" > /dev/null
odmdelete -o sm_cmd_opt -q "id = 'csm_uninstms_dialog' AND id_seq_num = '030'" > /dev/null
odmdelete -o sm_cmd_opt -q "id = 'csm_uninstms_dialog' AND id_seq_num = '040'" > /dev/null
1629        7910        5368        1097076598  30007       1           755         37  csm.core.csm_smit_core_stanzas.odmdel `
if [ "$INUSAVE" = "1" ] ; then

odmget -q "id = 'top_menu' AND id_seq_num = '710' AND next_id = 'csm'" sm_menu_opt >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
odmget -q "id = 'csm' AND id_seq_num = '010' AND next_id = 'csm_inst'" sm_menu_opt >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
odmget -q "id = 'csm_inst' AND id_seq_num = '080' AND next_id = 'csm_uninstallms'" sm_menu_opt >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
odmget -q "id = 'csm_uninstallms'" sm_cmd_hdr >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
odmget -q "id = 'csm_uninstms_dialog' AND id_seq_num = '020'" sm_cmd_opt >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
odmget -q "id = 'csm_uninstms_dialog' AND id_seq_num = '030'" sm_cmd_opt >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
odmget -q "id = 'csm_uninstms_dialog' AND id_seq_num = '040'" sm_cmd_opt >> $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd
chmod a+x $SAVEDIR/csm.core.csm_smit_core_stanzas.rodmadd

fi
odmdelete -o sm_menu_opt -q "id = 'top_menu' AND id_seq_num = '710' AND next_id = 'csm'" > /dev/null
odmdelete -o sm_menu_opt -q "id = 'csm' AND id_seq_num = '010' AND next_id = 'csm_inst'" > /dev/null
odmdelete -o sm_menu_opt -q "id = 'csm_inst' AND id_seq_num = '080' AND next_id = 'csm_uninstallms'" > /dev/null
odmdelete -o sm_cmd_hdr -q "id = 'csm_uninstallms'" > /dev/null
odmdelete -o sm_cmd_opt -q "id = 'csm_uninstms_dialog' AND id_seq_num = '020'" > /dev/null
odmdelete -o sm_cmd_opt -q "id = 'csm_uninstms_dialog' AND id_seq_num = '030'" > /dev/null
odmdelete -o sm_cmd_opt -q "id = 'csm_uninstms_dialog' AND id_seq_num = '040'" > /dev/null
   17381       25402       6150        1100300728  30007       1           644         18  csm.core.inventory`
/opt/csm/bin/copycsmpkgs:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 21345
          checksum = "43433    21 "

/opt/csm/bin/csmcorecfg:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 422
          checksum = "22740     1 "

/opt/csm/bin/csmcoreuncfg:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 434
          checksum = "05520     1 "

/opt/csm/bin/installms:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 58645
          checksum = "09733    58 "

/opt/csm/bin/lscmtms:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 4919
          checksum = "41964     5 "

/opt/csm/bin/mgmtsvr:
          owner = bin
          group = bin
          mode = 555
          type = FILE
          class = apply,inventory,csm.core
          size = 10485
          checksum = "45501    11 "

/opt/csm/bin/sprc:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 14833
          checksum = "35095    15 "

/opt/csm/bin/uninstallms:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 18804
          checksum = "48086    19 "

/opt/csm/codebase/WebSMCSMcore.jar:
          owner = bin
          group = bin
          mode = 744
          type = FILE
          class = apply,inventory,csm.core
          size = 13441
          checksum = "43218    14 "

/opt/csm/csmbin/add_KRB5principals:
          owner = bin
          group = bin
          mode = 700
          type = FILE
          class = apply,inventory,csm.core
          size = 55018
          checksum = "34120    54 "

/opt/csm/csmbin/checkrpmprereqs:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 4209
          checksum = "22969     5 "

/opt/csm/csmbin/clogger:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 12538
          checksum = "27553    13 "

/opt/csm/csmbin/diagnostics/DiagnoseHMC:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 531016
          checksum = "40789   519 "

/opt/csm/csmbin/diagnostics/USAGE_and_README:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 4445
          checksum = "44094     5 "

/opt/csm/csmbin/getSourceIP2Target:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 209101
          checksum = "55122   205 "

/opt/csm/csmbin/popk5login:
          owner = bin
          group = bin
          mode = 700
          type = FILE
          class = apply,inventory,csm.core
          size = 49392
          checksum = "48261    49 "

/opt/csm/csmbin/rmnode_client:
          owner = bin
          group = bin
          mode = 555
          type = FILE
          class = apply,inventory,csm.core
          size = 10453
          checksum = "63498    11 "

/opt/csm/csmbin/rmstanza:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 85798
          checksum = "47776    84 "

/opt/csm/install/CSM_CLIENT.bnd:
          owner = bin
          group = bin
          mode = 644
          type = FILE
          class = apply,inventory,csm.core
          size = 68
          checksum = "60661     1 "

/opt/csm/install/CSM_SERVER.bnd:
          owner = bin
          group = bin
          mode = 644
          type = FILE
          class = apply,inventory,csm.core
          size = 174
          checksum = "30232     1 "

/opt/csm/install/csmfilelist_aixV51:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 42
          checksum = "40802     1 "

/opt/csm/install/csmfilelist_aixV52:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 128
          checksum = "53404     1 "

/opt/csm/install/csmrpms_aixV52:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 92
          checksum = "60469     1 "

/opt/csm/install/defs/AIX.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 2702
          checksum = "62965     3 "

/opt/csm/install/defs/Linux-SLES.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 974
          checksum = "54088     1 "

/opt/csm/install/defs/Linux-SLES8.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 1081
          checksum = "27135     2 "

/opt/csm/install/defs/Linux-SuSE.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 966
          checksum = "58153     1 "

/opt/csm/install/defs/Linux-SuSE8.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 1079
          checksum = "59424     2 "

/opt/csm/install/defs/Linux-SuSE8.2.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 975
          checksum = "00673     1 "

/opt/csm/install/defs/Linux.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 2229
          checksum = "21683     3 "

/opt/csm/install/pkgdefs/AIX-5.1.0.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 3996
          checksum = "41677     4 "

/opt/csm/install/pkgdefs/AIX-5.2.0.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 4819
          checksum = "62174     5 "

/opt/csm/install/pkgdefs/AIX.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 2520
          checksum = "05801     3 "

/opt/csm/install/pkgdefs/Linux-RedHat7.2.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 8808
          checksum = "01438     9 "

/opt/csm/install/pkgdefs/Linux-RedHat7.3.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 9430
          checksum = "61395    10 "

/opt/csm/install/pkgdefs/Linux-RedHat8.0.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 9302
          checksum = "43465    10 "

/opt/csm/install/pkgdefs/Linux-RedHat9.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 9324
          checksum = "20584    10 "

/opt/csm/install/pkgdefs/Linux-RedHatAS2.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 11897
          checksum = "18472    12 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-ppc64.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 17778
          checksum = "29515    18 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-x86_64.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 13476
          checksum = "42593    14 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-AS3.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 13230
          checksum = "56043    13 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-ES2.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 11147
          checksum = "19859    11 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-ES3.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 13593
          checksum = "44338    14 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-WS2.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 11139
          checksum = "20366    11 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-WS3-x86_64.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 12002
          checksum = "17977    12 "

/opt/csm/install/pkgdefs/Linux-RedHatEL-WS3.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 11929
          checksum = "61543    12 "

/opt/csm/install/pkgdefs/Linux-SLES7.2.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 8014
          checksum = "02287     8 "

/opt/csm/install/pkgdefs/Linux-SLES8.1-ppc64.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 19187
          checksum = "12262    19 "

/opt/csm/install/pkgdefs/Linux-SLES8.1-x86_64.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 10234
          checksum = "34224    10 "

/opt/csm/install/pkgdefs/Linux-SLES8.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 10030
          checksum = "09881    10 "

/opt/csm/install/pkgdefs/Linux-SuSE8.0.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 9744
          checksum = "37564    10 "

/opt/csm/install/pkgdefs/Linux-SuSE8.1.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 10340
          checksum = "39505    11 "

/opt/csm/install/pkgdefs/Linux-SuSE8.2.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 9663
          checksum = "58856    10 "

/opt/csm/install/pkgdefs/Linux.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 3877
          checksum = "43058     4 "

/opt/csm/lib/libcsm_clog.a:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 46277
          checksum = "06915    46 "

/opt/csm/man/man1/mgmtsvr.1:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 3671
          checksum = "49217     4 "

/opt/csm/msgmaps/IBM.CLOG.Perl.map:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 270
          checksum = "52175     1 "

/opt/csm/msgmaps/csmInstall.csminstall.map:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 85829
          checksum = "65013    84 "

/opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 3719
          checksum = "64587     4 "

/opt/csm/msgmaps/nodecmds.NodeUtils.map:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 1065
          checksum = "00086     2 "

/opt/csm/msgmaps/nodecmds.mgmtsvr.map:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 3268
          checksum = "15221     4 "

/opt/csm/pm/ArchiveUtils.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 180977
          checksum = "33476   177 "

/opt/csm/pm/CLOG.pm:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 35509
          checksum = "01576    35 "

/opt/csm/pm/CSMDefs.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 8094
          checksum = "17225     8 "

/opt/csm/pm/InstallDefs.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 376
          checksum = "32655     1 "

/opt/csm/pm/InstallKRB5Utils.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 49526
          checksum = "05697    49 "

/opt/csm/pm/InstallUtils.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 28196
          checksum = "60834    28 "

/opt/csm/pm/MessageUtils.pm:
          owner = bin
          group = bin
          mode = 555
          type = FILE
          class = apply,inventory,csm.core
          size = 34984
          checksum = "54114    35 "

/opt/csm/pm/NetworkUtils.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 124232
          checksum = "08869   122 "

/opt/csm/pm/NodeUtils.pm:
          owner = bin
          group = bin
          mode = 555
          type = FILE
          class = apply,inventory,csm.core
          size = 110963
          checksum = "56463   109 "

/opt/csm/pm/Rpm/RpmIndex.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 41719
          checksum = "52021    41 "

/opt/csm/pm/ServerUtils.pm:
          owner = bin
          group = bin
          mode = 755
          type = FILE
          class = apply,inventory,csm.core
          size = 96384
          checksum = "24299    95 "

/usr/lib/nls/msg/C/IBM.CLOG.cat:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 735
          checksum = "35117     1 "

/usr/lib/nls/msg/C/csmKRB5.cat:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 5473
          checksum = "40939     6 "

/usr/lib/nls/msg/C/csmSMIT.cat:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 92383
          checksum = "44194    91 "

/usr/sbin/rsct/trctmplts/_CLG.tpl:
          owner = bin
          group = bin
          mode = 444
          type = FILE
          class = apply,inventory,csm.core
          size = 605
          checksum = "24882     1 "

/usr/websm/config/factory_defaults/AppClusterCore.db:
          owner = bin
          group = bin
          mode = 744
          type = FILE
          class = apply,inventory,csm.core
          size = 331
          checksum = "11075     1 "

   449         25958       7910        1100300728  30007       1           644         13  csm.core.size `
/usr/lpp/csm.core/csm.core/1.3.3.5/inst_root/etc/opt/csm 8
/usr/lpp/SAVESPACE 4896
/opt/csm/bin 296
/usr/lib/objrepos 32
/opt/csm/codebase 32
/opt/csm/csmbin 872
/opt/csm/csmbin/diagnostics 1056
/opt/csm/install 40
/opt/csm/install/defs 56
/opt/csm/install/pkgdefs 568
/opt/csm/lib 96
/opt/csm/man/man1 8
/opt/csm/msgmaps 200
/opt/csm/pm 1352
/opt/csm/pm/Rpm 88
/usr/lib/nls/msg/C 208
/usr/sbin/rsct/trctmplts 8
/usr/websm/config/factory_defaults 8
   2882        28942       25402       1100300728  30007       1           644         11  csm.core.al `
./usr/lpp/csm.core/csm.core/1.3.3.5/inst_root/etc/opt/csm/csmkrb5.conf.default
./opt/csm/bin/copycsmpkgs
./opt/csm/bin/csmcorecfg
./opt/csm/bin/csmcoreuncfg
./opt/csm/bin/installms
./opt/csm/bin/lscmtms
./opt/csm/bin/mgmtsvr
./opt/csm/bin/sprc
./opt/csm/bin/uninstallms
./opt/csm/codebase/WebSMCSMcore.jar
./opt/csm/csmbin/add_KRB5principals
./opt/csm/csmbin/checkrpmprereqs
./opt/csm/csmbin/clogger
./opt/csm/csmbin/diagnostics/DiagnoseHMC
./opt/csm/csmbin/diagnostics/USAGE_and_README
./opt/csm/csmbin/getSourceIP2Target
./opt/csm/csmbin/popk5login
./opt/csm/csmbin/rmnode_client
./opt/csm/csmbin/rmstanza
./opt/csm/install/CSM_CLIENT.bnd
./opt/csm/install/CSM_SERVER.bnd
./opt/csm/install/csmfilelist_aixV51
./opt/csm/install/csmfilelist_aixV52
./opt/csm/install/csmrpms_aixV52
./opt/csm/install/defs/AIX.pm
./opt/csm/install/defs/Linux-SLES.pm
./opt/csm/install/defs/Linux-SLES8.1.pm
./opt/csm/install/defs/Linux-SuSE.pm
./opt/csm/install/defs/Linux-SuSE8.1.pm
./opt/csm/install/defs/Linux-SuSE8.2.pm
./opt/csm/install/defs/Linux.pm
./opt/csm/install/pkgdefs/AIX-5.1.0.pm
./opt/csm/install/pkgdefs/AIX-5.2.0.pm
./opt/csm/install/pkgdefs/AIX.pm
./opt/csm/install/pkgdefs/Linux-RedHat7.2.pm
./opt/csm/install/pkgdefs/Linux-RedHat7.3.pm
./opt/csm/install/pkgdefs/Linux-RedHat8.0.pm
./opt/csm/install/pkgdefs/Linux-RedHat9.pm
./opt/csm/install/pkgdefs/Linux-RedHatAS2.1.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-ppc64.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-x86_64.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-AS3.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-ES2.1.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-ES3.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-WS2.1.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-WS3-x86_64.pm
./opt/csm/install/pkgdefs/Linux-RedHatEL-WS3.pm
./opt/csm/install/pkgdefs/Linux-SLES7.2.pm
./opt/csm/install/pkgdefs/Linux-SLES8.1-ppc64.pm
./opt/csm/install/pkgdefs/Linux-SLES8.1-x86_64.pm
./opt/csm/install/pkgdefs/Linux-SLES8.1.pm
./opt/csm/install/pkgdefs/Linux-SuSE8.0.pm
./opt/csm/install/pkgdefs/Linux-SuSE8.1.pm
./opt/csm/install/pkgdefs/Linux-SuSE8.2.pm
./opt/csm/install/pkgdefs/Linux.pm
./opt/csm/lib/libcsm_clog.a
./opt/csm/man/man1/mgmtsvr.1
./opt/csm/msgmaps/IBM.CLOG.Perl.map
./opt/csm/msgmaps/csmInstall.csminstall.map
./opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map
./opt/csm/msgmaps/nodecmds.NodeUtils.map
./opt/csm/msgmaps/nodecmds.mgmtsvr.map
./opt/csm/pm/ArchiveUtils.pm
./opt/csm/pm/CLOG.pm
./opt/csm/pm/CSMDefs.pm
./opt/csm/pm/InstallDefs.pm
./opt/csm/pm/InstallKRB5Utils.pm
./opt/csm/pm/InstallUtils.pm
./opt/csm/pm/MessageUtils.pm
./opt/csm/pm/NetworkUtils.pm
./opt/csm/pm/NodeUtils.pm
./opt/csm/pm/Rpm/RpmIndex.pm
./opt/csm/pm/ServerUtils.pm
./usr/lib/nls/msg/C/IBM.CLOG.cat
./usr/lib/nls/msg/C/csmKRB5.cat
./usr/lib/nls/msg/C/csmSMIT.cat
./usr/sbin/rsct/trctmplts/_CLG.tpl
./usr/websm/config/factory_defaults/AppClusterCore.db
1607        30658       25958       1100300725  30007       1           644         16  csm.core.fixdata`
fix:
	name = IY55834
	abstract = FIXES AND UPDATES FOR CSM 1.3.3.0
	type = f
	filesets = "csm.core:1.3.3.2\n\
csm.dsh:1.3.3.2\n\
csm.server:1.3.3.2\n\
"
	symptom = ""

fix:
	name = IY47873
	abstract = Service support required for CSM 1.3.2
	type = f
	filesets = "csm.core:1.3.3.2\n\
csm.dsh:1.3.3.2\n\
csm.server:1.3.3.2\n\
"
	symptom = ""

fix:
	name = IY50991
	abstract = Required Maintenance Upgrade for CSM 1.3.2.
	type = f
	filesets = "csm.core:1.3.3.2\n\
csm.server:1.3.3.2\n\
"
	symptom = ""

fix:
	name = IY56212
	abstract = FIXES AND UPDATES FOR CSM 1.3.3.1
	type = f
	filesets = "csm.core:1.3.3.2\n\
csm.server:1.3.3.2\n\
"
	symptom = ""

fix:
	name = IY58665
	abstract = Support of several fixes for CSM 1.3.3.2 for AIX
	type = f
	filesets = "csm.client:1.3.3.2\n\
csm.core:1.3.3.2\n\
csm.dsh:1.3.3.2\n\
csm.server:1.3.3.3\n\
pssp.pssp_to_csm:1.1.0.2\n\
"
	symptom = ""

fix:
	name = IY58282
	abstract =  UPDATENODE REMOVES ENTRIES FROM /ETC/XTAB
	type = f
	filesets = "csm.core:1.3.3.3\n\
csm.dsh:1.3.3.3\n\
"
	symptom = ""

fix:
	name = IY60036
	abstract = LX: Provide a way to not set up dhcpd.conf from csmsetupks/yast
	type = f
	filesets = "csm.core:1.3.3.3\n\
"
	symptom = ""

fix:
	name = IY60039
	abstract = <scaling> need env to skip isrv sync
	type = f
	filesets = "csm.core:1.3.3.3\n\
"
	symptom = ""

fix:
	name = IY62825
	abstract =  IF DU -S ON CDROM MOUNT POINT RETURNS 0 CSMSETUPYAST EXITS
	type = f
	filesets = "csm.core:1.3.3.4\n\
"
	symptom = ""

fix:
	name = IY64638
	abstract =  CANNOT REJECT OR COMMIT CSM 1.3.3.4
	type = f
	filesets = "csm.core:1.3.3.5\n\
"
	symptom = ""

   390         0           28942       0           0           0           0           0   `
11          68          188         564         1028        2390        5368        6150        7910        25402       25958       28942       productid csm.core.copyright csm.core.1330.odmdel csm.core.config_u csm.core.csm_smit_core_stanzas.odmadd csm.core.csm_smit_core_stanzas.unodmadd csm.core.csm_smit_core_stanzas.odmdel csm.core.inventory csm.core.size csm.core.al csm.core.fixdata /defs/k[ f0PBm  7u       AAAAAA                   ./usr/lpp/csm.core/csm.core/1.3.3.5/inst_root/liblpp.a r                   m          <aiaff>
538         0           68          400         0           224         400         0           1100300729  30007       1           644         18  csm.core.inventory`
/etc/opt/csm/csmkrb5.conf.default:
          owner = bin
          group = bin
          mode = 744
          type = FILE
          class = apply,inventory,csm.core
          size = 2117
          checksum = "07650     3 "

35          538         68          1100300729  30007       1           644         11  csm.core.al `
./etc/opt/csm/csmkrb5.conf.default
 67          0           400         0           0           0           0           0   `
2           68          400         csm.core.inventory csm.core.al  kD j0PB  7u     E  q@q@q@             E      ./usr/lpp/csm.core/csm.core/1.3.3.5/inst_root/etc/opt/csm/csmkrb5.conf.default a                             # @(#)34        1.6     src/csm/krb5/cfg/csmkrb5.conf.default, setup, csm_rveg, rveg0414a 10/27/03 10:02:34
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#
# This default configuration file provides paths that will be searched
# for the location of the installed Kerberos API libraries.
# Due to the many distributions of Kerberos supported on Linux, this
# configuration file allows the administrator to customize
# where the Linux Kerberos API libraries are installed and supply that
# information to the CSM Kerberos configuration scripts and executables.
# For AIX, only the NAS ( Network Authentication Service) version
# of Kerberos, shipped on the AIX Expansion Pack, 
# is supported and this file is not used to determine location
# of the libraries.
# For Linux, only the Kerberos distributed with the Linux OS
# is supported. For SuSE/SLES this is Heimdal Linux in the heimdal-* packages 
# distributed by SLES.   For RedHat this is the krb5-* packages distributed
# with RedHat.
#
# If this file needs to change, then the new configuration file should be 
# stored in /etc/opt/csm/csmkrb5.conf.  The routines will check for 
# /etc/opt/csm/csmkrb5.conf first and use it, if it exists.
# This will prevent changes being removed on a new installation.
# The administrator  must distribute changes to the nodes using CFM.
#
#[libs]
#  <list of paths to the Kerberos api shared library on Linux>
# We must have a path to the libkrb5.* and the libkadm5clnt.* libraries
#
# Only one path per line is allowed.
# Lines beginning with "#" are considered comments
#
[libs]
/usr/kerberos/lib/libkrb5.so
/usr/kerberos/lib/libkrb5.so.3.1
/usr/kerberos/lib/libkrb5.so.3.0
/usr/lib/libkrb5.so.17
/usr/kerberos/lib/libkadm5clnt.so
/usr/kerberos/lib/libkadm5clnt.so.5.0
/usr/lib/libkadm5clnt.so.4 
   k]  1PB$  7u       q@q@q@                   ./usr/lib/nls/msg/C/IBM.CLOG.cat .5/inst                   $              ISO8859-1               )           %     &    "  <  N  _         	 )   
         /      3  <  -  p         2653-800 Internal library error %1$d.%2$s 2653-801 Memory allocation error 2653-802 Unable to start RMC session. 2653-803 IBM.AuditRM connection error. 2653-804 Unable to fetch nodes ID. This subsystem is defined by CLOG for recording significant event information. Component ID Component ID Component ID of system logging this entry Message text Message text Message text from the system logging this entry 2653-975 Bad, missing, or unusable clogger command. %1$s 2653-976 Internal error %2$s in CLOG.pm. 2653-977 Invalid parameter %1$s. 2653-978 Missing parameter%1$s. mk 1PB$  7u     a  Qq@Qq@Qq@             a      ./usr/lib/nls/msg/C/csmKRB5.cat                    $              ISO8859-1             J    p          2              	  #  ) 	 '  M 
 .  u  2    -    (      .  [  G  N    #    1      H  6  e  %    -    7    ;  (  -  d  -    H    /  	  4  9  8  n  8     0   ! <   " &  N # $  u $ E   % C   & 5  	$ ' ;  	Z ( 0  	 ) 5  	 * T  	 + I  
R , %  
 - 0  
 . %  
 / %   0    ? 1 '  ` 2 :   3 n   4   2 5 x   6 -   7 7   8 #   9 Y   : i  l ; V   < 3  - = n  a >    ? Z  Q @ R   A Y   B 1  Y C 7   D 0   E 3   F A  ( G   j H    I    J   Usage: k5rcmdtgt [-h]
 %1$d  Adding: %1$s to file:%2$s.
 Did not add:%1$s to file:%2$s. It already exists.
  %1$s Invoked.
 Usage: popk5login [-h | -v]
 Usage: add_KRB5principals [-h]
 Enter the KRB5 administrator name:
 Enter the KRB5 administrator password:
 Please enter a valid KRB5 administrator name:
 Please enter a valid KRB5 administrator password:
 Creating %1$s principal with default policy.
 Creating %1$s principal with no policy.
 %1$s principal created.
 The %1$s library does not support policies. The principals will be created with no policy.
 The %1$s principal could not be created. Review the log for more information.
 The %1$s principal already exists.
 There is no CSMKRB5Principal attribute in %1$s .
 Usage: sendkeytab [-h | -n]
 Transfer of the KRB5 keytab completed with no errors.
 Transfering the KRB5 keytab to %1$s.
 2657-001 This command invoked as: %1$s %2$s 
 2657-002 The argument is not valid : %1$s was entered.
 2657-003 Could not read the krb5 configuration file: %1$s.
 2657-004 Could not  create backup log: %1$s.
 2657-005 %1$s exiting with Return Code %2$d.
 2657-006 Could not find default_realm in krb5 configuration file: %1$s.
 2657-007 Call to %1$s  had error return: %2$i.
 2657-008  The CSM keytab file: %1$s does not exist.
 2657-009  Error on dlopen of library: %1$s errno= %2$d.
 2657-010  Could not establish address for %1$s in %2$s.
 2657-011  Could not create the directory: %1$s.
 2657-012  KRB5CCNAME credential cache: %1$s does not exist.
 2657-013 Call to %1$s had error: %2$s
 2657-014 Could not open file: %1$s.
 2657-015  The keytab file: %1$s does not exist. Cannot send to node.
 2657-016  The keytab file: %1$s is not valid. Cannot send to node.
 2657-017  Memory allocation did not succeed in %1$s.
 2657-018  Error reading public key for %1$s from THL file.
 2657-019  Error reading KRB5 keytab file: %1$s.
 2657-020  Error returned from %1$s return code=%2$d.
 2657-021  Error preparing the KRB5 keytab file: %1$s. Can not transfer to the node.
 2657-022  Error adding the KRB5 key to the krb5.keytab file on the node.
 2657-023  Error reading private key.
 2657-024  Error writing KRB5 keytab file: %1$s.
 2657-025 Call to %1$s returned: %2$s
 2657-026 Call to %1$s returned: %2$d
 2657-027 Unable to remove %1$s.
 2657-028 The %1$s file does not exist.
 2657-029 Could not get CSM KRB5 principal name from %1$s.
 2657-030 Could not create CSM KRB5 principal in .k5login file. The name was not available from the %1$s file.
 2657-031  Could not find the %1$s shared library. For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library.
 2657-032  The %1$s  and the %2$s configuration files do not exist. Cannot determine the path to the KRB5 api libraries.
 2657-033  Memory Allocation did not succeed.
 2657-034  chmod command on file %1$s did not succeed .
 2657-035  The file %1$s is empty .
 2657-036  The file %1$s line $2$s has syntax error.  Full path to library not provided .
 2657-037  Could not create the  %1$s KRB5 principal and keytab. Review this log for further information.
 2657-038  Could not establish a writable operations routine for krb5_kt_add function.
 2657-039  Node name missing on call to sendkeytab.
 2657-040  Transfer of KRB5 keytab completed with errors. Check /var/log/csm/process_krb5_key.log on the node.
 2657-041  An error occurred while preparing the keytab for node:%1$s. Check /var/log/csm/prepare_krb5_key.%1$s.log for details.
 2657-042  Could not create log:%1$s for sendkeytab. Keyfile transfer will not take place.
 2657-043  Input keydata not valid or null.  Keyfile transfer will not take place.
 2657-044  Unable to start session with host: %1$s. Keyfile transfer will not take place.
 2657-045  Unable to end session with host: %1$s.
 2657-046  Error code from RMC : %1$d, message is : %2$s 2657-047  Invalid data received in updatekeytab
 2657-048 %1$s received length=%1$d, version = %2$x
 2657-049 %1$s The principal name or password may not be correct.
 2657-050 The contents of the %1$s file are not in the correct format. Rerun csmconfig -K with your option to regenerate the file.
 2657-051 The keytab file %1$s for the %2$s principal is missing. You must delete the principal from the KRB5 database and run definenode or csmconfig -K with your option to recreate the principal and keytab file.
 2657-052 The keytab file %1$s for the %2$s principal is empty. You must remove the empty keytab file, delete the principal from the KRB5 database and run definenode or csmconfig -K with your option to recreate the principal and keytab file.
 2657-053 Automatic keyfile update is not supported using Heimdal Kerberos Libraries. You can used the transferred keytab in %1$s and update the krb5.keytab file manually.
 n]
 Trak 1PB$  7u     h @@@             h     ./usr/lib/nls/msg/C/csmSMIT.cat                    $              ISO8859-1            Q 
   !  X  "`  ,  "  b  "  M  #I  Y  #    #    $w  )  $  ,  $  #  $    %  1  %$  /  %V  '  %  )  %  #  %  1  %   `  &. ! 2  & " )  & # c  & $ p  'P % )  ' & 7  ' ' ?  (# ( <  (c ) <  ( * 8  ( + )  ) , #  )@ - .  )d . +  ) / G  ) 0 2  * 1 "  *: 2 K  *] 3 #  * 4 -  * 5 R  * 6 )  +N 7 7  +x 8 <  + 9 ?  + : <  ,- ; 8  ,j < ,  , =   , > <  , ? :  -' @ 4  -b A (  - B )  - C P  - D )  .; E H  .e F @  . G F  . H 8  /6 I 1  /o J W  / K U  / L   0O M n  0 N )  1A O G  1k P ,  1 Q 1  1 R 5  2 X   2H Y S  2] Z X  2 [ Y  3
 \ `  3d ] .  3 a ?  3 b 2  44 c 6  4g d 1  4 e *  4 f -  4 g   5) j ^  5G k /  5 l (  5 m (  5 n >  6( o +  6g p )  6 q (  6 r (  6 s :  7 t C  7J u )  7 v H  7 w ,  8 x )  8. y %  8X    8~  8  8  X  8  Y  9%  `  9  .  9  ?  :  2  :O  6  :  )  :  *  :  7  ;    ;F  #  ;d  0  ;  )  ;  $  ;  L  <  :  <U    <  H  <    <    =  !  =$    =F  n  =c  h  =  )  >;  (  >e  7  >  V  >  )  ?    ?G  7  ?]  <  ?  )  ?    ?  )  @    @9    @W  E  A  I  AS  )  A    A  t  B    C7  &  C  _  C  e  D\  s  D  s  E6  g  E  U  F  T  Fh  A  F  3  F  T  G3  f  G  g  G    HW  y  H  O  I]  a  I  ,  J  L  J<  R  J  ?  J  U  K  &  Kr  5  K  m  K  ;  L=   Ly  F  M  L  M  T  N&  '  N{    N  p  N  r  O1  ^  O     P  %  P  4  P*  4  P_    P    P p  Q    S   ;  S  C  S  8  T)  *  Tb  2  T  '  T    T  s  U    U A  V  A  W  k  X2  G  X    X  h  Y =  Z	    [G   \  /  ]!  Q  ]Q ^  ] c  ^ :  ^f" 6  ^, 6  ^6 v  _7 f  _8 d  _9 E  `R: z  `; a  a<y  au= 8  b> V  c(? O  c@ t  cA |  dDB   dC   eD c  fFE5  fF c  iG <  jDH U  jI H  jJ g  k K   kL   lM w  mN p  nO   n~P   ovQ D  pfR   pS Q  qgT b  qU 1  rV >  rNW 9  rX F  rY +  sZ!  s:[   t\\O  t] 6  w;^    wr_   w`   xa e  y-b   yc   zd   ze   {f y  |g   |h ?  }i  ~j F  k   Cl   m%  nk  o r  3p   q   r   s   ot >  fu Z  v    w   x k  ly   z z  r{   | /  }:  ~ v            %   /   1   1  , 9  ^ 9   ;   7   N  F /        J i    wt   V   r  K 9        9    )      j   <   c  J d   h   8  |         i   B)           t  uK     6 J  O    $        h    >   h     1 '   3   L  h  ] y   "  @   c 7  2 !  j     6   1  
     ! R   n   ^  d b     &    |     # S   P  ) 4  z      B U     -    B  } }     > \   P  s   O   8  3 6  l    h  O w    0       Q   h  ` %   *   /   !  J "  l A  ď &   9   /  2   b !  Ł P  ţ :   ,  /   \ 5  | 5  Ʋ >   -  ' 5  U ^  ǋ 0   C   O  _   ȯ      P    n    ɏ   ɩ    #   $     #   ; '  U   }	    ʚ
   ʻ         \     < a  C  @ )  ф e  Ѯ /   7  D }  |        h B  p d  ֳ A   O  Z <  ת N      6! >  " "  # '  =$ R  e% X  ٸ& ]  'o  o( A  )  !*  ޭ+Z  ,1  -K  H. 2  /   0 O  ]1 v  2 u  $3   4  &5   B6   7 |  P8   9 ;  O:   ;   <   =   >   ? +  @ ,  A *  B 4  'C   \D :  E (  @F 3  iG   H)  oI(  J   K   EL z  .M H  Nh  O +  [P   Q  R   ,S Y  T -  $U c  RV N  W Z  X   `Y   Z )  [ ,  &\ #  S] 2  w^ /  _ (  ` )  a ,  -b b  Zc o  d = -e H kf L g R h = Ti 8 j A k  l H m X n 1o G Fp 9 q 9 r > s  At Uu  v ^ w d 	(x n 	y M 	z  
J{ t k| 4 } $ ~ 5 : A p  n 5 :  B  7 " ) Z <  6  [  W T d  l  1 ~ #  D  + # E  i       =  :    b M   p Z% D    "6 F " ; #7  #s  $R % $ '  '  ( Y )9 U )  ) * *u  *  + ,l . + / r /  0! _ 0    1   1  # 1%    1I   1j   1x   1   1 	  1 
 # 1    1   1    2   26  , 2H  ' 2u   2  , 2   2  - 2   3*   3E  : 3]  / 3   3   3   3  4 4  ) 4O   4y   4    4 ! ' 4 " . 4 #  5 $  5( %  5< &  5Y '  5w (  5 )  5 *  5 +   5 ,  6 - * 6 .   6H /  6i 0  6x 1 ( 6 2 # 6 3  6 4  6 5  6 6  7 7 ( 7- 8  7V 9 " 7t : - 7 ; 5 7 < 8 7 = F 84 >  8{ ?  8 @  8 A  8 B  8 C  8 D  8 E  9 F ( 9/ G 	 9X H  9b I , 9n J  9 K & 9 L  9 M " 9 N  : O 	 : P  :$ Q  :0 R  :? S  :V T  :^ U  :k V 	 : W  : X  : Y 
 : Z 
 : [  : \  : ] ( : ^ ' ; _ ' ;- `  ;U a , ;p b  ; c  ; d  ; e ' ; f % < g K <: h J < i  < j % < k  = l ' =" m & =J n  =q x * =w  2 =    =  ( =  ( >  0 >H   >y  % >  # >  ! >   >  * ?    ?=   ?^  * ?b  + ?   ?  , ?  # @   @*  + @H  & @t   @   @   @   @   @   @   A    A   A"   A0   A>   AV   Aq   A   A   A   A   A   A   B   B   B!   B(   B9   B>   BJ   Bi  M Bu  - B  ( B   C   C.  ( C<   Ce   C   C  % C  # C  . D   D3  2 DO   D  # D   D  > D  # E   E5   ER  % Eq   E   E  2 E  
 E   F   F   F!   F5   FJ  	 FW   Fa   Fq   F  % F  - F  6 F  # G$  7 GH  / G   G    G   G ! H
 , H, % HY $ H " H / H ' H	  I
 . I7 # If # I ! I ' I  I  J  J2  JG  J_  Jv  J * J % J ) J  K" - K= / Kk  K 4 K % K  L   L!  L="  LJ#  LV$ 
 Lh%  Ls&  Lz'  L(  L)  L*  L+ ) L, 0 M- ' M5. & M]/  M0  M1  M2  M3  M4 4 N 5 " N56 " NX7 , N{8  N9  N:  N;  N<  O=  O>  O4?  ON@  OgA  OB  OC ) OD 4 OE  PF  P1G 
 PNH  PYI  PpJ  PK % PL ( PM ' PN # QO  Q;P  QVQ % QoR 0 QS & QT  QU 4 RV  R8W " RMX  RpY  RZ 2 R[  R\ . R]  S^  S0_  SI`  S^a  Spb ! Sc " Sd  Se  Sf 6 Sg  T%h 8 T8i  Tqj 9 Tk % Tl  Tm  Un  Uo " U-p . UPq 4 Ur H Us  Ut , Vu 0 V@v 4 Vqw  Vx ! Vy  Vz 	 V{  W|  W}  W5~  WH 	 We  Wo  W  W  W  W  W  W  X	  X$  XC   Xa  X  X  X * X  Y   Y  Y:  YZ  Yq  Y  Y  Y " Y " Y  Z   Z#  ZD  Z_  Zy 	 Z $ Z  Z  Z  Z  Z  Z ! [ , [1 1 [^ 9 [ L [ ' \ & \? & \f  \ * \  \  \  ]  2 ]  ]J  ][  ]g  ]u " ] 0 ] / ] 7 ^ 4 ^L , ^   ^ # ^ " ^   _ $ _7 # _\  _  _  _  _  _  ` % ` & `A ' `h  ` $ `     `   `   `   `   `  H   a   a   a*   aH   ah   a   a   a 	  a 
  a   a   b   b$   b>   bX   br   b   b   b   b   b   b   c   c    c2  # cL   cp   c  % c  6 c   d   2 d ! / dO " " d #  d $  d %  d &  d '  d (  e )  e( *  eC +  e^ ,  ey -  e .  e /  e 0  e 1  e 2  f 3  f/ 4  fB 5  fY 6 ( fv 7  f 8 0 f 9 4 f : 2 g ; 6 gQ < 8 g = 9 g >  g ?  h @  h+ A  hA B  h[ C  hr D  h E  h F  h G  h H  hTop level panel for all CSM cluster interfaces. This leads 
to menus for 'CSM Install', 'Manage Cluster Data', and 'CSM 
Hardware Control'. Perform the tasks that are necessary to configure the 
system as a CSM Management Server Uninstall the CSM management server software Update (or install) CSM software packages and CFM 
configuration files on the nodes of the cluster Create NIM machine definitions corresponding to CSM 
cluster node definitions Create NIM machine group definitions corresponding 
to CSM cluster node group definitions Set up the CSM customization scripts so that they may 
be run by NIM on the cluster node during a base operating 
system installation Top level NIM panel Define a node that will be managed by CSM Change a node definition in the CSM database Remove a node from the CSM database Display CSM node definitions. Manage node group definitions in the CSM database Define a node group that will be managed by CSM Change a node group in the CSM database Remove a node group from the CSM database Display CSM node group definitions. Specify whether or not to copy software packages. Specify one or more directories, separated by colons, 
where installation packages can be found. Use the force option when installing the software. Display verbose messages to standard out. Remove the nodes before uninstalling the management server. 
(Issues 'rmnode' before uninstalling.) Remove and clean up nodes before uninstalling the management 
server.  (Issues 'rmnode -u' before uninstalling.) Display verbose messages to standard out. Set up CSM customization scripts for all the CSM nodes. Setup is performed for all nodes that are in "PreManaged" mode. Setup is performed for all nodes that are in "Managed" mode. Comma separated list of cluster node host names to be setup. Comma separated list of cluster group names to be setup. Display verbose messages to standard out. Updates are performed on all nodes. Updates are performed on all PreManaged nodes. Updates are performed on all Managed nodes. A list of node hostnames (or IP addresses) on which to run the command. Update the nodes that are members of these groups. Force the updates of CSM filesets. Only report what would be done by the command.  Do not perform any updates. Installs/updates the CSM code sets. Update the configuration files from /cfmroot. List of options to forward to CFM. Options must be enclosed 
within double quotes. Display verbose messages to standard out. Set up CSM customization scripts for all the CSM nodes. Setup is performed for all nodes that are in "Managed" mode. Setup is performed for all nodes that are in "PreManaged" mode. Comma separated list of cluster node host names to be setup. Comma separated list of cluster group names to be setup. Specifies the type of machine being defined. Specify NIM network name. Specifies the ring speed of the client's token-ring adapter. Specifies the cable type of the client's ethernet adapter. Specifies the platform of the machine being defined. Specifies the kernel type of the client. Display verbose messages to standard out. Specifies one or more CSM node groups to be used to create
or update NIM groups. Display verbose messages to standard out. Either create the node definitions or just display them to standard out. The name of the file which contains node definition information. Specifies the IP address or host name for the first node 
to be added. Specifies how many nodes to define.  The default is one. Specifies the list of console server definitions. Specifies the list of hardware control points and their 
associated service processors. Specifies the name of a hostname mapping file that may be used
to define the node(s). The list of node definitions that would be created is displayed 
to standard out and is re-directed to a this node defintion file. After the nodes are defined, run the 'updatenode' command to install
the nodes that were successfully defined. Display verbose messages to standard out. Hostname of the management server machine as known by the managed node. The CSM version to be installed on the node. The name of the operating system to be installed. The name of the distribution version to be installed. Installation method. Machine address of the nodes network adapter that will be
used to install the node. The type of the adapter which will be used during the network 
installation of the node. The speed of the adapter which will be used during the network 
installation of the node. The duplex value of the adapter which will be used during the 
network installation of the node. Power method used to perform hardware control. Hostname of the network adapter for the hardware control point. Identifier associated with the node power control. Number associated with the console port for this node. The console method used to open the node console. Number associated with the console server. Hostname or IP address of the console server. Logical partition Identifier. Allow a a node to request to be managed.
(Normally it is not necessary to set this attribute.) A node is either in PreManaged or Managed mode. Comma separated list of nodes to remove. Comma separated list of CSM node groups. Full path name of file containing list of nodes to be removed. Perform cleanup on the nodes being removed. Display verbose messages to standard out. Comma separated list of nodes to change. Comma separated list of CSM node groups. Full path name of file containing list of nodes to change. Changes the nodes that match the "where" part of the select string. Display verbose messages to standard out. Hostname of the management server machine as known by the 
managed node. The CSM version to be installed on the node. Name of operating system to be installed. Distribution version to be installed. Installation method. Machine address of the network adapter used for install. The type of the adapter which will be used during the network 
installation of the node. The speed of the adapter which will be used during the network 
installation of the node. The duplex value of the adapter which will be used during the 
network installation of the node. Power method used to perform hardware control. Hostname of the network adapter for the hardware control point. Identifier associated with the node power control. Number associated with the console port for this node. Console method used to open node console. Number associated with the console server. Hostname of the network adapter for the console server. Logical partition Identifier. Allow a request to manage the node. Change nodes in the PreManaged or Managed table. Comma separated list of nodes to display. Comma separated list of node groups. Display node definitions that match the "where" part of the  
select string. Full path name of file containing list of nodes to display Display all attributes. Display the specified attributes. (Comma separated list of 
attributes). Display IP address. Display output in long format. Display the ping status of nodes. Display the short host name. Specify whether or not to display the name of the node at the 
beginning of each row of data that is returned. Specifies the delimiter that should be used to separate items 
within a row. The default is a comma (,). Display verbose messages to standard out. Specify a name to use for the new group. A comma separated list of node names to add to a group. Specifies the "where" clause of a select string to be used 
to search the nodes table. Display verbose messages to standard out. Node Group to modify. A comma separated list of node names to add to a group. A comma separated list of node names to remove from a group. Display verbose messages to standard out. Remove node group. Display verbose messages to standard out. List all defined node groups. List the definition of all groups.  Each line of output will 
represent 1 group and will display its name, the validation setting,
the type, and the definiton of the group contents. Search for this node.  Display all the groups that contain this node. Display the "where" clause of the select string set for this 
node group. Display verbose messages to standard out. Selecting this menu option leads to menus for installing and uninstalling 
the management server, updating CSM on the cluster nodes, converting CSM to 
NIM nodes/groups, defining CSM nodes, the CSM setup of NIM, and the network 
installation manager. Selecting this menu option leads to menus for defining, 
 modifying, removing, and displaying CSM nodes/node groups. Options for power control, network booting, hardware 
and network adapter information.  This is the top level 
panel for all CSM hardware control interfaces. One more way to get to the NIM panels. Selecting this menu leads to options to define, modify, remove, or 
display a CSM Cluster Node. Selecting this menu leads to options to define, modify, remove, or 
display a CSM Cluster Node Group. Option to obtain network adapter information and optionally 
write network adapter information to the CSM Database. Causes one or more nodes to boot over the network using the 
adapter information for each node in the CSM Database. Option to query one or more hardware control points 
to obtain information about the nodes they manage. Specifies the power method which will be used to contact the hardware 
control point. Specifies one or more hardware control point hostnames 
on which to run the command. Optionally allows to write the information to a file for editing. Specifies the type of adapter which will be listed. Option to return the first adapter of a given type to 
successfully ping the server. For the adapter discovery option, the network speed must be 
given.  Valid for Ethernet networks only. For the adapter discovery option, the network duplex must be 
given.  Valid for Ethernet networks only. For the adapter discovery option, provide the Server IP address 
to ping to. Defaults to the Management Server IP address if not 
provided. For the adapter discovery option, provide the Gateway IP address 
to ping through. Defaults to "0.0.0.0" if not provided. Option to return all adapters of a given type to 
successfully ping the server. Specifies a file which will be used as input instead of acquiring the information from the nodes. Perform the adapter collection on all nodes. Enter a comma-separated list of nodes to perform the 
adapter collection on. Enter a comma-separated list of node groups to perform the 
adapter collection on. Writes the available adapter information into the CSM database. Output file. If given, command output is written to this 
file instead of the screen. Perform the network boot on all nodes. Perform the network boot on a specific list of nodes. Specifies one or more nodegroups which will be expanded to a list of nodes which will perform a network boot. Controls remote power for Cluster Systems Management nodes. Choose an Action: 
	on           -- power the node(s) on 
	off          -- power the node(s) off 
	reboot       -- reboot the node(s) 
	resetsp_hcp  -- reset the service processor for the Hardware 
			Control Point(s) 
	resetsp_host -- reset the service processor for the node(s)  Enter a comma-separated list of nodes to perform 
the Power Action on. Enter a comma-separated list of node groups to perform 
the Power Action on. Adds all managed nodes defined in Cluster System 
Management (CSM) to the node list. Display verbose messages to the screen. 				Press Enter to continue. This command is used to store the user id and password 
used by internal programs to access the remote hardware. Enter the host name or IP address of the Hardware Control 
Point, or the name of the Management Processor Text ID. Enter the user ID associated with the Hardware Control 
Point or Management Processor Text ID.  Enter a comment. (Must be in quotes.) NIM groups are created or updated for all CSM groups Specify whether or not to update existing NIM groups Change all the nodes. Prints a group.  If no options are given, and a group is specified, 
this is the default option.  If this option is specified and no group 
is given (or the 1st group is "*"), then the membership of all the groups 
is displayed. Specifies a file that contains a list of groups to be defined.
Each line of the file should contain the group name followed by a colon,
then the following three fields separated by commas:  
type (static or dynamic), the validation setting (validated or 
not validated), and the definition of the group contents (either 
a select string or the unexpanded member list). The names in the group will represent generic names, they do not 
have to be actual node names in the CSM cluster.  This option can 
only be used when creating a group. The name of the distribution to be installed. (Linux only.) The machine architecture of the node to be installed. (Linux only.) The version of the kernel to be installed. (Linux only.) The disk to be used for node installation. The type of disk to be used for node installation. Display the member list for all groups. Specifies a file that contains a list of node names. 
The file can contain multiple lines and each line can have 
one or more node names, separated by spaces. Installs/updates the Linux RPMS stored under the /csminstall  
subdirectory corresponding to the target Linux node. Forwards options to the SMS command. The following are the  
allowed flags:  [--noinsdeps] [-i | --install packagename(s)] 
[-e | --erase [[--deps] | [--nodeps]] packagename(s)]  Exchange RSCT public keys between the node and management 
server. Only use this option if the RSCT public key of 
either of the machines has changed.  When this option is  
used you must trust your network at the time to be sure  
that a rogue machine is not going to insert their public  
key in place of the real node. Returns LCD values for nodes with the csp and hmc 
power methods. Specify the name of the PowerMethod that will be associated
with the user ID and password that are entered. Get information about all the adapters associated with the given nodes. Creates or updates the specified stanza file.  This file is in the correct format to be used with the Network Installation Manager(NIM) utility to configure additional network adapters. This option will add a node to the CSM cluster and do certain updates as described in CSM documentation. This option is used to force the netboot command 
to perform a Broadcast Boot, overriding 
the InstallAdapterGateway managed node attribute, if 
defined.  Unless the network routers are configured 
to route broadcast packets, the install server must 
be located on the local network segment when this 
option is used. This field specifies the hostname or IP address of 
the Install Server, and is only used during a Directed 
Boot operation.  If not supplied for a Directed Boot, 
the hostname of the Management Server is used. This address specifies the IP address of the network 
gateway used to reach the Install Server, and is used 
during a Directed Boot operation.  Specify an address 
when the Install Server and target node to be installed 
are located on different network segments. Uninstalls Management Server without prompting. This option updates definitions for nodes that 
are have previously been defined. This option specified to not prompt for the node 
password, even if rsh/ssh is not configured. This option forces the updates of CSM filesets 
and performs a binary check on configuration files. This option displays output in definenode (stanza) format. This option displays output sorted by first attribute. This option displays the common members of two groups. This option displays the the members of the first group 
specified that are not members of the second group specified. Selecting this menu leads to additional CSM commands
dsh, dcp, probes, backup and restore of CSM data. Select this option to accept CSM license and perform 
additional configuration of Management Server. Select this option to Accept CSM License, display the 
configuration. Select this option to Perform Additional configuration of 
Management Server like setting of remote shell, cluster ID etc. Select yes to display the current CSM version on the 
Management Server, default selection is no. Input the attribute to display or select all to display 
all the attributes . The default is none.
The valid attributes are AddUnrecognizedNodes, ClusterSNum, 
ClusterTM, DeviceStatusFrequency, DeviceStatusSensitivity, 
ExpDate, HAMode, HeartbeatFrequency, HeartbeatSensitivity, 
MaxNumNodesInDomain, PowerStatusMode, RegSyncDelay, RemoteShell 
SetupKRB5 and  SetupRemoteShell. Select yes to Accept try and Buy license. Default is no. Please input the location (pathname) of the Full license file,
to accept Full License. Sets the Cluster serial number to this string. This value is 
used for service. Sets the cluster type and model to this string. This value is 
used for service, and should be in the form ####-###. Specify the path of the remote shell command that CSM should 
use to run commands on the nodes. The default is /usr/bin/rsh. Indicates whether CSM should try to automatically set up 
security for the remote shell specified in the RemoteShell 
cluster attribute. The default is yes. Remote shell setup will 
occur only if the current setup fails for dsh. Specify if the DMS resource manager should accept unexpected 
requests from systems, to manage them and allow them to join the 
CSM cluster. The default is no. Delay in seconds between the time the cluster data is updated 
in memory and written onto the disk. Indicates the level of Kerberos setup that should be done 
automatically by CSM. The default is 0 (None). This attribute 
is valid for Red Hat Linux only.
The valid values are 0-15
 0    None
 1    Set up a Kerberos Version 5 server.
 2    Set up a Kerberos Version 5 client on all Managed nodes.
 4    Generate the CSM Kerberos Version 5 principal and 
      keytab, and update the .k5login file on all Managed nodes.
 8    Generate host Kerberos Version 5 principal and keytab 
      for each Managed node, and automatically update the 
      krb5.keytab file on the node.

To combine any of the above setups, simply add the SetupKRB5 
values together. For example, to set up Kerberos V5 clients 
and generate the CSM Kerberos V5 principal and keytab, then 
use 6 (2 + 4). For complete Kerberos setup, use SetupKRB5=15. Sets the mode for retrieving node power status. 
Valid values are mixed, polling, events, and none. Number of seconds between heartbeat messages sent to a node. Number of missed heartbeat messages sent to a node to 
declare that node unreachable. Writes the command's verbose messages to standard output.
Default is no. To Verify if the Management Server is installed and configured 
properly, using CSM diagnostics,probes. The probe checks for problems resulting from installing the 
management server. It checks the required packages and directory 
structures , daemons and resource classes . It checks the following 
probes rmc, dmsrm,  errm,  ibm.csm.predefined_conditions and 
ibm.csm.predefined_nodegroups. Modifies existing node definitions with the changed attributes 
definition if the node has been already defined. If there are 
no existing node definitions, then definenode will create the 
node definitions specified.The default is no. Bypasses Kerberos Version 5 setup. None of the setup indicated by a 
nonzero value for the SetupKRB5 attribute is done. Applies to Linux nodes only. Forces the updates of packages and 
performs a binary check on configuration files. Specifies to not prompt for the node password even if rsh or 
OpenSSH is not configured. If you do not set this option and the 
remote shell is not configured , the updatenode command prompts 
for the node root password and attempts configuration. The console method used to open a node console. This attribute 
can be edited. Valid values are: csp, hmc, mrv, esp, els, computone 
and cps. 
Note: CSM supports the ESP console server on Red Hat 7.2, 7.3, 
and 8.0 management servers only. Specifies to update existing NIM client definitions. Default is yes. Copies CSM packages and prerequisites on the Management Servers. 
This Menu is used when the attributes of the nodes to be installed 
do not match the attributes of the management server. Specify one or more colon-separated directories containing CSM 
and RPM packages. The CSM version for the nodes. If not specified, the CSM version 
is same as on Management Server. The operating system. This attribute is required. The operating system distribution. This attribute is required. The operating system version. This attribute is required. The operating system package architecture. This attribute is required. Writes verbose messages to standard output. Distributes configuration files across a CSM cluster.
This section provides the major function of the Configuration File
Manager (CFM) application. CFM provides a file repository on the
management server in /cfmroot to contain all configuration files 
that are shared by CFM Managed nodes. Updates open source RPM packages on CSM Linux nodes.
This section updates, installs or deletes open source RPM 
packages across a CSM cluster. Manages device definitions in/from CSM database.
This panel will manages the device definitions in the CSM 
database. The devices you manage are not managed nodes, they 
are optional devices included in your cluster infrastructure 
that require hardware control. Cluster devices include the 
HMC (Hardware Management Console) and RSA (Remote Supervisor 
Adapter cards) hardware control points, remote console and 
terminal servers, and SP Expansion I/O units. Managing 
devices in the cluster provides power control  and remote 
console access to the devices from a central point of control. Manages device group definitions in/from CSM database. To list the names of all nodess. Displays output in a format suitable for redirecting into 
a nodedef file, which can then be used as input to the 
definenode -f command. This flag can be used to save the 
definition of one or more nodes so that they can be restored 
at a later time. Sorts the output by the first attribute displayed in each row. 
To determine which node the attributes apply to, include the 
Hostname attribute in the list. Specifies to take the intersection of two groups and display 
the results. Neither group is modified. Subtracts the membership of the second group from the first 
group and displays the resulting members. Neither group is modified. Distributes files to all nodes in the cluster. Use this option 
with caution in mixed clusters. Make sure the /cfmroot directory 
is set up to work with -a, since the nightly cron job pushes files 
out to all nodes. Specify a file that contains a list of node names. The file can 
contain multiple lines and each line can have one or more node 
names, separated by spaces. Specify a comma or space-separated list of node host names, 
IP addresses, or node ranges on which to run the command. 
Space-separated lists must be inside double quotes. For information 
about specifying node ranges, see the noderange man page. Resolves one or more node groups, separated by spaces or commas,
and sends the resulting nodes their configuration files. Sends a query to determine the CFM files that are out of 
date across the cluster. These files will be updated by the 
next normal run of the this (cfmupdatenode) command. If all 
files are current, nothing is reported. Backs up existing configuration files on nodes as filename.OLD. Specifies younger mode. Files are normally updated if their 
modification times and sizes disagree with those of the master 
copy (located in /cfmroot). This flag causes the command to not 
update files that are younger than the master copy. This flag 
should be used only if the administrator is confident that the 
time clocks on the client nodes are in sync with the time clock on 
the management server. A warning message is printed for files that 
are newer than the master copy. Performs binary comparison on files and transfers them if they differ. Updates only the given file name. The file name should contain 
the absolute path name of the file and the file must reside in 
the /cfmroot directory. Specify the distfile location. This generates a distfile but does 
not call rdist, the open source utility used for file transfer. 
This allows the administrator to run Rdist with flexible options. Specify the path to use for remote commands. This flag can 
point to either an rshell or a secure remote command executable. 
If not specified with flags, the remote shell defaults first to 
the value of the DSH_REMOTE_CMD environment variable and then to 
the CSM RemoteShell attribute value. Sets the number of nodes to update concurrently. The default is 
32 or the value specified by the CSM_FANOUT environment variable. 
Depending on the number of files to be transferred, cfmupdatenode 
can take time to update a node, so this number should be set 
accordingly. If all files are not being transferred to the target 
nodes, reduce the CSM_FANOUT value. Sets the timeout period (in seconds) for waiting for responses 
from a remote process. The default is 900 seconds. Specifies verbose mode. Targets all nodes. Specify a file that contains a list of nodes names. The file 
can contain multiple lines and each line can have one or more 
node names, separated by spaces. Specify a comma or space-separated list of node host names, 
IP addresses, or node ranges on which to run the command. 
Space-separated lists must be inside double quotes. For information 
about specifying node ranges, see the noderange man page. Specify a node group or a comma-separated list of node groups. Reports what would be done by the command without making any 
changes to the target nodes. Queries all RPM packages installed on the target machines and 
returns the installed RPM packages that are unique to each target 
node. Specifies to also return the common set of RPM packages installed 
on all target nodes.Plus Queries all RPM packages installed on the 
target machines and returns the installed RPM packages that are 
unique to each target node. Updates only the specified packages. The absolute path 
is determined by searching the directory structure. If the RPM update has additional dependencies on RPM packages not 
installed, this command(smsupdatenode) will automatically install 
these dependencies. Installs the specified RPM packages. The absolute path is 
determined automatically by searching the directory 
structure. Removes the given RPM packages. Either the --deps or 
--nodeps flag must be provided before the list of 
packages to be removed (The option "Remove dependent 
RPMs" should be set --deps or --nodeps). Removes the dependent RPMS on the target nodes. Specify the path to use for remote commands. This can either 
point to rsh or to a secure shell executable. If not specified with 
flags, the remote shell defaults first to the value of the 
DSH_REMOTE_CMD environment variable, and then to the CSM RemoteShell 
attribute value (see the csmconfig command man page). Copy the distribution CD-ROMs corresponding to the given 
attributes or hostname to the correct /csminstall directory. Specify one or more directories, separated by colons, that 
contain copies of the distribution CD-ROMs. The default on a 
Linux Red Hat system is /mnt/cdrom. On a SuSE system, the default 
is /cdrom. On an AIX system, the default is /dev/cd0. Specify Attr=value pairs. The valid attributes are: 
InstallDistributionName, InstallDistributionVersion,  
and InstallPkgArchitecture.If a hostname is specified, the 
distribution CD-ROMs, and destination directory are determined 
by the node's attributes. Specifies verbose mode. Defines the devices in a CSM cluster. Changes device definitions in the CSM database. Removes device definitions from the CSM database. Lists the device definitions in the CSM database. Defines the device group definitions in the CSM database. Changes the device group definitions in the CSM database. Removes the device group definitions from the CSM database. Lists the device group definitions in the CSM database. Performs just a report instead of defining the devices into 
the CSM database. Creates device definitions in the CSM database. Forces updates to the existing definitions in CSM database.
Modifies existing device definitions or creates new device 
definitions. Specify the device definition file name from which the device 
definitions will be created in the CSM database. A sample device 
definition file is supplied in /opt/csm/install/devicedef.sample. Specify the hostname mapping file from which the device 
definitions will be created in the CSM database. Specify the first or starting devices to be defined.When 
starting_device is supplied, this flag specifies the name of 
the first device to be added. A list of devices is generated by 
incrementing IP addresses up to the value specified by the 
the SMIT stanza 'Number of devices to define' value. When 
device_list is supplied, this specifies a comma or space 
-seperated list of device hostnames or IP addresses on which 
to run the command.
Note: Multiple devices cannot be specified when using the 
csp PowerMethod. Specify how many devices to define.The IP addresses are 
determined by incrementing the starting device IP address by 
one.To use this flag devices must be defined with consecutive 
IP addresses and entered into the nameserver consecutively. The 
starting device name must be a resolvable host name and the 
StatusMethod attribute must be set to ping when using this flag. Specify the list of Console Servers. Multiple console server 
are separated by commas. Specify the list of hardware control points. Multiple hardware 
control point definitions are separated by commas. Writes the command's verbose messages to standard output. The StatusMethod is used to obtain the status of the device. 
The valid values are ping and NONE. If this attribute is set to 
NONE or is left undefined, no status checking will be performed, 
and the Status attribute will be set to 128 (UNCONFIGURED). The power method used to perform hardware control. The valid 
values for AIX are csp and hmc. The valid values for Linux are 
hmc, xseries, apc, blade and bmc. This attribute can be edited. 
This attribute must be defined to enable hardware control. The host name of the network adapter for the hardware 
control point. This attribute can be edited. This attribute 
must be defined to enable hardware control. For SP Nodes 
and p660 servers, it is the device specification of the tty 
port on the management server where the SP frame or p660 server 
is connected. Identifier associated with the device power control. This 
attribute can be edited. This attribute must be defined to 
enable hardware control. The value is dependent on the 
PowerMethod in use, and can be one of the following:
* Text ID of the service processor for devices on xSeries servers.
* LPAR name for devices on IBM HMC-attached pSeries servers.
* APC MasterSwitch outlet port number.
* APC MasterSwitch outlet port number. Optional device type information provided by the administrator 
to group devices. Can be used to create dynamic device groups by 
device type. The console method used to open a device console. This attribute 
can be edited. Valid values are: csp, hmc, mrv, els, computone, 
cps, blade, cyclades and esp. The host name of the network interface for the console server. 
It is optional when defining a resource. For SP Nodes and p660 
servers, it is the device specification of the tty port on the 
management server where the SP frame or p660 server is connected. The number associated with the console port for this device. HWType is the optional hardware information provided by 
the administrator to identify this device. HWModel is the optional hardware information provided by 
the administrator to identify this device. HWSerialNum is the optional hardware information provided 
by the administrator to identify this device. Comments provided by the administrator about the device. Changes all the devices. Specify a comma or space-separated list of device names or 
IP addresses on which to run the command. Space-separated lists 
must be inside double quotes. Changes the devices that are in the device groups specified. 
The device group is evaluated by the hwdevgrp command. Multiple 
device groups can be specified within quotation marks and 
separated by commas or spaces. Specify a file that contains a list of device names.
The file can contain multiple lines and each line can have one 
or more device names separated by spaces, commas, or both. Changes the devices that match the 'where' part of the select 
string. It is easiest to put the whole string in double quotation 
marks, especially if you need to put attribute values in single 
quotation marks (when they are strings). To specify all devices 
use a * instead of a selectstr value. Specify a comma or space-separated list of device names or 
IP addresses on which to run the command. Space-separated lists 
must be enclosed within double quotes. Removes the devices that are members of the device groups 
specified. The device group is evaluated by the hwdevgrp command.
Multiple device groups can be specified using commas or spaces. 
A space-separated list requires quotation marks surrounding the 
string. Specify a file that contains a list of device names. The file can 
contain multiple lines, and each line can have one or more device 
names separated using commas or spaces. Displays the devices that are in the specified device group. 
The device group is evaluated by the hwdevgrp command. Displays the devices that match the where specification of 
the select string. Include the entire string within double 
quotation marks when single quotation marks are used to specify 
attribute values as strings. Specifying a where string of * 
indicates that all devices should be listed, as if a where 
string was not specified. Displays all attributes. Displays the specified attribute. Attributes must be separated 
by commas. Displays IP addresses. Displays the ping status of devices. Displays the short host name if the devices StatusMethod 
attribute is set to ping. Otherwise just displays the name as 
entered in the database. Displays output in long format. Displays output in a format suitable for redirecting into a 
devicedef file, which can then be used as input to the 
definehwdev -f command. This flag can be used to save the 
definition of one or more devices so that they can be restored at 
a later time. Sorts the output by the first attribute displayed in each row. Specify whether or not to display the name of the device at 
the beginning of each row that is returned. Specify the delimiter used to separate items within a row. 
The default is a comma-space. Rows should be separated by blank lines. Name of the device group to be created. List of devices which are going to be in the group. Displays the 'where' clause of the select string set for 
this device group. Specify a file that contains a list of groups to be defined. Each 
line of the file should contain the group name followed by a colon, 
then the following three fields separated by commas: type - static 
or dynamic, the validation setting - validated or not validated, 
and the definition of the group contents - a select string or 
the unexpanded member list. Specify if the names in the group represent generic names that 
do not have to be actual device names in the CSM cluster. Specify a device group to modify . Adds device names to a group specified . A device list consists 
of one or more comma-separated device names. To specify an 
existing device group to add to the group, use the + sign before 
the group name. List of devices to be removed from the specified group. Specify a device group to delete. Lists all defined device groups. Displays the expanded group member list of all groups. Displays the member list for the specified group. List the definition of all groups. Each line of output 
will represent one group and will display its name, the type 
(static or dynamic), the validation setting (-g), and the 
definition of the group contents (either a select string 
or the unexpanded member list). Displays all the static and dynamic group names that contain 
the device represented by the specified device name or IP address. Specifies to take the intersection of two groups entered and display 
the results. Subtracts the membership of the second group from the first group 
entered and displays the resulting members. Provides a snapshot of cluster node reachability, power status, 
and network interface status. Additional Hardware control commands like conserver, blade/xSeries, 
SP/Attached pSeries commands. Retrieves all adapter information from the specified node. While 
adapter discovery tests will still be limited to the nodes of the 
given type, all other adapters of any supported type will also be 
returned. Specify the type of MAC method to use to collect a MAC address. 
The supported methods are dsh, pxeboot, openfirmware, and hwstat. 
You can also specify your own MAC method. Creates or updates a stanza file listing adapter information. 
If a stanza file is found, the existing file will be updated. Turns verbose mode on. When you specify this option, tracing is 
turned on for the duration of the command. After the command is 
run, tracing is returned to its previous state. Sets the password on the specified node service processor, 
hardware control point. Restores the default user ID and password originally shipped 
with the hardware. Displays attribute Status information for all nodes. Specify a comma or space-separated list of node names to 
display attribute information. Space-separated node names must 
be inside double quotes. Specify a comma or space-separated list of node groups to 
display attribute information. Space-separated node groups must 
be inside double quotes. Returns LCD values for for SP Nodes, p660 servers, and 
HMC-attached pSeries servers. Specify, by column headers, which columns to display. Hostname 
is displayed by default. Other values include HWControlPoint, 
LCDS, Network-Interfaces, Status, PowerStatus and all. Specify delimiter-formatted output using the specified 
delimiter - colons, for example. Use this flag to specify a delimiter 
of one or more characters. Sorts output first by hardware control point
and then by hostname. Commands to configure the Conserver Configuration File and  
refresh the Conserver Daemon(chrconsolecfg and rconsolerefresh). Commands to collect environmental/VPD and service processor log 
information from nodes (lshwstat and reventlog). Commands to 
collect and setting SNMP Agent configuration information for nodes 
(chsnmp and lssnmp). Configuring, Monitoring, Displaying, Collecting and  Controling 
the SP frames/node commands Removes, adds, or rewrites console entries in the Conserver 
configuration file. The panel control will send a signal to the Conserver daemon, 
causing it to reread its configuration file and update its internal 
list of consoles. If the Conserver daemon is not running, it is 
started. The panel control will stop the current Conserver process 
and starts a new one. Rewrites the Conserver configuration file using all nodes in 
the CSM database. Rewrites the interfaces entry of the configuration file. Removes entries from the Conserver configuration file. Specify a comma or space-separated list of node host names, 
IP addresses, or node ranges on which to run the command. 
Space-separated lists must be inside double quotes. Specify the node groups to resolve the nodes to add to or remove 
from the Conserver configuration file. Reinitializes the rconsole daemon.When this option is set it 
stops the current Conserver process and starts a new one.  Collects environmental and Vital Product Data (VPD) information 
from nodes on xSeries and BladeCenter servers.
The panel will collect environmental and VPD information for the 
specified nodes on xSeries and BladeCenter servers. This uses 
the CSM database to determine the nodes and their service 
processor information. The host name used must be the name 
specified when defining the nodes in the CSM database.  Collects service processor log information from nodes on xSeries 
and BladeCenter servers.
This uses the CSM database to determine the nodes and 
their service processor information.The host name used must be the 
name specified when defining the nodes in the CSM database.  Sets the SNMP agent configuration information for nodes on 
xSeries and BladeCenter servers.
This uses the CSM database to determine the nodes and 
their service processor information.The host name used must be the 
name specified when defining the nodes in the CSM database.  Collects SNMP agent configuration information from nodes on 
xSeries and BladeCenter servers.
This uses the CSM database to determine the nodes and 
their service processor information.The host name used must be the 
name specified when defining the nodes in the CSM database. Runs the command on all nodes on xSeries and BladeCenter 
servers in the cluster. Returns information for the specified or all parameters. 
Parameters are provided in the list (F4=list). Returns the node ambient temperature. Returns the service processor's asset tag. Returns the speed of the installed CPUs in MHz. Returns current CPU temperatures. Returns current DASD temperatures. Returns the percentage of maximum speed that the fan is rotating. Returns the number of DIMMs installed. Returns the maximum number of DIMMs the node can support. Returns the total memory installed in the node. Returns the system model type. Returns the current power status. Returns the number of hours the system has been running since 
the last restart. Returns the number of times the system has been restarted. Returns the model serial number of the node. Returns the current node state. Returns all temperatures: cputemp, disktemp, ambtemp. Returns VRM, power supply, and system board voltages. Specifies one or more node groups on which to run the command. Runs the command on all nodes in the cluster. Reads all log entries, starting with the first entry. Reads all log entries, starting with the first entry, and 
then clears the log of all entries. Clears the service processor log of all entries. Reads the number of log entries specified, starting with the first. Specifies one or more comma-separated node groups on which to 
run the command. Sets the system contact name. Sets the defaults for the first community name to public and 
the first community address to the address of the management server. Sets the community addresses. Removes the community addresses. Sets the system location. Enables the SNMP agent. Disables the SNMP agent. Enables trap-directed notification. Disables trap-directed notification. Sets the event trigger. Clears the event trigger. Returns information for all parameters. Returns all community names. Returns all community addresses. Returns system contact name. Returns all enabled events. Returns SNMP traps state. Identifies available SP frame hardware control points (tty ports) 
and configures them for expansion I/O units. This ignores frame 
hardware control points that already have SP Nodes defined for 
them in CSM. Displays the configuration information for SP expansion I/O units 
(F/C 2055) to IBM POWER3 SMP High Nodes (model 9076-NH0, F/C 2054) 
and IBM 375 MHz POWER3 SMP High Nodes (model 9076-NH1, F/C 2058).
This panel is intended for use only during initial server 
installation or for subsequent configuration changes for nodes 
and expansion I/O units. Controls the state of SP frames in the cluster.
Provides power control for SP frames and microcode update 
support for SP frames, nodes, and expansion I/O units. Monitors the state of SP Nodes, SP frames, p660 servers, and 
expansion I/O units in the cluster. Administers the cspd daemon, which runs on the management server 
to monitor and control the SP Nodes and p660 servers. The operation 
operand specifies one of three supported administrative actions: 
cleard, clog, or setd.
The daemon writes debugging information and specific error 
information to its log file. The daemon writes debugging information 
and specific error information to its log file, located in 
/var/log/csm/csp in the form cspdlogfile.nnn, where nnn is the 
Julian date on which the daemon opened the log file. The clog 
operation causes the daemon to close its current log file and 
create a new one using the name cspdlogfile.nnn, where nnn is the 
current Julian date. If this name already exists, a name of the 
form cspdlogfile.nnn_m is used, where m is a number that is 
selected to create a unique file name. Specify a comma-separated list of frames. Updates all IBM.ManagedNode::HWControlNodeId output with a list 
of the expansion I/O units attached. Specify a file name for writing command output. Specify the command to send to the hardware components. The device specification of the hardware control point of the 
SP frame. Only entries that specify a tty device are accepted. Specify a comma or space-separated list of node names or 
expansion I/O unit frame:slot specifications on which to perform 
the action. This flag is only valid on the basecode, boot_supervisor, 
and microcode commands. Specify node group or groups on which to perform the action. This 
option is only valid on the basecode, boot_supervisor, and microcode 
commands. Specifies verbose mode. The percentage of hardware components whose 
state matches the command is displayed at five-second intervals. 
The following are also displayed:
* The number of components to which the command was sent.
* A list of components that did not change state.
* The number of components that are expected to change state.
* The number of components that achieved the expected state.
* The number of components to which the command was not sent.
* A list of components to which the command was not sent. Displays information for all configured SP Nodes and p660 servers. Displays information for all configured SP Nodes, SP Frames, 
p660 servers, and expansion I/O units. Displays frame information for a specific hardware control point. Displays information for all hardware connected to the hardware 
control point. Displays only the current state information, and then exits. Displays the current state information prior to displaying the 
changed state. Limits output to that of the state variables that are specified 
in the list, a comma-separated list of symbolic variable names. 
This list must not contain blanks. Displays the the list of symbolic variable names and inidices. Displays the output in raw format. Displays the output in symbolic format. Displays information for the specified list of one or more 
comma-separated nodes. Displays information for the specified list of one or more 
comma-separated node groups. Displays a descriptive list of symbolic variable names and 
variable indexes, and then exits. Specify the administrative action to perform. The operation must 
be one of the following:
* cleard:Unsets the daemon debugging flag that is specified by 
the -d flag in the daemon. You can specify multiple -d flags. 
If you do not specify a -d flag, the all debugging flag is assumed.
* clog:Changes the daemon log file. If the log file is growing 
large, you can use this operation to cause the daemon to write 
to a new log file.
* setd:Sets the daemon debugging flag that is specified by the -d 
flag in the daemon. You can specify multiple -d flags. If you 
do not specify a -d flag, the all debugging flag is assumed. Specifies the daemon debug flag to be set or unset in the daemon. Concurrently issues remote shell commands to multiple hosts and 
formats results.
The panel (dsh) command invokes commands on a set of nodes 
concurrently. It issues a remote shell command concurrently for 
each node that is specified and returns the output from all the 
nodes, formatted so that command results from all nodes can be 
managed. /usr/bin/rsh is the model for syntax and security. Transfers files between the cluster management server and nodes.
The panel (dcp) command runs scp or rcp or rsync to multiple 
nodes at the same time. The command relies on dsh as an underlying 
mechanism, therefore any options or environment variables that may 
affect the current operation are in effect. With dcp you can 
transfer files to and from the management server. When files are 
pulled from the node, they are placed into the directory specified 
as the target directory and the node name is appended to the file. Runs CSM cluster system diagnostics.
The probemgr command is part of the CSM diagnostics 
infrastructure, which can be used by system administrators to 
determine the root cause of system problems. The probemgr 
command runs a set of small diagnostics programs called probes. 
Each probe provides diagnostics for a particular part of the 
system. Copies and stores vital CSM data.
The panel (csmbackup) command copies vital CSM data from the 
management server and stores the data in the directory specified. 
The command backs up a CSM management server in case of a hardware 
problem, or if the management server is being changed to another 
machine. Restores CSM data backed up by the csmbackup command.
The panel (csmrestore) command restores the files that were 
copied by the csmbackup command into the specified directory or 
the default directory /var/opt/csm/csmdata. The CSM management 
server must be completely installed and configured by the 
administrator in advance; the csmrestore command does not 
install any CSM code on the management server. The csmrestore 
command only restores the nodes, node groups, devices, 
devicegroups, conditions and responses, and condition and 
response associations on the management server. This  HA CSM is yet to be done for future release. Specify a command to invoke on the node list. It is passed to the 
remote shell. This command is specified by using the remote shell 
command syntax. If set, the command will be executed on all the defined nodes in CSM 
database. Resolves one or more CSM node groups, separated by commas, and adds 
the nodes to the node list or working collective. Verifies a node before adding it to the node list. If a node is not 
responding, it is not included in the node list. Specify a remote user name under which to invoke the commands. 
If not specified, the remote user name is the same as the local 
user name. Specify a fanout value. The default value is 64. It indicates the 
maximum number of concurrent remote shell commands to issue. 
Sequential runs can be specified by indicating a fanout value of 1. 
The fanout value is taken from the DSH_FANOUT environment variable 
if not specified. Specify the time, in seconds, to wait for response from the 
remote shell. Overrides the value of the DSH_TIMEOUT environment variable. Specifies output in streaming mode. The output is unsorted, but 
performance is likely to improve, and memory utilization is reduced. Provides the full path of the remote shell that will be used to 
access the remote systems. The default remote shell is rsh. Forwards options for the remote shell. The information within the 
quotation marks is forwarded and included in the remote shell. Specifies the shell syntax to be used on the remote system. Prints the return code of the last command that was run remotely. 
The return code is appended at the end of the output for each node. Selecting this option runs dshbak which presents formatted 
output from the dsh command. The dshback command takes lines in 
the following format:
  host_name: line of output from the remote command. This option should be used only when the option "Filter/Format 
Output (dshbak)" is set to 'yes'. While formating the output with 
dshbak command this option collapses the identical output from more 
than one node so that it is displayed only once. Copies the files from the management server and places 
them in the target directory on the nodes if the entry 
field is kept as "TO". 
If the entry field is selected as "FROM", this copies files 
from the nodes to the management server. Specify the complete path name of the file to be copied 
to or from the node. For recursive option(-r), this is a 
directory. You can specify multiple files for transferring 
to nodes, but not for retrieving files from nodes. Copies to or from all nodes in the cluster. Forwards options to the remote copy command. Preserves the source file characteristics. Recursively copies to or from the management server. Specify the number of nodes to process in parallel. The default 
value is 64, which you may want to change depending on the size and 
number of files being transferred. Specifies to use rsync, assuming its location is /usr/bin. If specified , displays verbose message. Shows the dependencies and run order of the probes. The highest level of exit code, returned by a probe, that the 
probe manager permits before terminating. The default value is 10.
0   Success
10  Success with Attention messages
20  Failure
127 Internal error. Indicates the message output level. The default is 3, which indicates 
that Attention and Error messages must be reported by the probes.
0 Specifies that the probe manager message, probe trace messages, 
  probe explanation and suggested action messages, probe attention 
  messages, and probe error messages should be reported.
1 Specifies that the probe trace, probe explanation and suggested 
  action messages, probe attention messages, and probe error messages 
  should be reported.
2 Specifies that the probe explanation and suggested action messages, 
  probe attention messages, and probe error messages should be 
  reported.
3 Specifies that only the probe attention messages and probe error 
  messages should be reported.
4 Specifies that only the show probe error messages should be 
  reported. The directory where user-specific probes reside. The default probe 
directory (/opt/diagnostics/probes) is examined after the 
user-specified directory is examined. If there are duplicate nodes,
the probes in the user-specified directory take precedence over 
the probes in the default directory. Generates a list of probes to exclude when creating the probe 
dependency tree. This also means that those probes will not be run. Specifies to run the probe indicated by probe_name and all its 
dependencies. If this option is not specified, all probes in the 
default probe directory (/opt/diagnostics/probes) and all probes in 
the user probe directory are run. Specify the directory where CSM backup data will be stored. If not 
specified, the data is stored in /var/opt/csm/csmdata. Specify a file that contains a list of additional CSM files 
to back up. Only the specified resource is backed up. This option is useful for 
registering ERRM event responses to only back up a specified resource 
class when a resource class changes. The resource value can be 
Sensor, EventResponse, Condition, Association, ManagedNode, 
NodeGroup, DeviceHwCtrl, DeviceGroup or DmsCtrl. Only ONE resource 
can be specified at a time. Writes verbose messages to standard output. Specify the directory from which to restore CSM backup data. Data 
in this directory should have been placed there by the 
csmbackup command. Forces the command to copy all required files from the pkg_path. 
Normally,copycsmpkgs only copies files that are newer or the same 
as those in /csminstall, or files that do not exist in /csminstall. 
This flag forces copycsmpkgs to copy all files regardless of their 
version. Top level panel for all CSM cluster interfaces. This leads 
to menus for CSM Install, Manage Cluster Data, CSM Hardware 
Control and Additional CSM commands. Perform the tasks that are necessary to configure the 
system as a CSM Management Server. Uninstall the CSM management server software. Update (or install) CSM software packages and CFM 
configuration files on the nodes of the cluster. Create NIM machine definitions corresponding to CSM 
cluster node definitions. Create NIM machine group definitions corresponding 
to CSM cluster node group definitions. Set up the CSM customization scripts so that they may 
be run by NIM on the cluster node during a base operating 
system installation. Top level NIM panel. Define nodes that will be managed by CSM. Change node definitions in the CSM database. Remove nodes from the CSM database. Manage node group definitions in the CSM database. Define node groups that will be managed by CSM. Change a node group in the CSM database. Remove node groups from the CSM database. Display verbose messages to standard output. Remove the nodes before uninstalling the management server 
(Issues 'rmnode' before uninstalling). Remove and clean up nodes before uninstalling the management 
server  (Issues 'rmnode -u' before uninstalling). Comma separated list of cluster node group names to be setup. A list of node hostnames (or IP addresses) on which to run 
the command. Only report what would be done by the command.  Do not perform 
any updates. List of options to forward to CFM. Options must be enclosed 
within double quotes. Comma separated list of cluster node group names to be setup. Either create the node definitions or just display them. Specifies the IP address or host name for the nodes 
to be added. The list of node definitions that would be created is displayed 
to standard out and is re-directed to this node definition file. Hostname of the management server machine as known by the managed 
node. Allow a request to manage the node
(Normally it is not necessary to set this attribute). The current phase of the node's installation. The 
mode is automatically set by CSM installation tools to 
PreManaged, Installing, or Managed, depending on the 
phase of the node's installation. You can manually set 
the mode to MinManaged to indicate Minimally Managed nodes. Display the specified attributes (Comma separated list of 
attributes). A comma separated list of node names to add to the group. A comma separated list of node names to add to the group. A comma separated list of node names to remove from the group. Remove node groups. Selecting this menu option leads to menus for installing,
configuring the management server, verifying the Management 
Server Installation, uninstalling the management server, 
updating CSM on the cluster nodes, copy additional CSM and 
related packages for Linux nodes, converting CSM to NIM 
nodes/groups, defining CSM nodes, the CSM setup of NIM, 
and the network installation manager. Selecting this menu option leads to menus for defining,
modifying, removing and displaying CSM nodes/node groups and CSM 
devices/device groups, Update CSM and Configuration Files on the 
Cluster Nodes,Manage RPMs on Linux Cluster  Nodes. Selecting this menu leads to options to define, modify, remove, or 
display CSM Cluster Nodes. Selecting this menu leads to options to define, modify, remove, or 
display CSM Cluster Node Groups. Specifies one or more nodegroups which will be expanded 
to a list of nodes which will perform a network boot. Controls remote power for Cluster Systems Management nodes,
devices and CECs. Choose an Action: 
on           -- power the node(s) on 
off          -- power the node(s) off 
reboot       -- reboot the node(s) 
resetsp_hcp  -- reset the service processor for the Hardware 
                Control Point(s) 
resetsp_host -- reset the service processor for the node(s)  Specify a comma or space-separated list of node hostnames,
IP addresses, or node ranges on which to run the command. Runs the command on all of the nodes in the cluster. Enter a comment (Must be in quotes). NIM groups are created or updated for all CSM groups. Specify whether or not to update existing NIM 
group definitions. If this option is specified and no group is given 
(or the 1st group is "*"), then the membership of 
all the groups is displayed. Specify a file that contains a list of groups to be defined.
Each line of the file should contain the group name followed by a 
colon,then the following three fields separated by commas:  
type (static or dynamic), the validation setting (validated or 
not validated), and the definition of the group contents (either 
a select string or the unexpanded member list). The name of the distribution to be installed (Linux only). The machine architecture of the node to be installed (Linux only). The version of the kernel to be installed (Linux only). Display the member list for these groups. Specify one or more node groups on which to run the command. Discovers the first adapter that can reach the server. Specify the Ethernet network speed. This flag is not 
used for Token Ring or FDDI adapters. Specify Ethernet network duplex. This flag is not used
for Token Ring or FDDI adapters. Specify the IP address or host name of the server to
discover. The default is the management server. Specify the IP address or host name of the default
gateway used to reach the server. The default is 0.0.0.0. Discovers all adapters that can reach the server. Specify the node groups to process. Specify the host name/IP address of the system where
the ID resides. Specify the user name that will be defined. Install Management Server.
Select the CSM filesets to be installed, from the next panels.
Note:
* Filesets csm.client, csm.core and csm.dsh are required if not
  installed yet.
* Fileset csm.server must be selected.
* Filesets csm.diagnostics, csm.gui.dcem and csm.gui.websm are 
  optional. Sets the community names. Removes the community names. Specify the complete path of the directory or file where 
the file will be copied on the target machine. This must 
be a directory for a file transferred from a node. For 
files transferred to a node, the hostname of each target node 
will be appended to each file or directory. Specify a comma or space-seperated list of node groups 
to copy to or from. Space-seperated node names must be 
inside double quotes. Replaces the current group membership with the given 
list of nodes, creating the group if it does not exist yet. 
The same values for node_list are supported as for the -a 
flag. Note that you can also specify node ranges. See the 
noderange man page. The mode the CEC is powered on to.  Valid choices 
are "full" for Full System Partition mode, and 
"lpar" for LPAR mode.  This option is required when 
the "cec_on" action is given, and is only applicable 
to pSeries systems. Choose an Action: 
on           -- power the node(s) on 
off          -- power the node(s) off 
query        -- Reports power status on the specified node(s)
reboot       -- reboot the node(s) 
resetsp_hcp  -- reset the service processor for the Hardware 
                Control Point(s) 
resetsp_host -- reset the service processor for the node(s) 
cec_on       -- Powers on the CEC associated with the specified 
                node. Applies to Hardware Management Console 
                (HMC)-attached pSeries servers only
cec_off      -- Powers off the CEC associated with the specified 
                node. Applies to Hardware Management Console 
                (HMC)-attached pSeries servers only
cec_query    -- Returns the power status for the CEC associated 
                with the specified node. Applies to Hardware 
                Management Console (HMC)-attached pSeries servers 
                only Specifies a comma or space-separated list of device names to 
list information about. Note that you cannot use the -d flag 
with the -a or -A flag. Specifies one or more device groups. Note that you cannot 
use the -D flag with the -a or -A flag. Runs the command on all hardware in the cluster, including 
node servers and hardware devices. Note that you cannot use 
the -A flag with the -a, -d, -D, -n, or -N flag. Creates the /csminstall subdirectories and copies the 
required files to the correct /csminstall subdirectories. Specify a comma separated list of authentication methods 
to setup on the node. Valid options are rsh, ssh, krb5, or 
hba. 
hba cannot be used in combination with ssh, krb5,or rsh. hba 
cannot be used with the -F, --cfm, --cfmoptions, -S, --sms,
or --smsoptions flags.  rsh sets up remote shell authentication 
by creating a root.rhosts file on the node when all these 
conditions are true:
* csmconfig shows SetupRemoteShell=1 & RemoteShell=/.../rsh.
* rsh using Kerberos is currently failing to the node.
* rexec is enabled on the node.

ssh exchanges the ssh public keys, when:
* csmconfig shows SetupRemoteShell=1 & RemoteShell=/.../ssh.
* ssh using Kerberos is currently failing to the node.

krb5 updates the Kerberos Version 5 krb5.keytab file on the 
node with the host principal keytab if SetupKRB5 > 8.
hba exchanges RSCT public keys between the node and the 
management server. When hba is selected you must trust 
your network at the time to insure that a rogue machine 
is not going to insert their public key in place of the 
real node public key. Shows attributes from the IBM.Host resource class on 
each node, instead of attributes from the IBM.ManagedNode
resource class. The attributes from IBM.Host represent the
actual values currently on the node. In some cases, the 
corresponding attributes in IBM.ManagedNode represent the 
value requested by the administrator. Replaces the current group membership with the given 
list of devices, creating the group if it does not exist 
yet. The same values for device_list are also supported 
for the -a flag. Sets the hostname field with the HWControlNodeId value,
if resolvable. Runs the specified probes on all nodes in the CSM database. Specifies a comma or space-separated list of host names 
or node ranges on which to run the specified probes. 
Space-separated lists must be inside double quotes. See the 
noderange man page for information on node ranges. Specifies a comma or space-separated list of node groups 
on which to run the specified probes. Space-separated lists 
must be inside double quotes. The node groups are evaluated 
by the nodegrp command. Creates a remote console user_ID and password file.
The -c flag generates a password file that the rconsole
command uses when opening remote consoles on BladeCenter
HS20-8832 and JS20-8842 blade servers. The systemid 
command must be run with the -c flag for each management
module that controls blade servers requiring console access. 
The user ID and password must match a stored management 
module login profile having blade server remote console access
rights granted. The name of the password file generated by the 
systemid command with the -c flag is the IP address of the 
management module, appended with _console. The -c flag is 
not required to open remote consoles on any other hardware. Removes the specified password file. Reports which Managed nodes are up-to-date by comparing the 
last CFM update time with the modification time of files in 
the /cfmroot directory. Only use this flag with the -q flag. Specifies the full path name of the remote copy command to 
be used by dcp.
The default value will be used from csmconfig command. Queries and returns the fanout value and the remote host list.
(Overrides other options.) Specifies the time, in seconds, to wait for a response from 
the remote copy command. Verifies that a node is reachable, using ping, before adding 
it to the node list of remote node host names, IP addresses, 
or node ranges. Displays the selected remote copy command. Disables output file writing for an instance of the 
command when used with the --reports flag or when the 
DSH_REPORTS_DIRECTORY is set. Reporting remains enabled. 
This flag is required when using reporting with the 
dshbak command. Informs the user that a node is not responding and 
prompts the user to decide whether the node should be 
included in the node list. Sets the reports directory for reporting. All output 
from each host is saved to individual output and error 
files and a report is generated. A unique subdirectory 
is created to hold the output files and the report for 
each instance of the command. The subdirectory name is 
created using the default unspecified or the string 
provided using the --reportName flag. An integer extension 
is added to the name to create a unique directory name. 
The flag overrides the DSH_REPORTS_DIRECTORY environment 
variable. Displays the current environment variable settings. 
For example, the list of nodes in the current node list 
or working collective file and the value of the 
DSH_FANOUT environment variable are displayed.
Note: This flag must be specified by itself on the dsh 
command line. It cannot be used in conjunction with any 
other dsh flag or with the command parameter. Specifies to not export locale environment. Prints the results of monitoring for each node in the 
form of the starting and completion messages for each node. Sets the log file. Log entries are added for each instance 
of the dsh command. This flag overrides the DSH_LOG environment 
variable. Specifies that commands that were unsuccessful should continue 
to be sent to the remote nodes. OR Display Verbose Messages? Copy installation software packages Copy packages from this location Force install Setup all nodes List of nodes List of groups Update all nodes Update all nodes in PreManaged mode Update all nodes in Managed mode Update this list of nodes Update the nodes in these groups Force the updates Display preview of updates but do not update Install or update CSM software packages Update configuration files Options to pass to CFM. (Must be in quotes.) Convert all CSM groups Convert these groups. (Comma separated list.) Update existing NIM groups Create node definitions Create definitions using this node definition 
stanza file Specify the first (or only) node to be defined. Number of nodes to define List of console servers List of hardware control points Create definitions using this hostname mapping 
file Update the node after it has been defined Do cleanup on the nodes Change all the nodes List of nodes to change File containing list of nodes to change Change the nodes that match this select string List of node names List of group names Select string "where" clause File containing list of nodes Display all attributes Display this list of attributes Display IP addresses Display output in long format Display the ping status of nodes Display the short hostname Display node name at beginning of each row Delimiter used to separate items New Group Name Select String File containing list of groups to define Group names represent generic names Group to be acted on List of nodes to add List of nodes to remove Name of group to remove Display the member list for these groups List all defined node groups. List the definition of all groups. Display all node groups containing this node. Display the "where" select string for this node group Remove and cleanup CSM cluster nodes before uninstalling Note: Unset an attribute by specifying <quote><quote> as its new value Adapter Type to Acquire Discover Network Adapter? Network Speed Network Duplex Server Hostname or IP address Gateway IP address Discover All Adapters? Adapter Information Filename Perform Adapter Collection on All Nodes? Node List Node Groups Enter Adapter Information into CSM database? Output filename Perform the network boot on all nodes? Perform on this list of nodes Perform on this list of nodegroups Action Node List Node Groups Use All Nodes? Host Name / IP Address User ID Power Method Hardware Control Point File name NIM machine type NIM network name Ring speed Cable type Platform Netboot kernel File containing a list of cluster nodes. Display the member list for all groups. A file containing a list of node names. Install/update Linux RPMs. Options to pass to SMS. (Must be in quotes.) Exchange RSCT public keys? Display LCD Values? Add or update CSM cluster nodes Name of stanza file to create or update Gather information for every adapter? Discover the first adapter that can be used to 
ping the management server? Discover all the adapters that can be used to 
ping the management server? Force a Broadcast Boot? Install Server Hostname or IP address Gateway IP address Update configuration files (CFM option) Install/update Linux RPMs (SMS option) Force Force updates to existing node definitions Note: To list all nodes, leave above entries blank Display output in defnode format Display output sorted by first attribute Display intersection of these two groups Display members of a group not in a second group Accept the CSM License Update existing NIM group definitions Ring speed (required if token ring) Cable type (required if ethernet) List of device groups Group names represent generic device names List of groups (comma seperated)  OR Options to pass to CFM (Must be in quotes) Convert these groups (Comma separated list) Update existing NIM definitions Define nodes using this node definition file Define one or more nodes explicitly Suppress node password prompt Create node definitions (no = just display) Number of nodes to define or node list AllowManageRequest ConsoleMethod ConsoleServerName ConsoleServerNumber ConsolePortNum HWControlPoint HWControlNodeId InstallCSMVersion InstallMethod InstallOSName InstallDistributionName InstallDistributionVersion InstallPkgArchitecture InstallKernelVersion InstallAdapterMacaddr InstallAdapterGateway InstallAdapterType InstallAdapterSpeed InstallAdapterDuplex InstallDisk InstallDiskType LParID ManagementServer Mode PowerMethod Suppress Kerberos PW prompting UserComment Note: Unset an attribute by specifying
 <quote><quote> ("") as it's new value Define nodes using this hostname mapping file Change nodes matching this select string New Node Group Name List of Nodes Group names represent generic node names Node group to be acted on Name of node group to remove List definition of all groups List node groups containing this node Group name represents generic names Discover the first adapter that can be used to ping the management server? Discover all the adapters that can be used to ping the management server? Method to use to obtain MAC address Group to be modified Set password on node service processor
/hardware control point Restore default userid and password Display current CSM version? Display current settings only?  (name of attribute or "yes" for all) License: Try & Buy License: Full (pathname) Perform Additional Management Server Configuration Cluster ID Cluster Type/Model Remote Shell Setup Remote Shell? AddUnrecognizedNodes RegSyncDelay SetupKRB5 PowerStatusMode HeartbeatFrequency HeartbeatSensitivity Verify Management Server Installation Run probe for Management Server configuration Copy Additional CSM and related packages (Linux nodes) List of pathnames (colon-separated) Force the command to copy all required files from path? Update Configuration Files on the Cluster Nodes Distribute to all nodes Distribute to nodes in this file Distribute to this list of nodes Distribute to this list of groups Query cluster configuration file status only Backup existing config files on nodes Replace newer files on cluster nodes Perform binary comparison on files Single updated file to distribute (default all) Generate distfile but do not distribute Remote shell (optional) Number of nodes to update in parallel (fanout) Timeout period for completion (sec) Manage RPM's on Linux Cluster Nodes Distribute to this list of groups Report only - do not perform operations Query - display unique RPM's Query - display common RPM's Update specific RPMS Include dependency RPMs Install these new RPMs Remove these existing RPMs Remove dependent RPMs Copy distribution CD images to /csminstall Pathnames of images (colon-separated) Hostname or attributes for images to copy Define CSM Cluster Devices Create device definitions (no = just display) Create definitions using this device definition  stanza file Create definitions using this hostname mapping 
file Define one or more devices explicitly Number of devices to define Name of node groups to remove StatusMethod PowerMethod HWControlDeviceId DeviceType HWType HWModel HWSerialNum Modify CSM Cluster Devices Change all the devices List of devices to change File containing list of devices to change Change the devices that match this select string  Note: Unset an attribute by specifying  <quote><quote> ("") as it's new value Remove CSM Cluster Devices List of devices File containing list of devices Display CSM Cluster Devices List of device names Note: To list all devices, leave above
entries blank Display the ping status of devices Display output in devicedef format Display device name at beginning of each row Define CSM Device Groups New Device Group Name List of Devices Modify a CSM Device Group Device group to be acted on List of devices to add List of devices to remove Remove CSM Device Groups Name of device group to remove Display CSM Device Groups List all defined device groups List device groups containing this device Display "where" select string for this device 
group CSM Cluster Status Display status for all nodes Node Group Display LCD/LED values Specify the columns to display Output delimiter Sort output by hardware control point Process entries in Conserver config file Rewrite config file using all CSM nodes Rewrite config file interface entry Remove config file entries Refresh Conserver Daemon End current process and start another Collect Environmental/VPD Information from Nodes Run command on all xSeries/Blade nodes Information to report Collect Service Processor Log Information from Nodes Read all log entries Read all log entries and clear log Clear all log entries Number of entries to read Set SNMP Agent Configuration Information for Nodes Set system contact name Set community name and first community address Set community address Remove community address Set system location  Enable SNMP Agent Disable SNMP Agent Enable trap-directed notification Disable trap-directed notification Set event trigger Clear event trigger Collect SNMP Agent Configuration Information for Nodes Return information Configure SP frame hardware control points for I/O units List of frames to configure Display configuration information for I/O units and nodes Update output with I/O units attached Control SP hardware Command to send Monitor SP Nodes and Frames Display data for all nodes,servers Display for all nodes,servers,frames,I/O units Display frame information for
hardware control point Display information for all hardware connected to
hardware control point Display current state Display current state prior to changed state Display only the following state variable values Display list of symbolic variable names and 
indices Display output in raw format Display output in symbolic format Administer CSP daemon Operation Debug flag (optional) CSM Cluster Command (dsh) Command to execute Execute on all defined nodes Node List Verify node reachability prior Userid to execute command with Fanout value Timeout value Streaming mode for output Remote shell path Remote shell options Remote shell syntax to use Append output with return code Filter/Format Output (dshbak) Collapse identical dshbak output CSM Cluster Copy (dcp) Copy TO or FROM Managed Nodes Source file/directory to copy Target file/directory for the copied files Copy to/from all Cluster nodes Options for copy operation Preserve source file attributes Recursively copy files Fanout (default=64) Use rsync for copy Login (default=current login) CSM Probe Manager Display dependencies and run order Exit code for termination probemgr Message output level Directory containing user probes Specific probes to exclude Specific probe to execute Backup CSM Data Directory Filename containing additional files Specific resource to backup Restore CSM Data HA CSM (TBD) List all defined node groups List the definition of all groups Display all node groups containing this node Display "where" select string for this node group Remove and cleanup CSM cluster nodes 
before uninstalling Note: Unset an attribute by specifying 
("") <quote><quote> as its new value File containing a list of cluster nodes Display the member list for all groups A file containing a list of node names Install/update Linux RPMs Options to pass to SMS (Must be in quotes) Number of nodes to define Set community names Remove community names List of nodes to replace the group's current nodes CEC Startup Mode Device List Device Groups Use All Nodes and Devices? Copy files needed for node install List of authentication methods to be set on node Display attributes from IBM.Host resource class List of devices to replace the group's current 
devices Set hostname field with 'HWControlNodeId' 
attribute Execute the specified probe(s) on all nodes? Display output in nodedef format Write console user_id and password? Remove the specified password file List which nodes are up to date? Remote copy command (full path name) Display fanout value and node list? Timeout value Verify node reachability prior? Display remote copy command? Suppress output file writing Prompt for non-responsive nodes Report output path Display environment variable settings Export locale settings to remote nodes Monitor command execution for each node Log file name Retry unsuccessful command execution yes,no standalone,dataless,diskless chrp,rspc,rs6k mp,up FROM,TO Cluster System Management CSM Install Install the Management Server Uninstall the Management Server Update CSM on the Cluster Nodes Convert CSM to NIM Nodes Convert CSM to NIM Groups CSM Setup of NIM Network Installation Manager Manage Cluster Data Cluster Nodes Define CSM Cluster Nodes Modify a CSM Cluster Node Remove a CSM Cluster Node Display CSM Cluster Nodes Cluster Node Groups Defne a CSM Node Group Modify a CSM Node Group Remove a CSM Node Group Display CSM Node Groups CSM Hardware Control Power Control Get Adapter Information Network Boot Node List Hardware Information Hardware Control Access Information Additional CSM Commands Configure the Management Server Verify Management Server Installation Copy Additional CSM and related packages (Linux nodes) Accept the CSM License Perform Additional Management Server Configuration Update Configuration Files on the Cluster Nodes Manage RPMs on Linux Cluster Nodes Cluster Devices Cluster Device Groups Modify CSM Cluster Nodes Remove CSM Cluster Nodes Define CSM Node Groups Remove CSM Node Groups Define CSM Cluster Devices Modify CSM Cluster Devices Remove CSM Cluster Devices Display CSM Cluster Devices Define CSM Device Groups Modify a CSM Device Group Remove CSM Device Groups Display CSM Devices Groups CSM Cluster Status Additional H/W Control Commands Conserver Commands xSeries/Blade Commands SP/Attached pSeries Commands Process entries in Conserver config file Refresh Conserver Daemon Collect Environmental/VPD Information from Nodes Collect Service Processor Log Information from Nodes Set SNMP Agent Configuration Information for Nodes Collect SNMP Agent Configuration Information for Nodes Configure SP frame hardware control points for I/O units Display configuration information for I/O units and nodes Control SP hardware Monitor SP Nodes and Frames Administer CSP daemon CSM Cluster Command (dsh) CSM Cluster Copy (dcp) CSM Probe Manager Backup CSM Data Restore CSM Data HA CSM Cluster Systems Management Define a CSM Node Group ekk 1PB$  7u     ]  *r@*r@*r@             ]      ./usr/sbin/rsct/trctmplts/_CLG.tpl /inst                   $          # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2001,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 

# Trace templates for component _CLG generated by cugentpl.

0 ">>Function '%s' entered."
1 ">>Function '%s' entered with parameters [%s]."
2 "<<Function '%s' leaving."
3 "<<Function '%s' leaving with return code of %d."
4 "%s"
ay k[ 1PB  7u     K  q@q@q@             K      ./usr/websm/config/factory_defaults/AppClusterCore.db cs                             plugin=com.ibm.csm.apps.ClusterContainer
meta=2000:com.ibm.websm.apps.wsmrealm.RealmSingleContainer
version=5.2.0.30
cversion=5.2.0.30
mfversion=5.2.0.0
rootpkg=com.ibm.csm
plugin=com.ibm.csm.apps.NodeHostContainer
meta=2000:com.ibm.csm.apps.NodesContainer
version=5.2.0.30
cversion=5.2.0.30
mfversion=5.2.0.0
rootpkg=com.ibm.csm

ct wik  l0PB  7u     aS  Fq@Fq@Fq@             aS      ./opt/csm/bin/copycsmpkgs _defau                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2000,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#
# @(#)13   1.60   src/csm/install/copycsmpkgs.perl, setup, csm_rveg, rveg0414a 2/2/04 15:32:07

#--------------------------------------------------------------------------------

=head1    copycsmpkgs

	Platform independent install of /csminstall on Linux and AIX managment servers.

        Example:

         copycsmpkgs -p . InstallCSMVersion=1.3.2 InstallDistributionName=SLES \
                          InstallDistributionVersion=8.1 InstallOSName=Linux \
                          InstallPkgArchitecture=i386 
	Notes:  

=cut

#--------------------------------------------------------------------------------

=head3	file header

        the use statements and $ENV stuff


=cut

#--------------------------------------------------------------------------------

use strict;
BEGIN { $::csmpm = $ENV{'CSM_PM'} ? $ENV{'CSM_PM'} : '/opt/csm/pm'; }
use lib $::csmpm;
use File::Path;

# Provides mkpath();
use FindBin qw($Bin);
use lib "$Bin";

use Getopt::Std;
use NodeUtils;
use CSMDefs;
use InstallUtils;

#--------------------------------------------------------------------------------

=head3	initialize

	sets @::COPY_VALID_ATTRS and $::MSGCAT globals

=cut

#--------------------------------------------------------------------------------

sub initialize
{

    $::MSGCAT     = 'csmInstall.cat';
    $::MSGMAPPATH =
      $ENV{'CSM_MSGMAPS'} ? $ENV{'CSM_MSGMAPS'} : '/opt/csm/msgmaps';
    $::MSGSET = 'csminstall';

    @::COPY_VALID_ATTRS = (
                           "InstallCSMVersion",
                           "InstallOSName",
                           "InstallDistributionName",
                           "InstallDistributionVersion",
                           "InstallPkgArchitecture"
                           );
    @::osTypeVersion;

    $::PLTFRM = `uname`;
    chomp($::PLTFRM);

    # read in the OSDefs, but don't set gobals?
    my %OSDefs = ServerUtils->get_OSDefs();

}

#--------------------------------------------------------------------------------

=head3	usage

        Notes:


=cut

#--------------------------------------------------------------------------------

sub usage
{
    MessageUtils->message('I', 'IMsgcopycsmpkgsUsage');

    exit 1;
}

#--------------------------------------------------------------------------------

=head3	getArgs

        Notes:

=cut

#--------------------------------------------------------------------------------

sub getArgs
{
    my $pkgpath = "";
    if (!getopts('p:cvVh')) { &usage; }

    $::command_line = $0;

    if ($::opt_h) { &usage }
    $::COPY_OPT_FLAG = $::opt_c;
    if ($::opt_v || $::opt_V)
    {
        if ($::opt_v) { $::VERBOSE = $::opt_v; }
        if ($::opt_V) { $::VERBOSE = $::opt_V; }

    }
    if ($::opt_p)
    {

        # Packages path
        $pkgpath = $::opt_p;
    }

    if (!($::opt_p)) { &usage; }

    # Handle attr=value arguments
    if (scalar(@ARGV) > 0)
    {
        foreach my $a (@ARGV)
        {

            # Note:  we allow a null value
            my ($attr, $value) = $a =~ /^\s*(\S+?)\s*=\s*(\S*.*)$/;

            # mkrsrc-api needs something for the value
            if (!length($value))
            {
                $value = "''";
            }
            if (!defined($attr))
            {
                MessageUtils->message('W', 'EMsgBAD_ATTR_VAL_FORM');
                &usage;
            }

            my $found = 0;
            foreach my $va (@::COPY_VALID_ATTRS)
            {
                if ($attr eq $va)
                {

                    # Put quotes around the value to protect spaces
                    # or weird chars

                    $::ATTRS{$va} = $value;
                    $found = 1;
                }
            }
            if (!$found) { MessageUtils->message('E1', 'EMsgBAD_ATTR', $attr); }
        }
    }

    # verify the correctness of the attributes
    &checkattrs;

    @::PKGPATH = split(":", $pkgpath);

    foreach my $p (split(":", $pkgpath))
    {

        #gather the subdirectories too
        push @::PKGPATH, (ServerUtils->returnSubdirectory($p));
    }
}

#--------------------------------------------------------------------------------

=head3	checkattrs

        Notes:

=cut

#--------------------------------------------------------------------------------

sub checkattrs
{

    #check if all the attributes are there, if not defined then get the
    #default from Management Server
    if (!($::ATTRS{'InstallOSName'}))
    {
        $::ATTRS{'InstallOSName'} = InstallUtils->get_OSName;
    }
    if (!($::ATTRS{'InstallCSMVersion'}))
    {
        $::ATTRS{'InstallCSMVersion'} =
          InstallUtils->get_CSMVersion("csm\.core");
    }
    if (!($::ATTRS{'InstallDistributionName'}))
    {
        if (($::ATTRS{'InstallOSName'} eq "Linux") && ($::PLTFRM eq "Linux"))
        {
            $::ATTRS{'InstallDistributionName'} =
              InstallUtils->get_DistributionName;
        }
        elsif (($::ATTRS{'InstallOSName'} eq "Linux") && ($::PLTFRM eq "AIX"))
        {
            NodeUtils->message('E1', 'EMsgNoDistributionName');
        }
    }
    if (!($::ATTRS{'InstallDistributionVersion'}))
    {
        if ((($::ATTRS{'InstallOSName'} eq "Linux") && ($::PLTFRM eq "Linux"))
            || (($::ATTRS{'InstallOSName'} eq "AIX") && ($::PLTFRM eq "AIX")))
        {
            $::ATTRS{'InstallDistributionVersion'} =
              InstallUtils->get_DistributionVersion;
        }
        else
        {
            NodeUtils->message('E1', 'EMsgNoDistributionVersion');
        }
    }
    if (!($::ATTRS{'InstallPkgArchitecture'}))
    {
        if (($::ATTRS{'InstallOSName'} eq "Linux") && ($::PLTFRM eq "Linux"))
        {
            $::ATTRS{'InstallPkgArchitecture'} =
              InstallUtils->get_PkgArchitecture;
        }
        elsif (($::ATTRS{'InstallOSName'} eq "Linux") && ($::PLTFRM eq "AIX"))
        {
            NodeUtils->message('E1', 'EMsgNoArch');
        }
    }

    # check for the valid attributes
    if (length($::ATTRS{'InstallCSMVersion'}) == 0)
    {
        NodeUtils->message('E2', 'EMsgNO_CORE_COPY');
    }

    if ($::ATTRS{'InstallOSName'} eq "Linux")
    {
        if ($::ATTRS{'InstallPkgArchitecture'} =~ /i.86/)    #SSS
        {
            $::ATTRS{'InstallPkgArchitecture'} = "i386";
        }
        my $temp_distro =
            $::ATTRS{'InstallDistributionName'} . " "
          . $::ATTRS{'InstallDistributionVersion'};
        if (!grep(/^$temp_distro$/, @::VALID_DISTROS))
        {
            NodeUtils->message('E', 'EMsgUNSUPPORTED_DISTRO',
                               $temp_distro, join(', ', @::VALID_DISTROS));
        }
        else { NodeUtils->message('V', 'IMsgDETECTED_DISTRO', $temp_distro); }
        if (!grep(/^$::ATTRS{'InstallCSMVersion'}$/, @::VALID_CSM_DISTROS))
        {
            NodeUtils->message(
                               'E5',
                               'EMsgUNSUPPORTED_CSM_DISTRO',
                               "CSM" . $::ATTRS{'InstallCSMVersion'},
                               join(', ', @::VALID_CSM_DISTROS)
                               );
        }
        else
        {
            NodeUtils->message(
                               'V',
                               'IMsgDETECTED_CSM_DISTRO',
                               "CSM" . $::ATTRS{'InstallCSMVersion'}
                               );
        }

        $::DISTRO = $temp_distro;
    }
    elsif ($::ATTRS{'InstallOSName'} eq "AIX")
    {

        # copycsmpkgs will no longer be used to copy AIX files.  If Linux nodes are being
        # managed from an AIX management server then the copycsmpkgs command will be used
        # to copy the Linux packages.
        NodeUtils->message('E', 'EMsgCopyingAIXpkgs');
        exit 1;
    }
    else
    {
        NodeUtils->message("E2", 'EMsgINVALID_OSTYPE');
    }

}

#--------------------------------------------------------------------------------

=head3	getPackageList

        Notes:

=cut

#--------------------------------------------------------------------------------

sub getPackageList
{
    %::pkgdefs =
      InstallUtils->get_pkgdefs(
                                $::ATTRS{'InstallOSName'},
                                $::ATTRS{'InstallDistributionName'},
                                $::ATTRS{'InstallDistributionVersion'},
                                $::ATTRS{'InstallPkgArchitecture'},
                                'MgdNode',
                                $::ATTRS{'InstallCSMVersion'}
                                );

    if ($::ATTRS{'InstallOSName'} eq "AIX")
    {
        $::osTypeVersion =
          $::ATTRS{'InstallOSName'} . $::ATTRS{'InstallDistributionVersion'};
        $::INSTALLDIR       = "/csminstall";
        $::INSTALLDIR_CSM   = $::INSTALLDIR . "/csm";    #/csminstall/csm
        $::INSTALLDIR_CSMVR =
            $::INSTALLDIR_CSM . "/"
          . $::ATTRS{'InstallCSMVersion'};               #/csminstall/csm/1.2/
        $::INSTALLDIR_CSMVRBIN =
          $::INSTALLDIR_CSMVR . "/bin";    #/csminstall/csm/1.2/bin

        $::INSTALLDIR_OS =
          $::INSTALLDIR . "/" . $::ATTRS{'InstallOSName'};    #/csminstall/AIX
        $::INSTALLDIR_OSVER =
            $::INSTALLDIR_OS . "/"
          . $::ATTRS{InstallDistributionVersion};    #/csminstall/AIX/5.1
        $::INSTALLDIR_OSCSM = $::INSTALLDIR_OS . "/csm";    #/csminstall/AIX/csm

        $::INSTALLDIR_CSMVER =
            $::INSTALLDIR_OSCSM . "/"
          . $::ATTRS{'InstallCSMVersion'};    #/csminstall/AIX/csm/1.2.0

        $::INSTALLDIR_CSMBIN =
          $::INSTALLDIR_CSMVER . "/bin";      #/csminstall/AIX/csm/1.2.0/bin
        $::INSTALLDIR_CSMPKG =
          $::INSTALLDIR_CSMVER
          . "/packages";    #/csminstall/AIX/csm/1.2.0/packages
        $::INSTALLDIR_CSMRPM =
          $::INSTALLDIR_CSMPKG
          . "/rpms";        #/csminstall/AIX/csm/1.2.0/packages/rpms
        $::INSTALLDIR_CSMINSTLP =
          $::INSTALLDIR_CSMPKG
          . "/installp";    #/csminstall/AIX/csm/1.2.0/packages/installp

        #
        # create package lists
        #

        # List of Open Source Packages that are required on the node
        my @mgdnode_open_srcrpms = (@{$::pkgdefs{opensrc_prereqs}});
        @::opensrc_rpm_prereqs = (@mgdnode_open_srcrpms);

        # Lists of packages that are part of each CSM component
        my @csm_client_packages = (@{$::pkgdefs{csm_packages}});
        @::csm_packages = (@csm_client_packages);

        my @rsct_client_packages = (@{$::pkgdefs{rsct_packages}});
        @::rsct_packages = (@rsct_client_packages);

        # Operating System Prereqs we need for Managed Nodes
        @::os_prereq = (@{$::pkgdefs{os_prereqs}});

    }
    elsif ($::ATTRS{'InstallOSName'} eq "Linux")
    {
        $::osTypeVersion =
            $::ATTRS{'InstallOSName'}
          . $::ATTRS{'InstallDistributionName'}
          . $::ATTRS{'InstallDistributionVersion'};
        $::INSTALLDIR       = "/csminstall";
        $::INSTALLDIR_CSM   = $::INSTALLDIR . "/csm";    #/csminstall/csm
        $::INSTALLDIR_CSMVR =
            $::INSTALLDIR_CSM . "/"
          . $::ATTRS{InstallCSMVersion};                 #/csminstall/csm/1.2/
        $::INSTALLDIR_CSMVRBIN =
          $::INSTALLDIR_CSMVR . "/bin";    #/csminstall/csm/1.2/bin

        $::INSTALLDIR_OS =
            $::INSTALLDIR . "/"
          . $::ATTRS{"InstallOSName"} . "/"
          . $::ATTRS{'InstallDistributionName'};

        #/csminstall/Linux/RedHat
        $::INSTALLDIR_OSVER =
            $::INSTALLDIR_OS . "/"
          . $::ATTRS{InstallDistributionVersion};  #/csminstall/Linux/RedHat/7.0
        $::INSTALLDIR_OSVER_ARCH =
          $::INSTALLDIR_OSVER . "/"
          . $::ATTRS{
            'InstallPkgArchitecture'};    #/csminstall/Linux/Redhat/7.0/i386

        $::INSTALLDIR_OSCSM =
          $::INSTALLDIR_OS . "/csm";      #/csminstall/Linux/RedHat/csm
        $::INSTALLDIR_CSMVER =
            $::INSTALLDIR_OSCSM . "/"
          . $::ATTRS{InstallCSMVersion};    #/csminstall/Linux/RedHat/csm/1.2.0

        my $INSTALLDIR_OS_NAME = $::PREREQS_ATTR{DistributionName};
        if ($::PREREQS_ATTR{DistributionName} =~ /RedHat/)
        {
            $INSTALLDIR_OS_NAME = "RedHat";
        }
        $::INSTALLDIR_OS_NAME_RPMS =
          $::INSTALLDIR_OSVER_ARCH . "/" . $INSTALLDIR_OS_NAME . "/RPMS";

        #/csminstall/Linux/RedHat/7.3/i386/RedHat/RPMS
        $::INSTALLDIR_CSMBIN =
          $::INSTALLDIR_CSMVER . "/bin"; #/csminstall/Linux/RedHat/csm/1.2.0/bin
        $::INSTALLDIR_CSMPKG =
          $::INSTALLDIR_CSMVER
          . "/packages";    #/csminstall/Linux/RedHat/csm/1.2.0/packages

        #
        # create package lists
        #

        # Lists of Open Source Packages that are required on the node
        my @mgdnode_open_srcrpms = (@{$::pkgdefs{opensrc_prereqs}});
        @::opensrc_rpm_prereqs = (@mgdnode_open_srcrpms);

        # Lists of packages that are part of each CSM component
        my @csm_client_packages = (@{$::pkgdefs{csm_packages}});
        @::csm_packages = (@csm_client_packages);

        my @rsct_client_packages = (@{$::pkgdefs{rsct_packages}});
        @::rsct_packages = (@rsct_client_packages);

        # No need of  director if the OS is AIX
        if ($::PLTFRM eq "Linux")
        {
            @::director_packages = (@{$::pkgdefs{director_packages}});
        }
        else
        {
            @::director_packages = ();
        }

        # Operating System Prereqs for Managed Nodes
        @::os_prereq = (@{$::pkgdefs{os_prereqs}});

        # get sis packages
        #if ( !($::ATTRS{'InstallPkgArchitecture'}  =~ /ppc64/) )
        #{
        #    if( $::DISTRO =~ /SLES/ || $::DISTRO =~ /SuSE/ )
        #    {
        #	      @::sis_packages = (@{$::pkgdefs{sis_packages}});
        #    }
        #}
        # Populate the version release of definition hash
        #foreach my $tmp_var_rpm (@::opensrc_rpm_prereqs, @::csm_packages, @::rsct_packages, @::director_packages, @::os_prereq, @::sis_packages)
        foreach my $tmp_var_rpm (
                                 @::opensrc_rpm_prereqs, @::csm_packages,
                                 @::rsct_packages,       @::director_packages,
                                 @::os_prereq
          )
        {
            my ($my_version, $my_release) =
              split(/::/, InstallUtils->get_definition_version($tmp_var_rpm));
            my @parts = split /-/, $tmp_var_rpm;
            my $basename = shift @parts;
            my $p;
          BNAME: while ($p = shift @parts)
            {
                if ($p !~ m/^\d/)
                {    #if it doesn't start with a digit
                    $basename .= "-$p";
                }
                else { unshift @parts, $p; last BNAME; }
            }
            my $tmp_var1;
            my $my_rindex = rindex($basename, "*");
            if ($my_rindex != -1)
            {
                $tmp_var1 = substr($basename, 0, rindex($basename, "*"));
            }
            else { $tmp_var1 = $basename; }
            $my_rindex = rindex($tmp_var1, "-");
            if (($my_rindex + 1) == 0) { $basename = $tmp_var1; }
            elsif (($my_rindex + 1) == length($tmp_var1))
            {
                $basename = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
            }
            else { $basename = $tmp_var1; }

            $::PackageVersionName{$basename}{'Version'}  = $my_version;
            $::PackageVersionName{$basename}{'Release'}  = $my_release;
            $::PackageVersionName{$basename}{'FullName'} = $tmp_var_rpm;
        }

    }
    else
    {
        NodeUtils->message("E2", 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3	create_directory_structure

        Notes:

=cut

#--------------------------------------------------------------------------------

sub create_directory_structure
{
    NodeUtils->message('I', 'IMsgCreatingDirectories');
    mkpath($::INSTALLDIR_CSMVRBIN, $::VERBOSE, 0755);
    mkpath($::INSTALLDIR_CSMBIN,   $::VERBOSE, 0755);
    mkpath($::INSTALLDIR_CSMPKG,   $::VERBOSE, 0755);

    if ($::ATTRS{'InstallOSName'} eq "AIX")
    {
        mkpath($::INSTALLDIR_CSMRPM,    $::VERBOSE, 0755);
        mkpath($::INSTALLDIR_CSMINSTLP, $::VERBOSE, 0755);
    }
    elsif ($::ATTRS{'InstallOSName'} eq "Linux")
    {
        InstallUtils->createRPMSdir(
                                    $::ATTRS{'InstallOSName'},
                                    $::ATTRS{'InstallDistributionName'},
                                    $::ATTRS{'InstallDistributionVersion'},
                                    $::ATTRS{'InstallPkgArchitecture'}
                                    );

    }
    else
    {
        NodeUtils->message('E2', 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3	Main

=cut

#--------------------------------------------------------------------------------

{    # main

    # initialize runtime env
    &initialize;

    # Check the arguments
    &getArgs;

    # get the packege list that needs to be copied
    &getPackageList;

    #Create the destination directories
    &create_directory_structure;

    # get version/release of rpms in /csminstall
    InstallUtils->get_csminstall_pathVersion();

    # Copy the packages to the destination directories

    # find rpms in the -p flag paths
    InstallUtils->search_csm();
    InstallUtils->search_opensrc_prereqs();

    # handle force copy flag
    if ($::COPY_OPT_FLAG)
    {
        if (scalar(@::RpmsNotFoundInCmdPath) >= 1)
        {
            NodeUtils->message('E1', 'EMsgNoRpmFound',
                               join(", ", @::RpmsNotFoundInCmdPath));
        }
        else
        {
            InstallUtils->create_rpm_list_to_copy();
            if (scalar(@::Rpms_not_found) >= 1)
            {
                NodeUtils->message('E1', 'EMsgNoRpmFound',
                                   join(", ", @::Rpms_not_found));
            }
            else
            {
                NodeUtils->message('I', 'IMsgCopyingRpms',
                                   "CSM, RSCT, Director and Open Source");
                ArchiveUtils->copy_rpm();
                ServerUtils->post_csm_copy();
            }
        }
    }
    else
    {
        InstallUtils->create_rpm_list_to_copy();
        if (scalar(@::Rpms_not_found) >= 1)
        {

            #check for the rpms to be ignored
            my @rpm_ignored     = ();
            my @rpm_not_ignored = ();
            foreach my $rpm_name (@::Rpms_not_found)
            {
                if (   ($rpm_name =~ m/autoupdate/)
                    || ($rpm_name =~ m/perl-libnet/)
                    || ($rpm_name =~ m/perl-DBI/)
                    || ($rpm_name =~ m/perl-XML-Parser/)
                    || ($rpm_name =~ m/perl-XML-Simple/)
                    || ($rpm_name =~ m/fping/))
                {
                    push(@rpm_ignored, $rpm_name);
                }
                else { push(@rpm_not_ignored, $rpm_name); }
            }
            @::Rpms_not_found = @rpm_not_ignored;
            if (scalar(@rpm_ignored) >= 1)
            {
                NodeUtils->message('I', 'IMsgMissingRPM',
                                   join(", ", @rpm_ignored));
            }
            if (scalar(@::Rpms_not_found) > 0)
            {
                NodeUtils->message('E1', 'EMsgNoRpmFound',
                                   join(", ", @::Rpms_not_found));
            }
            NodeUtils->message('I', 'IMsgCopyingRpms',
                               "CSM, RSCT, Director and Open Source");
            ArchiveUtils->copy_rpm();
            ServerUtils->post_csm_copy();
        }
        else
        {
            NodeUtils->message('I', 'IMsgCopyingRpms',
                               "CSM, RSCT, Director and Open Source");
            ArchiveUtils->copy_rpm();
            ServerUtils->post_csm_copy();
        }
    }

    #Search for the distro rpms
    InstallUtils->search_copy_distro_rpms();

    # Copy the 'binaries' needed for install to /csminstall/csm
    # We need to copy the binaries here in copycsmpkgs as well as in installms
    # because in a mixed-architecture Linux cluster (xLinux and pLinux), installms
    # would have only copied the binaries for the management server's architecture.
    #

    MessageUtils->message('I', 'IMsgCOPYING_CSMBINARIES');

    ServerUtils->copyBinaries(
                        $::ATTRS{'InstallOSName'},
                        $::ATTRS{'InstallDistributionName'},
                        $::ATTRS{'InstallDistributionVersion'},
                        $::ATTRS{'InstallPkgArchitecture'},
                        $::ATTRS{'InstallCSMVersion'},
                        );


    exit 0;


    #if( $::DISTRO =~ /SLES/ || $::DISTRO =~/SuSE/ ) {
    #       &copy_sis_rpms;
    #}

} # main

-------k. n0PB  7u       q@q@q@                   ./opt/csm/bin/csmcorecfg  _defau                             #!/usr/bin/ksh
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2001,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 

mkdir -p /var/log/csm

exit 0
nakNX p0PB  7u       q@q@q@                   ./opt/csm/bin/csmcoreuncfg defau                             #! /bin/ksh
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2001,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 

rm -rf /var/log/csm

#/opt/csm/bin/cfmuninst
      k\ r0PB  7u       Bq@Bq@Bq@                   ./opt/csm/bin/installms                              #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2000,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)80   1.28.1.217   src/csm/install/installms.perl, setup, csm_rveg, rveg0414a 3/21/04 11:36:52

#--------------------------------------------------------------------------------

=head1    installms.perl

	Installs CSM on Linux managment servers

	Notes:  

	AIX code removed

=cut

#--------------------------------------------------------------------------------

=head3  File header

        Notes:

          file header gathers pkgdefs values.

=cut

#--------------------------------------------------------------------------------

use strict;
BEGIN { $::csmpm = $ENV{'CSM_PM'} ? $ENV{'CSM_PM'} : '/opt/csm/pm'; }
use lib $::csmpm;
use File::Path;

# Provides mkpath();
use FindBin qw($Bin);
use lib "$Bin";

use Getopt::Std;
use NodeUtils;
use CSMDefs;

use InstallUtils;

$::MSGCAT     = 'csmInstall.cat';
$::MSGMAPPATH = $ENV{'CSM_MSGMAPS'} ? $ENV{'CSM_MSGMAPS'} : '/opt/csm/msgmaps';
$::MSGSET     = 'csminstall';

#--------------------------------------------------------------------------------

=head3	initialize

	initializes globals from package defs

=cut

#--------------------------------------------------------------------------------

sub initialize
{

    # 0 = tftp server rpm not installed.
    $::default_tftp_server_installed = 0;

    $::command_line;
    $::COPY_OPT_FLAG;
    %::PackageVersionName          = ();
    %::PackageVersionName_Server   = ();
    %::PackageVersionName_Node     = ();
    %::PathVersionName             = ();
    %::CmdLinePathVersionName      = ();
    %::temp_CmdLinePathVersionName = ();
    @::RpmsNotFoundInCmdPath       = ();
    @::Rpms_to_be_copied           = ();
    @::Rpms_not_found              = ();

    #  OS Definitions
    my %OSDefs = ServerUtils->get_OSDefs();

    $::PREREQS_ATTR{'OSName'} = NodeUtils->get_OSName;
    my $OSName = $::PREREQS_ATTR{'OSName'};

    # NLS hack
    if ($ENV{LANG} =~ /^(C|POSIX|en_US)/) { $::ENGLISH = 1; }

    # installms is not supported on AIX management servers
    if ($OSName eq "AIX")
    {
        NodeUtils->message('E', 'EMsgAIXandInstallms');
        exit 1;
    }

    # processor
    $::PREREQS_ATTR{'PkgArchitecture'} = NodeUtils->get_PkgArchitecture;
    if ($::PREREQS_ATTR{'PkgArchitecture'} =~ /i.86/)
    {
        $::PREREQS_ATTR{'PkgArchitecture'} = "i386";
    }

    # CSM version
    $::PREREQS_ATTR{'CsmCoreVersion'} = NodeUtils->get_CSMVersion("csm\.core");
    if (length($::PREREQS_ATTR{'CsmCoreVersion'}) == 0)
    {
        NodeUtils->message('E2', 'EMsgNO_CORE');
    }

    @::VALID_ATTRS = ("RemoteShell", "SetupRemoteShell");
    $::PREREQS_ATTR{'DistributionName'}    = NodeUtils->get_DistributionName;
    $::PREREQS_ATTR{'DistributionVersion'} = NodeUtils->get_DistributionVersion;

    # Pacakge Defines

    # management server
    %::Svrpkgdefs =
      ServerUtils->get_pkgdefs(
                               $::PREREQS_ATTR{'OSName'},
                               $::PREREQS_ATTR{'DistributionName'},
                               $::PREREQS_ATTR{'DistributionVersion'},
                               $::PREREQS_ATTR{'PkgArchitecture'},
                               "MgmtServer",
                               $::PREREQS_ATTR{'CsmCoreVersion'}
                               );

    # managed node
    %::Nodepkgdefs =
      ServerUtils->get_pkgdefs(
                               $::PREREQS_ATTR{'OSName'},
                               $::PREREQS_ATTR{'DistributionName'},
                               $::PREREQS_ATTR{'DistributionVersion'},
                               $::PREREQS_ATTR{'PkgArchitecture'},
                               "MgdNode",
                               $::PREREQS_ATTR{'CsmCoreVersion'}
                               );

    # version/release hash for Server and Node package list
    foreach my $k (keys %::Svrpkgdefs)
    {
        if (   ($k eq "director_packages")
            || ($k eq "opensrc_prereqs")
            || ($k eq "csm_packages")
            || ($k eq "os_prereqs")
            || ($k eq "rsct_packages"))
        {
            @::tmp_var_array = (@{$::Svrpkgdefs{$k}});
            foreach my $tmp_var_rpm (@::tmp_var_array)
            {
                my ($my_version, $my_release) =
                  split(/::/,
                        ArchiveUtils->get_definition_version($tmp_var_rpm));
                my @parts = split /-/, $tmp_var_rpm;
                my $basename = shift @parts;
                my $p;
              BNAME: while ($p = shift @parts)    # this sucks
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $basename .= "-$p";
                    }
                    else { unshift @parts, $p; last BNAME; }
                }
                my $tmp_var1;
                my $my_rindex = rindex($basename, "*");
                if ($my_rindex != -1)
                {
                    $tmp_var1 = substr($basename, 0, rindex($basename, "*"));
                }
                else { $tmp_var1 = $basename; }
                $my_rindex = rindex($tmp_var1, "-");
                if (($my_rindex + 1) == 0) { $basename = $tmp_var1; }
                elsif (($my_rindex + 1) == length($tmp_var1))
                {
                    $basename = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
                }
                else { $basename = $tmp_var1; }
                $::PackageVersionName_Server{$basename}{'Version'} =
                  $my_version;
                $::PackageVersionName_Server{$basename}{'Release'} =
                  $my_release;
                $::PackageVersionName_Server{$basename}{'FullName'} =
                  $tmp_var_rpm;
            }
        }
    }
    foreach my $k (keys %::Nodepkgdefs)
    {
        if (   ($k eq "director_packages")
            || ($k eq "opensrc_prereqs")
            || ($k eq "csm_packages")
            || ($k eq "os_prereqs")
            || ($k eq "rsct_packages"))
        {
            @::tmp_var_array = (@{$::Nodepkgdefs{$k}});
            foreach my $tmp_var_rpm (@::tmp_var_array)
            {
                my ($my_version, $my_release) =
                  split(/::/,
                        ArchiveUtils->get_definition_version($tmp_var_rpm));
                my @parts = split /-/, $tmp_var_rpm;
                my $basename = shift @parts;
                my $p;
              BNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $basename .= "-$p";
                    }
                    else { unshift @parts, $p; last BNAME; }
                }
                my $tmp_var1;
                my $my_rindex = rindex($basename, "*");
                if ($my_rindex != -1)
                {
                    $tmp_var1 = substr($basename, 0, rindex($basename, "*"));
                }
                else { $tmp_var1 = $basename; }
                $my_rindex = rindex($tmp_var1, "-");
                if (($my_rindex + 1) == 0) { $basename = $tmp_var1; }
                elsif (($my_rindex + 1) == length($tmp_var1))
                {
                    $basename = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
                }
                else { $basename = $tmp_var1; }
                $::PackageVersionName_Node{$basename}{"Version"}  = $my_version;
                $::PackageVersionName_Node{$basename}{"Release"}  = $my_release;
                $::PackageVersionName_Node{$basename}{"FullName"} =
                  $tmp_var_rpm;
            }
        }
    }
}

#--------------------------------------------------------------------------------

=head3    set_variables


=cut

#--------------------------------------------------------------------------------

sub set_variables
{

    # installms only runs on Linux systems
    my $OSName = $::PREREQS_ATTR{'OSName'};
    if ($OSName ne "Linux")
    {

        # should never get here
        NodeUtils->message("E2", 'EMsgINVALID_OSTYPE');
    }

    my $temp_distro =
        $::PREREQS_ATTR{'DistributionName'} . " "
      . $::PREREQS_ATTR{'DistributionVersion'};
    if (!grep(/^$temp_distro$/, @::VALID_DISTROS))
    {
        NodeUtils->message('W', 'EMsgUNSUPPORTED_DISTRO',
                           $temp_distro, join(', ', @::VALID_DISTROS));
    }
    else { NodeUtils->message('V', 'IMsgDETECTED_DISTRO', $temp_distro); }
    if (!grep(/^$::PREREQS_ATTR{'CsmCoreVersion'}$/, @::VALID_CSM_DISTROS))
    {
        NodeUtils->message(
                           'E5',
                           'EMsgUNSUPPORTED_CSM_DISTRO',
                           "CSM" . $::PREREQS_ATTR{'CsmCoreVersion'},
                           join(', ', @::VALID_CSM_DISTROS)
                           );
    }
    else
    {
        NodeUtils->message('V', 'IMsgDETECTED_CSM_DISTRO',
                           "CSM" . $::PREREQS_ATTR{'CsmCoreVersion'});
    }

    $::PREREQS_ATTR{'OSTypeVer'} =
        $::PREREQS_ATTR{'OSName'}
      . $::PREREQS_ATTR{'DistributionName'}
      . $::PREREQS_ATTR{'DistributionVersion'};

    # installation path
    $::INSTALLDIR       = "/csminstall";
    $::INSTALLDIR_CSM   = $::INSTALLDIR . "/csm";
    $::INSTALLDIR_CSMVR =
      $::INSTALLDIR_CSM . "/" . $::PREREQS_ATTR{CsmCoreVersion};
    $::INSTALLDIR_CSMVRBIN = $::INSTALLDIR_CSMVR . "/bin";
    $::INSTALLDIR_OS       =
        $::INSTALLDIR . "/"
      . $::PREREQS_ATTR{"OSName"} . "/"
      . $::PREREQS_ATTR{'DistributionName'};
    $::INSTALLDIR_OSVER =
      $::INSTALLDIR_OS . "/" . $::PREREQS_ATTR{DistributionVersion};
    $::INSTALLDIR_OSVER_ARCH =
      $::INSTALLDIR_OSVER . "/" . $::PREREQS_ATTR{'PkgArchitecture'};
    $::INSTALLDIR_OSCSM  = $::INSTALLDIR_OS . "/csm";
    $::INSTALLDIR_CSMVER =
      $::INSTALLDIR_OSCSM . "/" . $::PREREQS_ATTR{CsmCoreVersion};
    my $INSTALLDIR_OS_NAME = $::PREREQS_ATTR{DistributionName};

    if ($::PREREQS_ATTR{DistributionName} =~ /RedHat/)
    {
        $INSTALLDIR_OS_NAME = "RedHat";
    }
    $::INSTALLDIR_OS_NAME_RPMS =
      $::INSTALLDIR_OSVER_ARCH . "/" . $INSTALLDIR_OS_NAME . "/RPMS";
    $::INSTALLDIR_CSMBIN = $::INSTALLDIR_CSMVER . "/bin";
    $::INSTALLDIR_CSMPKG = $::INSTALLDIR_CSMVER . "/packages";

    # package lists

    # open source rpm prereqs

    @::mgmtserver_open_srcrpms = (@{$::Svrpkgdefs{opensrc_prereqs}});
    @::mdgnode_open_srcrpms    = (@{$::Nodepkgdefs{opensrc_prereqs}});
    @::opensrc_rpm_prereqs     =
      (@::mgmtserver_open_srcrpms, @::mdgnode_open_srcrpms);
    @::opensrc_rpm_prereqs =
      ServerUtils->get_uniqu_arry_elemnts(@::opensrc_rpm_prereqs);

    # csm packages

    @::mgmtserver_csm_packages = (@{$::Svrpkgdefs{csm_packages}});
    @::mdgnode_csm_packages    = (@{$::Nodepkgdefs{csm_packages}});
    @::csm_packages = (@::mgmtserver_csm_packages, @::mdgnode_csm_packages);
    @::csm_packages = ServerUtils->get_uniqu_arry_elemnts(@::csm_packages);

    # rsct packages

    @::mgmtserver_rsct_packages = (@{$::Svrpkgdefs{rsct_packages}});
    @::mdgnode_rsct_packages    = (@{$::Nodepkgdefs{rsct_packages}});
    @::rsct_packages = (@::mgmtserver_rsct_packages, @::mdgnode_rsct_packages);
    @::rsct_packages = ServerUtils->get_uniqu_arry_elemnts(@::rsct_packages);

    # director packages

    @::director_packages = (@{$::Svrpkgdefs{director_packages}});

    # operating system prereqs

    @::mgmtserver_os_prereq = (@{$::Svrpkgdefs{os_prereqs}});
    @::mdgnode_os_prereq    = (@{$::Nodepkgdefs{os_prereqs}});

    @::os_prereq = (@::mgmtserver_os_prereq, @::mdgnode_os_prereq);
    @::os_prereq = ServerUtils->get_uniqu_arry_elemnts(@::os_prereq);

    # get sis packages

    #if( ($::DISTRO =~ /SLES/ || $::DISTRO =~/SuSE/ ) && $::PREREQS_ATTR{'PkgArchitecture'}=~/i?86/ )
    #{
    #@::mgmtserver_sis_packages = (@{$::Svrpkgdefs{sis_packages}});
    #@::mdgnode_sis_packages = (@{$::Nodepkgdefs{sis_packages}});

    #@::sis_packages = (@::mgmtserver_sis_packages, @::mdgnode_sis_packages);
    #@::sis_packages = ServerUtils->get_uniqu_arry_elemnts(@::sis_packages);
    #}

    # CSM binaries copied to /csminstall/csm directory

    @::csm_bin_file_csm = (@{$::Svrpkgdefs{csm_bin_copy_csm}});

    # CSM binaries copied to /tftpboot directory

    @::csm_bin_file_tftpboot = (@{$::Svrpkgdefs{csm_bin_copy_tftpboot}});

    # default csm tftp server

    @::default_tftp_server_name =
      (@{$::Svrpkgdefs{default_tftp_server_pkg_name}});

    # Populate the version release of definition hash

    foreach my $tmp_var_rpm (@::opensrc_rpm_prereqs, @::csm_packages,
                             @::rsct_packages, @::director_packages,
                             @::os_prereq)
    {
        my ($my_version, $my_release) =
          split(/::/, ArchiveUtils->get_definition_version($tmp_var_rpm));
        my @parts = split /-/, $tmp_var_rpm;
        my $basename = shift @parts;
        my $p;
      BNAME: while ($p = shift @parts)
        {
            if ($p !~ m/^\d/)
            {    #if it doesn't start with a digit
                $basename .= "-$p";
            }
            else { unshift @parts, $p; last BNAME; }
        }
        my $tmp_var1;
        my $my_rindex = rindex($basename, "*");
        if ($my_rindex != -1)
        {
            $tmp_var1 = substr($basename, 0, rindex($basename, "*"));
        }
        else { $tmp_var1 = $basename; }
        $my_rindex = rindex($tmp_var1, "-");
        if (($my_rindex + 1) == 0) { $basename = $tmp_var1; }
        elsif (($my_rindex + 1) == length($tmp_var1))
        {
            $basename = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
        }
        else { $basename = $tmp_var1; }
        $::PackageVersionName{$basename}{'Version'}  = $my_version;
        $::PackageVersionName{$basename}{'Release'}  = $my_release;
        $::PackageVersionName{$basename}{'FullName'} = $tmp_var_rpm;
    }
}

#--------------------------------------------------------------------------------

=head3    usage

        Notes:

=cut

#--------------------------------------------------------------------------------

sub usage
{

    NodeUtils->message('I', 'IMsginstallmsUsage', join(' ', @::VALID_ATTRS));
    exit 1;
}

#--------------------------------------------------------------------------------

=head3    getArgs

        Notes:

=cut

#--------------------------------------------------------------------------------

sub getArgs
{
    my @command_line = ();
    @command_line   = @ARGV;
    $::command_line = $0 . " " . join(" ", @command_line);

    my $my_dir = NodeUtils->runcmd("pwd");
    chomp($my_dir);
    if ($my_dir =~ /$::MNTCDROM/)
    {
        NodeUtils->message('E1', 'IMsgCHANGE_TO_NON_CDROM_DRIVE', $my_dir);
        exit 1;
    }

    my $pkgpath = "";

    if (!getopts('p:cfxvVh')) { &usage; }
    if ($::opt_h)             { &usage }

    $::DONT_COPY_RPMS = $::opt_x;
    $::FORCE_INSTALL  = $::opt_f;
    $::COPY_OPT_FLAG  = $::opt_c;

    if ($::opt_v || $::opt_V)
    {
        if ($::opt_v) { $::VERBOSE = $::opt_v; }
        if ($::opt_V) { $::VERBOSE = $::opt_V; }

    }

    if ($::opt_x && $::opt_p) { &usage; }
    if (!($::opt_p ^ $::opt_x)) { &usage; }

    # Packages path
    if ($::opt_p) { $pkgpath = $::opt_p; }

    # Handle attr=value arguments
    if (scalar(@ARGV) > 0)
    {
        foreach my $a (@ARGV)
        {

            # allow a null attr values
            my ($attr, $value) = $a =~ /^\s*(\S+?)\s*=\s*(\S*.*)$/;

            if (!length($value)) { $value = "''"; }

            if (!defined($attr))
            {
                NodeUtils->message('W', 'EMsgBAD_ATTR_VAL_FORM');
                &usage;
            }
            my $found = 0;
            foreach my $va (@::VALID_ATTRS)
            {
                if ($attr =~ /^$va$/i)
                {

                    # Put quotes around the value to protect spaces
                    # or weird chars
                    $::ATTRS{$va} = $value;    # Quotes mess up some values
                    $found = 1;
                }
            }
            if (!$found)
            {
                NodeUtils->message('E', 'EMsgBAD_ATTR', $attr);
                NodeUtils->message('I', 'IMsgVALID_ATTRS',
                                   join('\n\t', @::VALID_ATTRS));
                exit 1;
            }
        }
    }

    # Validate attributes and flags
    my $distro =
        $::PREREQS_ATTR{'DistributionName'} . " "
      . $::PREREQS_ATTR{'DistributionVersion'};

    if (!grep(/^$distro$/, @::VALID_DISTROS))
    {
        NodeUtils->message('W', 'EMsgUNSUPPORTED_DISTRO',
                           $distro, join(', ', @::VALID_DISTROS));
    }
    else { NodeUtils->message('V', 'IMsgDETECTED_DISTRO', $distro); }
    $::DISTRO = $distro;

    @::PKGPATH = split(":", $pkgpath);

    # Gather the subdirectories
    foreach my $p (split(":", $pkgpath))
    {
        push @::PKGPATH, (ServerUtils->returnSubdirectory($p));
    }

}

#--------------------------------------------------------------------------------

=head3    process_IBMJava

        Notes:

	Special processing for IBMJava.  If IBMJava2-SDK is already installed
	on the system then don't install IBMJava2-JRE rpm.

	Note that the $rpm variable contains the JRE version number at the end.
	This ensures that we always use the correct version.

	version numbers are hard-coded in this routine

=cut

#--------------------------------------------------------------------------------

sub process_IBMJava
{
    my ($rpm, $my_location, $my_fullname) = @_;
    my $SDK_rpm;
    my $high_version_flag      = 0;
    my $already_installed_flag = 0;
    my $update_flag            = 0;
    my $packager_name_flag     = 0;
    my $already_installed_name;
    my ($name, $version, $release, $arch, $packager_name);

    my $my_version = $::PackageVersionName_Server{$rpm}{'Version'};

    #if ($my_fullname=~/IBMJava2-JRE-(\d\.\d*\.\d*)/) {
    #	$my_version=$1;
    #} else {
    #	$my_version="1.4.1"; #default 1.4.1
    #}

    ($SDK_rpm = $rpm) =~ s/IBMJava2-JRE/IBMJava2-SDK/;

    my @outout =
      NodeUtils->runcmd(
        "$::RPMCMD -q --qf '%{Name}::%{Version}::%{Release}::%{Arch}::%{Vendor}\n' $rpm",
        -1
        );
    foreach my $i (@outout)
    {
        if (!($i =~ /.*::.*::.*::.*::.*/)) { next; }
        ($name, $version, $release, $arch, $packager_name) = split(/::/, $i);
        if (ArchiveUtils->testVersion($version, ">", $my_version))
        {
            $high_version_flag      = 1;
            $already_installed_name = $name . "-" . $version . "-" . $release;
        }
        elsif (ArchiveUtils->testVersion($version, "=", $my_version))
        {
            $already_installed_flag = 1;
        }
        elsif (ArchiveUtils->testVersion($version, "<", $my_version))
        {
            $update_flag = 1;
        }
        if (   ($packager_name !~ /International Business Machines/)
            && ($packager_name !~ /UnitedLinux/))
        {
            $packager_name_flag = 1;
        }

    }
    @outout =
      NodeUtils->runcmd(
        "$::RPMCMD -q --qf '%{Name}::%{Version}::%{Release}::%{Arch}::%{Vendor}\n' $SDK_rpm",
        -1
        );
    foreach my $i (@outout)
    {
        if (!($i =~ /.*::.*::.*::.*::.*/)) { next; }
        ($name, $version, $release, $arch, $packager_name) = split(/::/, $i);
        if (ArchiveUtils->testVersion($version, ">", $my_version))
        {
            $high_version_flag      = 1;
            $already_installed_name = $name . "-" . $version . "-" . $release;
        }
        elsif (ArchiveUtils->testVersion($version, "=", $my_version))
        {
            $already_installed_flag = 1;
        }
        elsif (ArchiveUtils->testVersion($version, "<", $my_version))
        {
            $update_flag = 1;
        }
        if (   ($packager_name !~ /International Business Machines/)
            && ($packager_name !~ /UnitedLinux/))
        {
            $packager_name_flag = 1;
        }
    }

    # check for packager name flag for already installed rpm
    if ($packager_name_flag == 1)
    {
        NodeUtils->message('E1', 'EMsgUnsupportedRpmName', $rpm, $packager_name,
                           $rpm);
    }
    @outout =
      NodeUtils->runcmd(
        "$::RPMCMD -qp --qf '%{Name}::%{Version}::%{Release}::%{Arch}::%{Vendor}\n' $my_location/$my_fullname",
        -1
        );
    foreach my $i (@outout)
    {
        if (!($i =~ /.*::.*::.*::.*::.*/)) { next; }
        ($name, $version, $release, $arch, $packager_name) = split(/::/, $i);
        if (   ($packager_name !~ /International Business Machines/)
            && ($packager_name !~ /UnitedLinux/))
        {
            $packager_name_flag = 1;
        }
        if (ArchiveUtils->testVersion($version, ">", $my_version))
        {
            NodeUtils->message('E1', 'EMsgNoRpmFound', $name);
        }
    }

    # return 2 = already installed
    # return 1 = higher version installed, install with the --oldpackage option
    # return 0 = package not installed
    # check for packager name flag for already installed rpm
    if ($packager_name_flag == 1)
    {
        NodeUtils->message('E1', 'EMsgNoRpmFound', $name);
    }
    if ($high_version_flag == 1)
    {
        if ($already_installed_flag == 1)
        {
            if ($::FORCE_INSTALL) { return 0; }
            else { return 2; }
        }
        elsif ($update_flag == 1)
        {
            if ($::FORCE_INSTALL) { return 0; }
            else { return 0; }
        }
        else
        {
            if (   $::PREREQS_ATTR{'DistributionName'} =~ /SuSE/
                || $::PREREQS_ATTR{'DistributionName'} =~ /SLES/)
            {
                NodeUtils->messageFromCat(
                                'csmInstall.cat',        $::MSGMAPPATH,
                                'csminstall',            'E2',
                                'EMsgRPMWrongVersion',   $rpm,
                                $already_installed_name, $already_installed_name
                                );
            }
            else { return 1; }
        }
    }
    elsif ($already_installed_flag == 1)
    {
        if ($::FORCE_INSTALL) { return 0; }
        else { return 2; }
    }
    elsif ($update_flag == 1)
    {
        if ($::FORCE_INSTALL) { return 0; }
        else { return 0; }
    }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    arrange_rpm

        Notes: move to ArchiveUtils

	Arranges the rpm array in order of the installed

=cut

#--------------------------------------------------------------------------------

sub arrange_rpm
{
    my (@rpm_array)     = @_;
    my @temp_array      = ();
    my @shortname_array = ();
    my %temp_hash       = ();

    #get the shortname of the rpm
    foreach my $rpm_name (@rpm_array)
    {
        my @parts = split /-/, $rpm_name;
        my $shortname = shift @parts;
        my $p;
      SNAME: while ($p = shift @parts)
        {
            if ($p !~ m/^\d/)
            {    #if it doesn't start with a digit
                $shortname .= "-$p";
            }
            else { unshift @parts, $p; last SNAME; }
        }
        my $tmp_var1;
        my $my_rindex = rindex($shortname, "*");
        if ($my_rindex != -1)
        {
            $tmp_var1 = substr($shortname, 0, rindex($shortname, "*"));
        }
        else { $tmp_var1 = $shortname; }
        $my_rindex = rindex($tmp_var1, "-");
        if (($my_rindex + 1) == 0) { $shortname = $tmp_var1; }
        elsif (($my_rindex + 1) == length($tmp_var1))
        {
            $shortname = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
        }
        else { $shortname = $tmp_var1; }
        push(@shortname_array, $shortname);
    }

    foreach my $rpm (@::Rpms_to_be_installed) { $temp_hash{$rpm}++; }
    foreach my $rpm (@shortname_array)
    {
        if (exists($temp_hash{$rpm})) { push(@temp_array, $rpm); }
    }

    @::Rpms_to_be_installed = @temp_array;
}

#--------------------------------------------------------------------------------

=head3    install_rpm_Linux

        Notes: move to ArchiveUtils - this is huge...

	This is the new install rpm , which does the rpm installation bases on
	the new list - currently it supports only Linux

=cut

#--------------------------------------------------------------------------------

sub install_rpm_Linux
{
    my ($flag) = @_;
    my ($flags, $installflag, @my_path);
    if (!$installflag) { $installflag = "-U"; }    # Default to -U
    @my_path = ($::INSTALLDIR_CSMPKG, $::INSTALLDIR_OS_NAME_RPMS);

    # check if there are any rpms not found, if exists than exit
    if (scalar(@::Rpms_not_found) >= 1)
    {
        my @rpm_ignored     = ();
        my @rpm_not_ignored = ();
        foreach my $rpm_name (@::Rpms_not_found)
        {
            if ($rpm_name =~ m/fping/) { push(@rpm_ignored, $rpm_name); }
            elsif ($rpm_name =~ m/tftp/)
            {

                # see if some tftp server is installed:
                my ($isDefault, @tftpServers) =
                  NetworkUtils->check4InstalledTftpServers();
                if ($#tftpServers eq -1 && !$isDefault)
                {
                    MessageUtils->message('W', 'IMsgNoDefaultTFTPServerFound',
                                          @::default_tftp_server_name);
                }
            }
            else { push(@rpm_not_ignored, $rpm_name); }
        }

        # Ignore all SIS packages
        if (scalar(@rpm_not_ignored) > 0)
        {
            my $rpm_temp;
            my @rpm_not_found;
            foreach $rpm_temp (@rpm_not_ignored)
            {
                my $short_rpm;
                my $my_rindex = rindex($rpm_temp, "*");
                if ($my_rindex != -1)
                {
                    $short_rpm = substr($rpm_temp, 0, $my_rindex);
                }

                #my @foo = grep(/$short_rpm/, @::sis_packages);
                #if (scalar(@foo)) {
                #	push (@rpm_ignored,$rpm_temp);
                #	$::IGNORE_SIS = 1;
                #}
                #else {
                push(@rpm_not_found, $rpm_temp);

                #}
            }
            @::Rpms_not_found = @rpm_not_found;
        }
        else
        {
            @::Rpms_not_found = @rpm_not_ignored;
        }

        if (scalar(@rpm_ignored) > 0)
        {
            NodeUtils->message('I', 'IMsgMissingRPM', join(", ", @rpm_ignored));
        }
        if (scalar(@::Rpms_not_found) >= 1)
        {
            NodeUtils->message('E1', 'EMsgNoRpmFound',
                               join(", ", @::Rpms_not_found));
        }
    }
    if (scalar(@::Rpms_already_installed) >= 1)
    {
        foreach my $temp_rpm_name (@::Rpms_already_installed)
        {

            # below one line  for Special condition for IBMJava
            if ($temp_rpm_name =~ /^IBMJava2-JRE/) { next; }
            NodeUtils->message('I', 'IMsgRPM_ALREADY_INSTALLED',
                               $temp_rpm_name);
        }
    }

    #check if any rpms need to be installed
    if (scalar(@::Rpms_to_be_installed) >= 1)
    {

        if (  (grep /rsct/, @::Rpms_to_be_installed) > 0 ) {

            # if this is the rsct list then install them all at once
            my ($rpmlist, $cmd);
            my ($location, $destination, $full_name);

            foreach my $my_rpm (@::Rpms_to_be_installed) {
                $full_name = $::Rpm_name_path{$my_rpm}{'BaseName'};
                $location  = $::Rpm_name_path{$my_rpm}{'Location'};
                $rpmlist .=" $location/$full_name";
                NodeUtils->message('I', 'IMsgINSTALLING_RPMS', $full_name);
            }
            $cmd = "$::RPMCMD $installflag $rpmlist";
            $cmd .= " --force " if $::FORCE_INSTALL;

            NodeUtils->runcmd("$cmd");

        } else {

            #file name =full name of the file including path
            foreach my $my_rpm (@::Rpms_to_be_installed) {
                my ($location, $destination, $full_name);
                $full_name = $::Rpm_name_path{$my_rpm}{'BaseName'};
                $location  = $::Rpm_name_path{$my_rpm}{'Location'};

                #Install the Rpm dependencies
                ArchiveUtils->installRequiredRpms($my_rpm, @my_path);

                # Special processing for open source rpms install
                if ($flag) {

                    #Special process for conserver
                    if ($my_rpm =~ /conserver/) {
                        my $conserverinstallflag =
                           &processConsever($location . "/" . $full_name,
                                       $my_path[0]);
                        if ($conserverinstallflag == 0)
                        {
                            next;
                        }    # conserver is installed.
                    }
                    if ($my_rpm =~ /tftp/)
                    {
                        my $rc = NetworkUtils->process_tftp();
                        if ($rc)
                        {

                            #ArchiveUtils->display_opensrcLicence($my_rpm);
                            #workaround for NLS problem
                            if ($::ENGLISH)
                            {
                                NodeUtils->message('I', 'IMsgINSTALLING_RPM',
                                               $full_name);
                            }
                            else
                            {
                                NodeUtils->message('I', 'IMsgINSTALLING_RPMS',
                                               $full_name);
                            }
                            my $cmd =
                                "$::RPMCMD $installflag $flags $location/$full_name";
                            $cmd = "$cmd --force" if $::FORCE_INSTALL;
                            $rc = NodeUtils->run_cmd($cmd, "W", "show_all");
                            if ($rc eq 0)
                            {
                                $::default_tftp_server_installed = 1;
                                next;
                            }
                            else
                            {
                                exit;
                            }
                        }
                        next;
                    }
                    if ($my_rpm =~ /^IBMJava2-JRE/)
                    {
                        my $rc = &process_IBMJava($my_rpm, $location, $full_name);
                        if ($rc == 0)
                        {
                            ArchiveUtils->display_opensrcLicence($my_rpm);

                            #workaround for NLS problem
                            if ($::ENGLISH)
                            {
                                NodeUtils->message('I', 'IMsgINSTALLING_RPM',
                                               $full_name);
                            }
                            else
                            {
                                NodeUtils->message('I', 'IMsgINSTALLING_RPMS',
                                               $full_name);
                            }
                            my $cmd =
                          "$::RPMCMD $installflag $flags $location/$full_name";
                            $cmd = "$cmd --force" if $::FORCE_INSTALL;
                            NodeUtils->runcmd("$cmd");

                            #SuSE changes
                            #In SuSE8.1 and SLES8, after installing IBMJava2-JRE-1.3, should comment "export LD_ASSUME_KERNEL=2.2.5"
                            if (
                            (
                                $::PREREQS_ATTR{'DistributionName'} =~ /SuSE/
                             && $::PREREQS_ATTR{'DistributionVersion'} eq '8.1'
                            )
                            || (   $::PREREQS_ATTR{'DistributionName'} =~ /SLES/
                                && $::PREREQS_ATTR{'DistributionVersion'} eq
                                '8.1')
                          )
                            {
                                NodeUtils->runcmd(
                                "/usr/bin/perl -p -i -e 's/^export LD_ASSUME_KERNEL=2.2.5/# export LD_ASSUME_KERNEL=2.2.5/g' /opt/IBMJava2-13/jre/bin/java"
                                );
                            }

                            #End SuSE changes

                            #RedHat 9 changes
                            #In RedHat 9, after installing IBMJava2-JRE-1.3.1, should set "export LD_ASSUME_KERNEL=2.2.5"
                            if (
                            (
                                $::PREREQS_ATTR{'DistributionName'} =~ /RedHat/
                             && $::PREREQS_ATTR{'DistributionVersion'} eq '9'
                            )
                            || ($::PREREQS_ATTR{'DistributionName'} =~
                                /RedHatEL-ES/
                                && $::PREREQS_ATTR{'DistributionVersion'} eq
                                '2.1')
                          )
                            {
                                NodeUtils->runcmd(
                                "/usr/bin/perl -p -i -e 's/^# Run./export LD_ASSUME_KERNEL=2.2.5/' /opt/IBMJava2-131/jre/bin/java"
                                );
                            }

                            #End
                            next;
                        }
                        elsif ($rc == 1)
                        {
                            ArchiveUtils->display_opensrcLicence($my_rpm);

                            #workaround for NLS problem
                            if ($::ENGLISH)
                            {
                                NodeUtils->message('I', 'IMsgINSTALLING_RPM',
                                               $full_name);
                            }
                            else
                            {
                                NodeUtils->message('I', 'IMsgINSTALLING_RPMS',
                                               $full_name);
                            }
                            $installflag = "-i";
                            $flags       = "--oldpackage";
                            my $cmd =
                          "$::RPMCMD $installflag $flags $location/$full_name";
                            $cmd = "$cmd --force" if $::FORCE_INSTALL;
                            NodeUtils->runcmd("$cmd");

                            #SuSE changes
                            #In SuSE8.1 and SLES8, after installing IBMJava2-JRE-1.3, should comment "export LD_ASSUME_KERNEL=2.2.5"
                            if (
                            (
                                $::PREREQS_ATTR{'DistributionName'} =~ /SuSE/
                             && $::PREREQS_ATTR{'DistributionVersion'} eq '8.1'
                            )
                            || (   $::PREREQS_ATTR{'DistributionName'} =~ /SLES/
                                && $::PREREQS_ATTR{'DistributionVersion'} eq
                                '8.1')
                          )
                            {
                                NodeUtils->runcmd(
                                "/usr/bin/perl -p -i -e 's/^export LD_ASSUME_KERNEL=2.2.5/# export LD_ASSUME_KERNEL=2.2.5/g' /opt/IBMJava2-13/jre/bin/java"
                                );
                            }

                            #End SuSE changes
                            #RedHat 9 changes
                            #In RedHat 9, after installing IBMJava2-JRE-1.3.1, should set "export LD_ASSUME_KERNEL=2.2.5"
                            if (
                            (
                                $::PREREQS_ATTR{'DistributionName'} =~ /RedHat/
                             && $::PREREQS_ATTR{'DistributionVersion'} eq '9'
                            )
                            || ($::PREREQS_ATTR{'DistributionName'} =~
                                /RedHatEL-ES/
                                && $::PREREQS_ATTR{'DistributionVersion'} eq
                                '2.1')
                          )
                            {
                                NodeUtils->runcmd(
                                "/usr/bin/perl -p -i -e 's/^# Run./export LD_ASSUME_KERNEL=2.2.5/' /opt/IBMJava2-131/jre/bin/java"
                                );
                            }

                            #End
                            next;
                        }
                        else
                        {
                            NodeUtils->message('I', 'IMsgRPM_ALREADY_INSTALLED',
                                           $my_rpm);
                            next;
                        }
                    }
                    if (grep(/^$my_rpm$/, @::GPL_PACKAGES)
                    and !$::DISPLAYED_GPL_LICENSE)
                    {
                        ArchiveUtils->display_opensrcLicence($my_rpm);
                    }
                    if ($my_rpm =~ /^openCIMOM/)
                    {

                        #workaround for NLS problem
                        if ($::ENGLISH)
                        {
                            NodeUtils->message('I', 'IMsgINSTALLING_RPM',
                                           $full_name);
                        }
                        else
                        {
                            NodeUtils->message('I', 'IMsgINSTALLING_RPMS',
                                           $full_name);
                        }
                        $flags = "--oldpackage";
                        if ($::rpm_pkg_flag{openCIMOM})
                        {
                            $flags = $flags . " " . $::rpm_pkg_flag{openCIMOM};
                        }
                        my $cmd =
                      "$::RPMCMD $installflag $flags $location/$full_name";
                        $cmd = "$cmd --force" if $::FORCE_INSTALL;
                        NodeUtils->runcmd("$cmd");
                        next;
                    }
                }

                #workaround for NLS problem
                if ($::ENGLISH)
                {
                    NodeUtils->message('I', 'IMsgINSTALLING_RPM', $full_name);
                }
                else
                {
                    NodeUtils->message('I', 'IMsgINSTALLING_RPMS', $full_name);
                }

                my $cmd = "$::RPMCMD $installflag $flags $location/$full_name";
                $cmd = "$cmd --force" if $::FORCE_INSTALL;

                # More special processing for conserver.  For some reason, when conserver
                # is upgraded from 7.2.2* to 7.2.4, the rpm command hangs if it is run
                # in backticks(``), as is done in NodeUtils->runcmd.  It works fine when
                # run from system().
                if (grep /conserver/, $full_name)
                {
                    NodeUtils->message('V', 'IMsgCMD', $cmd);
                    system("$cmd");
                }
                else
                {
                    if (   (grep /nfs-utils/, $full_name)
                    || (grep /XFree86-libs/, $full_name))
                    {
                        NodeUtils->runcmd("$cmd", 0);
                    }
                    else { NodeUtils->runcmd("$cmd"); }
                }
            }
        }
    }
}

#--------------------------------------------------------------------------------

=head3    install_packages_Linux

        Notes: move to ArchiveUtils

	This is the new install packages, which call the new install rpm.
	Currently it supports only Linux.

=cut

#--------------------------------------------------------------------------------

sub install_packages_Linux
{
    my ($rpm, $tarball_list, $cmd, $rc, $returncode);
    my @linux_prereqs;
    $rc         = 0;
    $returncode = 0;

    #SuSE Changes
    NodeUtils->message("I", 'IMsgINSTALLING_RPMS', "LINUX OS PRE REQUISITIES");

    # collect the rpms name those are  eligible
    ArchiveUtils->search_rpm_csminstall_path(@::mgmtserver_os_prereq);
    ArchiveUtils->create_rpm_list_to_install();
    &arrange_rpm(@::mgmtserver_os_prereq);
    &install_rpm_Linux();

    #End of SuSE Changes

    NodeUtils->message("I", 'IMsgINSTALLING_RPMS',
                       "OPEN SOURCE PRE REQUISITIES");

    # This is the list of GPL open source packages to be installed.  If any
    # of these packages must be installed, a license is displayed first
    # and the user must press Enter to accept the license.
    if ($::PREREQS_ATTR{'PkgArchitecture'} =~ /ppc64/)
    {
        @::GPL_PACKAGES = ('');
    }
    else
    {
        @::GPL_PACKAGES = ('syslinux');
    }

    # This variable is set when the GPL license has been displayed once,
    # and prevents the license question from being displayed again.
    $::DISPLAYED_GPL_LICENSE = 0;

    # collect the rpms name those are  eligible
    # Remove the director rpms from the  mgmtserver_open_srcrpms array
    # These rpms need to be copied only. They are going to be installed
    # by addlcsext command
    my @temp_aaray = ();
    foreach my $my_temp_rpm (@::mgmtserver_open_srcrpms)
    {
        if (   (grep /ITDAgent/, $my_temp_rpm)
            || (grep /DirAgent/, $my_temp_rpm)
            || (grep /RAIDLxAg/, $my_temp_rpm)
            || (grep /MPAAgent/, $my_temp_rpm))
        {
        }
        else { push(@temp_aaray, $my_temp_rpm); }
    }
    @::mgmtserver_open_srcrpms = @temp_aaray;

    ArchiveUtils->search_rpm_csminstall_path(@::mgmtserver_open_srcrpms);
    ArchiveUtils->create_rpm_list_to_install();

    # Special condition for IBMJava, and tftp Begin
    push(@::Rpms_to_be_installed, "IBMJava2-JRE");
    @::Rpms_to_be_installed =
      ServerUtils->get_uniqu_arry_elemnts(@::Rpms_to_be_installed);

    # Special condition for IBMJava End
    &arrange_rpm(@::mgmtserver_open_srcrpms);
    &install_rpm_Linux(1);

    NodeUtils->message('I', 'IMsgINSTALLING_RPMS', "RSCT");

    #check if the rsct.basic is installed or not, if not installed
    # then remove rsct.basic from the list
    NodeUtils->runcmd("$::RPMCMD -q rsct.basic", -1);
    if ($::RUNCMD_RC == 1)
    {
        my @temp_arry = ();
        foreach my $temp_element (@::mgmtserver_rsct_packages)
        {
            if ($temp_element !~ /rsct.basic/)
            {
                push(@temp_arry, $temp_element);
            }
        }
        @::mgmtserver_rsct_packages = @temp_arry;
    }

    # collect the rpms name those are  eligible
    ArchiveUtils->search_rpm_csminstall_path(@::mgmtserver_rsct_packages);
    ArchiveUtils->create_rpm_list_to_install();
    &arrange_rpm(@::mgmtserver_rsct_packages);
    &install_rpm_Linux();

    # TO DO: if rsct.core was already installed, but ctrmc was not started,
    # this would have to time out before continuing
    # &waitForERRM();  -- this is now done in csmserverposti

    NodeUtils->message('I', 'IMsgINSTALLING_RPMS', "CSM");

    # collect the rpms name those are  eligible
    ArchiveUtils->search_rpm_csminstall_path(@::mgmtserver_csm_packages);
    ArchiveUtils->create_rpm_list_to_install();
    # check if Migration install from lower level CSM
    my $preVersion = NodeUtils->runcmd("$::RPMCMD -q csm.server --qf '%{VERSION}'", -1);
    if ($::RUNCMD_RC == 0)
    {
        NodeUtils->runcmd("/usr/bin/chrsrc-api -s IBM.DmsCtrl::::MigrationInfo::$preVersion",-1);
    }
    # added end

    &arrange_rpm(@::mgmtserver_csm_packages);
    &install_rpm_Linux();

    # install SIS PACKAGES in SuSE and SLES
    #if( ( $::DISTRO =~ /SLES/ || $::DISTRO =~/SuSE/ ) && $::PREREQS_ATTR{'PkgArchitecture'}=~/i?86/ )
    #{
    #    NodeUtils->message('I', 'IMsgINSTALLING_RPMS', "SIS");
    #	ArchiveUtils->search_rpm_csminstall_path(@::mgmtserver_sis_packages);
    #ArchiveUtils->create_rpm_list_to_install();
    #&arrange_rpm(@::mgmtserver_sis_packages);
    #    &install_rpm_Linux();
    #}

}

#--------------------------------------------------------------------------------

=head3   set_cluster_attrs

        Notes: move to ServerUtls? Big routine...

	Set global cluster attributes by using ATTR=Value provided by the user.
	This set attributes in the dmsctrl resource class.  The attributes are stored
	in the %::ATTRS hash.

=cut

#--------------------------------------------------------------------------------

sub set_cluster_attrs
{
    my $rc = 0;
    my ($attr, $value, $dmsctrlkey);

    return 0 if (!(keys %::ATTRS));

    my $cmd = "/opt/csm/bin/csmconfig";

    foreach $attr (keys %::ATTRS)
    {
        $value = $::ATTRS{$attr};
        $cmd .= " $attr=$value";
    }

    my $output = NodeUtils->runcmd($cmd, 0);
    $rc = $::RUNCMD_RC;

    return $rc;
}

#--------------------------------------------------------------------------------

=head3    processConsever

        Notes: 

	Process for conserver
	return 1....Install
	return 0....Already Installed

=cut

#--------------------------------------------------------------------------------

sub processConsever
{
    my ($conserrpmfile, $myConserverPathName) = @_;
    my $conserverSpecialinstallflag = 0;
    my $req_ver                     = "7.2.2";
    my $req_rel                     = "6";
    my $conserveroutput             = "";
    my @temp_array                  = ();
    my ($curr_rel, $curr_ver, $ins_rel, $ins_ver);

    # get the version and release of the copied rpm
    (@temp_array) = ArchiveUtils->getRPMVersionRelease($conserrpmfile, 1);
    $curr_ver = $temp_array[0];
    $curr_rel = $temp_array[1];

    # get the version and release valus of the installed rpm
    $conserveroutput = NodeUtils->runcmd("$::RPMCMD -q conserver", -1);
    if ($::RUNCMD_RC != 0)
    {
        if (
            ArchiveUtils->testVersion($curr_ver, "<", $req_ver,
                                      $curr_rel, $req_rel)
          )
        {
            NodeUtils->message('E1', 'EMsgMinConserverNot',
                               $myConserverPathName);
        }
        else
        {
            return 1;
        }
    }
    else
    {
        (@temp_array) = ArchiveUtils->getRPMVersionRelease($conserveroutput);
        $ins_ver = $temp_array[0];
        $ins_rel = $temp_array[1];

        # First set
        if (
            ArchiveUtils->testVersion($ins_ver, ">", $curr_ver,
                                      $ins_rel, $curr_rel)
          )
        {
            if (
                ArchiveUtils->testVersion(
                                     $ins_ver, ">", $req_ver, $ins_rel, $req_rel
                )
              )
            {
                return 1;
            }
            elsif (
                   ArchiveUtils->testVersion(
                                     $ins_ver, "<", $req_ver, $ins_rel, $req_rel
                   )
              )
            {
                NodeUtils->message('E1', 'EMsgMinConserverNot',
                                   $myConserverPathName);
            }
            elsif (
                   ArchiveUtils->testVersion(
                                     $ins_ver, "=", $req_ver, $ins_rel, $req_rel
                   )
              )
            {
                NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                   "conserver");
                return 0;
            }
        }
        elsif (
               ArchiveUtils->testVersion(
                                   $ins_ver, "<", $curr_ver, $ins_rel, $curr_rel
               )
          )
        {
            if (
                ArchiveUtils->testVersion(
                                     $ins_ver, "<", $req_ver, $ins_rel, $req_rel
                )
              )
            {
                if (
                    ArchiveUtils->testVersion(
                                   $curr_ver, "=", $req_ver, $curr_rel, $req_rel
                    )
                  )
                {
                    $conserverSpecialinstallflag = 1;
                    goto CONSER;
                }
                elsif (
                       ArchiveUtils->testVersion(
                                   $curr_ver, ">", $req_ver, $curr_rel, $req_rel
                       )
                  )
                {
                    $conserverSpecialinstallflag = 1;
                    goto CONSER;
                }
                elsif (
                       ArchiveUtils->testVersion(
                                   $curr_ver, "<", $req_ver, $curr_rel, $req_rel
                       )
                  )
                {
                    NodeUtils->message('E1', 'EMsgMinConserverNot',
                                       $myConserverPathName);
                }
            }
            elsif (
                   ArchiveUtils->testVersion(
                                     $ins_ver, ">", $req_ver, $ins_rel, $req_rel
                   )
              )
            {
                if (
                    ArchiveUtils->testVersion(
                                   $curr_ver, ">", $req_ver, $curr_rel, $req_rel
                    )
                  )
                {
                    return 1;
                }
                else
                {
                    NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                       "conserver");
                    return 0;
                }
            }
            elsif (
                   ArchiveUtils->testVersion(
                                     $ins_ver, "=", $req_ver, $ins_rel, $req_rel
                   )
              )
            {
                return 1;
            }

        }
        elsif (
               ArchiveUtils->testVersion(
                                   $ins_ver, "=", $curr_ver, $ins_rel, $curr_rel
               )
          )
        {
            if (
                ArchiveUtils->testVersion(
                                     $ins_ver, ">", $req_ver, $ins_rel, $req_rel
                )
              )
            {
                return 1;
            }
            elsif (
                   ArchiveUtils->testVersion(
                                     $ins_ver, "<", $req_ver, $ins_rel, $req_rel
                   )
              )
            {
                NodeUtils->message('E1', 'EMsgMinConserverNot',
                                   $myConserverPathName);
            }
            elsif (
                   ArchiveUtils->testVersion(
                                     $ins_ver, "=", $req_ver, $ins_rel, $req_rel
                   )
              )
            {
                NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                   "conserver");
                return 0;
            }
        }

        # Set 2
        if (
            ArchiveUtils->testVersion($curr_ver, ">", $req_ver,
                                      $curr_rel, $req_rel)
          )
        {
            if (
                ArchiveUtils->testVersion(
                                   $curr_ver, ">", $ins_ver, $curr_rel, $ins_rel
                )
              )
            {
                if (
                    ArchiveUtils->testVersion(
                                     $ins_ver, "<", $req_ver, $ins_rel, $req_rel
                    )
                  )
                {
                    $conserverSpecialinstallflag = 1;
                    goto CONSER;
                }
                else
                {
                    return 1;
                }
            }
            else
            {
                NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                   "conserver");
                return 0;
            }
        }
        elsif (
               ArchiveUtils->testVersion(
                                   $curr_ver, "<", $req_ver, $curr_rel, $req_rel
               )
          )
        {
            NodeUtils->message('E1', 'EMsgMinConserverNot',
                               $myConserverPathName);
        }
        elsif (
               ArchiveUtils->testVersion(
                                   $curr_ver, "=", $req_ver, $curr_rel, $req_rel
               )
          )
        {
            if (
                ArchiveUtils->testVersion(
                                   $curr_ver, "<", $ins_ver, $curr_rel, $ins_rel
                )
              )
            {
                $conserverSpecialinstallflag = 1;
                goto CONSER;
            }
            else
            {
                NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                   "conserver");
                return 0;
            }
        }

        # Set 3
        if (
            ArchiveUtils->testVersion($req_ver, ">", $ins_ver,
                                      $req_rel, $ins_rel)
          )
        {
            if (
                ArchiveUtils->testVersion(
                                   $req_ver, ">", $curr_ver, $req_rel, $curr_rel
                )
              )
            {
                NodeUtils->message('E1', 'EMsgMinConserverNot',
                                   $myConserverPathName);
            }
            else
            {
                $conserverSpecialinstallflag = 1;
                goto CONSER;
            }
        }
        elsif (
               ArchiveUtils->testVersion(
                                     $req_ver, "<", $ins_ver, $req_rel, $ins_rel
               )
          )
        {
            if (
                ArchiveUtils->testVersion(
                                   $curr_ver, ">", $ins_ver, $curr_rel, $ins_rel
                )
              )
            {
                return 1;
            }
            else
            {
                NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                   "conserver");
                return 0;
            }
        }
        elsif (
               ArchiveUtils->testVersion(
                                     $req_ver, "=", $ins_ver, $req_rel, $ins_rel
               )
          )
        {
            if (
                ArchiveUtils->testVersion(
                                   $req_ver, "<", $curr_ver, $req_rel, $curr_rel
                )
              )
            {
                return 1;
            }
            else
            {
                NodeUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                   "conserver");
                return 0;
            }
        }
    }
  CONSER:
    if ($conserverSpecialinstallflag == 1)
    {
        my $conSerRandomNumber;
        my $conserver_config_copy_flag = 0;
        if (-f "/etc/opt/conserver/conserver.cf")
        {

            #generating a unique random number file/directory naming purpose
            $conSerRandomNumber = int(rand(2000)) + 1000;
            while (-d "/tmp/$conSerRandomNumber")
            {
                $conSerRandomNumber = int(rand(2000)) + 1000;
            }
            mkpath("/tmp/$conSerRandomNumber", $::VERBOSE, 0755);
            NodeUtils->runcmd(
                "$::COPY /etc/opt/conserver/conserver.cf /tmp/$conSerRandomNumber/"
                );
            $conserver_config_copy_flag = 1;
        }
        NodeUtils->runcmd("$::RPMCMD -e conserver --nodeps");
        if ($conserver_config_copy_flag == 1)
        {
            mkpath("/etc/opt/conserver", $::VERBOSE, 0755);
            NodeUtils->runcmd(
                "$::COPY /tmp/$conSerRandomNumber/conserver.cf /etc/opt/conserver/"
                );
            NodeUtils->runcmd("$::RM -rf /tmp/$conSerRandomNumber/");
        }
        return 1;
    }

}

#--------------------------------------------------------------------------------

=head3    checkPreviousInstallation

        Notes:
 		 empty subroutine

=cut

#--------------------------------------------------------------------------------

sub checkPreviousInstallation { }

#--------------------------------------------------------------------------------

=head3    Main

        Notes: 

=cut

#--------------------------------------------------------------------------------

{    # main

    my ($rc)         = 0;
    my ($returncode) = 0;

    $::IGNORE_SIS = 0;

    # load the packagedefs and intialize globs
    &initialize();

    # process command line
    &getArgs;

    # start logging
    MessageUtils->start_logging($::INSTALLMSLOG);

    # set and verify local variables
    &set_variables;

    #  determine which rpms are already installed
    InstallUtils->createRPMVersionListAlreadyInstalled();

    # verify that the rpm tool is present.
    ArchiveUtils->checkForRpmTool();

    # create install directory
    ServerUtils->create_directory_structure();

    # copy the appropriate rpms to /csminstall
    if (!$::DONT_COPY_RPMS) # not don't copy
    {

        # update the rpms in the install dir
        ArchiveUtils->update_rpm_packages_to_csminstall;

        # Verify the current installation
        &checkPreviousInstallation;    # empty sub
    }

    # Install the packages.
    $rc = &install_packages_Linux;
    $returncode = $rc if ($rc > $returncode);

    # Set global cluster attributes in the dmsctrl resource class
    $rc         = &set_cluster_attrs;
    $returncode = $rc if ($rc > $returncode);

    # copy the csm command binaries.
    NodeUtils->message('I', 'IMsgCOPYING_CSMBINARIES');
    ServerUtils->copyBinaries;

    # copy customization scripts
    ServerUtils->copy_csm_scripts(0);

    # create tftp user, configure and secure tftpboot
    NetworkUtils->createTftpUser();
    NetworkUtils->configureTftp();
    NetworkUtils->verifyTftp(1);
    NodeUtils->message('I', 'IMsgSecureFiles', '/tftpboot');
    NetworkUtils->secureFilePermissions('/tftpboot', '0110', '0440');

    #  notify success or failure
    if ($returncode == 0)
    {
        NodeUtils->message('I', 'IMsgINSTALLMS_SUCCESSFUL');
    }
    else { NodeUtils->message('E', 'EMsgINSTALLMS_UNSUCCESSFUL', $returncode); }

    # stop logging
    MessageUtils->stop_logging();

    # exit
    exit $returncode;
}
q_vk t0PB  7u     7  !q@!q@!q@             7      ./opt/csm/bin/lscmtms s                              #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# Restricted Materials of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2002,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#
# "@(#)75   1.5   src/csm/core/cmds/lscmtms.perl, sysman, csm_rveg, rveg0414a 7/10/02 14:33:26"
#
#####################################################################
# Module: lscmtms 
#
# Description: Display the pSeries Cluster mtms Identification Number
#
# Inputs and Parameters: None
#
# Output: MT:xxxx-yyy MS:zzzzzzzzz 
#	where 	xxxx is the 4 digit cluster machine type
#		yyy is the 3 digit  cluster model number
#		zzz is up to 9 digit cluster serial number
#	 If they are not found, NULL (empty string) will be displayed, 
#	 as in MT: MS:
#
# Return Codes:
#	0 Successful
#	1 Error, cmtm or csn is NULL
#	2 Error, Internal call returned error.
#	There are no error messages
#
# External Ref:
# 	SDRGetObjects
#	lsrsrc
#	lssrc
#	mgmtsvr
#
#####################################################################
#
# This module is called by Inventory Scout or Diagnostics on AIX.
# lscmtms is shipped by PSSP and CSM, and is identical in both.
# The initial value of the cluster mtm is 9078-160.
# It determines if PSSP is running by checking
# that the sdr is active. If so, the values are retrieved from the SDR
# or NULL are returned.
# If CSM is running, then lsrsrc is called for the cmtms, and the 
# values or NULL are returned.
#
#####################################################################

use strict;
my ($SDRGO,$LSSRC,$LSRSRC_API,$cmtm,$csn,$output,$null,$rc);
my (@DMS_ACTIVE,@CSMAgent_ACTIVE,$subsystem,$group,$PID,$DMSstate,$NodeState);
$cmtm = "";
$csn  = "";
$SDRGO = "/usr/lpp/ssp/bin/SDRGetObjects";
$LSSRC = "/usr/bin/lssrc";
$LSRSRC_API ="/usr/bin/lsrsrc-api";

&pssp_check();		# returns 0 if SDR running, 2 if not running
$rc = $?;	
if ($rc) {
	&csm_check();	# returns 0 if CSM running, 2 if not running
	$rc = $?;	
	if ($rc) {	# if neither is running, quit now.
		print "MT:$cmtm MS:$csn\n";
	        exit 2;
		}
	}
&endgame();		# displays results, exits 0 if both fields have data
			# exits 1 if one or more of the fields are blank	

# --------------------------------------------------------------------------
sub csm_check  {
# if IBM.DMSRM (ms) or IBM.CSMAgentRM (node) is active then csm may be running.
# IBM.CSMAgentRM is shipped with csm.clients in AIX so it will be active on
# a PSSP system also.

# lssrc produces a header row and the data row, we want the state which
# is active or inactive, in the data row.
#
chop(@DMS_ACTIVE=`$LSSRC -s IBM.DMSRM 2>/dev/null`);
foreach (@DMS_ACTIVE) {
	s/^\s*//;	# remove blanks
	($subsystem, $group, $PID, $DMSstate) = split(/\s+/);
	}

chop(@CSMAgent_ACTIVE=`$LSSRC -s IBM.CSMAgentRM 2>/dev/null`);
foreach (@CSMAgent_ACTIVE) {
	s/^\s*//;	# remove blanks
	($subsystem, $group, $PID, $NodeState) = split(/\s+/);
	}

if ($DMSstate eq "active") {
	#
	# it is a mgmt server
	# run mgmt server version of lsrsrc
	#
	chop($output = `$LSRSRC_API -s IBM.DmsCtrl::::ClusterTM::ClusterSNum 2>/dev/null`);
	if ($? > 0) {
		return 2;	# lsrsrc-api call failed
	        }
	#
 	# parse the output. it has the form xxxx-yyy::zzzzz, cmtm::csn
	#
	($cmtm, $null, $csn) = split(/:/,$output);	# print later

} elsif  ($NodeState eq "active") { 
	#
	# it is not a ms, see if it is a node
	#
  	chop($output = `$LSRSRC_API -s IBM.ManagementServer::"ManagerType=='CSM'"::ClusterTM::ClusterSNum 2>/dev/null`);
	if ($? > 0) {
		return 2;	# lsrsrc-api call failed
	        }
	#
 	# parse the output. it has the form xxxx-yyy::zzzzz, cmtm::csn
	#
	($cmtm, $null, $csn) = split(/:/,$output);	# print later

} else { return 2;}	# neither DMSstate or NodeState active.

return 0;		
}

# --------------------------------------------------------------------------
sub pssp_check {
	#
	# determine if PSSP is running by checking if the SDR call returns 0
	# while getting the cmtm from the sdr
	chop($cmtm = `$SDRGO -x SP Cluster_type_model 2>/dev/null`);
	$cmtm =~ s/\s*//g;	# remove blanks
	if ($? > 0) {
		return 2;	# SDR call failed, not running
	        }
	if ($cmtm eq "\"\"") {$cmtm = "";}	# convert SDR version of NULL

	# get the csn from the sdr
	chop($csn = `$SDRGO -x SP Cluster_serial_number 2>/dev/null`);
	$csn =~ s/\s*//g;	# remove blanks
	if ($? > 0) {
		return 2;	# SDR call failed, not running
		}
	if ($csn eq "\"\"") {$csn = "";}	# convert SDR version of NULL

return 0;
}

# --------------------------------------------------------------------------
sub endgame {
#
# either csm or pssp found the cmtms, so display it
#
print "MT:$cmtm MS:$csn\n";
if (($cmtm eq "") || ($csn eq "") ) {
	exit 1;
	}
exit 0;
}
 k( v0PBm  7u     (  !q@!q@!q@             (      ./opt/csm/bin/mgmtsvr s                    m          #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2000,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)85   1.20   src/csm/core/cmds/mgmtsvr.perl, csmcore, csm_rveg, rveg0414a 8/18/03 16:08:29

use strict;
use locale;
BEGIN
  {
	# this enables us to redirect where it looks for other CSM files during development
	$::csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';
	$::csmpm = "$::csmroot/pm";
	$::csmbin = "$::csmroot/bin";
  }
use lib $::csmpm;
use Getopt::Std;
require NodeUtils;

# For the usage, see nodecmds.msg
sub usage { NodeUtils->message('I', 'IMsgMgmtsvrUsage');  exit (scalar(@_) ? $_[0] : 1); }

$::MSGCAT = 'nodecmds.cat';
$::MSGMAPPATH = "$::csmroot/msgmaps";

# Parse the cmd line args and check them
if (! getopts('n:NhvVdkx') ) { &usage; }
if ($::opt_h) { &usage(0); }
if (scalar(@ARGV) > 1) { &usage; }
#Now allow -d & -N to be used with ARGV
#if (scalar(@ARGV) > 0 && ($::opt_d||$::opt_N)) { &usage; }
if (scalar(@ARGV) == 0 && defined($::opt_n)) { &usage; }

if ( defined($::opt_n) ) {
  &waitForCTRMC( );
}

$::VERBOSE = $::opt_v || $::opt_V ;
$ENV{'CT_MANAGEMENT_SCOPE'} = 1;      # set local scope because we only want the local Management Server class
delete $ENV{'CT_CONTACT'};

if (scalar(@ARGV) > 0)     # they are setting the mgmt svr
  {
      my $ms = shift @ARGV;
      if(!$ENV{'CSM_MAKENODE_RUNNING'}){
	  # Should we do this or not?  If this name came from the mgmt svr, it might be better to use it
	  # exactly.  If it came from the cmd line on the node, we should try name resolution.
	  $ms = NodeUtils->tryHost($ms);
      }
	#my $ms = shift @ARGV;
	#print "opt_n=$::opt_n\n";
	if($::opt_d){ #just delete this ms
		&rmMgmtSvr($ms);	
	}
	elsif($::opt_n){
		&setMgmtSvr($ms, $::opt_n);
	}
	else{ #just display ms
		&displayMS($ms);
	}
  }
elsif ($::opt_d)      # they are removing the mgmt svr
  {
	&rmMgmtSvr();
  }
elsif (!$::opt_d)       # display ALL mgmt svrs
  {
	&displayMS();
  }


exit;


# Return true if this machine is the mgmt svr for itself.
sub isOwnMgmtSvr
  {
	my ($ms, $lhn) = @_;

	# If this is a mgmt svr for itself then we should be able to look up the $lhn in the ManagedNode
	# class and the ManagementServer attribute should match $ms.
	my $outref = NodeUtils->runrmccmd('lsrsrc-api', "-i -D ':|:'", qq(-s IBM.ManagedNode::"Hostname='$lhn'"::ManagementServer));
	if (scalar(@$outref) == 0) { return 0; }
	return $$outref[0] eq $ms;
  }


# Return the mgmt svr and local hostname from the IBM.ManagementServer resource class.
# This function assumes we are on a node.
sub getMgmtSvr
  {
	my ($name) = @_; #if they specify a ms name 
	my $outref;
	my %MgmtSvrs;
	if($name){
		$outref = NodeUtils->runrmccmd('lsrsrc-api', "-i -D ':|:'", qq(-s IBM.ManagementServer::"ManagerType='CSM' && Hostname='$name'"::LocalHostname));
	}
	else{ 
		$outref = NodeUtils->runrmccmd('lsrsrc-api', "-i -D ':|:'", qq(-s IBM.ManagementServer::"ManagerType='CSM'"::Hostname::LocalHostname));
	}
	if (scalar(@$outref) == 0) { return; }
	foreach my $line (@$outref){ #there can be multiple ms defined	
		my ($ms, $lhn) = split(/:\|:/, $line);
		$MgmtSvrs{$ms}=$lhn;
	}
	return (\%MgmtSvrs);
  }


sub setMgmtSvr
  {
	my ($ms, $lhn) = @_;

	if (!NodeUtils->isNode()) { NodeUtils->message('E41','EMsgNOT_A_NODE'); }
	
	my $cmd;
	my $changedHostname = 1;     # used to know if we need to refresh at the end
	if(!$::opt_x){
		# See if there is already an entry - if so, replace it
		my $MgmtSvrs = &getMgmtSvr();
		my @servers = keys %$MgmtSvrs;
		foreach my $prevms (@servers){
			my $prevlhn = $$MgmtSvrs{$prevms};
			if ($ms ne $prevms)   # the Hostname has changed
			  {
				# Undefine the resource and recreate it.  This is necessary to get the DMSRM to go
				# through the full processing in the case that this is really a new mgmt svr.  In the
				# case in which this is the same mgmt svr with a name change, this will also be ok.
				NodeUtils->runrmccmd('rmrsrc-api', '', qq(-s IBM.ManagementServer::"Hostname='$prevms'"));
				my $attr2 = length($lhn) ? qq(::LocalHostname::"$lhn") : '';
				NodeUtils->runrmccmd('mkrsrc-api', '', qq(IBM.ManagementServer::Hostname::"$ms"::ManagerType::"CSM"$attr2));
			  }
			elsif (length($lhn) && $lhn ne $prevlhn)   # Hostname did not change, but LocalHostname did
			  {
				# Note: we don't need to process the -k option in this case because the
				#       ManagementServer resource class will exchange keys if either attribute
				#       changed.

				NodeUtils->runrmccmd('chrsrc-api', '', qq(-s IBM.ManagementServer::"Hostname='$prevms'"::LocalHostname::"$lhn"));
				#my $opflag = '0';
				#NodeUtils->runrmccmd('runact', '', qq(-c IBM.ManagementServer RefreshNodeInfo MgmtSvrHostname=$ms OperationFlag=$opflag));
				#todo: handle the no resources found error in case the resource was deleted after we checked it above.
			  }
			elsif($::opt_k)         # no need to change the resource but need to run the refresh action
			  {
				$changedHostname = 0;
				my $opflag = '0';
				#NodeUtils->runrmccmd('runact', '', qq(-c IBM.ManagementServer RefreshNodeInfo MgmtSvrHostname=$ms OperationFlag=$opflag));
				NodeUtils->runrmccmd('runact-api', '', qq(-c IBM.ManagementServer::::RefreshNodeInfo::MgmtSvrHostname::"$ms"::OperationFlag::"$opflag"));
			  }
		  }
		if(scalar (keys %$MgmtSvrs) ==0)						# create the entry
		  {
			my $attr2 = length($lhn) ? qq(::LocalHostname::"$lhn") : '';
			NodeUtils->runrmccmd('mkrsrc-api', '', qq(IBM.ManagementServer::Hostname::"$ms"::ManagerType::"CSM"$attr2));
		  }
	  }
	  else{   #-x so just add as an additional management server
		  #create the entry
		  my $attr2 = length($lhn) ? qq(::LocalHostname::"$lhn") : '';
		  NodeUtils->runrmccmd('mkrsrc-api', '', qq(IBM.ManagementServer::Hostname::"$ms"::ManagerType::"CSM"$attr2));
	  }
	
	# Refresh the rmc daemon so it picks up the acl file that was possibly modified as a
	# result of changing the management server
	if ($changedHostname) { NodeUtils->runrmccmd('refresh', '-s ctrmc'); }
  }


sub rmMgmtSvr
  {
	my ($server) = @_;
	if (!NodeUtils->isNode()) { NodeUtils->message('E41','EMsgNOT_A_NODE'); }
	#my ($ms, $lhn) = &getMgmtSvr();
	my $MgmtSvrs = &getMgmtSvr();
	foreach my $ms (keys %$MgmtSvrs){
		if($server && $ms ne $server){ next; }
		if (length($ms)){ 
			NodeUtils->runrmccmd('rmrsrc-api', '-i', qq(-s IBM.ManagementServer::"Hostname='$ms'"));
		}
	}
  }


# This is not currently used
#sub checkMgmtSvr
#  {
#	my ($class, $force) = @_;
#	my $ms = NodeUtils->getMgmtSvr($force);
#	if (length($ms))       # we are on a node
#	  {
#		# Set the environment var so RMC will connect remotely
#		NodeUtils->msg($msgs, 'V', 'CONNECTING_REMOTELY', $ms);
#		$ENV{'CT_CONTACT'} = $ms;
#	  }
#  }


sub isCTRMCrunning
  {
        my @output = NodeUtils->runcmd("LANG=C /usr/bin/lssrc -s ctrmc", -1);
        if ($::RUNCMD_RC) { return 0; }   # maybe we should try to catch real errors here
        my ($subsys, $group, $pid, $status) = split(' ', $output[1]);
        if (defined($status) && $status eq 'active') { 
		#now check to see if IBM.CSMAgentRM is up
		@output = NodeUtils->runcmd("LANG=C /usr/bin/lssrc -s IBM.CSMAgentRM", -1);
		if ($::RUNCMD_RC) { return 0; }   # maybe we should try to catch real errors here
        	($subsys, $group, $pid, $status) = split(' ', $output[1]);
        	if (defined($status) && $status eq 'active') { 
		    return 1; 
		}
		else { return 0; }
	}
        else { return 0; }
  }


sub waitForCTRMC
  {
        # Wait for the ctrmc and IBM.CSMAgentRM daemons to start. ctrmc will start CSMAgentRM
        # This is important during the first boot of a machine when ctrmc must
        # get started from /etc/inittab before mgmtsvr is successful.
        my $i;
        for ($i=1; $i<=15; $i++)
          {
                if (&isCTRMCrunning())
                  {
			  last;
                  }
                sleep 2;
          }
        if ($i > 14) { NodeUtils->message('W', 'EMsgDAEMON_NOT_STARTED', "ctrmc" ); }
  }

sub displayMS{
	# These are the various cases:
	# - only a node, mgmt svr set - rc=0, display: foo.com
	# - only a node, mgmt svr not set - rc=11, display: This node does not currently have....
	# - mgmt svr/node, mgmt svr set to self - rc=21, display: foo.com (This node is the mgmt svr for itself.)
	# - mgmt svr/node, mgmt svr set to other mgmt svr - rc=22, display: foo.com (This node is also a mgmt svr for other nodes.)
	# - mgmt svr/node, mgmt svr not set - rc=23, display: This machine is a CSM mgmt svr and a node, but the node does not currently...
	# - only a mgmt svr - rc=31, display: This machine is a CSM management server.
	# - more than 1 mgmt svr defined on this node - rc=31, display: This machine has multiple management servers:\nfoo.com\nbar.com
	# - neither a mgmt svr or a node - rc=101, display: This machine is neither a CSM mgmt svr or node.
	
	my ($ms) = @_;
	if (NodeUtils->isNode())
	  {
		my $MgmtSvrs = &getMgmtSvr($ms);
		my $numkeys = keys %$MgmtSvrs;
		if(keys %$MgmtSvrs <= 1){ #only 1 MS defined
			my @all = keys %$MgmtSvrs;
			my $ms = $all[0];
			my $lhn = $$MgmtSvrs{$ms};
			if ($::opt_N) { NodeUtils->message('O','IMsgMS_AND_LHN', $ms, $lhn); }
			elsif (!NodeUtils->isMgmtSvr())
			  {
				if (length($ms)) { print "$ms\n"; }
				else { NodeUtils->message('I11','IMsgNOT_SET'); }
			  }
			else         # also a mgmt svr
			  {
				if (length($ms))
				  {
					if (&isOwnMgmtSvr($ms, $lhn)) { NodeUtils->message('I21','IMsgBOTH_ITSELF', $ms); }
					else { NodeUtils->message('I22','IMsgBOTH_OTHER', $ms); }
				  }
				else { NodeUtils->message('I23','IMsgBOTH_NOT_SET'); }
			  }
		  }
		  else{ #more than 1 MS defined
			my @servers = keys %$MgmtSvrs;
			print "There are multiple management servers defined for this node:\n";
			foreach my $ms (@servers){
				if($::opt_N){
					my $lhn = $$MgmtSvrs{$ms};
					NodeUtils->message('O','IMsgMS_AND_LHN', $ms, $lhn);
				}
				else{
					print "$ms\n";
				}
			}
			exit 41;
	  	}
	  }
	elsif (NodeUtils->isMgmtSvr())   # only a mgmt svr
	  { NodeUtils->message('I31','IMsgMGMT_SVR'); }
	else       # neither a node or mgmt svr (must only have csm.core installed)
	  { NodeUtils->message('E101','EMsgNEITHER'); }	
	
}
T_Ak x0PB  7u     9  @@@             9      ./opt/csm/bin/sprc vr s                              #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)09   1.8   src/csm/samples/sbin/sprc.perl, setup, csm_rveg, rvegs001a 5/5/04 16:11:44



#
#   Module:	Simple Platform-independent Resource Controller (SPRC)
#
#
#   Purpose:	The purpose of this script is to supply a simple platform independent
#              	interface to system daemons.  These are often refered to as resources.
#
#               sprc  provides users with an common command line interface that can handle
#               typical resource managment tasks on both AIX and Linux cluser nodes.
#
#               When used with CFM, sprc simplifies managing daemons across a hetrogenous
#		cluster.
#
#
#  Source:	/opt/csm/samples/sbin/sprc.perl 
#
#  Installed:	/opt/csm/bin/sprc
#
#
#
#  Exceptions:	This tool supports exceptions to the variety of names found with known
#		resources.  sprc has the reponsibility for resolving the name correctly
#		for a given platform ( see aixExceptionHandler for example- and yes it is
#		a hack )
#
#		If you add an exception to this tool,  please update the list.
#
#		.  autofs	= automountd
#		.  ntpd		= xntpd
#



#--------------------------------------------------------------------------------

=head1    sprc.perl

        Development notes:

        The html view of the pod headers in this file can be updated
        by running the command:

                  pod sprc.perl

        The html veiw of the pod headers will be in the file sprc.perl.html

=cut

#--------------------------------------------------------------------------------

=head3	use staements


=cut

#--------------------------------------------------------------------------------

use strict;
#use lib $::csmpm;
use FindBin qw($Bin);
use lib "$Bin";
use Getopt::Long;


#--------------------------------------------------------------------------------

=head3  file scope data

=cut

#--------------------------------------------------------------------------------

# remote shell vairables
my $aix_rsh;  
my $linux_ssh;

my $AIX_AUTOFS_CMD = "/usr/sbin/automount";
    

#--------------------------------------------------------------------------------

=head3  messages

=cut

#--------------------------------------------------------------------------------

my $EMsgAIXOnly = "the -g flag is only appropriate for AIX hosts. \n";
my $EMsgNoResource = "sprc:  need a  resource for this command - try:  sprc --help \n";
my $EMsgUnsupporteOS =  "sprc:  unsupported Operating System \n";
my $IMsgNoParameters =  "sprc:  parmeters needed for this command - try:  sprc --help\n";
my $IMsgUsage  = "Usage: sprc [[-h?vV]|{[--cycle|-c]|[--kill|-k]|[--list|-l]|[--start|-s]|[--stop]}][[--remote|-r]{name|ipaddr}]{res|-g group}\n";


#--------------------------------------------------------------------------------

=head3  sub usage

=cut

#--------------------------------------------------------------------------------

sub usage () {
    print $IMsgUsage;
    exit;
}


#--------------------------------------------------------------------------------

=head3  sub help

=cut

#--------------------------------------------------------------------------------

sub help() {

    print "\n";
    print "--------------------------------------------------------------------------------\n";
    print "\n";
    print "sprc:   simple platform independent resource controller\n";

    print "\n";
    print $IMsgUsage;
    print "\n";

    print "Options: \n";
    print "    -c | --cycle         - kill and restart a running resource.\n";
    print "    -g                   - apply operation to a resource group (AIX only)\n";
    print "    -h | ?               - print short usage message. \n";
    print "    --help               - print this help message. \n";
    print "    -k | --kill          - stop a resource (same as --stop). \n";
    print "    -l | --list          - list the status of a resource. \n";
    print "    -r | --remote        - execute operation on a remote host.\n";
    print "    -s | --start         - start a resource. \n";
    print "    --stop               - stop a resource (same as -k,--kill). \n";
    print "    -v | -V              - verbose output. \n";

    print "\n";
    print "Examples: \n";

    print "\n";
    print "    Kill and start a running instance of ntpd on the local host. \n";

    print "\n";
    print "        sprc -c ntpd \n";
   
    print "\n";
    print "    Kill and start ntpd on the remote host, validHostName. \n";

    print "\n";
    print "        sprc --cycle --remote validHostName ntpd \n";

    print "\n";


    exit;
}


#--------------------------------------------------------------------------------

=head3  sub getArgs

=cut

#--------------------------------------------------------------------------------

sub getArgs
{
    # Checks case in GetOptions
    $Getopt::Long::ignorecase = 0;

    # Allows opts to be grouped (e.g. -avx)
    Getopt::Long::Configure("bundling");

    if ( !@ARGV ) { print $IMsgNoParameters; exit; }
    GetOptions(
                    'c'           => \$::CYCLE,
                    'cycle'       => \$::CYCLE,
                    'h|?'         => \$::USAGE,
                    'g'           => \$::GROUP,
                    'group'       => \$::GROUP,
                    'help'        => \$::HELP,
                    'k'           => \$::KILL,
                    'kill'        => \$::KILL,
                    'l'           => \$::LIST,
                    'list'        => \$::LIST,
                    'r'           => \$::RHOST,
                    'remote'      => \$::RHOST,
                    's'           => \$::START,
                    'start'       => \$::START,
                    'stop'        => \$::KILL,
                    'v'           => \$::VERBOSE,
                    'V'           => \$::VERBOSE,
    );

    if ( $::USAGE )   { print $IMsgUsage; }
    if ( $::HELP )    { &help(); }
    if ( $::RHOST )   { $aix_rsh   = " rsh "; $linux_ssh = " ssh "; }
}


#--------------------------------------------------------------------------------

=head3  sub getPlatform

	Returns a testable OS Platform string.

=cut

#--------------------------------------------------------------------------------

sub getPlatform
{

    my $platform =  qx ' uname -s ';
    chomp ( $platform );


    if ( $platform eq "AIX" )
        { return "AIX"; }

    elsif ($platform eq "Linux")
    {
        if (-f "/etc/redhat-release") { return "Redhat"; }

        elsif ( -f "/etc/SuSE-release" )
        {       
            if ( !system( "grep SLES-7 /etc/SuSE-release " ) )
            {
                 return "SLES-7";
            }
            elsif ( !system( "grep SLES- /etc/SuSE-release " ) || !system( "grep 'SuSE Linux' /etc/SuSE-release") ) 
            {
                 return "Not_SLES-7";  # SLES but not SLES-7
            }
        }
    }
    else # error, unsupported platform
    {  
        print " $EMsgUnsupporteOS \n";
        exit;
    }
}

#--------------------------------------------------------------------------------

=head3  sub aixExceptionHandler - put special daemon-specific hacks here

=cut

#--------------------------------------------------------------------------------

sub aixExceptionHandler 
{

    my ( $resource ) = @_;

    # switch on $resource

    if ( $resource eq "autofs" )
    {
        if ( $::GROUP ) { return "autofs"; }

        return "automountd";
     }

    if ( $resource eq "automount" )
    {
        if ( $::GROUP ) { return "autofs"; }

        return "automountd";
    }

    if ( $resource eq "automountd" )
    {
        if ( $::GROUP ) { return "autofs"; }

        return "automountd";
    }

    if ( $resource eq "ntpd" )   { return "xntpd"; }

    return $resource;

}


#--------------------------------------------------------------------------------

=head3  sub redhatExceptionHandler - put special daemon-specific hack here.

=cut

#--------------------------------------------------------------------------------

sub redhatExceptionHandler 
{

    my ( $resource ) = @_;

    # switch on $resource

    if ( $resource eq "automountd" ) { return "autofs"; }

    if ( $resource eq "xntpd" )      { return "ntpd"; }

    return $resource;

}


#--------------------------------------------------------------------------------

=head3  sub sles7ExceptionHandler - put special daemon-specific hacks here

=cut

#--------------------------------------------------------------------------------

sub sles7ExceptionHandler
{

    my ( $resource )   = @_;

    # switch on $resource

    if ( $resource eq "automountd" ) { return "autofs"; }

    if ( $resource eq "ntpd" )       { return "xntpd"; }

    return $resource;

}


#--------------------------------------------------------------------------------

=head3  sub notSles7ExceptionHandler - put special daemon-specific hacks here

=cut

#--------------------------------------------------------------------------------

sub notSles7ExceptionHandler 
{

    my ( $resource ) = @_;

    # switch on $resource

    if ( $resource eq "automountd" ) { return "autofs"; }

    if ( $resource eq "ntpd" )       { return "xntpd"; }

    return $resource;

}


#--------------------------------------------------------------------------------

=head3  sub aixRsourceHandler

        Handles AIX Unix resource requirements

        Notes:

=cut

#--------------------------------------------------------------------------------

sub aixResourceHandler
{
    my $scope;
    my ( $resource, $host )   = @_;

    # $scope is either -s or -g
    if   ( $::GROUP ) { $scope = " -g "; }
    else              { $scope = " -s "; }

    if ( $::CYCLE)
    {
        # recycle the daemon
        system ( "$aix_rsh $host stopsrc  $scope $resource " );
        system ( "$aix_rsh $host startsrc $scope $resource " );

        # start the autofs subsystem
        system ( $AIX_AUTOFS_CMD );
    }
    if ( $::KILL )
    {
        system ( "$aix_rsh $host stopsrc $scope $resource " );
    }
    if ( $::LIST)
    {
        system ( "$aix_rsh $host lssrc $scope $resource " );
    }
    if ( $::START)
    {
        # start the daemon
        system ( "$aix_rsh $host startsrc $scope $resource " );

        # start the autofs subsystem
        system ( $AIX_AUTOFS_CMD );
    }
}

#--------------------------------------------------------------------------------

=head3  sub redhatResourceHandler

        Handles Redhat Linux resource requirements

        Notes:

=cut

#--------------------------------------------------------------------------------

sub redhatResourceHandler
{
    my ( $resource, $host )   = @_;

    #  set absolute path to linux resource ( in init.d )
    my $abs_resource = "/etc/init.d/$resource";

    if ( $::CYCLE)
    {
        system ( "$linux_ssh $host  $abs_resource stop " );
        system ( "$linux_ssh $host $abs_resource start " );
    }
    if ( $::KILL )
    {
        system ( "$linux_ssh $host $abs_resource stop " );
    }
    if ( $::LIST)
    {
        system ( "$linux_ssh $host $abs_resource status " );
    }
    if ( $::START)
    {
        system ( "$linux_ssh $host $abs_resource start " );
    }
}

#--------------------------------------------------------------------------------

=head3  sub sles7ResourceHandler

        Handles SuSE 7 Linux resource requirements

        Notes:

=cut

#--------------------------------------------------------------------------------

sub sles7ResourceHandler
{

    my ( $resource, $host )   = @_;

    #  set absolute path to linux resource ( in init.d )
    my $abs_resource = "/etc/init.d/$resource";

    if ( $::CYCLE)
    {
        system ( "$linux_ssh $host  $abs_resource stop " );
        system ( "$linux_ssh $host $abs_resource start " );
    }
    if ( $::KILL )
    {
        system ( "$linux_ssh $host $abs_resource stop " );
    }
    if ( $::LIST)
    {
        system ( "$linux_ssh $host $abs_resource status " );
    }
    if ( $::START)
    {
        system ( "$linux_ssh $host $abs_resource start " );
    }
}

#--------------------------------------------------------------------------------

=head3  sub notSles7ResourceHandler

        Handles SuSE 8 Linux resource requirements

        Notes:

=cut

#--------------------------------------------------------------------------------

sub notSles7ResourceHandler
{

    my ( $resource, $host )   = @_;

    #  set absolute path to linux resource ( in init.d )
    my $abs_resource = "/etc/init.d/$resource";

    if ( $::CYCLE)
    {
        system ( "$linux_ssh $host  $abs_resource stop " );
        system ( "$linux_ssh $host $abs_resource start " );
    }
    if ( $::KILL )
    {
        system ( "$linux_ssh $host $abs_resource stop " );
    }
    if ( $::LIST)
    {
        system ( "$linux_ssh $host $abs_resource status " );
    }
    if ( $::START)
    {
        system ( "$linux_ssh $host $abs_resource start " );
    }
}


#--------------------------------------------------------------------------------

=head3  Main MAIN main

	process comand line then switch on $platform.

=cut

#--------------------------------------------------------------------------------

{ #  main block - controls scope of data

    # values from cmd line
    my $resource;
    my $host;
    
    # get arguments
    &getArgs();
    
    # get $platform
    my $platform = &getPlatform();
    if ( $platform == -1 ) { exit; }
    
    # get the hostname if remote shell flag is set
    if ( $::RHOST ) { $host = shift @::ARGV; }
    
    # get resource
    if ( @::ARGV )
        { $resource = shift @::ARGV; }
    else
        { print $EMsgNoResource; }
    
    #  handle AIX only condition
    if ( $::GROUP && $platform != "AIX" ) { print $EMsgAIXOnly; exit; }
    
    # switch on $platform
    {  
        if ( $platform eq "AIX" )
        { 
            $resource = &aixExceptionHandler ( $resource );
            &aixResourceHandler( $resource, $host );
        }
        elsif ( $platform eq "Redhat" )
        {
            $resource = &redhatExceptionHandler ( $resource );
            &redhatResourceHandler( $resource );
        }
        elsif ( $platform eq "SLES-7" )
        {
            $resource = &sles7ExceptionHandler ( $resource );
            &sles7ResourceHandler( $resource );
        }
        elsif ( $platform eq "Not_SLES-7" )
        {
            $resource = &notSles7ExceptionHandler ( $resource );
            &notSles7ResourceHandler( $resource );
        }
    }
}
head3  k*Y |0PB  7u     tI  Fq@Fq@Fq@             tI      ./opt/csm/bin/uninstallms  defau                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2002,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)40   1.32   src/csm/install/uninstallms.perl, setup, csm_rveg, rveg0414a 3/30/04 14:00:43

#--------------------------------------------------------------------------------

=head1    uninstallms.perl

        Development notes:

        The html view of the pod headers in this file can be updated
        by running the command:  

                  tidypod <filename>

	The html veiw of the pod headers will be in the file ./<filename>.html
	and can be viewed with a browser.

	The tidy formatted file will be in <filename>.tdy

	Be sure to run tidypod and copy the .tdy file to <filename> before checking
	in changes.

=cut

#--------------------------------------------------------------------------------

use strict;

BEGIN { $::csmpm = $ENV{'CSM_PM'} ? $ENV{'CSM_PM'} : '/opt/csm/pm'; }

use lib $::csmpm;
use Getopt::Std;
use NodeUtils;
use CSMDefs;
use InstallUtils;

# sets local scope - we only want classes on the Managment Server
# though it's not clear that classes are being used ...?

$ENV{'CT_MANAGEMENT_SCOPE'} = 1;

# message service
$::MSGCAT     = 'csmInstall.cat';
$::MSGMAPPATH = $ENV{'CSM_MSGMAPS'} ? $ENV{'CSM_MSGMAPS'} : '/opt/csm/msgmaps';
$::MSGSET     = 'csminstall';

#--------------------------------------------------------------------------------

=head3	initialize	

        Notes:	globals only

	get the definitions we need for this command 
	in this case get_OSDefs uses the attrs of the management 
	server to identify the correct definitions

=cut

#--------------------------------------------------------------------------------

sub initialize
{

    # setup the global os define variables
    InstallUtils->get_OSDefs();

    @::My_NodeList    = ();
    $::rsct_basic_Flg = 0;
    $::csm_client_Flg = 0;

    # gather the variables
    $::ATTRS{'InstallCSMVersion'} = InstallUtils->get_CSMVersion("csm\.core");
    $::ATTRS{'InstallOSName'}     = InstallUtils->get_OSName;
    $::ATTRS{'InstallDistributionName'}    = InstallUtils->get_DistributionName;
    $::ATTRS{'InstallDistributionVersion'} =
      InstallUtils->get_DistributionVersion;
    $::ATTRS{'InstallPkgArchitecture'} = InstallUtils->get_PkgArchitecture;

    $::osTypeVersion =
        $::ATTRS{'InstallOSName'}
      . $::ATTRS{'InstallDistributionName'}
      . $::ATTRS{'InstallDistributionVersion'};

    #
    # get the appropriate lists of filesets/packages
    #
    # for the management server
    %::Svrpkgdefs =
      InstallUtils->get_pkgdefs(
                                $::ATTRS{'InstallOSName'},
                                $::ATTRS{'InstallDistributionName'},
                                $::ATTRS{'InstallDistributionVersion'},
                                $::ATTRS{'InstallPkgArchitecture'},
                                "MgmtServer",
                                $::ATTRS{'InstallCSMVersion'}
                                );

    # get the list of log files
    @::csm_logfilelist = (@{$::Svrpkgdefs{logfiles}});

    # get the CSM uninstall list
    @::csm_uninstall_packages = (@{$::Svrpkgdefs{csm_unpackages}});
    @::csm_uninstall_packages = reverse @::csm_uninstall_packages;

    # get the rsct uninstall list
    @::rsct_uninstall_packages = (@{$::Svrpkgdefs{rsct_unpackages}});
    @::rsct_uninstall_packages = reverse @::rsct_uninstall_packages;

    # get the list of uninstall directories
    @::csmUninstallList_Directories = (@{$::Svrpkgdefs{csm_uninstall_dirs}});

    # get list of packages that shouldn't be uninstalled
    @::csmUninstallList_Packages = (@{$::Svrpkgdefs{csm_nouninstall_pkgs}});

}

#--------------------------------------------------------------------------------

=head3	usage	

        Notes:

=cut

#--------------------------------------------------------------------------------

sub usage
{

    NodeUtils->message('I', 'IMsguninstallmsUsage');
    exit 1;
}

#--------------------------------------------------------------------------------

=head3	getArgs	

        Notes:

=cut

#--------------------------------------------------------------------------------

sub getArgs
{
    if (!getopts('fuvVh')) { &usage; }

    if ($::opt_h) { &usage }
    if ($::opt_v) { $::VERBOSE = $::opt_v; }
    if ($::opt_V) { $::VERBOSE = $::opt_V; }

    # check if the Machine is Management Server
    if (!NodeUtils->isMgmtSvr())
    {
        NodeUtils->message('E2', 'EMsgNOManagementServer');
    }

    if ((!($::opt_f)) && ($::opt_u))
    {
        NodeUtils->message('P', 'IMsgUNINSTALLMS_VERIFY_U');
        my $input = getc;
        if (($input !~ /^y/) and ($input !~ /^Y/))
        {
            NodeUtils->message('I', 'IMsgUNINSTALLMS_NOT_UNINSTALLING');
            exit 0;
        }
    }

    if ((!($::opt_f)) && (!($::opt_u)))
    {
        NodeUtils->message('P', 'IMsgUNINSTALLMS_VERIFY');
        my $input = getc;
        if (($input !~ /^y/) and ($input !~ /^Y/))
        {
            NodeUtils->message('I', 'IMsgUNINSTALLMS_NOT_UNINSTALLING');
            exit 0;
        }
    }

}

#--------------------------------------------------------------------------------

=head3	remove_files_dir	

        Notes:

=cut

#--------------------------------------------------------------------------------

sub remove_files_dir
{
    my ($file_name, undef) = @_;
    NodeUtils->runcmd("$::RM -rf $file_name", -1);
    if ($::RUNCMD_RC != 0)
    {
        NodeUtils->message('W', 'EMsgCannotDelete', $file_name);
    }
}

#--------------------------------------------------------------------------------

=head3	check_valid_sisdir

        Notes:

	Check whether the specified directory looks like an SIS directory 

	return:
		0 for false 
		1 for true

=cut

#--------------------------------------------------------------------------------

sub check_valid_sisdir
{
    my ($sisdir) = @_;
    my @sis_subdir = ("images", "scripts", "overrides");

    if (!(-d $sisdir) || (-l $sisdir))
    {
        return 0;
    }

    foreach my $subdir (@sis_subdir)
    {
        return 0 if (!(-d $sisdir . "/" . $subdir));
    }
    return 1;
}

#--------------------------------------------------------------------------------

=head3	move_sis_directory	

        Notes:

=cut

#--------------------------------------------------------------------------------

sub move_sis_directory
{
    my ($sis_csmdir, $sis_origdir);
    my ($cmd,        $rc);
    $sis_csmdir  = "/var/lib/systemimager";
    $sis_origdir = "/csminstall/Linux/SIS";
    my $sis_origdir_back = $sis_origdir . ".csmback";
    my $sis_csmdir_back  = $sis_csmdir . ".csmback";

    # if /csminstall/Linux/SIS directory doesn't exist, there must be
    # something wrong while install SIS packages
    if (!(-d $sis_origdir))
    {
        NodeUtils->message('E', 'EMsgERROR_INSTALLED_SIS');
        return -1;
    }

    if (check_valid_sisdir($sis_csmdir))
    {
        if (-l $sis_origdir)
        {

            # Check whether the /var/lib/systemimager link to
            # /csminstall/Linux/SIS directory
            my $target_dir = readlink($sis_origdir);
            if (   ($target_dir eq $sis_csmdir)
                || ($target_dir eq $sis_csmdir . "/"))
            {
                return 0;
            }
        }

        # Back the directory of /var/lib/systemimager to
        # /var/lib/systemimager.csmback and create a new link.
        NodeUtils->message('I', 'IMsgMOVE_DIRECTORY', $sis_origdir,
                           $sis_origdir_back);
        if (!rename($sis_origdir, $sis_origdir_back))
        {
            NodeUtils->message('E', 'EMsgERROR_MOVE_DIRECTORY', $sis_origdir,
                               $sis_origdir_back);
            return -1;
        }

        $cmd = "$::LN -fs $sis_csmdir $sis_origdir";
        $rc = NodeUtils->runcmd($cmd, 0);
        print $rc if $::VERBOSE;
        return $::RUNCMD_RC;
    }
    else
    {
        if (check_valid_sisdir($sis_origdir))
        {
            if (-d $sis_csmdir)
            {

                # Back the directory of /csminstall/Linux/SIS to
                # /csminstall/Linux/SIS.csmback.
                NodeUtils->message('I', 'IMsgMOVE_DIRECTORY', $sis_csmdir,
                                   $sis_csmdir_back);
                if (!rename($sis_csmdir, $sis_csmdir_back))
                {
                    NodeUtils->message('E', 'EMsgERROR_MOVE_DIRECTORY',
                                       $sis_csmdir, $sis_csmdir_back);
                    return -1;
                }
            }

            # Move the directory of /var/lib/systemimager to
            # /csminstall/Linux/SIS, and make symbol link for it.
            $cmd = "$::MOVE $sis_origdir $sis_csmdir";
            $rc = NodeUtils->runcmd($cmd, 0);
            print $rc if $::VERBOSE;
            if ($::RUNCMD_RC)
            {
                NodeUtils->message('E', 'EMsgERROR_MOVE_DIRECTORY',
                                   $sis_origdir, $sis_csmdir);
                return -1;
            }

            $cmd = "$::LN -fs $sis_csmdir $sis_origdir";
            $rc = NodeUtils->runcmd($cmd, 0);
            print $rc if $::VERBOSE;
            return $::RUNCMD_RC;
        }
    }

    return -1;
}

#--------------------------------------------------------------------------------

=head3	Main	

	Programmers note:

		Basically there are 2 conditions: AIX or Linux.
		If this is AIX, then the first big "if" will be done,
		otherwise, go to the other "if" InstallOSName eq Linux.

=cut

#--------------------------------------------------------------------------------

{    # main

    # initialize global variables
    &initialize;

    # parse the arguments
    &getArgs;

    my $runoption = "-1";

    if ($::VERBOSE) { $runoption = "0"; }

    # if backup data is available in /var/opt/csm/csmdata then copy it to
    # /tmp so that it is not removed, and then mv it back so that it is not
    # removed.
    if (-d "/var/opt/csm/csmdata")
    {
        my $cmd = "mv -f /var/opt/csm/csmdata /tmp/csmdata.uninstallms";
        NodeUtils->runcmd($cmd, -1);
    }

    # bad InstallOSName value
    if (   ($::ATTRS{'InstallOSName'} ne "Linux")
        && ($::ATTRS{'InstallOSName'} ne "AIX"))
    {
        NodeUtils->message('E1', 'EMsgUnsupportedOS');
    }

    #  AIX

    if ($::ATTRS{'InstallOSName'} eq "AIX")
    {

        # Remove the members of a Node Group
        NodeUtils->runcmd(
            "/usr/bin/chrsrc-api -i -s IBM.NodeGroup::\"MemberList!=''\"::\"MemberList::\"{}\"\"",
            $runoption, 0
            );
        if ($::RUNCMD_RC != 0)
        {
            NodeUtils->message('W', 'EMsgCannotRemoveNodegrpMembers');
        }

        # Before we remove the nodes, we need to see if the license has been
        # installed yet.  We can do this by checking to see if the "receipt"
        # file exists.  Their are two places we can check:
        # /var/opt/csm/1.3/tryandbuy/license/status.dat
        # or
        # /var/opt/csm/1.3/full/license/status.dat
        # where 1.3 is the csmversion.
        my $statusDir = "/var/opt/csm/";

        # now get the CSM version.  We only take the version and mod.
        # so 1.3.0.1 -> 1.3
        # and 1.3.2  -> 1.3
        # and 1.5.0  -> 1.5

        my $ver = $::ATTRS{'InstallCSMVersion'};
        $ver =~ /(\d+)\.(\d+)/;
        $ver = "$1.$2";
        $statusDir .= "$ver/";

        my $tabStatusFile  = $statusDir . "tryandbuy/license/status.dat";
        my $fullStatusFile = $statusDir . "full/license/status.dat";

        # if one of the above status files exist, then the license has been accepted.
        # this implies that there may be nodes defined.
        if ((-f $tabStatusFile) || (-f $fullStatusFile))
        {

            # Remove the  Node groups from the system
            NodeUtils->runcmd(
                        "/usr/bin/rmrsrc-api -i -s IBM.NodeGroup::\"Name!=''\"",
                        $runoption, 0);
            if ($::RUNCMD_RC != 0)
            {
                NodeUtils->message('W', 'EMsgCannotRemoveNodegrp');
            }

            # get the node list
            my $myresult = NodeUtils->listNodeAttrs([], "Hostname");
            foreach my $my_node (@$myresult)
            {
                push(@::My_NodeList, $my_node);
            }
            my $rm_cmd = "$::RMNODE";
            $rm_cmd .= " -v" if ($::VERBOSE);
            $rm_cmd .= " -u" if ($::opt_u);
            foreach my $my_node (@::My_NodeList)
            {

                # Running the rmnode command
                my $mycmd = "$rm_cmd $my_node";
                $myresult = NodeUtils->runcmd("$mycmd", $runoption);
                if ($::RUNCMD_RC != 0)
                {
                    NodeUtils->message('W', 'EMsgCANT_RUN_CMD', $mycmd);
                }
            }
        }    # the enclosed is only done if the lic has been accepted.

        # Now remove the CSM packages
        my ($my_package, $my_logfile, $my_cmd, $my_result);

        # remove the pre-defined-condresposes
        # this is done in csmserveruncfg

        # remove the CSM packages
        foreach $my_package (@::csm_uninstall_packages)
        {
            $my_cmd = "$::INSTALLPCMD -u $my_package";
            $my_result = NodeUtils->runcmd("$my_cmd", $runoption);
            if ($::RUNCMD_RC != 0)
            {
                NodeUtils->message('W', 'EMsgCANT_RUN_CMD', $my_cmd);
            }
        }

        # remove the RSCT packages
        foreach $my_package (@::rsct_uninstall_packages)
        {
            $my_cmd = "$::INSTALLPCMD -u $my_package";
            $my_result = NodeUtils->runcmd("$my_cmd", $runoption);
            NodeUtils->message('W', 'EMsgCANT_RUN_CMD', $my_cmd)
              if ($::RUNCMD_RC);
        }
    }

    # LINUX

    if ($::ATTRS{'InstallOSName'} eq "Linux")
    {

        # For Linux we just remove the CSM packages
        # We don't remove any nodes, because they will get removed with
        # the packages.

        # Exit if csm.director.agent is installed, because it has
        # a prereq on rsct.core.utils.
        NodeUtils->runcmd("$::RPMCMD -q csm.director.agent", -1);
        if ($::RUNCMD_RC == 0)
        {
            NodeUtils->message('I',  'IMsgUNINSTALLMS_NOT_UNINSTALLING');
            NodeUtils->message('E1', 'EMsgUNINSTALLMS_RUN_RMLCSEXT');
            exit 1;
        }

        # If -u option is used than than run rmnode command
        if ($::opt_u)
        {

            # get the node list
            my $myresult = NodeUtils->listNodeAttrs([], "Hostname");
            foreach my $my_node (@$myresult)
            {
                push(@::My_NodeList, $my_node);
            }
            my $rm_cmd = "$::RMNODE";
            $rm_cmd .= " -v" if ($::VERBOSE);
            $rm_cmd .= " -u" if ($::opt_u);
            foreach my $my_node (@::My_NodeList)
            {

                # Running the rmnode command
                my $mycmd = "$rm_cmd $my_node";
                $myresult = NodeUtils->runcmd("$mycmd", $runoption);
                if ($::RUNCMD_RC != 0)
                {
                    NodeUtils->message('W', 'EMsgCANT_RUN_CMD', $mycmd);
                }
            }
        }

        # remove the packages
        my (@uninstall_packages, $my_cmd, $my_package, $my_result);

        foreach (@::csm_uninstall_packages)
        {
            push @uninstall_packages, $_;
        }

        #don't remove rsct if rsct.basic is installed
        NodeUtils->runcmd("$::RPMCMD -q rsct.basic", -1);
        if ($::RUNCMD_RC == 0)
        {
            $::rsct_basic_Flg = 1;
        }
        else
        {

            #don't remove rsct if csm.client is installed
            NodeUtils->runcmd("$::RPMCMD -q csm.client", -1);
            if ($::RUNCMD_RC == 0)
            {
                $::csm_client_Flg = 1;
            }
            else
            {
                foreach (@::rsct_uninstall_packages)
                {
                    push @uninstall_packages, $_;
                }
            }
        }

        foreach $my_package (@uninstall_packages)
        {
            $my_cmd = "$::RPMCMD -q $my_package 2>&1 > /dev/null";
            $my_result = NodeUtils->runcmd("$my_cmd", $runoption);
            if ($::RUNCMD_RC == 0)
            {    # If it is installed, uninstall it
                $my_cmd = "$::RPMCMD -e $my_package";
                $my_result = NodeUtils->runcmd("$my_cmd", $runoption);
                NodeUtils->message('W', 'EMsgCANT_RUN_CMD', $my_cmd)
                  if $::RUNCMD_RC;
            }
        }

    }

    # Both AIX and Linux

    # Is rsct.core installed?
    my $rsct_pkg = "rsct.core";
    my $cmd      = "$::RPMCMD -q $rsct_pkg 2>&1 > /dev/null";
    NodeUtils->runcmd("$cmd", -1);

    # Clean the rmsr table if rsct.core is still installed
    if ($::RUNCMD_RC == 0)
    {

        # not adding messages - runcmd should show in the log.

        my $RMSRTBL = "/usr/bin/rmsrtbl-api";

        # ManagedNode
        $cmd = "$RMSRTBL /IBM/ManagedNode/Resources";
        NodeUtils->runcmd("$cmd", 0);

        # DmsCtrl
        $cmd = "$RMSRTBL /IBM/DmsCtrl/Resources";
        NodeUtils->runcmd("$cmd", 0);

        # NodeGroup
        $cmd = "$RMSRTBL /IBM/NodeGroup/Resources";
        NodeUtils->runcmd("$cmd", 0);
    }

    # remove the log files package
    foreach my $my_logfile (@::csm_logfilelist)
    {
        &remove_files_dir($my_logfile);
    }

    # Display a list of the files, Directories and packages that were not
    # uninstalled (because they were not installed by installms)

    NodeUtils->message('I', 'IMsgDidnotRemoveDir',
                       join(', ', @::csmUninstallList_Directories));

    NodeUtils->message('I', 'IMsgDidnotRemovePkgs',
                       join(', ', @::csmUninstallList_Packages));

    NodeUtils->message('I', 'IMsgDidnotUninstallOpenSrcPkgs');

    if ($::rsct_basic_Flg == 1 || $::csm_client_Flg == 1)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgDidnotUninstallRsct');
    }

    NodeUtils->message('I', 'IMsgDidnotUnconfigureRemoteShellServer');

    # put csmdata back
    if (-d "/tmp/csmdata.uninstallms")
    {
        NodeUtils->runcmd("mkdir -p /var/opt/csm/", -1);
        NodeUtils->runcmd("mv -f /tmp/csmdata.uninstallms /var/opt/csm/csmdata",
                          -1);
    }

    exit 0;
}
    k ~0PB  7u     4  pp~App~App~A             4      ./opt/csm/codebase/WebSMCSMcore.jar AppC                             PK   T]Z1            	  META-INF/   PK           PK   T]Z1               META-INF/MANIFEST.MFMLK-.K-*ϳR03r.JM,IMu	*hx:*8% jrr PK7.=   >   PK   A1            *   com/ibm/csm/bundles/guiCSMAppsBundle.classUmSW~V^vY7|FT/MX@+h$%tRX:6;:13i'~lgڞ,v<9gsι˻8DQ(BD|&pf<xD<#5ǆ^ؒbM[6'v|[qprQ?Ij%a]flɅ*±d*MBL"dRY<شX<%ax~mEWCZ"\&,gO&k};;MeAdJEsJU-PjĪjq7wɥ+jJZ*唜eAF?Z|vkj`+(8;zZ3y5|VkHRy2&|pǆbAw=peUcyxS݅\j4;@e~JJZ s0%&9b@J15@%X&rSJk>ǬYmǞ<'!*V{{JY}E/lGfMnŨeBb(e%$Z3kb$6Hb`XԊz+thTjj:zj/W!)(Ri*yzp)rqގ0UĬO]4>nTR]ӾU<f-Яs`57;
6C&&ID"v hڋlP)M;ӓ.phȍ3!`֢01BmppowΆNˆ;Eyۆ;CXҜ[Ki1JGD,XE@)<'h?qGte^/ԁ>"<fY̚@Tħkh&51mS'~i3VݔߐNq4?%Ytƃe|ayTQc.Ϝ/sctOMW1OMArx1w~	>0Miy!ſH3J@H@Sy=$Pi-Н`u-N;mɴ;ue.\'mnH&_.K4{:H}'KPKz@yw  A	  PK   A1            0   com/ibm/csm/bundles/guiCSMMonitoringBundle.classx[u%DEQ|$5)QӒb"a		0 IQbx$acd#{8p;N8pd);VҴ[7MMG:ґt#I[;wA\$?߹^z 
oR[Q.m.N	n	pJxK$|P$|XG$<(>&OHxD'%|J£>-3Y	KK/JxB$\+JH&)	%|Url[
nSTjrvbw{ȩsL4#$}4JDRwkh+RtH)>)Kq@RtI-ERI/ŀRCRǤ8.	)NJq8-)^!R"ŭRKqV)FHq8/Wۥ ŘRK1!+HbLLiUԌm.Q30L'#*GTڌhz.Nz'ɷfǼȟ:6Q`=^ߤ'zǼ3NFKJz|Al'5Joqn5w]\?5DTbq;g6ZoBdޏ[!zFI]ChbczgS(d{>jtlG"Ogq[!ڍQzgo]FI1MMOri\=aIGLD%vFp`p3;McN!]۠TjNz.nQd϶8{O3?,"z%T`$[H6(U`=SF.zqR{7Vi7ov8>PH)5:צjR*1VphFމItd8殙
1)|6x:MtI;{sw[4=fc+$CL<3Htp}JDd+I1j,|؜4稐Vz9V͝}x*ۻTxGI4x-B]WŹc`L%7V8қQl,(h85]Ig]۠XPl,WD}p`S&rي-@$orGfkX^2wp%sgkXޚaѶA~ [VGi@UlnJoyo0{uxõw{`!;Fۨ$77"*	nsUp6O];뺺1ЍƭT\@qkAɞ'phgOS;/1x3:ANp[2D;P!+
xY@<7J"sP*60g
ܯ7
q TZymZJG
x	3UL\:EB̊S=:sx9U~/a#aM쳪ctÿl%#
^pVR1;7sLz`1SD4dh%aF^9Ē4"HzGb[1tbs1n4vt7Ç:qԮsDf	=`{N40#5rOv=l~öl3c3fA5a$iijixVzC;䰂pxm|t5/ôT+X2LĶӋJSTg[ {`pO[Ux纾:ʪYe6bTNG
+̭+,MHj)j㛽hJQy3^1A[x25͛BWBM~'1.+e-;ZqU"f	k,:ӔmZWVȾѥ<jC+Q+l?Pϲsβ=g05Z+ۑ-/e'g28A0-kvc,Op&N?IcUO	#Tڊ.uFbްGʈq&f09ٟ2V#NDW3Gi(;BۺJn	Ǿ%+Df04gikɤ4[Bf4Jպ1}	)b0~@ŖDҋNkώ>l0l@aV,Ǻcks(D**o2FڼfI!E^DrֱVh:۞f4+qw"׃cQk#Zc>*G7
asf
c#1ˮ"l$o>;
2n(Q+W=u##Ku돇-˖,x}F0=7垌aӧm]޲c
gD	D}#,R7:ZR7_4mi;BzPco[WIN`)TeNgm/&kd6&7ȝK<~@; 7A	ތ7淠r)oմ4].AMOeߩi].GnMQG;P߯
t%iz'k
4]MBAMנwkQD{P?:^t=k{HӍtOh#nAIMP?i5ݎ3@;QVP???部._t7'4݃KE}Y}t?+@}UӃCèizS>~ZQ?8o篢jz{(y
ēCgmuxNn:]c[̰/#[&Ö2,-aiJE--gXZpͰnmP~a+2l%dXǰUK[Ͱ}Ű"[ðdǰvdak֏1Dag˰w"}gʰ1l#Ɛsmb$aE/a__1lþٿfXaCoaG ɰ"waFv?>?0}1A}d.?1l7^GaE_aǰ#ϰBva3 ~`C}d̰'1/=°?B(þ011?adʰ'%daOnd]EmU|n'+奵RTE5LS ڧkc2F޷þQnO\-
69lg Tj{J.vһ^,!*jo5y-֫p&wIŻ@TN@(N=7hhfxFPS<4~bOyxfp kb[ގ\7	фB986:;t0ԸBk]p]q\ EIE/&=VfJWpOeGD%dLQR2^F2!!Q)'gl)rY;ș&\9\$ǭJr grv3CNry9ʩ&9;WSr^CNrv1SKΝ(g9VN9wSQN=9s)9{HNz4cӠfriTN94)ErFNMNrɹ6t%PN'91rڕ89ONN g}9Hϑ_9]$9nrRTN9irKNnLNrY!W9伖>JNr:rs'gP9CK!!9"9C9F/sD9er*sL9'y}0xn+~ۮ2D PKZ  .  PK   A1               com/ibm/csm/apps/Cluster.classSkO`~^(˼\mv!D:kui;bb4I9yyzNEí~% CZ
E2rG[HߛLn6kZ9ڢlì@v<. з4@t6zN^i7nVkvP]HNDdZ}_v@~Cm+X2nlzdTl[v+pP`PJɲ600nHdTV_ڞMYO{Ѫ3B2?kn۳NXo8.@R1F)@;|8(0|\kYnl|c:v7~XUY	SOQ"Qr*/h'4vCo7d]xh>ص&l!W0\lN](/dZҊWxZfs(;lp
ٔj8u=wٓlc¬0+&`Co=H~_(m1ފG ҉g'D>8>.@/ILj]B'rEC-a3KџP^!VI|#](mX:dq^H}Z:MI=bU{8W9(Gsc{dqd}/Ho9`IM|hgDh
1PKx  i  PK   A1            '   com/ibm/csm/apps/ClusterContainer.classX	x'>vYFA RlBV$ccky-+jĴ-P(-wi))9-p\
Rz}7+Y|_xw{o޼7yՇfvbZ%&a.
J؊wx\KĻ%z_>	+pBĕq'}@"A\ˉqKQ|LQ:׸Y-"nc26|?nI|J;D33w>E|V9}ܻ/I%lC|rN<,<|@$|xBxJėixVl438)՝PS1wX7C/jR9MsutfZ&34fT]K͆դePtKwhc٤[3!-ju{|7_5E&56GXc&tʘԌxx*np{sjcz|<#Z6O˦36Q-ϏtBsgX<7C5rK&[}q!Oi\rLձQiFoux`Xrx.'ѡ9DLx]dZAL=l&NsRܹ +_$wFAN

e	mCZ*TǴPJKS<U->S.t:bUɇǦF|bfOZJ2WyUnotÚEA9ܪMw[串IҦ2tV񬠯lQIUBO&0ҮH:G-q+"&0TJy5xAWLa8mlIRl"xg	Mmb.EKqC6U"Vac6Wq_Klб(0@j"pba1UqMk&l
ƾMA*bGZl{@4GF#^o4	yiØУ8Ř>Ȩhp?~@ࡒlaظp9;I]SI F/COd?sB/e
EMYzMEH%ޞm*?2? o"CY
A2O
<JIUZBIƒ)MW+/_2W\D'dUYZ
r"V-VmGIڔ8ٟK$$ՔJ1%;+iY6ɤu	q:@mh>bDV'b7WoEP'0If)l0'=^q3R@C餑ڂ ͺy'^Rɖ\;"ZNQNfEQsX.}XLkWxF˖3	/v?7ylrwmvoR:;=T;W跔!ҵqc;_ɛHI.#5ƁdӋasSx	+ܤr1+iKZrzHRT/7P?lP1'^[MrȠ`'zGFސt Q%!xM^UNpOIU4Vb;5İ	'-(oY`BۂjZoN:rJ^Yω8W$*VDIdTRgIM5B}`&j,)hc9ڤ825$k,y!;	mYAt.S8++NPF~^Bpqū'-TP;£m]eGit HLvpTHJ`s.B:ֶr&l(kbHu?O}JU~*<*(-Ȟ\io?qvt0oau4oe-Z{Mk/ڃԲXU`z'(K\lPU"0%7l[4{9B_@jmkpVϢv/4lBN#Жق*sfY}{
)#QD<=E}+H89M8oEݨ5gsXA:shqYjkQJ8*t'L8Ĭ.rKf{E.Dnȅ126F(bތ$ZkMJ*I-395i@rfLO#Eʏ/c)WͩbkfW}y
u,Fh}XV1ݏ4ú	h@p )tkp-)c]HNٿu<5
ĉ<=Ozge7*bv8h1+=>ọk:I)d^ Na8u<NH:ꇱiʹ<⑝S4OzGڝusϢKpksh/F{znrgҲ=vx t<7wnxFw`3$pܺ^*(wS =^\}q ǃ{ 	<gã"ݛ찯7/ֶYU^Sq? Hْ==T(9xG8;_,z񏴱Yl)/⧩Z? غӺ<G/k}q["`_.]689Z`{FFf@VUH|Mg(RrvQgWjB[+21v PKr
  G  PK   A1               com/ibm/csm/apps/NodeHost.classTmOP>u0HBnS1.,n`HWd]$ &D 4YO>9HB$Ǩf$ҜDbKrW%ZBɀ(HL۶v%{ƾՍFM[]Q[a4Pto4MQ03kv(-2јrU (\tv8;eW[vF$^~nxުa#UU0o`V+[*"7b˷& ǅb͡ɛC$Z4QCI)YU[;UlGiϟWrРzIĒݬ6N5[+u`|5((N#q`]9hMg4_5=[5MO%MK(<M%}N}FD~%%s.˞k
Zzh,A }^=[g\Nd_/1VI؝<mr.E!%ÆS:@M(Vgoք+࣊;IAB"B>|)OP~ǀ<BNKO瘤1!<2(@ ;woCP"|^St>bqz(RIH?0p0/9(/(t4eH~G>'R;rx]=؜PK(PD    PK   A1            (   com/ibm/csm/apps/NodeHostContainer.classW|<,DB";xJDJ<xa8#g@ҩCi

%@(u2=-݋NN[I7{śf	Kp"\/a op7:p1*&~o[&7
xE!!	Ux)nn#^.>^	g󠀇O(a_A3>$z\|Tģ1;8,2`VO)$seQOXq	x$<OO3|
y.(K"Wk". Ăذ:20qx+Cy7+"ji]0D|*Е
bcpwW	{XثA[^%hh:uFGUC"P%\H51Wsu0D^mT٭:'(:bL(dؘ-<:\IV,=:CT,<AUsSF@($<50<T]W~%#[s2/J;ޟ),ZHFCq57F/v@kPNe&{E	ʲqŰ=aƵ[X_[w^UX)
"PcP`˧#(eDj)ljnGFS24.pg:yx,7Hi:ش-sNUfɅWM63+2oKAן2ΥVb0Ԝ"t\(
I~-*GdRE SGFScX&Le"uM=eEFre1C*L2p@E*Qfhʋe7ǃ<k"c9LzO3I$]0RwN̐;vuw{#n͏e?z=;ӄu8Cy,2~0&uw!c/K[/e
0Ur(aP2"2¼L4wǬbt;GXdҵϼXb:c-2#=A}xW+8]U#%3p֛y,K?GJ"A_2<ٗ
	BbW"@0ƖȬDfL(3V&DdJAVG<ccgBצ$JU2seY$w&鞪0"56@P'	1P^2<0]h果|}~z}a톺n_\;͓7h%@\'F7nҼ%mnjq7olmjaXS^nOuQeӦf9eEdVK
dEk@D69}!%LR^1o|ul[Kyq=EV,f~jR˼:3Ze$^_؈v-"IC^sώ]y)J:jb/0l^ĽےҵNS"$h\TGf[~Z7#W5vu(#q"'R##3OK Fg	byihQȸ@(7]r^sJzk=9VYz{'5&[ST<$ᮬ3+z980R{SJZ_SX\zzifUa<ɱyDY(7|̉ckͫ*M>O'[%N.$9@[1M}L?e7K/Ҕy{kO\6:hLQ5LT`Ee"t3tztٸ D?-^feil6&=hrgͮȚ2f2AQmD	R}CcxOЌAkt.6m(2w6.@0qT:yc@yᔼ
>>TV'2B;
Yٳ!Rt:cVt7TXؐͪMǙ|\jL+QOfD'.5xmC?rW*[3Pԧe+.M\s	a$](6	7bq}ykf!9#4-i2]NQEA^Gt@CD od+u.`V;kH8g3(*~uCEr'0F?ϢcŷɌow^Z^Zw&<Z|%ز>yOt	.".1rdfp(3<O^@PCt.I.1rW14pUC(|cX\	'a:9r7dzK"{*Yi:L*zjX-Ep+kc+8"SA^EYC-	b,~O uxzD2I|"N/;RVݬ0/e-mAֆ.<z(aCY\HΐZ L12gͲ~yzrK£T2tQ6/=.y,z%^sXϢC߂L	>L콹`T%Px|;-vrσ^@%;հLI%YRqW
q0=ߛk<	:J+טPKґ
    PK    T]Z1           	                META-INF/  PK    T]Z17.=   >                =   META-INF/MANIFEST.MFPK    A1z@yw  A	  *                com/ibm/csm/bundles/guiCSMAppsBundle.classPK    A1Z  .  0               com/ibm/csm/bundles/guiCSMMonitoringBundle.classPK    A1x  i               C  com/ibm/csm/apps/Cluster.classPK    A1r
  G  '               com/ibm/csm/apps/ClusterContainer.classPK    A1(PD                 #  com/ibm/csm/apps/NodeHost.classPK    A1ґ
    (             &  com/ibm/csm/apps/NodeHostContainer.classPK      w  1    (HLkP 0PB  7u       2b@2b@2b@                   ./opt/csm/csmbin/add_KRB5principals AppC                                @b2     H   FT  )    /` (  |  /        1L                      .text    ( (  FT  (  |z          .data     |  |  )  G|       w     @.bss      1X  1X                     .loader           !  qX                                                           " (|nx|#x|+x|    1  B ,9   e)-  *  @ H  `   H   DH A |nxA   A |	Q N!A  L9   }sx}{x~x  H `     ,  A b $H EA |      @        __start   !|b A ,   H ,   A  <    c A |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A  H8! @}N  8! @N         A       __threads_init  @    b 0|!c   HH  EA  H8! @}N         A      , call_pthread_init   8     4A   L |	N               HA   L |	N              |A  P!a D8``  8 H mA 8 8 H A  \ `~      H A  hB l8he  cC  H 49`   ,    c  @ a DH ||yz  @ H 
`|  z  , @ ;  H `   z  ~  88 8 H 9A   `d  cc  c  H :A z  H 8qA c   h8! `A}N   hA H8! `}N         A       ( main  !| P`  ;   !@a @8 @8aH 8`   8 D8aH 8`   8a p8  8 LH Aq`   8a 8  8 LH A]`   b< D H c  ac  8 pH <YA |dyA 08@aH y`   ȃ8` 8!}N    ,   @ D8  |	88~ |`Fp| T @.|8c |`Fp B | T @.|  b ;`  \`  @c   , @ laH `   }  88 8 H 8A `d  ac  H 8-A 8 ;`  ace  8 pf  H ;MA H  \aH `   }  8p8 8 H 7A `d  ac  H 7ŀA  ace  8 pf  H :A |dyA$<8%|  @ aH !`   }  88 8 H 7AA `d  ac  H 7UA 8aH 6A ,  A TaH `   }  88 8 HH 6A `d  ac  H 7A ;  @,  AdH ,,   @aH u`   }  8	8 8 IH 6A `d  ac  H 6A ;  @,  AH 8aH `   H b p8 D8 Hc  aH 9A |dyA (8aH `   ;  @,  AH P  8 paT e   8 H 9UA |dyA (8؀aH u`   ;  @,  ATH aH q`   }  8$8 8 H 5A `d  ac  H 5A b  ,   @ PaH )`   }  88 8 ;H 5IA `d  aH 5aA 8!a}8` N  b  ,  @ X,  8    d  @ ,a  H 8YA 8 aH 1`   H  ( a  H 81A 8 aH 1}`   ,  @a88f  H 7A |dyA (8aH `   ;  @,  AH   ,  @ 488aH 3`    8 @a8f  H 7A H 8 8a8 H 7YA ,  A8 8aH 2`   8a8 :H <QA `d  8aH 8E`   8 d8aH 85`    8 @a8f  H 7A H    ,  @ 48aH 2Y`    8 @a8f  H 6A H  `8 8aH 2)`   8 h8aH 7`   8aH 7`   8 l8aH 7`    8 @a8f  H 6A |dyA H8aH `   8 H8aH 1`   8a8 LH 1`   ;  @,  A`H  < a pe  8 8H 6A |dyA (8|aH 1`   ;  @,  AH  c   H,   @ B;! `8a P8  8  H :`    pa DWe 6 |c* T|| @z  a \8 PH 5}A |dya8TA H `   ;  H;{ ,  8a P|  8  8  LD@ @,  A Xd c ,  A ,aH 5A |dyA 48 aH 5`   H  8 8 aH `   8` H 8aH .)`   ,  @88aH 0`   8 p8aH 5`   c  H 1ŀA <; |@@ \  (  @A P;|cz  ;|  8a8 cd  H 2`   ; |@8a8 @  cz  ;{ cd  (  @@8 8aH 5`   8 t8aH 5`   8 x8aH ,UA ,  @ TaH A`   }  8 8 8 #H 0aA `d  a8H 0uA 8` 8!!}H  x8daH 0MA aH .A 8a8H 8A ,  @ 0}  88 8 7H /A `d  a8H /A c  8!!}N         A       	 create_principal  A| P} &;    !a;   @;   8 ;8aH .!`   8a tc  H .`   8 8a H .`   8a8 H -`   b8 cc  H -`   `{  B8 cC  H -`   `z  8 8v H -`   8a 8  8 X  H 7`   8P8XH .A ,  A `aH e`   b \8H8 8 1c  H .A `d  8aH .A 8!}8` AN  l,   @ `aH `   b \8d8 8 8c  H .A `d  8aH .-A 8!}8` AN  aH `   ,  A $8!}8` AN  aH `   ,  @Ѐ8a Dd  H 0A |dyA 48,aH `   8!}8` AN  a D88 He  H 0A |dyA H8aH `   a Dxd  H 0A 8!}8` AN  8 @ }   " \M  |  H  A 8 8 	H  y  8 88 H ,A `d  8v H 5UA 8a P8 H +Y`   8v 8 PH `   a L|dyy  8 
8\@ 08 H ,UA `d  8w  H ,mA 8 8 	@ H   8a H *`   M  8 8 	@ 8Ѐy  H ,	A `d  8v H 4A 8a P8 H *`   8v 8 PH !`   a L|dyy  8 8$@ $8 H +A `d  8w  H +̀A H  8a tH *e`   M  @ y  8 88 KA Hb = 4 8V `  c  9! @ 8 8a 8 t8 9WH .A |dyA 8aH `   aH `   y  88 8 FH *A `d  aH +A a Dxd  H .EA 8a t8  8 @H 3`   8a L8  8 H 2`   8` 8!|} } } N  8a L8  8 H 2`   8  8a tH )-`   b    ,  @ Ha @8 8 Xf  H -A ,  @ $8    a @d  8 XH -uA 8 X8H %A |ty@ @aH `   y  88 8 #H )ŀA `d  8(aH )ـA ;  b  H )A ,  @,  @8 $cc  H (Q`   `{  cC  8 (H (=`   `z  8a8 b  H )̀A ,  8aA0H )A ;~cc  8 ,H '`   `{  |@@ h|  H *A ,  :cc  :b  8 @ @H *`   ; |@@ ,u H )ŀA ,  b  cc  : b  8 Aț  cc  8 0H %u`   ,  cc  8 \A ,H ,`    Hcc  H ,`   cc  8 `H ,`   8a8 b  H (рA ,  8aA H (A ;~cC  8 4H &`   `z  |@@ h|  H )A ,  :cC  :b  8 @ @H )!`   ; |@@ ,u H (ɀA ,  b  cC  : b  8 Aț  8 8cc  H $y`   ,  cC  8 <A @H $a`   ,   D @ Hace  cF  A K|xyA P;  H  HaH `   y  8 8 G8$H '9A `d  a8\H 'MA ;  H  ; b  H ']A ,  ,  LFA ,  @ 8 $cc  Kdb  H %}A a D He  H *9A a Dxd  H *%A c  8!|} } } AN         C       	 read_principals   a| P} &`~    !`  ;`  D8a @8 H $`   ; . 8a @@   H *y`   ; | 8a @A, 8a @8 |A @ H "`   ,  A ЀaDH `    \88 8 }  H %A  ``d  aD8 @  H %A aDH M`   }  88 8 H %mA `d  aD8 @H %A ̀}  88 8 H %=A `d  8~  8 @H %QA 8` dh8!`|} aN  8 8a @H !`   ,   \8@~  8 8 @  H $рA `d  8}  H $A ;` aDH 
y`   ~  8,8 8 H $A  ``d  aD8 @  H $A cc  dh8!`|} aN         C        	ParseArgs      TA   L |	N               XA   L |	N               dA   L |	N              | !P a 8`  H =A  t8 DH UA |ya 8  @    8! 8`  }N  H IA 8a @H eA 8a @8 H }A 8a @8 H mA 8`  8 @8 HH A  ; P8 PH A |8a p8 d|a H `   ,   |8 8 pT p@  | H  A a  H  ـA  a c  H  A ,, 
; @;LFA 0@ ~ ; a H  A ,, 
@LF@8   8` 
   H  A  8 8 PH  )A 8` 8 H8  H }A a H  A b  8! }N         A        get_info  |AȐ  t ! ;  a8 c  H  q`   `~   c  c  H  Y`   `|  8a 8 H  E`   8 8aH  5`   88 @H !-A ,  @ (88aH  `   8 88aH A H  <8@8 @H  A ,  @8d8aH `   8 88aH A ,  @ TaH b \88 8 #c  H  ŀA `d  a8H  ـA 8! }8` N  a;`  ;@  ;   ;   H  ̀A ,  @\:8a8 H  ՀA H  @<8a8 H  A , 8a@H  ̀A ~w8a8 H `   8a8 /H  рA ,  : |@Ac @ hH  ـA ,  :b  :  8ab  8 @ @H  `   : |@@ ,t H  A ,  b  8a: b  8 Aț  :8 8a H E`   |@@ hw  H  QA ,  :8a :b  8 @ @H  m`   : |@@ ,t H  A ,  b  8a : b  8 Aț  8a 8 @H ̀A ,  8a8 t8 @ `H "%A ,  8 c  @ H `   `~  ;@ 8a8 8 H !A ,  8 c  @ H ]`   `|  ;  , , LB1A ;  8a8 <8 H !A ,  8a8 l8 A H !A ,  @ ;` aH yA ,  ,  A8 c  H `   ,  @ TaH b \88 8 4c  H A `d  8 aH A 8` 8! A}H 8 c  H u`   ,  @ aH Yb \88 8 4c  H yA `d  8aH A 8` 8! A}H  aH 	b \8|8 8 9c  H )A `d  a88H 9A 8` H  \aH ŀb \88 8 5c  H A `d  8a8H A 8! }8` N  8`  8! A}N         A       4 find_linux_libkrb5| !a H L PH  8 @a Le  H A |y \ t8 ~  8 /8A l8H A `d  a H P LH !A ~  8
48 8 H A 8`d  a Hc  H A  h8! `}H  88 "H A  @`d  a H PH A  h8! `}N         A         
LogInfoMsg| !a H L PH  8 @a Le  H A |y \ t8 ~  8 8	$A l8	H A `d  a H P LH 	A ~  8
8 8 H ɀA 8`d  a Hc  H ـA  h8! `}H  88 "H A  @`d  a H PH A  h8! `}N         A         LogErrorMsg   | !a H8a @H ŀA 8a @H A  t8 a H8 |H %A b \8 \8 8 c  H A  h`d  a H  H A  X8! P}N         A         LogDateTime   | ! ta 8a @;  8H 5`   8 8H -A ,  b 8	x@ H `   a < 8 H A ,  a 8@ a KՀb \8
8 8 c  H A aH A   a  H A (8! }8` N  a Kub \808 8 4c  H A `d  a 8 @H A (8! }8` N  H A  ,  8e  a @ Xa Kb \88 8 c  H %A 8`d  a  H 5A (8! }8` N  H 1A  ,  8Đe  a @ Xa Kb \88 8 c  H A 8$`d  a  H A (8! }8` N  H A  ,  8le  a @ Xa Kb \8D8 8 c  H =A 8`d  a  H MA (8! }8` N  H IA  ,  8 e  a @ Xa Kb \8|8 8 c  H ɀA 8`d  a  H ـA (8! }8` N  H ՀA  ,  8  d  8\  a A 8    H A ,  8e  a @   H yA ,  8e  a @   H UA ,  8̐e  a @ Xa Kb \88 8 c  H ՀA 8`d  a  H A 8` (8! }H  H A ,  d  a @ TKIb \88 8 c  H iA 8`d  a  H yA 8` (8! }H  8`  (8! }N         A       p secLoadKRB5AdminLib   | ! ta 8a @8<H `   8 8}TH A ,  @ b 8H u`   a < 8 H A ,  @ a KEb \8
8 8 c  H eA a H uA   a   H iA (8! 8` }N  a Kb \8T8 8 4c  H A `d  a 8 @H A (8! 8` }N  8paH A ,  d  @ Xa Kub \88 8 c  H A 8`d  a  H A (8! 8` }N  8aH A  ,  d  @ Xa Kb \8<8 8 c  H !A 8 `d  a  H 1A (8! 8` }N  8daH %A $8e  aH A (8e  aH A ,8  aH ݀A 08 Аe  aH ŀA 48~  aH A   8 aH A ~  8 aH A ~  8aH qA 8,  d  @ Xa Kـb \8t8 8 c  H A 8`d  a  H 	A 8` (8! }N  80aH A <,  d  @ Xa Keb \88 8 c  H A 8@`d  a  H A 8` (8! }N  8laH A @,  d  @ Xa Kb \88 8 c  H A 8`d  a  H !A 8` (8! }N  8aH A D,  d  @ Xa K}b \88 8 c  H A 8`d  a  H A 8` (8! }N  8PaH A H,  d  @ Xa K	b \8T8 8 c  H )A 8``d  a  H 9A 8` (8! }N  8 aH -A L8pe  aH A P8$e  aH A T88  aH A   8aH рA X,  d  @ Xa K9b \88 8 c  H YA 8`d  a  H iA 8` (8! }N  8aH ]A \,  d  @ Xa Kŀb \88 8 c  H A 8`d  a  H A 8` (8! }N  8LaH A `80e  aH рA d8e  aH A h8	Le  aH A l8Le  aH A p,  d  @ Xa Kb \88 8 c  H A 8h`d  a  H !A 8` (8! }N  8aH A t,  d  @ Xa K}b \848 8 c  H A 8`d  a  H A 8` (8! }N  8aH A x,  d  @ Xa K	b \8l8 8 c  H )A 8`d  a  H 9A 8` (8! }N  8aH -A |,  d  @ Xa Kb \88 8 c  H A 8`d  a  H ŀA 8` (8! }N  8aH A ,  d  @ Xa K!b \88 8 c  H AA 8`d  a  H QA 8` (8! }N  84aH EA ,  d  @ Xa Kb \88 8 c  H ̀A 8P`d  a  H ݀A 8` (8! }N  8aH рA ,  d  @ Xa K9b \8L8 8 c  H YA 8`d  a  H iA 8` (8! }N  8aH ]A ,  d  @ Xa Kŀb \88 8 c  H 
A 84`d  a  H 
A 8` (8! }N  8 aH A ,  d  @ Xa KQb \88 8 c  H 
qA 8L`d  a  H 
A 8` (8! }N  8aH uA ,  d  @ Xa K݀b \88 8 c  H 	A 8`d  a  H 
A 8` (8! }N  8`aH A ,  d  @ Xa Kib \8,8 8 c  H 	A 8t`d  a  H 	A 8` (8! }N  8aH A ,  d  @ Xa Kb \8d8 8 c  H 	A 8`d  a  H 	%A 8` (8! }N  8|aH A ,  d  A b8    84aH A  ,  d  @ Xa KUb \88 8 c  H uA 8H`d  a  H A 8` (8! }N  8`  (8! }N         A        secLoadKRB5Lib|! !  ta`  ;  8a 8  H `   ;8 $8aH `   c  H YA   ~|@c  (  /|iA H; @  B@ ,H  A 0;  (  /|@B A ;  |@(  /@ ;>8a 8  8 @ H m`    8a 8 @(  /@ dH `   8 @8a H A ,  8a A @H A `z  88a8 H `   8a8H A ,  A H; |@8 8a 8 Ap8`  8!!}H  8!!}N  aKAb \8
d8 8  c  H aA `d  a8H uA 8` K       A        	checkpath | !0`  ;  8` [H A  t8a 8 H `   8a H 
I`   8 L8a H 
9`   8 ,8a H 
)`   8 8aH y`   8aH 
	`   8 T8aH 	`   8 (8aH 	`   8 @8a H AA  \< 8,  |  8a 8LDBA H UA ,  8 08a @ pH  A   ,  @ 8` 8!л}N  K  b \8	8 c  8 H ݀A `d  c  8H A 8` H  (8a 8 4H  yA   ,  @ ; c  8!л}N         A        SetupLog   pA   L |	N               xA   L |	N               |A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                                      b  8  q A ||+|"*A H|8@@@@ |A L  H  p|+|*A $0  |8@@@|+@ P@ D|*@|,     T A |0|0|8@H  |8@|0}0@@@ L  A A 8`N  8` N  8`  N  8c8  ,  |0@A  @  ,  |0@KA A 8`N  8`  N  8` N        @       strcmp A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                      b  8   q A (||"+|*M  |+|*0   @N  p =@!k 9J}i|exA    ,    8 M  8 B   0|P8})P},P@ 4  }	P8})P},P@ ,  |P8})P},PA})8})PyAH  })@})PyA}Cx8 t T@> @N        @        strcpy A   L |	N               A   L |	N               A   L |	N               A   L |	N               ĐA   L |	N               ȐA   L |	N               ̐A   L |	N               АA   L |	N                                      b  8  q A ||+A |+0  @|0| 8 |4@ |"+|*8 0  @N  4 A $||"+|*M  | 8   |)N  |N  T`, /  |fxA 80A A  ,  A ` ,  A T ,  A H0 }@Py=`01k@ & }*X8}JX}@XK}JH}JXyA}L 4U|`/  T, /  |M  00A HA A , ,   M  B@ $ ,	  & M  B@ D ,
  F M  B@ x  $ D ,  ,  /	  /   M  B@ L M  B@ @& M  B@ 4F M  B@ (  $ D ,  ,  /	  /  K8    N        @        strncat    ԐA   L |	N                A |	K k N      @        _ptrgl ܐA   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                  b  8   q A H||+A |+0   @|0| 8  ||"+|*8  0   @N  pk =@!k 9J}i8  A   ,  A P8 B 8 }	P8})P},P@  }	P8})P},PA})@})PyA}+ 4Uk|Xp !k }iA    ,    8 M  8 B 耤  0|P8})P},P@ 4  }	P8})P},P@ ,  |P8})P},PA})(})PyAH  })@})PyA}Cx8 t T@> @N        @      x strcat                b  8 q 8 A ||0  4@ T|+|*@0 || |(8 |8  9   4@ |*0  K0 ||*N  0 ||+|*AN  /  T, /  |M  00A HA A , ,   N@  A  ,   N@  A $ ,	  % N@  A    $ ,  ,  /  /   N@  A L N@  A L N@  A L% N@  A L   $ ,  ,  /  /  K B N   B N   B N  % B N        @       strncpy   A   L |	N              A   L |	N              A   L |	N                              H 
      @        memsetA   L |	N              A   L |	N              АA   L |	N              ԐA   L |	N                  @(#)23  1.4  src/bos/usr/ccs/lib/libpthreads/init.c, libpth, bos520 8/19/99 12:20:14    @(#)61	1.14  src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos520 7/11/00 12:04:14     /  /t                                                                                            r   @           :       /       w   -h      -h     QUIET   WRFILE  WRFILE  WRFILE  NOQUIET default default .keytab csmKRB5.cat     kadmin/admin    krb5_kt_close   defaultkeytable krb5_kt_resolve defaultkeytable krb5_init_context   krb5_init_context   krb5_kt_add_entry   add_KRB5principals  kadm5_get_principal krb5_kt_default_name    krb5_get_default_realm  kadm5_create_principal  kadm5_modify_principal  kadm5_randkey_principal kadm5_init_with_password    %1$s principal created.
    Usage: add_KRB5principals [-h] 
    2657-035 The %1$s file is empty.
   /var/ct/IW/sec/krb5/csm/k5keytabs   The %1$s principal already exists.
 Enter the KRB5 administrator password:  2657-014 Could not  open file = %1$s.
  2657-014 Could not  open file = %1$s.
  2657-028 The %1$s file does not exist.
 Creating %1$s principal with no policy.
    Enter the KRB5 administrator principal name:    Creating %1$s principal with default policy.
   2657-001 This command invoked as : %1$s %2$s 
  2657-001 This command invoked as : %1$s %2$s 
  Please enter a valid KRB5 administrator name:
  2657-005 %1$s exiting with return code = %2$d.
 2657-002 Not valid argument : %1$s was entered.
    2657-002 Not valid argument : %1$s was entered.
    Please enter a valid KRB5 administrator password:
  /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp 2657-034 chmod command on file %1$s did not succeed.
   2657-049 %1$s The principal name or password may not be correct.
   2657-038 Could not establish a writable operations routine for krb5_kt_add function.
   The key for the Management Server is stored in the default keytab as defined in krb5.conf.
 @(#)41   1.12   src/csm/krb5/api/add_KRB5principals.c, setup, csm_rveg, rvegs002a 5/21/04 11:59:09  2657-050 The contents of the %1$s file are not in the correct format. Run csmconfig -K with your option to regenerate the file.
    2657-051 The keytab file %1$s for the %2$s principal is missing. You must delete the principal from the KRB5 database and run definenode or csmconfig -K with your option to recreate the principal and keytab file.
   2657-052 The keytab file %1$s for the %2$s principal is empty. You must remove the empty keytab file, delete the principal from the KRB5 database and run definenode or csmconfig -K with your option to recreate the principal and keytab file.
   
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

                                                      a   a   r   #       r+    'L.log    .bak    %1$d    QUIET   [libs]  libkrb5 %15.15s     libkrb5*    hdb_kt_ops  libkadm5clnt    /var/log/csm/   /var/log/csm/   krb5_kt_close   krb5_kt_close   krb5_kt_close   krb5_cc_close   krb5_kt_resolve krb5_kt_resolve krb5_parse_name krb5_parse_name krb5_cc_resolve krb5_cc_resolve krb5_cc_destroy krb5_cc_default krb5_cc_default krb5_kt_default krb5_kt_default libkrb5admclnt* krb5_svc_get_msg    krb5_svc_get_msg    krb5_free_string    krb5_free_string    krb5_kt_register    krb5_svc_get_msg    krb5_svc_get_msg    kadm5_get_policy    krb5_init_context   krb5_init_context   krb5_kt_get_entry   krb5_kt_get_entry   krb5_free_context   krb5_free_context   krb5_kt_add_entry   krb5_kt_add_entry   krb5_kt_next_entry  krb5_cc_store_cred  krb5_cc_store_cred  krb5_cc_initialize  krb5_kt_free_entry  krb5_kt_free_entry  krb5_kt_end_seq_get krb5_free_principal krb5_free_principal kadm5_get_principal kadm5_get_principal krb5_cc_default_name    krb5_cc_default_name    krb5_kt_default_name    krb5_kt_default_name    krb5_kt_default_name    krb5_kt_start_seq_get   krb5_ktf_writable_ops   kadm5_free_policy_ent   krb5_get_default_realm  krb5_get_default_realm  kadm5_create_principal  kadm5_create_principal  kadm5_modify_principal  kadm5_modify_principal  /usr/krb5/lib/libkrb5.a /usr/krb5/lib/libkrb5.a krb5_sname_to_principal krb5_sname_to_principal krb5_free_cred_contents krb5_free_cred_contents kadm5_randkey_principal kadm5_randkey_principal krb5_build_principal_ext    krb5_build_principal_ext    krb5_kt_read_service_key    krb5_kt_read_service_key    kadm5_init_with_password    kadm5_init_with_password    kadm5_free_principal_ent    kadm5_free_principal_ent    /etc/opt/csm/csmkrb5.conf   /etc/opt/csm/csmkrb5.conf   /etc/opt/csm/csmkrb5.conf   krb5_get_init_creds_keytab  krb5_get_in_tkt_with_keytab krb5_get_in_tkt_with_keytab krb5_free_keyblock_contents krb5_free_keyblock_contents krb5_get_init_creds_opt_init    /usr/krb5/lib/libkadm5clnt.a    /usr/krb5/lib/libkadm5clnt.a    /usr/lib/libkrb5.a(libkrb5.a.so)    /etc/opt/csm/csmkrb5.conf.default   /etc/opt/csm/csmkrb5.conf.default   /etc/opt/csm/csmkrb5.conf.default   2657-014 Could not open file = %1$s.
   2657-026 Call to %1$s returned: %2$i.
  2657-024  Call to %1$s returned: %2$s
  2657-013  Call to %1$s had error: %2$s
 krb5_get_init_creds_opt_set_default_flags   /usr/lib/libkadm5clnt.a(libkadm5clnt.a.so)  2657-004 Could not create backup log: %1$s 
    2657-007 Call to %1$s had error return: %2$i.
  2657-007 Call to %1$s had error return: %2$i.
  2657-007 Call to %1$s had error return: %2$d.
  2657-011 Could not create the directory: %1$s 
 2657-009 Error on dlopen of library: %1$s errno=%2$d 
  2657-009 Error on dlopen of library: %1$s errno=%2$d 
  2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 @(#)48   1.11   src/csm/krb5/api/k5utils.c, setup, csm_rveg, rveg0414a 3/25/04 13:01:16 2657-036 The file %1$s line $2$s has syntax error. Full path to library is not provided. 
  2657-032 The %1$s  and the %2$s configuration files do not exist. Cannot determine the path to the KRB5 api libraries. 
    2657-031 Could not find the %1$s shared library.For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library. 
 2657-031 Could not find the %1$s shared library.For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library. 
 2657-031 Could not find the %1$s shared library. For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library.
 2657-031 Could not find the %1$s shared library. For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library.  
   
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

   (  /   /       /              /h                              1X                      4          @          1\  1`      1d  1h      (                                      1p              5p  7p                                      9p                      9t  9x  9|  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  :   :  :  :  :  :  :  :  :   :$              :(  ?(  ?,          ?0  C0                  .   w   b     
     
f           @       errno         @       chmod         @
       mkdir         @
       rename        @
                    @
       umask         @
                    @       _iob          @       _Errno        @
       exit          @
       strlen        @
       fopen         @
       strchr        @
       fprintf       @
       catopen       @
       catgets       @
              4      @
              B      @
       fclose        @
       sprintf       @
       strncmp       @
       strrchr       @
       fputc         @
       fgets         @
       isspace       @
       getpid        @
       fgetc         @
       stat          @
       fputs         @
       ctime         @
       time          @
              N      @
       setbuf        @
              Z      @
              f      @
       dlopen        @
       dlsym         @
       ctermid       @
       feof          @
              r      @
       __crt0v       @                    @                    @                    @
       __start   /` !
          4       8              p       /`        /d       /h        /l       /t        /x       /       /       /   ,    /   .    /   /    /       /   -    /       /       /   +    /       /       /   #    /       /       /       /       /       /       /   )    /       /       /   $    0        0       0       0   %    0   
    0   &    0        0       0        0$       0(       0,       00       04       08       0<       0@   *    0D       0H       0L       0P       0T       0X       0\   "    0`   !    0d   '    0h       0l   (    0p       0t       0x       0|       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       1        1       1       1       1       1       1       1       1        1$       1(   	    1,       10       14       18       1<       1@       1D       1H       1L       1P       1T     /usr/lib:/lib:/usr/ibmcxx/lib    libc_r.a shr.o  libpthread.a shr_comm.o  libpthread.a shr_xpg5.o  
___memset  sigprocmask  _system_configuration  sigemptyset  
sigaddset  
setlocale  
tcgetattr  
tcsetattr  __mod_init  __malloc_user_defined_name  __pthread_trace  pthread_init   *   ^ >  @ B  B J   ` `  P n   l p  (    p   f   D   F   -    
  V    h :  X ^  Z   \   ^    j 
   b    Z   f b   d    n    r   2   7    x    z    < 
   ~        `   |  A   F   K    r ,   <   P   d   n      !      "   $ &   x @   X  A l  F       "   !      A   F       "   !    0  A D  F T  P h     A   F      A   F    &   ֏ <  ! T   r   ď   !         A   F    Ώ 	   	(  A 	8  F 	Z  & 	n   	   	  ! 	   	   ʏ 	  ! 	   	   	  ! 
    
0   
:   ڏ 
L  ! 
d  U 
|   
  Z 
   
   
   ڏ 
  ! 
   
   ڏ   !    (   8   H   R   ڏ d  ! |            Ə   !       ,   h  !      !           0   @   L  _            d      A $  F L  F X  K h  i   A   F    r     0   @   P   Z  , d   r  . |     "      &      P       x   A   F <   F   x X  A l  F           ؏   !     .    8  ! P   ^   d  !    x   0   A   n         A ,  F H   h  A x  n         A   F    
   ȏ @  ! X   d   |  A   F      !               $ "   ̏ 6   Џ H  ! ^   ҏ p  !   d      A   F   s         x 0  _ H   `  }      }               x ,  _ D   \  }      }           8  A L  F d  s   K   
   !      ! "   r L   h            x   A    z   F      A   F "  0 4  A H  F x      x   0   A   F      A    z   F B   t j   v    |          d   ș $   4   D   X   l  ͙      ҙ              4   H  ҙ \   h  K r                              P 4   D  d X  P p     d    x   A   F   s   x 0  x D  _ X   h     }      }      } 4   L  } |  P   U      U       U  0  U  H  s  d    ~   x    A    F         x    A !  F !6   x !H  A !`  F !z   x !  A !  F "&    "4  ! "B   x "F    "`  A "x  F "  A "  F "  A "  F #>    #L  ! #Z   x #^    #x  A #  F #  A #  F #  A #  F $P  Ù $\   $f    $t  F $~   x $  A $   ~ $  F $    %   %  P %*    %4   %H  י %j   x %|  A %   %  F %   x %  A %  F &  ܙ &    &:   x &L  A &d  F &  ܙ &   ď &   x &  A &  F &  ܙ '   Ə '"   x '4  A 'L  F 'l  ܙ 'v   ȏ '   x '  A '  F '  ܙ '   ʏ '   ̏ (   Ώ (  ܙ ("   Џ (<  ܙ (F   ҏ (`  ܙ (j   ԏ (   x (  A (  F (  ܙ (   ֏ (   x )  A )   F )    )   )  P )    )   )  י )   x *  A *   *0  F *Z   x *l  A *  F *  ܙ *   ؏ *   x *  A *  F +  ܙ +&   ڏ +>   x +P  A +h  F +  ܙ +   ܏ +  ܙ +   ޏ +  ܙ +    +  ܙ +    +  ܙ +    ,  ܙ ,  ܙ ,0  ܙ ,D  ܙ ,N    ,f   x ,x  A ,  F ,  ܙ ,    ,   x ,  A -  F -,  ܙ -6    -N   x -`  A -x  F -  ܙ -    -   x -  A -  F .  ܙ .    .6   x .H  A .`  F .  ܙ .    .  ܙ .    .  ܙ .    .  ܙ .  ܙ .    /   x /  A /0  F /X  ܙ /b    /z   x /  A /  F /  ܙ /    /  ܙ /    /  ܙ 0    0  ܙ 0    0,  ܙ 06   0N   x 0`  A 0x  F 0  ܙ 0   0   x 0  A 0  F 1  ܙ 1   16   x 1H  A 1`  F 1  ܙ 1   1   x 1  A 1  F 1  ܙ 2  
 2   x 20  A 2H  F 2p  ܙ 2z   2   x 2  A 2  F 2  ܙ 2   3   x 3  A 30  F 3X  ܙ 3b   3z   x 3  A 3  F 3  ܙ 3   3   x 4   A 4  F 4@  ܙ 4J   4b   x 4t  A 4  F 4  ܙ 4   4   x 4  A 5   F 5(  ܙ 52   5J   x 5\  A 5t  F 5  ܙ 5   5   Ώ 5  ܙ 5    5   x 5  A 6  F 6    6   6   6  _ 74   7P   7`  P 7t  _ 7   7   7   x 8  A 8$  F 8t   8~    8   8   8   8   8   8   8   8   9  P 94   9L  d 9   x 9  A 9  F 9  d :    ::    :b    :    :    :    ;    ;@    ;B    <r    <    <    <    =    =@    =B    >J    >r    >    >    >    ?    ?:    ?b    ?    ?    A    A    B    B>    Bf    B    B    B    B    D    D    F:   Fb   F    F    F    F  ( G  * G.  2 GV  4  4  @   8  T     n   p     /`  8   /d   \   /h     /l   \   /t  P   /x   \   /     /  H   /   X   /       /      /     /   Z   /  R   /  >   /   V   /      /  n   /   F   /   $   /  r   /  t   /   :   /  v   /  x   /   R   /     /      /   H   0    (   0   *   0      0   J   0      0   L   0   @   0  
   0    <   0$   4   0(   ,   0,     00     04   >   08   &   0<   "   0@   T   0D   6   0H      0L   2   0P   8   0T   0   0X     0\   D   0`   B   0d   N   0h      0l   P   0p  ~   0t     0x     0|     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0  z   0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1      1     1     1     1     1     1     1     1      1$      1(      1,      10  p   14  |   18     1<       1@   
   1D     1H     1L      1P   .   1T                                                              
             !                              +                       errno                            chmod                      
      mkdir                      
      rename                     
             6                   
      umask                      
             B                         _iob                             _Errno                     
      exit                       
      strlen                     
      fopen                      
      strchr                     
      fprintf                    
      catopen                    
      catgets                    
             X                   
             d                   
      fclose                     
      sprintf                    
      strncmp                    
      strrchr                    
      fputc                      
      fgets                      
      isspace                    
      getpid                     
      fgetc                      
      stat                       
      fputs                      
      ctime                      
      time                       
             n                   
      setbuf                     
             x                   
                                
      dlopen                     
      dlsym                      
      ctermid                    
      feof                       
                                
      __crt0v                                                          TOC       /   k                         /   k               __crt0v   /   k                        /   k                        /   k               _$STATIC  /   k                        /   k               _$STATIC  /   k                        /   k                        /   k               errno     /   k               _$STATIC  /   k                      n  /   k               catopen   /   k               catfd     /   k               progname  /   k               getpid    /   k               pid       /   k                        /   k               ctermid   /   k               _$STATIC  /   k               fopen     /   k               setbuf    /   k                      X  0    k                      d  0   k                      6  0   k                      x  0   k                      B  0   k                        0   k               fputs     0   k                        0   k               fgetc     0    k               fputc     0$   k               fclose    0(   k                        0,   k                        00   k               stat      04   k               catgets   08   k               fprintf   0<   k               feof      0@   k               fgets     0D   k               strlen    0H   k               strrchr   0L   k               isspace   0P   k               strncmp   0T   k                       0X   k               time      0\   k               ctime     0`   k               dlopen    0d   k               _Errno    0h   k               dlsym     0l   k                       0p   k                     0  0t   k                     I  0x   k                     _  0|   k                     z  0   k               policy    0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                     1  0   k                     F  0   k                     Z  0   k                     p  0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                     )  0   k                     C  0   k                     Z  0   k                     o  0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                     1  1    k                     D  1   k                     _  1   k                     q  1   k                       1   k                       1   k                       1   k                       1   k                       1    k               mkdir     1$   k               umask     1(   k               rename    1,   k                        10   k                       14   k                       18   k               strchr    1<   k               chmod     1@   k                       1D   k               keyname   1H   k               _iob      1L   k               sprintf   1P   k               exit      1T   k                        7g       '  Jg .__start (   k                .__start (     8             __start   /`            
               4   k               p_xargc   /                  p_xargv   /                  p_xrcfg   /                  p_xrc     /                           1X                  .file     ` g      2                q                                    k                           N             _$STATIC     k   Z                    /t            
              /                          /                          /                          /                          /                  .file      g      1                f                                    k               .main         d                         d                         d                         d             _$STATIC  @   k                       :(   k               catfd     1\                  progname  1`                  pid       1d                           1h                          9                          ?(                          9t                          9                        0  9x                          9                          ?,                          :                          :$                        z  9                        q  :                          9                        I  9|                          :                          ?0                  keyname   C0                          9                          9                          9                        _  9                  policy    9                          9                          9                        1  :                           7p                           5p                          9                          :                           :                          9                          9                        o  9                        Z  9                        C  9                        D  :                          9p                          :                           9                          9                          9                        )  9                          9                          9                          9                          9                          9                        _  :                        p  9                        F  9                        1  9                        Z  9                          9                  .file      g                                                          k   X                                      _$STATIC     k   U                    /h            
              /                  .file      g      0                Z                                    k  X                   t                         ~                          "                         #                         $8                         $                         )                         6p                         8T                  _$STATIC  (   k  7                     1p   k               strcat.s  g .strcat  B           )       strcpy.s  g .strcpy  =@           )       strcmp.s  g .strcmp  ;@     0      )               g .strncat ?           )               g .strncpy D           )       memset.s  g .memset  F            )       ptrgl.s   %g ._ptrgl  A   k   0             ._ptrgl  A                  .$PTRGL  A                  glink.s   *g           k   (                        &            glink.s   /g .exit    GT   k   (            .exit    GT     +            glink.s   4g        @   k   (                   @     0            glink.s   9g .catopen h   k   (            .catopen h     5            glink.s   >g .getpid     k   (            .getpid       :            glink.s   Cg .catgets >p   k   (            .catgets >p     ?            glink.s   Hg .fprintf >   k   (            .fprintf >     D            glink.s   Mg .fclose  =   k   (            .fclose  =     I            glink.s   Rg .stat    >H   k   (            .stat    >H     N            glink.s   Wg .strncmp A   k   (            .strncmp A     S            glink.s   \g .strchr  F   k   (            .strchr  F     X            glink.s   ag .strlen  ?   k   (            .strlen  ?     ]            glink.s   fg .fopen   :8   k   (            .fopen   :8     b            glink.s   kg .chmod   G   k   (            .chmod   G     g            glink.s   pg .sprintf G,   k   (            .sprintf G,     l            glink.s   ug .feof    >   k   (            .feof    >     q            glink.s   zg .fgets   >   k   (            .fgets   >     v            glink.s   g .isspace ?`   k   (            .isspace ?`     {            glink.s   g        `   k   (                   `                 glink.s   g .mkdir   F8   k   (            .mkdir   F8                 glink.s   g .rename  F   k   (            .rename  F                 glink.s   g       + :   k   (                  + :                 glink.s   g .umask   F`   k   (            .umask   F`                 glink.s   g ._Errno  B   k   (            ._Errno  B                 glink.s   g       8 :   k   (                  8 :                 glink.s   g       E :   k   (                  E :                 glink.s   g .strrchr ?8   k   (            .strrchr ?8                 glink.s   g .fputc   <   k   (            .fputc   <                 glink.s   g .fgetc   <   k   (            .fgetc   <                 glink.s   g .fputs   <   k   (            .fputs   <                 glink.s   g .ctime   B<   k   (            .ctime   B<                 glink.s   g .time    B   k   (            .time    B                 glink.s   g .setbuf  :`   k   (            .setbuf  :`                 glink.s   g       P ;    k   (                  P ;                  glink.s   g       [ <p   k   (                  [ <p                 glink.s   g .dlopen  Bd   k   (            .dlopen  Bd                 glink.s   g .dlsym   B   k   (            .dlsym   B                 glink.s g .ctermid :   k   (            .ctermid :                   f__pthread_trace pthread_init ___memset .___memset sigprocmask _system_configuration sigemptyset sigaddset setlocale tcgetattr tcsetattr __mod_init __malloc_user_defined_name __C_runtime_pstartup crt0_data logfileptr _$STATIC_BSS krb5libname krb5admlibname krb5_svc_get_msg_p kadm5_create_principal_p kadm5_modify_principal_p kadm5_get_principal_p kadm5_init_with_password_p hdb_kt_ops_p writableops kadm5_get_policy_p kadm5_free_policy_ent_p kadm5_free_principal_ent_p kadm5_randkey_principal_p krb5_init_context_p krb5_kt_resolve_p krb5_kt_start_seq_get_p krb5_kt_next_entry_p krb5_kt_get_entry_p krb5_kt_end_seq_get_p krb5_kt_close_p krb5_get_default_realm_p krb5_parse_name_p krb5_sname_to_principal_p krb5_build_principal_ext_p krb5_cc_resolve_p krb5_cc_close_p krb5_cc_destroy_p krb5_cc_store_cred_p krb5_free_cred_contents_p krb5_cc_default_name_p krb5_cc_initialize_p krb5_get_init_creds_keytab_p krb5_get_init_creds_opt_init_p krb5_get_init_creds_opt_set_default_flags_p krb5_get_in_tkt_with_keytab_p krb5_free_principal_p krb5_free_context_p krb5_cc_default_p krb5_free_string_p krb5_kt_read_service_key_p krb5_kt_default_p krb5_kt_default_name_p krb5_kt_register_p krb5_kt_add_entry_p krb5_kt_free_entry_p krb5_free_keyblock_contents_p krb5_ktf_writable_ops_p defaultpolicyexists registered principalname crt0main.s ../../../../../../../src/bos/usr/ccs/lib/libc/__threads_init.c Sun Sep 15 15:10:49 2002  C for AIX Compiler Version 5.0.1.0 ---  .__threads_init _malloc_user_defined_name _bsd_init_routine _xti_tli_init_routine _nsl_init_routine __dce_compat_init_routine ../../../../../src/csm/krb5/api/add_KRB5principals.c Tue Jun 15 16:55:06 2004  .create_principal .read_principals .ParseArgs ../../../../../../../../src/bos/usr/ccs/lib/libpthreads/init.c Sun Sep 15 16:25:03 2002  .call_pthread_init _pthread_init_routine ../../../../../src/csm/krb5/api/k5utils.c Tue Jun 15 16:18:37 2004  .get_info .find_linux_libkrb5 .LogInfoMsg .LogErrorMsg .LogDateTime .secLoadKRB5AdminLib .secLoadKRB5Lib .checkpath .SetupLog strncat.s strncpy.s .__mod_init .setlocale .pthread_init .sigprocmask .sigemptyset .sigaddset .tcgetattr .tcsetattr k   (kP 0PB  7u     q  Fq@Fq@Fq@             q      ./opt/csm/csmbin/checkrpmprereqs ls AppC                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2002,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)47   1.3.1.1   src/csm/install/checkrpmprereqs.perl, setup, csm_rpyx, rpyxt3f2 5/2/02 12:31:10
#############################################################################


use strict;
BEGIN { $::csmpm = $ENV{'CSM_PM'} ? $ENV{'CSM_PM'} : '/opt/csm/pm'; }
use lib $::csmpm;
use File::Path;
# Provides mkpath();
use FindBin qw($Bin);
use lib "$Bin";

use Getopt::Std;
use NodeUtils;
use CSMDefs;
use InstallUtils;

$::MSGCAT = 'csmInstall.cat';
$::MSGMAPPATH = $ENV{'CSM_MSGMAPS'} ? $ENV{'CSM_MSGMAPS'} : '/opt/csm/msgmaps';
$::MSGSET = 'csminstall';

# get the definitions we need for this command
#    in this case get_OSDefs uses the attrs of the management
#    server to identify the correct definitions
%::myOSDefs= InstallUtils->get_OSDefs();

$::pkgname="";
$::pkg_name="";

$::PREREQS_ATTR{'OSName'} = InstallUtils->get_OSName;   #AIX/Linux
$::PREREQS_ATTR{'DistributionName'} = InstallUtils->get_DistributionName;
$::PREREQS_ATTR{'DistributionVersion'} = InstallUtils->get_DistributionVersion; #5.1.0/7.1/7.2
$::PREREQS_ATTR{'PkgArchitecture'} = InstallUtils->get_PkgArchitecture;
$::PREREQS_ATTR{'OSTypeVer'} =  $::PREREQS_ATTR{'OSName'}.$::PREREQS_ATTR{'DistributionVersion'};
$::PREREQS_ATTR{'CsmCoreVersion'} = InstallUtils->get_CSMVersion("csm\.core");
if (length($::PREREQS_ATTR{'CsmCoreVersion'})==0)
{
  NodeUtils->message('E2', 'EMsgNO_CORE');
}

if ($::PREREQS_ATTR{'OSName'} eq "AIX")
{
    my $temp_distro = $::PREREQS_ATTR{'OSName'}.$::PREREQS_ATTR{'DistributionVersion'};
    if (!grep(/^$temp_distro$/,@::VALID_AIX_DISTROS))
    {
          NodeUtils->message('W', 'EMsgUNSUPPORTED_AIX_DISTRO', $temp_distro, join(', ',@::VALID_AIX_DISTROS));
    }
    else { NodeUtils->message('V', 'IMsgDETECTED_AIX_DISTRO', $temp_distro); }
    if (!grep(/^$::PREREQS_ATTR{'CsmCoreVersion'}$/,@::VALID_CSM_DISTROS))
    {
          NodeUtils->message('E5', 'EMsgUNSUPPORTED_CSM_DISTRO', "CSM".$::PREREQS_ATTR{'CsmCoreVersion'}, join(', ',@::VALID_CSM_DISTROS));
    }
    else { NodeUtils->message('V', 'IMsgDETECTED_CSM_DISTRO', "CSM".$::PREREQS_ATTR{'CsmCoreVersion'}); }
}


#####################################################################
# Subroutines:                                                      #
#                                                                   #
#                                                                   #
#     usage getArgs					            #
#                                                                   #
#                                                                   #
#                                                                   #
#####################################################################

sub usage
{

NodeUtils->message('I', 'IMsgcheckrpmprereqsUsage');

exit 1;
}

sub getArgs
{
   if (! getopts('p:vVh') ) { &usage; }

   if ($::opt_h) { &usage; }
   $::VERBOSE = $::opt_v || $::opt_V ;

   if (!($::opt_p) )
   {
      &usage;
   }
   else
   {
    $::pkgname=$::opt_p;
   }

}

#######################################
#
# Main
#
######################################
my $rc = 0;
my @checkopensrcrpms = ();

&getArgs;

if ($::PREREQS_ATTR{'OSName'} eq "AIX")
{
    my %Svrpkgdefs = InstallUtils->get_pkgdefs($::PREREQS_ATTR{'OSName'}, $::PREREQS_ATTR{'DistributionName'}, $::PREREQS_ATTR{'DistributionVersion'}, $::PREREQS_ATTR{'PkgArchitecture'}, "MgmtServer", $::PREREQS_ATTR{'CsmCoreVersion'});

    @checkopensrcrpms=(@{$Svrpkgdefs{opensrc_prereqs}});
}

foreach $::pkg_name (@checkopensrcrpms)
{
    # make sure that the * isn't a part of the package name:
    $::pkg_name =~ s/\*//g;
    NodeUtils->runcmd("$::RPMCMD -q $::pkg_name", -1);
    $rc=$::RUNCMD_RC;
    if ($rc!=0)
    {
      NodeUtils->message('E', 'EMsgRpmNotInstalled', $::pkgname, $::pkg_name);
      exit $rc;
    }

}

exit $rc;


rials -kl 0PB  7u     0  q@q@q@             0      ./opt/csm/csmbin/clogger prereqs                              @q         H   !(  ,         (  H        1L                      .text         !(                   .data     (  (  ,  "(               @.bss      T  T                      .loader             (T                   " (|nx|#x|+x|    1  B h9   e)-  *  @ H `   H   H )A |nxA   A |	Q N!A  9   }sx}{x~x  H `     ,  A b $H 	A |      @        __start   |b ,  0!;  8  `?   \ XH ՀA 8`P H A 8 ;  @ D H @ D8` P H A  H,@ dH 	A   ,  @ 4 @H 	A  D8  D`P H A  @ HH    H,@ 8` cH A  H,  A  @ D8` P Kt L @H   8  Ld TTd 6 @|!n8 @ P8 TH  T L P< 8   T|).|*  8  PH U T P X < @,  @ Ѐ P *} |(.Tg8|:}e8. | @A D,  A H 9A   } 8c } Tf8|2}e0. | @@̃ < T; |   <@ , P *} |(.Tg8|:}e8. KH  (H 8` cH A 8`  H A  0 T8   d  XH ̀A  T| @ P H `    @H !A !   }N       	(!          X0   X|!֐   |H d     	         8    ,  A 4`f  |c"8 | .,  A `f  |c"8 | .,  K`  N       	         H|`  `  `}   !b \;   : b    <F 89 @8 H \ (|(. (|(.~:;6   H `   ,  A b  8 H `   ,  A :   ,  @ :  p  P,  @ L,  _@ @c#  8 ,8 H A ,  @ $|  @  ,  A l,  A d: | ;9 @  p  P,  K  ,   A  : b    <F 89 @8 H \ (|(.K  y |. |c, |*|). @  8 c |).f 8   K 8   Kp x8! p}N       	     b 0| < !,  `?   L@  @8 < |  @,  A   8ed `e  T8|cc ,  A D8 T8|` Hc H eA  @ ,  A HH   8`  H uA  @ ,  A (  8ed `e  T8|cc ,  Kb 0 <,  @ ( @8 < |  @,  K8!   }N       	(!    (      H0  c  | @@ 8` N  8`M  8`  N       	         (" X898	  |	 `i  G `  	  `  8c  8 8   I  B N       	         P X88  |	 `g   `  8c   8 	  B N       	         <؃ X|`  `~     !| \|~|@@PcD  c  H 3|~b  |@@ @ c#  b  H ]A ,  @ ~c#  b  K5K@ <K|@@ | b  c  H A ,  @ ~ܲb  c  KK@ @|@c#  @  ~ܲb  c  Km~b  Kc  K<KHK|@A $~c  c%  b  K)~۲b  K|~||  A $||c  Kb  |~|@@ Kc  b  KܲK h8! `}N       	 
    K     	         KD     	              4A   L |	N               8A   L |	N               <A   L |	N               @A   L |	N               DA   L |	N               HA   L |	N                A |	K k N      @        _ptrgl TA   L |	N                              |fx|#x|3xH       @        bcopy       @        memmove                               b ` 8  q A ||+|"*A H|8@@@@ |A L  H  p|+|*A $0  |8@@@|+@ P@ D|*@|,     T A |0|0|8@H  |8@|0}0@@@ L  A A 8`N  8` N  8`  N  8c8  ,  |0@A  @  ,  |0@KA A 8`N  8`  N  8` N        @       strcmp dA   L |	N              !|b A ,   H ,   A  x    c A |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A  H8! @}N  8! @N         A       __threads_init  |    b l|!c   HH  EA  H8! @}N         A      , call_pthread_init   t     pA   L |	N               A   L |	N              `d    `e  ,   A L8  ,  \@  , "@ 8     8 8 ,   A   ,  \KȈ  `e  `f      ,   A L8  ,  \@  , '@ 8     8 8 ,   A   ,  \K`d    `f      ,   A L8  ,  \@  , $@ 8     8 8 ,   A   ,  \KȈ  `e      ,   A L8  ,  \@  , \@ 8     8 8c ,   A   ,  \KȈ    N       	 @          unmash__FPc   | `d  !8e ` HH ՀA  H8! @}N       	 A         0 
usage__FPc| `  `~   !8tH A ,A b B "      b B " Ă ȁ ́ 8(  T z|| rA |	N o  H YA w  q  8   H  o  H aA x  q  8   H  o  H AA y  q  8   H  o  H A z  q  8   H  o  H A {  q  8   H  `o  H A |  q  8   H  @, l/ c, nAAL, f, hA A @ }  K58`  KqA c  c  8H -A ,A  8(  T z|| rKĀb   8(  @ L, Ax8H A 8` KA b Ā ܀  |    8! }H , @T  8H mA 8` KA b Ā ܀  |    8! }H 4o  H A v  q  8   Ko  H A u  q  8   K/ s, tA `A <@Ѐo  H )A t  q  8   c  c  8H ݀A Ko  H A s  q  8   K|o  H ՀA r  q  8   K\o  H ݀A p  q  8   K<, @    8HH 9A 8` KA b Ā ܀  |    8! }N       	 A        processCommandLineArgs__FiPPc |А  !Pa x8``  8vH EA 8xH aA 8H UA 8H IA 8H =A a xc  KɃ   ,   @ 8H MA 8` KA    , f@ 8H %A 8` KqA b   , f@ 8$H A 8` KIA B   ,   @ 8DH ՀA 8` K!A "   , f@ 8dH A 8` KA    ,   @ 8H A 8` KрA  Ȁ  ,   @ 8H ]A 8` KA    ,   @ 8H 5A 8` KA    ,   @ 8H A 8` KYA    8(  @ D, A 8H ـA 8` K%A         8a `H A H  pb   , f@ 8H A 8` K݀A b   ,   @ 88H iA 8` KA         8a `H 1A |{yA `8   8a d dH =A a d,  A 88 hH MA  h8\H A a hH YA a dH uA cc  H   8(  @ T, A 8``  H A 8` KA    Ā    =    a `    T
:H    a `8     H A |{yA Pa `H )A ,  A`8   8 l lH mA 8 lH A a lH yA cc  H  ̀   Ā    =    a `    T
:}~R    k K + k  }^P. 8 < @ Da HA La T! PH A |~yA Ha `H ]A ,  A ,8 pH A  p8H  YA a pH A c  H  8`   8! }N       	 A        main        A   L |	N               A   L |	N               ԐA   L |	N               ؐA   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N              A   L |	N              /usr/lib/libc.a /usr/lib/profiled/libc.a IBM__cdtors    @(#)28   1.4   src/csm/clog/clogger/clogger.C, csm.clog, csm_rveg, rveg0414a 8/29/02 13:29:24 IB
Log an entry using CLOG C API

usage: %s -MISCmsnftci[AD] [fields]
	-M default message
	-I numeric message id
	-S numeric message set
	-C message catalog name
	-s sccs ID
	-n line number
	-f file name
	-t numeric message type
	-c component ID
	-l LPP ID
	-A AIX Error template ID
	-D Detailed Data file
	[fields] - list of field values in message

Returns:
	o CLOG C API error code on CLOG error
	o 200: invalid arguments

Prints: 
	o Nothing on success
	o On error:
		o message from CLOG API if present
		o bad argument message

 M:I:S:C:A:D:s:n:f:t:c:l:h IB                                      4M:I:S:C:A:D:s:n:f:t:c:l:h IB%d is not a valid message type
 Missing some parameter : try %s -h for usage
 IBMissing some parameter : try %s -h for usage
  ICT_TR_TRACE_LEVELS= CT_TR_FILENAME= CT_TR_TRACE_LEVELS=_CLG:*=8 CT_TR_FILENAME=/var/log/csm/clogger.trc Missing parameter defaultMessage
 IBMissing parameter messageID
 IBMMissing parameter messageSet
 IBMissing parameter messageCat
 IBMissing parameter lineNum
 IMissing parameter sccsID
 IBMissing parameter lppID
 IBMMissing parameter componentID
 IMissing parameter fileName
 %d is not a valid message type
 Missing parameter AIXTemplateID
 IBMMissing parameter DetailedDataFile
 %s
 %d is not a valid message type
 %s
 %s
       ޭ                     ޭ                                     @(#)23  1.4  src/bos/usr/ccs/lib/libpthreads/init.c, libpth, bos520 8/19/99 12:20:14    @(#)61	1.14  src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos520 7/11/00 12:04:14     H  <    f    f        f        f    f            
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

      H   H       H     
  H     
  H       H       H       H              0                              (     0                          x  $      X h                              4                   @  D  H  L  P  T  X  \  `  d  h  l  p               t                                          x      !   P            __quous   3  @                   @       errno         @                    @
                    @       malloc        @
       free          @
       _Errno        @
       exit          @
       atexit        @
       atoi          @
       printf        @
       strdup        @
              3      @
       memcmp        @
       getopt        @
       putenv        @
              ?      @
       __crt0v       @       optarg        @              L      @              i      @
              z      @                    @
                    @
       clog_rec      @
                    @
                    @
                    @
                    @
                    @
                   @
       __start    !
          (       <       \       4       8       x                                                                                    $        (       0        4       <        @       P       p       t       x       |                        
       	                                                                                                                                                                                                                                                                            $       (       ,       0       4   "    8        <       @   !    D       H       L       P     /usr/lib:/lib:/usr/ibmcxx/lib    libc.a shr.o  libC.a shr.o  libpthreads.a shr_comm.o  libpthreads.a shr_xpg5.o  libcsm_clog.a shr.o  libct_cu.a shr.o  ___memmove  
loadquery  _system_configuration  
setlocale  __mod_init  __malloc_user_defined_name  __CleanupCatch  __pthread_trace  pthread_init  clog_get_error  clog_set_error_log_info  
clog_init  cu_rel_errmsg_1  cu_get_errmsg_1  cu_rel_error_1  cu_get_error_1  ageCatkW 0PB  7u     H G@G@G@             H     ./opt/csm/csmbin/diagnostics/DiagnoseHMC usterCo                             #!/usr/bin/perl
################################################################################
#
#       This is not a supported program and it is supplied AS-IS for 
#       official support personnel only
#
# This tool will look for common configuration problems between a pSeries HMC
# and the LPAR(s) its managing. The focus is on RMC setup which is the basic
# communications channel for SFP and DLPAR operations.
#
# Note - will not work with HMCs older than GA3 and LPARs older than 5.1F/5.2
################################################################################

$|=1;

use Data::Dumper;
use Getopt::Long;
use Text::Wrap qw(wrap fill);
use Socket;

################################################################################
# Global configuration settings
################################################################################

# Version of this script
$VERSION = ".10";

# This is the default location of this tool - all subdirs are assumed to be under this directory
$BaseDIR = "/opt/csm/csmbin/diagnostics";

# Trace file location
$TRACE_FILE = "/tmp/DiagnoseHMC.trace";

# The default indentation to take for sub-tasks
$space="\t";

# Comment mode
$CommentChar ="";

$REQUIRED_FREE_SPACE = 3;

# Map from subsystem name as shown in lssrc output to actual binary name
%SRCName2BinName = (
		    "ctrmc","/usr/sbin/rsct/bin/rmcd",
		    "ctcas","/usr/sbin/rsct/bin/ctcasd",
		    "IBM.DMSRM","/usr/sbin/rsct/bin/IBM.DMSRMd",
		    "IBM.CSMAgentRM","/usr/sbin/rsct/bin/IBM.CSMAgentRMd",
		    "IBM.AuditRM","/usr/sbin/rsct/bin/IBM.AuditRMd",
		    "IBM.ServiceRM","/usr/sbin/rsct/bin/IBM.ServiceRMd",
		    "IBM.DRM","/usr/sbin/rsct/bin/IBM.DRMd",
		    );

$ME = `basename $0`; chomp $ME;

# process command line arguments, if any
GetOptions(
			  "quiet"       => \$ARGS{QUIET_MODE},       # if set, keep quiet
			  "keepgoing"   => \$ARGS{KEEP_GOING},       # if set, dont stop on the first error
			  "verbose"	    => \$ARGS{VERBOSE},	         # if set, be more verbose in whatever we are doing
			  "displayonly" => \$ARGS{DISPLAY_ONLY},     # if set, just show what would be tested, but dont perform actual tests
			  "target=s"	 => \$ARGS{TARGETS},	         # the name of the remote target to investigate
			  "password:s"	 => \$ARGS{REMOTE_PASSWORD},  # password of user to use in rexec to $ARGS{TARGETS}
#	   "user=s"	=> \$ARGS{REMOTE_USER},	      # user name to use in rexec to $ARGS{TARGETS}
			  "action=i"	 => \$ARGS{ACTION_MODE},	   # 0 - no action, 1 - ask, 2 - just doit
			  "trace"	    => \$ARGS{TRACE_ON},	      # if set, log each step to $ARGS{TRACE_FILE}
			  "tracefile=s" => \$TRACE_FILE,	            # name of trace file
			  "exportdata"	 => \$ARGS{EXPORT_DATA},	   # only used internally
#     "version"     => \$ARGS{VERSION}
#	   "help"	=> \$ARGS{HELP},	      # display usage
			  ) or usage();


$Text::Wrap::columns = GetTermWidth();

if ( $> != 0 ) {
	 Show(message=>"$ME must be run as root - you are running as user ".getpwuid($>)."\n");
	 exit 1;
}

checkArgs();

if ( $ARGS{TRACE_ON} ) {
    open TRACEFILE, ">>$TRACE_FILE" || die $!;
}

main();

if ( $ARGS{TRACE_ON} ) {
	 close TRACEFILE;
}

use POSIX qw(tmpnam);
################################################################################
# ;config
################################################################################
sub config
{ 
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

	 my $suffix = "";
	 if ( $DATA{OSNAME} eq "Linux" )
         {
		  $suffix = "linux";
	 }
	 else
         {
            if ( $DATA{OSNAME} eq "MCPLinux" )
            {
		  $suffix = "mcplinux";
	    }
	    else
            {
		  $suffix = "aix";
	    }
         }

	 my $command_file = "";
  LINE:
	 while ( <DATA> ) {
		  # start of a new command section
		  if ( $_ =~ /begin (\d+) (.*)\.$suffix/ ) {
				my $mode         = $1;
				my $command_name = $2;

				TRACE($input{indent},$space,"creating command $command_name with mode $mode\n");

				# if we have already processed a prior command, close the current file and reopen another file
				if ( $command_file ne "" ) {
					 close(OUT);
				}
				$command_file = tmpnam().".$command_name";
				TRACE($input{indent},$space,"COMMANDS{$command_name} = $command_file\n");#.$command_name\n");
				open(OUT,">$command_file");
				binmode(OUT);
				chmod oct($mode), $command_file	or die "can't chmod $command_file to mode $mode: $!";
#				print OUT "begin 755 $command_file.$command_name\n";
				$COMMANDS{"$command_name"} = "$command_file";#.$command_name";
				next;
		  }
		  if ( $_ =~ /^end/ ) {
				close(OUT);
				$command_file = "";
				next;
		  }
		  if ( $command_file ne "" ) {
				next LINE if /[a-z]/;
				next LINE unless int((((ord() - 32) & 077) + 2) / 3) == int(length() / 4);
				print OUT unpack("u", $_) or die "can't write $command_file: $!";
		  }
	 }
}
################################################################################
# ;unconfig 
################################################################################
sub unconfig 
{ 
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

	 foreach my $file ( keys %COMMANDS ) {
		  TRACE($input{indent},$space,"unlinking $COMMANDS{$file}\n");
		  unlink("$COMMANDS{$file}");
	 }
}
################################################################################
# ;main
################################################################################
sub main
{
	 my %input = @_;
	 TRACE($0,(caller(0))[3]," called on ".`date`);

	 setOSName(indent=>"$input{indent}$space");
	 config(indent=>"$input{indent}$space");

    # Perhaps will start elsewhere in the future, but for now this is it ...
	 my $rc = 0;
	 if ( $ARGS{EXPORT_DATA} ) {
		  $rc = CollectExportData();
		  dumpDATA();
		  unconfig(indent=>"$input{indent}$space");
		  return $rc;
	 }

	 $rc = root();
	 PrintReport();
#	 dumpDATA();

	 unconfig(indent=>"$input{indent}$space");

	 return $rc;
}

################################################################################
# ;root
################################################################################
sub root
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    my @subtasks = ( \&checkLocalRMC );

    if ( $DATA{TYPE} eq "HMC" ) {
		  push (@subtasks, \&checkDMSRM);
		  push ( @subtasks, \&checkLparCmdRM );
    }
    else {
		  push (@subtasks, \&checkCSMAgentRM);
		  if ( $DATA{OSVERSION} eq "5.2" || 
                       $DATA{OSVERSION} eq "5.3") {
				push ( @subtasks, \&checkDRM );
		  }
    }

	 push ( @subtasks, \&checkSFP );

    if ( $ARGS{TARGETS} ) {
		  push (@subtasks, \&checkRemoteTarget );
    }

    my $rc = 0;
    foreach my $subtask ( @subtasks ) {
		  my $rc |= &$subtask();
		  if  ( $rc != 0 && !$ARGS{KEEP_GOING} ) {
				return 1;
		  }
    }
    return $rc;
}
################################################################################
# ;checkLocalRMC
################################################################################
sub checkLocalRMC
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    my @subtasks = ( \&getInstalledPackageLevels,
							\&getLocalHostName,
							\&getFreeSpaceInVar,
							\&checkRegistry,
							\&checkNodeID,
							\&checkCTSecFiles,
							\&areDaemonsResponding,
							\&checkCTRMCACLSFile,
							\&getRemoteClientConnectionStatus,
							);

    Display(indent=>$input{indent},
				shortdesc=>"Check local RMC subsystem.",
				desc=>
				"Look at the RSCT system on the local machine. This is only to verify that ".
				"basic setup is OK, ie, daemons are running, responsive, security files are ".
				"present, etc.");
    
    my $rc = 0;
    foreach my $subtask ( @subtasks ) {
		  $rc |= &$subtask(indent=>"$input{indent}$space");
		  if  ( $rc != 0 && !$ARGS{KEEP_GOING} ) {
				return 1;
		  }
    }
    return $rc;
}
################################################################################
# ;getInstalledPackageLevels
################################################################################
sub getInstalledPackageLevels
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
	    shortdesc=>"Get the installed versions of RMC packages.",
	    desc=>"Collect installed package information and verify ".
	    "all required packages are installed.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 my $rc =0;

	 if ( $DATA{TYPE} eq "LPAR" ) {
		  my @packages = ("rsct.core.utils","rsct.core.sec","csm.client");
		  if ( $DATA{OSVERSION} eq "5.2" ||
                       $DATA{OSVERSION} eq "5.3") {
				push @packages, "devices.chrp.base.rte","csm.core";
		  }
		  foreach $package ( @packages ) {
				if ( $ARGS{VERBOSE} ) {
					 Show(indent=>"$input{indent}$space",message=>"Checking for $package: ");
				}

				my $ver = `LC_ALL=C lslpp -qL $package 2>&1 | head -1 | awk '{print \$1"-"\$2}'`;
				chomp $ver;
				if ( $ver !~ /0504-132/ ) {
					 $DATA{PKGS}{$package} = $ver;
					 if ( $ARGS{VERBOSE} ) {
						  Show(indent=>"",message=>" ok\n");
					 }
				}
				else {
					 if ( $ARGS{VERBOSE} ) {
						  Show(indent=>"",message=>" not installed\n");
					 }
					 addToReport(message=>"$package is not installed");
					 $rc |= 1;
				}
		  }
	 }
	 else {
		  my @packages =("src","rsct.core","rsct.core.utils","csm.core",
							  "csm.server.hsc","csm_hmc.server","hsc.lparcmd");
		  foreach $package ( @packages ) {
				if ( $ARGS{VERBOSE} ) {
					 Show(indent=>"$input{indent}$space",message=>"Checking for $package: ");
				}
				my $ver = `LC_ALL=C rpm -q $package`;
				chomp $ver;
				if ( $ver !~ /is not installed/ ) {
					 $DATA{PKGS}{$package} = $ver;
									 $DATA{PKGS}{$package} = $ver;
					 if ( $ARGS{VERBOSE} ) {
						  Show(indent=>"",message=>" ok\n");
					 }
				}
				else {
					 if ( $ARGS{VERBOSE} ) {
						  Show(indent=>"",message=>" not installed\n");
					 }
					 addToReport(message=>"$package is not installed");
					 $rc |= 1;
				}
		  }
	 }
    return $rc;
}
################################################################################
# ;getLocalHostName
################################################################################
sub getLocalHostName
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Check the primary hostname of the local machine.",
				desc=>"Get the local hostname of the machine as returned by ".
				"gethostbyname(gethostname()). Be sure that this name looks ".
				"like a valid hostname.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( !-x "$COMMANDS{getLocalHostName}" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"missing file $COMMANDS{getLocalHostName}\n");
		  addToReport(message=>"The file $COMMANDS{getLocalHostName} is missing. Reinstall $PackageName");
		  return 1;
	 }
    my $hn  = `LC_ALL=C $COMMANDS{getLocalHostName} 2>&1 | awk '{print \$7}'`;
	 chomp $hn;
    if ( $? != 0 || $hn eq "" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"Error in fetching local hosts primary hostname");
		  addToReport(message=>"Error in fetching local hosts primary hostname. Be sure that ".
						  "the command $COMMANDS{getLocalHostName} runs.");
		  return 1;
    }

    $DATA{LOCALHOSTNAME} = $hn;

	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",message=>"Local hostname is $DATA{LOCALHOSTNAME}\n");
	 }

	 if ( $hn eq "localhost.localdomain" || $hn eq "localhost" || $hn eq "loopback" ) 
	 {
		  Show(indent=>"$input{indent}$space",
				 message=>"$hn appears to be a local host name");
		  addToReport(message=>"The primary hostname appears to be unconfigured since the hostname is '$hn'.");
		  return 1;
	 }

    return 0;
}
################################################################################
# ;getFreeSpaceInVar
################################################################################
sub getFreeSpaceInVar
{
    my %input = @_;
    TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Check the amount of free space in /var.",
				desc=>"This should be large enough for new trace files and core files to be saved. While an ".
				"exact amount of free space is hard to know, this script uses $REQUIRED_FREE_SPACE".
				"MB as a minimum amount of free space before its considered an error.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

    my $k_blocks=0;

    if ( $DATA{OSNAME} eq "AIX" ) {
		  $k_blocks = `LC_ALL=C df -k /var | grep dev | awk '{print \$3}'`;
	 }
    else {
		  $k_blocks = `LC_ALL=C df -k /var | grep dev | awk '{print \$4}'`;
    }
    chomp $k_blocks;

    TRACE($input{indent},$space,"k_blocks=[$k_blocks]\n");

    $DATA{VAR_SPACE} = int( ($k_blocks*1024)/524288 ) / 2;

	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"/var has $DATA{VAR_SPACE}MB free.\n");
	 }

    if ( $DATA{VAR_SPACE} < $REQUIRED_FREE_SPACE ) {

		  Show(indent=>"$input{indent}$space",
				 message=>"/var has only $DATA{VAR_SPACE}MB free. Free some space\n");

		  addToReport(message=>"/var has only $DATA{VAR_SPACE}MB free. Free some space",
					action=> sub 
					{
						 my $TOP="/tmp/var/ct";
						 print "Deleting core and trace files from $TOP\n";
						 use File::Find;
						 sub process_file {
#			    print "checking $_\n";
							  if ( $_ =~ /trace(\.\d+)?|core/ ) {
									print "deleting file $File::Find::name\n";
#				unlink($File::Find::name);
							  }
						 }
                   print "Stoping rmc\n";
                   system("LC_ALL=C /usr/sbin/rsct/bin/rmcctrl -z");
                   find (\&process_file,$TOP);
                   print "Starting rmc\n";
                   system("LC_ALL=C /usr/sbin/rsct/bin/rmcctrl -s");
              }
              );
        return 1;
     }
     return 0;
}
################################################################################
# ;getRemoteClientConnectionStatus
################################################################################
sub getRemoteClientConnectionStatus
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
	    shortdesc=>"Check that remote RMC clients connections are enabled.",
	    desc=>"If this is not enabled, then no remote systems can invoke actions, ".
				"list resources, etc, on this machine.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }
	 
	 if ( $DATA{DAEMONS}{ctrmc}{pid} >= 0 ) {
		  my $filter = "Logical Connection Information for Remote Clients";
		  my $ret = `LC_ALL=C /usr/bin/lssrc -ls ctrmc | grep \"$filter\"`;
		  
		  if ( $ret =~ /$filter/ ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Remote clients are currently enabled.\n");
				$DATA{REMOTE_CLIENTS_ENABLED}=1;
				return 0;
		  }
		  else {
				Show(indent=>"$input{indent}$space",
					  message=>"Remote clients are NOT currently enabled.\n");
				addToReport(message=>"Remote clients are NOT currently enabled.\n",
								action=>
								sub { 
									 print "running 'rmcctrl -p' to enable remote RMC clients.\n";
									 system("LC_ALL=C /usr/sbin/rsct/bin/rmcctrl -p");
								}
                        );
             $DATA{REMOTE_CLIENTS_ENABLED}=0;
             return 1;
		  }
    }
    elsif ( -f "/var/ct/cfg/ctrmc.rpe" ) {
		  my $ctrmc_status = "ctrmc's status with SRC subsystem is not known";
		  if ( $DATA{DAEMONS}{ctrmc}{pid} = -1 ) {
				$ctrmc_status= "ctrmc is not running";
		  }
		  Show(indent=>"$input{indent}$space",
				 message=>"Remote clients should be enabled but unable to determine for sure since $ctrmc_status.\n");
		  addToReport(message=>"Unable to determine if remote clients are currently enabled since $ctrmc_status.".
						  " However, the file /var/ct/cfg/ctrmc.rpe exists show they should be enabled.",
						  action=>\&action_enableRemoteRMCClients);
        return 0;
    }
    else {
		  my $ctrmc_status = "ctrmc's status with SRC subsystem is not known";
		  if ( $DATA{DAEMONS}{ctrmc}{pid} = -1 ) {
				$ctrmc_status= "ctrmc is not running";
		  }
        Show(indent=>"$input{indent}$space",
				 message=>"Remote clients do not appear to be enabled since /var/ct/cfg/ctrmc.rpe does not exist.\n");
        addToReport(message=>"Remote clients do not appear to be enabled since /var/ct/cfg/ctrmc.rpe does not exist.",
						  action=>\&action_enableRemoteRMCClients);
        return 0;
    }
}
################################################################################
# ;areDaemonsResponding
################################################################################
sub areDaemonsResponding
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
	    shortdesc=>"Check local RSCT daemons.",
	    desc=>"Check that base RSCT daemons are active and responding.");
    
    my @subtasks = ( \&is_ctrmc_responsive,
							\&is_ctcasd_responsive,
							\&is_AuditRM_responsive);
    my $rc = 0;
    foreach my $subtask ( @subtasks ) {
		  $rc |= &$subtask(indent=>"$input{indent}$space");
		  if  ( $rc != 0 && !$ARGS{KEEP_GOING} ) {
				return 1;
		  }
    }
    return $rc;
}
################################################################################
# ;is_ctrmc_responsive
################################################################################
sub is_ctrmc_responsive
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
				shortdesc=>"Check the ctrmc subsystem.",
				desc=>"Ensure that ctrmc is active and responding. ".
				"We check this by running 'lsrsrc'. If this responds, then ".
				"we can be sure that the local ctrmc is working.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"ctrmc") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # now try to run lsrsrc 
	 my $ret = `LC_ALL=C /usr/sbin/rsct/bin/lsrsrc 2>&1`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"lsrsrc command returned an erorr.\n");
		  addToReport(message=>"lsrsrc command returned an error.\n");
		  $DATA{DAEMONS}{ctrmc}{responding}=0;
		  return 1;
	 }
	 $DATA{DAEMONS}{ctrmc}{responding}=1;
	 return 0;
}

################################################################################
# ;getSRCDaemonPID 
################################################################################
sub getSRCDaemonPID 
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

	 # untill we know otherwise....
	 $DATA{DAEMONS}{$input{subsystem}}{pid} = -666; # "unknown status"

	 my $pid = `LC_ALL=C /usr/bin/lssrc -s $input{subsystem} 2>&1 | tail -1`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"lssrc command returned an error.\n");
		  addToReport(message=>"lssrc -s $input{subsystem} command returned an error.\n");
		  return 1;
	 }
	 elsif ( $pid =~ /0513-085/ ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"$input{subsystem} is not registered with src.\n");
		  addToReport(message=>"$input{subsystem} is not registered with src. Run 'lssrc -s $input{subsystem}' to verify this.");
		  return 2;
	 }
	 elsif ( $pid =~ /inoperative/ ) {
		  if ( $input{can_be_inoperative} != 1) {
				Show(indent=>"$input{indent}$space",
					  message=>"$input{subsystem} is not running.\n");
				addToReport(message=>"$input{subsystem} is not running. Ensure that $SRCName2BinName{$input{subsystem}} ".
								"is present and executable.\nTry to start $input{subsystem} by running:\n".
								"\tstartsrc -s $input{subsystem}",
								action=>sub { print "Starting $input{subsystem}\n"; system("LC_ALL=C startsrc -s $input{subsystem}"); } 
								);
		  }
		  $DATA{DAEMONS}{$input{subsystem}}{pid} = -1;
		  return 3;
	 }
	 elsif ( $pid =~ /\s*$input{subsystem}\s+(\w+)\s*(\d+)/ ) {
		  $DATA{DAEMONS}{$input{subsystem}}{pid} = $2;
	 } 
	 else {
		  Show(indent=>"$input{indent}$space",
				 message=>"Unexpected output from lssrc command\n");
		  addToReport(message=>"Unexpected output from lssrc command of $pid\n".
						  "This is an internal error to $ME.\n");
		  return 666;
	 }
    return 0;
}

################################################################################
# ;is_ctcasd_responsive
################################################################################
sub is_ctcasd_responsive
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
	    shortdesc=>"Check the ctcasd subsystem.",
	    desc=>"Ensure that ctcasd is responding if its active.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }
    
	 my $ctcasd_optional = 0;
	 if ( -e "/usr/sbin/rsct/bin/ctstrtcasd" ) {
		  $ctcasd_optional = 1;
	 }

	 my $ret = getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"ctcas", can_be_inoperative=>$ctcasd_optional );
	 if ( $ret == 3 && $ctcasd_optional == 1 ) {
		  return 0;
	 }
	 elsif ( $ret != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # if it has a PID, try the ctcasd test program
	 my $ret = `LC_ALL=C $COMMANDS{check_ctcasd} -v 2>&1`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"command check_ctcasd returned an error.\n");
		  addToReport(message=>"command check_ctcasd returned error code ".($?>>8).":$ret");
		  $DATA{DAEMONS}{ctcas}{responding}=0;
		  return 1;
	 }
	 if ( $ret !~ /is ready to receive requests/ ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctcas is not responding.\n");
		  addToReport(message=>"ctcas is not responding.\n");
		  $DATA{DAEMONS}{ctcas}{responding}=0;
		  return 1;
	 }
	 
	 $DATA{DAEMONS}{ctcas}{responding}=1;
	 return 0;
}
################################################################################
# ;is_AuditRM_responsive
################################################################################
sub is_AuditRM_responsive
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},shortdesc=>"Check the AuditRM subsystem.",
	    desc=>"Ensure that AuditRM is active and responding.");
    if ( $ARGS{DISPLAY_ONLY} ) {  return 0;  }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"IBM.AuditRM") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # if it has a PID, try the lsaudrec command
	 `LC_ALL=C /usr/bin/lsaudrec 2>&1 > /dev/null`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"IBM.AuditRM not responding.\n");
		  addToReport(message=>"IBM.AuditRM not responding.\n");
		  $DATA{DAEMONS}{"IBM.AuditRM"}{responding}=0;
		  return 1;
	 }
	 $DATA{DAEMONS}{"IBM.AuditRM"}{responding}=1;
    return 0;
}
################################################################################
# ;checkNodeID
################################################################################
sub checkNodeID
{
    my %input = @_;

	 # Node ID is only used on AIX 5.1D+/5.2
	 # TODO - what AIX 5.1 level first uses node ids? D or F
	 return 0 unless ( $DATA{TYPE} eq "HMC" ||
							 $DATA{OSVERSION} eq "5.2" ||
                                                         $DATA{OSVERSION} eq "5.3" ||
							 ($DATA{OSVERSION} eq "5.1" && $DATA{FIX_LEVEL} ge "02") );

	 TRACE($input{indent},(caller(0))[3]," called\n");

    
    Display(indent=>$input{indent},
				shortdesc=>"Check node ID information.",
				desc=>"Check if the node id is consistant between that stored in the ctrmc ".
				"configuration files as well as the ID stored in the resource handles of ".
				"resources stored in the registry.");
	 
    if ( $ARGS{DISPLAY_ONLY} ) {  return 0;  }
    
    use File::Compare;
    if ( !-f "/etc/ct_node_id" && !-f "/var/ct/cfg/ct_node_id" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"No Node ID files found.\n");

		  if ( $DATA{RSCT_VERSION} ) {
				addToReport(message=>
								"No Node ID files found.".
								"/etc/ct_node_id and /var/ct/cfg/ct_node_id files do not exist.".
								"RSCT is installed at version $DATA{RSCT_VERSION} so these files ".
								"should be present. Unknown why they are missing. Run /usr/sbin/rsct/bin/XXXX -k ".
								"to regenerate these files. You will need to account for the new node ID ".
								"which may mean 'lost' entries in the registry, if any exist",
								);
		  }
		  else {
				addToReport(message=>
								"No Node ID files found. ".
								"/etc/ct_node_id and /var/ct/cfg/ct_node_id files do not exist. ".
								"RSCT is not installed so these files will not normally be present. ".
								"Install rsct.core.* packages.");
		  }
		  return 1;
    }
    elsif ( -f "/etc/ct_node_id" && !-f "/var/ct/cfg/ct_node_id" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"/var/ct/cfg/ct_node_id file is missing.\n");
		  addToReport(message=>
						  "/var/ct/cfg/ct_node_id file is missing. ".
						  "/etc/ct_node_id exits but /var/ct/cfg/ct_node_id does not exist.");
		  return 1;
    }
    elsif ( !-f "/etc/ct_node_id" && -f "/var/ct/cfg/ct_node_id" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"/etc/ct_node_id file is missing.\n");
		  addToReport(message=>
						  "/var/ct/cfg/ct_node_id exits but /etc/ct_node_id does not exist.");
		  return 1;
    }
    elsif (compare("/etc/ct_node_id","/var/ct/cfg/ct_node_id") != 0) {
		  Show(indent=>"$input{indent}$space",
				 message=>"Mismatched Node IDs files found.\n");
		  addToReport(message=>
						  "Mismatched Node IDs found.\n".
						  "/etc/ct_node_id and /var/ct/cfg/ct_node_id files are different.\n");
		  return 1;
    }

	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"/etc/ct_node_id are consistant with each other /var/ct/cfg/ct_node_id\n");
	 }
	 
	 my $node_id_file = "/etc/ct_node_id";
	 $DATA{NODEID} = `LC_ALL=C cat $node_id_file 2>&1 | head -1`;
	 chomp $DATA{NODEID};

	 my @ClassNames = ("ServiceEvent","AuditLog","AuditLogTemplate");
	 if (  $DATA{OSNAME} eq "AIX" ) {
		  push @ClassNames,"ManagementServer",
	 }
	 else {
		  push @ClassNames,"ManagedNode";
	 }

	 my $rc = 0;


	 foreach $class_name ( @ClassNames ) {
		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Checking resources of class $class_name: ");
		  }

		  my @RH = `LC_ALL=C /usr/sbin/rsct/bin/lssrtbl-api -s /IBM/$class_name/Resources::::ResourceHandle 2> /dev/null| grep 0x | awk '{print \$3\$4}'`;
		  if ( -f "core" ) {
				unlink("core");
		  }

		  if ($#RH == -1) {
				if ( $ARGS{VERBOSE} ) {
					 Show(message=>"no resources found\n");
				}
				next;
		  }

		  if ( !$ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Checking resources of class $class_name: ");
		  }

		  my %uniq=();
		  map { $uniq{$_}=1; } @RH;
		  foreach my $resource_hndl ( keys %uniq ) {
#				Show("$input{indent}".$spacea.$space."$resource_hndl\n");
				$resource_hndl =~ s/\s*|0x//g;
				
				if ( $DATA{NODEID} ne $resource_hndl ) {
					 Show(indent=>"$input{indent}$space$space",
							message=>"\nThe node id in $node_id_file does not match that in the registry for a resource of class $class_name.\n");

					 addToReport(message=>
									 "The node id in $node_id_file does not match that in the\n".
									 "registry for a resource of class $class_name.\n");
					 $rc |= 1;

					 if ( !$ARGS{KEEP_GOING} ) {
						  return 1;
					 }
				}
				Show(message=>"ok\n");
		  }
	 }
    return $rc;
}
################################################################################
# ;checkRegistry
################################################################################
sub checkRegistry
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
				shortdesc=>"Check that the RSCT registry data is not corrupted.",
				desc=>"Run the lssrtbl-api command and ensure that it does not generate an error.");
	 
    if ( $ARGS{DISPLAY_ONLY} ) {  return 0;  }

	 my @ClassNames = ("ServiceEvent","AuditLog","AuditLogTemplate");
	 if (  $DATA{OSNAME} eq "AIX" ) {
		  push @ClassNames,"ManagementServer",
	 }
	 else {
		  push @ClassNames,"ManagedNode";
	 }

	 my $rc = 0;

	 if ( -f "/usr/sbin/rsct/bin/lssr-api" ) {
		  system("LC_ALL=C /usr/sbin/rsct/bin/lssr-api /IBM/ 2>&1 > /dev/null");
	 }
	 else {
		  system("LC_ALL=C /usr/sbin/rsct/bin/lssr /IBM/ 2>&1 > /dev/null");
	 }
	 if ( $? != 0 ) { # this returned 139 for SEGV a core dump - maybe we want to 
		               # test explicitly for that value?
		  Show(indent=>"$input{indent}$space",
				 message=>"Registry Topology table appears to be corrupted.\n");
		  addToReport(message=>"Registry Topology table appears to be corrupted.\n".
						  "You will need to remove the entire registry and restart all RMs.\n".
						  "Use these commands to try to fix this problem:\n\n".
						  "  /usr/sbin/rsct/bin/rmcctrl -z\n".
						  "  mv /var/ct/IW/registry/local_tree /var/ct/IW/registry/local_tree.corrupted\n".
						  "  /usr/sbin/rsct/bin/rmcctrl -s\n",
						  action=> sub {
								print "Stopping RMC\n"; system("/usr/sbin/rsct/bin/rmcctrl -z");
								print "Renaming the registry directory\n"; system("mv /var/ct/IW/registry/local_tree /var/ct/IW/registry/local_tree.corrupted");
								print "Starting RMC\n"; system("/usr/sbin/rsct/bin/rmcctrl -s");
						  });
		  if ( -f "core" ) {
				unlink("core");
		  }
		  # always return at this point - no need to look at individual tables below 
		  # since we know those operations will fail if lssrtbl did.
		  return 1;
	 }

	 foreach $class_name ( @ClassNames ) {
		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Checking registry for class $class_name\n");
		  }

		  if ( -f "/usr/sbin/rsct/bin/lssrtbl-api" ) {
				system("LC_ALL=C /usr/sbin/rsct/bin/lssrtbl-api -s /IBM/$class_name/Resources::::ResourceHandle 2>&1 > /dev/null");
		  }
		  else {
				system("LC_ALL=C /usr/sbin/rsct/bin/lssrtbl -s /IBM/$class_name/Resources ResourceHandle 2>&1 > /dev/null");
		  }
		  if ( $? != 0 ) {
				$? = $? / 256;
				if ( $? == 5 ) {
					 next; # no such resource - this may be an error, but for this function at least, 
					 # the table is not corrupted.
				}
				Show(indent=>"$input{indent}$space",
					  message=>"$? Registry table for $class_name appears to be corrupted.\n");
				addToReport(message=>"Registry table for $class_name appears to be corrupted.\n".
								"Running 'rmsrtbl /IBM/$class_name/Resources /IBM/$class_name/Class'\n".
								"may clear the corruption, but any data in those tables will be lost.",
								action=> sub {
									 print "Running rmsrtbl /IBM/$class_name/Resources /IBM/$class_name/Class\n";
									 system("rmsrtbl /IBM/$class_name/Resources /IBM/$class_name/Class");
								});

				if ( -f "core" ) {
					 unlink("core");
				}
				if ( !$ARGS{KEEP_GOING} ) {
					 return 1;
				}
		  }
	 }
}
################################################################################
# ;checkCTSecFiles
################################################################################
sub checkCTSecFiles
{

    # - check for ":wq" in the THL file - it may be the result of a user trying to edit
    #   it in vi!

    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
	    shortdesc=>"Check that the CT security files look ok.",
	    desc=>"Check if the security files in /var/ct/cfg are present, not 0 sized, ".
	    "have correct permissions, etc.");

    if ( $ARGS{DISPLAY_ONLY} ) {  return 0;  }

	 $DATA{THL_VALID} = "false";

	 my %CT_SEC_Files = ("/var/ct/cfg/ct_has.pkf", "0444",
								"/var/ct/cfg/ct_has.qkf", "0400",
								"/var/ct/cfg/ct_has.thl", "0444");
	 my $rc = 0;
	 foreach $file ( sort keys %CT_SEC_Files ) {

		  Show(indent=>"$input{indent}$space",
				 message=>"checking $file: ");

		  if ( !-f $file ) {
				Show(message=>"$file does not exist\n");
				addToReport(message=>"$file does not exist\n");
				$rc |= 1;
				next;
		  }
		  my @info = stat($file);
		  if ( $info[7] == 0 ) {
				Show(message=>"$file exists, but its empty\n");
				addToReport(message=>"$file exists, but its empty.\n");
				$rc |= 1;
				next;
		  }
		  my $perm = oct($CT_SEC_Files{$file});
		  if ( ($info[2]&0777) != $perm ) {
				Show(message=>"$file has wrong permissions - should be $CT_SEC_Files{$file}.\n");
				addToReport(message=>"$file exists, has the wrong permissions.\n");
				$rc |= 1;
				next;
		  }
		  Show(message=>"ok\n");
	 }

	 if ( $rc ) { return $rc; }
	 
	 # now slurp in the THL and public key files into $DATA
 
	 @THL = `LC_ALL=C /usr/sbin/rsct/bin/ctsthl -l 2>&1`;
	 if ( $? !=0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctsthl -l reports an error. See report\n");
		  addToReport(message=>"ctsthl -l reports this error:\n @THL\n");
		  $DATA{THL_VALID} = "false";
		  if ( !$ARGS{KEEP_GOING} ) {
				return 1;
		  }
		  $rc = 1;
	 }
	 else {
		  $DATA{THL_VALID} = "true";
	 }

#Host Identity:                localhost.localdomain
#Identifier Generation Method: rsa512
#Identifier Value:
#120200b1cb9311aef4c97221c1021d83667d3fe33df7bc52ce0b47a2ed48824a86469287e24983852a369b5d1183c5da5626e21abed19960f4258d6f6437d6619b10d30103


	 my $index = -1;
	 foreach $line ( @THL ) {
		  $index++;
		  if ( $line =~ /Host.*:\s+(.*)\s*/ ) {
				$hn = $1;
				
				$THL[$index+1] =~ s/.*:\s+(.*)\s*//g;
				$meth = $1;
				
				$pk = $THL[$index+3];
				chomp $pk;
				
				$DATA{THL}{$hn}{meth} = $meth;
				$DATA{THL}{$hn}{key} = $pk;
		  }
	 }

	 # fetch my own public key from the official files, not the THL file.
	 my @PK = `LC_ALL=C /usr/sbin/rsct/bin/ctskeygen -d 2>&1`;
	 if ( $? !=0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctskeygen -d reports an error. See report\n");
		  addToReport(message=>"ctskeygen -d reports this error:\n @PK\n");
		  $rc = 1;
	 }
	 else {
		  chomp $PK[0]; chomp $PK[1];
		  $PK[1] =~ s/\(generation method: (.*)\).*/$1/g;
		  $DATA{PK}{meth} = $PK[1];
		  $DATA{PK}{key} = $PK[0];	 
	 }

	 # A list of possible names that we may have for ourselved in the THL file.
	 my @Names = ( $DATA{LOCALHOSTNAME}, "localhost", "localhost.localdomain", "loopback");
	 
	 my %Seen;
	 my $found_key = 0;
	 foreach my $name ( @Names ) {
		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Looking for an entry under the name $name in the THL file.\n");
		  }
		  # does our official public key match the entry in the THL?
		  if ( exists $DATA{THL}{$name} ) {
				if ( $DATA{PK}{key}  eq $DATA{THL}{$name}{key} && 
					  $DATA{PK}{meth} eq $DATA{THL}{$name}{meth} ) {
					 $found_key = 1;
				}
		  
				# Add an entry to the Seen hash - like this Seen{<pk value>_<method>} = hostname
				# Later we will look for more than one entry in %Seen - if we have more than one key,
				# Then we found more than one PK. In that case Seen{PK} will be a list of hostnames
				# that share that PK.
				if ( $DATA{THL}{$name}{key} && exists $DATA{THL}{$name}{meth} ) {
					 push @{$Seen{"$DATA{THL}{$name}{key}_$DATA{THL}{$name}{meth}"}},$name;
				}
		  }
	 }

	 if ( (keys %Seen) > 1 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"The THL file has conflicting entries for itself.\n");
		  my @LIST=();
		  foreach $key ( keys %Seen ) {
				push @LIST, @{$Seen{$key}};
		  }
		  addToReport(message=>
						  "The THL file has conflicting entries for itself.\n\n".
						  "Multiple THL entries exist for the local machine under the names ".commafy("and",@LIST).", but they do not all ".
						  "have the same public key value. You can check these entries using the command '/usr/sbin/rsct/bin/ctsthl -l'",
						  type=>"Warning");
		  return 1;
	 }

	 if ( $found_key == 1 ) {
		  return $rc;
	 }

	 Show(indent=>"$input{indent}$space", message=>"Public key does not appear in the THL file.\n");
	 addToReport(message=>
					 "Public key for this machine does not appear in the THL file.\n\n".
					 "No entry for ".commafy("or",@Names)." was found in the THL file.\n".
					 "This could be the result of starting ctcasd when no hostname was set.\n".
					 "\nRun the following command to add the public key to the THL file (on a single line)\n".
					 "\t/usr/sbin/rsct/bin/ctsthl -a -n $DATA{LOCALHOSTNAME} -m $DATA{PK}{meth} -p $DATA{PK}{key}\n",
					 action=> sub {
						  print "Running\n\t/usr/sbin/rsct/bin/ctsthl -a -n $DATA{LOCALHOSTNAME} -m $DATA{PK}{meth} -p $DATA{PK}{key}\n";
						  system("LC_ALL=C /usr/sbin/rsct/bin/ctsthl -a -n $DATA{LOCALHOSTNAME} -m $DATA{PK}{meth} -p $DATA{PK}{key}");
					 });
    return 1;
}
################################################################################
# ;commify
################################################################################
sub commafy
{   # see Cookbook, page 94
	 my $tag = shift;

	 if    (@_ == 0) {  return ''; }
	 elsif (@_ == 1) {  return $_[0]; }
	 elsif (@_ == 2) {  return join (" $tag ", @_); }
	 else            {  return join (", ", @_[0..($#_ -1)], "$tag $_[-1]"); }
}
################################################################################
# ;checkCTRMCACLSFile
################################################################################
sub checkCTRMCACLSFile
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
	    shortdesc=>"Check that the CTRMC ACL file looks ok.",
	    desc=>
	    "Check that the RMC ACL file is present, not empty, and is ".
	    "valid. Does not check for specific entries, just correct ".
	    "syntax. It tests for correct syntax by running 'refresh -s ".
	    "ctrmc' which will cause ctrmc to re-read the acl file. It ".
	    "will return an error if the file is invalid. Note that ".
	    "this may have a side effect if ctrmc had not read the file ".
	    "previously and that was the cause of some problem. So, ".
	    "running this test may correct this as a side effect");

    if ( $ARGS{DISPLAY_ONLY} ) {  return 0;  }

    if ((! -f "/var/ct/cfg/ctrmc.acls" ) && 
        (! -f "/usr/sbin/rsct/cfg/ctrmc.acls" )) {
             Show(indent=>"$input{indent}$space",
                            message=>"Neither /var/ct/cfg/ctrmc.acls nor ".
                                     "/usr/sbin/rsct/cfg/ctrmc.acls exists.\n");
             addToReport(message=>"Neither /var/ct/cfg/ctrmc.acls nor ".
                                  "/usr/sbin/rsct/cfg/ctrmc.acls exists.\n");
             $DATA{ACLS_FILE_VALID}=0;
             return 1;
    }
	 if ( -z "/var/ct/cfg/ctrmc.acls" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"/var/ct/cfg/ctrmc.acls file is 0 sized.");
		  addToReport(message=>"/var/ct/cfg/ctrmc.acls file is 0 sized.\n");
		  $DATA{ACLS_FILE_VALID}=0;
		  return 1;
	 }
	 if ( -z "/usr/sbin/rsct/cfg/ctrmc.acls" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"Warning: /usr/sbin/rsct/cfg/ctrmc.acls file is 0 sized.");
		  addToReport(message=>"Warning: /usr/sbin/rsct/cfg/ctrmc.acls file is 0 sized.\n");
	 }
   
	 if ( $DATA{DAEMONS}{ctrmc}{pid} == -1 ) {
		  $DATA{ACLS_FILE_VALID} = 0;
		  Show(indent=>"$input{indent}$space",
				 message=>"Cannot determine if CTRMC ACL file is valid".
				 " since ctrmc is not running.\n");
		  addToReport(message=>"Cannot determine if CTRMC ACL file is valid".
						  " since ctrmc is not running.\n");
		  return 1;
	 }

	 # Have ctrmc read the ACL file - look for any error messages
	 my $before_wc = `LC_ALL=C grep 2610 /var/ct/IW/log/mc/default | wc -l`;
	 system("LC_ALL=C refresh -s ctrmc 2>&1 > /dev/null");
	 if ( $? != 0 ) {

		  Show(indent=>"$input{indent}$space",
				 message=>"CTRMC ACL file appears to be invalid.\n");

		  my $after_wc = `LC_ALL=C grep 2610 /var/ct/IW/log/mc/default | wc -l`;
		  if ( $before_wc != $after_wc ) {
				my $message = `LC_ALL=C grep 2610 /var/ct/IW/log/mc/default | tail -1`;
				chomp $message;
				addToReport(message=>"CTRMC ACL file appears to be invalid.\n".
								"Last message from ctrmc was:\n".
								"$message\n");
		  }
		  else {
				addToReport(message=>"CTRMC ACL file appears to be invalid.\n".
								"Unknown reason why - maybe  /var/ct/IW/log/mc/default will ".
								"contain some hints as to the reason.\n");
		  }
		  $DATA{ACLS_FILE_VALID}=0;
		  return 1;
	 }

	 $DATA{ACLS_FILE_VALID} = 1;
	 if ( slurpCTRMC_ACLS(indent=>$input{indent}) == 3 ) {
		  $DATA{ACLS_FILE_VALID}=0;
	 }

    return 0;
}
################################################################################
# ;checkDMSRM
################################################################################
sub checkDMSRM
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
	    shortdesc=>"Check DMSRM.",
	    desc=>"See if DMSRM is active and responding");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"IBM.DMSRM") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # if it has a PID, try the lsaudrec command
	 `LC_ALL=C /usr/sbin/rsct/bin/lsrsrc IBM.ManagedNode 2>&1 > /dev/null`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"IBM.DMSRM is active but not able to list ManagedNode resources.\n");
		  addToReport(message=>"IBM.DMSRM is active but not able to list ManagedNode resources.\n");
		  $DATA{DAEMONS}{"IBM.DMSRM"}{responding}=0;
		  return 1;
	 }
	 $DATA{DAEMONS}{"IBM.DMSRM"}{responding}=1;
    return 0;
}
################################################################################
# ;checkCSMAgentRM
################################################################################
sub checkCSMAgentRM
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
	    shortdesc=>"Check CSMAgentRM",
	    desc=>"See if CSMAgentRM is active and responsive.");
    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"IBM.CSMAgentRM") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # if it has a PID, try the lsaudrec command
	 `LC_ALL=C /usr/sbin/rsct/bin/lsrsrc IBM.ManagementServer 2>&1 > /dev/null`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"IBM.CSMAgentRM not responding.\n");
		  addToReport(message=>"IBM.CSMAgentRM not responding.\n");
		  $DATA{DAEMONS}{"IBM.CSMAgentRM"}{responding}=0;
		  return 1;
	 }
	 $DATA{DAEMONS}{"IBM.CSMAgentRM"}{responding}=1;

    return 0;
}

################################################################################
# ;slurpCTRMC_ACLS
################################################################################
sub slurpCTRMC_ACLS
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

	 my $user_file      = "/var/ct/cfg/ctrmc.acls";
	 my $default_file   = "/usr/sbin/rsct/cfg/ctrmc.acls";
	 my $effective_file = $user_file;

	 if (!-f $user_file) {
                  $DATA{ACLS}{FILE_NAME} = $default_file;
         }
	 else {
		  $DATA{ACLS}{FILE_NAME} = $user_file;
	 }

	 my @ACLS = `LC_ALL=C cat $effective_file 2> /dev/null`;

	 if ( @ACLS == 0 ) {
		  TRACE($input{indent},$space,"$effective_file is empty, returning.\n");
		  return 2;
	 }
	 
	 my $comment_re= '^[\s\#]*\Z';
	 my $stanza_re = '^([\w\.]+)\s*';
	 my $entry_re  = '^\s+([@\w\.]+)\s+([\*\w]+)\s+([\*\w]+)\s*.*';

	 my %CTRMC_ACLS=();

	 foreach my $line ( @ACLS ) {
		  $lineno++;
		  
		  if ( $line =~ /$comment_re/ ) { next; }
		  
		  if ( $line =~ /$stanza_re/ ) {
				$current_stanza = $1;
				if ( $stanza_header == 1 ) {
					 TRACE("$current_stanza is empty on line $line, returning\n");
					 return 3;
				}
				$stanza_header=$1;
				$DATA{ACLS}{$current_stanza}={};
				next;
		  }
		  if ( $line =~ /$entry_re/ ) {
				$DATA{ACLS}{$current_stanza}{$1}{CR}   = $2;
				$DATA{ACLS}{$current_stanza}{$1}{perm} = $3;
				next;
		  }
	 }
}



################################################################################
# ;checkRemoteTarget
################################################################################
sub checkRemoteTarget
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Test setup against target(s) $ARGS{TARGETS}.",
				desc=>"This includes tests to confirm that authenticated RMC connections between ".
				"this machine and $ARGS{TARGETS} should work. To do this, we must collect some data from $ARGS{TARGETS}. ".
				"That data is collected by invoking $ME on $ARGS{TARGETS}. So, this means that rexec between these ".
				"machines must work and that the $PackageName package is installed on $ARGS{TARGETS}.");

	 my @targets = split (/,/,$ARGS{TARGETS});
	 

	 my $remote_hosts_count = 0;
	 foreach $target ( @targets ) {
		  $target =~ s/\s*//;
		  Show(indent=>"$input{indent}$space",
				 message=>"Checking remote target $target\n");

		  # Originally this script had a single target - $ARGS{TARGETS} and all functions
		  # used that. When I moved to multiple targets, this was the quick, but dirty, way 
		  # to support this. Should really pass the target to each function as needed....
		  $ARGS{TARGETS}=$target;

		  my $rc = 0;  
		  $rc = canPingTarget(indent=>"$input{indent}$space$space");
		  if ( $rc != 0 ) { 
				Show(indent=>"$input{indent}$space$space",
					  message=>"Since we cannot ping $ARGS{TARGETS}, no need to try to collect more data from it.\n");
				addToReport(message=>"Unable to ping $ARGS{TARGETS}");
				next;
		  }
		  $rc = collectRemoteData(indent=>"$input{indent}$space$space");
		  if ( $rc != 0 ) { 
				Show(indent=>"$input{indent}$space$space",
					  message=>"Since we cannot collect data from $ARGS{TARGETS}, no need to test further.\n");
				next;
		  }
		  
		  $remote_hosts_count++;

		  my @subtasks = ( \&checkRemoteDaemons,
								 \&checkRemotesRMCRemoteClientConnectionStatus,
								 \&checkIfHostnamesMatch,
								 \&checkRemoteTHL,
								 \&checkRemoteACL,
								 \&canDoRemoteLSRSRC,
								 \&checkRemoteFindings);
	  
		  foreach my $subtask ( @subtasks ) {
				$rc |= &$subtask(indent=>"$input{indent}$space$space");
				if  ( $rc != 0 && !$ARGS{KEEP_GOING} ) {
					 return 1;
				}
		  }
	 }
	
	 if ( $remote_hosts_count >= 1 ) {
		  my @subtasks = ( \&checkTargetNodeIDs );
		   foreach my $subtask ( @subtasks ) {
				$rc |= &$subtask(indent=>"$input{indent}$input{indent}$space");
				if  ( $rc != 0 && !$ARGS{KEEP_GOING} ) {
					 return 1;
				}
		  }
	 }
	 return 0;
}
################################################################################
# ;canPingTarget
################################################################################
sub canPingTarget
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},shortdesc=>"Can we ping $ARGS{TARGETS}?",
				desc=>"This is done just to verify that $ARGS{TARGETS} is reachable and alive.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

    use Net::Ping;
	 my $pingger = Net::Ping->new("icmp");
	 my $ret = $pingger->ping($ARGS{TARGETS});
	 $pingger->close();

	 if ( $ret ) {
		  if ( $ARGS{VERBOSE} ) { 
				Show(indent=>"$input{indent}$space",message=>"we can ping $ARGS{TARGETS}\n");
		  }
		  $DATA{TARGETS}{"$ARGS{TARGETS}"}{PINGABLE}=1;
		  return 0;
	 }
	 else {
		  Show(indent=>"$input{indent}$space",message=>"we cannot ping $ARGS{TARGETS}\n");
		  $DATA{TARGETS}{"$ARGS{TARGETS}"}{PINGABLE}=0;
		  return 1;
	 }
}
################################################################################
# ;CollectRemoteData
################################################################################
sub collectRemoteData
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},shortdesc=>"Collect data from $ARGS{TARGETS}.",
				desc=>"Invoke $ME on $ARGS{TARGETS} and gather its output.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( !$ARGS{TARGETS} || !$DATA{LOCALHOSTNAME} ) {
		  Show(indent=>"$input{indent}$space",message=>"Missing some data, so cannot do this test.\n");
		  return 1;
	 }

	 my $command = "$DATA{REXECCMD} $ARGS{TARGETS} $BaseDIR/DiagnoseHMC --export --target=$DATA{LOCALHOSTNAME} 2>&1"; 
	 my $ret = "";
	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",message=>"running $BaseDIR/DiagnoseHMC on $ARGS{TARGETS}\n");
	 }

	 TRACE($input{indent},$space,"running $command\n");

	 Show(indent=>"$input{indent}$space",message=>"working ");
	 open (RD, "LC_ALL=C $command |");
	 while ( <RD> ) {
		  if ( $_ =~ /invalid login name or password/ ) {
				my $password = $ARGS{REMOTE_PASSWORD}?$ARGS{REMOTE_PASSWORD}:"<none>";
				Show(indent=>"\n$input{indent}$space",message=>"$ARGS{REMOTE_USER}/$password is not valid username/password for $ARGS{TARGETS}\n");
				addToReport(message=>"Unable to collect data from $ARGS{TARGETS} since $ARGS{REMOTE_USER}/$password is not a ".
								"valid username/password. Provide correct values and run this script again.");
				close (RD);
				return 1;
		  }
		  elsif ( $_ =~ /must be run as root/ ) {
				Show(indent=>"\n$input{indent}$space",message=>"Must run $ME on $ARGS{TARGETS} as root.\n");
				addToReport(message=>"Unable to collect data from $ARGS{TARGETS} since we are not running $ME as root on $ARGS{TARGETS}. ".
								"Verify that rexec is setup to allow execution of programs on $ARGS{TARGETS} as user root. You can run this command ".
								"to check what id is used on the target machine:\n".
								"\t$DATA{REXECCMD} $ARGS{TARGETS} id");
				close (RD);
				return 1;
		  }
		  elsif ( $_ =~ /Name \(.*:root\):/ ) {
				Show(indent=>"\n$input{indent}$space",message=>"Rexec appears to not be setup between this machine and $ARGS{TARGETS}.\n");
				addToReport(message=>"Unable to collect data from $ARGS{TARGETS} since rexec appears to not be setup between this machine and $ARGS{TARGETS}. ".
								"Verify that rexec is setup to allow execution of programs on $ARGS{TARGETS} as user root. You can run this command - if you are ".
								"prompted for a name and a password, rexec is not setup correctly:\n\n".
								"\t$DATA{REXECCMD} $ARGS{TARGETS} ls\n\n".
								"You can check the HMC GUI - it has a way to enable rexec from the HMC to the LPARs...");
				close (RD);
				return 1;
		  }
		  elsif ( $_ =~ /$BaseDIR\/DiagnoseHMC/ ) {
				Show(indent=>"\n$input{indent}$space",message=>"$BaseDIR/DiagnoseHMC is not installed on $ARGS{TARGETS}.\n");
				addToReport(message=>"Unable to collect data from $ARGS{TARGETS} since $BaseDIR/DiagnoseHMC is not installed. ".
								"Install package $PackageName on $ARGS{TARGETS}.");
				close (RD);
				return 1;
		  }
		  elsif ( $_ =~ /Connection refused/ ) {
				Show(indent=>"\n$input{indent}$space",message=>"rexec connection to $ARGS{TARGETS} was refused.\n");
				addToReport(message=>"Unable to collect data from $ARGS{TARGETS} since rexec connection was refused. ".
								"Verify that rexec is setup to allow execution of programs on $ARGS{TARGETS} as user root. You can run this command ".
								"to check what id is used on the target machine and verify rexec works to $ARGS{TARGETS}:\n".
								"\t$DATA{REXECCMD} $ARGS{TARGETS} id");
				close (RD);
				return 1;
		  }
		  if ( $_ =~ /^\#/ ) { Show(message=>"."); }
		  $ret .= $_;
	 }
	 close (RD);
	 Show(message=>" done!\n");

	 eval $ret;
	 if ( !defined $VAR1 ) {
		  Show(indent=>"$input{indent}$space",message=>"Data returned from $ARGS{TARGETS} is not valid.\n");
		  addToReport(message=>"The data returned from $ARGS{TARGETS} was not valid.\n".
						  "This should not happen unless the $ME script on $ARGS{TARGETS} is not working.\n"
#						  "You can run this command to see what data was returned (it should be valid Perl code):\n$command"
						  );
		  return 1;
	 }
	 $DATA{TARGETS}{"$ARGS{TARGETS}"} = $VAR1;
         $VAR1=undef;
#	 push @{$DATA{TARGETS}},$VAR1;
    return 0;
}
################################################################################
# ;checkRemoteDaemons
################################################################################
sub checkRemoteDaemons
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Check that daemons are working on $ARGS{TARGETS}.",
				desc=>"This currently only checks that ctrmc and ctcasd are working on $ARGS{TARGETS}.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 my $rc = 0;
	 if ( $ARGS{VERBOSE} ) { 
		  Show(indent=>"$input{indent}$space",message=>"Checking ctrmc status on $ARGS{TARGETS}\n"); 
	 }
	 if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{ctrmc} ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctrmc is not registered with src on $ARGS{TARGETS}.\n");
		  if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{PKGS}{"rsct.core.utils"} ) {
				addToReport(message=>"ctrmc is not registered with src on $ARGS{TARGETS}. ".
								"It appears that rsct.core.utils needs to be installed on $ARGS{TARGETS}.");
		  }
		  else {
				addToReport(message=>"ctrmc is not registered with src on $ARGS{TARGETS}. ".
								"Unknown reason why - check using 'lssrc -a | grep rsct' on $ARGS{TARGETS}.");
		  }
		  $rc |= 1;
	 }
	 elsif ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{ctrmc}{pid} == -1 || 
				$DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{ctrmc}{responding} != 1 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctrmc is not working on $ARGS{TARGETS}.\n");
		  addToReport(message=>"ctrmc is not running on $ARGS{TARGETS}. ");
		  $rc |= 1;
	 } 
	 if ( $ARGS{VERBOSE} ) { 
		  Show(indent=>"$input{indent}$space",message=>"Checking ctcas status on $ARGS{TARGETS}\n"); 
	 }
	 if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{ctcas} ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctrmc is not registered with src on $ARGS{TARGETS}.\n");
		  if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{PKGS}{"rsct.core.utils"} ) {
				addToReport(message=>"ctrmc is not registered with src on $ARGS{TARGETS}. ".
								"It appears that rsct.core.utils needs to be installed on $ARGS{TARGETS}.");
		  }
		  else {
				addToReport(message=>"ctrmc is not registered with src on $ARGS{TARGETS}. ".
								"Unknown reason why - check using 'lssrc -a | grep rsct' on $ARGS{TARGETS}.");
		  }
		  $rc |= 1;
	 }
	 elsif ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{ctcas}{pid} != -1 && 
				$DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{ctcas}{responding} != 1 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"ctcas is not responding on $ARGS{TARGETS}.\n");
		  addToReport(message=>"ctcas is not responding on $ARGS{TARGETS}. ");
		  $rc |= 1;
	 } 
    return $rc;
}
################################################################################
# ;checkRemotesRMCRemoteClientConnectionStatus
################################################################################
sub checkRemotesRMCRemoteClientConnectionStatus
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Check that $ARGS{TARGETS} allows remote rmc connections.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }
	 if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{REMOTE_CLIENTS_ENABLED} ) {
		  Show(indent=>"$input{indent}$space",message=>"$ARGS{TARGETS} did not report remote RMC clients status.\n");
		  addToReport(message=>"$ARGS{TARGETS} did not report remote RMC clients status. You can check this manually ".
						  "by running 'lssrc -ls ctrmc' on $ARGS{TARGETS} and look for an line like ".
						  "'Logical Connection Information for Remote Clients'. ".
						  "If its present, then remote clients are enabled. If ctrmc is not running, check if /var/ct/cfg/ctrmc.rpe ".
						  "exists - if it does, then remote clients will be enabled when ctrmc next starts up.");
		  return 1;
	 }
	 elsif ($DATA{TARGETS}{"$ARGS{TARGETS}"}{REMOTE_CLIENTS_ENABLED} == 1 ) {
		  return 0;
	 }
	 else {
		  Show(indent=>"$input{indent}$space",message=>"Remote RMC clients are not enabled on $ARGS{TARGETS}.\n");
		  addToReport(message=>"Remote RMC clients are not enabled on $ARGS{TARGETS}. You can enable them by running on $ARGS{TARGETS} ".
						  "these commands :\n".
						  "\t/usr/sbin/rsct/bin/rmcctrl -z\n".
						  "\t/usr/sbin/rsct/bin/rmcctrl -q\n".
						  "\t/usr/sbin/rsct/bin/rmcctrl -s\n",
						  action=>sub {
								print "Running rmcctrl -z on $ARGS{TARGETS}\n";
								system("LC_ALL=C $DATA{REXECCMD} $ARGS{TARGETS} /usr/sbin/rsct/bin/rmcctrl -z");
								print "Running rmcctrl -q on $ARGS{TARGETS}\n";
								system("LC_ALL=C $DATA{REXECCMD} $ARGS{TARGETS} /usr/sbin/rsct/bin/rmcctrl -q");
								print "Running rmcctrl -s on $ARGS{TARGETS}\n";
								system("LC_ALL=C $DATA{REXECCMD} $ARGS{TARGETS} /usr/sbin/rsct/bin/rmcctrl -s");
						  });
		  return 1;
	 }
}

################################################################################
# ;checkIfHostnamesMatch
################################################################################
sub checkIfHostnamesMatch
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Verify hostnames resolve consistantly between this machine and $ARGS{TARGETS}.");
    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

    my $rc = 0;

	 # Does my hostname match what the target resolves it to?
	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"Checking that $ARGS{TARGETS} resolves this machines name to $DATA{LOCALHOSTNAME}\n");
	 }

	 if ( $DATA{LOCALHOSTNAME} && $DATA{TARGETS}{"$ARGS{TARGETS}"}{TARGETS}{RESOLVED_NAME} ) {
		  if ( $DATA{LOCALHOSTNAME} ne $DATA{TARGETS}{"$ARGS{TARGETS}"}{TARGETS}{RESOLVED_NAME} ) {
				Show(indent=>"$input{indent}$space$space",
					  message=>"$ARGS{TARGETS} does not resolve this machines name to $DATA{LOCALHOSTNAME}\n");

				addToReport(message=>"This machines hostname is '$DATA{LOCALHOSTNAME}', yet $ARGS{TARGETS} resolves ".
								"it to '$DATA{TARGETS}{$ARGS{TARGETS}}{TARGETS}{RESOLVED_NAME}'. Change name resolution setup ".
								"so that these machines resolve names consistantly with each other.\n");
				if ( !$ARGS{KEEP_GOING} ) { return 1; }
				$rc |= 1;
		  }
	 }

	 # Is what we resolve the target to a hostname that it has for itself?
	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"Checking that what this machine resolves $ARGS{TARGETS} to is a hostname that it has for itself.\n");
	 }

	 my $res = `LC_ALL=C $COMMANDS{getRemoteHostName} $ARGS{TARGETS} | awk '{print \$8}'`;
	 if ( $? == 0 ) {
		  chomp $res;
		  my %TargetsHostnames = ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{TARGETS}{CONNECTIVITY_NAME}, 1,
											$DATA{TARGETS}{"$ARGS{TARGETS}"}{LOCALHOSTNAME}, 1 ); 
		  
		  my $found = 0;
		  foreach my $hostname ( keys %TargetsHostnames ) { 
				if ( $hostname eq $res ) { $found = 1; last; }
		  }
		  if ( $found == 0 ) {
				Show(indent=>"$input{indent}$space",message=>"$ARGS{TARGETS} does not think that $res is one of its hostnames.\n");
				if ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSNAME} eq "AIX" && 
					  ($DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.2" || 
                                           $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.3" || 
                                           $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.1F" ) )
				{
					 my $base_message = "$ARGS{TARGETS} does not consider '$res' to be one of the hostnames that RMC uses (which is/are ".
						                 commafy("and",sort keys %TargetsHostnames)."), so $ARGS{TARGETS} will reject connections ".
											  "intended for '$res' (Note that '$res' is the hostname this machine resolves $ARGS{TARGETS} to.)";


					 if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{"IBM.CSMAgentRM"} ) {
						  addToReport(message=>"$base_message".
										  "Since $ARGS{TARGETS} is running $DATA{TARGETS}{$ARGS{TARGETS}}{OSNAME} $DATA{TARGETS}{$ARGS{TARGETS}}{OSVERSION}, ".
										  "you probably have changed some hostname settings for $ARGS{TARGETS}. CSMAgentRM on $ARGS{TARGETS} would normally ".
										  "detect and adjust for this hostname change in a few minutes, however it appears to not be registerd with src on $ARGS{TARGETS}.");
					 }
					 elsif ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{"IBM.CSMAgentRM"}{responding} == 1 ) {
						  addToReport(message=>"$base_message".
										  "Since $ARGS{TARGETS} is running $DATA{TARGETS}{$ARGS{TARGETS}}{OSNAME} $DATA{TARGETS}{$ARGS{TARGETS}}{OSVERSION}, ".
										  "you probably have changed some hostname settings for $ARGS{TARGETS}. CSMAgentRM on $ARGS{TARGETS} should detect ".
										  "and adjust for this hostname change in a few minutes. You can force it to try now by running ".
										  "'refrsrc IBM.ManagementServer' on $ARGS{TARGETS}.");
					 }
					 elsif ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{DAEMONS}{"IBM.CSMAgentRM"}{pid} == -1 ) {
						  addToReport(message=>"$base_message".
										  "Since $ARGS{TARGETS} is running $DATA{TARGETS}{$ARGS{TARGETS}}{OSNAME} $DATA{TARGETS}{$ARGS{TARGETS}}{OSVERSION}, ".
										  "you probably have changed some hostname settings for $ARGS{TARGETS}. CSMAgentRM on $ARGS{TARGETS} would normally ".
										  "detect and adjust for this hostname change in a few minutes, however it appears that its not running on $ARGS{TARGETS}.");
					 }
					 else {
						  addToReport(message=>"$base_message".
										  "Since $ARGS{TARGETS} is running $DATA{TARGETS}{$ARGS{TARGETS}}{OSNAME} $DATA{TARGETS}{$ARGS{TARGETS}}{OSVERSION}, ".
										  "you probably have changed some hostname settings for $ARGS{TARGETS}. CSMAgentRM on $ARGS{TARGETS} would normally ".
										  "detect and adjust for this hostname change in a few minutes, however it appears that its not for some reason. ".
										  "Check the report for the findings on $ARGS{TARGETS} for any hints as to why its not.");
					 }
				}

				else {
					 addToReport(message=>"$base_message".
									 "Correct the name resolution problems so that $ARGS{TARGETS} thinks one of its hostnames ".
									 "is $res OR that we use some hostname for the remote target from its list of hostnames shown above.");
				}

				if ( !$ARGS{KEEP_GOING} ) { return 1; }

				$rc |= 1;
		  }
	 }

	 if ( !$DATA{TARGETS}{"$ARGS{TARGETS}"}{TARGETS}{CONNECTIVITY_NAME} )
	 {
		  Show(indent=>"$input{indent}$space",message=>"$ARGS{TARGETS} will use the ".$DATA{TARGETS}{"$ARGS{TARGETS}"}{TARGETS}{CONNECTIVITY_IP}.
				 " adaptor to connect back to us, but it cannot resolve that IP address to a hostname.\n");
		  addToReport(message=>"$ARGS{TARGETS} will use the ".$DATA{TARGETS}{"$ARGS{TARGETS}"}{TARGETS}{CONNECTIVITY_IP}.
						  " adaptor to connect back to this machine, but it cannot resolve that IP address to a hostname.");

		  if ( !$ARGS{KEEP_GOING} ) { return 1; }
		  $rc |= 1;
	 }
	 
    return 0;

}
################################################################################
# ;checkRemoteTHL
################################################################################
sub checkRemoteTHL
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Check THL file on $ARGS{TARGETS}.",
				desc=>"We look for an entry in $ARGS{TARGETS}'s THL file with our public key under our hostname.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( defined $DATA{TARGETS}{"$ARGS{TARGETS}"} ) {

		  if ( $DATA{TARGETS}{$ARGS{TARGETS}}{THL_VALID} ne "true" ) {
				Show(indent=>"$input{indent}$space",
					  message=>"$ARGS{TARGETS} does not have a valid THL file.\n");
				addToReport(message=>"$ARGS{TARGETS} does not have a valid THL file.\n");
				return 1;
		  }

		  if ( ! defined $DATA{TARGETS}{$ARGS{TARGETS}}{THL}{$DATA{LOCALHOSTNAME}} ) {

				# no entry for us under $DATA{LOCALHOSTNAME}

				Show(indent=>"$input{indent}$space",
					  message=>"$ARGS{TARGETS} does not have an entry in its THL file for $DATA{LOCALHOSTNAME}.\n");

				if ( $DATA{PK}{meth} && $DATA{PK}{key} ) {
					 addToReport(message=>"$ARGS{TARGETS} does not have an entry in its THL file for $DATA{LOCALHOSTNAME}.\n".
									 "This could be a result of a recent hostname change of this machine and no CSM refresh having been completed ".
									 "yet between this machine and $ARGS{TARGETS}. It could also be simply that no CSM setup has ever ".
									 "been done between this machine and $ARGS{TARGETS}. Since there are many reasons this could occur, I will ".
									 "not try to list them all nor dig deeper to see what it may be.\n".
									 "However, if you just want to get this machines public key into the THL file on $ARGS{TARGETS}, run this command ".
									 "on $ARGS{TARGETS} (on a single line!):\n".
									 "\t/usr/sbin/rsct/bin/ctsthl -a -n $DATA{LOCALHOSTNAME} -m $DATA{PK}{meth} -p $DATA{PK}{key}\n",
									 action=> sub {
										  print "Running\n\t'/usr/sbin/rsct/bin/ctsthl -a -n $DATA{LOCALHOSTNAME} -m $DATA{PK}{meth} -p $DATA{PK}{key}'\non $ARGS{TARGETS}";
										  system("LC_ALL=C $DATA{REXECCMD} $ARGS{TARGETS} /usr/sbin/rsct/bin/ctsthl -a -n $DATA{LOCALHOSTNAME} -m $DATA{PK}{meth} -p $DATA{PK}{key}");
									 });
				}
				else {
					 
					 # we are missing our own public key !

					 if ( $DATA{DAEMONS}{ctcas}{pid} == -1 ) {

						  if ( $DATA{REMOTE_CLIENTS_ENABLED} != 1 ) {
								# ctcas is not running and remote RMC clients are *not* enabled
								addToReport(message=>"$ARGS{TARGETS} does not have an entry in its THL file for $DATA{LOCALHOSTNAME}.\n".
												"However, it seems that this machine has no public key anyway, so you need to fix that problem first. ".
												"Since ctcas is not running and remote RMC clients are not enabled, you can run these commands to try to ".
												"get things going again:\n".
												"\t/usr/sbin/rsct/bin/rmcctrl -z\n".
												"\t/usr/sbin/rsct/bin/rmcctrl -q\n".
												"\t/usr/sbin/rsct/bin/rmcctrl -s\n",
												action=>\&action_enableRemoteRMCClients);										  
						  }
						  else {
								# ctcas is not running and remote RMC clients are enabled
								addToReport(message=>"$ARGS{TARGETS} does not have an entry in its THL file for $DATA{LOCALHOSTNAME}.\n".
												"However, it seems that this machine has no public key anyway, so you need to fix that problem first. ".
												"Since ctcas is not running, you can starting it with this command:\n".
												"\tstartsrc -s ctcas\n",
												action=>sub {print "Running 'startsrc -s ctcas'\n"; system("LC_ALL=C startsrc -s ctcas"); });
						  }
					 }
					 else {
						  # ctcas is running, so why dont we have a public key???
						  addToReport(message=>"$ARGS{TARGETS} does not have an entry in its THL file for $DATA{LOCALHOSTNAME}.\n".
										  "However, it seems that this machine has no public key anyway, so you need to fix that problem first. ".
										  "Since ctcas is running, the file should be present. Unknown reason why this machine has no public key. ".
										  "Try running the command '/usr/sbin/rsct/bin/ctskeygen -d' to see if it gives any clues.",
										  action=> sub {
												print "Running '/usr/sbin/rsct/bin/ctskeygen -d' to check why me seem to be missing a public key\n"; 
												system("LC_ALL=C /usr/sbin/rsct/bin/ctskeygen -d"); 
										  });
					 }
				}
		  }
		  elsif ( $DATA{TARGETS}{$ARGS{TARGETS}}{THL}{$DATA{LOCALHOSTNAME}}{meth} ne  $DATA{PK}{meth} ) {
				# generation method does not match
				addToReport(message=>"Out THL does not have the correct PK for $ARGS{TARGETS}.");
		  }
		  elsif ( $DATA{TARGETS}{$ARGS{TARGETS}}{THL}{$DATA{LOCALHOSTNAME}}{key} ne  $DATA{PK}{key} ) {
				addToReport(message=>"Out THL does not have the correct PK for $ARGS{TARGETS}.");
		  }

	 }



	 # TODO - be sure our THL has the correct PK from $ARGS{TARGETS}



    return 0;
}
################################################################################
# ;checkRemoteACL
################################################################################
sub checkRemoteACL
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},
				shortdesc=>"Check RMC ACL file on $ARGS{TARGETS}.",
				desc=>"If $ARGS{TARGETS} is an LPAR (and therefore we are running on the HMC), we look for entries ".
				"that grant this machine read/write access to all needed resources. If $ARGS{TARGETS} is ".
				"an HMC (and therefore we are running on an LPAR), then we only look for a valid ACL file, ie, we dont care what entries are present.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }
    
	 if ( $DATA{TYPE} eq "HMC" && $DATA{TARGETS}{"$ARGS{TARGETS}"}{TYPE} eq "LPAR" ) {

		  if ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS_FILE_VALID} == 0 ) {
				Show(indent=>"$input{indent}$space",
					  message=>"$ARGS{TARGETS}'s RMC ACL file does not appear to be valid. This could be ".
					  "the result of ctrmc being down on $ARGS{TARGETS}.\n");
				addToReport(message=>"$ARGS{TARGETS}'s RMC ACL file does not appear to be valid. This could be ".
					  "the result of ctrmc being down on $ARGS{TARGETS}.\n");
				return 1;
		  }

		  my $stanza_name = "IBM.ServiceEvent";

		  if (  $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.2" ||
                        $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.3" ||
				 ($DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.1" && $DATA{TARGETS}{"$ARGS{TARGETS}"}{FIX_LEVEL} ge "03")) {  
				$stanza_name = "DEFAULT";
		  }

		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Checking for a 'root\@$DATA{LOCALHOSTNAME} * rw' entry in the $stanza_name stanza.\n");
		  }

		  if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@$DATA{LOCALHOSTNAME}"} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"$ARGS{TARGETS}'s RMC ACL file does not have an entry in the ".
					  "$stanza_name stanza for 'root\@$DATA{LOCALHOSTNAME}'\n");
				addToReport(message=>"$ARGS{TARGETS}'s RMC ACL file does not have an entry in the ".
								"$stanza_name stanza for 'root\@$DATA{LOCALHOSTNAME}'\n");
				return 1;
		  }


		  if ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@$DATA{LOCALHOSTNAME}"}{CR} ne "*" || 
				 $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@$DATA{LOCALHOSTNAME}"}{perm} ne "rw" )
		  {
				Show(indent=>"$input{indent}$space",
					  message=>"$ARGS{TARGETS}'s RMC ACL does have an entry in the $stanza_name stanza for 'root\@$DATA{LOCALHOSTNAME}', but its wrong!\n");
				addToReport(message=>"$ARGS{TARGETS}'s RMC ACL does have an entry in the $stanza_name stanza for 'root\@$DATA{LOCALHOSTNAME}', but its wrong!\n".
								"The current entry is this:\n".
								"\troot\@$DATA{LOCALHOSTNAME}\t ".
								$DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@$DATA{LOCALHOSTNAME}"}{CR}."\t ".
								$DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@$DATA{LOCALHOSTNAME}"}{perm}." \n".
								"This entry should be:\n".
								"\troot\@$DATA{LOCALHOSTNAME}\t *\t rw\n");
				return 1;
		  }
		  
		  if (  $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.2" ||
                        $DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.3" ||
				 ($DATA{TARGETS}{"$ARGS{TARGETS}"}{OSVERSION} eq "5.1" && $DATA{TARGETS}{"$ARGS{TARGETS}"}{FIX_LEVEL} ge "02")) {  
		  
				if ( $ARGS{VERBOSE} ) {
					 Show(indent=>"$input{indent}$space",
							message=>"Checking for a 'root\@0x$DATA{NODEID} * rw' entry in the $stanza_name stanza.\n");
				}
				
				if ( !defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@0x$DATA{NODEID}"} ) {
					 Show(indent=>"$input{indent}$space",
							message=>"$ARGS{TARGETS}'s RMC ACL file does not have an entry in the $stanza_name stanza for 'root\@0x$DATA{NODEID}'\n");
					 addToReport(message=>"$ARGS{TARGETS}'s RMC ACL file does not have an entry in the $stanza_name stanza for 'root\@0x$DATA{NODEID}'\n");
					 return 1;
				}
				
				if ( $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@0x$DATA{NODEID}"}{CR} ne "*" || 
					  $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@0x$DATA{NODEID}"}{perm} ne "rw" )
				{
					 Show(indent=>"$input{indent}$space",
							message=>"$ARGS{TARGETS}'s RMC ACL does have an entry in the $stanza_name stanza for 'root\@0x$DATA{NODEID}', but its wrong!\n");
					 
					 addToReport(message=>
									 "$ARGS{TARGETS}'s RMC ACL does have an entry in the $stanza_name stanza for 'root\@0x$DATA{NODEID}', but its wrong!\n".
									 "The current entry is this:\n".
									 "\troot\@0x$DATA{NODEID}\t ".
									 $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@0x$DATA{NODEID}"}{CR}."\t ".
									 $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS}{$stanza_name}{"root\@0x$DATA{NODEID}"}{perm}." \n".
									 "This entry should be:\n".
									 "\troot\@0x$DATA{NODEID}\t *\t rw\n");
					 return 1;
				}
		  }
		  # all tests passed, so return success.
		  return 0;
		  
	 }
	 elsif ( $DATA{TYPE} eq "LPAR" && $DATA{TARGETS}{"$ARGS{TARGETS}"}{TYPE} eq "HMC" ) {

		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Checking for a syntactically correct RMC ACL file on HMC $ARGS{TARGETS}.\n");
		  }

		  if ( defined $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS_FILE_VALID} && 
				 $DATA{TARGETS}{"$ARGS{TARGETS}"}{ACLS_FILE_VALID} == 1 ) {
				return 0;
		  }
		  Show(indent=>"$input{indent}$space",
				 message=>"$ARGS{TARGETS}'s RMC ACL file does seem to be valid.\n");
		  addToReport(message=>"$ARGS{TARGETS}'s RMC ACL file seem to be valid.\n");
		  return 1;
	 }

	 Show(indent=>"$input{indent}$space",
			message=>"Unsupported usage of $DATA{TYPE} to $DATA{TARGETS}{$ARGS{TARGETS}}{TYPE}.\n");
	 addToReport(message=>"Unsupported usage of $DATA{TYPE} to $DATA{TARGETS}{$ARGS{TARGETS}}{TYPE}.\n");
	 return 1;
}
################################################################################
# ;canDoRemoteLSRSRC
################################################################################
sub canDoRemoteLSRSRC
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},shortdesc=>"Can we do a remote lsrsrc to $ARGS{TARGETS}?",
				desc=>"Run 'CT_CONTACT=$ARGS{TARGETS} lsrsrc -s IBM.Host' and see what result we get. If this works without error, ".
				"then we know that RMC authentication is working from this machine to $ARGS{TARGETS}.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

    TRACE($input{indent},$space,"running CT_CONTACT=$ARGS{TARGETS} lsrsrc\n");
	 my $ret = `LC_ALL=C CT_CONTACT=$ARGS{TARGETS} /usr/sbin/rsct/bin/lsrsrc 2>&1`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"Cannot run CT_CONTACT=$ARGS{TARGETS} lsrsrc\n");
		  addToReport(message=>"Cannot run CT_CONTACT=$ARGS{TARGETS} lsrsrc\n".
						  "Error was [$ret]");
		  TRACE(indent=>"$input{indent}$space","got error from command [$ret]\n");
		  return 1;
	 }
	 TRACE($input{indent},$space,"got no errors from command\n");


	 if ( $DATA{TYPE} eq "HMC" ) {
		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",message=>"Can we run CT_CONTACT=$ARGS{TARGETS} lsrsrc IBM.ServiceEvent?\n");
		  }

		  TRACE($input{indent},$space,"running CT_CONTACT=$ARGS{TARGETS} lsrsrc IBM.ServiceEvent\n");

		  my $ret = `LC_ALL=C CT_CONTACT=$ARGS{TARGETS} /usr/sbin/rsct/bin/lsrsrc IBM.ServiceEvent 2>&1`;
		  if ( $? != 0 ) {
				Show(indent=>"$input{indent}$space",
					  message=>"Cannot run CT_CONTACT=$ARGS{TARGETS} lsrsrcIBM.ServiceEvent \n");
				addToReport(message=>"Cannot run CT_CONTACT=$ARGS{TARGETS} lsrsrcIBM.ServiceEvent \n".
								"Error was [$ret]");
				TRACE($input{indent},$space,"got error from command [$ret]\n");
				return 1;
		  }
		  TRACE($input{indent},$space,"got no errors from command\n");
	 }

    return 0;
}

################################################################################
# ;checkRemoteFindings
################################################################################
sub checkRemoteFindings
{
    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    Display(indent=>$input{indent},shortdesc=>"Were any errors reported by $ME when run on $ARGS{TARGETS}",
				desc=>"Check the output of $ME when it was run on $ARGS{TARGETS} for any reported findings.");

    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }
	 my $summary="";
	 foreach my $finding ( sort keys %{$DATA{TARGETS}{"$ARGS{TARGETS}"}{FINDINGS}} ) {
		  # key will be of the "i" form - see end of CollectExportData() for how this data is set.
		  my $type = $DATA{TARGETS}{"$ARGS{TARGETS}"}{FINDINGS}{$finding}{type};
		  if ($type){$type="($type)";} else {$type="";}
		  $summary .= "  [$finding]$type $DATA{TARGETS}{$ARGS{TARGETS}}{FINDINGS}{$finding}{message}\n";
	 }

	 # TODO - the summary needs to be word wrapped in the Show() call. Its OK in the report since all findings
	 # are wrapped.
	 if ( $summary ne "" ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"$ME on $ARGS{TARGETS} reports the following findings (some may be repeated above):\n$summary");
		  addToReport(message=>"$ME on $ARGS{TARGETS} reports the following findings:\n$summary");
	 }
}

################################################################################
# ;checkTargetNodeIDs
################################################################################
sub checkTargetNodeIDs
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
				shortdesc=>"Check that each machine has a unique node id.",
				desc=>"All OS images must have a unique node id. Verify that this is the case.");
    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 my %NodeIDs={};
	 push @{$NodeIDs{$DATA{NODEID}}},$DATA{LOCALHOSTNAME};
	 if ( $ARGS{VERBOSE} ) {
		  Show(indent=>"$input{indent}$space",message=>"Node id is $DATA{NODEID} on this machine.\n");
	 }
	 my @matches=();
	 
	 foreach my $target ( keys %{$DATA{TARGETS}} ) {
		  if ( $ARGS{VERBOSE} ) {
				Show(indent=>"$input{indent}$space",message=>"Node is is $DATA{TARGETS}{$target}{NODEID} on $target.\n");
		  }
		  push @{$NodeIDs{$DATA{TARGETS}{$target}{NODEID}}},$target;
	 }
	 
	 foreach my $node_id ( keys %NodeIDs ) {
		  if ( $#{$NodeIDs{$node_id}} > 0 ) {
				my $list = commafy("and",sort @{$NodeIDs{$node_id}});
				Show(indent=>"$input{indent}$space",
					  message=>"ct_node_id $node_id is the same on hosts $list\n");
				addToReport(message=>"ct_node_id $node_id is the same on hosts $list. ".
								"Run /usr/sbin/rsct/install/bin/recfgct on all (save one) of these machines. ".
								"Note that you will loose all data in the registry if you do this.",
								action=>sub {
									 shift @{$NodeIDs{$node_id}}; # dont need to run on one target, so skip the first one...
									 foreach my $target ($NodeIDs{$node_id}) {
										  print "Running /usr/sbin/rsct/install/bin/recfgct on $target\n";
										  print "Note that you will loose all data in the registry if you do this. Shall I try [y/n]";
										  my $YN = <stdin>;
										  print "\n";
										  if ( $YN =~ /[Yy]/ ) {
												system("LC_ALL=C $DATA{REXECCMD} $target /usr/sbin/rsct/bin/install/recfgct");										  
										  }
									 }
								});
		  }
	 }
}

################################################################################
# ;checkDRM
################################################################################
sub checkDRM
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
				shortdesc=>"Check DRM.",
	    desc=>"Verify that DRM is active.");
    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"IBM.DRM") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # TODO - verify that DRM is responsive

    return 0;
}
################################################################################
# ;checkLparCmdRM
################################################################################
sub checkLparCmdRM
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
				shortdesc=>"Check LparCmdRM.",
	    desc=>"Verify that LparCmdRM is active.");
    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"IBM.LparCmdRM") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 # TODO - verify that LparCmdRM is responsive

    return 0;
}
################################################################################
# ;checkSFP 
################################################################################
sub checkSFP 
{
	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");
    
    Display(indent=>$input{indent},
				shortdesc=>"Check ServiceRM.",
	    desc=>"Verify that ServiceRM is active.");
    if ( $ARGS{DISPLAY_ONLY} ) { return 0; }

	 if ( getSRCDaemonPID(indent=>"$input{indent}",subsystem=>"IBM.ServiceRM") != 0 ) 
	 {
		  # the function will have reported errors already, so we dont need to report more.
		  return 1;
	 }

	 `LC_ALL=C /usr/sbin/rsct/bin/lsrsrc IBM.ServiceEvent 2>&1 > /dev/null`;
	 if ( $? != 0 ) {
		  Show(indent=>"$input{indent}$space",
				 message=>"IBM.ServiceRM not responding.\n");
		  addToReport(message=>"IBM.ServiceRM not responding.\n");
		  $DATA{DAEMONS}{"IBM.ServiceRM"}{responding}=0;
		  return 1;
	 }
	 $DATA{DAEMONS}{"IBM.ServiceRM"}{responding}=1;

    return 0;
}
################################################################################
# ;CollectExportData
################################################################################
sub CollectExportData
{

    my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

	 checkLocalRMC();

	 my $ret = `LC_ALL=C $COMMANDS{getRemoteHostName} $ARGS{TARGETS} | awk '{print \$8}'`;
	 if ( $? == 0 ) {
		  chomp $ret;
		  $DATA{TARGETS}{RESOLVED_NAME} = $ret;
	 }

	 $ret = `LC_ALL=C /opt/csm/csmbin/getSourceIP2Target $ARGS{TARGETS}`;
	 if ( $? == 0 ) {
		  chomp $ret;
		  $DATA{TARGETS}{CONNECTIVITY_IP}   = $ret;
		  $DATA{TARGETS}{CONNECTIVITY_NAME} = gethostbyaddr(Socket::inet_aton($ret), Socket::AF_INET);
	 }
	 elsif ( $? == 2 ) {
		  $DATA{TARGETS}{RESOLVABLE} = 0;
	 }

	 if ( $DATA{TYPE} eq "HMC" ) {
		  checkDMSRM();
		  checkLparCmdRM();
    }
    else {
		  checkCSMAgentRM();
		  if ( $DATA{OSVERSION} eq "5.2" || 
                       $DATA{OSVERSION} eq "5.3" ) {
				checkDRM();
		  }
    }

	 checkSFP();

	 $DATA{SCRIPT_VERSION}=$VERSION;

	 # append any found error or warning messages to $DATA
	 foreach $finding ( @Report ) {
		  $count++;
		  my ($message, $action, $type) = @$finding;
		  if ( $type ) {$type = "($type)";}
		  $DATA{FINDINGS}{$count}{type}=$type;
		  $DATA{FINDINGS}{$count}{message}=$message;
	 }

}

################################################################################
# ;usage
################################################################################
sub usage
{
    print 
		  "\n",
		  "Version $VERSION\n\n",
		  "Usage: $ME [options]\n\n",
		  "Options:\n",
		  "--quiet       : do not print steps as they are taken\n",
		  "--verbose     : be more verbose than usual\n",
		  "--keepgoing   : dont stop as errors are found, ie, keep going\n",
		  "--displayonly : just show what tests would be done, but dont actually do\n",
        "                them\n",
		  "--action=     : corrective action mode - 1 means ask, 9 means just do it.\n",
		  "                Default is dont take any corrective actions\n",
		  "--trace       : turn trace on. Trace info will be sent to $TRACE_FILE by\n",
		  "                default.\n",
		  "--tracefile=  : location to send trace information. This option does not\n",
		  "                enable the trace file: use the --trace option for that.\n",
		  "--target=     : name(s) of remote machine to test connection with\n",
		  "                Note: If a target is provided, a password must also be\n",
		  "                provided. This can be done either with the --password\n",
		  "                option or via the REXEC_PASS environment variable.\n",
		  "                For remote testing to be done, rexec must be enabled\n",
		  "                between this machine and the target. Also, this script\n",
		  "                must be installed on the remote target in $BaseDIR with\n",
		  "                a name of 'DiagnoseHMC'.\n",
		  "                You can pass multiple targets, each separted by a comma, but\n",
		  "                if you do, put quotes around the list of target names.\n",
		  "--password=   : password for user root each target - used in calls to rexec\n",
		  "                on the target.\n";

# Future work - get the wrap() idea working...
#  	 print wrap("\t--quiet       : ",$id,"do not print steps as they are taken\n");
#  	 print wrap("\t--verbose     : ",$id,"be more verbose than usual\n");
#  	 print wrap("\t--keepgoing   : ",$id,"dont stop as errors are found, ie, keep going\n");
#  	 print wrap("\t--displayonly : ",$id,"just show what tests would be done, but dont actually do them\n");
#  	 print wrap("\t--action=     : ",$id,"corrective action mode - 1 means ask, 2 means just do it. Default is dont take any corrective actions\n");
#  	 print wrap("\t--trace       : ",$id,"turn trace on. Trace info will be sent to $TRACE_FILE by default.\n");
#  	 print wrap("\t--tracefile=  : ",$id,"location to send trace information.\n");
#  	 print wrap("\t--target=     : ",$id,"name of remote machine to test connection with\n");
#  	 print wrap($id,$id,"Note: If the target is provided, a password must also be provided. This can be done either with\n".
#  					"the --password option or via the REXEC_PASS environment variable. ".
#  					"For remote testing to be done, rexec must be enabled between this machine and the target.\n".
#  					"Also, the $PackageName package must be installed on the remote target.\n");
#	 print wrap("\t--password=   :",$id,"password for user root on target - used in calls to rexec on the target.\n");


	 print "\n",
	 "example: Diagnose local system only\n",
	 "\n\t$ME\n\n",
	 "example: Diagnose local system and test connection with 'LPAR1'\n",
	 "\n\t$ME --target=LPAR1 --password=passw0rd\n\n",
	 "";
    exit 1;
}
################################################################################
# ;checkArgs
################################################################################
sub checkArgs
{

	 TRACE((caller(0))[3]," called\n");

	 $ARGS{REMOTE_USER} = "root";  # hard coded for now....

#	 foreach $arg (sort keys %ARGS ) { print "\$ARGS{$arg}=[$ARGS{$arg}]\n";}

	 if ( $ARGS{EXPORT_DATA} ) {
#		  $ARGS{QUIET_MODE}      = 1;
		  $ARGS{REMOTE_PASSWORD} = " ";
		  $ARGS{KEEP_GOING}      = 1;
		  $CommentChar ="#";
	 }

    if ( $ARGS{EXPORT_DATA} && !$ARGS{TARGETS}  ) { 
		  print "Must provide a target when using the exportdata option\n"; usage(); 
	 }

	 my $PASSWORD = $ARGS{REMOTE_PASSWORD} ? $ARGS{REMOTE_PASSWORD} : $ENV{REXEC_PASS};

	 if ( $ARGS{TARGETS} && !$PASSWORD ) {
		  TRACE("no REXEC_PASSWORD passed - using NULL\n");
		  $ARGS{REMOTE_PASSWORD} = "";
	 }
         else
         {
            $ARGS{REMOTE_PASSWORD} = $PASSWORD;
         }

    if ( $ARGS{VERBOSE} && $ARGS{QUIET_MODE} ) { 
		  print "Cant be verbose and quiet at the same time.\n"; usage(); 
	 }
    if ( defined $ARGS{ACTION_MODE} && !($ARGS{ACTION_MODE} == 1 || $ARGS{ACTION_MODE} == 9) ) { 
		  print "$ARGS{ACTION_MODE} is not a valid value for the action option.\n"; usage(); 
	 }
    if ( defined $ARGS{QUIET_MODE} && defined $ARGS{DISPLAY_ONLY} ) {
		  print "Cant be quiet and display tasks at the same time.\n"; usage(); 
    }
}

################################################################################
# ;setOSName
# Get the OS name and confirm its one we know about
################################################################################
sub setOSName {

	 my %input = @_;
	 TRACE($input{indent},(caller(0))[3]," called\n");

    my $OS = `LC_ALL=C uname -a`;
    if ( $OS =~ /Linux/ ) {
                  $DATA{TYPE} = "HMC";

                  if (-f "/etc/redhat-release" )
                  {
                     $DATA{OSNAME}     = "Linux";
                     $DATA{REXECCMD} = "REXEC_USER=$ARGS{REMOTE_USER} REXEC_PASS=$ARGS{REMOTE_PASSWORD} rexec"; 
#                    $DATA{OSVERSION}  = `LC_ALL=C cat /etc/redhat-release  | awk '{print \$5}'`;
#                    chomp $DATA{OSVERSION};
#		     $DATA{OSVENDOR}   = `LC_ALL=C cat /etc/redhat-release  | awk '{print \$1" "\$2}'`;
#		     chomp $DATA{OSVENDOR};		  
                  }
                  else
                  {
                     $DATA{OSNAME} = "MCPLinux";
                     $DATA{REXECCMD} = "rexec -l $ARGS{REMOTE_USER} -p $ARGS{REMOTE_PASSWORD}"; 
                  }

                  # Currently, OSVERSION only matters for LPAR, not for
                  # the HMC.  So we will just set it to 0. 
                  $DATA{OSVERSION} = "0";
		  
    }
    elsif ( $OS =~ /AIX/ ) {
	
                  $DATA{TYPE}     = "LPAR";
		  $DATA{OSNAME}   = "AIX";
                  $DATA{REXECCMD} = "None"; 
#		  $DATA{OSVENDOR} = "IBM";
		  
		  $OS = `LC_ALL=C oslevel 2>&1`;
		  if ( $OS =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/ ) {
				$DATA{OSVERSION} = "$1.$2";
		  }

		  $OS = `LC_ALL=C oslevel -r 2>&1`;
		  if ( $OS =~ /(\d+)-(\d+)/ ) {
				$DATA{FIX_LEVEL} = "$2";
		  }

    }
    else {
		  abort("Unknown OS type $OS - cannot continue",1);
    }
}

################################################################################
# Action sub routines - called by auto-fix code. Dont call these directly!
################################################################################
sub action_enableRemoteRMCClients
{ 
	 print "Enabling remote RMC clients:\n";
	 print "Stopping rsct\n";           system("LC_ALL=C /usr/sbin/rsct/bin/rmcctrl -z");
	 print "Enabling remote clients\n"; system("LC_ALL=C /usr/sbin/rsct/bin/rmcctrl -q");
	 print "Starting rsct\n";           system("LC_ALL=C /usr/sbin/rsct/bin/rmcctrl -s");
}

################################################################################
# ;Show
################################################################################
sub Show
{  
	 my %input = @_;
    if ( !$ARGS{QUIET_MODE} ) {
		  print wrap ("$CommentChar$input{indent}","$CommentChar$input{indent}", $input{message} );
    }
}

################################################################################
# ;Display
################################################################################
sub Display
{
    my %input = @_;
    if ( !$ARGS{QUIET_MODE} ) {
		  my $desc = $input{shortdesc};
		  if ( $ARGS{VERBOSE} ) {
				$desc .= " $input{desc}";
		  }
		  print wrap("$CommentChar$input{indent}- ","$CommentChar$input{indent}  ",$desc);
		  print "\n";
    }
}
################################################################################
# ;GetTermWidth
################################################################################
sub GetTermWidth
{
    #until we get one of the below methods to work....
    return 80;

#    die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
#    open(TTY, "+</dev/tty")                     or die "No tty: $!";
#    unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
#	  die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
#    }
#    ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
#    print "(row,col) = ($row,$col)";
#    print "  (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
#    print "\n";
    
#    use Term::ReadKey;
#    return GetTerminalSize();
    
}

################################################################################
# ;dumpDATA
################################################################################
sub dumpDATA
{
    print "#############################  %DATA  ##########################################\n";
    print Dumper(\%DATA);
    print "################################################################################\n";
}

################################################################################
# ;addToReport
################################################################################
sub addToReport
{
    my %input = @_;
    push (@Report, [$input{message}, $input{action}, $input{type}]);
}

################################################################################
# ;PrintReport
################################################################################
sub PrintReport
{
	 my %input = @_;
    TRACE($input{indent},(caller(0))[3]," called\n");

    my $count = 0;
    if ( @Report ) {
		  print "------------------------ Findings ----------------------------\n";
    }
    foreach $finding ( @Report ) {
		  $count++;
		  my ($message, $action, $type) = @$finding;

		  if ( $type ) {$type = "($type)";}

		  print wrap ("","","($count) $type $message\n");

		  if ( $action ) {
				my $doit = 0;   
				if ( $ARGS{ACTION_MODE} == 1 ) {
					 print "\nI can try to correct this for you. Shall I try [y/n]? ";
					 my $YN = <stdin>;
					 print "\n";
					 if ( $YN =~ /[Yy]/ ) {
						  $doit = 1;
					 }
				}
				elsif ( $ARGS{ACTION_MODE} == 9 ) {
					 $doit = 1;
				}
				
				if ( $doit == 1 ) {
					 &$action();
				}
		  }
		  print "------------------------------------------------------\n";
    }
}
################################################################################
# ;TRACE
################################################################################
sub TRACE
{
    if ( $ARGS{TRACE_ON} == 1 ) {
		  print TRACEFILE @_; 
    }
}

# TODO
# Get AIX level set to 5.1F, 5.1D, etc
# Check that we are running as root
# Collect time on LPAR and HMC - cannot be more than 90 days different

# uuencoded Sub-commands -  edit at your own peril!
__DATA__
#
begin 755 getLocalHostName.linux
M?T5,1@$!`0````````````(``P`!````4(0$"#0````X"P```````#0`(``&
M`"@`&@`9``8````T````-(`$"#2`!`C`````P`````4````$`````P```/0`
M``#T@`0(](`$"!,````3````!`````$````!``````````"`!`@`@`0(@`<`
M`(`'```%`````!````$```"`!P``@)<$"("7!`@@`0``.`$```8`````$```
M`@```-@'``#8EP0(V)<$",@```#(````!@````0````$````"`$```B!!`@(
M@00((````"`````$````!````"]L:6(O;&0M;&EN=7@N<V\N,@``!````!``
M```!````1TY5```````"`````@````4````#````#`````L````$````"@``
M`````````````0````(````#``````````4````&``````````@````'````
M"0````````````````````````";````M(,$"($````B````:0```,2#!`@8
M````$@```#````#4@P0(K````"(```")````Y(,$",H````2````&@```/2#
M!`@R````$@```"$````$A`0(G0```"(```!=````%(0$"(`````2````3P``
M`"2$!`BW`0``$@```$@````TA`0(:````!(```!Z````I(8$"`0````1``X`
M`0``````````````(`````!?7V=M;VY?<W1A<G1?7P!L:6)C+G-O+C8`<')I
M;G1F`%]?8WAA7V9I;F%L:7IE`%]?9&5R96=I<W1E<E]F<F%M95]I;F9O`&UE
M;7-E=`!G971H;W-T8GEN86UE`&=E=&AO<W1N86UE`%]?97)R;F]?;&]C871I
M;VX`7TE/7W-T9&EN7W5S960`7U]L:6)C7W-T87)T7VUA:6X`7U]R96=I<W1E
M<E]F<F%M95]I;F9O`$=,24)#7S(N,2XS`$=,24)#7S(N,``````"``(``@`"
M``(``P`"``(``@`!`````0`"`!`````0`````````',?:0D```,`L0```!``
M```0:6D-```"`+T`````````U)<$"`8+``"PEP0(!P$``+27!`@'`@``N)<$
M"`<#``"\EP0(!P0``,"7!`@'!0``Q)<$"`<&``#(EP0(!P<``,R7!`@'"```
MT)<$"`<)``!5B>6#[`CHW0```)#H<P$``.B.`@``R</_-:B7!`C_):R7!`@`
M````_R6PEP0(:`````#IX/____\EM)<$"&@(````Z=#_____);B7!`AH$```
M`.G`_____R6\EP0(:!@```#IL/____\EP)<$"&@@````Z:#_____)<27!`AH
M*````.F0_____R7(EP0(:#````#I@/____\ES)<$"&@X````Z7#_____)="7
M!`AH0````.E@____````````````````,>U>B>&#Y/!05%)H<(8$"&B,@P0(
M459H4(4$".AS____](GV58GE4U#H`````%N!PR83``"+@S````"%P'0"_]"+
M7?S)PXGVD)"0D)"0D)!5B>6#[`B+%8R7!`B%TG5)BQ6(EP0(BP*%P'0:C70F
M`(U"!*.(EP0(_Q*+%8B7!`B+"H7)=>JXU(,$"(7`=!"#[`QHD)<$".CH_O__
M@\00N`$```"CC)<$"(GL7<.-=@!5B>6#[`B)[%W#C;8`````5;BT@P0(B>6#
M[`B%P'05@^P(:*"8!`AHD)<$".B#_O__@\00B>Q=PY"-M"8`````58GE@^P(
MB>Q=PXVV`````%6)Y8'L&`$``(/L!&@``0``:@"-A?C^__]0Z,7^__^#Q!#'
MA?3^__\`````@^P(:``!``"-A?C^__]0Z(3^__^#Q!"`O?C^__\`=&R#[`R-
MA?C^__]0Z'G^__^#Q!")P(F%]/[__X.]]/[__P!T(8/L"(N%]/[___\P:,"&
M!`CH(/[__X/$$+@`````ZU")]H/L"(/L".C9_?__@\0(B<")P/\P:`"'!`CH
M]OW__X/$$+@"````ZR:#[`B#[`CHL?W__X/$"(G`B<#_,&A`AP0(Z,[]__^#
MQ!"X`0```,G#58GE4X/L!*&4EP0(NY27!`B#^/]T%HUV`(V\)P````"#ZP3_
MT(L#@_C_=?186UW#58GE@^P(B>Q=PXVV`````%6)Y5-2Z`````!;@<,J$0``
MC78`Z!?^__^+7?S)PP````````````````````````,````!``(`````````
M````````````````````````4E-#5"!#=%-E8R!N86UE(&9O<B!L;V-A;"!H
M;W-T.B`E<PH``````````````````````````````````````$-A;FYO="!R
M97-O;'9E(&QO8V%L(&AO<W0@;F%M92`H97)R;F\@)60I"@``````````````
M``````````````!#86YN;W0@;V)T86EN(&AO<W0@;F%M92!F;W(@;&]C86P@
M<WES=&5M("AE<G)N;R`E9"D*``````````````````````````"@EP0(````
M``````#_____`````/____\`````V)<$"```````````NH,$",J#!`C:@P0(
MZH,$"/J#!`@*A`0(&H0$""J$!`@ZA`0(``````$````0````#````(R#!`@-
M````<(8$"`0````H@00(!0```"R"!`@&````;($$"`H```"Q````"P```!``
M```5``````````,```"DEP0(`@```$@````4````$0```!<```!$@P0($0``
M`#R#!`@2````"````!,````(````_O__;PR#!`C___]O`0```/#__V_T@@0(
M````````````````````````````````````````````````````````````
M`````$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W
M+C$@,BXY-BTY-RD``$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA
M="!,:6YU>"`W+C$@,BXY-BTY-RD``$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S
M,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTY."D``$=#0SH@*$=.52D@,BXY
M-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTY."D``$=#0SH@
M*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTY
M."D``$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W
M+C$@,BXY-BTY-RD`"``````````!````,#$N,#$````(``````````$````P
M,2XP,0````@``````````0```#`Q+C`Q````"``````````!````,#$N,#$`
M```(``````````$````P,2XP,0````@``````````0```#`Q+C`Q`````"YS
M>6UT86(`+G-T<G1A8@`N<VAS=')T86(`+FEN=&5R<``N;F]T92Y!0DDM=&%G
M`"YH87-H`"YD>6YS>6T`+F1Y;G-T<@`N9VYU+G9E<G-I;VX`+F=N=2YV97)S
M:6]N7W(`+G)E;"YD>6X`+G)E;"YP;'0`+FEN:70`+G!L=``N=&5X=``N9FEN
M:0`N<F]D871A`"YD871A`"YE:%]F<F%M90`N8W1O<G,`+F1T;W)S`"YG;W0`
M+F1Y;F%M:6,`+G-B<W,`+F)S<P`N8V]M;65N=``N;F]T90``````````````
M```````````````````````````````````````````;`````0````(```#T
M@`0(]````!,```````````````$`````````(P````<````"````"($$"`@!
M```@```````````````$`````````#$````%`````@```"B!!`@H`0``1```
M``0`````````!`````0````W````"P````(```!L@00(;`$``,`````%````
M`0````0````0````/P````,````"````+(($""P"``#'```````````````!
M`````````$<```#___]O`@```/2"!`CT`@``&`````0``````````@````(`
M``!4````_O__;P(````,@P0(#`,``#`````%`````0````0`````````8P``
M``D````"````/(,$"#P#```(````!``````````$````"````&P````)````
M`@```$2#!`A$`P``2`````0````+````!`````@```!U`````0````8```",
M@P0(C`,``!@```````````````0`````````>P````$````&````I(,$"*0#
M``"@```````````````$````!````(`````!````!@```%"$!`A0!```(`(`
M````````````$`````````"&`````0````8```!PA@0(<`8``!X`````````
M``````0`````````C`````$````"````H(8$"*`&``#@```````````````@
M`````````)0````!`````P```("7!`B`!P``$```````````````!```````
M``":`````0````,```"0EP0(D`<```0```````````````0`````````I```
M``$````#````E)<$")0'```(```````````````$`````````*L````!````
M`P```)R7!`B<!P``"```````````````!`````````"R`````0````,```"D
MEP0(I`<``#0```````````````0````$````MP````8````#````V)<$"-@'
M``#(````!0`````````$````"````,`````!`````0```*"8!`B@"```````
M`````````````0````````#&````"`````,```"@F`0(H`@``!@`````````
M``````0`````````RP````$``````````````*`(``!$`0`````````````!
M`````````-0````'``````````````#D"0``>````````````````0``````
J```1`````P``````````````7`H``-H```````````````$`````````
`
end
begin 755 getRemoteHostName.linux
M?T5,1@$!`0````````````(``P`!````X(,$"#0```!P"@```````#0`(``&
M`"@`&@`9``8````T````-(`$"#2`!`C`````P`````4````$`````P```/0`
M``#T@`0(](`$"!,````3````!`````$````!``````````"`!`@`@`0(P`8`
M`,`&```%`````!````$```#`!@``P)8$","6!`@8`0``,`$```8`````$```
M`@```!`'```0EP0($)<$",@```#(````!@````0````$````"`$```B!!`@(
M@00((````"`````$````!````"]L:6(O;&0M;&EN=7@N<V\N,@``!````!``
M```!````1TY5```````"`````@````4````#````"@````D````$````"```
M`````````````0````(````#``````````4`````````!@````<`````````
M````````````````B````&2#!`B!````(@```%8```!T@P0(&````!(````P
M````A(,$"*P````B````=@```)2#!`C*````$@```!H```"D@P0(,@```!(`
M```A````M(,$")T````B````2````,2#!`BW`0``$@```&<````$A@0(!```
M`!$`#@`!```````````````@`````%]?9VUO;E]S=&%R=%]?`&QI8F,N<V\N
M-@!P<FEN=&8`7U]C>&%?9FEN86QI>F4`7U]D97)E9VES=&5R7V9R86UE7VEN
M9F\`9V5T:&]S=&)Y;F%M90!?7V5R<FYO7VQO8V%T:6]N`%])3U]S=&1I;E]U
M<V5D`%]?;&EB8U]S=&%R=%]M86EN`%]?<F5G:7-T97)?9G)A;65?:6YF;P!'
M3$E"0U\R+C$N,P!'3$E"0U\R+C`````"``(``@`"``(``P`"``$````!``(`
M$````!``````````<Q]I"0```P">````$````!!I:0T```(`J@`````````,
MEP0(!@D``/"6!`@'`0``])8$"`<"``#XE@0(!P,``/R6!`@'!````)<$"`<%
M```$EP0(!P8```B7!`@'!P``58GE@^P(Z+T```"0Z%,!``#H/@(``,G#_S7H
ME@0(_R7LE@0(`````/\E\)8$"&@`````Z>#_____)?26!`AH"````.G0____
M_R7XE@0(:!````#IP/____\E_)8$"&@8````Z;#_____)0"7!`AH(````.F@
M_____R4$EP0(:"@```#ID/____\E")<$"&@P````Z8#___\`````````````
M```Q[5Z)X8/D\%!44FC0A00(:#R#!`A15FC@A`0(Z)/____TB?95B>534.@`
M````6X'#UA(``(N#*````(7`=`+_T(M=_,G#B?:0D)"0D)"0D%6)Y8/L"(L5
MS)8$"(72=4F+%<B6!`B+`H7`=!J-="8`C4($H\B6!`C_$HL5R)8$"(L*A<EU
MZKB$@P0(A<!T$(/L#&C0E@0(Z`C___^#Q!"X`0```*/,E@0(B>Q=PXUV`%6)
MY8/L"(GL7<.-M@````!5N&2#!`B)Y8/L"(7`=!6#[`AHV)<$"&C0E@0(Z*/^
M__^#Q!")[%W#D(VT)@````!5B>6#[`B)[%W#C;8`````58GE@^P(@WT(`G0<
M@^P(BT4,_S!H((8$".BF_O__@\00N`$```#K>L=%_`````"#[`R+10R#P`3_
M,.BE_O__@\00B<")1?R#??P`=">#[`2+1?S_,(M%#(/`!/\P:$"&!`CH7?[_
M_X/$$+@`````ZS&-=@"#[`2#[`SH%?[__X/$#(G`B<#_,(M%#(/`!/\P:("&
M!`CH*O[__X/$$+@"````R<.0D)"0D)"0D)"0D)!5B>53@^P$H=26!`B[U)8$
M"(/X_W06C78`C;PG`````(/K!/_0BP.#^/]U]%A;7<-5B>6#[`B)[%W#C;8`
M````58GE4U+H`````%N!PPH1``"-=@#H1_[__XM=_,G#````````````````
M`````````P````$``@````````````````````````````````!5<V%G93H@
M)7,@/')E;6]T95]H;W-T/@H``````````%)30U0@0W1396,@;F%M92!F;W(@
M<F5M;W1E(&AO<W0@)7,Z("5S"@````````````````````````````````!#
M86YN;W0@<F5S;VQV92!R96UO=&4@:&]S="`E<R`H97)R;F\@)60I"@``````
M``````````````````````````````````#@E@0(``````````#_____````
M`/____\`````$)<$"```````````:H,$"'J#!`B*@P0(FH,$"*J#!`BZ@P0(
MRH,$"``````!````$`````P````\@P0(#0```-"%!`@$````*($$"`4````$
M@@0(!@```&2!!`@*````G@````L````0````%0`````````#````Y)8$"`(`
M```X````%````!$````7````!(,$"!$```#\@@0($@````@````3````"```
M`/[__V_,@@0(____;P$```#P__]ON(($"```````````````````````````
M``````````````````````````````````````!'0T,Z("A'3E4I(#(N.38@
M,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3<I``!'0T,Z("A'
M3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3<I
M``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ
M(#(N.38M.3@I``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@
M3&EN=7@@-RXQ(#(N.38M.3@I``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@
M*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3@I``!'0T,Z("A'3E4I(#(N.38@
M,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3<I``@`````````
M`0```#`Q+C`Q````"``````````!````,#$N,#$````(``````````$````P
M,2XP,0````@``````````0```#`Q+C`Q````"``````````!````,#$N,#$`
M```(``````````$````P,2XP,0`````N<WEM=&%B`"YS=')T86(`+G-H<W1R
M=&%B`"YI;G1E<G``+FYO=&4N04))+71A9P`N:&%S:``N9'EN<WEM`"YD>6YS
M='(`+F=N=2YV97)S:6]N`"YG;G4N=F5R<VEO;E]R`"YR96PN9'EN`"YR96PN
M<&QT`"YI;FET`"YP;'0`+G1E>'0`+F9I;FD`+G)O9&%T80`N9&%T80`N96A?
M9G)A;64`+F-T;W)S`"YD=&]R<P`N9V]T`"YD>6YA;6EC`"YS8G-S`"YB<W,`
M+F-O;6UE;G0`+FYO=&4`````````````````````````````````````````
M````````````````&P````$````"````](`$"/0````3```````````````!
M`````````",````'`````@````B!!`@(`0``(```````````````!```````
M```Q````!0````(````H@00(*`$``#P````$``````````0````$````-P``
M``L````"````9($$"&0!``"@````!0````$````$````$````#\````#````
M`@````2"!`@$`@``M````````````````0````````!'````____;P(```"X
M@@0(N`(``!0````$``````````(````"````5````/[__V\"````S(($",P"
M```P````!0````$````$`````````&,````)`````@```/R"!`C\`@``"```
M``0`````````!`````@```!L````"0````(````$@P0(!`,``#@````$````
M"P````0````(````=0````$````&````/(,$"#P#```8```````````````$
M`````````'L````!````!@```%2#!`A4`P``@```````````````!`````0`
M``"``````0````8```#@@P0(X`,``/`!`````````````!``````````A@``
M``$````&````T(4$"-`%```>```````````````$`````````(P````!````
M`@````"&!`@`!@``P```````````````(`````````"4`````0````,```#`
ME@0(P`8``!````````````````0`````````F@````$````#````T)8$"-`&
M```$```````````````$`````````*0````!`````P```-26!`C4!@``"```
M````````````!`````````"K`````0````,```#<E@0(W`8```@`````````
M``````0`````````L@````$````#````Y)8$".0&```L```````````````$
M````!````+<````&`````P```!"7!`@0!P``R`````4`````````!`````@`
M``#``````0````$```#8EP0(V`<```````````````````$`````````Q@``
M``@````#````V)<$"-@'```8```````````````$`````````,L````!````
M``````````#8!P``1`$``````````````0````````#4````!P``````````
M````'`D``'@```````````````$`````````$0````,``````````````)0)
6``#:```````````````!````````````
`
end
begin 755 check_ctcasd.linux
M?T5,1@$!`0````````````(``P`!````@),$"#0```"TTP$``````#0`(``&
M`"@`&P`:``8````T````-(`$"#2`!`C`````P`````4````$`````P```/0`
M``#T@`0(](`$"!,````3````!`````$````!``````````"`!`@`@`0(@+,!
M`("S`0`%`````!````$```"`LP$`@$,&"(!#!@C$&P``!!P```8`````$```
M`@```&S.`0!L7@8(;%X&"-@```#8````!@````0````$````"`$```B!!`@(
M@00((````"`````$````!````"]L:6(O;&0M;&EN=7@N<V\N,@``!````!``
M```!````1TY5```````"`````@````4```!#````3@```!\```!+````,@``
M`"D````'````30`````````X````/P```!L````[````(0```$H`````````
M0````"0``````````````$(````````````````````Z````&@```#P````0
M````'@```#`````T````/@`````````F````&````!4````#````3````#D`
M```*````(P```$<```!%````)P```$@`````````0P```"@`````````````
M```````N````00```$8`````````$P````P````9````-P``````````````
M-@````````!)````(``````````+````````````````````````````````
M````````````````````````````````````````````````````"0``````
M```````````````````````````````````%````````````````````````
M``\````-````#@`````````4```````````````7``````````0````<````
M```````````(````)0``````````````````````````````````````````
M`````````"\`````````,0`````````&````$@```!8````=``````````$`
M```M````-0`````````"`````````"P`````````$0`````````K````````
M`$0`````````/0```"H`````````,P```"(`````````````````````````
MM````%R/!`@J````$@```/<"``!LCP0(10```!(```"+`P``?(\$"#X````2
M````ZP(``(R/!`@'````$@```&L!``"<CP0(?0```!(```![`0``K(\$"(``
M```2````A`,``+R/!`AG`0``$@```,<!``#,CP0(\0```!(```"&`@``W(\$
M"#(````2````;````&Q>!@@`````$0#Q_R8#``#LCP0(5@```!(````R````
M_(\$"$H````2````U0$```R0!`C"````$@```$\#```<D`0()@```!(```"_
M`@``+)`$""8````2````7````#R0!`A$````$@```,4```!,D`0(XP4``!(`
M``#<`@``7)`$""T````2`````P,``&R0!`@Z````$@```!$#``!\D`0(.@``
M`!(```"X`@``C)`$"$P````2````&`,``)R0!`@'````$@```$$#``"LD`0(
MA@```!(```#G`0``O)`$"'D!```2````5@,``,R0!`C\"P``$@```(L!``#<
MD`0(+@```!(````\````[)`$"&T````2````QP(``/R0!`@^````$@```-0`
M```,D00(8P(``!(```!U````-(\$"``````2``L`_0$``!R1!`CJ````$@``
M`*,"```LD00(<@(``!(```!_`@``1%\&"`0````1`!<`-@(``#R1!`AC````
M(@```)8#``!,D00(+P,``!(````M`P``7)$$"#,````2````.P,``&R1!`@.
M````$@```'L```!\D00(>`4``!(```#Q`@``C)$$"#H````2````?0,``)R1
M!`BO````$@```.<```"LD00(R@0``!(```#W````O)$$"$D````2````S0(`
M`,R1!`@O````$@````8!``#<D00(-@```!(````+`@``[)$$"$T!```2````
MI0,``$1?!@@`````$0#Q_YL!``#\D00(,P```!(```"J`0``#)($")H"```2
M````:P,``!R2!`C*````$@```!4!```LD@0(E0```!(````>`P``/)($"#P#
M```2````Y`(``$R2!`BJ`0``$@```(,```#@Q04(`````!(`#@")````7)($
M"%4````2````C0(``&R2!`@G````$@```-0"``!\D@0(N0$``!(```"4`@``
MC)($")T````B````9@,``)R2!`@K````$@```)X#``!$7P8(`````!$`\?^1
M````5%T&"``````1`/'_D0,``*R2!`C[````$@```+$#``"$7P8(`````!$`
M\?\M````O)($"%$````2````8`,``,R2!`@.````$@```"0!``#<D@0(B@,`
M`!(````T`P``[)($"$,````2````)0```/R2!`A/````$@````D#```,DP0(
MG````!(````\`0``'),$"'`````2````J@(``$A?!@@$````$0`7`$T````$
MQ@4(!````!$`#P`@````+),$"%$````2````3`$``#R3!`@,`0``$@```+$"
M``!,DP0(/0```!(```!.`@``7),$"$8````B`````0``````````````(```
M`'@"``!LDP0(,````!(`````7U]G;6]N7W-T87)T7U\`;&EB<'1H<F5A9"YS
M;RXP`')E8W8`8V]N;F5C=`!S96YD`&YA;F]S;&5E<`!?7V5R<FYO7VQO8V%T
M:6]N`%])3U]S=&1I;E]U<V5D`&-L;W-E`&QI8G-R8RYS;P!?1%E.04U)0P!?
M:6YI=`!S<F-S=')T`%]F:6YI`'-R8W-T870`7T=,3T)!3%]/1D93151?5$%"
M3$5?`&QI8F-T7W-E8RYS;P!T<E]R96-O<F1?9&%T85\Q`&-U7VEC;VYV7W-T
M<E\Q`&-U7V=E=%]P<F]C<W!E961?,0!C=5]I8V]N=E]O<&5N7S$`8W5?9V5T
M7V5R<F]R7S$`8W5?<V5T7V5R<F]R7S$`=')?<F5C;W)D7VED7S$`=')?<F5G
M:7-T97)?8V]M<&]N96YT7S$`8W5?<'-E=%]E<G)O<E\Q`'-E8U]R96QE87-E
M7V)U9F9E<@!L:6)C=%]C=2YS;P!C=5]A<&MG7V5R<F]R7S$`8W5?9V5T7V5R
M<FUS9U\Q`&-U7W)E;%]E<G)M<V=?,0!C=5]R96Q?97)R;W)?,0!C=5]I8V]N
M=E]C;&]S95\Q`&QI8F-T7W1R+G-O`'1R7W-E=%]S:7IE7S$`=')?9V5T7V9I
M;&5N86UE7S$`=')?<V5T7W1R86-E7VQE=F5L<U\Q`'1R7V=E=%]S:7IE7S$`
M=')?<V5T7V9I;&5N86UE7S$`;&EB<W1D8RLK+6QI8F,V+C(M,BYS;RXS`%]?
M9&5R96=I<W1E<E]F<F%M95]I;F9O`%]?<F5G:7-T97)?9G)A;65?:6YF;P!L
M:6)M+G-O+C8`;&EB8RYS;RXV`'-T<F-P>0!S=&1O=70`9V5T<&ED`&UE;6-P
M>0!?7V-X85]F:6YA;&EZ90!M86QL;V,`;W!T87)G`'-O8VME=`!S96QE8W0`
M:7-S<&%C90!C:&UO9`!S=')T;VP`<W1R<F-H<@!F<')I;G1F`'-T<F-A=`!N
M=&]H;`!C:&1I<@!N;%]L86YG:6YF;P!U;6%S:P!S=')N8W!Y`'5N;&EN:P!H
M=&]N;`!R96%L;&]C`'-T<F1U<`!G971O<'0`;65M<V5T`&YT;VAS`%]?87-S
M97)T7V9A:6P`<W1R8VUP`'-E=&QO8V%L90!H=&]N<P!A=&]I`%]?;&EB8U]S
M=&%R=%]M86EN`'-T<FQE;@!S=')C:'(`;6MD:7(`9G)E90!?7WAS=&%T`%]E
M9&%T80!?7V)S<U]S=&%R=`!?96YD`$=,24)#7S(N,`!'3$E"0U\R+C$N,P``
M`````@`"``(```````(````"``$``@`#`````@`"``,````"``(``@`"``(`
M`@````(````#``(````!`````@`"`````@`"``(````"``(```````(`````
M``$```````(````"``(``0````(``@`$``(``0`!``(``0`#``(````"``,`
M`@````(``0`#`````@```````@`!``$`$````!`````@````$&EI#0```P"V
M`P````````$``@!N`@``$`````````!S'VD)```$`,`#```0````$&EI#0``
M`@"V`P```````&A>!@@&3```1%\&"`4A``!(7P8(!48``&!=!@@'`0``9%T&
M"`<"``!H708(!P,``&Q=!@@'!```<%T&"`<%``!T708(!P8``'A=!@@'!P``
M?%T&"`<(``"`708(!PD``(1=!@@'"P``B%T&"`<,``",708(!PT``)!=!@@'
M#@``E%T&"`</``"8708(!Q```)Q=!@@'$0``H%T&"`<2``"D708(!Q,``*A=
M!@@'%```K%T&"`<5``"P708(!Q8``+1=!@@'%P``N%T&"`<8``"\708(!QD`
M`,!=!@@'&@``Q%T&"`<;``#(708(!QP``,Q=!@@''0``T%T&"`<?``#4708(
M!R```-A=!@@'(@``W%T&"`<C``#@708(!R0``.1=!@@')0``Z%T&"`<F``#L
M708(!R<``/!=!@@'*```]%T&"`<I``#X708(!RH``/Q=!@@'*P```%X&"`<L
M```$7@8(!RT```A>!@@'+P``#%X&"`<P```07@8(!S$``!1>!@@',@``&%X&
M"`<S```<7@8(!S0``"!>!@@'-@``)%X&"`<W```H7@8(!S@``"Q>!@@'.0``
M,%X&"`<Z```T7@8(!ST``#A>!@@'/P``/%X&"`=```!`7@8(!T$``$1>!@@'
M0@``2%X&"`=#``!,7@8(!T0``%!>!@@'10``5%X&"`=(``!87@8(!TD``%Q>
M!@@'2@``8%X&"`=+``!D7@8(!TT``%6)Y8/L".AE!```D.C[!```Z%8V`0#)
MP_\U6%T&"/\E7%T&"`````#_)6!=!@AH`````.G@_____R5D708(:`@```#I
MT/____\E:%T&"&@0````Z<#_____)6Q=!@AH&````.FP_____R5P708(:"``
M``#IH/____\E=%T&"&@H````Z9#_____)7A=!@AH,````.F`_____R5\708(
M:#@```#I</____\E@%T&"&A`````Z6#_____)81=!@AH2````.E0_____R6(
M708(:%````#I0/____\EC%T&"&A8````Z3#_____)9!=!@AH8````.D@____
M_R64708(:&@```#I$/____\EF%T&"&AP````Z0#_____)9Q=!@AH>````.GP
M_O___R6@708(:(````#IX/[___\EI%T&"&B(````Z=#^____):A=!@AHD```
M`.G`_O___R6L708(:)@```#IL/[___\EL%T&"&B@````Z:#^____);1=!@AH
MJ````.F0_O___R6X708(:+````#I@/[___\EO%T&"&BX````Z7#^____)<!=
M!@AHP````.E@_O___R7$708(:,@```#I4/[___\ER%T&"&C0````Z4#^____
M)<Q=!@AHV````.DP_O___R70708(:.````#I(/[___\EU%T&"&CH````Z1#^
M____)=A=!@AH\````.D`_O___R7<708(:/@```#I\/W___\EX%T&"&@``0``
MZ>#]____)>1=!@AH"`$``.G0_?___R7H708(:!`!``#IP/W___\E[%T&"&@8
M`0``Z;#]____)?!=!@AH(`$``.F@_?___R7T708(:"@!``#ID/W___\E^%T&
M"&@P`0``Z8#]____)?Q=!@AH.`$``.EP_?___R4`7@8(:$`!``#I8/W___\E
M!%X&"&A(`0``Z5#]____)0A>!@AH4`$``.E`_?___R4,7@8(:%@!``#I,/W_
M__\E$%X&"&A@`0``Z2#]____)11>!@AH:`$``.D0_?___R487@8(:'`!``#I
M`/W___\E'%X&"&AX`0``Z?#\____)2!>!@AH@`$``.G@_/___R4D7@8(:(@!
M``#IT/S___\E*%X&"&B0`0``Z<#\____)2Q>!@AHF`$``.FP_/___R4P7@8(
M:*`!``#IH/S___\E-%X&"&BH`0``Z9#\____)3A>!@AHL`$``.F`_/___R4\
M7@8(:+@!``#I</S___\E0%X&"&C``0``Z6#\____)41>!@AHR`$``.E0_/__
M_R5(7@8(:-`!``#I0/S___\E3%X&"&C8`0``Z3#\____)5!>!@AHX`$``.D@
M_/___R547@8(:.@!``#I$/S___\E6%X&"&CP`0``Z0#\____)5Q>!@AH^`$`
M`.GP^____R5@7@8(:``"``#IX/O___\E9%X&"&@(`@``Z=#[__\`````,>U>
MB>&#Y/!05%)HX,4%"&@TCP0(459H@)0$".A[_O__](GV58GE4U#H`````%N!
MPZ;)`0"+@Q0!``"%P'0"_]"+7?S)PXGVD)"0D)"0D)!5BQ6,0P8(B>6#[`B%
MTG5)BQ6(0P8(BP*%P'0:C70F`(U"!*.(0P8(_Q*+%8A#!@B+"H7)=>JX/)$$
M"(7`=!"#[`QH0%T&".@@_?__@\00N`$```"CC$,&"(GL7<.-=@!5B>6#[`B)
M[%W#C;8`````58GEN%R3!`B#[`B%P'05@^P(:$Q?!@AH0%T&".C[_O__@\00
MB>Q=PY"-M"8`````58GE@^P(B>Q=PXVV`````%6)Y8'L1!$``%?'A?#O__\`
M````QX7L[___`````,>%X.___P````"-A?SO__^)A=CO__^#Q/AJ+XM%#(L0
M4NBX_?__@\00B<"C1$<&"(,]1$<&"`!U#8M%#(L0B15$1P8(ZP;_!41'!@B-
MM@````"#Q/RA0$<&"%"+10Q0BT4(4.A6_/__@\00B<")A?3O__^#O?3O____
M=0;IM@```)"+A?3O__^#^&QT18/X;'\0@_AF=!OIC@```(VV`````(/X<W1+
M@_AV=';K?(UT)@"#Q/QH_P\``*%(7P8(4&A@1P8(Z*3]__^#Q!#K8XUV`(/$
M_&@`!```H4A?!@A0:&!7!@CHA/W__X/$$.M#C78`@\3TH4A?!@A0Z/[\__^#
MQ!")P*-D6P8(@3UD6P8(```0`'X*QP5D6P8(```!`.L0_P5(1P8(ZPCK!HVV
M`````.D;____Z"88`0"#Q/1H8$<&".@%_/__@\00@\3TH61;!@A0Z-3Y__^#
MQ!"#Q/1H8%<&".BT^O__@\00#[8%VEL&"(7`=`J#^`%T"NLCC78`Z=\```"#
MQ/AJ96B(Q@4(Z/C[__^#Q!#IR````(UT)@"-A=3O__\/MQ6-Q@4(9HF5U.__
M_Z"/Q@4(B(76[___C870[___BQ60Q@4(B970[___C8W0[___B8W,[___@SU(
M1P8(`'0,C874[___B87,[___@\3\@\3TBX7,[___4.CX^O__@\00B<"-4`%2
MBX7,[___4(/$]&A@5P8(Z-OZ__^#Q!")P(U0`5)H8%<&"&H$:&1;!@B#Q/1H
M8$<&".BY^O__@\00B<"-4`%2:&!'!@AJ!&IF:(C&!0CH7?C__X/$,.L`QX7H
M[___`P```,>%^.___P````"#O>CO__\`=07IF@P``&;'1?X`$(/$^(V%Z.__
M_U"+A=CO__]0C47^4&H`:)3&!0AHFL8%".@*^___@\0@B<")A>SO__^#O>SO
M__\`#X4["P``#[]%_HU0BL>%Q.[__Q^%ZU&+A<3N___WXHG1P>D%B8WD[___
M#[8%VEL&"(/X`7\(A<!\!.L`ZRZ#Q/QJ!(V%Z.___U!J!(V%Y.___U!J`FIJ
M:(C&!0CHE_?__X/$(.L&C;8`````QX7,[___`````(VV`````(N%S.___SN%
MY.___WP%Z9T*```/M@7:6P8(@_@!?Q&%P'P-ZP#I:0$``(VV`````(N%V.__
M_XN-S.___XG*P>("`<J-#)4``````<J-#)4`````@\!V#[\4`8F5R.___XN%
MV.___XN-S.___XG*P>("`<J-#)4``````<J-#)4`````@\!X#[\4`8F5Q.__
M_X/$](/$](N5S.___XG0P>`"`="-%(4``````="-%(4`````C4)VB<(#E=CO
M__^-0D50Z/7X__^#Q!")P(U0`5*+E<SO__^)T,'@`@'0C12%``````'0C12%
M`````(U"=HG"`Y78[___C4)%4(/$](N5S.___XG0P>`"`="-%(4``````="-
M%(4`````C4)VB<(#E=CO__^-0@10Z(SX__^#Q!")P(U0`5*+E<SO__^)T,'@
M`@'0C12%``````'0C12%`````(U"=HG"`Y78[___C4($4&H$C87$[___4&H$
MC87([___4&H$C87,[___4&H%:FMHB,8%".CN]?__@\1`ZP"+A=CO__^+C<SO
M__^)RL'B`@'*C0R5``````'*C0R5`````(/`=F:#/`$1#X7@"```BX78[___
MBXW,[___B<K!X@(!RHT,E0`````!RHT,E0````"#P'@/MQ0!2@^_PH/X"@^'
MFP@``(L$A=C&!0C_X`^V!=I;!@B%P'0"ZP7I?@(``(N5S.___XG0P>`"`="-
M%(4``````="-%(4`````C4)VB<(#E=CO__^-0@2)A<3O___'A<CO__\`````
MBX7$[___@#@`=07I%`(``)"+A<3O__^`.`!T(X/$](N%Q.___P^V$%+HS?7_
M_X/$$(G`A<!U"NL&C;8`````ZP[_A<3O___KR(VV`````(N%Q.___X`X`'4%
MZ<4!``"#Q/AJ((N%Q.___U#H&_7__X/$$(G`B87$[___BX7$[___@#@`=0GI
MF0$``(UT)@"0BX7$[___@#@`="2#Q/2+A<3O__\/MA!2Z$[U__^#Q!")P(7`
M=0OK!XVT)@````#K#O^%Q.___^O'C;8`````BX7$[___@#@`=07I10$``(/$
M_&H*C87$[___4(N%Q.___U#HI/;__X/$$(F%R.___XN%Q.___X`X`'4D@\3T
MBX7$[___#[804NC>]/__@\00B<"%P'4)ZPR-M"8`````Z?````#'A<CO__\`
M````@\3X:B"+A<3O__]0Z#ST__^#Q!")P(F%Q.___XN%Q.___X`X`'4*Z;H`
M``"0C70F`)"+A<3O__^`.`!T)(/$](N%Q.___P^V$%+H;O3__X/$$(G`A<!U
M"^L'C;0F`````.L._X7$[___Z\>-M@````"+A<3O__^`.`!U!>MHC78`@\3\
M:@J-A<3O__]0BX7$[___4.C$]?__@\00B87([___BX7$[___@#@`=22#Q/2+
MA<3O__\/MA!2Z/[S__^#Q!")P(7`=0GK"8VT)@````#K$\>%R.___P````#K
M!XGVZ=S]__^#Q/1J!(V%R.___U!J`6IL:(C&!0CH[?+__X/$(.L`@SU(1P8(
M``^$B@```(/$_&B4Q@4(H=!<!@A0:CQJ`6B;Q@4(:@!J`>@[]?__@\0@@\3T
MC87$[___4.@)]?__@\00@\3XC87([___4(N%Q.___U#HX/+__X/$$(/$^(N%
MR.___U"A1%\&"%#H>//__X/$$(/$](N%R.___U#HYO/__X/$$(/$](N%Q.__
M_U#H]/3__X/$$,>%\.___P$```#I:`4``(VV``````^V!=I;!@B%P'0%ZP6-
M=@#K%(/$^&IN:(C&!0CHZ_3__X/$$.L`@SU(1P8(``^$B@```(/$_&B4Q@4(
MH=1<!@A0:CUJ`6B;Q@4(:@!J`>AI]/__@\0@@\3TC87`[___4.@W]/__@\00
M@\3XC86\[___4(N%P.___U#H#O+__X/$$(/$^(N%O.___U"A1%\&"%#HIO+_
M_X/$$(/$](N%O.___U#H%//__X/$$(/$](N%P.___U#H(O3__X/$$,>%\.__
M_P$```#IE@0``(UT)@"-A;OO__^*%9K&!0B(E;OO__^-A;KO__^@FL8%"(B%
MNN___P^V!=I;!@B%P'0"ZP+K%(/$^&IO:(C&!0CH^_/__X/$$.L`@SU(1P8(
M``^$B@```(/$_&B4Q@4(H=A<!@A0:CYJ`6B;Q@4(:@!J`>AY\___@\0@@\3T
MC86T[___4.A'\___@\00@\3XC86P[___4(N%M.___U#H'O'__X/$$(/$^(N%
ML.___U"A1%\&"%#HMO'__X/$$(/$](N%L.___U#H)/+__X/$$(/$](N%M.__
M_U#H,O/__X/$$(/$^&H`:@"-A;KO__]0C86[[___4&B4Q@4(:)K&!0CHB_+_
M_X/$((G`B87L[___@[WL[___``^-YP```(&][.___[O<__\/A-<````/M@7:
M6P8(A<!T`NL"ZQ^#Q/1J!(V%[.___U!J`6IP:(C&!0CH&O#__X/$(.L`@SU(
M1P8(``^$B@```(/$_&B4Q@4(H=Q<!@A0:C]J`6B;Q@4(:@!J`>AH\O__@\0@
M@\3TC86L[___4.@V\O__@\00@\3XC86H[___4(N%K.___U#H#?#__X/$$(/$
M^(N%J.___U"A1%\&"%#HI?#__X/$$(/$](N%J.___U#H$_'__X/$$(/$](N%
MK.___U#H(?+__X/$$,>%\.___RD```#IN0$``(UV`(&][.___[O<__\/A=``
M```/M@7:6P8(A<!T!>L%C78`ZQ2#Q/AJ<6B(Q@4(Z`OR__^#Q!#K`(,]2$<&
M"``/A(X```"+A>SO__]0:)3&!0BAZ%P&"%!J0FH!:)O&!0AJ`&H!Z(7Q__^#
MQ""#Q/2-A:3O__]0Z%/Q__^#Q!"#Q/B-A:#O__]0BX6D[___4.@J[___@\00
M@\3XBX6@[___4*%$7P8(4.C"[___@\00@\3TBX6@[___4.@P\/__@\00@\3T
MBX6D[___4.@^\?__@\00QX7P[___`0```.G6````#[8%VEL&"(7`=`7K!8UV
M`.L?@\3T:@2-A>SO__]0:@%J<FB(Q@4(Z&#N__^#Q"#K`(,]2$<&"``/A(X`
M``"+A>SO__]0:)3&!0BAX%P&"%!J0&H!:)O&!0AJ`&H!Z*KP__^#Q""#Q/2-
MA9SO__]0Z'CP__^#Q!"#Q/B-A9CO__]0BX6<[___4.A/[O__@\00@\3XBX68
M[___4*%$7P8(4.CG[O__@\00@\3TBX68[___4.A5[___@\00@\3TBX6<[___
M4.AC\/__@\00QX7P[___`0```.G7````D(UT)@"#O?CO__\`=`_'A?#O__\I
M````Z:P```#_A?CO___'A>CO__\#````QX7P[___`0```,>%D.___P````#'
MA93O__\`X?4%#[8%VEL&"(7`=`+K`NL;@\3X:G5HB,8%".@8\/__@\00ZP>-
MM"8`````@\3XC86([___4(V%D.___U#HQNW__X/$$(G`@_C_=`+K,NBE[O__
MB<")PH,Z!'4@BX6([___BY6,[___B860[___B964[___ZPB-M@````#K`NNL
MZPS'A?#O__\I````ZP#K#/^%S.___^E1]?__D(.]\.___REU!^DB`0``B?;I
M$0$``(&][.___Z#<__]U-`^V!=I;!@B%P'0$ZP2)]NL4@\3X:FEHB,8%".A;
M[___@\00ZP#'A>CO__\#````Z=$````/M@7:6P8(A<!T`NL"ZQ^#Q/1J!(V%
M[.___U!J`6IS:(C&!0CH3NS__X/$(.L`@SU(1P8(``^$B@```(/$_&B4Q@4(
MH>1<!@A0:D%J`6B;Q@4(:@!J`>B<[O__@\0@@\3TC868[___4.AJ[O__@\00
M@\3XC86<[___4(N%F.___U#H0>S__X/$$(/$^(N%G.___U"A1%\&"%#HV>S_
M_X/$$(/$](N%G.___U#H1^W__X/$$(/$](N%F.___U#H5>[__X/$$,>%\.__
M_RD```#K"NE=\___D(UT)@#K!>GM\/__@[WP[___`0^%-@<``,>%G.___P``
M``"-O1CO__\QP/RY&P```/.K9JL/M@7:6P8(A<!T!>L%C78`ZQ2#Q/AJ>&B(
MQ@4(Z!ON__^#Q!#K`,>%\.___P````"#Q/QJ`&H!:@'H'N___X/$$(G`B868
M[___@[V8[___`'U1#[8%VEL&"(7`?!6#^`%^#H/X!'0)ZPF-M"8`````ZR*#
MQ/1J!.B`[/__B<")PE)J`6IV:(C&!0CHW>K__X/$(.L`QX7P[___*0```.DB
M!0``9L>%&.___P$`@\3X:*7&!0B-A1CO__^-4`)2Z+GN__^#Q!"#Q/AHP<8%
M"(V%&.___XU0`E+H?^W__X/$$(/$_&INC948[___B=!0BX68[___4.@2[O__
M@\00B<"%P`^-*0$``.CPZ___B<")PH,Z<W4;@\3TBX68[___4.@HZ___@\00
MZ9D$``"-="8`#[8%VEL&"(7`?!6#^`%^!X/X!'0"ZPGK*8VT)@````"#Q/1J
M!.BBZ___B<")PE)J`6IW:(C&!0CH_^G__X/$(.L`QX7P[___*0```(/$](N%
MF.___U#HP>K__X/$$,>%B.___P````#'A8SO__^`EI@`#[8%VEL&"(7`?!6#
M^`%^#H/X!'0)ZPF-M"8`````ZQ2#Q/AJ=&B(Q@4(Z&OL__^#Q!#K`(/$^(V%
MD.___U"-A8CO__]0Z"#J__^#Q!")P(/X_W0"ZRSH_^K__XG`B<*#.@1U&HN%
MD.___XN5E.___XF%B.___XF5C.___^L"ZP+KLNF/`P``C;0F`````(V]\.[_
M_S'`_+D*````\ZN-O<CN__\QP/RY"@```/.KQX6([___`````,>%C.___P``
M``#'A9#O__\`````QX64[___`````,>%R.[__VER=7/'A<SN__\!````C70F
M`(/$^(V%D.___U"-A<CN__]0Z"(2`0"#Q!")P(F%\.___X.]\.___P`/A((`
M``"#/4A'!@@`=&>#Q/2-A:#O__]0Z/;J__^#Q!"#Q/B-A:3O__]0BX6@[___
M4.C-Z/__@\00@\3XBX6D[___4*%$7P8(4.AEZ?__@\00@\3TBX6D[___4.C3
MZ?__@\00@\3TBX6@[___4.CAZO__@\00QX7P[___*0```.DS`@``C78`@\3X
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
MDL<%".B4W?__@\0@BU7\B=#K`(VEF/[__UM?R<-5B>6!['`!``!74\=%_```
M``"#Q/AHL,@%"(V%M/[__U#H:N'__X/$$`^V!=I;!@B%P'0'@_@(=`OK/.LZ
MC;0F`````(/$](/$](V%M/[__U#H:M___X/$$(G`C5`!4HV%M/[__U!J`6H\
M:)+'!0CH#-W__X/$(#'`N2````"-E7S___^)U_SSJXG(B86P_O__B?B)A:S^
M___K">O:C;0F`````(M%"(G"P>H%C025`````(V5?/___XM-"(G+@^,?#ZL<
M$#'`N2````"-E?S^__^)U_SSJXG(B86L_O__B?B)A;#^___K`NO:BT4(B<+!
MZ@6-!)4`````C97\_O__BTT(B<N#XQ\/JQP0QX7T_O__/````,>%^/[__P``
M``"#Q/2-A?3^__]0C87\_O__4&H`C85\____4(M%"$!0Z&S=__^#Q"")P(E%
M_(-]_``/C9,```#HM=W__XG`B<*+`E!HE\<%"*'\6P8(4&H':@%HH,<%"&H`
M:@KH@=[__X/$(,=%_`H````/M@786P8(@_@(=TJ+!(4LR04(_^"-M@````#K
M.8/$_&H$C47\4(/$](V%M/[__U#H`M[__X/$$(G`C5`!4HV%M/[__U!J`FH^
M:)+'!0CHI-O__X/$(.G5!0``Z88```"#??P`#X5\````@\3XH01<!@A0:@EJ
M`6B@QP4(:@!J9NCRW?__@\0@QT7\9@```.F<!0``#[8%V%L&"(/X"'=&BP2%
M4,D%"/_@B?;K.8/$_&H$C47\4(/$](V%M/[__U#H<MW__X/$$(G`C5`!4HV%
MM/[__U!J`FH^:)+'!0CH%-O__X/$(,=%_`````"+30B)RH/B'XM="(G9P>D%
MC1R-`````(V-_/[__P^C%`L/DL"$P'4JBTT(B<J#XA^+70B)V<'I!8T<C0``
M``"-C7S___\/HQ0+#Y+`A,!U?.L`@\3XH0!<!@A0:@AJ`6B@QP4(:@!J"N@=
MW?__@\0@QT7\"@```.G'!```#[8%V%L&"(/X"'=$BP2%=,D%"/_@ZSF#Q/QJ
M!(U%_%"#Q/2-A;3^__]0Z)_<__^#Q!")P(U0`5*-A;3^__]0:@)J/FB2QP4(
MZ$':__^#Q"#'A:3^__\$````C86L_O__B86P_O__@[VD_O__`'4%Z7X!``!J
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
MQ/QJ!(V%]/[__U"#Q/2-A;3^__]0Z"_.__^#Q!")P(U0`5*-A;3^__]0:@)J
M/FC7R@4(Z-'+__^#Q"`/M@7:6P8(A<!T!X/X"'0$ZS[K/(/$_&H$C87T_O__
M4(/$](V%M/[__U#HW\W__X/$$(G`C5`!4HV%M/[__U!J`FH]:-?*!0CH@<O_
M_X/$(+@7````Z?H!``"#Q/QH``$``&H`C84`____4.CNSO__@\00@\3X:@!J
M!NB_S/__@\00@\3X@\3T:@[H3\O__X/$$(G`4(V%`/___U#H/<___X/$$(M%
M"(,X``^%D@```(/$_(M%"%"+A?S^__]0C84`____4.C@]?__@\00B<")A?3^
M__^#O?3^__\`=&0/M@7:6P8(A<!T"8/X"'0&ZT")]NL\@\3\:@2-A?3^__]0
M@\3TC86T_O__4.C_S/__@\00B<"-4`%2C86T_O__4&H":CUHU\H%".BARO__
M@\0@BY7T_O__B=#I%P$``)"-="8`BT4,@S@`#X6L````@(WX_O__`8/$_(M%
M#%"+A?C^__]0C84`____4.@[]?__@\00B<")A?3^__^#O?3^__\`='>#Q/2+
M10B+$%+H[<S__X/$$(M%",<```````^V!=I;!@B%P'0*@_@(=`?K08UV`.L\
M@\3\:@2-A?3^__]0@\3TC86T_O__4.@_S/__@\00B<"-4`%2C86T_O__4&H"
M:CUHU\H%".CAR?__@\0@BY7T_O__B=#K6@^V!=I;!@B%P'0-@_@(=`KK1(VV
M`````.L\@\3\:@2-A?3^__]0@\3TC86T_O__4.C?R___@\00B<"-4`%2C86T
M_O__4&H":CUHU\H%".B!R?__@\0@,<#K`,G#58GE@^Q8@\3X:)S,!0B-1;Q0
MZ''-__^#Q!#'1?P`````#[8%VEL&"(7`=`>#^`AT"^LVZS2-M"8`````@\3T
M@\3TC46\4.AMR___@\00B<"-4`%2C46\4&H!:CQHU\H%".@2R?__@\0@@\3X
MBT444(M%$%"+10Q0BT4(4&H`H8A;!@A0Z-_)__^#Q"")P(E%_(M%_(/X#W0V
M@_@/?PZ%P'0AZ2H!``"0C70F`(/X$0^$EP```(/X%`^$C@```.D.`0``QT7\
M`````.E]`0``BT444&CFR@4(H4Q<!@A0:AMJ`6C<R@4(:@!J!N@(R___@\0@
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
M!@B%P'0'@_@(=`3K.^LY@\3\:@2-1?10@\3TC85\____4.B23___@\00B<"-
M4`%2C85\____4&H":CUHU\H%".@T3?__@\0@N`0```#IC@<``(M%Y(M-V(G*
M`=(!RHT,E0````"-4?2+2!P!T8E-X(M%X,<``P```.D_!0``_T78BT7DBU78
M.U`8#X92`0``BT7D@W@$`'02@\3TBT7DBU`$4N@A4/__@\00BT7D@W@(`'02
M@\3TBT7DBU`(4N@&4/__@\00BT7D@W@4`'02@\3TBT7DBU`44NCK3___@\00
MBT7D@W@<`'02@\3TBT7DBU`<4NC03___@\00@\3XBT7P4(M%Y%#H$7?__X/$
M$(/$_&AFU@4(H61<!@A0:B%J`6C<R@4(:@!J!.C*3O__@\0@QT7T!`````^V
M!=A;!@B#^`AW1(L$A3S8!0C_X.LY@\3\:@2-1?10@\3TC85\____4.A13O__
M@\00B<"-4`%2C85\____4&H":CYHU\H%".CS2___@\0@#[8%VEL&"(7`=`F#
M^`AT!NL]B?;K.8/$_&H$C47T4(/$](V%?/___U#H`D[__X/$$(G`C5`!4HV%
M?/___U!J`FH]:-?*!0CHI$O__X/$(+@$````Z?X%``"+1>2+3=B)R@'2`<J-
M#)4`````C5'TBT@<`=&)3>"+1>#'``4```"#Q/R+1>"#P`10C47X4(U%W%#H
M(<;__X/$$(G`B47T@WWT``^$VP```(M%Y(-X!`!T$H/$](M%Y(M0!%+H?T[_
M_X/$$(M%Y(-X"`!T$H/$](M%Y(M0"%+H9$[__X/$$(M%Y(-X%`!T$H/$](M%
MY(M0%%+H24[__X/$$(M%Y(-X'`!T$H/$](M%Y(M0'%+H+D[__X/$$(/$^(M%
M\%"+1>10Z&]U__^#Q!`/M@7:6P8(A<!T!X/X"'0$ZSOK.8/$_&H$C47T4(/$
M](V%?/___U#HW$S__X/$$(G`C5`!4HV%?/___U!J`FH]:-?*!0CH?DK__X/$
M((M5](G0Z=@$``"0C70F`.FK`@``_T78BT7DBU78.U`8#X90`0``BT7D@W@$
M`'02@\3TBT7DBU`$4NB-3?__@\00BT7D@W@(`'02@\3TBT7DBU`(4NAR3?__
M@\00BT7D@W@4`'02@\3TBT7DBU`44NA73?__@\00BT7D@W@<`'02@\3TBT7D
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
M__\$````H!7>!0B(A6S;__^-A6W;__^#Q/QH``$``&H`4.C>W/[_@\00QX5H
MV___`````(/$](V%:-O__U#H\MK^_X/$$(/$](V%;-O__U#HT-G^_X/$$(G`
MA<!T%X/$^&A]W@4(C85LV___4.@3W?[_@\00@\3T:@2-A6C;__]0@\3TC85L
MV___4.@EV_[_@\00B<"-4`%2C85LV___4&H$C86(W___4&H#:@1H$-X%".B^
MV/[_@\0PZ<````#'A8C?__\'````H!7>!0B(A63:__^-A67:__^#Q/QH``$`
M`&H`4.@;W/[_@\00QX5@VO__`````(/$](V%8-K__U#H+]K^_X/$$(/$](V%
M9-K__U#H#=G^_X/$$(G`A<!T%X/$^&A]W@4(C85DVO__4.A0W/[_@\00@\3T
M:@2-A6#:__]0@\3TC85DVO__4.ABVO[_@\00B<"-4`%2C85DVO__4&H$C86(
MW___4&H#:@1H$-X%".C[U_[_@\0PZP"#O9C?__\!=7</M@7:6P8(@_@!=!F#
M^`%_!H7`=`[K8(/X!'0)@_@(=`3K5.M2@\3\@\3TH8!?!@A0Z/?9_O^#Q!")
MP(U0`5*A@%\&"%"#Q/2-A9S?__]0Z-G9_O^#Q!")P(U0`5*-A9S?__]0:@)J
M5&@0W@4(Z'O7_O^#Q"#K`(M5_(G0ZP.-=@#)PXVT)@````"-O"<`````58GE
MBT4(@W@$`'1$BT4(@S@`=!V+50B+`HM5"(M*!(E(!(M5"(M"!(M5"(L*B0CK
M%XM%#(M5"(M*!(D(BT4(BU`$QP(`````ZR6-M@````"+10B#.`!T#HM%"(L0
MQT($`````.L)BT4,QP``````BT4(BU4(QT($`````,<``````,G#58GEBT4(
MBU4,BPJ)2`2+10C'``````"+10R#.`!T"HM%#(L0BT4(B0*+10R+50B)$,G#
MD%6)Y8/L&(M%#(M0!(E5_,=%]`````")]H-]"`!U"NF<`@``D(UT)@"#?0P`
M=2V#Q/QH)-\%"*'X6P8(4&H&:@%H.=\%"&H`:@3HUMC^_X/$((G`B47TZ60"
M``"+10R+50B+2B"#P22)"(/$](M%#(L04NC]U_[_@\00B<")PHM%#(G2B5`$
MA=)U/HM%#,<``````&IG:&#?!0BA\%L&"%!J!&H!:#G?!0AJ`&H&Z'+8_O^#
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
MQ/2-1?A0Z)K-_O^#Q!")P(U0`5*-1?A0:@)J`FA)X`4(Z#_+_O^#Q"#K`.L`
MR<.)]E6)Y8/L&)#'1?@`````@\3TBT4(4.A:S?[_@\00B<"-4/^)5?2-=@"+
M1?@[1?1\".L]C;8`````BT4(BU7X`=`/MA")5?R+10B+5?@!T(M5"(M-]`'*
MB@J("(M%"(M5]`'0BE7\B!#_1?C_3?3KN<G#C78`58GE@^PD4XM%"(E%^(7`
M?0/W70C'1?P`````BT4,BU7\C0P"B4WTBT4(B47PNV=F9F:+1?#WZXG1B<O!
M^P*+3?#!^1\IRXG9P>$"`=F-'`F+5?`IVHC1@,$PBT7TB`C_1?R+50B)5?2Y
M9V9F9HM%]/?IB='!^0*+5?3!^A^)R"G0B<*)50B%TG\"ZPCKC8VV`````(-]
M^`!]#HM%#(M5_`'0Q@`M_T7\BT4,BU7\`=#&``"#Q/2+10Q0Z,W^__^#Q!"+
M7=C)PXVV`````(V\)P````!5B>534N@`````6X'#VI<``%#_=0S_=0AJ`^B]
MR_[_@\00BUW\R<.0D)"0D)"0D)!5H41=!@B)Y5.#[`2#^/^[1%T&"'06C78`
MC;PG`````(/K!/_0BP.#^/]U]%A;7<-5B>6#[`B)[%W#C;8`````58GE4U+H
M`````%N!PVJ7``"-=@#HU\W^_XM=_,G#```#`````0`"````````````````
M`````````````````$`H(RDU-R`@(#$N,2`@('-R8R]R<V-T+V-O<'ER:6=H
M="]C;W!Y<FEG:'0N8RP@<G-C="P@<G-C=%]R<FEG+"!R<FEG=#%F:R`U+S$P
M+S`Q(#(Q.C$Q.C,U`````````&8Z;#IS.G8`7U-%0P!/3@!/1D8`8W1C87,`
M`&-T8V%S+F-A=``O=F%R+V-T+TE7+W-O8R]C=&-A<R]S97)V97(`+RYB;V)H
M96UA;G1R879I<V5R8F%N``#DF00(\)T$"+"A!`BPH00(L*$$"""=!`AVH@0(
M=J($"':B!`AVH@0(\)T$"`````````````````````````````````````!`
M*",I.3D@("`Q+C<@("!S<F,O<G-C="]S96-U<FET>2]#05,O8FEN+V-T8V%S
M7V-O;6TN8RP@8W1S96,L(')S8W1?<G)I9RP@<G)I9W0Q9FL@-R\S,2\P,B`P
M.#HT-CHS,`!C87-?7W-E;F1?9&%T80!?4T5#`'-E;&5C="@I`&-T8V%S+F-A
M=`!S96YD*"D`````$ZT$"!6M!`@5K00(3JT$"!6M!`A.K00(3JT$"$ZM!`@5
MK00(H*T$"**M!`BBK00(VZT$"**M!`C;K00(VZT$"-NM!`BBK00(@*X$"(*N
M!`B"K@0(NZX$"(*N!`B[K@0(NZX$"+NN!`B"K@0(8*\$"&*O!`ABKP0(FZ\$
M"&*O!`B;KP0(FZ\$")NO!`ABKP0(X*\$".*O!`CBKP0(&[`$".*O!`@;L`0(
M&[`$"!NP!`CBKP0(L+`$"+*P!`BRL`0(Z[`$"+*P!`CKL`0(Z[`$".NP!`BR
ML`0(-+$$"#:Q!`@VL00(;[$$"#:Q!`AOL00(;[$$"&^Q!`@VL00(8V%S7U]R
M96-E:79E7V1A=&$`<F5C=B@I````````````````````````````````+W!R
M;VIE8W0O<W!R96QR:6<O8G5I;&0O8W5R<F5N=')I9R]S<F,O<G-C="]S96-U
M<FET>2]#05,O8FEN+V-T8V%S7V-O;6TN8P```("S!`B"LP0(@K,$"+NS!`B"
MLP0(N[,$"+NS!`B[LP0(@K,$"!"T!`@2M`0($K0$"$NT!`@2M`0(2[0$"$NT
M!`A+M`0($K0$"..T!`CEM`0(Y;0$"!ZU!`CEM`0('K4$"!ZU!`@>M00(Y;0$
M"-"U!`C2M00(TK4$"`NV!`C2M00("[8$"`NV!`@+M@0(TK4$"&"V!`ABM@0(
M8K8$")NV!`ABM@0(F[8$")NV!`B;M@0(8K8$"&:W!`AHMP0(:+<$"*&W!`AH
MMP0(H;<$"*&W!`BAMP0(:+<$"&"X!`ABN`0(8K@$")NX!`ABN`0(F[@$")NX
M!`B;N`0(8K@$"/"X!`CRN`0(\K@$""NY!`CRN`0(*[D$""NY!`@KN00(\K@$
M"```````````````````````````0"@C*3`Q(#$N."`@("`@<W)C+W)S8W0O
M<V5C=7)I='DO0T%3+V)I;B]C=&-A<U]E;F-O9&4N8RP@8W1S96,L(')S8W1?
M<G)I9RP@<G)I9W0Q9FL@."\V+S`R(#(P.C4V.C4P`&-A<U]?;W!E;E]U=&8X
M7VAD;`!?4T5#`&-T8V%S+F-A=`!C=5]I8V]N=E]O<&5N`&-A<U]?=71F.%]S
M971U<`#PN@0(\KH$"/*Z!`@ENP0(\KH$""6[!`@ENP0();L$"/*Z!`C0NP0(
MTKL$"-*[!`@%O`0(TKL$"`6\!`@%O`0(!;P$"-*[!`C`O`0(,K\$"#*_!`@R
MOP0(,K\$"#*_!`@ROP0(,K\$"#*_!`@ROP0(,K\$"#*_!`@ROP0(,K\$"#*_
M!`C(O`0(,+\$")"]!`A@O@0(!KT$"`B]!`@(O00(.[T$"`B]!`@[O00(.[T$
M"#N]!`@(O00(UKT$"-B]!`C8O00("[X$"-B]!`@+O@0("[X$"`N^!`C8O00(
MH+X$"**^!`BBO@0(U;X$"**^!`C5O@0(U;X$"-6^!`BBO@0(DK\$")2_!`B4
MOP0(Q[\$")2_!`C'OP0(Q[\$",>_!`B4OP0(8V%S7U]C;&]S95]U=&8X7VAD
M;',`8V%S7U]S971U<%]U=&8X7VAD;',```!@P@0(8L($"&+"!`B>P@0(8L($
M")["!`B>P@0(GL($"&+"!`A0PP0(4L,$"%+#!`B.PP0(4L,$"([#!`B.PP0(
MCL,$"%+#!`AC87-?7V-O;G9?<W1R7W1O7W5T9C@`8V%S7V-O;G9?<W1R7W1O
M7W5T9C@``//&!`CUQ@0(]<8$""C'!`CUQ@0(*,<$""C'!`@HQP0(]<8$"'C'
M!`B`QP0(@,<$"+/'!`B`QP0(L\<$"+/'!`BSQP0(@,<$"/3'!`CVQP0(]L<$
M""G(!`CVQP0(*<@$""G(!`@IR`0(]L<$"&-A<U]?8V]N=E]U=&8X7W1O7W-T
M<@```)/)!`B5R00(E<D$",C)!`B5R00(R,D$",C)!`C(R00(E<D$"!C*!`@@
MR@0((,H$"%/*!`@@R@0(4\H$"%/*!`A3R@0((,H$")3*!`B6R@0(ELH$",G*
M!`B6R@0(R<H$",G*!`C)R@0(ELH$"&-A<U]?96YC;V1E7S$V:6YT````X,L$
M".++!`CBRP0(%<P$".++!`@5S`0(%<P$"!7,!`CBRP0(P,P$",+,!`C"S`0(
M]<P$",+,!`CUS`0(]<P$"/7,!`C"S`0(8V%S7U]U;F5N8V]D95\Q-FEN=`"`
MS@0(@LX$"(+.!`BUS@0(@LX$"+7.!`BUS@0(M<X$"(+.!`A@SP0(8L\$"&+/
M!`B5SP0(8L\$")7/!`B5SP0(E<\$"&+/!`AC87-?7V5N8V]D95\S,FEN=```
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
M",6G!0@%K04(!:T%"`6M!0@%K04(D*(%"```````````````````````````
M0"@C*3DV("`@,2XV("`@<W)C+W)S8W0O<V5C=7)I='DO0T%3+V)I;B]C=&-A
M<U]T<F%C92YC+"!C='-E8RP@<G-C=%]R<FEG+"!R<FEG=#%F:R`Y+S(S+S`R
M(#$U.C`W.C(W`%!E<F8`26YF;P!!4$D`17)R;W)S`&-A<U]?=')A8V5?<F5G
M:7-T97)?8W1C87,``````````````````"]P<F]J96-T+W-P<F5L<FEG+V)U
M:6QD+V-U<G)E;G1R:6<O<W)C+W)S8W0O<V5C=7)I='DO0T%3+V)I;B]C=&-A
M<U]T<F%C92YC`````````````````````````````&YO7V-A=',@/3T@<VEZ
M96]F*&-A<U]?=')A8V5?9&5T86EL7VQE=F5L<RDO<VEZ96]F*&-A<U]?=')A
M8V5?9&5T86EL7VQE=F5L<ULP72D`7U-%0P```````````````"]V87(O8W0O
M25<O;&]G+V-T<V5C+V-T8V%S9"]T<F%C90!C=&-A<RYC870`+W9A<B]C="])
M5R]L;V<O8W1S96,`+W9A<B]C="])5R]L;V<O8W1S96,O8W1C87-D`'5N:VYO
M=VX`````D+,%")6S!0A8M`4((+4%"..U!0AFMP4(9K<%"*:V!0@`````````
M``````````````````````!`*",I.3@@("`Q+C@@("!S<F,O<G-C="]S96-U
M<FET>2]#05,O8FEN+V-T8V%S7W5T:6QS+F,L(&-T<V5C+"!R<V-T7W)R:6<L
M(')R:6=T,69K(#<O,S$O,#(@,#@Z-#8Z,C@`8V%S7U]M87)S:&%L7WAD871A
M*"D`8W1C87,N8V%T````````````````````````````````````````+W!R
M;VIE8W0O<W!R96QR:6<O8G5I;&0O8W5R<F5N=')I9R]S<F,O<G-C="]S96-U
M<FET>2]#05,O8FEN+V-T8V%S7W5T:6QS+F,`8V%S7U]U;FUA<G-H86Q?>&1A
M=&$H*0`O=F%R+V-T+TE7+W-O8R]C=&-A<R]C;&EE;G0`+W9A<B]C="])5R]S
M;V,`+W9A<B]C="])5R]S;V,O8W1C87,`+W9A<B]C="])5R]S;V,O8W1C87,O
M<V5R=F5R`"]V87(O8W0O25<O<G5N+V-T8V%S`"]V87(O8W0O25<O<G5N`&-T
M8V%S9`!?4T5#`````````````````````````%-20R!S>7-T96T@)3$D<R!W
M87,@<W1A<G1E9"!B=70@=6YA8FQE('1O(')E8V5I=F4@<F5Q=65S=',N"@``
M``!34D,@<WES=&5M("4Q)',@:7,@<F5A9'D@=&\@<F5C96EV92!R97%U97-T
M<RX*````````````````````````4U)#('-Y<W1E;2`E,21S(&ES(&%L<F5A
M9'D@<G5N;FEN9R!O;B!T:&4@:&]S="X*`````````````````````$%N(&5R
M<F]R(&]C8W5R<F5D('=H96X@871T96UP=&EN9R!T;R!A8W%U:7)E('-T871U
M<R!O9B!34D,@<WES=&5M("4Q)',N"@E-86ME('-U<F4@=&AA="!T:&4@;F%M
M960@4U)#('-Y<W1E;2!I<R!D969I;F5D(&%N9"!H87,@82!V86QI9"!D969I
M;FET:6]N+@H```````````````!34D,@<WES=&5M("4Q)',@=V%S('-T87)T
M960@<W5C8V5S<V9U;&QY("AP:60@/2`E,B1D*2X*````````````4U)#('-Y
M<W1E;2`E,21S(&-O=6QD(&YO="!B92!S=&%R=&5D(&)Y('1H92!34D,@;6%S
M=&5R+@H)36%K92!S=7)E('1H870@+W5S<B]S8FEN+W)S8W0O8FEN+V-T8V%S
M9"!E>&ES=',@86YD(&ES(&$@=F%L:60*"7!R;V=R86T@;W(@=&AA="!S>7-T
M96T@<F5S;W5R8V5S(&%R92!A=F%I;&%B;&4@=&\@<W1A<G0@=&AE(&1A96UO
M;BX*````4U)#('-Y<W1E;2`E,21S(&ES(&EN86-T:79E(&]R(&EN;W!E<F%T
M:79E+@H`4U)#('-Y<W1E;2`E,21S(&ES('-T87)T:6YG+@H`4U)#('-Y<W1E
M;2`E,21S(&ES(&%C=&EV92X*```````````````````````````````````R
M-C4Q+3`R-2!L:6)C=%]C87,@9F%I;'5R93H@=&AE(&-T8V%S(&-L:65N="!L
M:6)R87)Y(&ES('5N86)L92!T;R!E>&5C=71E"@ET:&4@+W5S<B]S8FEN+W)S
M8W0O8FEN+V-T<W1R=&-A<V0@8V]M;6%N9"X@(%1H92!F;VQL;W=I;F<@97)R
M;W(@=V%S(')E='5R;F5D(&)Y('1H90H)<WES=&5M*"D@9G5N8W1I;VX@8V%L
M;#H@97)R;F\@/2`E,21D+@H``````````````````````````````````#(V
M-3$M,3,S(&-T8V%S9"!&86EL=7)E.B!T:&4@8VEP:&5R(&-O;G1A:6YE9"!I
M;B!T:&4@0T-$0B!H87,@82!L96YG=&@@*"4Q)&0I"@ET:&%T(&ES(&YO="!M
M=6QT:7!L92!O9B!T:&4@4E-!(&UO9'5L=7,@9F]R('1H92!T>7!E(&]F(&ME
M>2!U<V5D(&9O<B!D96-R>7!T:6]N("@E,B1D*2X*"51H:7,@8V]N9&ET:6]N
M(&UA>2!H87!P96X@=VAE;B!T:&4@8VQI96YT(&%N9"!S97)V97(@:&]S=',@
M:&%V92!D:69F97)N="!T>7!E<R!O9B!H;W-T(&ME>7,N"@E0;&5A<V4@;6%K
M92!S=7)E('1H870@=&AE(&-L:65N="!A;F0@<V5R=F5R(&AO<W1S(&AA<R!T
M:&4@<V%M92!T>7!E(&]F(&AO<W0@2$)!(&ME>7,N"@`````R-C4Q+3$S,B!%
M;G9I<F]N;65N="!687)I86)L93H@)3$D<R!V86QU92!I<R!I;B!E<G)O<BX`
M````````````,C8U,2TQ,S$@5&AE('!U8FQI8R!K97D@:6X@)3$D<R!D;V5S
M(&YO="!M871C:"!T:&4@<'5B;&EC(&ME>2!F;W(@=&AE(&AO<W0@:6X@=&AE
M(%1R=7-T960@2&]S="!,:7-T("4R)',N"@``````````````````````````
M```R-C4Q+3$S,"!4:&4@8W)E9&5N=&EA;',@87)E(&5I=&AE<B!I;G9A;&ED
M(&]R(&-O<G)U<'1E9"X`````````,C8U,2TQ,CD@5&AE(&-R961E;G1I86QS
M(&AA=F4@97AP:7)E9"X``````````````````````````````````#(V-3$M
M,3(X(%1H92!S>7-T96T@8V%L;"!T;R!R971R:65V92!T:&4@;&]C86P@:&]S
M=&YA;64@9F%I;&5D+@`R-C4Q+3$R-R!5;FEX($ED96YT:71Y(&UI<RUM871C
M:"X*````````````````````````````````````````,C8U,2TQ,C8@8W1C
M87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B;&4@=&\@
M8W)E871E(&%N"FEN:71I86P@=')U<W1E9"!H;W-T(&QI<W0@9FEL92!T;R!B
M92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H;W5T
M('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A=71H
M96YT:6-A=&4@<WES=&5M<R!W:71H:6X*=&AE(&-L=7-T97(N("!4:&4@9&%E
M;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE(&EN:71I86P@=')U<W1E9"!H
M;W-T(&QI<W0*9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I<F5C=&]R>3H*"24Q
M)',*5&AI<R!D:7)E8W1O<GD@;6%Y(')E<VED92!I;B!A(')E860M;VYL>2!F
M:6QE('-Y<W1E;2P@;VYE(&]F('1H92!C;VUP;VYE;G0*9&ER96-T;W)I97,@
M:6X@=&AI<R!P871H(&YA;64@;6%Y(&)E(&UI<W-I;F<L('1H92!D:7)E8W1O
M<GD@;F%M92!M87D@8V]N=&%I;@IM;W)E('-Y;6)O;&EC(&QI;FMS('1H86X@
M=&AE(&]P97)A=&EN9R!S>7-T96T@8V%N('-U<'!O<G0L(&]R('1H92!P871H
M(&YA;64*;6%Y(&YO="!R969E<F5N8V4@82!D:7)E8W1O<GDN("!#;VYT86-T
M('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0@<F5P;W)T"G1H:7,@<')O
M8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@=F5R:69Y('1H
M870@=&AE(&%B;W9E(&1I<F5C=&]R>0IN86UE(&ES('-P96-I9FEE9"!A;F0@
M8V]N<W1R=6-T960@<')O<&5R;'DN("!)9B!T:&ES(&-O;F1I=&EO;B!P97)S
M:7-T<RP*8V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R
M;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*````````````,C8U
M,2TQ,C4@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U
M;F%B;&4@=&\@8W)E871E(&%N"FEN:71I86P@=')U<W1E9"!H;W-T(&QI<W0@
M9FEL92!T;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N
M+@I7:71H;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L
M92!T;R!A=71H96YT:6-A=&4@<WES=&5M<R!W:71H:6X*=&AE(&-L=7-T97(N
M("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE(&EN:71I86P@
M=')U<W1E9"!H;W-T(&QI<W0*9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I<F5C
M=&]R>3H*"24Q)',*5&AE(&9I;&4@<WES=&5M(&-O;G1A:6YI;F<@=&AI<R!D
M:7)E8W1O<GD@9&]E<R!N;W0@:&%V92!S=69F:6-I96YT('-P86-E('1O"F-R
M96%T92!T:&4@:6YI=&EA;"!T<G5S=&5D(&AO<W0@;&ES="!F:6QE+B`@0V]N
M=&%C="!T:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(*86YD(')E<&]R="!T:&ES
M('!R;V)L96TN("!3>7-T96T@861M:6YI<W1R871O<G,@<VAO=6QD(&5X86UI
M;F4@=&AE(&9I;&4*<WES=&5M(&-O;G1A:6YI;F<@=&AI<R!D:7)E8W1O<GD@
M9F]R(&]B<V]L971E(&9I;&5S('1H870@8V%N(&)E(')E;6]V960@;W(*=')I
M;6UE9"X@(%1H92!S>7-T96T@861M:6YI<W1R871O<B!C86X@86QS;R!C;W)R
M96-T('1H:7,@<')O8FQE;2!B>2!E>'1E;F1I;F<*:&4@<VEZ92!O9B!T:&4@
M9FEL92!S>7-T96T@8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R>2X*````````
M,C8U,2TQ,C0@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A
M<R!U;F%B;&4@=&\@8W)E871E(&%N"FEN:71I86P@=')U<W1E9"!H;W-T(&QI
M<W0@9FEL92!T;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T
M:6]N+@I7:71H;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N
M86)L92!T;R!A=71H96YT:6-A=&4@<WES=&5M<R!W:71H:6X*=&AE(&-L=7-T
M97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE(&EN:71I
M86P@=')U<W1E9"!H;W-T(&QI<W0*9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I
M<F5C=&]R>3H*"24Q)',*02!C;VUP;VYE;G0@9&ER96-T;W)Y(&EN('1H92!A
M8F]V92!P871H(&YA;64@;6%Y(&)E(&UI<W-I;F<L(&]R('1H92!A8V-E<W,*
M<&5R;6ES<VEO;G,@9F]R(&]N92!O9B!T:&5S92!C;VUP;VYE;G1S(&UA>2!H
M879E(&)E96X@;6]D:69I960@=&\@9F]R8FED"F%C8V5S<RX@(%9E<FEF>2!T
M:&%T('1H92!D:7)E8W1O<GD@;&ES=&5D(&%B;W9E(&5X:7-T<RP@86YD('1H
M870@=&AE"G!E<FUI<W-I;VYS(&]N('1H870@9&ER96-T;W)Y('!E<FUI="!P
M<F]C97-S97,@<G5N;FEN9R!W:71H(')O;W0@86-C97-S('1O"F%C8V5S<R!T
M:&4@9&ER96-T;W)Y(&%N9"!C<F5A=&4@9FEL97,@=VET:&EN('1H92!D:7)E
M8W1O<GDN("!)9B!T:&ES(&-O;F1I=&EO;@IP97)S:7-T<RP@8V]N=&%C="!T
M:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R;W9I9&5R(&%N9"!R97!O
M<G0@=&AI<PII;F-I9&5N="X*```````````````````````R-C4Q+3$R,R!C
M=&-A<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M;VX@=V%S('5N86)L92!T
M;R!L;V-A=&4@;W(*86-C97-S('1H92!T<G5S=&5D(&AO<W0@;&ES="!F:6QE
M('1O(&)E('5S960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN"E=I
M=&AO=70@=&AI<R!L:7-T+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA8FQE('1O
M(&%U=&AE;G1I8V%T92!S>7-T96US('=I=&AI;@IT:&4@8VQU<W1E<BX@(%1H
M92!D865M;VX@97AP96-T960@=&\@9FEN9"!T:&ES(&9I;&4@:6X@=&AE(&9O
M;&QO=VEN9R!D:7)E8W1O<GDZ"@DE,21S"E1H92!T<G5S=&5D(&AO<W0@;&ES
M="!F:6QE(&UA>2!B92!M:7-S:6YG+"!T:&4@<&5R;6ES<VEO;G,@;VX@=&AE
M(&9I;&4@;6%Y"FAA=F4@8F5E;B!M;V1I9FEE9"!T;R!F;W)B:60@86YY('!R
M;V-E<W,@9G)O;2!A8V-E<W-I;F<@=&AE(&9I;&4L(&]R(&$*8V]M<&]N96YT
M(&]F('1H92!D:7)E8W1O<GD@;F%M92!M87D@:&%V92!B965N(&UO9&EF:65D
M('1O(&9O<F)I9"!A8V-E<W,N"E9E<FEF>2!T:&%T('1H92!T<G5S=&5D(&AO
M<W0@;&ES="!F:6QE(&5X:7-T<RP@86YD('1H870@=&AE('!E<FUI<W-I;VYS
M(&]N"G1H92!F:6QE(&%N9"!T:&4@9&ER96-T;W)Y(&%R92!S970@=&\@<&5R
M;6ET('!R;V-E<W-E<R!R=6YN:6YG('=I=&@@<F]O=`IP97)M:7-S:6]N('1O
M(&%C8V5S<R!A;F0@;6]D:69Y('1H92!D:7)E8W1O<GD@86YD('1H92!F:6QE
M+B`@268@=&AI<PIC;VYD:71I;VX@<&5R<VES=',L(&-O;G1A8W0@=&AE(&-L
M=7-T97(@<V]F='=A<F4@<V5R=FEC92!P<F]V:61E<B!A;F0@<F5P;W)T"G1H
M:7,@:6YC:61E;G0N"@`````````````````````````````````````````R
M-C4Q+3$R,B!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z('1H92!D865M;VX@9&5T
M96-T960@82!P=6)L:6,@:V5Y"F9I;&4@;VX@=&AE(&QO8V%L('-Y<W1E;2P@
M8G5T('=A<R!U;F%B;&4@=&\@;&]C871E('1H92!A<W-O8VEA=&5D('!R:79A
M=&4@:V5Y"F9I;&4@;VX@=&AE(&QO8V%L('-Y<W1E;2X@(%1H92!D865M;VX@
M:&%S(&-O;F-L=61E9"!T:&%T('1H92!P<FEV871E(&%N9`IP=6)L:6,@:V5Y
M(&-O;F9I9W5R871I;VX@;V8@=&AE(&QO8V%L('-Y<W1E;2!H87,@8F5E;B!C
M;W)R=7!T960N("!4:&4@9&%E;6]N"F5X<&5C=&5D('1O(&9I;F0@8F]T:"!T
M:&4@<'5B;&EC(&%N9"!T:&4@<')I=F%T92!K97D@9FEL97,@:6X@=&AE(&9O
M;&QO=VEN9PID:7)E8W1O<GDZ"@DE,21S"DEN9F]R;2!T:&4@<WES=&5M(&%D
M;6EN:7-T<F%T;W(@;V8@=&AI<R!F86EL=7)E+B`@4WES=&5M(&%D;6EN:7-T
M<F%T;W)S"G-H;W5L9"!R96-R96%T92!T:&4@<'5B;&EC(&%N9"!P<FEV871E
M(&ME>2!F:6QE<R!O;B!T:&4@<WES=&5M+B`@268@8VQU<W1E<@IS96-U<FET
M>2!B87-E9"!K97ES(&%R92!I;B!U<V4L('1H97-E(&ME>7,@8V%N(&)E(')E
M8W)E871E9"!U<VEN9R!T:&4*)V-T<VME>6=E;B<@8V]M;6%N9"X@($EF('-E
M8W5R960@<F5M;W1E('-H96QL(&ME>7,@87)E(&EN('5S92P@8V]N<W5L="!T
M:&4*9&]C=6UE;G1A=&EO;B!A;F0@<')O8V5D=7)E<R!F;W(@8V]N9FEG=7)I
M;F<@<V5C=7)E9"!R96UO=&4@<VAE;&P@<'5B;&EC(&%N9`IP<FEV871E(&ME
M>7,N("!3>7-T96T@861M:6YI<W1R871O<G,@<VAO=6QD(&%L<V\@8V]N<VED
M97(@;6]N:71O<FEN9R!T:&4*<W1A='5S(&]F('1H92!P=6)L:6,@86YD('!R
M:79A=&4@:V5Y(&9I;&5S+"!I;B!C87-E(&%N(&%P<&QI8V%T:6]N(&ES"F%C
M8VED96YT86QL>2!O<B!I;G1E;G1I;VYA;&QY(')E;6]V:6YG('1H97-E(&9I
M;&5S+@H````````````R-C4Q+3$R,2!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z
M('1H92!D865M;VX@9&5T96-T960@82!P<FEV871E(&ME>0IF:6QE(&]N('1H
M92!L;V-A;"!S>7-T96TL(&)U="!W87,@=6YA8FQE('1O(&QO8V%T92!T:&4@
M87-S;V-I871E9"!P=6)L:6,@:V5Y"F9I;&4@;VX@=&AE(&QO8V%L('-Y<W1E
M;2X@(%1H92!D865M;VX@:&%S(&-O;F-L=61E9"!T:&%T('1H92!P<FEV871E
M(&%N9`IP=6)L:6,@:V5Y(&-O;F9I9W5R871I;VX@;V8@=&AE(&QO8V%L('-Y
M<W1E;2!H87,@8F5E;B!C;W)R=7!T960N("!4:&4@9&%E;6]N"F5X<&5C=&5D
M('1O(&9I;F0@8F]T:"!T:&4@<'5B;&EC(&%N9"!T:&4@<')I=F%T92!K97D@
M9FEL97,@:6X@=&AE(&9O;&QO=VEN9PID:7)E8W1O<GDZ"@DE,21S"DEN9F]R
M;2!T:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@;V8@=&AI<R!F86EL=7)E+B`@
M4WES=&5M(&%D;6EN:7-T<F%T;W)S"G-H;W5L9"!R96-R96%T92!T:&4@<'5B
M;&EC(&%N9"!P<FEV871E(&ME>2!F:6QE<R!O;B!T:&4@<WES=&5M+B`@268@
M8VQU<W1E<@IS96-U<FET>2!B87-E9"!K97ES(&%R92!I;B!U<V4L('1H97-E
M(&ME>7,@8V%N(&)E(')E8W)E871E9"!U<VEN9R!T:&4*)V-T<VME>6=E;B<@
M8V]M;6%N9"X@($EF('-E8W5R960@<F5M;W1E('-H96QL(&ME>7,@87)E(&EN
M('5S92P@8V]N<W5L="!T:&4*9&]C=6UE;G1A=&EO;B!A;F0@<')O8V5D=7)E
M<R!F;W(@8V]N9FEG=7)I;F<@<V5C=7)E9"!R96UO=&4@<VAE;&P@<'5B;&EC
M(&%N9`IP<FEV871E(&ME>7,N("!3>7-T96T@861M:6YI<W1R871O<G,@<VAO
M=6QD(&%L<V\@8V]N<VED97(@;6]N:71O<FEN9R!T:&4*<W1A='5S(&]F('1H
M92!P=6)L:6,@86YD('!R:79A=&4@:V5Y(&9I;&5S+"!I;B!C87-E(&%N(&%P
M<&QI8V%T:6]N(&ES"F%C8VED96YT86QL>2!O<B!I;G1E;G1I;VYA;&QY(')E
M;6]V:6YG('1H97-E(&9I;&5S+@H````````````R-C4Q+3$R,"!C=&-A<V0@
M1&%E;6]N($9A:6QU<F4Z('1H92!D865M;VX@9&5T96-T960@=&AA="!A;@IU
M;G-U<'!O<G1E9"!K97D@9V5N97)A=&EO;B!M971H;V0@=V%S(&-O;F9I9W5R
M960N("!4:&4@9F]L;&]W:6YG('5N<W5P<&]R=&5D"FME>2!G96YE<F%T:6]N
M(&UE=&AO9"!W87,@8V]N9FEG=7)E9#H*"3!X)3$D>`I297!A:7(@=&AE(&-T
M8V%S9"!D865M;VX@8V]N9FEG=7)A=&EO;B!I;F9O<FUA=&EO;B!T;R!S<&5C
M:69Y(&$@<W5P<&]R=&5D"FME>2!G96YE<F%T:6]N(&UE=&AO9"X*````````
M```R-C4Q+3$Q.2!C=&-A<V0@1&%E;6]N($EN=&5R;F%L($9A:6QU<F4Z(&EN
M8V]R<F5C="!P87)A;65T97)S('=E<F4*<')O=FED960@=&\@82!D865M;VX@
M<W5B<F]U=&EN92X*"49U;F-T:6]N(&YA;64Z("4Q)',*"5!O<VET:6]N86P@
M<&%R86UE=&5R(&YU;6)E<CH@)3(D9`H)4&%R86UE=&5R('9A;'5E.B`P>"4S
M)'@*0V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R;W9I
M9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*````,C8U,2TQ,3@@8W1C
M87-D($1A96UO;B!);G1E<FYA;"!F86EL=7)E(&1E=&5C=&5D+@H)1G5N8W1I
M;VX@;F%M93H@)3$D<PH)4F5T=7)N(&-O9&4@9G)O;2!F=6YC=&EO;CH@)3(D
M9`H)4F]U=&EN92!C86QL:6YG('1H92!F=6YC=&EO;CH@)3,D<PI#;VYT86-T
M('1H92!C;'5S=&5R('-O9G1W87)E('-E<G9I8V4@<')O=FED97(@86YD(')E
M<&]R="!T:&ES(&EN8VED96YT+@H````````````````R-C4Q+3$Q-R!C=&-A
M<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M;VX@=V%S('5N86)L92!T;R!C
M<F5A=&4@86X*:6YI=&EA;"!P=6)L:6,@:V5Y(&9I;&4@=&\@8F4@=7-E9"!F
M;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*5VET:&]U="!T:&ES(&9I
M;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@=&\@875T:&5N=&EC871E
M('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@<WES=&5M<R!I;B!T:&4@8VQU
M<W1E<BX@(%1H92!D865M;VX@871T96UP=&5D('1O(&-R96%T92!T:&4@:6YI
M=&EA;`IP=6)L:6,@:V5Y(&9I;&4@:6X@=&AE(&9O;&QO=VEN9R!D:7)E8W1O
M<GDZ"@DE,21S"E1H:7,@9&ER96-T;W)Y(&UA>2!R97-I9&4@:6X@82!R96%D
M+6]N;'D@9FEL92!S>7-T96TL(&]N92!O9B!T:&4@8V]M<&]N96YT"F1I<F5C
M=&]R:65S(&EN('1H:7,@<&%T:"!N86UE(&UA>2!B92!M:7-S:6YG+"!T:&4@
M9&ER96-T;W)Y(&YA;64@;6%Y(&-O;G1A:6X*;6]R92!S>6UB;VQI8R!L:6YK
M<R!T:&%N('1H92!O<&5R871I;F<@<WES=&5M(&-A;B!S=7!P;W)T+"!O<B!T
M:&4@<&%T:"!N86UE"FUA>2!N;W0@<F5F97)E;F-E(&$@9&ER96-T;W)Y+B`@
M0V]N=&%C="!T:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@86YD(')E<&]R=`IT
M:&ES('!R;V)L96TN("!3>7-T96T@861M:6YI<W1R871O<G,@<VAO=6QD('9E
M<FEF>2!T:&%T('1H92!A8F]V92!D:7)E8W1O<GD*;F%M92!I<R!S<&5C:69I
M960@86YD(&-O;G-T<G5C=&5D('!R;W!E<FQY+B`@268@=&AI<R!C;VYD:71I
M;VX@<&5R<VES=',L"F-O;G1A8W0@=&AE(&-L=7-T97(@<V]F='=A<F4@<V5R
M=FEC92!P<F]V:61E<B!A;F0@<F5P;W)T('1H:7,@:6YC:61E;G0N"@`R-C4Q
M+3$Q-B!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M;VX@=V%S('5N
M86)L92!T;R!C<F5A=&4@86X*:6YI=&EA;"!P<FEV871E(&ME>2!F:6QE('1O
M(&)E('5S960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN"E=I=&AO
M=70@=&AI<R!F:6QE+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA8FQE('1O(&%U
M=&AE;G1I8V%T92!T:&4@;&]C86P@<WES=&5M"G1O(&]T:&5R('-Y<W1E;7,@
M:6X@=&AE(&-L=7-T97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A
M=&4@=&AE(&EN:71I86P*<')I=F%T92!K97D@9FEL92!I;B!T:&4@9F]L;&]W
M:6YG(&1I<F5C=&]R>3H*"24Q)',*5&AI<R!D:7)E8W1O<GD@;6%Y(')E<VED
M92!I;B!A(')E860M;VYL>2!F:6QE('-Y<W1E;2P@;VYE(&]F('1H92!C;VUP
M;VYE;G0*9&ER96-T;W)I97,@:6X@=&AI<R!P871H(&YA;64@;6%Y(&)E(&UI
M<W-I;F<L('1H92!D:7)E8W1O<GD@;F%M92!M87D@8V]N=&%I;@IM;W)E('-Y
M;6)O;&EC(&QI;FMS('1H86X@=&AE(&]P97)A=&EN9R!S>7-T96T@8V%N('-U
M<'!O<G0L(&]R('1H92!P871H(&YA;64*;6%Y(&YO="!R969E<F5N8V4@82!D
M:7)E8W1O<GDN("!#;VYT86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A
M;F0@<F5P;W)T"G1H:7,@<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R
M<R!S:&]U;&0@=F5R:69Y('1H870@=&AE(&%B;W9E(&1I<F5C=&]R>0IN86UE
M(&ES('-P96-I9FEE9"!A;F0@8V]N<W1R=6-T960@<')O<&5R;'DN("!)9B!T
M:&ES(&-O;F1I=&EO;B!P97)S:7-T<RP*8V]N=&%C="!T:&4@8VQU<W1E<B!S
M;V9T=V%R92!S97)V:6-E('!R;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I
M9&5N="X*`````````````````````````````````````````#(V-3$M,3$U
M(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA8FQE
M('1O(&-R96%T92!A;@II;FET:6%L('!U8FQI8R!K97D@9FEL92!T;R!B92!U
M<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H;W5T('1H
M:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A=71H96YT
M:6-A=&4@=&AE(&QO8V%L('-Y<W1E;0IT;R!O=&AE<B!S>7-T96US(&EN('1H
M92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E871E('1H
M92!I;FET:6%L"G!U8FQI8R!K97D@9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I
M<F5C=&]R>3H*"24Q)',*5&AE(&9I;&4@<WES=&5M(&-O;G1A:6YI;F<@=&AI
M<R!D:7)E8W1O<GD@9&]E<R!N;W0@:&%V92!S=69F:6-I96YT('-P86-E('1O
M"F-R96%T92!T:&4@:6YI=&EA;"!P=6)L:6,@:V5Y(&9I;&4N("!#;VYT86-T
M('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0*<F5P;W)T('1H:7,@<')O
M8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@97AA;6EN92!T
M:&4@9FEL92!S>7-T96T*8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R>2!F;W(@
M;V)S;VQE=&4@9FEL97,@=&AA="!C86X@8F4@<F5M;W9E9"!O<B!T<FEM;65D
M+@I4:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@8V%N(&%L<V\@8V]R<F5C="!T
M:&ES('!R;V)L96T@8GD@97AT96YD:6YG('1H92!S:7IE"F]F('1H92!F:6QE
M('-Y<W1E;2!C;VYT86EN:6YG('1H:7,@9&ER96-T;W)Y+@H``````#(V-3$M
M,3$T(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA
M8FQE('1O(&-R96%T92!A;@II;FET:6%L('!R:79A=&4@:V5Y(&9I;&4@=&\@
M8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*5VET:&]U
M="!T:&ES(&9I;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@=&\@875T
M:&5N=&EC871E('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@<WES=&5M<R!I
M;B!T:&4@8VQU<W1E<BX@(%1H92!D865M;VX@871T96UP=&5D('1O(&-R96%T
M92!T:&4@:6YI=&EA;`IP<FEV871E(&ME>2!F:6QE(&EN('1H92!F;VQL;W=I
M;F<@9&ER96-T;W)Y.@H))3$D<PI4:&4@9FEL92!S>7-T96T@8V]N=&%I;FEN
M9R!T:&ES(&1I<F5C=&]R>2!D;V5S(&YO="!H879E('-U9F9I8VEE;G0@<W!A
M8V4@=&\*8W)E871E('1H92!I;FET:6%L('!R:79A=&4@:V5Y(&9I;&4N("!#
M;VYT86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0*<F5P;W)T('1H
M:7,@<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@97AA
M;6EN92!T:&4@9FEL92!S>7-T96T*8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R
M>2!F;W(@;V)S;VQE=&4@9FEL97,@=&AA="!C86X@8F4@<F5M;W9E9"!O<B!T
M<FEM;65D+@I4:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@8V%N(&%L<V\@8V]R
M<F5C="!T:&ES('!R;V)L96T@8GD@97AT96YD:6YG('1H92!S:7IE"F]F('1H
M92!F:6QE('-Y<W1E;2!C;VYT86EN:6YG('1H:7,@9&ER96-T;W)Y+@H``#(V
M-3$M,3$S(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@
M=6YA8FQE('1O(&-R96%T92!A;@II;FET:6%L('!U8FQI8R!K97D@9FEL92!T
M;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H
M;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A
M=71H96YT:6-A=&4@=&AE(&QO8V%L('-Y<W1E;0IT;R!O=&AE<B!S>7-T96US
M(&EN('1H92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E
M871E('1H92!I;FET:6%L"G!U8FQI8R!K97D@9FEL92!I;B!T:&4@9F]L;&]W
M:6YG(&1I<F5C=&]R>3H*"24Q)',*02!C;VUP;VYE;G0@9&ER96-T;W)Y(&EN
M('1H92!A8F]V92!P871H(&YA;64@;6%Y(&)E(&UI<W-I;F<L(&]R('1H92!A
M8V-E<W,*<&5R;6ES<VEO;G,@9F]R(&]N92!O9B!T:&5S92!C;VUP;VYE;G1S
M(&UA>2!H879E(&)E96X@;6]D:69I960@=&\@9F]R8FED"F%C8V5S<RX@(%9E
M<FEF>2!T:&%T('1H92!D:7)E8W1O<GD@;&ES=&5D(&%B;W9E(&5X:7-T<RP@
M86YD('1H870@=&AE"G!E<FUI<W-I;VYS(&]N('1H870@9&ER96-T;W)Y('!E
M<FUI="!P<F]C97-S97,@<G5N;FEN9R!W:71H(')O;W0@86-C97-S('1O"F%C
M8V5S<R!T:&4@9&ER96-T;W)Y(&%N9"!C<F5A=&4@9FEL97,@=VET:&EN('1H
M92!D:7)E8W1O<GDN("!)9B!T:&ES(&-O;F1I=&EO;@IP97)S:7-T<RP@8V]N
M=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R;W9I9&5R(&%N
M9"!R97!O<G0@=&AI<PII;F-I9&5N="X*````````````,C8U,2TQ,3(@8W1C
M87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B;&4@=&\@
M8W)E871E(&%N"FEN:71I86P@<')I=F%T92!K97D@9FEL92!T;R!B92!U<V5D
M(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H;W5T('1H:7,@
M9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A=71H96YT:6-A
M=&4@=&AE(&QO8V%L('-Y<W1E;0IT;R!O=&AE<B!S>7-T96US(&EN('1H92!C
M;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E871E('1H92!I
M;FET:6%L"G!R:79A=&4@:V5Y(&9I;&4@:6X@=&AE(&9O;&QO=VEN9R!D:7)E
M8W1O<GDZ"@DE,21S"D$@8V]M<&]N96YT(&1I<F5C=&]R>2!I;B!T:&4@86)O
M=F4@<&%T:"!N86UE(&UA>2!B92!M:7-S:6YG+"!O<B!T:&4@86-C97-S"G!E
M<FUI<W-I;VYS(&9O<B!O;F4@;V8@=&AE<V4@8V]M<&]N96YT<R!M87D@:&%V
M92!B965N(&UO9&EF:65D('1O(&9O<F)I9`IA8V-E<W,N("!697)I9GD@=&AA
M="!T:&4@9&ER96-T;W)Y(&QI<W1E9"!A8F]V92!E>&ES=',L(&%N9"!T:&%T
M('1H90IP97)M:7-S:6]N<R!O;B!T:&%T(&1I<F5C=&]R>2!P97)M:70@<')O
M8V5S<V5S(')U;FYI;F<@=VET:"!R;V]T(&%C8V5S<R!T;PIA8V-E<W,@=&AE
M(&1I<F5C=&]R>2!A;F0@8W)E871E(&9I;&5S('=I=&AI;B!T:&4@9&ER96-T
M;W)Y+B`@268@=&AI<R!C;VYD:71I;VX*<&5R<VES=',L(&-O;G1A8W0@=&AE
M(&-L=7-T97(@<V]F='=A<F4@<V5R=FEC92!P<F]V:61E<B!A;F0@<F5P;W)T
M('1H:7,*:6YC:61E;G0N"@`````````R-C4Q+3$Q,2!C=&-A<V0@1&%E;6]N
M($9A:6QU<F4Z(%1H92!S=&%T('-Y<W1E;2!C86QL(')E<&]R=&5D(&$*9F%I
M;'5R92!I;B!O8G1A:6YI;F<@:V5R;F5L(&UE;6]R>2!R97-O=7)C97,N("!4
M:&ES(&UA>2!I;F1I8V%T92!T:&%T('1H90IO<&5R871I;F<@<WES=&5M(&ES
M(&YO="!C;VYF:6=U<F5D('!R;W!E<FQY+"!O<B!T:&%T(&%D9&ET:6]N86P@
M<F5S;W5R8V5S"FYE960@=&\@8F4@9&5D:6-A=&5D('1O('1H92!O<&5R871I
M;F<@<WES=&5M(&ME<FYE;"X@($-O;G-U;'0@=&AE('!R;V)L96T*9&5T97)M
M:6YA=&EO;B!D;V-U;65N=&%T:6]N(&%N9"!P<F]C961U<F5S(&9O<B!T:&4@
M;W!E<F%T:6YG('-Y<W1E;2!I;B!U<V4*;VX@=&AE('-Y<W1E;2!A;F0@<&5R
M9F]R;2!A;GD@8V]R<F5C=&EV92!A8W1I;VYS(')E8V]M;65N9&5D(&)Y('1H
M;W-E"G-O=7)C97,N"@``````````,C8U,2TQ,3`@8W1C87-D($1A96UO;B!&
M86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B;&4@=&\@;&]C871E(&]R"F%C
M8V5S<R!T:&4@:V5Y(&9I;&5S('1O(&)E('5S960@9F]R(&AO<W0M8F%S960@
M875T:&5N=&EC871I;VXN("!7:71H;W5T"G1H97-E(&9I;&5S+"!T:&4@9&%E
M;6]N('=I;&P@8F4@=6YA8FQE('1O(&%U=&AE;G1I8V%T92!T:&4@;&]C86P@
M<WES=&5M"G1O(&]T:&5R('-Y<W1E;7,@:6X@=&AE(&-L=7-T97(N("!4:&4@
M9&%E;6]N(&5X<&5C=&5D('1O(&9I;F0@=&AE<V4@:V5Y"F9I;&5S(&EN('1H
M92!F;VQL;W=I;F<@9&ER96-T;W)Y.@H))3$D<PI4:&4@:V5Y(&9I;&5S(&UA
M>2!B92!M:7-S:6YG+"!T:&4@<&5R;6ES<VEO;G,@;VX@=&AE(&9I;&5S(&UA
M>2!H879E"F)E96X@;6]D:69I960@=&\@9F]R8FED(&%N>2!P<F]C97-S(&9R
M;VT@86-C97-S:6YG('1H92!F:6QE<RP@;W(@82!C;VUP;VYE;G0*;V8@=&AE
M(&1I<F5C=&]R>2!N86UE(&UA>2!H879E(&)E96X@;6]D:69I960@=&\@9F]R
M8FED(&%C8V5S<RX@(%9E<FEF>2!T:&%T"G1H92!P=6)L:6,@86YD('!R:79A
M=&4@:V5Y(&9I;&5S(&5X:7-T+"!A;F0@=&AA="!T:&4@<&5R;6ES<VEO;G,@
M;VX@=&AE(&9I;&5S"F%N9"!T:&4@9&ER96-T;W)Y(&%R92!S970@=&\@<&5R
M;6ET('!R;V-E<W-E<R!R=6YN:6YG('=I=&@@<F]O="!P97)M:7-S:6]N"G1O
M(&%C8V5S<R!T:&4@9&ER96-T;W)Y(&%N9"!T:&4@9FEL97,N("!)9B!T:&ES
M(&-O;F1I=&EO;B!P97)S:7-T<RP@8V]N=&%C=`IT:&4@8VQU<W1E<B!S;V9T
M=V%R92!S97)V:6-E('!R;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N
M="X*````````````````````````````````````,C8U,2TQ,#D@;&EB8W1?
M8V%S($9A:6QU<F4Z(%1H92!M87)S:&%L960@9&%T82!P<F]V:61E9"!T;R!T
M:&ES"G)O=71I;F4@:7,@96ET:&5R(&EN=F%L:60@;W(@8V]R<G5P=&5D+B`@
M5&AE(&UA<G-H86QE9"!D871A(&EN=&5R<')E=&%T:6]N"F9U;F-T:6]N<R!O
M9B!T:&4@<V5C=7)I='D@;&EB<F%R>2!D971E8W1E9"!A(')E<&5A=&5D(&1A
M=&$@9FEE;&0@=VET:&EN('1H90IM87)S:&%L960@9&%T82X@($ET(&ES('!O
M<W-I8FQE('1H870@=&AE(&%P<&QI8V%T:6]N(&AA<R!I;F%D=F5R=&5N=&QY
M"F]V97)W<FET=&5N('1H92!V87)I86)L92!C;VYT86EN:6YG('1H92!A9&1R
M97-S(&]F('1H92!D871A+"!O<B!T:&4*87!P;&EC871I;VX@;6%Y(&AA=F4@
M:6YA9'9E<G1E;G1L>2!O=F5R=W)I='1E;B!T:&4@;65M;W)Y('5S960@=&\@
M<W1O<F4@=&AE"F1A=&$N("!697)I9GD@=&AA="!T:&4@87!P;&EC871I;VX@
M:7,@<')O=FED:6YG('1H92!C;W)R96-T(&%D9')E<W,@9F]R('1H90IM87)S
M:&%L960@:6YP=70@9&%T82!T;R!T:&ES(')O=71I;F4N("!097)F;W)M(&UE
M;6]R>2!L96%K(&%N9"!M96UO<GD@=7-E"G9E<FEF:6-A=&EO;B!T97-T<R!O
M;B!T:&4@87!P;&EC871I;VX@=&\@96YS=7)E('1H870@=&AE(&%P<&QI8V%T
M:6]N(&ES(&YO=`II;F%D=F5R=&5N=&QY(&UO9&EF>6EN9R!T:&ES(&UE;6]R
M>2X*```````````````R-C4Q+3$P."!L:6)C=%]C87,@1F%I;'5R93H@5&AE
M(&UA<G-H86QE9"!D871A('!R;W9I9&5D('1O('1H:7,*<F]U=&EN92!I<R!E
M:71H97(@:6YV86QI9"!O<B!C;W)R=7!T960N("!4:&4@;6%R<VAA;&5D(&1A
M=&$@:6YT97)P<F5T871I;VX*9G5N8W1I;VYS(&]F('1H92!S96-U<FET>2!L
M:6)R87)Y(&1E=&5C=&5D(&UO<F4@<W5B<W1I='5T:6]N86P@87)G=6UE;G1S
M('1H86X*:6YD:6-A=&5D(&EN('1H92!M87)S:&%L960@9&%T82=S(&%R9W5M
M96YT(&-O=6YT+B`@270@:7,@<&]S<VEB;&4@=&AA="!T:&4*87!P;&EC871I
M;VX@:&%S(&EN861V97)T96YT;'D@;W9E<G=R:71T96X@=&AE('9A<FEA8FQE
M(&-O;G1A:6YI;F<@=&AE(&%D9')E<W,*;V8@=&AE(&1A=&$L(&]R('1H92!A
M<'!L:6-A=&EO;B!M87D@:&%V92!I;F%D=F5R=&5N=&QY(&]V97)W<FET=&5N
M('1H92!M96UO<GD*=7-E9"!T;R!S=&]R92!T:&4@9&%T82X@(%9E<FEF>2!T
M:&%T('1H92!A<'!L:6-A=&EO;B!I<R!P<F]V:61I;F<@=&AE(&-O<G)E8W0*
M861D<F5S<R!F;W(@=&AE(&UA<G-H86QE9"!I;G!U="!D871A('1O('1H:7,@
M<F]U=&EN92X@(%!E<F9O<FT@;65M;W)Y(&QE86L*86YD(&UE;6]R>2!U<V4@
M=F5R:69I8V%T:6]N('1E<W1S(&]N('1H92!A<'!L:6-A=&EO;B!T;R!E;G-U
M<F4@=&AA="!T:&4*87!P;&EC871I;VX@:7,@;F]T(&EN861V97)T96YT;'D@
M;6]D:69Y:6YG('1H:7,@;65M;W)Y+@H`````````,C8U,2TQ,#<@;&EB8W1?
M8V%S($9A:6QU<F4Z(%1H92!S96-U<FET>2!L:6)R87)Y(&ES('5N86)L92!T
M;PIT<F%N<VQA=&4@82!C:&%R86-T97(@<W1R:6YG(&)E='=E96X@=&AE(&%P
M<&QI8V%T:6]N(&-O9&5S970@86YD"G1H92!55$8M."!D871A(&5N8V]D:6YG
M(&9O<FUA="X@(%1H92!C:&%R86-T97(@<W1R:6YG(&-O;G1A:6YS(&)Y=&5S
M('1H870@87)E"FEN=F%L:60@:6X@=&AE(&%P<&QI8V%T:6]N(&-O9&5S970N
M("!4:&ES(&9A:6QU<F4@8V%N(&]C8W5R('=H96X*8V]D97-E=',@=&AA="!D
M;R!N;W0@9G5L;'D@<W5P<&]R="!55$8M."!C;VYV97)S:6]N(&%R92!U<V5D
M(&)Y('1H92!E>&5C=71I;VX*96YV:7)O;FUE;G0N("!4:&ES(&9A:6QU<F4@
M8V%N(&%L<V\@;V-C=7(@:68@=&AE(&-H87)A8W1E<B!S=')I;F<@;65M;W)Y
M(&ES"F]V97)W<FET=&5N+B`@5F5R:69Y('1H870@=&AE(&%P<&QI8V%T:6]N
M('5S97,@82!L;V-A;&4@=VET:"!A(&-O9&5S970@=&AA=`ID;V5S('-U<'!O
M<G0@551&+3@@8V]N=F5R<VEO;BP@;W(@8V]N=&%C="!T:&4@<WES=&5M(&%D
M;6EN:7-T<F%T;W(@=&\@:&%V90IT:&4@9&5F875L="!E>&5C=71I;VX@96YV
M:7)O;FUE;G0@<V5T('1O('5S92!S=6-H(&$@;&]C86QE+B`@06QS;R!V97)I
M9GD@=&AA=`IT:&4@87!P;&EC871I;VX@:7,@;F]T(&%C8VED96YT86QL>2!O
M=F5R=W)I=&EN9R!T:&4@8VAA<F%C=&5R('-T<FEN9R!D871A+@H`````````
M`#(V-3$M,3`V(&QI8F-T7V-A<R!&86EL=7)E.B!4:&4@<V5C=7)I='D@;&EB
M<F%R>2!I<R!U;F%B;&4@=&\*:6YI=&EA;&EZ92!T:&4@9&%T82!S=')U8W1U
M<F5S(&YE8V5S<V%R>2!T;R!C;VYV97)T(&)E='=E96X@=&AE(&-O9&5S970@
M=7-E9`IB>2!T:&ES(&%P<&QI8V%T:6]N(&%N9"!T:&4@551&+3@@9&%T82!E
M;F-O9&EN9R!F;W)M870N("!4:&ES(&9A:6QU<F4@:&%S"F]C8W5R<F5D(&)E
M8V%U<V4@<F5S;W5R8V5S(&YE961E9"!B>2!T:&4@8VQU<W1E<B!U=&EL:71I
M97,@87)E(&YO="!A=F%I;&%B;&4*870@=&AI<R!T:6UE+B`@5')Y('1O(')U
M;B!T:&ES(&%P<&QI8V%T:6]N(&%G86EN(&%T(&$@;&%T97(@=&EM92X*````
M`````````````````````````````````#(V-3$M,3`U(&QI8F-T7V-A<R!)
M;G1E<FYA;"!F86EL=7)E(&1E=&5C=&5D+@H)1G5N8W1I;VX@;F%M93H@)3$D
M<PH)4F5T=7)N(&-O9&4@9G)O;2!F=6YC=&EO;CH@)3(D9`H)4F]U=&EN92!C
M86QL:6YG('1H92!F=6YC=&EO;CH@)3,D<PI#;VYT86-T($E"32!#=7-T;VUE
M<B!3=7!P;W)T(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*`#(V-3$M,3`T
M(&QI8F-T7V-A<R!&86EL=7)E.B!4:&4@;6%R<VAA;&5D(&1A=&$@<')O=FED
M960@=&\@=&AI<PIR;W5T:6YE(&1O97,@;F]T(&-O;G1A:6X@82!R97%U:7)E
M9"!D871A(&9I96QD+B`@270@:7,@<&]S<VEB;&4@=&AA="!T:&4*87!P;&EC
M871I;VX@:&%S('!R;W9I9&5D(&%N(&EN8V]R<F5C="!A9&1R97-S(&9O<B!T
M:&4@;6%R<VAA;&5D(&1A=&$L(&]R(&AA<PII;F%D=F5R=&5N=&QY(&]V97)W
M<FET=&5N('1H92!V87)I86)L92!C;VYT86EN:6YG('1H92!A9&1R97-S(&]F
M('1H90ID871A+"!O<B!T:&4@87!P;&EC871I;VX@;6%Y(&AA=F4@:6YA9'9E
M<G1E;G1L>2!O=F5R=W)I='1E;B!T:&4@;65M;W)Y('5S960*=&\@<W1O<F4@
M=&AE(&1A=&$N("!697)I9GD@=&AA="!T:&4@87!P;&EC871I;VX@:7,@<')O
M=FED:6YG('1H92!C;W)R96-T"F%D9')E<W,@9F]R('1H92!M87)S:&%L960@
M:6YP=70@9&%T82!T;R!T:&ES(')O=71I;F4N("!097)F;W)M(&UE;6]R>2!L
M96%K"F%N9"!M96UO<GD@=7-E('9E<FEF:6-A=&EO;B!T97-T<R!O;B!T:&4@
M87!P;&EC871I;VX@=&\@96YS=7)E('1H870@=&AE"F%P<&QI8V%T:6]N(&ES
M(&YO="!I;F%D=F5R=&5N=&QY(&UO9&EF>6EN9R!T:&ES(&UE;6]R>2X*````
M```R-C4Q+3$P,R!L:6)C=%]C87,@1F%I;'5R93H@5&AE(&UA<G-H86QE9"!D
M871A('!R;W9I9&5D('1O('1H:7,*<F]U=&EN92!I<R!E:71H97(@:6YV86QI
M9"!O<B!C;W)R=7!T960N("!)="!I<R!P;W-S:6)L92!T:&%T('1H92!A<'!L
M:6-A=&EO;@IH87,@:6YA9'9E<G1E;G1L>2!O=F5R=W)I='1E;B!T:&4@=F%R
M:6%B;&4@8V]N=&%I;FEN9R!T:&4@861D<F5S<R!O9B!T:&4*9&%T82P@;W(@
M=&AE(&%P<&QI8V%T:6]N(&UA>2!H879E(&EN861V97)T96YT;'D@;W9E<G=R
M:71T96X@=&AE(&UE;6]R>2!U<V5D"G1O('-T;W)E('1H92!D871A+B`@5F5R
M:69Y('1H870@=&AE(&%P<&QI8V%T:6]N(&ES('!R;W9I9&EN9R!T:&4@8V]R
M<F5C=`IA9&1R97-S(&9O<B!T:&4@;6%R<VAA;&5D(&EN<'5T(&1A=&$@=&\@
M=&AI<R!R;W5T:6YE+B`@4&5R9F]R;2!M96UO<GD@;&5A:PIA;F0@;65M;W)Y
M('5S92!V97)I9FEC871I;VX@=&5S=',@;VX@=&AE(&%P<&QI8V%T:6]N('1O
M(&5N<W5R92!T:&%T('1H90IA<'!L:6-A=&EO;B!I<R!N;W0@:6YA9'9E<G1E
M;G1L>2!M;V1I9GEI;F<@=&AI<R!M96UO<GDN"@`````````````R-C4Q+3$P
M,B!L:6)C=%]C87,@365M;W)Y(&%L;&]C871I;VX@9F%I;'5R92X*"49U;F-T
M:6]N(&YA;64Z("4Q)',*"4%T=&5M<'1E9"!A;&QO8V%T:6]N.B`E,B1D(&)Y
M=&5S"DUO<W0@;V9T96XL('1H:7,@9F%I;'5R92!O8V-U<G,@=VAE;B!A('!R
M;V-E<W,@97AC965D<R!I=',@;65M;W)Y(&%L;&]C871I;VX*;&EM:70N("!)
M;B!R87)E(&-A<V5S+"!T:&ES(&9A:6QU<F4@;V-C=7)S('=H96X@82!N=6UB
M97(@;V8@<')O8V5S<V5S"F%L;&]C871E(&AU9V4@86UO=6YT<R!O9B!M96UO
M<GD@86YD('5T:6QI>F4@86QL(&%V86EL86)L92!M96UO<GD@;VX@=&AE"G-Y
M<W1E;2X@(%9E<FEF>2!T:&%T('1H92!A;&QO8V%T:6]N(&ET<V5L9B!I<R!N
M;W0@97AC965D:6YG(&ET<R!O=VX@;&EM:70N"DEF(&$@0VQU<W1E<B!S;V9T
M=V%R92!T<G5S=&5D('-E<G9I8V4@:7,@97AC965D:6YG(&ET<R!L:6UI="P@
M8V]N=&%C="!)0DT*0W5S=&]M97(@4W5P<&]R="!A;F0@<F5P;W)T('1H:7,@
M:6YC:61E;G0N("!)9B!A;F]T:&5R('-O9G1W87)E(&%P<&QI8V%T:6]N"FES
M(&5X8V5E9&EN9R!I=',@;&EM:70L(&5X86UI;F4@=&AE('-O9G1W87)E(&9O
M<B!M96UO<GD@;6%N86=E;65N="!P<F]B;&5M<PIA;F0@;65M;W)Y(&QE86MS
M+B`@268@=&AE(&%P<&QI8V%T:6]N(&ES(&YO="!E>&-E961I;F<@:71S(&UE
M;6]R>2!A;&QO8V%T:6]N"FQI;6ET<RP@8V]N=&%C="!T:&4@<WES=&5M(&%D
M;6EN:7-T<F%T;W(@86YD(')E<&]R="!T:&ES(&EN8VED96YT+B`@4WES=&5M
M"F%D;6EN:7-T<F%T;W)S('-H;W5L9"!I9&5N=&EF>2!P<F]C97-S97,@=7-I
M;F<@97AC97-S:79E(&UE;6]R>2!A;F0@8V]N<VED97(*=&5R;6EN871I;F<@
M=&AE<V4@<')O8V5S<V5S+@H``````````````````````#(V-3$M,3`Q(&QI
M8F-T7V-A<R!&86EL=7)E.B!I;F-O<G)E8W0@<&%R86UE=&5R<R!P<F]V:61E
M9"X*"49U;F-T:6]N(&YA;64Z("4Q)',*"5!O<VET:6]N86P@<&%R86UE=&5R
M(&YU;6)E<CH@)3(D9`H)4&%R86UE=&5R('9A;'5E.B`P>"4S)'@*268@=&AI
M<R!F86EL=7)E(&ES(&5N8V]U;G1E<F5D(&1U<FEN9R!T:&4@97AE8W5T:6]N
M(&]F('1H92!#;'5S=&5R('-O9G1W87)E"G1R=7-T960@<V5R=FEC97,L(&-O
M;G1A8W0@24)-($-U<W1O;65R(%-U<'!O<G0@86YD(')E<&]R="!T:&ES(&EN
M8VED96YT+@I)9B!T:&ES(&9A:6QU<F4@:7,@96YC;W5N=&5R960@9'5R:6YG
M('1H92!E>&5C=71I;VX@;V8@;W1H97(@<V]F='=A<F4L"G9E<FEF>2!T:&%T
M('1H92!S;V9T=V%R92!I<R!U<VEN9R!T:&ES(&9U;F-T:6]N(&-O<G)E8W1L
M>2X*```````````````````````````````````````R-C4Q+3`R-"!4:&4@
M<V5R=F5R(')E<&]R=&5D(&$@)W-E<G9E<B!B=7-Y)R!C;VYD:71I;VX`````
M````````,C8U,2TP,C,@56YA8FQE('1O('-E="!T:&4@8W5R<F5N="!W;W)K
M:6YG(&1I<F5C=&]R>2!T;R`O=F%R+V-T+TE7+W)U;B]C=&-A<R`H8VAD:7(H
M*3H@)3$D9"DN"@``,C8U,2TP,C(@06X@97)R;W(@;V-C=7)E9"!D=7)I;F<@
M=&AE('-E<G9E<B=S(&%T=&5M<'0@=&\@9V5T('1H92!C;&EE;G0G<R!I9&5N
M=&ET>2X*````````````````,C8U,2TP,C$@5&AE('-E<G9E<B!I<R!N;W0@
M86)L92!T;R!P97)F;W)M('1H92!A=71H96YT:6-A=&EO;B!R97%U97-T+@H`
M````````````````````````````````,C8U,2TP,C`@56YA8FQE('1O(&9I
M;F0@9&ER96-T;W)Y("]V87(O8W0O+@H``````````````````````````#(V
M-3$M,#$Y(%5N86)L92!T;R!C<F5A=&4@9&ER96-T;W)Y("4Q)',@*&UK9&ER
M*"DZ(&5R<FYO(#T@)3(D9"DN"@``````````````````````````````````
M`````#(V-3$M,#$X($5R<F]R(&]N('-I9VYA;"!O<&5R871I;VX@*"4Q)',Z
M(&5R<FYO(#T@)3(D9"DN"@`````````R-C4Q+3`Q-R!5;F%B;&4@=&\@<V5T
M('1H92!A<'!R;W!R:6%T92!P97)M:7-S:6]N(&]N(&9I;&4O9&ER96-T;W)Y
M("4Q)',@*&-H;6]D*"DZ(&5R<FYO(#T@)3(D9"DN"@``````````````````
M`````````````````````#(V-3$M,#$V(%5N86)L92!T;R!C<F5A=&4@=&AE
M(&UI;FEM=6T@;G5M8F5R(&]F('=O<FME<B!T:')E861S(&-O;F9I9W5R960N
M"@```````````````````````````#(V-3$M,#$U(%5N86)L92!T;R!Q=65U
M92!R97%U97-T.@H)<75E=64@<VEZ93TE,21D"@EP96YD:6YG(')E<75E<W1S
M/24R)&0*`````````````````````````````#(V-3$M,#$T($5R<F]R(&]N
M('1H<F5A9"!O<&5R871I;VX@*"4Q)',Z(')C(#T@)3(D9"DN````````````
M```R-C4Q+3`Q,R!397)V:6-E(#!X)3$D,#AX(&ES(&YO="!S=7!P;W)T960@
M8GD@8W1C87-D+@``````````````,C8U,2TP,3(@4F5Q=65S="`P>"4Q)#`X
M>"!N;W0@<W5P<&]R=&5D(&)Y('-E<G9I8V4@,'@E,B0P.'@N`````#(V-3$M
M,#$Q("4Q)',Z('1H92!B=69F97(@8V]N=&%I;FEN9R!T:&4@;6%R<VAA;&5D
M(&1A=&$@:7,@;F]T('9A;&ED+@``````````````````````````````````
M`#(V-3$M,#$P(%1H92!R96%D:6YG(&]F(&1A=&$@=V%S(&EN=&5R<G5P=&5D
M+@`````````````````````````R-C4Q+3`P.2!$871A(&-O;6UU;FEC871I
M;VX@9F%I;'5R92`H<V5N9"@I.B!M97-S86=E(&QE;F=T:"`]("4Q)&0L(&)Y
M=&5S('-E;G0@/2`E,B1D+@`````````````R-C4Q+3`P."!4:&4@8V]N;F5C
M=&EO;B!T:6UE9"!O=70N````````````````````````````````````````
M,C8U,2TP,#<@5&AE(&9I;&4@9&5S8W)I<'1O<B!R96%D>2!F;W(@<F5A9&EN
M9R!O<B!W<FET:6YG(&1O97,@;F]T(&UA=&-H('1H92!C;VYN96-T:6YG('-O
M8VME="X`,C8U,2TP,#8@17)R;W(@;VX@<V]C:V5T(&]P97)A=&EO;B`H)3$D
M<SH@97)R;F\@/2`E,B1D*2X``````````#(V-3$M,#`U($]N92!O9B!T:&4@
M87)G=6UE;G1S('!R;W9I9&5D('1O("4Q)',@:7,@;F]T('9A;&ED+@`````R
M-C4Q+3`P-"!#;VYF:6=U<F%T:6]N(&9I;&4@97)R;W(N````````````````
M````````````````````````,C8U,2TP,#,@365M;W)Y(&%L;&]C871I;VX@
M97)R;W(@*"4Q)',Z)3(D9"DN`````````````````````````#(V-3$M,#`R
M(&-T8V%S9"!I<R!N;W0@<G5N;FEN9R!A<R!R;V]T+@``````````````````
M```````````````R-C4Q+3`P,2!5;F%B;&4@=&\@<W1A<G0@1$%%.B!D865?
M:6YI="@I(&9A:6QE9"`H<F,@/2`E,21D*0H)9FEL92`]("4R)',*"79E<G-I
M;VX@/2`E,R1S"@EL:6YE(#T@)30D<PH`````````````````````````````
M`````#(V-3$M,#`Q($EN9F]R;6%T:6]N86P@;65S<V%G92`Q+@!297-E<G9E
M9#H@1$\@3D]4(%5312$``````````````````````%!=!@@`````````````
M`````````````"#&!0@`````````````````````````````````````"B,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(`HC($QI8V5N<V5D($UA=&5R:6%L
M<R`M(%!R;W!E<G1Y(&]F($E"32`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@(R`*(R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(",@"B,@-3<V-2U&
M,#<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M(R`*(R`H0RD@0T]065))1TA4($EN=&5R;F%T:6]N86P@0G5S:6YE<W,@36%C
M:&EN97,@0V]R<"X@,3DY-BPR,#`Q("`@("`@(",@"B,@06QL(%)I9VAT<R!2
M97-E<G9E9"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R!5
M4R!';W9E<FYM96YT(%5S97)S(%)E<W1R:6-T960@4FEG:'1S("T@57-E+"!D
M=7!L:6-A=&EO;B!O<B`@("`@("`@(",@"B,@9&ES8VQO<W5R92!R97-T<FEC
M=&5D(&)Y($=302!!1%`@4V-H961U;&4@0V]N=')A8W0@=VET:"!)0DT@0V]R
M<"X@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,@"@H```````````````````````"`Q@4(````
M`````````````````````````````````"]V87(O8W0O25<O<G5N+V-T8V%S
M+V-T<W1R=&-A<V0N=')A8V4`````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````````!?4T5#.DEN9F\],0``````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````0``````````````````````````````
M```@QP4(8,H%"```````````0-H%",#<!0@`````,MT%"````````````0``
M`"[=!0@```````````(````IW04(```````````#````)-T%"```````````
M`````,#>!0AB,P8(0#,&",`R!@B`,@8(0#(&"``R!@C`,08(@#$&""`Q!@C@
M,`8(@#`&"$`P!@C@+P8(H"\&"&`O!@@@+P8(P"X&"&`N!@C@+08(H"T&"$`M
M!@@`+08(H"P&"$`L!@C@*P8(H"L&".`I!@A@)@8(("0&"*`A!@C@(`8(8!\&
M"(`<!@B@&08(X!8&"(`3!@C`$08(H`X&"(`+!@B`"`8(@`4&"``"!@B@_@4(
MP/T%",#\!0B@^P4(X/<%""#T!0C`\`4(H.T%"*#J!0A`YP4(`.<%",#F!0B`
MY@4(0.8%",#E!0B`Y04((.0%"$#C!0@+XP4([>(%",#B!0@`X@4(P.$%""#A
M!0C@X`4(H.`%"&#@!0@```````````````!"860@;65S<V%G92!I9"!F;W(@
M;65S<V%G92!S970@8W1C87-?;7-G````````````````````````````````
M`````/____\`````_____P````!L7@8(``````````!BCP0(<H\$"(*/!`B2
MCP0(HH\$"+*/!`C"CP0(TH\$".*/!`CRCP0(`I`$"!*0!`@BD`0(,I`$"$*0
M!`A2D`0(8I`$"'*0!`B"D`0(DI`$"**0!`BRD`0(PI`$"-*0!`CBD`0(\I`$
M"`*1!`@2D00((I$$"#*1!`A"D00(4I$$"&*1!`ARD00(@I$$")*1!`BBD00(
MLI$$",*1!`C2D00(XI$$"/*1!`@"D@0($I($""*2!`@RD@0(0I($"%*2!`AB
MD@0(<I($"(*2!`B2D@0(HI($"+*2!`C"D@0(TI($".*2!`CRD@0(`I,$"!*3
M!`@BDP0(,I,$"$*3!`A2DP0(8I,$"'*3!`@``````0```!`````!````8@``
M``$```"G`````0```%\!```!````NP$```$````=`@```0```&0"```!````
M;@(```P````TCP0(#0```.#%!0@$````*($$"`4```!4B`0(!@```'2#!`@*
M````M@,```L````0````%0`````````#````5%T&"`(````0`@``%````!$`
M```7````)(T$"!$````,C00($@```!@````3````"````/[__V^\C`0(____
M;P(```#P__]O((P$"````````````$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S
M,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTW.2D``$=#0SH@*$=.52D@,BXY
M-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTW.2D``$=#0SH@
M*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTX
M,2D``$=#0SH@*$=.52D@,BXY-2XS(#(P,#$P,S$U("AR96QE87-E*0``1T-#
M.B`H1TY5*2`R+CDU+C,@,C`P,3`S,34@*')E;&5A<V4I``!'0T,Z("A'3E4I
M(#(N.34N,R`R,#`Q,#,Q-2`H<F5L96%S92D``$=#0SH@*$=.52D@,BXY-2XS
M(#(P,#$P,S$U("AR96QE87-E*0``1T-#.B`H1TY5*2`R+CDU+C,@,C`P,3`S
M,34@*')E;&5A<V4I``!'0T,Z("A'3E4I(#(N.34N,R`R,#`Q,#,Q-2`H<F5L
M96%S92D``$=#0SH@*$=.52D@,BXY-2XS(#(P,#$P,S$U("AR96QE87-E*0``
M1T-#.B`H1TY5*2`R+CDU+C,@,C`P,3`S,34@*')E;&5A<V4I``!'0T,Z("A'
M3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M-SDI
M``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ
M(#(N.38M.#$I``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@
M3&EN=7@@-RXQ(#(N.38M-SDI``@``````````0```#`Q+C`Q````"```````
M```!````,#$N,#$````(``````````$````P,2XP,0````@``````````0``
M`#`Q+C`Q````"``````````!````,#$N,#$````(``````````$````P,2XP
M,0````@``````````0```#`Q+C`Q````"``````````!````,#$N,#$````(
M``````````$````P,2XP,0````@``````````0```#`Q+C`Q````"```````
M```!````,#$N,#$````(``````````$````P,2XP,0````@``````````0``
M`#`Q+C`Q````"``````````!````,#$N,#$`````+G-Y;71A8@`N<W1R=&%B
M`"YS:'-T<G1A8@`N:6YT97)P`"YN;W1E+D%"22UT86<`+FAA<V@`+F1Y;G-Y
M;0`N9'EN<W1R`"YG;G4N=F5R<VEO;@`N9VYU+G9E<G-I;VY?<@`N<F5L+F=O
M=``N<F5L+F)S<P`N<F5L+G!L=``N:6YI=``N<&QT`"YT97AT`"YF:6YI`"YR
M;V1A=&$`+F1A=&$`+F5H7V9R86UE`"YC=&]R<P`N9'1O<G,`+F=O=``N9'EN
M86UI8P`N<V)S<P`N8G-S`"YC;VUM96YT`"YN;W1E````````````````````
M````````````````````````````````````&P````$````"````](`$"/0`
M```3```````````````!`````````",````'`````@````B!!`@(`0``(```
M````````````!``````````Q````!0````(````H@00(*`$``$P"```$````
M``````0````$````-P````L````"````=(,$"'0#``#@!```!0````$````$
M````$````#\````#`````@```%2(!`A4"```S`,``````````````0``````
M``!'````____;P(````@C`0((`P``)P````$``````````(````"````5```
M`/[__V\"````O(P$"+P,``!0````!0````(````$`````````&,````)````
M`@````R-!`@,#0``"`````0````4````!`````@```!L````"0````(````4
MC00(%`T``!`````$````%P````0````(````=0````D````"````)(T$""0-
M```0`@``!`````P````$````"````'X````!````!@```#2/!`@T#P``&```
M````````````!`````````"$`````0````8```!,CP0(3`\``#`$````````
M``````0````$````B0````$````&````@),$"(`3``!@,@$````````````0
M`````````(\````!````!@```.#%!0C@10$`'@``````````````!```````
M``"5`````0````(`````Q@4(`$8!`(!M`````````````"``````````G0``
M``$````#````@$,&"("S`0#`&0`````````````@`````````*,````!````
M`P```$!=!@A`S0$`!```````````````!`````````"M`````0````,```!$
M708(1,T!``@```````````````0`````````M`````$````#````3%T&"$S-
M`0`(```````````````$`````````+L````!`````P```%1=!@A4S0$`&`$`
M````````````!`````0```#`````!@````,```!L7@8(;,X!`-@````%````
M``````0````(````R0````$````!````1%\&"$3/`0`````````````````!
M`````````,\````(`````P```$1?!@A$SP$`0```````````````!```````
M``#4`````0``````````````1,\!`'0"``````````````$`````````W0``
M``<``````````````+C1`0`8`0`````````````!`````````!$````#````
@``````````#0T@$`XP```````````````0``````````
`
end
begin 755 getLocalHostName.mcplinux
M?T5,1@$!`0````````````(``P`!````4(0$"#0````X"P```````#0`(``&
M`"@`&@`9``8````T````-(`$"#2`!`C`````P`````4````$`````P```/0`
M``#T@`0(](`$"!,````3````!`````$````!``````````"`!`@`@`0(@`<`
M`(`'```%`````!````$```"`!P``@)<$"("7!`@@`0``.`$```8`````$```
M`@```-@'``#8EP0(V)<$",@```#(````!@````0````$````"`$```B!!`@(
M@00((````"`````$````!````"]L:6(O;&0M;&EN=7@N<V\N,@``!````!``
M```!````1TY5```````"`````@````4````#````#`````L````$````"@``
M`````````````0````(````#``````````4````&``````````@````'````
M"0````````````````````````";````M(,$"($````B````:0```,2#!`@8
M````$@```#````#4@P0(K````"(```")````Y(,$",H````2````&@```/2#
M!`@R````$@```"$````$A`0(G0```"(```!=````%(0$"(`````2````3P``
M`"2$!`BW`0``$@```$@````TA`0(:````!(```!Z````I(8$"`0````1``X`
M`0``````````````(`````!?7V=M;VY?<W1A<G1?7P!L:6)C+G-O+C8`<')I
M;G1F`%]?8WAA7V9I;F%L:7IE`%]?9&5R96=I<W1E<E]F<F%M95]I;F9O`&UE
M;7-E=`!G971H;W-T8GEN86UE`&=E=&AO<W1N86UE`%]?97)R;F]?;&]C871I
M;VX`7TE/7W-T9&EN7W5S960`7U]L:6)C7W-T87)T7VUA:6X`7U]R96=I<W1E
M<E]F<F%M95]I;F9O`$=,24)#7S(N,2XS`$=,24)#7S(N,``````"``(``@`"
M``(``P`"``(``@`!`````0`"`!`````0`````````',?:0D```,`L0```!``
M```0:6D-```"`+T`````````U)<$"`8+``"PEP0(!P$``+27!`@'`@``N)<$
M"`<#``"\EP0(!P0``,"7!`@'!0``Q)<$"`<&``#(EP0(!P<``,R7!`@'"```
MT)<$"`<)``!5B>6#[`CHW0```)#H<P$``.B.`@``R</_-:B7!`C_):R7!`@`
M````_R6PEP0(:`````#IX/____\EM)<$"&@(````Z=#_____);B7!`AH$```
M`.G`_____R6\EP0(:!@```#IL/____\EP)<$"&@@````Z:#_____)<27!`AH
M*````.F0_____R7(EP0(:#````#I@/____\ES)<$"&@X````Z7#_____)="7
M!`AH0````.E@____````````````````,>U>B>&#Y/!05%)H<(8$"&B,@P0(
M459H4(4$".AS____](GV58GE4U#H`````%N!PR83``"+@S````"%P'0"_]"+
M7?S)PXGVD)"0D)"0D)!5B>6#[`B+%8R7!`B%TG5)BQ6(EP0(BP*%P'0:C70F
M`(U"!*.(EP0(_Q*+%8B7!`B+"H7)=>JXU(,$"(7`=!"#[`QHD)<$".CH_O__
M@\00N`$```"CC)<$"(GL7<.-=@!5B>6#[`B)[%W#C;8`````5;BT@P0(B>6#
M[`B%P'05@^P(:*"8!`AHD)<$".B#_O__@\00B>Q=PY"-M"8`````58GE@^P(
MB>Q=PXVV`````%6)Y8'L&`$``(/L!&@``0``:@"-A?C^__]0Z,7^__^#Q!#'
MA?3^__\`````@^P(:``!``"-A?C^__]0Z(3^__^#Q!"`O?C^__\`=&R#[`R-
MA?C^__]0Z'G^__^#Q!")P(F%]/[__X.]]/[__P!T(8/L"(N%]/[___\P:,"&
M!`CH(/[__X/$$+@`````ZU")]H/L"(/L".C9_?__@\0(B<")P/\P:`"'!`CH
M]OW__X/$$+@"````ZR:#[`B#[`CHL?W__X/$"(G`B<#_,&A`AP0(Z,[]__^#
MQ!"X`0```,G#58GE4X/L!*&4EP0(NY27!`B#^/]T%HUV`(V\)P````"#ZP3_
MT(L#@_C_=?186UW#58GE@^P(B>Q=PXVV`````%6)Y5-2Z`````!;@<,J$0``
MC78`Z!?^__^+7?S)PP````````````````````````,````!``(`````````
M````````````````````````4E-#5"!#=%-E8R!N86UE(&9O<B!L;V-A;"!H
M;W-T.B`E<PH``````````````````````````````````````$-A;FYO="!R
M97-O;'9E(&QO8V%L(&AO<W0@;F%M92`H97)R;F\@)60I"@``````````````
M``````````````!#86YN;W0@;V)T86EN(&AO<W0@;F%M92!F;W(@;&]C86P@
M<WES=&5M("AE<G)N;R`E9"D*``````````````````````````"@EP0(````
M``````#_____`````/____\`````V)<$"```````````NH,$",J#!`C:@P0(
MZH,$"/J#!`@*A`0(&H0$""J$!`@ZA`0(``````$````0````#````(R#!`@-
M````<(8$"`0````H@00(!0```"R"!`@&````;($$"`H```"Q````"P```!``
M```5``````````,```"DEP0(`@```$@````4````$0```!<```!$@P0($0``
M`#R#!`@2````"````!,````(````_O__;PR#!`C___]O`0```/#__V_T@@0(
M````````````````````````````````````````````````````````````
M`````$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W
M+C$@,BXY-BTY-RD``$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA
M="!,:6YU>"`W+C$@,BXY-BTY-RD``$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S
M,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTY."D``$=#0SH@*$=.52D@,BXY
M-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTY."D``$=#0SH@
M*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W+C$@,BXY-BTY
M."D``$=#0SH@*$=.52D@,BXY-B`R,#`P,#<S,2`H4F5D($AA="!,:6YU>"`W
M+C$@,BXY-BTY-RD`"``````````!````,#$N,#$````(``````````$````P
M,2XP,0````@``````````0```#`Q+C`Q````"``````````!````,#$N,#$`
M```(``````````$````P,2XP,0````@``````````0```#`Q+C`Q`````"YS
M>6UT86(`+G-T<G1A8@`N<VAS=')T86(`+FEN=&5R<``N;F]T92Y!0DDM=&%G
M`"YH87-H`"YD>6YS>6T`+F1Y;G-T<@`N9VYU+G9E<G-I;VX`+F=N=2YV97)S
M:6]N7W(`+G)E;"YD>6X`+G)E;"YP;'0`+FEN:70`+G!L=``N=&5X=``N9FEN
M:0`N<F]D871A`"YD871A`"YE:%]F<F%M90`N8W1O<G,`+F1T;W)S`"YG;W0`
M+F1Y;F%M:6,`+G-B<W,`+F)S<P`N8V]M;65N=``N;F]T90``````````````
M```````````````````````````````````````````;`````0````(```#T
M@`0(]````!,```````````````$`````````(P````<````"````"($$"`@!
M```@```````````````$`````````#$````%`````@```"B!!`@H`0``1```
M``0`````````!`````0````W````"P````(```!L@00(;`$``,`````%````
M`0````0````0````/P````,````"````+(($""P"``#'```````````````!
M`````````$<```#___]O`@```/2"!`CT`@``&`````0``````````@````(`
M``!4````_O__;P(````,@P0(#`,``#`````%`````0````0`````````8P``
M``D````"````/(,$"#P#```(````!``````````$````"````&P````)````
M`@```$2#!`A$`P``2`````0````+````!`````@```!U`````0````8```",
M@P0(C`,``!@```````````````0`````````>P````$````&````I(,$"*0#
M``"@```````````````$````!````(`````!````!@```%"$!`A0!```(`(`
M````````````$`````````"&`````0````8```!PA@0(<`8``!X`````````
M``````0`````````C`````$````"````H(8$"*`&``#@```````````````@
M`````````)0````!`````P```("7!`B`!P``$```````````````!```````
M``":`````0````,```"0EP0(D`<```0```````````````0`````````I```
M``$````#````E)<$")0'```(```````````````$`````````*L````!````
M`P```)R7!`B<!P``"```````````````!`````````"R`````0````,```"D
MEP0(I`<``#0```````````````0````$````MP````8````#````V)<$"-@'
M``#(````!0`````````$````"````,`````!`````0```*"8!`B@"```````
M`````````````0````````#&````"`````,```"@F`0(H`@``!@`````````
M``````0`````````RP````$``````````````*`(``!$`0`````````````!
M`````````-0````'``````````````#D"0``>````````````````0``````
J```1`````P``````````````7`H``-H```````````````$`````````
`
end
begin 755 getRemoteHostName.mcplinux
M?T5,1@$!`0````````````(``P`!````X(,$"#0```!P"@```````#0`(``&
M`"@`&@`9``8````T````-(`$"#2`!`C`````P`````4````$`````P```/0`
M``#T@`0(](`$"!,````3````!`````$````!``````````"`!`@`@`0(P`8`
M`,`&```%`````!````$```#`!@``P)8$","6!`@8`0``,`$```8`````$```
M`@```!`'```0EP0($)<$",@```#(````!@````0````$````"`$```B!!`@(
M@00((````"`````$````!````"]L:6(O;&0M;&EN=7@N<V\N,@``!````!``
M```!````1TY5```````"`````@````4````#````"@````D````$````"```
M`````````````0````(````#``````````4`````````!@````<`````````
M````````````````B````&2#!`B!````(@```%8```!T@P0(&````!(````P
M````A(,$"*P````B````=@```)2#!`C*````$@```!H```"D@P0(,@```!(`
M```A````M(,$")T````B````2````,2#!`BW`0``$@```&<````$A@0(!```
M`!$`#@`!```````````````@`````%]?9VUO;E]S=&%R=%]?`&QI8F,N<V\N
M-@!P<FEN=&8`7U]C>&%?9FEN86QI>F4`7U]D97)E9VES=&5R7V9R86UE7VEN
M9F\`9V5T:&]S=&)Y;F%M90!?7V5R<FYO7VQO8V%T:6]N`%])3U]S=&1I;E]U
M<V5D`%]?;&EB8U]S=&%R=%]M86EN`%]?<F5G:7-T97)?9G)A;65?:6YF;P!'
M3$E"0U\R+C$N,P!'3$E"0U\R+C`````"``(``@`"``(``P`"``$````!``(`
M$````!``````````<Q]I"0```P">````$````!!I:0T```(`J@`````````,
MEP0(!@D``/"6!`@'`0``])8$"`<"``#XE@0(!P,``/R6!`@'!````)<$"`<%
M```$EP0(!P8```B7!`@'!P``58GE@^P(Z+T```"0Z%,!``#H/@(``,G#_S7H
ME@0(_R7LE@0(`````/\E\)8$"&@`````Z>#_____)?26!`AH"````.G0____
M_R7XE@0(:!````#IP/____\E_)8$"&@8````Z;#_____)0"7!`AH(````.F@
M_____R4$EP0(:"@```#ID/____\E")<$"&@P````Z8#___\`````````````
M```Q[5Z)X8/D\%!44FC0A00(:#R#!`A15FC@A`0(Z)/____TB?95B>534.@`
M````6X'#UA(``(N#*````(7`=`+_T(M=_,G#B?:0D)"0D)"0D%6)Y8/L"(L5
MS)8$"(72=4F+%<B6!`B+`H7`=!J-="8`C4($H\B6!`C_$HL5R)8$"(L*A<EU
MZKB$@P0(A<!T$(/L#&C0E@0(Z`C___^#Q!"X`0```*/,E@0(B>Q=PXUV`%6)
MY8/L"(GL7<.-M@````!5N&2#!`B)Y8/L"(7`=!6#[`AHV)<$"&C0E@0(Z*/^
M__^#Q!")[%W#D(VT)@````!5B>6#[`B)[%W#C;8`````58GE@^P(@WT(`G0<
M@^P(BT4,_S!H((8$".BF_O__@\00N`$```#K>L=%_`````"#[`R+10R#P`3_
M,.BE_O__@\00B<")1?R#??P`=">#[`2+1?S_,(M%#(/`!/\P:$"&!`CH7?[_
M_X/$$+@`````ZS&-=@"#[`2#[`SH%?[__X/$#(G`B<#_,(M%#(/`!/\P:("&
M!`CH*O[__X/$$+@"````R<.0D)"0D)"0D)"0D)!5B>53@^P$H=26!`B[U)8$
M"(/X_W06C78`C;PG`````(/K!/_0BP.#^/]U]%A;7<-5B>6#[`B)[%W#C;8`
M````58GE4U+H`````%N!PPH1``"-=@#H1_[__XM=_,G#````````````````
M`````````P````$``@````````````````````````````````!5<V%G93H@
M)7,@/')E;6]T95]H;W-T/@H``````````%)30U0@0W1396,@;F%M92!F;W(@
M<F5M;W1E(&AO<W0@)7,Z("5S"@````````````````````````````````!#
M86YN;W0@<F5S;VQV92!R96UO=&4@:&]S="`E<R`H97)R;F\@)60I"@``````
M``````````````````````````````````#@E@0(``````````#_____````
M`/____\`````$)<$"```````````:H,$"'J#!`B*@P0(FH,$"*J#!`BZ@P0(
MRH,$"``````!````$`````P````\@P0(#0```-"%!`@$````*($$"`4````$
M@@0(!@```&2!!`@*````G@````L````0````%0`````````#````Y)8$"`(`
M```X````%````!$````7````!(,$"!$```#\@@0($@````@````3````"```
M`/[__V_,@@0(____;P$```#P__]ON(($"```````````````````````````
M``````````````````````````````````````!'0T,Z("A'3E4I(#(N.38@
M,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3<I``!'0T,Z("A'
M3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3<I
M``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ
M(#(N.38M.3@I``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@*%)E9"!(870@
M3&EN=7@@-RXQ(#(N.38M.3@I``!'0T,Z("A'3E4I(#(N.38@,C`P,#`W,S$@
M*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3@I``!'0T,Z("A'3E4I(#(N.38@
M,C`P,#`W,S$@*%)E9"!(870@3&EN=7@@-RXQ(#(N.38M.3<I``@`````````
M`0```#`Q+C`Q````"``````````!````,#$N,#$````(``````````$````P
M,2XP,0````@``````````0```#`Q+C`Q````"``````````!````,#$N,#$`
M```(``````````$````P,2XP,0`````N<WEM=&%B`"YS=')T86(`+G-H<W1R
M=&%B`"YI;G1E<G``+FYO=&4N04))+71A9P`N:&%S:``N9'EN<WEM`"YD>6YS
M='(`+F=N=2YV97)S:6]N`"YG;G4N=F5R<VEO;E]R`"YR96PN9'EN`"YR96PN
M<&QT`"YI;FET`"YP;'0`+G1E>'0`+F9I;FD`+G)O9&%T80`N9&%T80`N96A?
M9G)A;64`+F-T;W)S`"YD=&]R<P`N9V]T`"YD>6YA;6EC`"YS8G-S`"YB<W,`
M+F-O;6UE;G0`+FYO=&4`````````````````````````````````````````
M````````````````&P````$````"````](`$"/0````3```````````````!
M`````````",````'`````@````B!!`@(`0``(```````````````!```````
M```Q````!0````(````H@00(*`$``#P````$``````````0````$````-P``
M``L````"````9($$"&0!``"@````!0````$````$````$````#\````#````
M`@````2"!`@$`@``M````````````````0````````!'````____;P(```"X
M@@0(N`(``!0````$``````````(````"````5````/[__V\"````S(($",P"
M```P````!0````$````$`````````&,````)`````@```/R"!`C\`@``"```
M``0`````````!`````@```!L````"0````(````$@P0(!`,``#@````$````
M"P````0````(````=0````$````&````/(,$"#P#```8```````````````$
M`````````'L````!````!@```%2#!`A4`P``@```````````````!`````0`
M``"``````0````8```#@@P0(X`,``/`!`````````````!``````````A@``
M``$````&````T(4$"-`%```>```````````````$`````````(P````!````
M`@````"&!`@`!@``P```````````````(`````````"4`````0````,```#`
ME@0(P`8``!````````````````0`````````F@````$````#````T)8$"-`&
M```$```````````````$`````````*0````!`````P```-26!`C4!@``"```
M````````````!`````````"K`````0````,```#<E@0(W`8```@`````````
M``````0`````````L@````$````#````Y)8$".0&```L```````````````$
M````!````+<````&`````P```!"7!`@0!P``R`````4`````````!`````@`
M``#``````0````$```#8EP0(V`<```````````````````$`````````Q@``
M``@````#````V)<$"-@'```8```````````````$`````````,L````!````
M``````````#8!P``1`$``````````````0````````#4````!P``````````
M````'`D``'@```````````````$`````````$0````,``````````````)0)
6``#:```````````````!````````````
`
end
begin 755 check_ctcasd.mcplinux
M?T5,1@$!`0````````````(``P`!````V)8$"#0```#XIP$``````#0`(``&
M`"@`(@`?``8````T````-(`$"#2`!`C`````P`````4````$`````P```/0`
M``#T@`0(](`$"!,````3````!`````$````!``````````"`!`@`@`0(\F@!
M`/)H`0`%`````!````$`````<`$``/`%"`#P!0AH'```K!P```8`````$```
M`@```"B*`0`H"@8(*`H&"``!`````0``!@````0````$````"`$```B!!`@(
M@00((````"`````$````!````"]L:6(O;&0M;&EN=7@N<V\N,@``!````!``
M```!````1TY5```````"`````@````4```"G````6````#X`````````````
M``````!%````"`````````!````````````````C`````````$T```!3````
M(0```%``````````.P```````````````````#8````/````````````````
M```````````````E````&@``````````````,P``````````````````````
M```X````$0```!`````9````50```$L````W````/0```#H````Q````)P``
M`$,`````````1P``````````````(@````````````````````````!,````
M`P`````````3````#0````````````````````````!)````+P````(````@
M````-````````````````````!L`````````````````````````````````
M`````````````````````````````"T```!6````!P````````!(````!@``
M`#(```!&````"0```````````````````%<`````````````````````````
M`````#P``````````````````````````````!X`````````3@`````````U
M```````````````L````4@```!P``````````````````````````````!4`
M``!!````*P``````````````1````````````````````!T`````````````
M```````Y``````````X````````````````````*````3P``````````````
M40```"H````?````%@````````````````````````!4``````````4```!"
M````2@````````````````````$`````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````````````````````````+```````````````8
M```````````````$````````````````````````````````````````````
M```,`````````!<``````````````"@`````````````````````````````
M```````P`````````!0`````````/P`````````I`````````!(`````````
M`````````````````````"X`````````)@``````````````````````````
M```````````````D``````````````````````````````#W`@``&),$"%8`
M```2````G0,``"B3!`@[````$@```/(````XDP0(<P```!(```"6`P``2),$
M"&<!```2````R@,``)`,!@@$````$0`6`'(!``!8DP0(-````!(```!_`@``
M:),$""\````2````;P```"@*!@@`````$0#Q_R,```!XDP0(70```!(```#4
M`P``S/,%"`0````1``\`(0$``(B3!`@L````$@```*D"``"8DP0(*0```!(`
M``!?````J),$"%8````2````X@(``+B3!`@T````$@```!(!``#(DP0(1`8`
M`!(````#`P``V),$"#<````2````V@,``)0,!@@0````$0`6`"\#``#HDP0(
M-P```!(```"_`0``^),$".`````2````]0$```B4!`C:````$@```*("```8
ME`0(20```!(```!5`P``*)0$"!L!```2````>`````3P!0@`````$0`/`&,#
M```XE`0(WP8``!(```"Q`@``2)0$"(X````2````"0,``%B4!`@5`0``(@``
M`#H```!HE`0(<0```!(```"J`P``:`P&"`0````A`!8`N`(``'B4!`@[````
M$@```(4```#PD@0(`````!(`"@#C`P``$`@&"`0````1``\`C0(``(B4!`A%
M`@``$@````(!``"8E`0(=````!(```#R`P``I`P&"`0````1`!8`9@(``&P,
M!@@$````$0`6`/T#````"08()`$``!$`#P#-`0``J)0$"+`````2````;0,`
M`+B4!`@V`0``$@```$0!``#(E`0(5`0``!(````5`@``V)0$"),````2````
M+0```.B4!`@U`0``$@```#$!``#XE`0(XP$``!(```!'`P``")4$"$P````2
M````BP```!B5!`B<!0``$@```/$"```HE00(-P```!(````2!```'`@&"`0`
M```1``\`TP```#B5!`C,````$@```&T"``!(E00($P0``!(```!4`0``6)4$
M"$@````2````N0,``&@,!@@`````$`#Q_\8"``!HE00(H````"(```"$`P``
M>)4$"-8````2````-@,``(B5!`AI`@``$@```.H"``"8E00(J@$``!(```"H
M`P``:`P&"`0````1`!8`)`(``*B5!`@T`P``$@```),```#(<@4(`````!(`
M#0"9````N)4$"$(````2````A@(``,B5!`A&````$@```*D#``!H#`8(!```
M`"$`%@"^`@``V)4$"+D!```2````WP$``.B5!`A-`0``$@```#X#``#XE00(
M5P```!(````K!```3&$%"%H````2``P`D@$```B6!`A[````$@```+(#``!H
M#`8(`````!``\?^A````/`L&"``````1`/'_HP,``!B6!`C5````$@```,4#
M``"L#`8(`````!``\?\>````*)8$"&L````2````@0$``#B6!`AV`@``$@``
M`$X#``!(E@0(5````!(````6````6)8$"&0````2````)P,``&B6!`B-````
M$@````,"``!XE@0(00$``!(```"4`@``<`P&"`0````1`!8`=0,```1S!0@$
M````$0`.`$4$```@"`8(!````!$`#P!>!```J`P&"`0````1`!8`$0```(B6
M!`AK````$@```*X!``"8E@0(*````!(```";`@``J)8$"#H````2````:`0`
M``P(!@@$````$0`/`$L``````````````"````!C`0``N)8$"#,````2````
MMP``````````````(````%\"``#(E@0(,````!(`````;&EB<'1H<F5A9"YS
M;RXP`')E8W8`8V]N;F5C=`!S96YD`&YA;F]S;&5E<`!P=&AR96%D7V]N8V4`
M7U]E<G)N;U]L;V-A=&EO;@!?2G9?4F5G:7-T97)#;&%S<V5S`&-L;W-E`&QI
M8G-R8RYS;P!?1%E.04U)0P!?7V1S;U]H86YD;&4`7VEN:70`<W)C<W1R=`!?
M9FEN:0!S<F-S=&%T`%]'3$]"04Q?3T9&4T547U1!0DQ%7P!?7V=M;VY?<W1A
M<G1?7P!L:6)C=%]S96,N<V\`<V5C7W)E;&5A<V5?8G5F9F5R`&QI8F-T7V-U
M+G-O`&-U7V%P:V=?97)R;W)?,0!C=5]G971?97)R;7-G7S$`8W5?:6-O;G9?
M<W1R7S$`8W5?<F5L7V5R<FUS9U\Q`&-U7V=E=%]P<F]C<W!E961?,0!C=5]I
M8V]N=E]O<&5N7S$`8W5?9V5T7V5R<F]R7S$`8W5?<V5T7V5R<F]R7S$`8W5?
M<F5L7V5R<F]R7S$`8W5?:6-O;G9?8VQO<V5?,0!C=5]P<V5T7V5R<F]R7S$`
M;&EB8W1?='(N<V\`=')?<F5C;W)D7V1A=&%?,0!T<E]S971?<VEZ95\Q`'1R
M7V=E=%]F:6QE;F%M95\Q`'1R7W-E=%]T<F%C95]L979E;'-?,0!T<E]G971?
M<VEZ95\Q`'1R7W-E=%]F:6QE;F%M95\Q`'1R7W)E8V]R9%]I9%\Q`'1R7W)E
M9VES=&5R7V-O;7!O;F5N=%\Q`&QI8G-T9&,K*RYS;RXU`&QI8FTN<V\N-@!L
M:6)C+G-O+C8`<W1R8W!Y`'-T9&]U=`!?7W-T<G1O;%]I;G1E<FYA;`!G971P
M:60`;65M8W!Y`&UA;&QO8P!O<'1A<F<`<V]C:V5T`'-E;&5C=`!I<W-P86-E
M`'!U=&5N=@!C:&UO9`!S=')R8VAR`%]?<F5G:7-T97)?9G)A;65?:6YF;U]B
M87-E<P!F<')I;G1F`'-T<F-A=`!C:&1I<@!N;%]L86YG:6YF;P!U;6%S:P!?
M7V1E<F5G:7-T97)?9G)A;65?:6YF;U]B87-E<P!S=')N8W!Y`'5N;&EN:P!R
M96%L;&]C`%]?<W1R9'5P`&=E=&]P=`!M96US970`7U]A<W-E<G1?9F%I;`!S
M971L;V-A;&4`7U]X<W1A=`!?24]?<W1D:6Y?=7-E9`!?7VQI8F-?<W1A<G1?
M;6%I;@!S=')C:'(`;6MD:7(`9G)E90!?7V5N=FER;VX`7V5D871A`%]?8G-S
M7W-T87)T`%]E;F0`=')A8V5S:7IE`'1R86-E`'1I;65I;F9O`&-F<F]M7W5T
M9CA?:&1L`'1R86-E;&5V96P`8W5?;65S9W1B;%]C=&-A<U]M<V<`8V%S7U]T
M<F%C95]R96=I<W1E<E]O;F-E`&-A<U]?=')A8V5?<F5G:7-T97)?8W1C87,`
M8V%S7U]T<F%C95]D971A:6Q?;&5V96QS`'1R86-E9FEL90!C=&]?=71F.%]H
M9&P`0F%S90!'3$E"0U\R+C``1T-#7S,N,`````(``@`#``(``0`#``(``0`$
M``$``P`"``0``@`#``(``0`"``4`!0`"``(``0`"``(`!@`$``(``@`!``$`
M`@`#``$``@`!``4``@`#``4`!``#``(````"``$`!P`"``,``0`&``(``@`"
M``(`!0`!`````@`"``(`!0`"``$``P`!``$``@`!``0``P`"``0``@`%``(`
M`0`!``$`!``%``(``0````,````"``$``0#&````$````"````"5B`0````'
M`'4$`````````0`!`*(!```0````(````)6(!`````4`=00````````!``$`
M`0```!`````@````$&EI#0``!`!Z!`````````$``0#F````$````"````"5
MB`0````#`'4$`````````0`"`%4"```0`````````%`F>0L```8`A`0``!``
M```0:6D-```"`'H$````````.`P&"`8%```\#`8(!@H``$`,!@@&$0``1`P&
M"`8?``!(#`8(!B(``$P,!@@&)```4`P&"`8N``!4#`8(!D```%@,!@@&3@``
M7`P&"`9/``!@#`8(!E,``&0,!@@&5@``:`P&"`4W``!L#`8(!2,``'`,!@@%
M3```2`L&"`<!``!,"P8(!P(``%`+!@@'`P``5`L&"`<$``!8"P8(!P8``%P+
M!@@'!P``8`L&"`<)``!D"P8(!PL``&@+!@@'#```;`L&"`<-``!P"P8(!PX`
M`'0+!@@'#P``>`L&"`<0``!\"P8(!Q(``(`+!@@'$P``A`L&"`<4``"("P8(
M!Q4``(P+!@@'%@``D`L&"`<8``"4"P8(!QD``)@+!@@'&@``G`L&"`<;``"@
M"P8(!QT``*0+!@@'(```J`L&"`<A``"L"P8(!R4``+`+!@@')@``M`L&"`<G
M``"X"P8(!R@``+P+!@@'*0``P`L&"`<J``#$"P8(!RL``,@+!@@'+```S`L&
M"`<M``#0"P8(!R\``-0+!@@',```V`L&"`<Q``#<"P8(!S,``.`+!@@'-```
MY`L&"`<U``#H"P8(!S8``.P+!@@'.```\`L&"`<Z``#T"P8(!SL``/@+!@@'
M/0``_`L&"`<^````#`8(!S\```0,!@@'00``"`P&"`=$```,#`8(!T8``!`,
M!@@'1P``%`P&"`=(```8#`8(!TD``!P,!@@'2@``(`P&"`=+```D#`8(!U``
M`"@,!@@'40``+`P&"`=2```P#`8(!U4``#0,!@@'5P``58GE@^P(Z`$$``#H
M=`0``.B?WP``R<,`_S5`"P8(_R5$"P8(`````/\E2`L&"&@`````Z>#_____
M)4P+!@AH"````.G0_____R50"P8(:!````#IP/____\E5`L&"&@8````Z;#_
M____)5@+!@AH(````.F@_____R5<"P8(:"@```#ID/____\E8`L&"&@P````
MZ8#_____)60+!@AH.````.EP_____R5H"P8(:$````#I8/____\E;`L&"&A(
M````Z5#_____)7`+!@AH4````.E`_____R5T"P8(:%@```#I,/____\E>`L&
M"&A@````Z2#_____)7P+!@AH:````.D0_____R6`"P8(:'````#I`/____\E
MA`L&"&AX````Z?#^____)8@+!@AH@````.G@_O___R6,"P8(:(@```#IT/[_
M__\ED`L&"&B0````Z<#^____)90+!@AHF````.FP_O___R68"P8(:*````#I
MH/[___\EG`L&"&BH````Z9#^____):`+!@AHL````.F`_O___R6D"P8(:+@`
M``#I</[___\EJ`L&"&C`````Z6#^____):P+!@AHR````.E0_O___R6P"P8(
M:-````#I0/[___\EM`L&"&C8````Z3#^____);@+!@AHX````.D@_O___R6\
M"P8(:.@```#I$/[___\EP`L&"&CP````Z0#^____)<0+!@AH^````.GP_?__
M_R7("P8(:``!``#IX/W___\ES`L&"&@(`0``Z=#]____)=`+!@AH$`$``.G`
M_?___R74"P8(:!@!``#IL/W___\EV`L&"&@@`0``Z:#]____)=P+!@AH*`$`
M`.F0_?___R7@"P8(:#`!``#I@/W___\EY`L&"&@X`0``Z7#]____)>@+!@AH
M0`$``.E@_?___R7L"P8(:$@!``#I4/W___\E\`L&"&A0`0``Z4#]____)?0+
M!@AH6`$``.DP_?___R7X"P8(:&`!``#I(/W___\E_`L&"&AH`0``Z1#]____
M)0`,!@AH<`$``.D`_?___R4$#`8(:'@!``#I\/S___\E"`P&"&B``0``Z>#\
M____)0P,!@AHB`$``.G0_/___R40#`8(:)`!``#IP/S___\E%`P&"&B8`0``
MZ;#\____)1@,!@AHH`$``.F@_/___R4<#`8(:*@!``#ID/S___\E(`P&"&BP
M`0``Z8#\____)20,!@AHN`$``.EP_/___R4H#`8(:,`!``#I8/S___\E+`P&
M"&C(`0``Z5#\____)3`,!@AHT`$``.E`_/___R4T#`8(:-@!``#I,/S__S'M
M7HGA@^3P4%12:,AR!0AH\)($"%%6:,B7!`CH?_[___20D%6)Y5-0Z`````!;
M@<,V=`$`BX,H`0``A<!T`O_0BUW\R<.0D%6)Y8/L"(`]=`P&"`!U0J$(\`4(
MBQ"%TG07B?:#P`2C"/`%"/_2H0CP!0B+$(72=>NX6)0$"(7`=!"#[`QH)`H&
M".CQ_/__@\00Q@5T#`8(`<G#D%6X:)4$"(GEZ`````!:@<*[<P$`@^P(A<!T
M%5)J`&AX#`8(:"0*!@CHQ_W__X/$$*$X"P8(A<!T&;@`````A<!T$(/L#&@X
M"P8(Z#UH^_>#Q!#)PU6)Y5=64X'LW!$``(/D\(/L"&HOBW4,_S;'A3#N__\`
M````QX6T[O__`````.C>_?__@\00A<"+?0BCR/,%"`^$M1```$"CR/,%")!0
M_S7$\P4(5E?HYOS__X/$$(/X_XG##X2"````C4.:@_@0=]S_)(5$=`4(46@`
M$```_S5P#`8(:.#S!0CH$_[__X/$$.NZ4F@`!```_S5P#`8(:``$!@CKXVH`
M:@IJ`/\U<`P&".C*_/__@\00/0``$`"C!`@&"'Z'QP4$"`8(```!`.EX____
M_P7,\P4(Z6W_____!=#S!0CI8O___Z',\P4(A<`/A/D/``#HB,@``(/L#&C@
M\P4(Z*?]__]8_S4$"`8(Z!O[___'!"0`!`8(Z/_\__\/M@4B"`8(@\00A<`/
MA(<```!(#X2=#P``9J'S<P4(9HF%V.___Z#U<P4(B(7:[___H?9S!0B)A?3N
M__^AT/,%"(7`C97T[O__=`:-E=CO__]0_#'`B=>)V?*N]]%14K\`!`8(B=GR
MKO?146@`!`8(:@1H!`@&"+_@\P4(B=GRKO?146C@\P4(:@1J:FCZ<P4(Z!G]
M__^#Q##'A?#N__\#````QX4L[O__`````(GV@^P(C87P[O__4(V-Z.___U&-
MA>[N__]0:@!H_W,%"&@%=`4(9L>%[N[__P`0Z.[[__^#Q""%P(F%M.[__XG#
M#X7/#0``#[^%[N[__X/H=KH?A>M1]^*)T,'H!8`](@@&"`&)A>CN__\/AWL-
M```QTC'`.YWH[O__QX7<[O__`````'TV@#TB"`8(`0^'RPP``(T$DHT$@(V$
MA>CO__]F@WAV$0^$^@4``$([E>CN__^)E=SN__^)T'S*BXTP[O__@_DI=!2+
MA?#N__^%P`^%+?___XN-,.[__TET30^V!2((!@B%P'0@2'0K@^P,:@2-A3#N
M__]0:@%J;&CZ<P4(Z/S[__^#Q""+A3#N__^-9?1;7E_)PX/L"&IK:/IS!0CH
M'/K__X/$$.O>,<#\N1L```"-O6CO___'A3SN__\`````\ZMFJX`](@@&"``/
MA3H%``!0:@!J`6H!QX4P[O__`````.BH^___@\00A<")PP^(VP0``(/L"/R^
M!G0%"(V]:N___[D'````9L>%:.___P$`C85J[___\Z5H(G0%"%#H6_K__X/$
M#&INC8UH[___45.)C63O___H`_O__X/$$(7`#XBL`P``N@H```"-M2CO__\Q
MP/R)T8GW\ZN)T8V]^.[___.K@^P(C;UH[O__5XV%^.[__U#'A5#N__\`````
MQX54[O__`````,>%:.[__P````#'A6SN__\`````QX7X[O__:7)U<\>%_.[_
M_P$```#HO,T``(/$$(7`B84P[O__#X2X`0``H=#S!0B%P`^%50$``,>%,.[_
M_RD```"#[`Q3Z*?W__^-A5#N__^)!"3H*?G__XD\).@A^?__B30DZ+'0``"#
MQ!"+C3#N__^%R0^$W@```(N5/.[__XU"`8'ZQP```(F%/.[__P^.G_[__X7)
M=`V`/2((!@@`#X6;````H=#S!0B%P`^$"_[__XN%,.[__X7`=710:/]S!0C_
M-1`*!@AJ1&H!:#AT!0AJ`&HIZ"?Z__^#Q!2-A3CN__]0Z+CX__]>7XV%-.[_
M_U#_M3CN___HY/?__UE;_[4T[O___S5L#`8(Z/'V__]:_[4T[O__Z+7V__]8
M_[4X[O__Z'GV__^#Q!#IC?W__U!H_W,%"/\U%`H&"&I%ZXJ#[`AJ?FCZ<P4(
MZ-+W__^#Q!#I3O___X`](@@&"``/A##___^#[`QJ!(V%/.[__U!J`6I]:/IS
M!0CH8_G__X/$((N-,.[__^D(____@^P,C85D[O__4.@&^/__65B-A6#N__]0
M_[5D[O__Z#+W__]86O^U8.[___\U;`P&".@_]O__6/^U8.[__^@#]O__6/^U
M9.[__^C']?__@\00Z57^__^#[`A74^B=#```@\00A<")A3#N__]T6*'0\P4(
MA<`/A#'^__^#[`R-A5SN__]0Z(SW__]96(V%6.[__U#_M5SN___HN/;__UA:
M_[58[O___S5L#`8(Z,7U__]8_[58[O__Z(GU__]8_[5<[O__ZX2#[`B-A5#N
M__]04^AD$@``@\00A<")A3#N__]T6Z'0\P4(A<`/A+S]__^#[`R-A4SN__]0
MZ!?W__]96(V%2.[__U#_M4SN___H0_;__UA:_[5([O___S5L#`8(Z%#U__]8
M_[5([O__Z!3U__]8_[5,[O__Z0S___^#[`A6C8U0[O__4>APS```@\00A<")
MA3#N__]T7(L-T/,%"(7)#X1#_?__@^P,C85$[O__4.B>]O__6%J-A4#N__]0
M_[5$[O__Z,KU__]:6?^U0.[___\U;`P&".C7]/__6/^U0.[__^B;]/__6/^U
M1.[__^F3_O__@[TX[___9`^%Z/S__^GM_/__D.A7]?__@SAS#X2^````#[85
M(@@&"(/Z`7X<@_H$=!>#[`QJ!%!J`6I[:/IS!0CH6??__X/$((/L#%/'A3#N
M__\I````Z%/T__\/M@4B"`8(@\00@_@!QX5X[O__`````(VU>.[__\>%?.[_
M_X"6F`!^%X/X!'02@^P(:GAH^G,%".A&]?__@\00C9UP[O__D(/L"%-6Z-+S
M__^#Q!!`#X5R_/__Z+/T__^#.`0/A63\__^+A7#N__^+E73N__^)A7CN__^)
ME7SN___KQ(/L#%/HQ_/__^DY_/__B?8/M@4B"`8(@_@!?B&#^`1T'(/L#&H$
MZ&7T__]0:@%J>FCZ<P4(Z(;V__^#Q"#'A3#N__\I````Z?[[__^#[`AJ?&CZ
M<P4(Z*7T__^#Q!#IK_K__P^_0'B#^`L/AP0#``#_)(6(=`4(@#TB"`8(``^$
MT````(T$DHT$@(V$A>CO__^-4'J)E=CN___'A=3N__\`````@'AZ``^$B0``
M`(H"A,!T*H/L#`^VP%#H`//__X/$$(7`=!&+A=CN__]`B878[O__B<+KUHN5
MV.[__X`Z`'14@^P(:B!2Z(+R__^)A=CN__^#Q!"`.`")PG0YB@*$P'0J@^P,
M#[;`4.BP\O__@\00A<!T$8N%V.[__T")A=CN__^)PNO6BY78[O__@#H`#X6G
M````@^P,:@2-A=3N__]0:@%J<&CZ<P4(Z&_U__^#Q""+/=#S!0B%_W4/QX4P
M[O__`0```.D-^?__5FC_<P4(_S7T"08(:CUJ`6@X=`4(:@!J`>A5]?__@\04
MC870[O__4.CF\___65N-A<SN__]0_[70[O__Z!+S__]86O^US.[___\U;`P&
M".@?\O__6/^US.[__^CC\?__6/^UT.[__^BG\?__@\00ZX!J`&H*C9W8[O__
M4U+H@?/__XF%U.[__XN%V.[__X/$$(`X``^%,/___X/L#&H`Z*_Q__^#Q!"%
MP`^%&____X/L"&H@_[78[O__QX74[O__`````.@Z\?__B878[O__@\00@#@`
MB<(/A.W^__^*`H3`="J#[`P/ML!0Z&3Q__^#Q!"%P'01BX78[O__0(F%V.[_
M_XG"Z]:+E=CN__^`.@`/A+3^__]J`&H*4U+HXO+__XF%U.[__XN%V.[__X/$
M$(`X``^%D?[__X/L#&H`Z!#Q__^#Q!"%P`^%?/[__\>%U.[__P````#I;?[_
M_XGVBX4L[O__A<`/A9H```"`/2((!@@`QX4L[O__`0```,>%\.[__P,```#'
MA3#N__\!````QX60[O__`````(VUD.[__\>%E.[__P#A]05U0HV=B.[__X/L
M"%-6Z'7P__^#Q!!`#X5%]___Z%;Q__^#.`0/A3?W__^+A8CN__^+E8SN__^)
MA9#N__^)E93N___KQ(/L"&IY:/IS!0CHE/'__X/$$.NJC78`QX4P[O__*0``
M`.GW]O__@#TB"`8(`'5ZBSW0\P4(A?\/A,3]__]6:/]S!0C_-?@)!@AJ/FH!
M:#AT!0AJ`&H!Z"CS__^#Q!2-A<CN__]0Z+GQ__]96XV%Q.[__U#_M<CN___H
MY?#__UA:_[7$[O___S5L#`8(Z/+O__]8_[7$[O__Z+;O__]8_[7([O__Z<[]
M__^#[`AJ<FCZ<P4(Z.OP__^#Q!#I;____Z`%=`4(@#TB"`8(`(B%NN[__XB%
MN^[__P^%QP(``(L]T/,%"(7_#X5%`@``@^P(:@!J`(V%N^[__U"-A;KN__]0
M:/]S!0AH!70%".C3\/__@\0@A<")A;3N__\/B%0!```]N]S__P^$J@```(`]
M(@@&"`!U?XLUT/,%"(7V#X2^_/___[6T[O__:/]S!0C_-00*!@AJ06H!:#AT
M!0AJ`&H!Z!WR__^#Q!2-A:#N__]0Z*[P__]96XV%G.[__U#_M:#N___HVN__
M_UA:_[6<[O___S5L#`8(Z.?N__]8_[6<[O__Z*ON__]8_[6@[O__Z</\__^#
M[`QJ!(V%M.[__U!J`6IV:/IS!0CHE?'__X/$(.E?____@#TB"`8(`'5_BS70
M\P4(A?8/A!3\____M;3N__]H_W,%"/\U#`H&"&I#:@%H.'0%"&H`:@'H<_'_
M_X/$%(V%J.[__U#H!/#__UE;C86D[O__4/^UJ.[__^@P[___6%K_M:3N____
M-6P,!@CH/>[__UC_M:3N___H`>[__U__M:CN___I&?S__X/L"&IU:/IS!0CH
M-N___X/$$.EJ____/;O<__\/A%;___^`/2((!@@`#X6"````BSW0\P4(A?\/
MA'S]__]6:/]S!0C_-0`*!@AJ0&H!:#AT!0AJ`&H!Z,KP__^#Q!2-A;#N__]0
MZ%OO__]96XV%K.[__U#_M;#N___HA^[__UA:_[6L[O___S5L#`8(Z)3M__]8
M_[6L[O__Z%CM__]?_[6P[O__Z!SM__^#Q!#I"/W__X/L#&H$C86T[O__4&H!
M:G1H^G,%".@Z\/__@\0@Z5S___]6:/]S!0C_-?P)!@AJ/VH!:#AT!0AJ`&H!
MZ#3P__^#Q!2-A<#N__]0Z,7N__]96XV%O.[__U#_M<#N___H\>W__UA:_[6\
M[O___S5L#`8(Z/[L__]8_[6\[O__Z,+L__]8_[7`[O__Z(;L__^#Q!#I1_W_
M_X/L"&IS:/IS!0CH[^W__X/$$.DB_?__C78`C12`C122C925Z.___P^_0G:)
MA>#N__\/OT)XB87D[O__OO____^-@KL````QVXF%).[__XG'_(C8B?'RKH/L
M#/?148/">O^U).[__XG7B?'RKO?145)J!(V%Y.[__U!J!(V%X.[__U!J!(V%
MW.[__U!J!6IO:/IS!0CH)>___X/$0(N5W.[__^FH\O__4&H$C8WP[O__46H$
MC87H[O__4&H":FYH^G,%".CV[O__@\0@Z5SR__^)]CV@W/__=2R`/2((!@@`
M=0_'A?#N__\#````Z9+R__^#[`AJ;6CZ<P4(Z/[L__^#Q!#KW8`](@@&"``/
MA9$```"AT/,%"(7`=12Y*0```,>%,.[__RD```#I:/+__U=H_W,%"/\U"`H&
M"&I":@%H.'0%"&H`:@'HD>[__X/$%(V%A.[__U#H(NW__UM>C86`[O__4/^U
MA.[__^A.[/__6EG_M8#N____-6P,!@CH6^O__UC_M8#N___H'^O__UC_M83N
M___HX^K__X/$$.EX____@^P,:@2-A;3N__]0:@%J=VCZ<P4(Z`'N__^#Q"#I
M3?___X/L"&II:/IS!0CH*NS__X/$$.G,\/__B?;H#P```.G`\/__BP;I1>__
M_Y")]E6)Y5=64X/L;(L=:`P&"(7;QT64`````,=%D``````/A.@```"+,X7V
M#X2X````D+^X=`4(N08```#\\Z8/A94```"+=92%]@^$]@```(M5D(/L"(T$
ME00```!0_W64Z%CL__^#Q!"%P`^$OP```(E%E%%J06H`C7V85^C\[/__BS.*
M5@:#Q!"`^CV)\(U.!G02A-)T#HGV08H1@/H]=`2$TG7T4BG!4?\S5^CL[/__
M7EAHOW0%"%?H#^S__XD\).AG[/__BTV0BU64@\00A<")!(IT0/]%D(/#!(L#
MA<")Q@^%2?____]-D(-]D/]T'8/L#(M-D(M%E/\TB.A[ZO___TV0@\00@WV0
M_W7CC67T6UY?R<-HP70%"&C4`0``:.!T!0AH+W4%".@NZO__:,%T!0AHS`$`
M`&C@=`4(:$%U!0CKY8/L#&H$Z&[J__^#Q!"%P(E%E`^%%O___VC!=`4(:,D!
M``!HX'0%"&A#=04(Z[>0D%6)Y5=64X'LM`$``.@`````6X'#ZV`!`(VSBFK_
M__R-O:C^__^Y`P```,>%G/[__P````#SI6:EI/^S&`$``/^S%`$``(V]J/[_
M_XF]D/[__^A2ZO__BX,<`0``#[9``H/$$(7`=`F#^`@/A)@%``"-E6C___\Q
MP+D@````B=?\\ZN+?0C![P6+=0B)O8C^__^#YA\/J[2]:/___XV-Z/[__XF-
M5/[__XN]5/[__[D@````_/.KBX6(_O__#ZNTA>C^__^#[`R-A:#^__]0_[54
M_O__4HM%"&H`0%#'A:#^__\\````QX6D_O__`````.CCZ/__@\0@A<")A9S^
M__\/B'($``"%P`^$Y@,``,>%G/[__P````"+O8C^__\/H[2]Z/[__P^2P(3`
M=1,/H[2]:/___P^2P(3`#X4L`0``@^P(BX,0`0``_W`@:@AJ`8V#F6K__U!J
M`&H*Z!CK__^#Q!C_LQ@!``#_LQ0!``#'A9S^__\*````Z"KI__^+@QP!```/
MM@"#Q!"#^`AW,8G:*Y2#H*#^___BB?8\7P$`S%X!`,Q>`0`\7P$`S%X!`#Q?
M`0`\7P$`/%\!`,Q>`0"#[`C_LQ@!``#_LQ0!``#HU.C__XN#'`$```^V0`*#
MQ!"%P'0%@_@(=`Z+A9S^__^-9?1;7E_)PU!J!(V%G/[__U"+O9#^___\,<"Y
M______*N]]%1_[60_O__:@)J08V#HVK__U#H+>K__X/$(.NZ4FH$C86<_O__
M4(N]D/[___PQP+G_____\J[WT5'_M9#^__]J`FI"C8.C:O__4.CUZ?__@\0@
MZ57___^0BWT,BP=FP<@(P<@09L'("&H`:@2)A9C^__^-A9C^__]0_W4(Z%/I
M__^#Q!"#^`0/A!L!``"%P`^(@P```%!J!(N#$`$``/]P*&H*:@&-@YEJ__]0
M:@!J"NBOZ?__@\08_[,8`0``_[,4`0``QX6<_O__"@```.C!Y___BX,<`0``
M#[8`@\00@_@(#X?$_O__B=\KO(,,HO[__^>0/%\!`,Q>`0#,7@$`/%\!`,Q>
M`0`\7P$`/%\!`#Q?`0#,7@$`Z/?F____,(V#J&K__U"+@Q`!``#_<!QJ!VH!
MC8.9:O__4&H`:@KH(>G__X/$&/^S&`$``/^S%`$``,>%G/[__PH```#H,^?_
M_XN#'`$```^V`(/$$(/X"`^'-O[__XG:*Y2#G*+^___BC78`/%\!`,Q>`0#,
M7@$`/%\!`,Q>`0`\7P$`/%\!`#Q?`0#,7@$`:@"+?0S_-_]W!/]U".@:Z/__
MBQ>#Q!`YT`^$Y?W__X7`#XB!````4%*+@Q`!``#_<"AJ"FH!C8.9:O__4&H`
M:@KH=NC__X/$&/^S&`$``/^S%`$``,>%G/[__PH```#HB.;__XN#'`$```^V
M`(/$$(/X"`^'B_W__XG?*[R#1*/^___G/%\!`,Q>`0#,7@$`/%\!`,Q>`0`\
M7P$`/%\!`#Q?`0#,7@$`Z+_E____,(V#J&K__U"+@Q`!``#_<!QJ!VH!C8.9
M:O__4&H`:@KHZ>?__X/$&/^S&`$``/^S%`$``,>%G/[__PH```#H^^7__XN#
M'`$```^V`(/$$(/X"`^'_OS__XG:*Y2#U*/^___BC78`/%\!`,Q>`0#,7@$`
M/%\!`,Q>`0`\7P$`/%\!`#Q?`0#,7@$`@^P(BX,0`0``_W`D:@EJ`8V#F6K_
M_U!J`&IFZ&3G__^#Q!C_LQ@!``#_LQ0!``#'A9S^__]F````Z';E__^+@QP!
M```/M@"#Q!"#^`@/AWG\__^)WRN\@UBD_O__YXGV/%\!`,Q>`0#,7@$`/%\!
M`,Q>`0`\7P$`/%\!`#Q?`0#,7@$`Z*OD____,(V#KVK__U"+@Q`!``#_<!QJ
M!VH!C8.9:O__4&H`:@KHU>;__X/$&/^S&`$``/^S%`$``,>%G/[__PH```#H
MY^3__XN#'`$```^V`(/$$(/X"`^'ZOO__XG:*Y2#Z*3^___BC78`/%\!`,Q>
M`0#,7@$`/%\!`,Q>`0`\7P$`/%\!`#Q?`0#,7@$`B[V0_O___#'`N?_____R
MKH/L#/?14?^UD/[__VH!:D"-@Z-J__]0Z"3F__^#Q"#I-/K__U6)Y5=64X'L
MM`$``.@`````6X'#KUH!`(VSN&K___R-O:C^__^Y!````,>%G/[__P````#S
MI6:E_[,8`0``_[,4`0``C;VH_O__B;V0_O__Z!?D__^+@QP!```/MD`"@\00
MA<!T"8/X"`^$D08``(V5:/___S'`N2````")U_SSJXM]",'O!8MU"(F]B/[_
M_X/F'P^KM+UH____C8WH_O__B8U4_O__B[U4_O__N2````#\\ZN+A8C^__\/
MJ[2%Z/[__X/L#(V%H/[__U#_M53^__]J`(M%"%)`4,>%H/[__SP```#'A:3^
M__\`````Z*CB__^#Q""%P(F%G/[__P^(;@4``(7`#X0W!0``QX6<_O__````
M`(N]B/[__P^CM+WH_O__#Y+`A,!U$P^CM+UH____#Y+`A,`/A9T```"#[`B+
M@Q`!``#_<"!J"&H!C8.9:O__4&H`:@KHW>3__\>%G/[__PH```"#Q""#[`C_
MLQ@!``#_LQ0!``#H[.+__XN#'`$```^V0`*#Q!"%P'0%@_@(=`Z+A9S^__^-
M9?1;7E_)PU%J!(V%G/[__U"+O9#^___\,<"Y______*N]]%1_[60_O__:@)J
M08V#HVK__U#H1>3__X/$(.NZO@0```"-O9C^__^0:@!65_]U".@8Y/__@\00
MA<`/B*T#``"%P`^$Y0(``"G&`<>%]G79BX6<_O__A<`/A4____^+A9C^__]F
MP<@(P<@09L'("(M]#(7`B0=U#\>%G/[__P````#I)O___X/L#%#HO>'__XM5
M#(/$$(7`B4($#X3(`0``BWT,BS>%]HG'=4&+O9S^__^%_P^$\_[__XM]#(LW
MA?9T!XM'!(7`=16+10S'``````#'0`0`````Z<[^__^#[`Q0Z/7B__^#Q!#K
MW6H`5E?_=0CH5./__X/$$(7`#XC-````A<!T"BG&`<>%]G7=ZYJ#[`B+@Q`!
M``#_<"QJ"VH!C8.9:O__4&H`:@KH2^/__X/$&/^S&`$``/^S%`$``,>%G/[_
M_PH```#H7>'__XN#'`$```^V`(/$$(/X"`^'1____XG?*[R#<*C^___GD%58
M`0!L5P$`;%<!`%58`0!L5P$`55@!`%58`0!56`$`;%<!`%!J!(V%G/[__U"+
MO9#^___\,<"Y______*N]]%1_[60_O__:@)J0HV#HVK__U#HE>+__X/$(.G<
M_O__D.A7X/__BP"#^`0/A"O___]0C8/*:O__4(N#$`$``/]P'&H':@&-@YEJ
M__]0:@!J"NAWXO__@\08_[,8`0``_[,4`0``QX6<_O__"@```.B)X/__BX,<
M`0``#[8`@\00@_@(#X=S_O__B=HKE(-$J?[__^*055@!`&Q7`0!L5P$`55@!
M`&Q7`0!56`$`55@!`%58`0!L5P$`:/P```"-@^1J__]0BX,0`0``_W`0:@1J
M`8V#F6K__U!J`&H&Z.OA__^#Q!C_LQ@!``#_LQ0!``#'A9S^__\&````Z/W?
M__^+@QP!```/M@"#Q!"#^`@/A^C\__^)V2N,@]"I_O__X9!460$`#%8!``Q6
M`0!460$`#%8!`%19`0!460$`5%D!``Q6`0!0:@2-A9S^__]0B[V0_O__,<#\
MN?_____RKO?14?^UD/[__VH":D*-@Z-J__]0Z#7A___I??S__X/L"(N#$`$`
M`/]P+&H+:@&-@YEJ__]0:@!J"N@PX?__@\08_[,8`0``_[,4`0``QX6<_O__
M"@```.A"W___BX,<`0``#[8`@\00@_@(#X?0_/__B=\KO(.,JO[__^>)]K%8
M`0!050$`4%4!`+%8`0!050$`L5@!`+%8`0"Q6`$`4%4!`%!J!(V%G/[__U"+
MO9#^___\,<"Y______*N]]%1_[60_O__:@)J0HV#HVK__U#H>>#__X/$(.ED
M_/__D.@[WO__BP"#^`0/A$_\__]0C8/*:O__4(N#$`$``/]P'&H':@&-@YEJ
M__]0:@!J"NA;X/__@\08_[,8`0``_[,4`0``QX6<_O__"@```.AMWO__BX,<
M`0``#[8`@\00@_@(#X?[^___B=HKE(-@J_[__^*0L5@!`%!5`0!050$`L5@!
M`%!5`0"Q6`$`L5@!`+%8`0!050$`@^P(BX,0`0``_W`D:@EJ`8V#F6K__U!J
M`&IFZ-C?___'A9S^__]F````Z?;Z___H=-W___\PC8.O:O__4(N#$`$``/]P
M'&H':@&-@YEJ__]0:@!J"NB>W___@\08_[,8`0``_[,4`0``QX6<_O__"@``
M`.BPW?__BX,<`0``#[8`@\00@_@(#X>;^O__B=HKE(,<K/[__^)460$`#%8!
M``Q6`0!460$`#%8!`%19`0!460$`5%D!``Q6`0"+O9#^___\,<"Y______*N
M@^P,]]%1_[60_O__:@%J0(V#HVK__U#H\-[__X/$(.D[^?__58GE5E/H````
M`%N!PX)3`0"+=0B%]HM%#'00A<!U%8/L#%;H0-[__X/$$(UE^%M>R<.)]E)0
M:@!6Z%K>__^#Q!#KW)!5B>575E.#[`SH`````%N!PSI3`0"+?1"%_P^$40$`
M`(M%"(7`#X0K`0``,?;'1?``````4%?_=0S_=0CHD]S__X/$$(/X$G=;B=HK
ME(,,K?[__^*H4@$`I%(!`*12`0"D4@$`I%(!`*12`0"D4@$`I%(!`*12`0"D
M4@$`I%(!`*12`0"D4@$`I%(!`*12`0!94@$`I%(!`"Q2`0"`4@$`_T7PD$:#
M_@1_$8M%\(7`=(,QP(UE]%M>7\G#BTWPA<EU[\<'`````(/L"(N#$`$``/]P
M?&H?:@&-@ZUK__]0:@!J&NC<W?__N!H```#KQ&H4C8.W:___4(N#$`$``/]P
M;&H;:@&-@ZUK__]0:@!J!NBOW?__N`8```#KEX/L#(V#Q6O__U!J$8V#MVO_
M_U"+@Q`!``#_<'AJ'FH!C8.M:___4&H`:A?H>-W__[@7````Z5W___^#[`QJ
M`&H!C8/5:___4(N#$`$``/]P:&H:Z\F#[`QJ`&H#Z^.)]E6)Y5=64X/L#.@`
M````6X'#OE$!`(MU"(7VBWT,=`:+!H7`=2N%_W0&BP>%P'4-C67T6UXQP%_)
MPXUV`(/L#%#H@]S__\<'`````(/$$.O?@^P,4.AOW/__QP8`````@\00Z\%5
MB>575E.![`P!``#H`````%N!PU=1`0"+?0B%_P^$I0```(MU#(7V#X2:````
M46@``0``:@"-O>C^__]7Z#+<__]86FH`:@;H%]K__\<$)`X```#HZ]C__UE>
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
M`0"+?0B%_XMU$`^$[P$``(M%#(7`#X3;`0``A?8/A)X!``#'!@````#'1@0`
M````QT8(`````(L7B578BP*#[`C_=0R)1>R-1>R#P@10B578B47,Z$3@__^#
MQ!"%P`^%M````,=%X`````#'1>0`````BTT,C57@BP&)5=`#!XM5V#G"B=%S
M?HU%WHU5W(E%Q(E5R)"#[`AFBP'_=<2-40+_=<AFB47<B578Z!'?__^#Q!"%
MP'5A9HM%WF8]H,X/AM$````/M\`]H<X```^$I@```#VBS@``=$>#[`C_=<R-
M1=A0Z#SH__^#Q!"%P'4HBT7L`478BU4,BP(#!XM5V#G"B=%RCXM.!`%-U(M%
M#(M-U(D(B1<QP(UE]%M>7\G#D(M-T(M!!(7`=2+'000!````4(U&"%"-1@10
MC4784.BA[?__@\00A<!US>NI@^P(BX,0`0``_["(````:B)J`8V#K6O__U!J
M`&H$Z/&W__^X!````.NAB?:+1>"%P'7-@^P(5HU%V%#'1>`!````Z)'G___K
MKH/L"(N#$`$``/^P(`$``&I(:@&-@ZUK__]0:@!J!.BHM___@\0@Z[*-=@"#
M[`QJ`&H#C8-';O__4(N#$`$``/]P:&H::@&-@ZUK__]0:@!J%^AUM___N!<`
M``#I(O___X/L#&H`:@+KR8/L#&H`:@'KP)!5B>575E.#[`SH`````%N!P\XK
M`0"+30B%R71.BT4(BW`$,?^+`#G'<Q&)]HM6"(72=5%'@\8,.<=R\8T$0(/L
M",'@`E"+10C_<`3H`-C__XM%#(/$$(7`=1B+50C'`@````#'0@0`````C67T
M6UY?R<.#[`AJ"/]U".C1U___@\00Z^:#[`C_=@3_=@CHOM?__XM5"(/$$(L"
MZY=5B>575H/L"(M5"(72QT7P`````'0_BP*%P,=%\`H```")1?1T*S'V.<:+
M4@1S(OPQP(MZ"+G_____\J[WT8M%\$:-3`@0@\(,.W7TB4WP<M^#1?`"BT7P
M@\0(7E_)PY!5B>575E.#[!SH`````%N!P](J`0"+10AFB47JBT4,A<"Z#```
M`'1`BTT,BPF%R8E-V'0TQT7D`````(M%##E-Y(MP!',B_)"+?@@QP+G_____
M\J[WT8U4"A#_1>2+3=B#Q@PY3>1RX(/L"(V#76[__U!2_W44_W40_W4<_W48
MZ$#D__^#Q""%P(G"=`N-9?1;7HG07\G#D(M5'(L"@^P(B47LC47RC57P4%)F
MBTWJB57<9HE-\(E%X.B2V___@\00A<")PG7&BT7L9HM5\F:)$(M]#(-%[`(Q
M]H7_9L=%\/&P=`6+30R+,8/L"(U][%?_=1C_=11J`%8/MT7P4.A9Y/__@\0@
MA<")PG6!A?9T$8M5##L"BW($QT7D`````')`@^P(_W7@_W7<9L=%\/^PZ!O;
M__^#Q!"%P(G"#X5+____BU7L9HM%\F:)`HM%[(/``HM5'(E%[(D",=+I+/__
M_X/L"%?_=1C_=11J`/\V:/*P``!FQT7P\K#HW>/__X/$((7`=36#[`A7_W48
M_W44:@#_=@AH\[```.BIYO__@\0@A<!U%?]%Y(M%Y(M-#(/&##L!<JOI9O__
M_XG"Z<O^__^)]E6)Y5=64X/L/.@`````6X'##BD!`(M%"(7`=`F+50B+`H7`
M=3N#[`S_=0AJ`8V#=6[__U"+@Q`!``#_<&AJ&FH!C8.M:___4&H`:@3H1[3_
M_[@$````C67T6UY?R<.)]HMU#(7V#X1E`@``B470C574C476QT78`````,=%
MW`````#'1>``````QT7(`````,=%Q`````")1;R)5<#'1;@`````@^P(BT70
M9HL0_W6\@\`"_W7`9HE5U(E%T.@VVO__@\00A<!UC6:+1=9F/?"P#X;.`0``
M#[?`/?*P```/A%,!```]\K````^/#`$``#WQL```=$6#[`B-1<Q0C4704,=%
MS`````#H3N/__X/$$(7`#X4]____BT7,`470BT7$A<`/A'K___^+1="+50B)
M`C'`Z1W___^-=@"+1=B%P`^%A@```(/L"/]U#(U%T%#'1=@!````Z/_B__^#
MQ!"%P`^%[O[__XM5#(L"C01`@^P,C32%`````%;HZ+#__X/$$(7`B<=T%5!6
M:@!7Z)6R__^+10R#Q!")>`3K@5:-@W5N__]0BX,0`0``_W!L:AMJ`8V#K6O_
M_U!J`&H&Z-6R__^X!@```.F)_O__48V#=6[__U"+@Q`!``#_L(@```!J(FH!
MC8.M:___4&H`:@3HH[+__^E7_O__B?8]\[```'03/?^P```/A>G^____1<3I
M"?___U"-1PA0C4<$4(U%T%#HE.7__X/$$(7`#X4C_O__Z>?^__^+1<B+50P[
M`G,JBWVX@^P(`WH$5XU%T%#H!^+__X/$$(7`#X7V_?__@T6X#/]%R.FS_O__
M@^P(:@#_=0SHQ_K__UA:BX,0`0``_[`@`0``:DAJ`8V#K6O__U!J`&H7Z/VQ
M__^X%P```.FQ_?__@^P(BX,0`0``_[`@`0``:DAJ`8V#K6O__U!J`&H$Z-"Q
M__^#Q"#I@?W__X/L#&H`:@+I4?W__U6)Y5=64X/L%.@`````6X'#,B8!`(M%
M"(M]#&:)1?"-1?*+-U"-1?!0Z(+7__^#Q!"%P'4.9HM%\F:)!H/&`HDW,<"-
M9?1;7E_)PY!5B>564^@`````6X'#ZB4!`(MU"(7V=%*#[`C_=@S_=A#H0M+_
M_UA:_W84_W88Z#72__]96/]V'/]V(.@HTO__6%K_=B3_=BCH&]+__UE8_W8P
M_W8TZ`[2__]86O]V./]V/.@!TO__@\00C67X6S'`7LG#D%6)Y593Z`````!;
M@<-V)0$`BW4(A?9T'H/L"/]V#/]V$.C.T?__65C_=A3_=ACHP='__X/$$(UE
M^%LQP%[)PY!5B>564^@`````6X'#-B4!`(MU"(7V="N#[`C_=@S_=A#HCM'_
M_UE8_W84_W88Z('1__]86O]V'/]V(.ATT?__@\00C67X6S'`7LG#58GE5E/H
M`````%N!P^HD`0"+=0B%]G0H@^P,_W80Z.VL__]96/]V&/]V'.@XT?__6%K_
M=B#_=B3H*]'__X/$$(UE^%LQP%[)PY")]E6)Y8M5"#'`A=)T+XM*$(7)N"0`
M``!T!HM"#(/`)(M*&(/`!H7)=`,#0A2+2B"#P`:%R70#`T(<@\`"R<.0B?95
MB>575E.![)P```#H`````%N!PU<D`0"-3:B)C6#___^-@PUO___\N04```"+
MO6#___^)QL=%I`````")A6C____SI8M5"(72#X0O!@``BT4,A<`/A)H%``"#
M[`S_=0CH6____X/$$(7`B46(#X6]````@^P,_[5H____:@"-@R%O__]0BX,0
M`0``_W!X:AYJ`8V#/6___U!J`&H7QT6D%P```.@[K___@\0H_[,8`0``_[,4
M`0``Z%>M__^+@QP!```/M@"#Q!"#^`1T"X/X!']52(/X`7="@^P,:@2-1:10
M:@2-19C'19@S`0``4(N]8/____PQP+G_____\J[WT5'_M6#___]J`VI_C8-'
M;___4.BLKO__@\0PBT6DC67T6UY?R<.)]H/X"'7NZZJ0@^P,4.A[K/__@\00
MA<")18P/A"4$``!7_W6(:@!0Z"&N__]97HM%C(UUD%:)19"-18Q0C7V(5VH`
MBTT(_S%HH;```(F%9/___^AFW?__@\0@A<")1:1T:(/L"/]UB/]UC.A&S___
M6%K_LQ@!``#_LQ0!``#H:ZS__XN#'`$```^V`(/$$(/X!'0/@_@$?R1(@_@!
M#X=2____@^P,:@2-1:10:@2-183'181&`0``Z0O___^#^`@/A2_____KVXGV
M@^P(5O^U9/___U=J`(M%"/]P!&BBL```Z-?<__^#Q""%P(E%I'1F@^P(_W6(
M_W6,Z+?.__]?6/^S&`$``/^S%`$``.C<J___BX,<`0``#[8`@\00@_@$=`^#
M^`1_)$B#^`$/A\/^__^#[`QJ!(U%I%!J!(U%@,=%@$H!``#I?/[__X/X"`^%
MH/[__^O;@^P(5O^U9/___U=J`(M-"/]Q"&BCL```Z$K<__^#Q""%P(E%I'1L
M@^P(_W6(_W6,Z"K.__]97O^S&`$``/^S%`$``.A/J___BX,<`0``#[8`@\00
M@_@$=`^#^`1_*DB#^`$/AS;^__^#[`QJ!(U%I%!J!(V%?/___\>%?/___TX!
M``#IZ?W__X/X"`^%#?[__^O5@^P(5O^U9/___U=J`(M%"/]P$&BDL```Z*/>
M__^#Q""%P(E%I'1L@^P(_W6(_W6,Z)?-__]86O^S&`$``/^S%`$``.B\JO__
MBX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AZ/]__^#[`QJ!(U%I%!J!(V%
M>/___\>%>/___U,!``#I5OW__X/X"`^%>OW__^O5@^P(5O^U9/___U=J`(M-
M"/]Q&&BEL```Z!#>__^#Q""%P(E%I'1L@^P(_W6(_W6,Z`3-__]>7_^S&`$`
M`/^S%`$``.@IJO__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AQ#]__^#
M[`QJ!(U%I%!J!(V%=/___\>%=/___U@!``#IP_S__X/X"`^%Y_S__^O545;_
MM63___]7:@"+10C_<!S_<"!HIK```.C,W___@\0@A<")1:1T;(/L"/]UB/]U
MC.APS/__6%K_LQ@!``#_LQ0!``#HE:G__XN#'`$```^V`(/$$(/X!'0/@_@$
M?RI(@_@!#X=\_/__@^P,:@2-1:10:@2-A7#____'A7#___]>`0``Z2_\__^#
M^`@/A5/\___KU8/L"%9HK[```.A0^?__@\00A<")1:1U'HM%D(M5C"G0BTT,
MB0&)403'1:0`````,<#I'OS__X/L"/]UB/]UC.C.R___7E__LQ@!``#_LQ0!
M``#H\ZC__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X?:^___@^P,:@2-
M1:10QX5L____80$``&H$C85L____Z8W[__^#^`@/A;'[___KU?]UB/^U:/__
M_XN#$`$``/]P;&H;:@&-@SUO__]0:@!J!NA2JO__@\08_[,8`0``_[,4`0``
MQT6D!@```.AGJ/__BX,<`0``#[8`@\00@_@$=`^#^`1_)$B#^`$/AT[[__^#
M[`QJ!(U%I%!J!(U%E,=%E#T!``#I!_O__X/X"`^%*_O__^O;B?:#[`QJ`&H"
M_[5H____BX,0`0``_W!H:AIJ`8V#/6___U!J`&H$Z,:I__^#Q"C_LQ@!``#_
MLQ0!``#'1:0$````Z-NG__^+@QP!```/M@"#Q!"#^`1T#X/X!'\D2(/X`0^'
MPOK__X/L#&H$C46D4&H$C46<QT6<)P$``.E[^O__@_@(#X6?^O__Z]N#[`QJ
M`&H!4(N#$`$``/]P:&H::@&-@SUO__]0:@!J!.A!J?__@\0H_[,8`0``_[,4
M`0``QT6D!````.A6I___BX,<`0``#[8`@\00@_@$=`^#^`1_)$B#^`$/ASWZ
M__^#[`QJ!(U%I%!J!(U%H,=%H!\!``#I]OG__X/X"`^%&OK__^O;D%6)Y5=6
M4X'LS````.@`````6X'#4QT!`(V#3&___XU5B/R)UXG&N04```")A2S___^)
ME3#____'180`````\Z5FI8M-"(M]"(7_BS$/E,*%]@^>P`G0@^`!=0N+202%
MR0^%N@```(/L#/]U"&H!_[4L____BX,0`0``_W!H:AIJ`8V#/6___U!J`&H$
MZ$^H__^#Q"C_LQ@!``#_LQ0!``#'180$````Z&2F__^+@QP!```/M@"#Q!"#
M^`1T"X/X!']62(/X`7="@^P,:@2-1810:@2-18#'18"A`0``4(N],/____PQ
MP+G_____\J[WT5'_M3#___]J`VI_C8-';___4.BYI___@\0PBT6$C67T6UY?
MR<.-=@"#^`AU[>NID(M5#(72#X1Y"0``_(U]R+D&````\ZN+?0RY"0```/.K
MBU4(BT($BTT(B<(#$3G0B85H____B<$/@\@```"-O7K___^-M7C___^-=@"#
M[`AFBP%79HF%>/___U:-00*)A6C____HM\W__X/$$(7`B46$#X6N"```9HN%
M>O___V8]H+`/AA`(```/M\`MH;```(/X#@^'8P<``(G:*Y2#8.3^___B,1L!
M`.`9`0#$&`$`J!<!`(@6`0!H%0$`2!0!`$@4`0!(%`$`2!0!`$@4`0!(%`$`
M2!0!`$@4`0!D&P$`BTT(BU$$BPF-!!&)A6C___^-=@"-!!&+C6C___\YP0^"
M1____\=%A``````QP.G:_O__BT7(A<`/A8\```"#[`C_=0R-A6C___]0QT7(
M`0```.A-UO__@\00A<")181U#8UV`(M5"(L*BU($ZZ:#[`C_LQ@!``#_LQ0!
M``#HCJ3__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X=H_O__@^P,:@2-
M1810:@2-A63____'A63____&`0``Z1O^__^#^`@/A3_^___KU5#_M2S___^+
M@Q`!``#_L(@```!J(FH!C8,];___4&H`:@3H[*7__X/$&/^S&`$``/^S%`$`
M`.@(I/__BX,<`0``#[8`@\00@_@$=`N#^`1_7TB#^`%W2(/L#&H$C46$4&H$
MC85L____QX5L____Q`$``%"+O3#____\,<"Y______*N]]%1_[4P____:@-J
M?XV#1V___U#H5Z7__X/$,+@$````QT6$!````.F0_?__@_@(=>KKH(M%S(7`
M#X6*````BT4,@^P(@\`$4(V%:/___U#'1<P!````Z/C4__^#Q!"%P(E%A`^$
MJO[__X/L"/^S&`$``/^S%`$``.A"H___BX,<`0``#[8`@\00@_@$=`^#^`1_
M*DB#^`$/AQS]__^#[`QJ!(U%A%!J!(V%7/___\>%7/___\L!``#IS_S__X/X
M"`^%\_S__^O54/^U+/___XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.B@
MI/__@\08_[,8`0``_[,4`0``Z+RB__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J
M2(/X`0^'^/[__X/L#&H$C46$4&H$C85@____QX5@____R0$``.FK_O__@_@(
M#X7/_O__Z]60BT70A<`/A8H```"+10R#[`B#P`A0C85H____4,=%T`$```#H
MW-/__X/$$(7`B46$#X2._?__@^P(_[,8`0``_[,4`0``Z":B__^+@QP!```/
MM@"#Q!"#^`1T#X/X!'\J2(/X`0^'`/S__X/L#&H$C46$4&H$C854____QX54
M____T`$``.FS^___@_@(#X77^___Z]51_[4L____BX,0`0``_["(````:B)J
M`8V#/6___U!J`&H$Z(2C__^#Q!C_LQ@!``#_LQ0!``#HH*'__XN#'`$```^V
M`(/$$(/X!'0/@_@$?RI(@_@!#X?<_?__@^P,:@2-1810:@2-A5C____'A5C_
M___.`0``Z8_]__^#^`@/A;/]___KU9"+5=2%T@^%CP```%"+10R#P!!0BT4,
M@\`,4(V%:/___U#'1=0!````Z!O6__^#Q!"%P(E%A`^$;?S__X/L"/^S&`$`
M`/^S%`$``.@%H?__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/A]_Z__^#
M[`QJ!(U%A%!J!(V%3/___\>%3/___]<!``#IDOK__X/X"`^%MOK__^O54/^U
M+/___XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.ACHO__@\08_[,8`0``
M_[,4`0``Z'^@__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'N_S__X/L
M#&H$C46$4&H$C850____QX50____TP$``.EN_/__@_@(#X62_/__Z]6+1=B%
MP`^%CP```%"+10R#P!A0BT4,@\`44(V%:/___U#'1=@!````Z/O4__^#Q!"%
MP(E%A`^$3?O__X/L"/^S&`$``/^S%`$``.CEG___BX,<`0``#[8`@\00@_@$
M=`^#^`1_*DB#^`$/A[_Y__^#[`QJ!(U%A%!J!(V%1/___\>%1/___]X!``#I
M<OG__X/X"`^%EOG__^O54/^U+/___XN#$`$``/^PB````&HB:@&-@SUO__]0
M:@!J!.A#H?__@\08_[,8`0``_[,4`0``Z%^?__^+@QP!```/M@"#Q!"#^`1T
M#X/X!'\J2(/X`0^'F_O__X/L#&H$C46$4&H$C85(____QX5(____V@$``.E.
M^___@_@(#X5R^___Z]6+1=R%P`^%CP```(M%#%&#P"!0BT4,@\`<4(V%:/__
M_U#'1=P!````Z#O6__^#Q!"%P(E%A`^$+?K__X/L"/^S&`$``/^S%`$``.C%
MGO__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AY_X__^#[`QJ!(U%A%!J
M!(V%//___\>%//___^4!``#I4OC__X/X"`^%=OC__^O55O^U+/___XN#$`$`
M`/^PB````&HB:@&-@SUO__]0:@!J!.@CH/__@\08_[,8`0``_[,4`0``Z#^>
M__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'>_K__X/L#&H$C46$4,>%
M0/___^$!``!J!(V%0/___^DN^O__@_@(#X52^O__Z]6#[`B-A3C___]0C85H
M____4,>%./___P````#H:,___X/$$(7`B46$=1&+A3C___\!A6C____I#?G_
M_X/L"/^S&`$``/^S%`$``.BEG?__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#
M^`$/AW_W__^#[`QJ!(U%A%#'A33____J`0``:@2-A33____I,O?__X/X"`^%
M5O?__^O5B?90_[4L____BX,0`0``_[`@`0``:DAJ`8V#/6___U!J`&H$Z`&?
M__^#Q!C_LQ@!``#_LQ0!``#'180$````Z!:=__^+@QP!```/M@"#Q!"#^`1T
M#X/X!'\J2(/X`0^'\/;__X/L#&H$C46$4&H$C85P____QX5P____O0$``.FC
M]O__@_@(#X7']O__Z]6#[`C_LQ@!``#_LQ0!``#HMYS__XN#'`$```^V`(/$
M$(/X!'0/@_@$?RI(@_@!#X>1]O__@^P,:@2-1810:@2-A73____'A73___^W
M`0``Z43V__^#^`@/A6CV___KU8/L#&H`:@+_M2S___^+@Q`!``#_<&AJ&FH!
MC8,];___4&H`:@3H$I[__X/$*/^S&`$``/^S%`$``,=%A`0```#H)YS__XN#
M'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X<!]O__@^P,:@2-1810:@2-A7S_
M___'A7S___^I`0``Z;3U__^#^`@/A=CU___KU56)Y5=64X/L#.@`````6X'#
M(A(!`(M]"#'VA?]T/(M'$(7`OBX```!U.H/L#(U'%%#H6N/__X/&!HUT,`:+
M1R2#Q!"%P'0#`W<@BT<L@\8&A<!T`P-W*(/&`HUE]%N)\%Y?R<.#[`Q0Z+_3
M__^-<"Z#Q!#KM9")]E6)Y5=64X'LG````.@`````6X'#IQ$!`(U-J(F-6/__
M_XV#8F____R+O5C___^Y!````(G&QT6D`````(F%8/____.E9J6+=0B%]@^$
MKP<``(M-#(7)#X3P!@``@^P,_W4(Z"'___^#Q!"%P(E%B`^%NP```(/L#/^U
M8/___VH`C8-T;___4(N#$`$``/]P>&H>:@&-@SUO__]0:@!J%\=%I!<```#H
MB9S__X/$*/^S&`$``/^S%`$``.BEFO__BX,<`0``#[8`@\00@_@$=`N#^`1_
M4TB#^`%W0H/L#&H$C46D4&H$C468QT6890(``%"+O5C____\,<"Y______*N
M]]%1_[58____:@-J?XV#1V___U#H^IO__X/$,(M%I(UE]%M>7\G#@_@(=?#K
MK)"#[`Q0Z,N9__^#Q!"%P(E%C`^$504``%+_=8AJ`%#H<9O__U]8BT6,B460
MC4604(U]C%>-=8A6:@"+30C_,6BQL```B85<____Z+;*__^#Q""%P(E%I'1H
M@^P(_W6(_W6,Z):\__]97O^S&`$``/^S%`$``.B[F?__BX,<`0``#[8`@\00
M@_@$=`^#^`1_)$B#^`$/AU3___^#[`QJ!(U%I%!J!(U%A,=%A'@"``#I#?__
M_X/X"`^%,?___^O;B?:#[`C_M5S___]75FH`BT4(_W`$:+*P``#H)\K__X/$
M((7`B46D=&:#[`C_=8C_=8SH![S__UA:_[,8`0``_[,4`0``Z"R9__^+@QP!
M```/M@"#Q!"#^`1T#X/X!'\D2(/X`0^'Q?[__X/L#&H$C46D4&H$C46`QT6`
M?`(``.E^_O__@_@(#X6B_O__Z]N#[`C_M5S___]75FH`BTT(_W$(:+.P``#H
MFLG__X/$((7`B46D=&R#[`C_=8C_=8SH>KO__U]8_[,8`0``_[,4`0``Z)^8
M__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'./[__X/L#&H$C46D4&H$
MC85\____QX5\____@`(``.GK_?__@_@(#X4/_O__Z]6#[`C_M5S___]75FH`
MBT4(_W`,:+2P``#H!\G__X/$((7`B46D=&R#[`C_=8C_=8SHY[K__UE>_[,8
M`0``_[,4`0``Z`R8__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'I?W_
M_X/L#&H$C46D4&H$C85X____QX5X____A`(``.E8_?__@_@(#X5\_?__Z]6#
M[`C_M5S___]75FH`BTT(_W$0:+6P``#H.-3__X/$((7`B46D=&R#[`C_=8C_
M=8SH5+K__UA:_[,8`0``_[,4`0``Z'F7__^+@QP!```/M@"#Q!"#^`1T#X/X
M!'\J2(/X`0^'$OW__X/L#&H$C46D4&H$C85T____QX5T____B`(``.G%_/__
M@_@(#X7I_/__Z]6#[`C_M5S___]75HM%"&H`@\`44&BVL```Z.#>__^#Q""%
MP(E%I'1L@^P(_W6(_W6,Z,"Y__]>7_^S&`$``/^S%`$``.CEEO__BX,<`0``
M#[8`@\00@_@$=`^#^`1_*DB#^`$/AW[\__^#[`QJ!(U%I%!J!(V%</___\>%
M</___XP"``#I,?S__X/X"`^%5?S__^O54?^U7/___U=6:@"+10C_<"#_<"1H
MM[```.B(S/__@\0@A<")1:1T;(/L"/]UB/]UC.@LN?__6%K_LQ@!``#_LQ0!
M``#H49;__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X?J^___@^P,:@2-
M1:10:@2-A6S____'A6S___^2`@``Z9W[__^#^`@/A<'[___KU5#_M5S___]7
M5FH`BTT(_W$H_W$L:+BP``#H],O__X/$((7`B46D=&Z#[`C_=8C_=8SHF+C_
M_UE>_[,8`0``_[,4`0``Z+V5__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X
M`0^'5OO__X/L#&H$C46D4&H$C85H____QX5H____F`(``.D)^___@_@(#X4M
M^___Z]6)]H/L"/^U7/___VB_L```Z''E__^#Q!"%P(E%I'4>BT60BU6,*="+
M30R)`8E1!,=%I``````QP.GQ^O__@^P(_W6(_W6,Z.^W__]86O^S&`$``/^S
M%`$``.@4E?__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AZWZ__^#[`QJ
M!(U%I%#'A63___^;`@``:@2-A63____I8/K__X/X"`^%A/K__^O5D/]UB/^U
M8/___XN#$`$``/]P;&H;:@&-@SUO__]0:@!J!NAREO__@\08_[,8`0``_[,4
M`0``Z(Z4__^+@QP!```/M@"#Q!"#^`1T"X/X!']92(/X`7="@^P,:@2-1:10
M:@2-1910QT64;@(``(N]6/____PQP+G_____\J[WT5'_M5C___]J`VI_C8-'
M;___4.CCE?__@\0PN`8```#'1:0&````Z=OY__^#^`AUZNNF@^P,:@!J`O^U
M8/___XN#$`$``/]P:&H::@&-@SUO__]0:@!J!.B^E?__@\0H_[,8`0``_[,4
M`0``Z-J3__^+@QP!```/M@"#Q!"#^`1T"X/X!']92(/X`7="@^P,:@2-1:10
MQT6<6`(``&H$C46<4(N]6/____PQP+G_____\J[WT5'_M5C___]J`VI_C8-'
M;___4.@OE?__@\0PN`0```#'1:0$````Z2?Y__^#^`AUZNNF@^P,:@!J`5"+
M@Q`!``#_<&AJ&FH!C8,];___4&H`:@3H#Y7__X/$*/^S&`$``/^S%`$``.@K
MD___BX,<`0``#[8`@\00@_@$=`N#^`1_($B#^`%WDX/L#&H$C46D4&H$C46@
MQT6@4`(``.E,____@_@(#X5P____Z]N)]E6)Y5=64X'LW````.@`````6X'#
M*PD!`(V#CF___XU5B(G7B<;\N04```")A2#___^)E1S____'180`````\Z6+
M?0B+30B%_XLQ#Y3"A?8/GL`)T(/@`74+BTD$A<D/A;@```"#[`S_=0AJ`?^U
M(/___XN#$`$``/]P:&H::@&-@SUO__]0:@!J!.@IE/__@\0H_[,8`0``_[,4
M`0``QT6$!````.@^DO__BX,<`0``#[8`@\00@_@$=`N#^`1_5$B#^`%W0H/L
M#&H$C46$4&H$C46`QT6`W`(``%"+O1S____\,<"Y______*N]]%1_[4<____
M:@-J?XV#1V___U#HDY/__X/$,(M%A(UE]%M>7\G#D(/X"'7OZZN0BU4,A=(/
MA.4+``#\C7W(N0@```#SJXM]#+D,````\ZN+50B+0@2+30B)P@,1.=")A6C_
M__^)P0^#R````(V]>O___XVU>/___XUV`(/L"&:+`5=FB85X____5HU!`HF%
M:/___^B3N?__@\00A<")180/A1H+``!FBX5Z____9CVPL`^&?`H```^WP"VQ
ML```@_@.#X?/"0``B=HKE(.$^/[__^(-!P$`X`4!`+@$`0"0`P$`:`(!`#P!
M`0`0``$`Y/X``+C]``"X_0``N/T``+C]``"X_0``N/T``$`'`0"+30B+402+
M"8T$$8F%:/___XUV`(T$$8N-:/___SG!#X)'____QT6$`````#'`Z=S^__^+
M1<B%P`^%D@```(/L"/]U#(V%:/___U#'1<@!````Z"G"__^#Q!"%P(E%A'4-
MC78`BU4(BPJ+4@3KIH/L"/^S&`$``/^S%`$``.AJD/__BX,<`0``#[8`@\00
M@_@$=`^#^`1_*DB#^`$/AVK^__^#[`QJ!(U%A%!J!(V%9/___\>%9/___P$#
M``#I'?[__X/X"`^%0?[__^O5C78`4/^U(/___XN#$`$``/^PB````&HB:@&-
M@SUO__]0:@!J!.C%D?__@\08_[,8`0``_[,4`0``QT6$!````.C:C___BX,<
M`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/A]K]__^#[`QJ!(U%A%!J!(V%;/__
M_\>%;/____\"``#IC?W__X/X"`^%L?W__^O5C78`BT7,A<`/A8T```"+10R#
M[`B#P`10C85H____4,=%S`$```#H^,#__X/$$(7`B46$#X3._O__@^P(_[,8
M`0``_[,4`0``Z$*/__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'0OW_
M_X/L#&H$C46$4&H$C85<____QX5<____!@,``.GU_/__@_@(#X49_?__Z]6-
M=@!6_[4@____BX,0`0``_["(````:B)J`8V#/6___U!J`&H$Z)V0__^#Q!C_
MLQ@!``#_LQ0!``#'180$````Z+*.__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J
M2(/X`0^'LOS__X/L#&H$C46$4&H$C85@____QX5@____!`,``.EE_/__@_@(
M#X6)_/__Z]6-=@"+3="%R0^%C0```(M%#(/L"(/`"%"-A6C___]0QT70`0``
M`.C0O___@\00A<")180/A*;]__^#[`C_LQ@!``#_LQ0!``#H&H[__XN#'`$`
M``^V`(/$$(/X!'0/@_@$?RI(@_@!#X<:_/__@^P,:@2-1810:@2-A53____'
MA53___\+`P``Z<W[__^#^`@/A?'[___KU8UV`%+_M2#___^+@Q`!``#_L(@`
M``!J(FH!C8,];___4&H`:@3H=8___X/$&/^S&`$``/^S%`$``,=%A`0```#H
MBHW__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X>*^___@^P,:@2-1810
M:@2-A5C____'A5C___\)`P``Z3W[__^#^`@/A6'[___KU8UV`(M%U(7`#X6-
M````BT4,@^P(@\`,4(V%:/___U#'1=0!````Z*B^__^#Q!"%P(E%A`^$?OS_
M_X/L"/^S&`$``/^S%`$``.CRC/__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#
M^`$/A_+Z__^#[`QJ!(U%A%!J!(V%3/___\>%3/___Q`#``#II?K__X/X"`^%
MR?K__^O5C78`4/^U(/___XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.A-
MCO__@\08_[,8`0``_[,4`0``QT6$!````.ABC/__BX,<`0``#[8`@\00@_@$
M=`^#^`1_*DB#^`$/AV+Z__^#[`QJ!(U%A%!J!(V%4/___\>%4/___PX#``#I
M%?K__X/X"`^%.?K__^O5C78`BT78A<`/A9$```!0BT4,@\`04(V%1/___U"-
MA6C___]0QT78`0```.B_R?__@\00A<")180/A%'[__^#[`C_LQ@!``#_LQ0!
M``#HQ8O__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X?%^?__@^P,:@2-
M1810:@2-A4#____'A4#___\5`P``Z7CY__^#^`@/A9SY___KU8GV4/^U(/__
M_XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.@AC?__@\08_[,8`0``_[,4
M`0``QT6$!````.@VB___BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AS;Y
M__^#[`QJ!(U%A%!J!(V%2/___\>%2/___Q,#``#IZ?C__X/X"`^%#?G__^O5
MC78`BT7<A<`/A9$```"+10Q2@\`44(V%1/___U"-A6C___]0QT7<`0```.@7
MT___@\00A<")180/A"7Z__^#[`C_LQ@!``#_LQ0!``#HF8K__XN#'`$```^V
M`(/$$(/X!'0/@_@$?RI(@_@!#X>9^/__@^P,:@2-1810:@2-A3C____'A3C_
M__\;`P``Z4SX__^#^`@/A7#X___KU8GV4?^U(/___XN#$`$``/^PB````&HB
M:@&-@SUO__]0:@!J!.CUB___@\08_[,8`0``_[,4`0``QT6$!````.@*BO__
MBX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/APKX__^#[`QJ!(U%A%!J!(V%
M//___\>%//___QD#``#IO??__X/X"`^%X??__^O5C78`BT7@A<`/A9$```!0
MBT4,@\`D4(M%#(/`(%"-A6C___]0QT7@`0```.CCP/__@\00A<")180/A/GX
M__^#[`C_LQ@!``#_LQ0!``#H;8G__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(
M@_@!#X=M]___@^P,:@2-1810:@2-A3#____'A3#___\B`P``Z2#W__^#^`@/
MA43W___KU8GV4/^U(/___XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.C)
MBO__@\08_[,8`0``_[,4`0``QT6$!````.C>B/__BX,<`0``#[8`@\00@_@$
M=`^#^`1_*DB#^`$/A][V__^#[`QJ!(U%A%!J!(V%-/___\>%-/___QX#``#I
MD?;__X/X"`^%M?;__^O5C78`BT7DA<`/A9$```!0BT4,@\`L4(M%#(/`*%"-
MA6C___]0QT7D`0```.BWO___@\00A<")180/A,WW__^#[`C_LQ@!``#_LQ0!
M``#H08C__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X=!]O__@^P,:@2-
M1810:@2-A2C____'A2C___\I`P``Z?3U__^#^`@/A1CV___KU8GV4/^U(/__
M_XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.B=B?__@\08_[,8`0``_[,4
M`0``QT6$!````.BRA___BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/A[+U
M__^#[`QJ!(U%A%!J!(V%+/___\>%+/___R4#``#I9?7__X/X"`^%B?7__^O5
MC78`@^P(C85$____4(V%:/___U#'A43___\`````Z-BX__^#Q!"%P(E%A'41
MBX5$____`85H____Z:'V__^#[`C_LQ@!``#_LQ0!``#H%8?__XN#'`$```^V
M`(/$$(/X!'0/@_@$?RI(@_@!#X<5]?__@^P,:@2-1810QX4D____+@,``&H$
MC84D____Z<CT__^#^`@/A>ST___KU8GV4/^U(/___XN#$`$``/^P(`$``&I(
M:@&-@SUO__]0:@!J!.AQB/__@\08_[,8`0``_[,4`0``QT6$!````.B&AO__
MBX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AX;T__^#[`QJ!(U%A%!J!(V%
M</___\>%</____@"``#I.?3__X/X"`^%7?3__^O5@^P(_[,8`0``_[,4`0``
MZ">&__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^')_3__X/L#&H$C46$
M4&H$C85T____QX5T____\@(``.G:\___@_@(#X7^\___Z]6#[`QJ`&H"_[4@
M____BX,0`0``_W!H:AIJ`8V#/6___U!J`&H$Z(*'__^#Q"C_LQ@!``#_LQ0!
M``#'180$````Z)>%__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'E_/_
M_X/L#&H$C46$4&H$C85\____QX5\____Y`(``.E*\___@_@(#X5N\___Z]55
MB>564^@`````6X'#EOL``(MU"(M&!(/X`70X@_@"=`LQP(UE^%M>R<.)]HM&
M$(7`=0VX)@````-&%(/`".OC@^P,4.@7T/__@\`@@\00Z^>-=@"+1@R#P"3K
MW%6)Y5=64X'LG````.@`````6X'#,_L``(V#HF___XU5J/RY!````(G7B<;'
M1:0`````B85H____B95@____\Z5FI8MU"(7V#X15!@``BTT,A<D/A,`%``"#
M[`S_=0CH0?___X/$$(7`B46(#X6[````@^P,_[5H____:@"-@[1O__]0BX,0
M`0``_W!X:AYJ`8V#/6___U!J`&H7Z""&__^#Q"C_LQ@!``#_LQ0!``#'1:07
M````Z#6$__^+@QP!```/M@"#Q!"#^`1T"X/X!']32(/X`7="@^P,:@2-1:10
M:@2-19C'19B]`P``4(N]8/____PQP+G_____\J[WT5'_M6#___]J`VI_C8-'
M;___4.B*A?__@\0PBT6DC67T6UY?R<.#^`AU\.NLD(/L#%#H6X/__X/$$(7`
MB46,#X1-!```4O]UB&H`4.@!A?__7UB-=9!6C4V,48U]B%>+18QJ`(E%D(M%
M"/\P:,&P``")C63____H1K3__X/$((7`B46D=&B#[`C_=8C_=8SH)J;__UE>
M_[,8`0``_[,4`0``Z$N#__^+@QP!```/M@"#Q!"#^`1T#X/X!'\D2(/X`0^'
M5/___X/L#&H$C46D4&H$C46$QT6$SP,``.D-____@_@(#X4Q____Z]N)]H/L
M"%;_M63___]7:@"+50C_<@1HPK```.BWL___@\0@A<")1:1T9H/L"/]UB/]U
MC.B7I?__6%K_LQ@!``#_LQ0!``#HO(+__XN#'`$```^V`(/$$(/X!'0/@_@$
M?R1(@_@!#X?%_O__@^P,:@2-1:10:@2-18#'18#3`P``Z7[^__^#^`@/A:+^
M___KVX/L"%;_M63___]7:@"+30C_<0AHP[```.@JL___@\0@A<")1:0/A8`"
M``"+50B+0@2#^`$/A-D!``"#^`(/A#8!``!05O^U9/___U=J`(M5"/]R%/]R
M&&C%L```Z"*X__^#Q""%P(E%I'1L@^P(_W6(_W6,Z,:D__]97O^S&`$``/^S
M%`$``.CK@?__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/A_3]__^#[`QJ
M!(U%I%!J!(V%</___\>%</___^P#``#II_W__X/X"`^%R_W__^O5@^P(5FC/
ML```Z*;1__^#Q!"%P(E%I'4>BT60BU6,*="+30R)`8E1!,=%I``````QP.F6
M_?__@^P(_W6(_W6,Z"2D__]86O^S&`$``/^S%`$``.A)@?__BX,<`0``#[8`
M@\00@_@$=`^#^`1_*DB#^`$/AU+]__^#[`QJ!(U%I%#'A6S____O`P``:@2-
MA6S____I!?W__X/X"`^%*?W__^O5@^P(5O^U9/___U=J`(M%"/]P$&C$L```
MZ%7,__^#Q""%P(E%I`^$G_[__X/L"/]UB/]UC.B-H___6%K_LQ@!``#_LQ0!
M``#HLH#__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X>[_/__@^P,:@2-
M1:10:@2-A73____'A73____D`P``Z6[\__^#^`@/A9+\___KU8UV`(/L"%;_
MM63___]7:@"+30C_<1!HQ+```.@#M/__@\0@A<")1:0/A`7^__^#[`C_=8C_
M=8SH\Z+__UE>_[,8`0``_[,4`0``Z!B`__^+@QP!```/M@"#Q!"#^`1T#X/X
M!'\J2(/X`0^'(?S__X/L#&H$C46D4&H$C85X____QX5X____W@,``.G4^___
M@_@(#X7X^___Z]60@^P(_W6(_W6,Z(:B__]?6/^S&`$``/^S%`$``.BK?___
MBX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/A[3[__^#[`QJ!(U%I%!J!(V%
M?/___\>%?/___]<#``#I9_O__X/X"`^%B_O__^O5_W6(_[5H____BX,0`0``
M_W!L:AMJ`8V#/6___U!J`&H&Z`J!__^#Q!C_LQ@!``#_LQ0!``#'1:0&````
MZ!]___^+@QP!```/M@"#Q!"#^`1T#X/X!'\D2(/X`0^'*/O__X/L#&H$C46D
M4&H$C464QT64Q@,``.GA^O__@_@(#X4%^___Z]N)]H/L#&H`:@+_M6C___^+
M@Q`!``#_<&AJ&FH!C8,];___4&H`:@3H?H#__X/$*/^S&`$``/^S%`$``,=%
MI`0```#HDW[__XN#'`$```^V`(/$$(/X!'0/@_@$?R1(@_@!#X><^O__@^P,
M:@2-1:10:@2-19S'19RQ`P``Z57Z__^#^`@/A7GZ___KVX/L#&H`:@%0BX,0
M`0``_W!H:AIJ`8V#/6___U!J`&H$Z/E___^#Q"C_LQ@!``#_LQ0!``#'1:0$
M````Z`Y^__^+@QP!```/M@"#Q!"#^`1T#X/X!'\D2(/X`0^'%_K__X/L#&H$
MC46D4&H$C46@QT6@J0,``.G0^?__@_@(#X7T^?__Z]N058GE5U93@>S<````
MZ`````!;@<,+]```C8/.;___C56(B=>)QORY!0```(F%+/___XF5)/___\=%
MA`````#SI8M]"(M-"(7_BS$/E,*%]@^>P`G0@^`!=0N+202%R0^%N````(/L
M#/]U"&H!_[4L____BX,0`0``_W!H:AIJ`8V#/6___U!J`&H$Z`E___^#Q"C_
MLQ@!``#_LQ0!``#'180$````Z!Y]__^+@QP!```/M@"#Q!"#^`1T"X/X!']4
M2(/X`7="@^P,:@2-1810:@2-18#'18!2!```4(N])/____PQP+G_____\J[W
MT5'_M23___]J`VI_C8-';___4.AS?O__@\0PBT6$C67T6UY?R<.0@_@(=>_K
MJY"+50R%T@^$/1$``/R-?<BY!0```/.KBWT,N0<```#SJXM5"(M"!(M-"(G"
M`Q$YT(F%:/___XG!#X/4````C85Z____B84H____C;UX____D(/L"&:+`?^U
M*/___V:)A7C___]7C4$"B85H____Z&JD__^#Q!"%P(E%A`^%#!```&:+A7K_
M__]F/<"P#X8/#P``#[?`+<&P``"#^`X/APH.``")VBN4@[`-____XHUV`.CP
M````[P``(.T``$#K```XY@``5.0``%3D``!4Y```5.0``%3D``!4Y```5.0`
M`%3D``!4Y```%/(``(M-"(M1!(L)C001B85H____C78`C001BXUH____.<$/
M@C____\QP(M\A<B%_W040(/X!'[RQT6$`````#'`Z<#^__^#[`B+@Q`!``#_
M<'1J'6H!C8,];___4&H`:@3H+7W__XM-#(M1$(/$((72=!6+002#^`$/A)T`
M``"#^`(/A($```"+50R+0AB%P'5F@^P(_[,8`0``_[,4`0``QT6$!````.@6
M>___BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AS;^__^#[`QJ!(U%A%#'
MA3#___^N!```:@2-A3#____IZ?W__X/X"`^%#?[__^O5@^P(_W(44.B'G?__
M@\00ZXF#[`AJ`5+H)\7__X/$$.EL____@^P(BT4,_W`,4NA@G?__Z^>)]HM%
MR(7`#X7M````@^P(_W4,C85H____4,=%R`$```#H!*S__X/$$(7`B46$=0^+
M50B+"HG0BU`$Z:O^__^+30R+41"%TG01BT$$@_@!#X22````@_@"='J+50R+
M0AB%P'5?@^P(_[,8`0``_[,4`0``Z!YZ__^+@QP!```/M@"#Q!"#^`1T#X/X
M!'\J2(/X`0^'/OW__X/L#&H$C46$4&H$C85D____QX5D____=P0``.GQ_/__
M@_@(#X45_?__Z]6#[`C_<A10Z(^<__^#Q!#KD(/L"&H!4N@OQ/__@\00Z7/_
M__^#[`B+10S_<`Q2Z&B<___KYXGV4/^U+/___XN#$`$``/^PB````&HB:@&-
M@SUO__]0:@!J!.A%>___BTT,BU$0@\0@A=)T%8M!!(/X`0^$G0```(/X`@^$
M@0```(M5#(M"&(7`=6:#[`C_LQ@!``#_LQ0!``#'180$````Z"YY__^+@QP!
M```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'3OS__X/L#&H$C46$4&H$C85L____
MQX5L____=00``.D!_/__@_@(#X4E_/__Z]6#[`C_<A10Z)^;__^#Q!#KB8/L
M"&H!4N@_P___@\00Z6S___^#[`B+10S_<`Q2Z'B;___KYXGVBT7,A<`/A>4`
M``"+10R#[`B#P`10C85H____4,=%S`$```#H&*K__X/$$(7`B46$#X00_O__
MBTT,BU$0A=)T$8M!!(/X`0^$D@```(/X`G1ZBU4,BT(8A<!U7X/L"/^S&`$`
M`/^S%`$``.@]>/__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AUW[__^#
M[`QJ!(U%A%!J!(V%7/___\>%7/___WP$``#I$/O__X/X"`^%-/O__^O5@^P(
M_W(44.BNFO__@\00ZY"#[`AJ`5+H3L+__X/$$.ES____@^P(BT4,_W`,4NB'
MFO__Z^>05O^U+/___XN#$`$``/^PB````&HB:@&-@SUO__]0:@!J!.AE>?__
MBTT,BU$0@\0@A=)T%8M!!(/X`0^$G0```(/X`@^$@0```(M5#(M"&(7`=6:#
M[`C_LQ@!``#_LQ0!``#'180$````Z$YW__^+@QP!```/M@"#Q!"#^`1T#X/X
M!'\J2(/X`0^';OK__X/L#&H$C46$4&H$C85@____QX5@____>@0``.DA^O__
M@_@(#X5%^O__Z]6#[`C_<A10Z+^9__^#Q!#KB8/L"&H!4NA?P?__@\00Z6S_
M__^#[`B+10S_<`Q2Z)B9___KYXGVBTW0A<D/A>4```"+10R#[`B#P`A0C85H
M____4,=%T`$```#H.*C__X/$$(7`B46$#X0P_/__BTT,BU$0A=)T$8M!!(/X
M`0^$D@```(/X`G1ZBU4,BT(8A<!U7X/L"/^S&`$``/^S%`$``.A==O__BX,<
M`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AWWY__^#[`QJ!(U%A%!J!(V%5/__
M_\>%5/___X$$``#I,/G__X/X"`^%5/G__^O5@^P(_W(44.C.F/__@\00ZY"#
M[`AJ`5+H;L#__X/$$.ES____@^P(BT4,_W`,4NBGF/__Z^>04O^U+/___XN#
M$`$``/^PB````&HB:@&-@SUO__]0:@!J!.B%=___BTT,BU$0@\0@A=)T%8M!
M!(/X`0^$G0```(/X`@^$@0```(M5#(M"&(7`=6:#[`C_LQ@!``#_LQ0!``#'
M180$````Z&YU__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'COC__X/L
M#&H$C46$4&H$C858____QX58____?P0``.E!^/__@_@(#X5E^/__Z]6#[`C_
M<A10Z-^7__^#Q!#KB8/L"&H!4NA_O___@\00Z6S___^#[`B+10S_<`Q2Z+B7
M___KYXGVBT74A<`/A0T$``#'1=0!````BTT,BT$$@_@!#X03`P``@_@"=`R)
M]HM%"(L(Z5OZ__^#[`QJ".A0=/__@\00A<")Q@^$UP$``(G"B=@K@S@5____
MX(UV`(#J``"@Z0``F.D``(GJ``".Z0``@^D``'CI``"2Z@``;>D``&+I``!7
MZ0``F^H``$SI``!!Z0``-ND``*3J```KZ0``QP8`````C58$QP(`````@\($
MQP(`````@\($9L<"``#&0@(`@^P(5HV%:/___U#H5,'__X/$$(7`B46$=0N+
M30R)<1#I0____XM-#(M1$(72=!&+002#^`$/A)(```"#^`)T>HM5#(M"&(7`
M=5^#[`C_LQ@!``#_LQ0!``#HSG/__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(
M@_@!#X?N]O__@^P,:@2-1810:@2-A43____'A43___^:!```Z:'V__^#^`@/
MA<7V___KU8/L"/]R%%#H/Y;__X/$$.N0@^P(:@%2Z-^]__^#Q!#I<____X/L
M"(M%#/]P#%+H&);__^OGB?;&`@#I&/___V;'`@``Z0[____'`@````#I`___
M_\<"`````(/"!.O8QP(`````@\($Z]7'`@````"#P@3KU,<"`````(/"!.O4
MQP(`````@\($Z]3'`@````"#P@3KU,<&`````(U6!.O4QP8`````C58$Z]3'
M!@````"-5@3KU(M-#(M1$(72=!6+002#^`$/A.P```"#^`(/A-````"+50R+
M0AB%P`^%K@```&H(_[4L____BX,0`0``_W!L:AMJ`8V#/6___U!J`&H&Z$IT
M__^#Q!C_LQ@!``#_LQ0!``#H9G+__XN#'`$```^V`(/$$(/X!'0+@_@$?UA(
M@_@!=TB#[`QJ!(U%A%!J!(V%2/___U#'A4C___^5!```B[TD_____#'`N?__
M___RKO?14?^U)/___VH#:G^-@T=O__]0Z+5S__^#Q#"X!@```.D[]?__@_@(
M=?'KIX/L"/]R%%#HK93__X/$$.D^____@^P(:@%2Z$J\__^#Q!#I'?___X/L
M"(M%#/]P#%+H@Y3__^OGD%"+10R#P!!0BT4,@\`,4(V%:/___U#HD:;__X/$
M$(7`B46$#X0I]___BTT,BU$0A=)T$8M!!(/X`0^$D@```(/X`G1ZBU4,BT(8
MA<!U7X/L"/^S&`$``/^S%`$``.A6<?__BX,<`0``#[8`@\00@_@$=`^#^`1_
M*DB#^`$/AW;T__^#[`QJ!(U%A%!J!(V%3/___\>%3/___XH$``#I*?3__X/X
M"`^%3?3__^O5@^P(_W(44.C'D___@\00ZY"#[`AJ`5+H9[O__X/$$.ES____
M@^P(BT4,_W`,4NB@D___Z^>)]E#_M2S___^+@Q`!``#_L(@```!J(FH!C8,]
M;___4&H`:@3H?7+__XM-#(M1$(/$((72=!6+002#^`$/A)T```"#^`(/A($`
M``"+50R+0AB%P'5F@^P(_[,8`0``_[,4`0``QT6$!````.AF</__BX,<`0``
M#[8`@\00@_@$=`^#^`1_*DB#^`$/AX;S__^#[`QJ!(U%A%!J!(V%4/___\>%
M4/___X0$``#I.?/__X/X"`^%7?/__^O5@^P(_W(44.C7DO__@\00ZXF#[`AJ
M`5+H=[K__X/$$.EL____@^P(BT4,_W`,4NBPDO__Z^>)]HM%V(7`#X7I````
M4(M%#(/`&%"+10R#P!10C85H____4,=%V`$```#H"Z?__X/$$(7`B46$#X1#
M]?__BTT,BU$0A=)T$8M!!(/X`0^$D@```(/X`G1ZBU4,BT(8A<!U7X/L"/^S
M&`$``/^S%`$``.AP;___BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AY#R
M__^#[`QJ!(U%A%!J!(V%//___\>%//___Z0$``#I0_+__X/X"`^%9_+__^O5
M@^P(_W(44.CAD?__@\00ZY"#[`AJ`5+H@;G__X/$$.ES____@^P(BT4,_W`,
M4NBZD?__Z^=0_[4L____BX,0`0``_["(````:B)J`8V#/6___U!J`&H$Z)EP
M__^+30R+41"#Q""%TG05BT$$@_@!#X2=````@_@"#X2!````BU4,BT(8A<!U
M9H/L"/^S&`$``/^S%`$``,=%A`0```#H@F[__XN#'`$```^V`(/$$(/X!'0/
M@_@$?RI(@_@!#X>B\?__@^P,:@2-1810:@2-A4#____'A4#___^@!```Z57Q
M__^#^`@/A7GQ___KU8/L"/]R%%#H\Y#__X/$$.N)@^P(:@%2Z).X__^#Q!#I
M;/___X/L"(M%#/]P#%+HS)#__^OGB?:#[`B-A3C___]0C85H____4,>%./__
M_P````#H=)___X/$$(7`B46$=1&+A3C___\!A6C____I`?G__XM-#(M!$(7`
M=!&+402#^@$/A)(```"#^@)T>HM-#(M!&(7`=5^#[`C_LQ@!``#_LQ0!``#H
MC&W__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X>L\/__@^P,:@2-1810
M:@2-A33____'A33___^I!```Z5_P__^#^`@/A8/P___KU8/L"/]Q%%#H_8__
M_X/$$.N0@^P(:@%0Z)VW__^#Q!#I<____X/L"(M5#/]R#%#HUH___^OG4/^U
M+/___XN#$`$``/^P(`$``&I(:@&-@SUO__]0:@!J!.BU;O__BU4,BT(0@\0@
MA<#'180$````=!&+4@2#^@$/A)(```"#^@)T>HM-#(M!&(7`=5^#[`C_LQ@!
M``#_LQ0!``#HHFS__XN#'`$```^V`(/$$(/X!'0/@_@$?RI(@_@!#X?"[___
M@^P,:@2-1810:@2-A7#____'A7#___]N!```Z77O__^#^`@/A9GO___KU8/L
M"/]Q%%#H$X___X/$$.N0@^P(:@%0Z+.V__^#Q!#I<____X/L"(M5#/]R#%#H
M[([__^OGB?:+50R+0A"%P'01BU($@_H!#X22````@_H"='J+30R+01B%P'5?
M@^P(_[,8`0``_[,4`0``Z.=K__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X
M`0^'!^___X/L#&H$C46$4&H$C85T____QX5T____:`0``.FZ[O__@_@(#X7>
M[O__Z]6#[`C_<110Z%B.__^#Q!#KD(/L"&H!4.CXM?__@\00Z7/___^#[`B+
M50S_<@Q0Z#&.___KYXUV`(/L#&H`:@+_M2S___^+@Q`!``#_<&AJ&FH!C8,]
M;___4&H`:@3H"FW__X/$*/^S&`$``/^S%`$``,=%A`0```#H'VO__XN#'`$`
M``^V`(/$$(/X!'0/@_@$?RI(@_@!#X<_[O__@^P,:@2-1810:@2-A7S____'
MA7S___]:!```Z?+M__^#^`@/A1;N___KU56)Y5=64X/L#.@`````6X'#&N$`
M`(M]"(M'!(/X`71D@_@"=`\Q]HUE]%N)\%Y?R<.-=@"+1Q"%P'4WOB8```"+
M1Q2-=$8(BT<@A<!U%(/&!HGP`T<DBU<P`T<XC70"'NO%@^P,4.A]M?__`<:#
MQ!#KWX/L#%#H;;7__XUP((/$$.N]D(M'#(/`)`-'%`-')`-',(M7'`-'.(UT
M`B[KB)!5B>575E.![+P```#H`````%N!PW?@``"-5:B-@^)O__^)U_RY!0``
M`(G&B95$____QT6D`````(F%3/____.EBU4(A=(/A',*``"+10R%P`^$W@D`
M`(/L#/]U".C__O__@\00A<")18@/A;T```"#[`S_M4S___]J`(V#]F___U"+
M@Q`!``#_<'AJ'FH!C8,];___4&H`:A?H9FO__X/$*/^S&`$``/^S%`$``,=%
MI!<```#H>VG__XN#'`$```^V`(/$$(/X!'0+@_@$?U5(@_@!=T*#[`QJ!(U%
MI%!J!(U%F,=%F%X%``!0B[U$_____#'`N?_____RKO?14?^U1/___VH#:G^-
M@T=O__]0Z-!J__^#Q#"+1:2-9?1;7E_)PXGV@_@(=>[KJI"#[`Q0Z)]H__^#
MQ!"%P(E%C`^$:0@``%?_=8AJ`%#H16K__XM%C%E>B460C4604(U]C%>-=8A6
M:@"+50C_,FCAL```B85(____Z(J9__^#Q""%P(E%I'1H@^P(_W6(_W6,Z&J+
M__]86O^S&`$``/^S%`$``.B/:/__BX,<`0``#[8`@\00@_@$=`^#^`1_)$B#
M^`$/AU+___^#[`QJ!(U%I%!J!(U%A,=%A'`%``#I"____X/X"`^%+____^O;
MB?:#[`C_M4C___]75FH`BT4(_W`$:.*P``#H^YC__X/$((7`B46D=&:#[`C_
M=8C_=8SHVXK__U]8_[,8`0``_[,4`0``Z`!H__^+@QP!```/M@"#Q!"#^`1T
M#X/X!'\D2(/X`0^'P_[__X/L#&H$C46D4&H$C46`QT6`=`4``.E\_O__@_@(
M#X6@_O__Z]N#[`C_M4C___]75FH`BU4(_W((:..P``#H;IC__X/$((7`B46D
M#X6<!@``BU4(BT($@_@!#X3U!0``@_@"#X14!0``@^P(_[5(____5U9J`(M%
M"/]P&&CEL```Z!>;__^#Q""%P(E%I`^%O00``(M5"(M"!(/X`0^$%@0``(/X
M`@^$=0,``%'_M4C___]75FH`BT4(_W`D_W`H:.:P``#H(YW__X/$((7`B46D
M=&R#[`C_=8C_=8SHQXG__UA:_[,8`0``_[,4`0``Z.QF__^+@QP!```/M@"#
MQ!"#^`1T#X/X!'\J2(/X`0^'K_W__X/L#&H$C46D4&H$C85D____QX5D____
MH04``.EB_?__@_@(#X6&_?__Z]6#[`C_M4C___]75FH`BU4(_W(L:.>P``#H
M5)?__X/$((7`B46D=&R#[`C_=8C_=8SH-(G__UY?_[,8`0``_[,4`0``Z%EF
M__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^''/W__X/L#&H$C46D4&H$
MC85@____QX5@____I04``.G/_/__@_@(#X7S_/__Z]51_[5(____5U9J`(M%
M"/]P,/]P-&CHL```Z/R;__^#Q""%P(E%I'1L@^P(_W6(_W6,Z*"(__]86O^S
M&`$``/^S%`$``.C%9?__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#^`$/AXC\
M__^#[`QJ!(U%I%!J!(V%7/___\>%7/___ZL%``#I._S__X/X"`^%7_S__^O5
M4/^U2/___U=6:@"+50C_<CC_<CQHZ;```.AHF___@\0@A<")1:1T;(/L"/]U
MB/]UC.@,B/__7UC_LQ@!``#_LQ0!``#H,67__XN#'`$```^V`(/$$(/X!'0/
M@_@$?RI(@_@!#X?T^___@^P,:@2-1:10:@2-A5C____'A5C___^Q!0``Z:?[
M__^#^`@/A<O[___KU8/L"/^U2/___VCOL```Z.>T__^#Q!"%P(E%I`^%EP``
M`(M5D(M-C"G*C4+_BW6(.?!W%HM%#(D0B4@$QT6D`````#'`Z8/[__^#[`A6
M4>A;A___6%K_LQ@!``#_LQ0!``#'1:07````Z'ED__^+@QP!```/M@"#Q!"#
M^`1T#X/X!'\J2(/X`0^'//O__X/L#&H$C46D4,>%4/___[L%``!J!(V%4/__
M_^GO^O__@_@(#X43^___Z]6#[`C_=8C_=8SHZ(;__UE>_[,8`0``_[,4`0``
MZ`UD__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'T/K__X/L#&H$C46D
M4&H$C854____QX54____M`4``.F#^O__@_@(#X6G^O__Z]6)]H/L"/^U2/__
M_U=6:@"+50C_<B!HZK```.@7K___@\0@A<")1:0/A&#\__^#[`C_=8C_=8SH
M3X;__UY?_[,8`0``_[,4`0``Z'1C__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J
M2(/X`0^'-_K__X/L#&H$C46D4&H$C85H____QX5H____F04``.GJ^?__@_@(
M#X4.^O__Z]60@^P(_[5(____5U9J`(M%"/]P(&CJL```Z,>6__^#Q""%P(E%
MI`^$R/O__X/L"/]UB/]UC.BWA?__6%K_LQ@!``#_LQ0!``#HW&+__XN#'`$`
M``^V`(/$$(/X!'0/@_@$?RI(@_@!#X>?^?__@^P,:@2-1:10:@2-A6S____'
MA6S___^3!0``Z5+Y__^#^`@/A7;Y___KU9"#[`C_=8C_=8SH2H7__UE>_[,8
M`0``_[,4`0``Z&]B__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^',OG_
M_X/L#&H$C46D4&H$C85P____QX5P____C`4``.GE^/__@_@(#X4)^?__Z]6#
M[`C_M4C___]75FH`BU4(_W(0:.2P``#H>ZW__X/$((7`B46D#X2!^O__@^P(
M_W6(_W6,Z+.$__]?6/^S&`$``/^S%`$``.C88?__BX,<`0``#[8`@\00@_@$
M=`^#^`1_*DB#^`$/AYOX__^#[`QJ!(U%I%!J!(V%=/___\>%=/___X4%``#I
M3OC__X/X"`^%<OC__^O5D(/L"/^U2/___U=6:@"+10C_<!!HY+```.@KE?__
M@\0@A<")1:0/A.GY__^#[`C_=8C_=8SH&X3__UA:_[,8`0``_[,4`0``Z$!A
M__^+@QP!```/M@"#Q!"#^`1T#X/X!'\J2(/X`0^'`_C__X/L#&H$C46D4&H$
MC85X____QX5X____?P4``.FV]___@_@(#X7:]___Z]60@^P(_W6(_W6,Z*Z#
M__]97O^S&`$``/^S%`$``.C38/__BX,<`0``#[8`@\00@_@$=`^#^`1_*DB#
M^`$/AY;W__^#[`QJ!(U%I%!J!(V%?/___\>%?/___W@%``#I2??__X/X"`^%
M;??__^O5_W6(_[5,____BX,0`0``_W!L:AMJ`8V#/6___U!J`&H&Z#)B__^#
MQ!C_LQ@!``#_LQ0!``#'1:0&````Z$=@__^+@QP!```/M@"#Q!"#^`1T#X/X
M!'\D2(/X`0^'"O?__X/L#&H$C46D4&H$C464QT649P4``.G#]O__@_@(#X7G
M]O__Z]N)]H/L#&H`:@+_M4S___^+@Q`!``#_<&AJ&FH!C8,];___4&H`:@3H
MIF'__X/$*/^S&`$``/^S%`$``,=%I`0```#HNU___XN#'`$```^V`(/$$(/X
M!'0/@_@$?R1(@_@!#X=^]O__@^P,:@2-1:10:@2-19S'19Q2!0``Z3?V__^#
M^`@/A5OV___KVX/L#&H`:@%0BX,0`0``_W!H:AIJ`8V#/6___U!J`&H$Z"%A
M__^#Q"C_LQ@!``#_LQ0!``#'1:0$````Z#9?__^+@QP!```/M@"#Q!"#^`1T
M#X/X!'\D2(/X`0^'^?7__X/L#&H$C46D4&H$C46@QT6@2@4``.FR]?__@_@(
M#X76]?__Z]N058GE5U93@>P<`0``Z`````!;@<,SU0``C8,2</__C95X____
M_(G7B<:Y!0```(F%[/[__XF5Y/[__\>%=/___P````#SI6:EBTT(BW4(A?:+
M,0^4PH7V#Y[`"="#X`%U"XM1!(72#X7(````@^P,_W4(:@'_M>S^__^+@Q`!
M``#_<&AJ&FH!C8,];___4&H`:@3H*6#__X/$*/^S&`$``/^S%`$``,>%=/__
M_P0```#H.U[__XN#'`$```^V`(/$$(/X!'0+@_@$?V%(@_@!=TN#[`QJ!(V%
M=/___U!J!(V%</___\>%</___S,&``!0B[WD_O___#'`N?_____RKO?14?^U
MY/[__VH#:G^-@T=O__]0Z(=?__^#Q#"+A73___^-9?1;7E_)PXGV@_@(=>OK
MGI"+30R%R0^$?2D``(U]N/RY"@```/.KC006.<*)E5C___\/@]8```"-A6K_
M__^)A>C^__^-O6C___^-=@"#[`AFBP+_M>C^__]FB85H____5XU"`HF%6/__
M_^B.A?__@\00A<")A73___\/A?4G``!FBX5J____9CW@L`^&C"8```^WP"WA
ML```@_@.#X<;)0``B=DKC(.,+/___^&<T0``V,X``!S,``!@R0``J,(``.B_
M```HO0``;+H``*RW``#LM```9*X``&2N``!DK@``9*X``#C3``"+10B+4`2+
M"(T$$8F%6/___XUV`(T$$8N56/___SG"#X(_____,<"0BTR%N(7)=!=`@_@)
M?O+'A73___\`````,<#IS_[__X/L"(N#$`$``/]P=&H=:@&-@SUO__]0:@!J
M!.A-7O__BTT,BU$0@\0@A=)T%8M!!(/X`0^$"`$``(/X`@^$[````(M-#(M1
M((72=!6+002#^`$/A,4```"#^`(/A*D```"+50R+0C2%P`^%AP```(M-#(M!
M*(7`=6R#[`C_LQ@!``#_LQ0!``#'A73___\$````Z`9<__^+@QP!```/M@"#
MQ!"#^`1T#X/X!'\M2(/X`0^'$O[__X/L#&H$C85T____4,>%\/[__\,&``!J
M!(V%\/[__^G"_?__@_@(#X7F_?__Z]*#[`C_<210Z'1^__^#Q!#K@X/L"/]R
M,%#H8W[__X/$$.EE____@^P(:@%2Z`"F__^#Q!#I1/___X/L"(M%#/]P'%+H
M.7[__^OG@^P(:@%2Z-RE__^#Q!#I`?___X/L"(M%#/]P#%+H%7[__^OGC78`
MBT6XA<`/A5D!``"#[`C_=0R-A5C___]0QT6X`0```.BXC/__@\00A<")A73_
M__]U$HUV`(M5"(L*B="+4`3I-?[__XM%#(M0$(72=!6+0`2#^`$/A/H```"#
M^`(/A-X```"+10R+4""%TG05BT`$@_@!#X2W````@_@"#X2;````BU4,BT(T
MA<!U?8M-#(M!*(7`=6*#[`C_LQ@!``#_LQ0!``#HGUK__XN#'`$```^V`(/$
M$(/X!'0/@_@$?RU(@_@!#X>K_/__@^P,:@2-A73___]0:@2-A53____'A53_
M__]6!@``Z5O\__^#^`@/A7_\___KTH/L"/]Q)%#H#7W__X/$$.N-@^P(_W(P
M4.C\?/__@\00Z6____^#[`AJ`5+HF:3__X/$$.E2____@^P(BTT,_W$<4NC2
M?/__Z^>#[`AJ`5+H=:3__X/$$.D/____@^P(BTT,_W$,4NBN?/__Z^>+30R+
M41"%TG05BT$$@_@!#X0V`0``@_@"#X0:`0``BTT,BU$@A=)T%8M!!(/X`0^$
M\P```(/X`@^$UP```(M5#(M"-(7`#X6U````BTT,BT$HA<`/A9,```!0_[7L
M_O__BX,0`0``_["(````:B)J`8V#/6___U!J`&H$Z#-;__^#Q!C_LQ@!``#_
MLQ0!``#'A73___\$````Z$59__^+@QP!```/M@"#Q!"#^`1T#X/X!'\M2(/X
M`0^'4?O__X/L#&H$C85T____4&H$C85<____QX5<____5`8``.D!^___@_@(
M#X4E^___Z]*#[`C_<210Z+-[__^#Q!#I6?___X/L"/]R,%#HGWO__X/$$.DW
M____@^P(:@%2Z#RC__^#Q!#I%O___X/L"(M%#/]P'%+H=7O__^OG@^P(:@%2
MZ!BC__^#Q!#IT_[__X/L"(M%#/]P#%+H47O__^OGC78`BT6\A<`/A5$!``"+
M10R#[`B#P`10C858____4,=%O`$```#H\(G__X/$$(7`B85T____#X0W_?__
MBT4,BU`0A=)T%8M`!(/X`0^$^@```(/X`@^$W@```(M%#(M0((72=!6+0`2#
M^`$/A+<```"#^`(/A)L```"+50R+0C2%P'5]BTT,BT$HA<!U8H/L"/^S&`$`
M`/^S%`$``.CE5___BX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/A_'Y__^#
M[`QJ!(V%=/___U!J!(V%3/___\>%3/___UL&``#IH?G__X/X"`^%Q?G__^O2
M@^P(_W$D4.A3>O__@\00ZXV#[`C_<C!0Z$)Z__^#Q!#I;____X/L"&H!4NC?
MH?__@\00Z5+___^#[`B+30S_<1Q2Z!AZ___KYX/L"&H!4NB[H?__@\00Z0__
M__^#[`B+30S_<0Q2Z/1Y___KYXGVBT4,BU`0A=)T%8M`!(/X`0^$-@$``(/X
M`@^$&@$``(M%#(M0((72=!6+0`2#^`$/A/,```"#^`(/A-<```"+50R+0C2%
MP`^%M0```(M-#(M!*(7`#X63````4/^U[/[__XN#$`$``/^PB````&HB:@&-
M@SUO__]0:@!J!.AW6/__@\08_[,8`0``_[,4`0``QX5T____!````.B)5O__
MBX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/AY7X__^#[`QJ!(V%=/___U!J
M!(V%4/___\>%4/___UD&``#I1?C__X/X"`^%:?C__^O2@^P(_W$D4.CW>/__
M@\00Z5G___^#[`C_<C!0Z.-X__^#Q!#I-____X/L"&H!4NB`H/__@\00Z1;_
M__^#[`B+30S_<1Q2Z+EX___KYX/L"&H!4NA<H/__@\00Z=/^__^#[`B+30S_
M<0Q2Z)5X___KYXUV`(M%P(7`#X51`0``BT4,@^P(@\`(4(V%6/___U#'1<`!
M````Z#2'__^#Q!"%P(F%=/___P^$>_K__XM%#(M0$(72=!6+0`2#^`$/A/H`
M``"#^`(/A-X```"+10R+4""%TG05BT`$@_@!#X2W````@_@"#X2;````BU4,
MBT(TA<!U?8M-#(M!*(7`=6*#[`C_LQ@!``#_LQ0!``#H*57__XN#'`$```^V
M`(/$$(/X!'0/@_@$?RU(@_@!#X<U]___@^P,:@2-A73___]0:@2-A43____'
MA43___]@!@``Z>7V__^#^`@/A0GW___KTH/L"/]Q)%#HEW?__X/$$.N-@^P(
M_W(P4.B&=___@\00Z6____^#[`AJ`5+H(Y___X/$$.E2____@^P(BTT,_W$<
M4NA<=___Z^>#[`AJ`5+H_Y[__X/$$.D/____@^P(BTT,_W$,4N@X=___Z^>)
M]HM%#(M0$(72=!6+0`2#^`$/A#8!``"#^`(/A!H!``"+10R+4""%TG05BT`$
M@_@!#X3S````@_@"#X37````BU4,BT(TA<`/A;4```"+30R+02B%P`^%DP``
M`%?_M>S^__^+@Q`!``#_L(@```!J(FH!C8,];___4&H`:@3HNU7__X/$&/^S
M&`$``/^S%`$``,>%=/___P0```#HS5/__XN#'`$```^V`(/$$(/X!'0/@_@$
M?RU(@_@!#X?9]?__@^P,:@2-A73___]0:@2-A4C____'A4C___]>!@``Z8GU
M__^#^`@/A:WU___KTH/L"/]Q)%#H.W;__X/$$.E9____@^P(_W(P4.@G=O__
M@\00Z3?___^#[`AJ`5+HQ)W__X/$$.D6____@^P(BTT,_W$<4NC]=?__Z^>#
M[`AJ`5+HH)W__X/$$.G3_O__@^P(BTT,_W$,4NC9=?__Z^>-=@"+=<2%]@^%
M304``,=%Q`$```"+50R+0@2#^`$/A.<#``"#^`)T#(GVBT4(BPCIS??__X/L
M#&H(Z'!2__^#Q!"%P(G&#X1#`@``B<*)V"N#&#?____@C78`H,@``%3'``!,
MQP``J<@``$+'```WQP``+,<``++(```AQP``%L<```O'``"[R````,<``/7&
M``#JQ@``Q,@``-_&``#'!@````"-5@3'`@````"#P@3'`@````"#P@1FQP(`
M`,9"`@"#[`A6C858____4.ATG___@\00A<")A73___]U"XM%#(EP$.D0]___
MBT4,BU`0A=)T%8M`!(/X`0^$^@```(/X`@^$W@```(M%#(M0((72=!6+0`2#
M^`$/A+<```"#^`(/A)L```"+50R+0C2%P'5]BTT,BT$HA<!U8H/L"/^S&`$`
M`/^S%`$``.B^4?__BX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/A\KS__^#
M[`QJ!(V%=/___U!J!(V%-/___\>%-/___WD&``#I>O/__X/X"`^%GO/__^O2
M@^P(_W$D4.@L=/__@\00ZXV#[`C_<C!0Z!MT__^#Q!#I;____X/L"&H!4NBX
MF___@\00Z5+___^#[`B+30S_<1Q2Z/%S___KYX/L"&H!4NB4F___@\00Z0__
M__^#[`B+30S_<0Q2Z,US___KYXUV`,8"`.FL_O__9L<"``#IHO[__\<"````
M`.F7_O__QP(`````@\($Z]C'`@````"#P@3KU<<"`````(/"!.O4QP(`````
M@\($Z]3'`@````"#P@3KU,<"`````(/"!.O4QP8`````C58$Z]3'!@````"-
M5@3KU,<&`````(U6!.O4BT4,BU`0A=)T%8M`!(/X`0^$50$``(/X`@^$.0$`
M`(M%#(M0((72=!6+0`2#^`$/A!(!``"#^`(/A/8```"+50R+0C2%P`^%U```
M`(M-#(M!*(7`#X6R````:@B-@RAP__]0BX,0`0``_W!L:AMJ`8V#/6___U!J
M`&H&Z-!1__^#Q!C_LQ@!``#_LQ0!``#H[$___XN#'`$```^V`(/$$(/X!'0+
M@_@$?UM(@_@!=TN#[`QJ!(V%=/___U!J!(V%./___\>%./___W0&``!0B[WD
M_O___#'`N?_____RKO?14?^UY/[__VH#:G^-@T=O__]0Z#A1__^#Q#"X!@``
M`.FM\?__@_@(=?'KI(/L"/]Q)%#H,'+__X/$$.DZ____@^P(_W(P4.@<<O__
M@\00Z1C___^#[`AJ`5+HN9G__X/$$.GW_O__@^P(BTT,_W$<4NCR<?__Z^>#
M[`AJ`5+HE9G__X/$$.FT_O__@^P(BTT,_W$,4NC.<?__Z^>+10Q2@\`04(M%
M#(/`#%"-A5C___]0Z-V#__^#Q!"%P(F%=/___P^$Q//__XM-#(M1$(72=!6+
M002#^`$/A/H```"#^`(/A-X```"+30R+42"%TG05BT$$@_@!#X2W````@_@"
M#X2;````BU4,BT(TA<!U?8M-#(M!*(7`=6*#[`C_LQ@!``#_LQ0!``#H<D[_
M_XN#'`$```^V`(/$$(/X!'0/@_@$?RU(@_@!#X=^\/__@^P,:@2-A73___]0
M:@2-A3S____'A3S___]I!@``Z2[P__^#^`@/A5+P___KTH/L"/]Q)%#HX'#_
M_X/$$.N-@^P(_W(P4.C/</__@\00Z6____^#[`AJ`5+H;)C__X/$$.E2____
M@^P(BT4,_W`<4NBE</__Z^>#[`AJ`5+H2)C__X/$$.D/____@^P(BT4,_W`,
M4NB!</__Z^>-=@"+10R+4!"%TG05BT`$@_@!#X0V`0``@_@"#X0:`0``BT4,
MBU`@A=)T%8M`!(/X`0^$\P```(/X`@^$UP```(M5#(M"-(7`#X6U````BTT,
MBT$HA<`/A9,```!1_[7L_O__BX,0`0``_["(````:B)J`8V#/6___U!J`&H$
MZ`-/__^#Q!C_LQ@!``#_LQ0!``#'A73___\$````Z!5-__^+@QP!```/M@"#
MQ!"#^`1T#X/X!'\M2(/X`0^'(>___X/L#&H$C85T____4&H$C85`____QX5`
M____8P8``.G1[O__@_@(#X7U[O__Z]*#[`C_<210Z(-O__^#Q!#I6?___X/L
M"/]R,%#H;V___X/$$.DW____@^P(:@%2Z`R7__^#Q!#I%O___X/L"(M-#/]Q
M'%+H16___^OG@^P(:@%2Z.B6__^#Q!#IT_[__X/L"(M-#/]Q#%+H(6___^OG
MC78`BT7(A<`/A54!``!0BT4,@\`84(M%#(/`%%"-A5C___]0QT7(`0```.@;
M@?__@\00A<")A73___\/A`+Q__^+10R+4!"%TG05BT`$@_@!#X3Z````@_@"
M#X3>````BT4,BU`@A=)T%8M`!(/X`0^$MP```(/X`@^$FP```(M5#(M"-(7`
M=7V+30R+02B%P'5B@^P(_[,8`0``_[,4`0``Z+!+__^+@QP!```/M@"#Q!"#
M^`1T#X/X!'\M2(/X`0^'O.W__X/L#&H$C85T____4&H$C84L____QX4L____
M@P8``.EL[?__@_@(#X60[?__Z]*#[`C_<210Z!YN__^#Q!#KC8/L"/]R,%#H
M#6[__X/$$.EO____@^P(:@%2Z*J5__^#Q!#I4O___X/L"(M-#/]Q'%+HXVW_
M_^OG@^P(:@%2Z(:5__^#Q!#I#____X/L"(M-#/]Q#%+HOVW__^OGD(M-#(M1
M$(72=!6+002#^`$/A#8!``"#^`(/A!H!``"+30R+42"%TG05BT$$@_@!#X3S
M````@_@"#X37````BU4,BT(TA<`/A;4```"+30R+02B%P`^%DP```%#_M>S^
M__^+@Q`!``#_L(@```!J(FH!C8,];___4&H`:@3H0TS__X/$&/^S&`$``/^S
M%`$``,>%=/___P0```#H54K__XN#'`$```^V`(/$$(/X!'0/@_@$?RU(@_@!
M#X=A[/__@^P,:@2-A73___]0:@2-A3#____'A3#___]_!@``Z1'L__^#^`@/
MA37L___KTH/L"/]Q)%#HPVS__X/$$.E9____@^P(_W(P4.BO;/__@\00Z3?_
M__^#[`AJ`5+H3)3__X/$$.D6____@^P(BT4,_W`<4NB%;/__Z^>#[`AJ`5+H
M*)3__X/$$.G3_O__@^P(BT4,_W`,4NAA;/__Z^>-=@"+=<R%]@^%50$``(M%
M#%*#P"A0BT4,@\`D4(V%6/___U#'1<P!````Z+N`__^#Q!"%P(F%=/___P^$
M0N[__XM%#(M0$(72=!6+0`2#^`$/A/H```"#^`(/A-X```"+10R+4""%TG05
MBT`$@_@!#X2W````@_@"#X2;````BU4,BT(TA<!U?8M-#(M!*(7`=6*#[`C_
MLQ@!``#_LQ0!``#H\$C__XN#'`$```^V`(/$$(/X!'0/@_@$?RU(@_@!#X?\
MZO__@^P,:@2-A73___]0:@2-A13____'A13___^F!@``Z:SJ__^#^`@/A=#J
M___KTH/L"/]Q)%#H7FO__X/$$.N-@^P(_W(P4.A-:___@\00Z6____^#[`AJ
M`5+HZI+__X/$$.E2____@^P(BTT,_W$<4N@C:___Z^>#[`AJ`5+HQI+__X/$
M$.D/____@^P(BTT,_W$,4NC_:O__Z^>0BTT,BU$0A=)T%8M!!(/X`0^$-@$`
M`(/X`@^$&@$``(M-#(M1((72=!6+002#^`$/A/,```"#^`(/A-<```"+50R+
M0C2%P`^%M0```(M-#(M!*(7`#X63````4?^U[/[__XN#$`$``/^PB````&HB
M:@&-@SUO__]0:@!J!.B#2?__@\08_[,8`0``_[,4`0``QX5T____!````.B5
M1___BX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/AZ'I__^#[`QJ!(V%=/__
M_U!J!(V%&/___\>%&/___Z(&``#I4>G__X/X"`^%=>G__^O2@^P(_W$D4.@#
M:O__@\00Z5G___^#[`C_<C!0Z.]I__^#Q!#I-____X/L"&H!4NB,D?__@\00
MZ1;___^#[`B+10S_<!Q2Z,5I___KYX/L"&H!4NAHD?__@\00Z=/^__^#[`B+
M10S_<`Q2Z*%I___KYXUV`(M%T(7`#X51`0``BT4,@^P(@\`L4(V%6/___U#'
M1=`!````Z$!X__^#Q!"%P(F%=/___P^$A^O__XM%#(M0$(72=!6+0`2#^`$/
MA/H```"#^`(/A-X```"+10R+4""%TG05BT`$@_@!#X2W````@_@"#X2;````
MBU4,BT(TA<!U?8M-#(M!*(7`=6*#[`C_LQ@!``#_LQ0!``#H-4;__XN#'`$`
M``^V`(/$$(/X!'0/@_@$?RU(@_@!#X=!Z/__@^P,:@2-A73___]0:@2-A0S_
M___'A0S___^K!@``Z?'G__^#^`@/A17H___KTH/L"/]Q)%#HHVC__X/$$.N-
M@^P(_W(P4.B2:/__@\00Z6____^#[`AJ`5+H+Y#__X/$$.E2____@^P(BTT,
M_W$<4NAH:/__Z^>#[`AJ`5+H"Y#__X/$$.D/____@^P(BTT,_W$,4NA$:/__
MZ^>)]HM%#(M0$(72=!6+0`2#^`$/A#8!``"#^`(/A!H!``"+10R+4""%TG05
MBT`$@_@!#X3S````@_@"#X37````BU4,BT(TA<`/A;4```"+30R+02B%P`^%
MDP```%#_M>S^__^+@Q`!``#_L(@```!J(FH!C8,];___4&H`:@3HQT;__X/$
M&/^S&`$``/^S%`$``,>%=/___P0```#HV43__XN#'`$```^V`(/$$(/X!'0/
M@_@$?RU(@_@!#X?EYO__@^P,:@2-A73___]0:@2-A1#____'A1#___^I!@``
MZ97F__^#^`@/A;GF___KTH/L"/]Q)%#H1V?__X/$$.E9____@^P(_W(P4.@S
M9___@\00Z3?___^#[`AJ`5+HT([__X/$$.D6____@^P(BTT,_W$<4N@)9___
MZ^>#[`AJ`5+HK([__X/$$.G3_O__@^P(BTT,_W$,4NCE9O__Z^>-=@"+1=2%
MP`^%50$``%"+10R#P#10BT4,@\`P4(V%6/___U#'1=0!````Z#][__^#Q!"%
MP(F%=/___P^$QNC__XM%#(M0$(72=!6+0`2#^`$/A/H```"#^`(/A-X```"+
M10R+4""%TG05BT`$@_@!#X2W````@_@"#X2;````BU4,BT(TA<!U?8M-#(M!
M*(7`=6*#[`C_LQ@!``#_LQ0!``#H=$/__XN#'`$```^V`(/$$(/X!'0/@_@$
M?RU(@_@!#X>`Y?__@^P,:@2-A73___]0:@2-A03____'A03___^R!@``Z3#E
M__^#^`@/A53E___KTH/L"/]Q)%#HXF7__X/$$.N-@^P(_W(P4.C19?__@\00
MZ6____^#[`AJ`5+H;HW__X/$$.E2____@^P(BTT,_W$<4NBG9?__Z^>#[`AJ
M`5+H2HW__X/$$.D/____@^P(BTT,_W$,4NB#9?__Z^>0BT4,BU`0A=)T%8M`
M!(/X`0^$-@$``(/X`@^$&@$``(M%#(M0((72=!6+0`2#^`$/A/,```"#^`(/
MA-<```"+50R+0C2%P`^%M0```(M-#(M!*(7`#X63````4/^U[/[__XN#$`$`
M`/^PB````&HB:@&-@SUO__]0:@!J!.@'1/__@\08_[,8`0``_[,4`0``QX5T
M____!````.@90O__BX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/AR7D__^#
M[`QJ!(V%=/___U!J!(V%"/___\>%"/___ZX&``#IU>/__X/X"`^%^>/__^O2
M@^P(_W$D4.B'9/__@\00Z5G___^#[`C_<C!0Z'-D__^#Q!#I-____X/L"&H!
M4N@0C/__@\00Z1;___^#[`B+30S_<1Q2Z$ED___KYX/L"&H!4NCLB___@\00
MZ=/^__^#[`B+30S_<0Q2Z"5D___KYXUV`(M%V(7`#X55`0``BT4,5H/`/%"+
M10R#P#A0C858____4,=%V`$```#H?WC__X/$$(7`B85T____#X0&YO__BT4,
MBU`0A=)T%8M`!(/X`0^$^@```(/X`@^$W@```(M%#(M0((72=!6+0`2#^`$/
MA+<```"#^`(/A)L```"+50R+0C2%P'5]BTT,BT$HA<!U8H/L"/^S&`$``/^S
M%`$``.BT0/__BX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/A\#B__^#[`QJ
M!(V%=/___U!J!(V%_/[__\>%_/[__[D&``#I<.+__X/X"`^%E.+__^O2@^P(
M_W$D4.@B8___@\00ZXV#[`C_<C!0Z!%C__^#Q!#I;____X/L"&H!4NBNBO__
M@\00Z5+___^#[`B+30S_<1Q2Z.=B___KYX/L"&H!4NB*BO__@\00Z0____^#
M[`B+30S_<0Q2Z,-B___KYY"+10R+4!"%TG05BT`$@_@!#X0V`0``@_@"#X0:
M`0``BT4,BU`@A=)T%8M`!(/X`0^$\P```(/X`@^$UP```(M5#(M"-(7`#X6U
M````BTT,BT$HA<`/A9,```!7_[7L_O__BX,0`0``_["(````:B)J`8V#/6__
M_U!J`&H$Z$=!__^#Q!C_LQ@!``#_LQ0!``#'A73___\$````Z%D___^+@QP!
M```/M@"#Q!"#^`1T#X/X!'\M2(/X`0^'9>'__X/L#&H$C85T____4&H$C84`
M____QX4`____M08``.D5X?__@_@(#X4YX?__Z]*#[`C_<210Z,=A__^#Q!#I
M6?___X/L"/]R,%#HLV'__X/$$.DW____@^P(:@%2Z%")__^#Q!#I%O___X/L
M"(M-#/]Q'%+HB6'__^OG@^P(:@%2Z"R)__^#Q!#IT_[__X/L"(M-#/]Q#%+H
M96'__^OGC78`BT7<A<`/A1T%``#'1=P!````BU4,BT($@_@!#X2W`P``@_@"
M#X6*Z___@^P,:@CH!#[__X/$$(7`B<8/A$,"``")PHG8*X.$2____^"-=@`T
MM```Z+(``."R```]M```UK(``,NR``#`L@``1K0``+6R``"JL@``G[(``$^T
M``"4L@``B;(``'ZR``!8M```<[(``,<&`````(U6!,<"`````(/"!,<"````
M`(/"!&;'`@``QD("`(/L"%:-A5C___]0Z`B+__^#Q!"%P(F%=/___W4+BT4,
MB7`@Z:3B__^+10R+4!"%TG05BT`$@_@!#X3Z````@_@"#X3>````BT4,BU`@
MA=)T%8M`!(/X`0^$MP```(/X`@^$FP```(M5#(M"-(7`=7V+30R+02B%P'5B
M@^P(_[,8`0``_[,4`0``Z%(]__^+@QP!```/M@"#Q!"#^`1T#X/X!'\M2(/X
M`0^'7M___X/L#&H$C85T____4&H$C84<____QX4<____G`8``.D.W___@_@(
M#X4RW___Z]*#[`C_<210Z,!?__^#Q!#KC8/L"/]R,%#HKU___X/$$.EO____
M@^P(:@%2Z$R'__^#Q!#I4O___X/L"(M-#/]Q'%+HA5___^OG@^P(:@%2Z"B'
M__^#Q!#I#____X/L"(M-#/]Q#%+H85___^OGC78`Q@(`Z:S^__]FQP(``.FB
M_O__QP(`````Z9?^___'`@````"#P@3KV,<"`````(/"!.O5QP(`````@\($
MZ]3'`@````"#P@3KU,<"`````(/"!.O4QP(`````@\($Z]3'!@````"-5@3K
MU,<&`````(U6!.O4QP8`````C58$Z]2+10R+4!"%TG05BT`$@_@!#X0K`0``
M@_@"#X0/`0``BT4,BU`@A=)T%8M`!(/X`0^$Z````(/X`@^$S````(M5#(M"
M-(7`#X6J````BTT,BT$HA<`/A8@```!J"(V#07#__U"+@Q`!``#_<&QJ&VH!
MC8,];___4&H`:@;H9#W__X/$&/^S&`$``/^S%`$``.B`.___BX,<`0``#[8`
M@\00@_@$=`^#^`1_+4B#^`$/A]OK__^#[`QJ!(V%=/___U#'A2#___^7!@``
M:@2-A2#____IB^O__X/X"`^%K^O__^O2@^P(_W$D4.CN7?__@\00Z63___^#
M[`C_<C!0Z-I=__^#Q!#I0O___X/L"&H!4NAWA?__@\00Z2'___^#[`B+30S_
M<1Q2Z+!=___KYX/L"&H!4NA3A?__@\00Z=[^__^#[`B+30S_<0Q2Z(Q=___K
MYXGV4(M%#(/`(%"+10R#P!Q0C858____4.B9;___@\00A<")A73___\/A(#?
M__^+30R+41"%TG05BT$$@_@!#X3Z````@_@"#X3>````BTT,BU$@A=)T%8M!
M!(/X`0^$MP```(/X`@^$FP```(M5#(M"-(7`=7V+30R+02B%P'5B@^P(_[,8
M`0``_[,4`0``Z"XZ__^+@QP!```/M@"#Q!"#^`1T#X/X!'\M2(/X`0^'.MS_
M_X/L#&H$C85T____4&H$C84D____QX4D____C`8``.GJV___@_@(#X4.W/__
MZ]*#[`C_<210Z)Q<__^#Q!#KC8/L"/]R,%#HBUS__X/$$.EO____@^P(:@%2
MZ"B$__^#Q!#I4O___X/L"(M%#/]P'%+H85S__^OG@^P(:@%2Z`2$__^#Q!#I
M#____X/L"(M%#/]P#%+H/5S__^OGC78`BT4,BU`0A=)T%8M`!(/X`0^$-@$`
M`(/X`@^$&@$``(M%#(M0((72=!6+0`2#^`$/A/,```"#^`(/A-<```"+50R+
M0C2%P`^%M0```(M-#(M!*(7`#X63````4/^U[/[__XN#$`$``/^PB````&HB
M:@&-@SUO__]0:@!J!.B_.O__@\08_[,8`0``_[,4`0``QX5T____!````.C1
M./__BX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/A]W:__^#[`QJ!(V%=/__
M_U!J!(V%*/___\>%*/___X8&``#IC=K__X/X"`^%L=K__^O2@^P(_W$D4.@_
M6___@\00Z5G___^#[`C_<C!0Z"M;__^#Q!#I-____X/L"&H!4NC(@O__@\00
MZ1;___^#[`B+30S_<1Q2Z`%;___KYX/L"&H!4NBD@O__@\00Z=/^__^#[`B+
M30S_<0Q2Z-U:___KYXUV`(/L"(V%^/[__U"-A5C___]0QX7X_O__`````.B$
M:?__@\00A<")A73___]U$8N%^/[__P&%6/___^GNY/__BT4,BU`0A=)T%8M`
M!(/X`0^$^@```(/X`@^$W@```(M%#(M0((72=!6+0`2#^`$/A+<```"#^`(/
MA)L```"+50R+0C2%P'5]BTT,BT$HA<!U8H/L"/^S&`$``/^S%`$``.AL-___
MBX,<`0``#[8`@\00@_@$=`^#^`1_+4B#^`$/AWC9__^#[`QJ!(V%=/___U!J
M!(V%]/[__\>%]/[__[X&``#I*-G__X/X"`^%3-G__^O2@^P(_W$D4.C:6?__
M@\00ZXV#[`C_<C!0Z,E9__^#Q!#I;____X/L"&H!4NAF@?__@\00Z5+___^#
M[`B+30S_<1Q2Z)]9___KYX/L"&H!4NA"@?__@\00Z0____^#[`B+30S_<0Q2
MZ'M9___KYY!0_[7L_O__BX,0`0``_[`@`0``:DAJ`8V#/6___U!J`&H$Z%DX
M__^+30R+01"#Q""%P,>%=/___P0```!T%8M1!(/Z`0^$^@```(/Z`@^$W@``
M`(M-#(M!((7`=!6+402#^@$/A+<```"#^@(/A)L```"+30R+032%P'5]BU4,
MBT(HA<!U8H/L"/^S&`$``/^S%`$``.@6-O__BX,<`0``#[8`@\00@_@$=`^#
M^`1_+4B#^`$/AR+8__^#[`QJ!(V%=/___U!J!(V%8/___\>%8/___TT&``#I
MTM?__X/X"`^%]M?__^O2@^P(_W(D4.B$6/__@\00ZXV#[`C_<3!0Z'-8__^#
MQ!#I;____X/L"&H!4.@0@/__@\00Z5+___^#[`B+50S_<AQ0Z$E8___KYX/L
M"&H!4.CL?___@\00Z0____^#[`B+50S_<@Q0Z"58___KYXUV`(M5#(M"$(7`
M=!6+4@2#^@$/A/H```"#^@(/A-X```"+30R+02"%P'05BU$$@_H!#X2W````
M@_H"#X2;````BTT,BT$TA<!U?8M5#(M"*(7`=6*#[`C_LQ@!``#_LQ0!``#H
M\C3__XN#'`$```^V`(/$$(/X!'0/@_@$?RU(@_@!#X?^UO__@^P,:@2-A73_
M__]0:@2-A63____'A63___]'!@``Z:[6__^#^`@/A=+6___KTH/L"/]R)%#H
M8%?__X/$$.N-@^P(_W$P4.A/5___@\00Z6____^#[`AJ`5#H['[__X/$$.E2
M____@^P(BU4,_W(<4.@E5___Z^>#[`AJ`5#HR'[__X/$$.D/____@^P(BU4,
M_W(,4.@!5___Z^>-=@"#[`QJ`&H"_[7L_O__BX,0`0``_W!H:AIJ`8V#/6__
M_U!J`&H$Z-HU__^#Q"C_LQ@!``#_LQ0!``#'A73___\$````Z.PS__^+@QP!
M```/M@"#Q!"#^`1T#X/X!'\M2(/X`0^'^-7__X/L#&H$C85T____4&H$C85L
M____QX5L____.P8``.FHU?__@_@(#X7,U?__Z]*0D%6)Y593@^P<Z`````!;
M@</CJ0``C47T4.CO,___:@2-@R3]__]0_[,<`0``C8/@</__4.@D-/__@\04
M_W7TB<;H=S3__UC_LP0!``#H6S/__XUE^%N)\%[)PXGV58GE5U93@>P0)@``
MZ`````!;@<.#J0``:/\/``"*@^5P__]J`(B%B.___XV%B>___U#'A13:__\`
M````Z%\T__^#Q`QH_P\``&H`C86)W___BI/E</__4(B5B-___^@]-/__BX,@
M`0``BQ")A0C:__^-@P2!___'A1#:__\`````B94,VO__B84`VO__B=:)Q[DB
M````_(/$$/.F#X2(````BY4,VO__,<")U[G_____\J[WT8'Y`!```(NU"-K_
M_P^&K04``%=H`!```%*-A8CO__]0Z$8S__^#Q`QH`!```/\VC86(W___4.@P
M,___@\00@^P,:B+HXS'__X/$$(7`=!)1:B+_M0#:__]0Z`TS__^#Q!"%P(D&
M#X1#!0``QX40VO__`0```(.]%-K__P8/A/D$``"#[`QJ/^CO,/__BX,@`0``
MBS"+O0#:__^Y(@```/R#Q!#SI@^$H`0``(/L#&I_Z,8P___H-?[__XN#``$`
M`(LP@\00A?8/A7(#``"#[`C_LQ@!``#_LQ0!``#HJC'__XN#'`$```^V0`.#
MQ!"#^`</A\H```")VBN4@R18____XI`>IP``O*<``'*F``#^I0``BJ4``!ZG
M```>IP``%J4``%%H``$``(J#Y7#__VH`B(5XWO__C85YWO__4(V]+-K__XVU
M>-[__\>%*-K__P$```#HDC+__XD\),>%+-K__P````#H0##__XDT).C8,/__
M@\00A<!T%<>%>-[__W5N:V['A7S>__]O=VX`D(/L#&H$5_PQP(GWN?_____R
MKO?1459J!(V%*-K__U!J`VH$C8/@</__4.A],O__@\0P@[T0VO__`701BX44
MVO__C67T6UY?R<.-=@"#[`C_LQ@!``#_LQ0!``#HG##__XN#'`$```^V0`*#
MQ!"#^`%T#X/X`7[$@_@$=`6#^`AUNE*+@R`!``"+`#'2OO____^)A?39__^)
MQ_R(T(GQ\J[WT5&-A8C?____M?39__^)QXF%]-G__XGQB-#RKO?14?^U]-G_
M_VH":EB-@^!P__]0Z-8Q__^#Q"#I7?___U)H``$``(J#Y7#__VH`B(5HW?__
MC85IW?__4(V])-K__XVU:-W__\>%*-K__P(```#H2#'__XD\),>%)-K__P``
M``#H]B[__XDT).B.+___@\00A<`/A,?^___'A6C=__]U;FMNQX5LW?__;W=N
M`.FN_O__5V@``0``BH/E</__:@"(A5C<__^-A5G<__]0C;T@VO__C;58W/__
MQX4HVO__`P```.C4,/__B3PDQX4@VO__`````.B"+O__B30DZ!HO__^#Q!"%
MP`^$4_[__\>%6-S__W5N:V['A5S<__]O=VX`Z3K^__]6:``!``"*@^5P__]J
M`(B%2-O__XV%2=O__U"-O1S:__^-M4C;___'A2C:__\$````Z&`P__^)/"3'
MA1S:__\`````Z`XN__^)-"3HIB[__X/$$(7`#X3?_?__QX5(V___=6YK;L>%
M3-O__V]W;@#IQOW__U%H``$``(J#Y7#__VH`B(4XVO__C84YVO__4(V]&-K_
M_XVU.-K__\>%*-K__P<```#H["___XD\),>%&-K__P````#HFBW__XDT).@R
M+O__@\00A<`/A&O]___'A3C:__]U;FMNQX4\VO__;W=N`.E2_?__B?:+D_P`
M``"+`H7`=`T]_P\``'\&QP(`$```@^P,BX,@`0``_S#HLR___X/$$(7`B844
MVO__=3:+@_P```"+`(7`=6V+@PP!``"+`(7`#X0\_/__@^P,4.CQ+O__@\00
MA<")A13:__\/A"+\__^#[`R-A33:__]0Z$$N__]86HV%,-K__U#_M33:___H
M;2W__UC_M3#:___H42S__U__M33:___H%2S__X/$$.G?^___@^P,4.BD+/__
M@\00A<")A13:__\/A'G___^#[`R-A33:__]0Z.0M__]?6(V%,-K__U#_M33:
M___H$"W__U[_M3#:___H]"O__UG_M33:___HN"O__X/$$.DV____@^P(:,`!
M``"-@R:!__]0Z&P%``!86FC``0``C8,[@?__4.A9!0``@\00Z3'[__^0:*0`
M``"-@V2!__]0BX,0`0``_W`0:@1J`8V#L('__U!J`&H&Z+<N__^X!@```.DB
M_/__QX44VO__!@```.FX^O__B?91:/\/``#_M0S:__^-A8C?__]0Z#0N__^#
MQ`QH_P\``/\VC;V([___5^@>+O__@\0,C56(4O\V:@.)E03:___H6"S__X/$
M$(7`>`^+19@E`/```#T`0```=%]0:/\/``"+LR`!``#_-E?HWBW__X/L"&HO
M5^A#+?__@\0@A<`/A/OY___&``!0_[4$VO__5VH#Z`8L__^#Q!"%P`^(WOG_
M_XM%F"4`\```/0!````/A<OY___I_?G__X/L#&HBZ*DK__^#Q!"%P'024FHB
M_[4`VO__4.C3+/__@\00BY4(VO__A<")`@^%P/G__^EI____D)"058GEBTT(
M5HM!!(7`BW4,=#.+$872=!V)0@2+002)$,=!!`````#'`0````"+-"3)PXUV
M`(D&BT$$QP``````Z]Z-=@"+`87`=`K'0`0`````Z\R0QP8`````Z\-5B>6+
M30R+`8M5"(E"!,<"`````(L!A<!T`HD0B1')PU6)Y5=64X/L#.@`````6X'#
MHJ$``(M]"(MU#,=%\`````"%_P^$Q@```(7V#X06`0``BT<@@\`D@^P,B090
MZ+DJ__^#Q!"%P(G!B48$#X2\````BP=FP<@(P<@09L'("(D!BT<$9L'(",'(
M$&;!R`B)002+1PAFP<@(P<@09L'("(E!"(M'#&;!R`C!R!!FP<@(B4$,BT<0
M9L'(",'($&;!R`B)01"+1Q1FP<@(P<@09L'("(E!%(M'&&;!R`C!R!!FP<@(
MB4$8BT<<9L'(",'($&;!R`B)01R+5R")T&;!R`C!R!!FP<@(A=*)02!U#(M%
M\(UE]%M>7\G#D%!2_W<DC7$D5N@R*___@\00Z^''!@````"-@T2"__]J9U"+
M@Q`!``#_<!!J!&H!C8.0@O__4&H`:@;H\2O__\=%\`8```"#Q"#KJ9!2C8.:
M@O__4(N#$`$``/]P&&H&:@&-@Y""__]0:@!J!.B_*___B47PZ]")]E6)Y5=6
M4X/L#.@`````6X'#+J```(MU#,=%\`````"+10B%P`^$WP```(M%"(L0A=(/
MA&D!``"%]@^$80$``(/Z(P^&*`$``(M%\/R)][D*````\ZN+10B+>`2+!V;!
MR`C!R!!FP<@(B0:#QP2+!V;!R`C!R!!FP<@(B48$@\<$BP=FP<@(P<@09L'(
M"(E&"(/'!(L'9L'(",'($&;!R`B)1@R#QP2+!V;!R`C!R!!FP<@(B480@\<$
MBP=FP<@(P<@09L'("(E&%(/'!(L'9L'(",'($&;!R`B)1AB#QP2+!V;!R`C!
MR!!FP<@(B48<@\<$BP=FP<@(P<@09L'("(/'!(7`B48@=0N+1?"-9?1;7E_)
MPX/L#%#H:RC__X/$$(7`B48D=!!1_W8@5U#HEBG__X/$$.O2:,\```"-@T2"
M__]0BX,0`0``_W`0:@1J`8V#D(+__U!J`&H&Z%@J___'1?`&````D(/$(.N<
MC78`5HV#KX+__U"+@Q`!``#_<#!J#&H!C8.0@O__4&H`:@?H(RK__\=%\`<`
M``#KRHGV5XV#KX+__U"+@Q`!``#_<!AJ!FH!C8.0@O__4&H`:@3H\RG__\=%
M\`0```#KFHGV58GE5U93@^P,Z`````!;@<->G@``BW4(A?9T&HM&((7`=`>+
M5B2%TG46_+D*````,<")]_.KC67T6UY?R<.)]E%0:@!2Z"XI__]8_W8DZ/4H
M__^#Q!#KTE6)Y5=64X/L%.@`````6X'#!IX``(M]"(MU#,=%\`````!65^C7
M)?__@\00A<!X4(/L"%97Z!8G__^#Q!"%P'@+BT7PC67T6UY?R</H[R;___\P
M5XN#$`$``/]P2&H2:@&-@Y""__]0:@!J:>@?*?__QT7P:0```(/$(.O$C78`
MZ+LF____,%>+@Q`!``#_<%!J%.O*D(GV58GE5U93@\2`Z`````!;@<-NG0``
M,?:-N\:"__^-18A05VH#B46$Z,PF__^#Q!"%P`^(N0$``(M5F(G0)0#P```]
M`$````^$1`$``(/L#%?HTR7__[X!````@\00@_X!=&*%]G0*C67T6XGP7E_)
MPU;_=82-N^*"__]7:@/H=B;__X/$$(7`B<9X#XM%F"4`\```/0!```!TS(7V
M=!6#[`AH_P$``%?HO/[__XG&@\00Z[.#[`Q7Z&PE__^#Q!#KW8UV`%'_=82-
M@_Z"__]0:@/H(B;__X/$$(7`>`^+19@E`/```#T`0```="V#[`B+@Q`!``#_
M<%1J%6H!C8.0@O__4&H`:FGH["?__[YI````@\0@Z4G___]2_W6$C8,-@___
M4&H#B46`Z,HE__^#Q!"%P(G&>`^+19@E`/```#T`0```="&%]G0U@^P(:/\!
M``#_=8#H#O[__X/$$(7`B<8/A?_^__^#[`AH_P$``%?H\_W__XG&@\00Z>/^
M__^#[`S_=8#HGB3__X/$$.N[D('B_P$``+C_`0``.=`/A+K^__^#[`AH_P$`
M`%?H!R7__X/$$(7`B<8/A)_^___HY23___\P5XN#$`$``/]P2&H2:@&-@Y""
M__]0:@!J:>@5)___OFD```"#Q"#I;?[__[X!````Z6/^__^)]E6)Y5=64X/$
M@.@`````6X'#<IL``#'VC;LB@___C46(4%=J`XE%A.C0)/__@\00A<`/B$D!
M``"+59B)T"4`\```/0!````/A-@```"#[`Q7Z-<C__^^`0```(/$$(/^`712
MA?9T"HUE]%N)\%Y?R<.#[`Q7Z/,D__^#Q!"%P'GF@^P0Z"0D__^#Q`S_,(N#
M$`$``/]P8&H8:@&-@Y""__]0:@!J:>A2)O__OFD```"#Q"#KLE;_=82-@S>#
M__]0:@/H-B3__X/$$(7`>`^+19@E`/```#T`0```="V#[`B+@Q`!``#_<%1J
M%6H!C8.0@O__4&H`:FGH`";__[YI````@\0@Z5G___^#[`AHZ`$``%?H5?S_
M_XG&@\00Z4'___^-=@"XZ`$``#G0#X0L____@^P(:.@!``!7Z'TC__^#Q!"%
MP(G&#X01____Z%LC____,%>+@Q`!``#_<$AJ$FH!C8.0@O__4&H`:FGHBR7_
M_[YI````@\0@Z=_^__^)]KX!````Z=/^__^)]E6)Y5=3@^P8Z`````!;@</G
MF0``_[,8`0``_[,4`0``Z'LC__^+@QP!```/MD`"@\00@_@!=!F#^`%^"H/X
M!'0/@_@(=`J-9?A;7\G#C78`BY-*@___BX-&@___B57LB47HZ+DA__]7:@2)
M1?2-5>B-1?10B=?\,<"Y______*N]]%14FH":@*-@TZ#__]0Z+PD__^#Q"#K
MK9")]E6)Y8M5"%=6,<#\N?____^)U_*N]]$Q]H/I`CG.?1F0BT4(#[84!HG'
MB@0!B`0^B!0Y1DDYSGSH7E_)PU6)Y5=64X/L'.@`````6X'##ID``(M-"(7)
MB4WL>%XQ]K\*````B?:)R)GW_XU",(M5#(@$%KAG9F9F]^F)5>2)R,'Z`HE5
MX)DI5>"+3>!&A<E_U(M%[(7`>!B+10R#[`S&!`8`4.A9____C67T6UY?R<.+
M50S&!!8M1NO>]]GKGI"0D%6)Y5-2H2@+!@B#^/^[*`L&"'0,@^L$_]"+`X/X
M_W7T6%O)PU6)Y5-2Z`````!;@<-JF```Z$(D__^+7?S)PP``````````````
M`````````````````````````P````$``@``````````````````````````
M``````!`*",I-3<@("`Q+C$@("!S<F,O<G-C="]C;W!Y<FEG:'0O8V]P>7)I
M9VAT+F,L(')S8W0L(')S8W1?<G)I9V@L(')R:6=H,#,T.6$@-2\Q,"\P,2`R
M,3HQ,3HS-0````!`*",I-3,@("`Q+C(@("!S<F,O<G-C="]S96-U<FET>2]#
M05,O8FEN+V-T8V%S7W-T<G1C87-D+F,L(&-T<V5C+"!R<V-T7W)R:6=H+"!R
M<FEG:#`S-#EA(#<O,38O,#,@,34Z-3<Z,3@`9CIL.G,Z='8`3TX`3T9&`%]3
M14,`8W1C87,``"]V87(O8W0O25<O<V]C+V-T8V%S+W-E<G9E<@`O+F)O8FAE
M;6%N=')A=FES97)B86X`8W1C87,N8V%T````/Y@$"!28!`@4F`0(%)@$"!28
M!`@4F`0(6I@$"!28!`@4F`0(%)@$"!28!`@4F`0(%)@$"&V8!`B<F`0(%)@$
M"*>8!`A,HP0(3Z`$"/6C!`BDH@0(I*($"*2B!`A;HP0(3*,$"$RC!`A,HP0(
M3*,$"/6C!`A#5%]44E\`/0!C87-?7V-L96%N7W1R86-E7V5N=FER;VX`````
M````+W!R;VIE8W0O<W!R96QR:6=H+V)U:6QD+W)R:6=H,#0P,V$O<W)C+W)S
M8W0O<V5C=7)I='DO0T%3+V)I;B]C=&-A<U]S=')T8V%S9"YC`&5N=G9A<G-;
M=F%R8V]U;G1=`'``96YV=F%R<P````````````````````````````!`*",I
M.3D@("`Q+C<@("!S<F,O<G-C="]S96-U<FET>2]#05,O8FEN+V-T8V%S7V-O
M;6TN8RP@8W1S96,L(')S8W1?<G)I9V@L(')R:6=H,#,T.6$@-R\S,2\P,B`P
M.#HT-CHS,`!C87-?7W-E;F1?9&%T80!C=&-A<RYC870`7U-%0P!S96YD*"D`
M<V5L96-T*"D`8V%S7U]R96-E:79E7V1A=&$`<F5C=B@I````````````````
M```````````O<')O:F5C="]S<')E;')I9V@O8G5I;&0O<G)I9V@P-#`S82]S
M<F,O<G-C="]S96-U<FET>2]#05,O8FEN+V-T8V%S7V-O;6TN8P``````````
M``````````````````!`*",I,#$@,2XQ,B`@("`@<W)C+W)S8W0O<V5C=7)I
M='DO0T%3+V)I;B]C=&-A<U]E;F-O9&4N8RP@8W1S96,L(')S8W1?<G)I9V@L
M(')R:6=H,#,T.6$@,B\R-R\P,R`Q,SHR.3HU,P!C=&-A<RYC870`8W5?:6-O
M;G9?;W!E;@!C87-?7W5T9CA?<V5T=7``8V%S7U]O<&5N7W5T9CA?:&1L`&-A
M<U]?<V5T=7!?=71F.%]H9&QS`&-A<U]C;VYV7W-T<E]T;U]U=&8X`&-A<U]?
M8V]N=E]U=&8X7W1O7W-T<@!C87-?7V5N8V]D95\Q-FEN=`!C87-?7W5N96YC
M;V1E7S$V:6YT`&-A<U]?96YC;V1E7S,R:6YT`&-A<U]?=6YE;F-O9&5?,S)I
M;G0`8V%S7U]E;F-O9&5?-C1I;G0`8V%S7U]U;F5N8V]D95\V-&EN=`!C87-?
M7V5N8V]D95\S,F9L=`!C87-?7W5N96YC;V1E7S,R9FQT`&-A<U]?96YC;V1E
M7S8T9FQT`&-A<U]?=6YE;F-O9&5?-C1F;'0`8V%S7U]E;F-O9&5?<W1R:6YG
M`&-A<U]?=6YE;F-O9&5?<W1R:6YG`&-A<U]?96YC;V1E7V)Y=&5S=')E86T`
M8V%S7U]U;F5N8V]D95]B>71E<W1R96%M`&-A<U]?;6%R<VAA;%\S,FEN=`!C
M87-?7VUA<G-H86Q?<W1R:6YG`&-A<U]?=6YM87)S:&%L7W-T<FEN9P!C87-?
M7VUA<G-H86Q?8GET97-T<F5A;0!C87-?7W5N;6%R<VAA;%]B>71E<W1R96%M
M`&-A<U]?96YC;V1E7V5R<F)L;V-K`&-A<U]?;6%R<VAA;%]E<G)B;&]C:P!C
M87-?7W5N;6%R<VAA;%]E<G)B;&]C:P!C=5]A<&MG7V5R<G!R`&-A<U]?=6YM
M87)S:&%L7V5R<F)L;V-K*#(I`&-A<U]?=6YM87)S:&%L7V5R<F)L;V-K*#$I
M`&-A<U]?96YC;V1E7W-E8VME>0!C87-?7W5N;6%R<VAA;%]S96-K97D`8V%S
M7U]M87)S:&%L7VAO<W1I9&QI<W0`8V%S7U]U;FUA<G-H86Q?:&]S=&ED;&ES
M=`````````````````````````````!`*",I,#D),2XQ-0ES<F,O<G-C="]S
M96-U<FET>2]#05,O<W9C<R]H8F$O8W1H8F%?;6%R<V@N8RP@8W1S96,L(')S
M8W1?<G)I9V@L(')R:6=H,#,T.6$@,B\Q-R\P,R`P.3HP.#HU.`!H8F%?;6%R
M<VAA;%]R97%U97-T`&AB85]M87)S:&%L7W)E<75E<W1?;65M8V%L8P!C=&-A
M<RYC870`7U-%0P!H8F%?=6YM87)S:&%L7W)E<75E<W0`:&)A7VUA<G-H86Q?
M<F5P;'D`:&)A7VUA<G-H86Q?<F5P;'E?;65M8V%L8P!H8F%?=6YM87)S:&%L
M7W)E<&QY`&AB85]M87)S:&%L7V-R961S`&AB85]M87)S:&%L7V-R961S7VUE
M;6-A;&,`:&)A7W5N;6%R<VAA;%]C<F5D<P!H8F%?;6%R<VAA;%]E;F-D871A
M`&AB85]M87)S:&%L7V5N8V1A=&%?;65M8V%L8P!H8F%?=6YM87)S:&%L7V5N
M8V1A=&$`:&)A7W5N;6%R<VAA;%]E;F-D871A*#$I`&AB85]U;FUA<G-H86Q?
M96YC9&%T82@R*0``````````````0"@C*3DV("`@,2XV("`@<W)C+W)S8W0O
M<V5C=7)I='DO0T%3+V)I;B]C=&-A<U]T<F%C92YC+"!C='-E8RP@<G-C=%]R
M<FEG:"P@<G)I9V@P,S0Y82`Y+S(S+S`R(#$U.C`W.C(W`$5R<F]R<P!!4$D`
M26YF;P!097)F`%]314,`````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```O=F%R+V-T+TE7+VQO9R]C='-E8R]C=&-A<V0O=')A8V4`+W9A<B]C="])
M5R]L;V<O8W1S96,`+W9A<B]C="])5R]L;V<O8W1S96,O8W1C87-D````````
M```````````O<')O:F5C="]S<')E;')I9V@O8G5I;&0O<G)I9V@P-#`S82]S
M<F,O<G-C="]S96-U<FET>2]#05,O8FEN+V-T8V%S7W1R86-E+F,`8W1C87,N
M8V%T``````````````!`*",I.3@@("`Q+C@@("!S<F,O<G-C="]S96-U<FET
M>2]#05,O8FEN+V-T8V%S7W5T:6QS+F,L(&-T<V5C+"!R<V-T7W)R:6=H+"!R
M<FEG:#`S-#EA(#<O,S$O,#(@,#@Z-#8Z,C@`````````````````````````
M`````````"]P<F]J96-T+W-P<F5L<FEG:"]B=6EL9"]R<FEG:#`T,#-A+W-R
M8R]R<V-T+W-E8W5R:71Y+T-!4R]B:6XO8W1C87-?=71I;',N8P!C=&-A<RYC
M870`8V%S7U]M87)S:&%L7WAD871A*"D`8V%S7U]U;FUA<G-H86Q?>&1A=&$H
M*0`O=F%R+V-T+TE7+W-O8R]C=&-A<R]C;&EE;G0`+W9A<B]C="])5R]S;V,O
M8W1C87,O<V5R=F5R`"]V87(O8W0O25<O<V]C`"]V87(O8W0O25<O<V]C+V-T
M8V%S`"]V87(O8W0O25<O<G5N+V-T8V%S`"]V87(O8W0O25<O<G5N`&-T8V%S
M9```7U-%0P```````````````````````%)E<V5R=F5D.B!$3R!.3U0@55-%
M(0``````````````,C8U,2TP,#$@26YF;W)M871I;VYA;"!M97-S86=E(#$N
M`````````````````````````````````````````#(V-3$M,#`Q(%5N86)L
M92!T;R!S=&%R="!$044Z(&1A95]I;FET*"D@9F%I;&5D("AR8R`]("4Q)&0I
M"@EF:6QE(#T@)3(D<PH)=F5R<VEO;B`]("4S)',*"6QI;F4@/2`E-"1S"@``
M````````````````````````````````,C8U,2TP,#(@8W1C87-D(&ES(&YO
M="!R=6YN:6YG(&%S(')O;W0N`````````````````````````````````#(V
M-3$M,#`S($UE;6]R>2!A;&QO8V%T:6]N(&5R<F]R("@E,21S.B4R)&0I+@``
M```````````````````````R-C4Q+3`P-"!#;VYF:6=U<F%T:6]N(&9I;&4@
M97)R;W(N````````````````````````````````````````,C8U,2TP,#4@
M3VYE(&]F('1H92!A<F=U;65N=',@<')O=FED960@=&\@)3$D<R!I<R!N;W0@
M=F%L:60N`````#(V-3$M,#`V($5R<F]R(&]N('-O8VME="!O<&5R871I;VX@
M*"4Q)',Z(&5R<FYO(#T@)3(D9"DN```````````R-C4Q+3`P-R!4:&4@9FEL
M92!D97-C<FEP=&]R(')E861Y(&9O<B!R96%D:6YG(&]R('=R:71I;F<@9&]E
M<R!N;W0@;6%T8V@@=&AE(&-O;FYE8W1I;F<@<V]C:V5T+@`R-C4Q+3`P."!4
M:&4@8V]N;F5C=&EO;B!T:6UE9"!O=70N````````````````````````````
M````````````,C8U,2TP,#D@1&%T82!C;VUM=6YI8V%T:6]N(&9A:6QU<F4@
M*'-E;F0H*3H@;65S<V%G92!L96YG=&@@/2`E,21D+"!B>71E<R!S96YT(#T@
M)3(D9"X`````````````,C8U,2TP,3`@5&AE(')E861I;F<@;V8@9&%T82!W
M87,@:6YT97)R=7!T960N`````````````````````````#(V-3$M,#$Q("4Q
M)',Z('1H92!B=69F97(@8V]N=&%I;FEN9R!T:&4@;6%R<VAA;&5D(&1A=&$@
M:7,@;F]T('9A;&ED+@```````````````````````````````````#(V-3$M
M,#$R(%)E<75E<W0@,'@E,20P.'@@;F]T('-U<'!O<G1E9"!B>2!S97)V:6-E
M(#!X)3(D,#AX+@`````R-C4Q+3`Q,R!397)V:6-E(#!X)3$D,#AX(&ES(&YO
M="!S=7!P;W)T960@8GD@8W1C87-D+@``````````````,C8U,2TP,30@17)R
M;W(@;VX@=&AR96%D(&]P97)A=&EO;B`H)3$D<SH@<F,@/2`E,B1D*2X`````
M`````````#(V-3$M,#$U(%5N86)L92!T;R!Q=65U92!R97%U97-T.@H)<75E
M=64@<VEZ93TE,21D"@EP96YD:6YG(')E<75E<W1S/24R)&0*````````````
M`````````````````#(V-3$M,#$V(%5N86)L92!T;R!C<F5A=&4@=&AE(&UI
M;FEM=6T@;G5M8F5R(&]F('=O<FME<B!T:')E861S(&-O;F9I9W5R960N"@``
M`````````````````````````#(V-3$M,#$W(%5N86)L92!T;R!S970@=&AE
M(&%P<')O<')I871E('!E<FUI<W-I;VX@;VX@9FEL92]D:7)E8W1O<GD@)3$D
M<R`H8VAM;V0H*3H@97)R;F\@/2`E,B1D*2X*````````````````````````
M````````````````,C8U,2TP,3@@17)R;W(@;VX@<VEG;F%L(&]P97)A=&EO
M;B`H)3$D<SH@97)R;F\@/2`E,B1D*2X*`````````#(V-3$M,#$Y(%5N86)L
M92!T;R!C<F5A=&4@9&ER96-T;W)Y("4Q)',@*&UK9&ER*"DZ(&5R<FYO(#T@
M)3(D9"DN"@```````````````````````````````````````#(V-3$M,#(P
M(%5N86)L92!T;R!F:6YD(&1I<F5C=&]R>2`O=F%R+V-T+RX*````````````
M```````````````R-C4Q+3`R,2!4:&4@<V5R=F5R(&ES(&YO="!A8FQE('1O
M('!E<F9O<FT@=&AE(&%U=&AE;G1I8V%T:6]N(')E<75E<W0N"@``````````
M```````````````````````R-C4Q+3`R,B!!;B!E<G)O<B!O8V-U<F5D(&1U
M<FEN9R!T:&4@<V5R=F5R)W,@871T96UP="!T;R!G970@=&AE(&-L:65N="=S
M(&ED96YT:71Y+@H````````````````R-C4Q+3`R,R!5;F%B;&4@=&\@<V5T
M('1H92!C=7)R96YT('=O<FMI;F<@9&ER96-T;W)Y('1O("]V87(O8W0O25<O
M<G5N+V-T8V%S("AC:&1I<B@I.B`E,21D*2X*```R-C4Q+3`R-"!4:&4@<V5R
M=F5R(')E<&]R=&5D(&$@)W-E<G9E<B!B=7-Y)R!C;VYD:71I;VX`````````
M````,C8U,2TQ,#$@;&EB8W1?8V%S($9A:6QU<F4Z(&EN8V]R<F5C="!P87)A
M;65T97)S('!R;W9I9&5D+@H)1G5N8W1I;VX@;F%M93H@)3$D<PH)4&]S:71I
M;VYA;"!P87)A;65T97(@;G5M8F5R.B`E,B1D"@E087)A;65T97(@=F%L=64Z
M(#!X)3,D>`I)9B!T:&ES(&9A:6QU<F4@:7,@96YC;W5N=&5R960@9'5R:6YG
M('1H92!E>&5C=71I;VX@;V8@=&AE($-L=7-T97(@<V]F='=A<F4*=')U<W1E
M9"!S97)V:6-E<RP@8V]N=&%C="!)0DT@0W5S=&]M97(@4W5P<&]R="!A;F0@
M<F5P;W)T('1H:7,@:6YC:61E;G0N"DEF('1H:7,@9F%I;'5R92!I<R!E;F-O
M=6YT97)E9"!D=7)I;F<@=&AE(&5X96-U=&EO;B!O9B!O=&AE<B!S;V9T=V%R
M92P*=F5R:69Y('1H870@=&AE('-O9G1W87)E(&ES('5S:6YG('1H:7,@9G5N
M8W1I;VX@8V]R<F5C=&QY+@H`````````````````````````````````````
M`#(V-3$M,3`R(&QI8F-T7V-A<R!-96UO<GD@86QL;V-A=&EO;B!F86EL=7)E
M+@H)1G5N8W1I;VX@;F%M93H@)3$D<PH)071T96UP=&5D(&%L;&]C871I;VXZ
M("4R)&0@8GET97,*36]S="!O9G1E;BP@=&AI<R!F86EL=7)E(&]C8W5R<R!W
M:&5N(&$@<')O8V5S<R!E>&-E961S(&ET<R!M96UO<GD@86QL;V-A=&EO;@IL
M:6UI="X@($EN(')A<F4@8V%S97,L('1H:7,@9F%I;'5R92!O8V-U<G,@=VAE
M;B!A(&YU;6)E<B!O9B!P<F]C97-S97,*86QL;V-A=&4@:'5G92!A;6]U;G1S
M(&]F(&UE;6]R>2!A;F0@=71I;&EZ92!A;&P@879A:6QA8FQE(&UE;6]R>2!O
M;B!T:&4*<WES=&5M+B`@5F5R:69Y('1H870@=&AE(&%L;&]C871I;VX@:71S
M96QF(&ES(&YO="!E>&-E961I;F<@:71S(&]W;B!L:6UI="X*268@82!#;'5S
M=&5R('-O9G1W87)E('1R=7-T960@<V5R=FEC92!I<R!E>&-E961I;F<@:71S
M(&QI;6ET+"!C;VYT86-T($E"30I#=7-T;VUE<B!3=7!P;W)T(&%N9"!R97!O
M<G0@=&AI<R!I;F-I9&5N="X@($EF(&%N;W1H97(@<V]F='=A<F4@87!P;&EC
M871I;VX*:7,@97AC965D:6YG(&ET<R!L:6UI="P@97AA;6EN92!T:&4@<V]F
M='=A<F4@9F]R(&UE;6]R>2!M86YA9V5M96YT('!R;V)L96US"F%N9"!M96UO
M<GD@;&5A:W,N("!)9B!T:&4@87!P;&EC871I;VX@:7,@;F]T(&5X8V5E9&EN
M9R!I=',@;65M;W)Y(&%L;&]C871I;VX*;&EM:71S+"!C;VYT86-T('1H92!S
M>7-T96T@861M:6YI<W1R871O<B!A;F0@<F5P;W)T('1H:7,@:6YC:61E;G0N
M("!3>7-T96T*861M:6YI<W1R871O<G,@<VAO=6QD(&ED96YT:69Y('!R;V-E
M<W-E<R!U<VEN9R!E>&-E<W-I=F4@;65M;W)Y(&%N9"!C;VYS:61E<@IT97)M
M:6YA=&EN9R!T:&5S92!P<F]C97-S97,N"@``````````````````````,C8U
M,2TQ,#,@;&EB8W1?8V%S($9A:6QU<F4Z(%1H92!M87)S:&%L960@9&%T82!P
M<F]V:61E9"!T;R!T:&ES"G)O=71I;F4@:7,@96ET:&5R(&EN=F%L:60@;W(@
M8V]R<G5P=&5D+B`@270@:7,@<&]S<VEB;&4@=&AA="!T:&4@87!P;&EC871I
M;VX*:&%S(&EN861V97)T96YT;'D@;W9E<G=R:71T96X@=&AE('9A<FEA8FQE
M(&-O;G1A:6YI;F<@=&AE(&%D9')E<W,@;V8@=&AE"F1A=&$L(&]R('1H92!A
M<'!L:6-A=&EO;B!M87D@:&%V92!I;F%D=F5R=&5N=&QY(&]V97)W<FET=&5N
M('1H92!M96UO<GD@=7-E9`IT;R!S=&]R92!T:&4@9&%T82X@(%9E<FEF>2!T
M:&%T('1H92!A<'!L:6-A=&EO;B!I<R!P<F]V:61I;F<@=&AE(&-O<G)E8W0*
M861D<F5S<R!F;W(@=&AE(&UA<G-H86QE9"!I;G!U="!D871A('1O('1H:7,@
M<F]U=&EN92X@(%!E<F9O<FT@;65M;W)Y(&QE86L*86YD(&UE;6]R>2!U<V4@
M=F5R:69I8V%T:6]N('1E<W1S(&]N('1H92!A<'!L:6-A=&EO;B!T;R!E;G-U
M<F4@=&AA="!T:&4*87!P;&EC871I;VX@:7,@;F]T(&EN861V97)T96YT;'D@
M;6]D:69Y:6YG('1H:7,@;65M;W)Y+@H`````````````,C8U,2TQ,#0@;&EB
M8W1?8V%S($9A:6QU<F4Z(%1H92!M87)S:&%L960@9&%T82!P<F]V:61E9"!T
M;R!T:&ES"G)O=71I;F4@9&]E<R!N;W0@8V]N=&%I;B!A(')E<75I<F5D(&1A
M=&$@9FEE;&0N("!)="!I<R!P;W-S:6)L92!T:&%T('1H90IA<'!L:6-A=&EO
M;B!H87,@<')O=FED960@86X@:6YC;W)R96-T(&%D9')E<W,@9F]R('1H92!M
M87)S:&%L960@9&%T82P@;W(@:&%S"FEN861V97)T96YT;'D@;W9E<G=R:71T
M96X@=&AE('9A<FEA8FQE(&-O;G1A:6YI;F<@=&AE(&%D9')E<W,@;V8@=&AE
M"F1A=&$L(&]R('1H92!A<'!L:6-A=&EO;B!M87D@:&%V92!I;F%D=F5R=&5N
M=&QY(&]V97)W<FET=&5N('1H92!M96UO<GD@=7-E9`IT;R!S=&]R92!T:&4@
M9&%T82X@(%9E<FEF>2!T:&%T('1H92!A<'!L:6-A=&EO;B!I<R!P<F]V:61I
M;F<@=&AE(&-O<G)E8W0*861D<F5S<R!F;W(@=&AE(&UA<G-H86QE9"!I;G!U
M="!D871A('1O('1H:7,@<F]U=&EN92X@(%!E<F9O<FT@;65M;W)Y(&QE86L*
M86YD(&UE;6]R>2!U<V4@=F5R:69I8V%T:6]N('1E<W1S(&]N('1H92!A<'!L
M:6-A=&EO;B!T;R!E;G-U<F4@=&AA="!T:&4*87!P;&EC871I;VX@:7,@;F]T
M(&EN861V97)T96YT;'D@;6]D:69Y:6YG('1H:7,@;65M;W)Y+@H``````#(V
M-3$M,3`U(&QI8F-T7V-A<R!);G1E<FYA;"!F86EL=7)E(&1E=&5C=&5D+@H)
M1G5N8W1I;VX@;F%M93H@)3$D<PH)4F5T=7)N(&-O9&4@9G)O;2!F=6YC=&EO
M;CH@)3(D9`H)4F]U=&EN92!C86QL:6YG('1H92!F=6YC=&EO;CH@)3,D<PI#
M;VYT86-T($E"32!#=7-T;VUE<B!3=7!P;W)T(&%N9"!R97!O<G0@=&AI<R!I
M;F-I9&5N="X*`#(V-3$M,3`V(&QI8F-T7V-A<R!&86EL=7)E.B!4:&4@<V5C
M=7)I='D@;&EB<F%R>2!I<R!U;F%B;&4@=&\*:6YI=&EA;&EZ92!T:&4@9&%T
M82!S=')U8W1U<F5S(&YE8V5S<V%R>2!T;R!C;VYV97)T(&)E='=E96X@=&AE
M(&-O9&5S970@=7-E9`IB>2!T:&ES(&%P<&QI8V%T:6]N(&%N9"!T:&4@551&
M+3@@9&%T82!E;F-O9&EN9R!F;W)M870N("!4:&ES(&9A:6QU<F4@:&%S"F]C
M8W5R<F5D(&)E8V%U<V4@<F5S;W5R8V5S(&YE961E9"!B>2!T:&4@8VQU<W1E
M<B!U=&EL:71I97,@87)E(&YO="!A=F%I;&%B;&4*870@=&AI<R!T:6UE+B`@
M5')Y('1O(')U;B!T:&ES(&%P<&QI8V%T:6]N(&%G86EN(&%T(&$@;&%T97(@
M=&EM92X*`````````````````````````````````````#(V-3$M,3`W(&QI
M8F-T7V-A<R!&86EL=7)E.B!4:&4@<V5C=7)I='D@;&EB<F%R>2!I<R!U;F%B
M;&4@=&\*=')A;G-L871E(&$@8VAA<F%C=&5R('-T<FEN9R!B971W965N('1H
M92!A<'!L:6-A=&EO;B!C;V1E<V5T(&%N9`IT:&4@551&+3@@9&%T82!E;F-O
M9&EN9R!F;W)M870N("!4:&4@8VAA<F%C=&5R('-T<FEN9R!C;VYT86EN<R!B
M>71E<R!T:&%T(&%R90II;G9A;&ED(&EN('1H92!A<'!L:6-A=&EO;B!C;V1E
M<V5T+B`@5&AI<R!F86EL=7)E(&-A;B!O8V-U<B!W:&5N"F-O9&5S971S('1H
M870@9&\@;F]T(&9U;&QY('-U<'!O<G0@551&+3@@8V]N=F5R<VEO;B!A<F4@
M=7-E9"!B>2!T:&4@97AE8W5T:6]N"F5N=FER;VYM96YT+B`@5&AI<R!F86EL
M=7)E(&-A;B!A;'-O(&]C8W5R(&EF('1H92!C:&%R86-T97(@<W1R:6YG(&UE
M;6]R>2!I<PIO=F5R=W)I='1E;BX@(%9E<FEF>2!T:&%T('1H92!A<'!L:6-A
M=&EO;B!U<V5S(&$@;&]C86QE('=I=&@@82!C;V1E<V5T('1H870*9&]E<R!S
M=7!P;W)T(%541BTX(&-O;G9E<G-I;VXL(&]R(&-O;G1A8W0@=&AE('-Y<W1E
M;2!A9&UI;FES=')A=&]R('1O(&AA=F4*=&AE(&1E9F%U;'0@97AE8W5T:6]N
M(&5N=FER;VYM96YT('-E="!T;R!U<V4@<W5C:"!A(&QO8V%L92X@($%L<V\@
M=F5R:69Y('1H870*=&AE(&%P<&QI8V%T:6]N(&ES(&YO="!A8V-I9&5N=&%L
M;'D@;W9E<G=R:71I;F<@=&AE(&-H87)A8W1E<B!S=')I;F<@9&%T82X*````
M```````R-C4Q+3$P."!L:6)C=%]C87,@1F%I;'5R93H@5&AE(&UA<G-H86QE
M9"!D871A('!R;W9I9&5D('1O('1H:7,*<F]U=&EN92!I<R!E:71H97(@:6YV
M86QI9"!O<B!C;W)R=7!T960N("!4:&4@;6%R<VAA;&5D(&1A=&$@:6YT97)P
M<F5T871I;VX*9G5N8W1I;VYS(&]F('1H92!S96-U<FET>2!L:6)R87)Y(&1E
M=&5C=&5D(&UO<F4@<W5B<W1I='5T:6]N86P@87)G=6UE;G1S('1H86X*:6YD
M:6-A=&5D(&EN('1H92!M87)S:&%L960@9&%T82=S(&%R9W5M96YT(&-O=6YT
M+B`@270@:7,@<&]S<VEB;&4@=&AA="!T:&4*87!P;&EC871I;VX@:&%S(&EN
M861V97)T96YT;'D@;W9E<G=R:71T96X@=&AE('9A<FEA8FQE(&-O;G1A:6YI
M;F<@=&AE(&%D9')E<W,*;V8@=&AE(&1A=&$L(&]R('1H92!A<'!L:6-A=&EO
M;B!M87D@:&%V92!I;F%D=F5R=&5N=&QY(&]V97)W<FET=&5N('1H92!M96UO
M<GD*=7-E9"!T;R!S=&]R92!T:&4@9&%T82X@(%9E<FEF>2!T:&%T('1H92!A
M<'!L:6-A=&EO;B!I<R!P<F]V:61I;F<@=&AE(&-O<G)E8W0*861D<F5S<R!F
M;W(@=&AE(&UA<G-H86QE9"!I;G!U="!D871A('1O('1H:7,@<F]U=&EN92X@
M(%!E<F9O<FT@;65M;W)Y(&QE86L*86YD(&UE;6]R>2!U<V4@=F5R:69I8V%T
M:6]N('1E<W1S(&]N('1H92!A<'!L:6-A=&EO;B!T;R!E;G-U<F4@=&AA="!T
M:&4*87!P;&EC871I;VX@:7,@;F]T(&EN861V97)T96YT;'D@;6]D:69Y:6YG
M('1H:7,@;65M;W)Y+@H`````````,C8U,2TQ,#D@;&EB8W1?8V%S($9A:6QU
M<F4Z(%1H92!M87)S:&%L960@9&%T82!P<F]V:61E9"!T;R!T:&ES"G)O=71I
M;F4@:7,@96ET:&5R(&EN=F%L:60@;W(@8V]R<G5P=&5D+B`@5&AE(&UA<G-H
M86QE9"!D871A(&EN=&5R<')E=&%T:6]N"F9U;F-T:6]N<R!O9B!T:&4@<V5C
M=7)I='D@;&EB<F%R>2!D971E8W1E9"!A(')E<&5A=&5D(&1A=&$@9FEE;&0@
M=VET:&EN('1H90IM87)S:&%L960@9&%T82X@($ET(&ES('!O<W-I8FQE('1H
M870@=&AE(&%P<&QI8V%T:6]N(&AA<R!I;F%D=F5R=&5N=&QY"F]V97)W<FET
M=&5N('1H92!V87)I86)L92!C;VYT86EN:6YG('1H92!A9&1R97-S(&]F('1H
M92!D871A+"!O<B!T:&4*87!P;&EC871I;VX@;6%Y(&AA=F4@:6YA9'9E<G1E
M;G1L>2!O=F5R=W)I='1E;B!T:&4@;65M;W)Y('5S960@=&\@<W1O<F4@=&AE
M"F1A=&$N("!697)I9GD@=&AA="!T:&4@87!P;&EC871I;VX@:7,@<')O=FED
M:6YG('1H92!C;W)R96-T(&%D9')E<W,@9F]R('1H90IM87)S:&%L960@:6YP
M=70@9&%T82!T;R!T:&ES(')O=71I;F4N("!097)F;W)M(&UE;6]R>2!L96%K
M(&%N9"!M96UO<GD@=7-E"G9E<FEF:6-A=&EO;B!T97-T<R!O;B!T:&4@87!P
M;&EC871I;VX@=&\@96YS=7)E('1H870@=&AE(&%P<&QI8V%T:6]N(&ES(&YO
M=`II;F%D=F5R=&5N=&QY(&UO9&EF>6EN9R!T:&ES(&UE;6]R>2X*````````
M```````R-C4Q+3$Q,"!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M
M;VX@=V%S('5N86)L92!T;R!L;V-A=&4@;W(*86-C97-S('1H92!K97D@9FEL
M97,@=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX@
M(%=I=&AO=70*=&AE<V4@9FEL97,L('1H92!D865M;VX@=VEL;"!B92!U;F%B
M;&4@=&\@875T:&5N=&EC871E('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@
M<WES=&5M<R!I;B!T:&4@8VQU<W1E<BX@(%1H92!D865M;VX@97AP96-T960@
M=&\@9FEN9"!T:&5S92!K97D*9FEL97,@:6X@=&AE(&9O;&QO=VEN9R!D:7)E
M8W1O<GDZ"@DE,21S"E1H92!K97D@9FEL97,@;6%Y(&)E(&UI<W-I;F<L('1H
M92!P97)M:7-S:6]N<R!O;B!T:&4@9FEL97,@;6%Y(&AA=F4*8F5E;B!M;V1I
M9FEE9"!T;R!F;W)B:60@86YY('!R;V-E<W,@9G)O;2!A8V-E<W-I;F<@=&AE
M(&9I;&5S+"!O<B!A(&-O;7!O;F5N=`IO9B!T:&4@9&ER96-T;W)Y(&YA;64@
M;6%Y(&AA=F4@8F5E;B!M;V1I9FEE9"!T;R!F;W)B:60@86-C97-S+B`@5F5R
M:69Y('1H870*=&AE('!U8FQI8R!A;F0@<')I=F%T92!K97D@9FEL97,@97AI
M<W0L(&%N9"!T:&%T('1H92!P97)M:7-S:6]N<R!O;B!T:&4@9FEL97,*86YD
M('1H92!D:7)E8W1O<GD@87)E('-E="!T;R!P97)M:70@<')O8V5S<V5S(')U
M;FYI;F<@=VET:"!R;V]T('!E<FUI<W-I;VX*=&\@86-C97-S('1H92!D:7)E
M8W1O<GD@86YD('1H92!F:6QE<RX@($EF('1H:7,@8V]N9&ET:6]N('!E<G-I
M<W1S+"!C;VYT86-T"G1H92!C;'5S=&5R('-O9G1W87)E('-E<G9I8V4@<')O
M=FED97(@86YD(')E<&]R="!T:&ES(&EN8VED96YT+@H`````````````````
M```````````````````R-C4Q+3$Q,2!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z
M(%1H92!S=&%T('-Y<W1E;2!C86QL(')E<&]R=&5D(&$*9F%I;'5R92!I;B!O
M8G1A:6YI;F<@:V5R;F5L(&UE;6]R>2!R97-O=7)C97,N("!4:&ES(&UA>2!I
M;F1I8V%T92!T:&%T('1H90IO<&5R871I;F<@<WES=&5M(&ES(&YO="!C;VYF
M:6=U<F5D('!R;W!E<FQY+"!O<B!T:&%T(&%D9&ET:6]N86P@<F5S;W5R8V5S
M"FYE960@=&\@8F4@9&5D:6-A=&5D('1O('1H92!O<&5R871I;F<@<WES=&5M
M(&ME<FYE;"X@($-O;G-U;'0@=&AE('!R;V)L96T*9&5T97)M:6YA=&EO;B!D
M;V-U;65N=&%T:6]N(&%N9"!P<F]C961U<F5S(&9O<B!T:&4@;W!E<F%T:6YG
M('-Y<W1E;2!I;B!U<V4*;VX@=&AE('-Y<W1E;2!A;F0@<&5R9F]R;2!A;GD@
M8V]R<F5C=&EV92!A8W1I;VYS(')E8V]M;65N9&5D(&)Y('1H;W-E"G-O=7)C
M97,N"@``````````,C8U,2TQ,3(@8W1C87-D($1A96UO;B!&86EL=7)E.B!4
M:&4@9&%E;6]N('=A<R!U;F%B;&4@=&\@8W)E871E(&%N"FEN:71I86P@<')I
M=F%T92!K97D@9FEL92!T;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE
M;G1I8V%T:6]N+@I7:71H;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL
M(&)E('5N86)L92!T;R!A=71H96YT:6-A=&4@=&AE(&QO8V%L('-Y<W1E;0IT
M;R!O=&AE<B!S>7-T96US(&EN('1H92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A
M='1E;7!T960@=&\@8W)E871E('1H92!I;FET:6%L"G!R:79A=&4@:V5Y(&9I
M;&4@:6X@=&AE(&9O;&QO=VEN9R!D:7)E8W1O<GDZ"@DE,21S"D$@8V]M<&]N
M96YT(&1I<F5C=&]R>2!I;B!T:&4@86)O=F4@<&%T:"!N86UE(&UA>2!B92!M
M:7-S:6YG+"!O<B!T:&4@86-C97-S"G!E<FUI<W-I;VYS(&9O<B!O;F4@;V8@
M=&AE<V4@8V]M<&]N96YT<R!M87D@:&%V92!B965N(&UO9&EF:65D('1O(&9O
M<F)I9`IA8V-E<W,N("!697)I9GD@=&AA="!T:&4@9&ER96-T;W)Y(&QI<W1E
M9"!A8F]V92!E>&ES=',L(&%N9"!T:&%T('1H90IP97)M:7-S:6]N<R!O;B!T
M:&%T(&1I<F5C=&]R>2!P97)M:70@<')O8V5S<V5S(')U;FYI;F<@=VET:"!R
M;V]T(&%C8V5S<R!T;PIA8V-E<W,@=&AE(&1I<F5C=&]R>2!A;F0@8W)E871E
M(&9I;&5S('=I=&AI;B!T:&4@9&ER96-T;W)Y+B`@268@=&AI<R!C;VYD:71I
M;VX*<&5R<VES=',L(&-O;G1A8W0@=&AE(&-L=7-T97(@<V]F='=A<F4@<V5R
M=FEC92!P<F]V:61E<B!A;F0@<F5P;W)T('1H:7,*:6YC:61E;G0N"@``````
M```R-C4Q+3$Q,R!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M;VX@
M=V%S('5N86)L92!T;R!C<F5A=&4@86X*:6YI=&EA;"!P=6)L:6,@:V5Y(&9I
M;&4@=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*
M5VET:&]U="!T:&ES(&9I;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@
M=&\@875T:&5N=&EC871E('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@<WES
M=&5M<R!I;B!T:&4@8VQU<W1E<BX@(%1H92!D865M;VX@871T96UP=&5D('1O
M(&-R96%T92!T:&4@:6YI=&EA;`IP=6)L:6,@:V5Y(&9I;&4@:6X@=&AE(&9O
M;&QO=VEN9R!D:7)E8W1O<GDZ"@DE,21S"D$@8V]M<&]N96YT(&1I<F5C=&]R
M>2!I;B!T:&4@86)O=F4@<&%T:"!N86UE(&UA>2!B92!M:7-S:6YG+"!O<B!T
M:&4@86-C97-S"G!E<FUI<W-I;VYS(&9O<B!O;F4@;V8@=&AE<V4@8V]M<&]N
M96YT<R!M87D@:&%V92!B965N(&UO9&EF:65D('1O(&9O<F)I9`IA8V-E<W,N
M("!697)I9GD@=&AA="!T:&4@9&ER96-T;W)Y(&QI<W1E9"!A8F]V92!E>&ES
M=',L(&%N9"!T:&%T('1H90IP97)M:7-S:6]N<R!O;B!T:&%T(&1I<F5C=&]R
M>2!P97)M:70@<')O8V5S<V5S(')U;FYI;F<@=VET:"!R;V]T(&%C8V5S<R!T
M;PIA8V-E<W,@=&AE(&1I<F5C=&]R>2!A;F0@8W)E871E(&9I;&5S('=I=&AI
M;B!T:&4@9&ER96-T;W)Y+B`@268@=&AI<R!C;VYD:71I;VX*<&5R<VES=',L
M(&-O;G1A8W0@=&AE(&-L=7-T97(@<V]F='=A<F4@<V5R=FEC92!P<F]V:61E
M<B!A;F0@<F5P;W)T('1H:7,*:6YC:61E;G0N"@```````````#(V-3$M,3$T
M(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA8FQE
M('1O(&-R96%T92!A;@II;FET:6%L('!R:79A=&4@:V5Y(&9I;&4@=&\@8F4@
M=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*5VET:&]U="!T
M:&ES(&9I;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@=&\@875T:&5N
M=&EC871E('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@<WES=&5M<R!I;B!T
M:&4@8VQU<W1E<BX@(%1H92!D865M;VX@871T96UP=&5D('1O(&-R96%T92!T
M:&4@:6YI=&EA;`IP<FEV871E(&ME>2!F:6QE(&EN('1H92!F;VQL;W=I;F<@
M9&ER96-T;W)Y.@H))3$D<PI4:&4@9FEL92!S>7-T96T@8V]N=&%I;FEN9R!T
M:&ES(&1I<F5C=&]R>2!D;V5S(&YO="!H879E('-U9F9I8VEE;G0@<W!A8V4@
M=&\*8W)E871E('1H92!I;FET:6%L('!R:79A=&4@:V5Y(&9I;&4N("!#;VYT
M86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0*<F5P;W)T('1H:7,@
M<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@97AA;6EN
M92!T:&4@9FEL92!S>7-T96T*8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R>2!F
M;W(@;V)S;VQE=&4@9FEL97,@=&AA="!C86X@8F4@<F5M;W9E9"!O<B!T<FEM
M;65D+@I4:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@8V%N(&%L<V\@8V]R<F5C
M="!T:&ES('!R;V)L96T@8GD@97AT96YD:6YG('1H92!S:7IE"F]F('1H92!F
M:6QE('-Y<W1E;2!C;VYT86EN:6YG('1H:7,@9&ER96-T;W)Y+@H``#(V-3$M
M,3$U(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA
M8FQE('1O(&-R96%T92!A;@II;FET:6%L('!U8FQI8R!K97D@9FEL92!T;R!B
M92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H;W5T
M('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A=71H
M96YT:6-A=&4@=&AE(&QO8V%L('-Y<W1E;0IT;R!O=&AE<B!S>7-T96US(&EN
M('1H92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E871E
M('1H92!I;FET:6%L"G!U8FQI8R!K97D@9FEL92!I;B!T:&4@9F]L;&]W:6YG
M(&1I<F5C=&]R>3H*"24Q)',*5&AE(&9I;&4@<WES=&5M(&-O;G1A:6YI;F<@
M=&AI<R!D:7)E8W1O<GD@9&]E<R!N;W0@:&%V92!S=69F:6-I96YT('-P86-E
M('1O"F-R96%T92!T:&4@:6YI=&EA;"!P=6)L:6,@:V5Y(&9I;&4N("!#;VYT
M86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0*<F5P;W)T('1H:7,@
M<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@97AA;6EN
M92!T:&4@9FEL92!S>7-T96T*8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R>2!F
M;W(@;V)S;VQE=&4@9FEL97,@=&AA="!C86X@8F4@<F5M;W9E9"!O<B!T<FEM
M;65D+@I4:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@8V%N(&%L<V\@8V]R<F5C
M="!T:&ES('!R;V)L96T@8GD@97AT96YD:6YG('1H92!S:7IE"F]F('1H92!F
M:6QE('-Y<W1E;2!C;VYT86EN:6YG('1H:7,@9&ER96-T;W)Y+@H``````#(V
M-3$M,3$V(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@
M=6YA8FQE('1O(&-R96%T92!A;@II;FET:6%L('!R:79A=&4@:V5Y(&9I;&4@
M=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*5VET
M:&]U="!T:&ES(&9I;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@=&\@
M875T:&5N=&EC871E('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@<WES=&5M
M<R!I;B!T:&4@8VQU<W1E<BX@(%1H92!D865M;VX@871T96UP=&5D('1O(&-R
M96%T92!T:&4@:6YI=&EA;`IP<FEV871E(&ME>2!F:6QE(&EN('1H92!F;VQL
M;W=I;F<@9&ER96-T;W)Y.@H))3$D<PI4:&ES(&1I<F5C=&]R>2!M87D@<F5S
M:61E(&EN(&$@<F5A9"UO;FQY(&9I;&4@<WES=&5M+"!O;F4@;V8@=&AE(&-O
M;7!O;F5N=`ID:7)E8W1O<FEE<R!I;B!T:&ES('!A=&@@;F%M92!M87D@8F4@
M;6ES<VEN9RP@=&AE(&1I<F5C=&]R>2!N86UE(&UA>2!C;VYT86EN"FUO<F4@
M<WEM8F]L:6,@;&EN:W,@=&AA;B!T:&4@;W!E<F%T:6YG('-Y<W1E;2!C86X@
M<W5P<&]R="P@;W(@=&AE('!A=&@@;F%M90IM87D@;F]T(')E9F5R96YC92!A
M(&1I<F5C=&]R>2X@($-O;G1A8W0@=&AE('-Y<W1E;2!A9&UI;FES=')A=&]R
M(&%N9"!R97!O<G0*=&AI<R!P<F]B;&5M+B`@4WES=&5M(&%D;6EN:7-T<F%T
M;W)S('-H;W5L9"!V97)I9GD@=&AA="!T:&4@86)O=F4@9&ER96-T;W)Y"FYA
M;64@:7,@<W!E8VEF:65D(&%N9"!C;VYS=')U8W1E9"!P<F]P97)L>2X@($EF
M('1H:7,@8V]N9&ET:6]N('!E<G-I<W1S+`IC;VYT86-T('1H92!C;'5S=&5R
M('-O9G1W87)E('-E<G9I8V4@<')O=FED97(@86YD(')E<&]R="!T:&ES(&EN
M8VED96YT+@H`````````````````````````````````````````,C8U,2TQ
M,3<@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B
M;&4@=&\@8W)E871E(&%N"FEN:71I86P@<'5B;&EC(&ME>2!F:6QE('1O(&)E
M('5S960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN"E=I=&AO=70@
M=&AI<R!F:6QE+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA8FQE('1O(&%U=&AE
M;G1I8V%T92!T:&4@;&]C86P@<WES=&5M"G1O(&]T:&5R('-Y<W1E;7,@:6X@
M=&AE(&-L=7-T97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@
M=&AE(&EN:71I86P*<'5B;&EC(&ME>2!F:6QE(&EN('1H92!F;VQL;W=I;F<@
M9&ER96-T;W)Y.@H))3$D<PI4:&ES(&1I<F5C=&]R>2!M87D@<F5S:61E(&EN
M(&$@<F5A9"UO;FQY(&9I;&4@<WES=&5M+"!O;F4@;V8@=&AE(&-O;7!O;F5N
M=`ID:7)E8W1O<FEE<R!I;B!T:&ES('!A=&@@;F%M92!M87D@8F4@;6ES<VEN
M9RP@=&AE(&1I<F5C=&]R>2!N86UE(&UA>2!C;VYT86EN"FUO<F4@<WEM8F]L
M:6,@;&EN:W,@=&AA;B!T:&4@;W!E<F%T:6YG('-Y<W1E;2!C86X@<W5P<&]R
M="P@;W(@=&AE('!A=&@@;F%M90IM87D@;F]T(')E9F5R96YC92!A(&1I<F5C
M=&]R>2X@($-O;G1A8W0@=&AE('-Y<W1E;2!A9&UI;FES=')A=&]R(&%N9"!R
M97!O<G0*=&AI<R!P<F]B;&5M+B`@4WES=&5M(&%D;6EN:7-T<F%T;W)S('-H
M;W5L9"!V97)I9GD@=&AA="!T:&4@86)O=F4@9&ER96-T;W)Y"FYA;64@:7,@
M<W!E8VEF:65D(&%N9"!C;VYS=')U8W1E9"!P<F]P97)L>2X@($EF('1H:7,@
M8V]N9&ET:6]N('!E<G-I<W1S+`IC;VYT86-T('1H92!C;'5S=&5R('-O9G1W
M87)E('-E<G9I8V4@<')O=FED97(@86YD(')E<&]R="!T:&ES(&EN8VED96YT
M+@H`,C8U,2TQ,3@@8W1C87-D($1A96UO;B!);G1E<FYA;"!F86EL=7)E(&1E
M=&5C=&5D+@H)1G5N8W1I;VX@;F%M93H@)3$D<PH)4F5T=7)N(&-O9&4@9G)O
M;2!F=6YC=&EO;CH@)3(D9`H)4F]U=&EN92!C86QL:6YG('1H92!F=6YC=&EO
M;CH@)3,D<PI#;VYT86-T('1H92!C;'5S=&5R('-O9G1W87)E('-E<G9I8V4@
M<')O=FED97(@86YD(')E<&]R="!T:&ES(&EN8VED96YT+@H`````````````
M```R-C4Q+3$Q.2!C=&-A<V0@1&%E;6]N($EN=&5R;F%L($9A:6QU<F4Z(&EN
M8V]R<F5C="!P87)A;65T97)S('=E<F4*<')O=FED960@=&\@82!D865M;VX@
M<W5B<F]U=&EN92X*"49U;F-T:6]N(&YA;64Z("4Q)',*"5!O<VET:6]N86P@
M<&%R86UE=&5R(&YU;6)E<CH@)3(D9`H)4&%R86UE=&5R('9A;'5E.B`P>"4S
M)'@*0V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R;W9I
M9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*````,C8U,2TQ,C`@8W1C
M87-D($1A96UO;B!&86EL=7)E.B!T:&4@9&%E;6]N(&1E=&5C=&5D('1H870@
M86X*=6YS=7!P;W)T960@:V5Y(&=E;F5R871I;VX@;65T:&]D('=A<R!C;VYF
M:6=U<F5D+B`@5&AE(&9O;&QO=VEN9R!U;G-U<'!O<G1E9`IK97D@9V5N97)A
M=&EO;B!M971H;V0@=V%S(&-O;F9I9W5R960Z"@DP>"4Q)'@*4F5P86ER('1H
M92!C=&-A<V0@9&%E;6]N(&-O;F9I9W5R871I;VX@:6YF;W)M871I;VX@=&\@
M<W!E8VEF>2!A('-U<'!O<G1E9`IK97D@9V5N97)A=&EO;B!M971H;V0N"@``
M````````,C8U,2TQ,C$@8W1C87-D($1A96UO;B!&86EL=7)E.B!T:&4@9&%E
M;6]N(&1E=&5C=&5D(&$@<')I=F%T92!K97D*9FEL92!O;B!T:&4@;&]C86P@
M<WES=&5M+"!B=70@=V%S('5N86)L92!T;R!L;V-A=&4@=&AE(&%S<V]C:6%T
M960@<'5B;&EC(&ME>0IF:6QE(&]N('1H92!L;V-A;"!S>7-T96TN("!4:&4@
M9&%E;6]N(&AA<R!C;VYC;'5D960@=&AA="!T:&4@<')I=F%T92!A;F0*<'5B
M;&EC(&ME>2!C;VYF:6=U<F%T:6]N(&]F('1H92!L;V-A;"!S>7-T96T@:&%S
M(&)E96X@8V]R<G5P=&5D+B`@5&AE(&1A96UO;@IE>'!E8W1E9"!T;R!F:6YD
M('!U8FQI8R!K97D@9FEL92!I;B!T:&4@9F]L;&]W:6YG(&QO8V%T:6]N.@H)
M)3$D<PI);F9O<FT@=&AE('-Y<W1E;2!A9&UI;FES=')A=&]R(&]F('1H:7,@
M9F%I;'5R92X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<PIS:&]U;&0@<F5C<F5A
M=&4@=&AE('!U8FQI8R!A;F0@<')I=F%T92!K97D@9FEL97,@;VX@=&AE('-Y
M<W1E;2X@($EF(&-L=7-T97(*<V5C=7)I='D@8F%S960@:V5Y<R!A<F4@:6X@
M=7-E+"!T:&5S92!K97ES(&-A;B!B92!R96-R96%T960@=7-I;F<@=&AE"B=C
M='-K97EG96XG(&-O;6UA;F0N("!)9B!S96-U<F5D(')E;6]T92!S:&5L;"!K
M97ES(&%R92!I;B!U<V4L(&-O;G-U;'0@=&AE"F1O8W5M96YT871I;VX@86YD
M('!R;V-E9'5R97,@9F]R(&-O;F9I9W5R:6YG('-E8W5R960@<F5M;W1E('-H
M96QL('!U8FQI8R!A;F0*<')I=F%T92!K97ES+B`@4WES=&5M(&%D;6EN:7-T
M<F%T;W)S('-H;W5L9"!A;'-O(&-O;G-I9&5R(&UO;FET;W)I;F<@=&AE"G-T
M871U<R!O9B!T:&4@<'5B;&EC(&%N9"!P<FEV871E(&ME>2!F:6QE<RP@:6X@
M8V%S92!A;B!A<'!L:6-A=&EO;B!I<PIA8V-I9&5N=&%L;'D@;W(@:6YT96YT
M:6]N86QL>2!R96UO=FEN9R!T:&5S92!F:6QE<RX*`````#(V-3$M,3(R(&-T
M8V%S9"!$865M;VX@1F%I;'5R93H@=&AE(&1A96UO;B!D971E8W1E9"!A('!U
M8FQI8R!K97D*9FEL92!O;B!T:&4@;&]C86P@<WES=&5M+"!B=70@=V%S('5N
M86)L92!T;R!L;V-A=&4@=&AE(&%S<V]C:6%T960@<')I=F%T92!K97D*9FEL
M92!O;B!T:&4@;&]C86P@<WES=&5M+B`@5&AE(&1A96UO;B!H87,@8V]N8VQU
M9&5D('1H870@=&AE('!R:79A=&4@86YD"G!U8FQI8R!K97D@8V]N9FEG=7)A
M=&EO;B!O9B!T:&4@;&]C86P@<WES=&5M(&AA<R!B965N(&-O<G)U<'1E9"X@
M(%1H92!D865M;VX*97AP96-T960@=&\@9FEN9"!B;W1H('1H92!P=6)L:6,@
M86YD('1H92!P<FEV871E(&ME>2!F:6QE<R!I;B!T:&4@9F]L;&]W:6YG"F1I
M<F5C=&]R>3H*"24Q)',*26YF;W)M('1H92!S>7-T96T@861M:6YI<W1R871O
M<B!O9B!T:&ES(&9A:6QU<F4N("!3>7-T96T@861M:6YI<W1R871O<G,*<VAO
M=6QD(')E8W)E871E('1H92!P=6)L:6,@86YD('!R:79A=&4@:V5Y(&9I;&5S
M(&]N('1H92!S>7-T96TN("!)9B!C;'5S=&5R"G-E8W5R:71Y(&)A<V5D(&ME
M>7,@87)E(&EN('5S92P@=&AE<V4@:V5Y<R!C86X@8F4@<F5C<F5A=&5D('5S
M:6YG('1H90HG8W1S:V5Y9V5N)R!C;VUM86YD+B`@268@<V5C=7)E9"!R96UO
M=&4@<VAE;&P@:V5Y<R!A<F4@:6X@=7-E+"!C;VYS=6QT('1H90ID;V-U;65N
M=&%T:6]N(&%N9"!P<F]C961U<F5S(&9O<B!C;VYF:6=U<FEN9R!S96-U<F5D
M(')E;6]T92!S:&5L;"!P=6)L:6,@86YD"G!R:79A=&4@:V5Y<RX@(%-Y<W1E
M;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@86QS;R!C;VYS:61E<B!M;VYI=&]R
M:6YG('1H90IS=&%T=7,@;V8@=&AE('!U8FQI8R!A;F0@<')I=F%T92!K97D@
M9FEL97,L(&EN(&-A<V4@86X@87!P;&EC871I;VX@:7,*86-C:61E;G1A;&QY
M(&]R(&EN=&5N=&EO;F%L;'D@<F5M;W9I;F<@=&AE<V4@9FEL97,N"@``````
M`````#(V-3$M,3(S(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO
M;B!W87,@=6YA8FQE('1O(&QO8V%T92!O<@IA8V-E<W,@=&AE('1R=7-T960@
M:&]S="!L:7-T(&9I;&4@=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H
M96YT:6-A=&EO;BX*5VET:&]U="!T:&ES(&QI<W0L('1H92!D865M;VX@=VEL
M;"!B92!U;F%B;&4@=&\@875T:&5N=&EC871E('-Y<W1E;7,@=VET:&EN"G1H
M92!C;'5S=&5R+B`@5&AE(&1A96UO;B!E>'!E8W1E9"!T;R!F:6YD('1H:7,@
M9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I<F5C=&]R>3H*"24Q)',*5&AE('1R
M=7-T960@:&]S="!L:7-T(&9I;&4@;6%Y(&)E(&UI<W-I;F<L('1H92!P97)M
M:7-S:6]N<R!O;B!T:&4@9FEL92!M87D*:&%V92!B965N(&UO9&EF:65D('1O
M(&9O<F)I9"!A;GD@<')O8V5S<R!F<F]M(&%C8V5S<VEN9R!T:&4@9FEL92P@
M;W(@80IC;VUP;VYE;G0@;V8@=&AE(&1I<F5C=&]R>2!N86UE(&UA>2!H879E
M(&)E96X@;6]D:69I960@=&\@9F]R8FED(&%C8V5S<RX*5F5R:69Y('1H870@
M=&AE('1R=7-T960@:&]S="!L:7-T(&9I;&4@97AI<W1S+"!A;F0@=&AA="!T
M:&4@<&5R;6ES<VEO;G,@;VX*=&AE(&9I;&4@86YD('1H92!D:7)E8W1O<GD@
M87)E('-E="!T;R!P97)M:70@<')O8V5S<V5S(')U;FYI;F<@=VET:"!R;V]T
M"G!E<FUI<W-I;VX@=&\@86-C97-S(&%N9"!M;V1I9GD@=&AE(&1I<F5C=&]R
M>2!A;F0@=&AE(&9I;&4N("!)9B!T:&ES"F-O;F1I=&EO;B!P97)S:7-T<RP@
M8V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R;W9I9&5R
M(&%N9"!R97!O<G0*=&AI<R!I;F-I9&5N="X*````````````````````````
M`````````````````#(V-3$M,3(T(&-T8V%S9"!$865M;VX@1F%I;'5R93H@
M5&AE(&1A96UO;B!W87,@=6YA8FQE('1O(&-R96%T92!A;@II;FET:6%L('1R
M=7-T960@:&]S="!L:7-T(&9I;&4@=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E
M9"!A=71H96YT:6-A=&EO;BX*5VET:&]U="!T:&ES(&9I;&4L('1H92!D865M
M;VX@=VEL;"!B92!U;F%B;&4@=&\@875T:&5N=&EC871E('-Y<W1E;7,@=VET
M:&EN"G1H92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E
M871E('1H92!I;FET:6%L('1R=7-T960@:&]S="!L:7-T"F9I;&4@:6X@=&AE
M(&9O;&QO=VEN9R!D:7)E8W1O<GDZ"@DE,21S"D$@8V]M<&]N96YT(&1I<F5C
M=&]R>2!I;B!T:&4@86)O=F4@<&%T:"!N86UE(&UA>2!B92!M:7-S:6YG+"!O
M<B!T:&4@86-C97-S"G!E<FUI<W-I;VYS(&9O<B!O;F4@;V8@=&AE<V4@8V]M
M<&]N96YT<R!M87D@:&%V92!B965N(&UO9&EF:65D('1O(&9O<F)I9`IA8V-E
M<W,N("!697)I9GD@=&AA="!T:&4@9&ER96-T;W)Y(&QI<W1E9"!A8F]V92!E
M>&ES=',L(&%N9"!T:&%T('1H90IP97)M:7-S:6]N<R!O;B!T:&%T(&1I<F5C
M=&]R>2!P97)M:70@<')O8V5S<V5S(')U;FYI;F<@=VET:"!R;V]T(&%C8V5S
M<R!T;PIA8V-E<W,@=&AE(&1I<F5C=&]R>2!A;F0@8W)E871E(&9I;&5S('=I
M=&AI;B!T:&4@9&ER96-T;W)Y+B`@268@=&AI<R!C;VYD:71I;VX*<&5R<VES
M=',L(&-O;G1A8W0@=&AE(&-L=7-T97(@<V]F='=A<F4@<V5R=FEC92!P<F]V
M:61E<B!A;F0@<F5P;W)T('1H:7,*:6YC:61E;G0N"@``````````````````
M````,C8U,2TQ,C4@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N
M('=A<R!U;F%B;&4@=&\@8W)E871E(&%N"FEN:71I86P@=')U<W1E9"!H;W-T
M(&QI<W0@9FEL92!T;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I
M8V%T:6]N+@I7:71H;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E
M('5N86)L92!T;R!A=71H96YT:6-A=&4@<WES=&5M<R!W:71H:6X*=&AE(&-L
M=7-T97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE(&EN
M:71I86P@=')U<W1E9"!H;W-T(&QI<W0*9FEL92!I;B!T:&4@9F]L;&]W:6YG
M(&1I<F5C=&]R>3H*"24Q)',*5&AE(&9I;&4@<WES=&5M(&-O;G1A:6YI;F<@
M=&AI<R!D:7)E8W1O<GD@9&]E<R!N;W0@:&%V92!S=69F:6-I96YT('-P86-E
M('1O"F-R96%T92!T:&4@:6YI=&EA;"!T<G5S=&5D(&AO<W0@;&ES="!F:6QE
M+B`@0V]N=&%C="!T:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(*86YD(')E<&]R
M="!T:&ES('!R;V)L96TN("!3>7-T96T@861M:6YI<W1R871O<G,@<VAO=6QD
M(&5X86UI;F4@=&AE(&9I;&4*<WES=&5M(&-O;G1A:6YI;F<@=&AI<R!D:7)E
M8W1O<GD@9F]R(&]B<V]L971E(&9I;&5S('1H870@8V%N(&)E(')E;6]V960@
M;W(*=')I;6UE9"X@(%1H92!S>7-T96T@861M:6YI<W1R871O<B!C86X@86QS
M;R!C;W)R96-T('1H:7,@<')O8FQE;2!B>2!E>'1E;F1I;F<*:&4@<VEZ92!O
M9B!T:&4@9FEL92!S>7-T96T@8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R>2X*
M````````,C8U,2TQ,C8@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E
M;6]N('=A<R!U;F%B;&4@=&\@8W)E871E(&%N"FEN:71I86P@=')U<W1E9"!H
M;W-T(&QI<W0@9FEL92!T;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE
M;G1I8V%T:6]N+@I7:71H;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL
M(&)E('5N86)L92!T;R!A=71H96YT:6-A=&4@<WES=&5M<R!W:71H:6X*=&AE
M(&-L=7-T97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE
M(&EN:71I86P@=')U<W1E9"!H;W-T(&QI<W0*9FEL92!I;B!T:&4@9F]L;&]W
M:6YG(&1I<F5C=&]R>3H*"24Q)',*5&AI<R!D:7)E8W1O<GD@;6%Y(')E<VED
M92!I;B!A(')E860M;VYL>2!F:6QE('-Y<W1E;2P@;VYE(&]F('1H92!C;VUP
M;VYE;G0*9&ER96-T;W)I97,@:6X@=&AI<R!P871H(&YA;64@;6%Y(&)E(&UI
M<W-I;F<L('1H92!D:7)E8W1O<GD@;F%M92!M87D@8V]N=&%I;@IM;W)E('-Y
M;6)O;&EC(&QI;FMS('1H86X@=&AE(&]P97)A=&EN9R!S>7-T96T@8V%N('-U
M<'!O<G0L(&]R('1H92!P871H(&YA;64*;6%Y(&YO="!R969E<F5N8V4@82!D
M:7)E8W1O<GDN("!#;VYT86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A
M;F0@<F5P;W)T"G1H:7,@<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R
M<R!S:&]U;&0@=F5R:69Y('1H870@=&AE(&%B;W9E(&1I<F5C=&]R>0IN86UE
M(&ES('-P96-I9FEE9"!A;F0@8V]N<W1R=6-T960@<')O<&5R;'DN("!)9B!T
M:&ES(&-O;F1I=&EO;B!P97)S:7-T<RP*8V]N=&%C="!T:&4@8VQU<W1E<B!S
M;V9T=V%R92!S97)V:6-E('!R;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I
M9&5N="X*````````````,C8U,2TQ,C<@56YI>"!)9&5N=&ET>2!M:7,M;6%T
M8V@N"@```````````````````````````````````````#(V-3$M,3(X(%1H
M92!S>7-T96T@8V%L;"!T;R!R971R:65V92!T:&4@;&]C86P@:&]S=&YA;64@
M9F%I;&5D+@`R-C4Q+3$R.2!4:&4@8W)E9&5N=&EA;',@:&%V92!E>'!I<F5D
M+@``````````````````````````````````,C8U,2TQ,S`@5&AE(&-R961E
M;G1I86QS(&%R92!E:71H97(@:6YV86QI9"!O<B!C;W)R=7!T960N````````
M`#(V-3$M,3,Q(%1H92!P=6)L:6,@:V5Y(&EN("4Q)',@9&]E<R!N;W0@;6%T
M8V@@=&AE('!U8FQI8R!K97D@9F]R('1H92!H;W-T(&EN('1H92!4<G5S=&5D
M($AO<W0@3&ES="`E,B1S+@H`````````````````````````````,C8U,2TQ
M,S(@16YV:7)O;FUE;G0@5F%R:6%B;&4Z("4Q)',@=F%L=64@:7,@:6X@97)R
M;W(N`````````````#(V-3$M,3,S(&-T8V%S9"!&86EL=7)E.B!T:&4@8VEP
M:&5R(&-O;G1A:6YE9"!I;B!T:&4@0T-$0B!H87,@82!L96YG=&@@*"4Q)&0I
M"@ET:&%T(&ES(&YO="!M=6QT:7!L92!O9B!T:&4@4E-!(&UO9'5L=7,@9F]R
M('1H92!T>7!E(&]F(&ME>2!U<V5D(&9O<B!D96-R>7!T:6]N("@E,B1D*2X*
M"51H:7,@8V]N9&ET:6]N(&UA>2!H87!P96X@=VAE;B!T:&4@8VQI96YT(&%N
M9"!S97)V97(@:&]S=',@:&%V92!D:69F97)N="!T>7!E<R!O9B!H;W-T(&ME
M>7,N"@E0;&5A<V4@;6%K92!S=7)E('1H870@=&AE(&-L:65N="!A;F0@<V5R
M=F5R(&AO<W1S(&AA<R!T:&4@<V%M92!T>7!E(&]F(&AO<W0@2$)!(&ME>7,N
M"@`````R-C4Q+3`R-2!L:6)C=%]C87,@9F%I;'5R93H@=&AE(&-T8V%S(&-L
M:65N="!L:6)R87)Y(&ES('5N86)L92!T;R!E>&5C=71E"@ET:&4@+W5S<B]S
M8FEN+W)S8W0O8FEN+V-T<W1R=&-A<V0@8V]M;6%N9"X@(%1H92!F;VQL;W=I
M;F<@97)R;W(@=V%S(')E='5R;F5D(&)Y('1H90H)<WES=&5M*"D@9G5N8W1I
M;VX@8V%L;#H@97)R;F\@/2`E,21D+@H`````````````````````````````
M`````#(V-3$M,#(V(&QI8F-T7V-A<R!F86EL=7)E.B!T:&4@8W1C87,@8VQI
M96YT(&QI8G)A<GD@:7,@=6YA8FQE('1O('-T87)T"@ET:&4@8W1C87,@4U)#
M('-U8G-Y<W1E;2X@(%!L96%S92!M86ME('-U<F4@=&AA="!T:&4@<W5B<WES
M=&5M(&ES(')E9VES=&5R960@=VET:`H)4U)#(&%N9"!T:&%T("]U<W(O<V)I
M;B]R<V-T+V)I;B]C=&-A<V0@97AI<W1S(&]N('1H92!S>7-T96TN"@!34D,@
M<WES=&5M("4Q)',@:7,@86-T:79E+@H`4U)#('-Y<W1E;2`E,21S(&ES('-T
M87)T:6YG+@H``````````````````%-20R!S>7-T96T@)3$D<R!I<R!I;F%C
M=&EV92!O<B!I;F]P97)A=&EV92X*``````````````````````````!34D,@
M<WES=&5M("4Q)',@8V]U;&0@;F]T(&)E('-T87)T960@8GD@=&AE(%-20R!M
M87-T97(N"@E-86ME('-U<F4@=&AA="`O=7-R+W-B:6XO<G-C="]B:6XO8W1C
M87-D(&5X:7-T<R!A;F0@:7,@82!V86QI9`H)<')O9W)A;2!O<B!T:&%T('-Y
M<W1E;2!R97-O=7)C97,@87)E(&%V86EL86)L92!T;R!S=&%R="!T:&4@9&%E
M;6]N+@H```!34D,@<WES=&5M("4Q)',@=V%S('-T87)T960@<W5C8V5S<V9U
M;&QY("AP:60@/2`E,B1D*2X*````````````06X@97)R;W(@;V-C=7)R960@
M=VAE;B!A='1E;7!T:6YG('1O(&%C<75I<F4@<W1A='5S(&]F(%-20R!S>7-T
M96T@)3$D<RX*"4UA:V4@<W5R92!T:&%T('1H92!N86UE9"!34D,@<WES=&5M
M(&ES(&1E9FEN960@86YD(&AA<R!A('9A;&ED(&1E9FEN:71I;VXN"@``````
M`````````%-20R!S>7-T96T@)3$D<R!I<R!A;')E861Y(')U;FYI;F<@;VX@
M=&AE(&AO<W0N"@````````````````````!34D,@<WES=&5M("4Q)',@:7,@
M<F5A9'D@=&\@<F5C96EV92!R97%U97-T<RX*````````````````````````
M4U)#('-Y<W1E;2`E,21S('=A<R!S=&%R=&5D(&)U="!U;F%B;&4@=&\@<F5C
M96EV92!R97%U97-T<RX*`````#(V-3$M,3,T(&QI8F-T7V-A<R!3=&%T=7,Z
M(%1H92!H;W-T(&ED96YT:69I960@:6X@=&AE(&-R961E;G1I86QS"FES(&YO
M="!A('1R=7-T960@:&]S="!O;B!T:&ES('-Y<W1E;2X*````````````````
M````````````````,C8U,2TQ,S4@8W1C87-D($9A:6QU<F4Z(%5N86)L92!T
M;R!C;VYS=')U8W0@82!C<F5D96YT:6%L(&9O<B!T:&4*<F5Q=65S=&EN9R!C
M;&EE;G0N"@E&86EL:6YG(')O=71I;F4Z("`@("`@("`@("`@("`@("`@)3$D
M<PH)4F5T=7)N(&-O9&4@9G)O;2!F86EL:6YG(')O=71I;F4Z("4R)&0*5&AI
M<R!F86EL=7)E(&UA>2!O8V-U<B!W:&5N('1H92!C=&-A<V0@9&%E;6]N(&ES
M('5N86)L92!T;R!A;&QO8V%T92!M96UO<GDN"E9E<FEF>2!T:&%T('1H92!S
M>7-T96T@:&%S('-U9F9I8VEE;G0@=FER='5A;"!M96UO<GD@879A:6QA8FQE
M+B`@061M:6YI<W1R871O<G,*;6EG:'0@8V]N<VED97(@97AT96YD:6YG('1H
M92!V:7)T=6%L(&UE;6]R>2!S:7IE(&]F('1H92!S>7-T96T@;W(@=&5R;6EN
M871I;F<*87!P;&EC871I;VYS('5S:6YG(&5X8V5S<VEV92!V:7)T=6%L(&UE
M;6]R>2X@($EF('1H:7,@8V]N9&ET:6]N('!E<G-I<W1S(&]R"F]C8W5R<R!F
M<F5Q=65N=&QY+"!C;VYT86-T('1H92!C;'5S=&5R('-O9G1W87)E('-E8W5R
M:71Y('-E<G9I8V4@<')O=FED97(@86YD"G)E<&]R="!T:&ES(&-O;F1I=&EO
M;BX*```````````````````````````````````````````R-C4Q+3$S-B!L
M:6)C=%]C87,@1F%I;'5R93H@5&AE(&UA<G-H86QE9"!D871A('!R;W9I9&5D
M('1O('1H:7,*<F]U=&EN92!I<R!E:71H97(@:6YV86QI9"!O<B!C;W)R=7!T
M960N("!4:&4@;6]S="!P<F]B86)L92!C875S92!O9B!T:&ES('!R;V)L96T@
M"FES('1H870@=&AE('!U8FQI8R!K97D@;V8@=&AE('-O=7)C92!H;W-T(&EN
M('1H92!T87)G970G<R!H;W-T(%1(3"!F:6QE(&1O97,@;F]T(`IM871C:"!T
M:&4@<')I=F%T92!K97D@;V8@=&AE('-O=7)C92!H;W-T+B`@06YO=&AE<B!P
M;W-S:6)L92!C875S92!I<R!T:&%T('1H92`*87!P;&EC871I;VX@:&%S(&EN
M861V97)T96YT;'D@;W9E<G=R:71T96X@=&AE('9A<FEA8FQE(&-O;G1A:6YI
M;F<@=&AE(&%D9')E<W,@"F]F('1H92!D871A+"!O<B!T:&4@87!P;&EC871I
M;VX@;6%Y(&AA=F4@:6YA9'9E<G1E;G1L>2!O=F5R=W)I='1E;B!T:&4@;65M
M;W)Y(`IU<V5D('1O('-T;W)E('1H92!D871A+B`@5F5R:69Y('1H870@=&AE
M('!U8FQI8R!K97ES(&EN('1H92!42$P@9FEL97,@;6%T8V@@"G1H96ER(&-O
M<G)E<W!O;F1I;F<@<')I=F%T92!K97ES(&9R;VT@=&AE(&AO<W0@;&ES=&5D
M(&EN('1H92!42$P@<F5C;W)D<RX@"D%L<V\@=F5R:69Y('1H870@=&AE(&%P
M<&QI8V%T:6]N(&ES('!R;W9I9&EN9R!T:&4@8V]R<F5C="!A9&1R97-S(&9O
M<B!T:&4@"FUA<G-H86QE9"!I;G!U="!D871A('1O('1H:7,@<F]U=&EN92X@
M(%!E<F9O<FT@;65M;W)Y(&QE86L@86YD(&UE;6]R>2!U<V4@"G9E<FEF:6-A
M=&EO;B!T97-T<R!O;B!T:&4@87!P;&EC871I;VX@=&\@96YS=7)E('1H870@
M=&AE(&%P<&QI8V%T:6]N(&ES(&YO="`*:6YA9'9E<G1E;G1L>2!M;V1I9GEI
M;F<@=&AI<R!M96UO<GDN"@``````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````````````#0+!@@`````````````
M`````````````"!S!0@`````````````````````````````````````"B,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(`HC($QI8V5N<V5D($UA=&5R:6%L
M<R`M(%!R;W!E<G1Y(&]F($E"32`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@(R`*(R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(",@"B,@-3<V-2U&
M,#<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M(R`*(R`H0RD@0T]065))1TA4($EN=&5R;F%T:6]N86P@0G5S:6YE<W,@36%C
M:&EN97,@0V]R<"X@,3DY-BPR,#`Q("`@("`@(",@"B,@06QL(%)I9VAT<R!2
M97-E<G9E9"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R!5
M4R!';W9E<FYM96YT(%5S97)S(%)E<W1R:6-T960@4FEG:'1S("T@57-E+"!D
M=7!L:6-A=&EO;B!O<B`@("`@("`@(",@"B,@9&ES8VQO<W5R92!R97-T<FEC
M=&5D(&)Y($=302!!1%`@4V-H961U;&4@0V]N=')A8W0@=VET:"!)0DT@0V]R
M<"X@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,@"@H```````````````````````"`<P4(ZG,%
M"````````````````````````````````"]V87(O8W0O25<O<G5N+V-T8V%S
M+V-T<W1R=&-A<V0N=')A8V4`````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````%]314,Z26YF;STQ````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````!`&!U!0@``````````(!V!0C@>04(````````````````````
M````````````````````````````H'L%"```````````````````````````
M````````````````!WP%"````````````0````Y\!0@```````````(````2
M?`4(```````````#````%WP%"````````````(T%"```````````````````
M``````````````````!"860@;65S<V%G92!I9"!F;W(@;65S<V%G92!S970@
M8W1C87-?;7-G````````````````````````````````H(X%",".!0@`CP4(
M@(\%","/!0@`D`4(0)`%"("0!0C`D`4(()$%"&"1!0C`D04(`)(%"&"2!0B@
MD@4(X)(%"""3!0B`DP4(X),%"&"4!0B@E`4(`)4%"$"5!0B@E04(`)8%"&"6
M!0B@E@4(8)@%".";!0@@G@4(H*`%"&"A!0C@H@4(P*4%"*"H!0A@JP4(P*X%
M"("P!0B@LP4(P+8%","Y!0C`O`4(0,`%"*##!0B`Q`4(@,4%"*#&!0A`R@4(
M`,X%"&#1!0B`U`4(@-<%".#:!0@@VP4(8-L%"*#;!0C@VP4(8-P%"*#<!0@`
MW@4(X-X%"+G?!0C5WP4(`.`%"$#@!0@`X04(0.$%".#A!0@@X@4(8.(%"*#B
M!0@@XP4(@.4%"``````!`````0````$```!E`````0```,8````!````Y@``
M``$```"B`0```0```#P"```!````2P(```$```!5`@``#````/"2!`@-````
MR'(%"`0````H@00(!0```*R*!`@&````+(4$"`H```",!```"P```!`````5
M``````````,````\"P8(`@```.`!```4````$0```!<````0D00($0```)B0
M!`@2````>````!,````(````_O__;^B/!`C___]O!0```/#__V\XCP0(````
M````````````````````````````````````````````````````````````
M_____P````#_____```````````H"@8(```````````>DP0(+I,$"#Z3!`A.
MDP0(7I,$"&Z3!`A^DP0(CI,$")Z3!`BNDP0(OI,$",Z3!`C>DP0([I,$"/Z3
M!`@.E`0('I0$""Z4!`@^E`0(3I0$"%Z4!`ANE`0(?I0$"(Z4!`B>E`0(KI0$
M"+Z4!`C.E`0(WI0$".Z4!`C^E`0(#I4$"!Z5!`@NE00(/I4$"$Z5!`A>E00(
M;I4$"'Z5!`B.E00(GI4$"*Z5!`B^E00(SI4$"-Z5!`CNE00(_I4$"`Z6!`@>
ME@0(+I8$"#Z6!`A.E@0(7I8$"&Z6!`A^E@0(CI8$")Z6!`BNE@0(OI8$",Z6
M!`@`````````````````````````````````````````````````````````
M````````1T-#.B`H1TY5*2`S+C(N,@``1T-#.B`H1TY5*2`S+C(N,@``1T-#
M.B`H1TY5*2`S+C(``$=#0SH@*$=.52D@,RXR``!'0T,Z("A'3E4I(#,N,@``
M1T-#.B`H1TY5*2`S+C(``$=#0SH@*$=.52D@,RXR``!'0T,Z("A'3E4I(#,N
M,@``1T-#.B`H1TY5*2`S+C(``$=#0SH@*$=.52D@,RXR``!'0T,Z("A'3E4I
M(#,N,@``1T-#.B`H1TY5*2`S+C(``$=#0SH@*$=.52D@,RXR+C(````L````
M`@#7"P``!```````R'(%"!0```#PD@0(#````/R6!`@C```````````````D
M`````@`I#```!```````WG(%"`4````%DP0(`@``````````````(0````(`
M`````-<+``"_"P``7TE/7W-T9&EN7W5S960``````-,+```"```````$`0``
M``#\E@0(_)8$")L!```+````L`4```$"/`````@"3@,@`0```DT\`````B,`
M``1,````4P````5,`````0`&/`0```0'!VEN=``$!0AU````O0<```0#10.M
M!````T93`````B,```B>````?0@```@$&P/&`0``!!R>`````B,``U@&```$
M'5,````"(P0`!@,$```$!0@P`0``LP(``"0$*@,`!P``!"M3`````B,``X\(
M```$+%,````"(P0#+@$```0M6@````(C"`,J`P``!"Y3`````B,,`^\'```$
M+U,````"(Q`#+`8```0P,`$```(C%`-Z````!#%3`````B,8`Q@(```$,C<!
M```"(QP#Z`````0S,`$```(C(``&BP$```0'"00"7@$```P$/`.9!@``!#IU
M`````B,``WD%```$.V0!```"(P@`"H`$```!"P1>`0```H$!```$!$,#VP(`
M``1"4P````(C```"T`$``!@$4P/-!```!$Y3`````B,``\D#```$3U,````"
M(P0#1@<```109`$```(C"`/K"```!%%3`````B,,`S4"```$4G4````"(Q``
M`N<!```$!%H#30D```194P````(C```(5@(``#L)```@!&0#J0(```1E=0``
M``(C``/-````!&93`````B,(`RD"```$9V0!```"(PP#*0D```1H9`$```(C
M$`-"`P``!&ED`0```B,4`T`````$:E,````"(Q@#`P@```1K4P````(C'``"
M>P(```@$=`-K`@``!')3`````B,``\D"```$<U,````"(P0``KP"```4!($#
M<@<```1]=0````(C``-R!@``!'Y3`````B,(`R0'```$?U,````"(PP#X@<`
M``2`9`$```(C$``"TP(```0$A@/)`@``!(53`````B,```SR`@``!`5*#60%
M```%2/("```-400```5)^0(````&>00```0'!`D#```)`P``!4P````#``;C
M`````08"-0,```@%2P,9`P``!453`````B,``R8!```%2M,"```"(P0``EH#
M```,!AX#0@8```8<6@,```(C``,P"```!AT0`P```B,$``9T`0``!`4"A@,`
M`!`&(P-"!@``!B&&`P```B,``S`(```&(A`#```"(P@`!EX'```(!0[2`P``
M!`<F#X4'````#^,"```!#[$&```"#U`'```##[P%```$#U4#```%#U4"```&
M#X`&```'#Z4````(#\L'```)``[G`P``!`<X#^,%```!#V<(```"``@Z!```
M#`0``!0'0@-/!0``!V?Q!0```B,``SL%```':!L&```"(P0#&0(```=I+08`
M``(C"`/T"```!VHW`0```B,,`V`(```':S,&```"(Q``$&T$```!4P```!%M
M!```$40%```1-P$``!''!0``$=D%```1QP4``!'?!0``$>L%````"P1S!```
M"$0%``"\`P``.`<_`VH%```'<C\&```"(P`#,04```=S108```(C!`,!`0``
M!W53`````B,(`[L(```'=U`&```"(PP#=@(```=X4`8```(C$`,:`0``!WJ)
M!@```B,4`R8%```'>Y\&```"(Q@#@`(```=\L08```(C'`/'"```!X!3````
M`B,@`T\!```'@5,````"(R0#TP,```>"4P````(C*`-I`P``!X-3`````B,L
M`X,#```'AE,````"(S`#]`@```>(-P$```(C-``+!$H%```(QP4``-8&```D
M!T`#*00```>/Y04```(C``/X!```!Y#E!0```B,$`_`$```'E%,````"(P@#
M\@(```>84P````(C#`.B!@``!YQ3`````B,0`Y(!```'GK<&```"(Q0#,`@`
M``>?$`,```(C&`.="```!Z,S!@```B,@``L$S04``!+2!0``!MH````!"`L$
MQP4```L$Y04```L$T@4```L$,`$```L$.@0``!`;!@```5,````1-P$``!''
M!0``$<<%```1Y04``!'E!0````L$]P4``!,M!@```1$W`0````L$(08```L$
MYP,```K:`0```0L$.08```L$2P8``!()`P``"P0)`P``$(D&```!4P```!%M
M!```$40%```1V04``!''!0``$=\%```1ZP4``!%3````$5,`````"P16!@``
M$)\&```!4P```!%M!`````L$CP8``!.Q!@```1%M!`````L$I08```L$$`,`
M``CT!@``P`````@'J0,[`0``!ZHP`0```B,``Z\!```'JVT$```"(P0#]`@`
M``>L]`8```(C"``$`P<``$H%```43``````"*`<``"P&-`/$`@``!C*]!@``
M`B,``_0(```&,TH%```"(P@`#$<'```L!C4-Q`(```8OO08```T$!0``!C0#
M!P```!6+`0``"-52!P``!CP$```$!Q6S`P```B#2!0``%0\#```"(6\'```&
M\`$```('%4T"```"(E('```5XP,```(CC`<```8W!```!`<5E@0```(EG@<`
M``8R!```"`<5(0,```(FL`<```;^`P``"`45?`<```(QP@<```;<`````085
MI0@```(RT@4``!59"0```C/?!P``!NP#```"!158!````C1O!P``%50````"
M-5,````5C@,```(V4@<``!4:!P```CBP!P``%8H"```".9X'```5.`8```([
M*`@```L$I0<``!7V`P```CV3!P``%4D$```"/G8'```5$`@```(_=@<``!73
M`@```D"!!P``%0\&```"078'```5J0<```)"=@<``!5T`0```D.>````%2`)
M```"1*4'```5!P,```)%4P```!5\`0```D93````%5L%```"1X$'```5B@``
M``)(DP<``!6B`@```DEV!P``%3D#```"3B4````52@````)14P```!4*"0``
M`E)0!@``%3<````"4YX````5]`````)44@<``!60!0```E6>````%;,'```"
M5IX````5O@8```)8G@```!4D"````EM3````%7D#```"7E,````5JP,```)E
M4P```!6A!````FAO!P``%88!```";)X````5SP$```)QG@```!7S!0```G*E
M!P``%9`'```"=8$'```5``8```)VDP<``!6B`0```GF!!P``%;<!```">I,'
M```5G@4```)]DP<``!5>!P```H!["```%94"```"@YX````5.`@```*$C`<`
M`!6%!0```H=3````%0X'```"BE('```5"P$```0CVPD```L$7@$``!7["```
M!#2E````%3X"```$/#D!```580$```1#:@$``!7(!@``!$92!P``%94````$
M4X$!```5&`8```1:T`$``!6^!```!%Y3````%3P)```$;.<!```5,0<```1T
M5@(``!70!0``!'E/"@``%E,````5F0,```2!>P(``!5C!```!(:\`@``%1\$
M```$C(P'```7J`4```A%`9X````7>00```AB`5('```5]P<```5+$`,``!5H
M!P``!AXU`P``%0,"```&(V$#```5KP@```=(N0H```L$5@8``!5>````!TO*
M"@``"P2/!@``%4@&```'3-L*```+!*4&```5V0@```=5[`H```L$.@0``!5&
M"```!UK]"@``"P3W!0``%>@&```'7@X+```+!!0+```0+@L```%3````$44&
M```1+@L``!'K!0````L$-`L```L$108``!4/!0``!V%%"P``"P1+"P``$&`+
M```!4P```!%@"P``$44&````"P0W`0``%=H$```'8G$+```+!"$&```5#P(`
M``>M@@L```L$O08``!5O````!C4H!P``%40!```&-]\'```5``````8X4P``
M`!44"0``!CEO!P``%9T'```&.E('```88P8```$9T0L```$%`P1S!0@24P``
M``!.`````@`+`0``!`$S`0``+W5S<B]S<F,O;6-P+V9R;V]T,E]X.#8O0E5)
M3$0O9VQI8F,M,BXR+V-S=0!'3E4@05,@,BXQ,BXY,"XP+C$U``&`3@````(`
M&0$```0!I`$``"]U<W(O<W)C+VUC<"]F<F]O=#)?>#@V+T)524Q$+V=L:6)C
M+3(N,B]C<W4`1TY5($%3(#(N,3(N.3`N,"XQ-0`!@`$1`1`&$@$1`0,.&PXE
M#A,+```"$P$!$PL+.@L["P```PT``PXZ"SL+21,X"@``!`$!`1-)$P``!2$`
M21,O"P``!B0``PX+"SX+```')``#"`L+/@L```@3`0$3`PX+"SH+.PL```D/
M``L+```*$P`##CP,```+#P`+"TD3```,%P$!$PL+.@L["P``#0T``PXZ"SL+
M21,```X$`0$3"PLZ"SL+```/*``##AP+```0%0$!$R<,21,``!$%`$D3```2
M)@!)$P``$Q4!`1,G#```%"$`21,``!46``,..@L["TD3```6-0!)$P``%Q8`
M`PXZ"SL%21,``!@T``,..@L["TD3/PP""@````$1`!`&&P@E"!,%`````1$`
M$`8;""4($P4````O`0```@`I`0```0'[#@H``0$!`0````$`:6YI="YC````
M`"XN+W-Y<V1E<',O=6YI>"]S>7-V+VQI;G5X+V)I=',O='EP97,N:``````N
M+B]S>7-D97!S+W5N:7@O<WES=B]L:6YU>"]B:71S+W-C:&5D+F@`````+BXO
M;&EN=7AT:')E861S+W-Y<V1E<',O<'1H<F5A9"]B:71S+W!T:')E861T>7!E
M<RYH`````"XN+W=C<VUB<R]W8VAA<BYH`````"XN+W-Y<V1E<',O9VYU+U]'
M7V-O;F9I9RYH`````"XN+VEC;VYV+V=C;VYV+F@`````+W5S<B]L:6(O9V-C
M+6QI8B]I-#@V+7-U<V4M;&EN=7@O,RXR+C(O:6YC;'5D92]S=&1D968N:```
M````;0````(`(P````$!^PX*``$!`0$````!`"]T;7`O8V-U.31S2U0N<P``
M``````4"R'(%"`/!``$>+!X>5QX""0`!`0`%`O"2!`@#,0$>+#H"!@`!`0`%
M`OR6!`@#&@$>+!X>5QYD9"PL+3H>`@(``0%*`````@`C`````0'[#@H``0$!
M`0````$`+W1M<"]C8T913&,V5"YS````````!0+><@4(`R$!.AX"`0`!`0`%
M`@63!`@#&`$>`@$``0$````0````_____P$``7P(#`0$B`$``%]'7VEN=#,R
M7W0`+W5S<B]S<F,O;6-P+V9R;V]T,E]X.#8O0E5)3$0O9VQI8F,M,BXR+V-S
M=0!?7W1I;65?=`!?7W)W7VMI;F0`7U]D861D<E]T`%]?:6YT,S)?=`!?7V=C
M;VYV7VEN:71?9F-T`%]'7VEC;VYV7W0`7U]S=&%C:V%D9')?<V5T`%]?<FQI
M;38T7W0`<'1H<F5A9%]M=71E>%]T`%]?1T-/3E9?24Q,14=!3%]$15-#4DE0
M5$]2`%]?9V-O;G9?:6YF;P!?7W)W7W)E861E<G,`=6YS:6=N960@8VAA<@!?
M7W-T86-K<VEZ90!?7W5S96-O;F1S7W0`7U]C;W5N=&5R`%]P=&AR96%D7V1E
M<V-R`%]?9F-T`%]?=F%L`%]?=F%L=64`7U]S8VAE9'!A<F%M`%]?;G-T97!S
M`%]'7VEN=#$V7W0`7U]M87A?;F5E9&5D7V9R;VT`<'1H<F5A9%]C;VYD871T
M<E]T`%]?;V9F7W0`7U]S<VEZ95]T`%]?8FQK<VEZ95]T`%]?<W1A=&5P`&EN
M:70N8P!?7V9S9FEL8VYT7W0`7U]S=&5P<P!?7V9S9FEL8VYT-C1?=`!?7W-T
M871U<P!?7V)L:V-N=%]T`%]?9V-O;G9?;&]A9&5D7V]B:F5C=`!S:&]R="!U
M;G-I9VYE9"!I;G0`7T=?9G!O<S8T7W0`7U]G8V]N=E]T`%]?=')A;G-?96YD
M7V9C=`!?7W)W7W=R:71E<@!?7VU?;&]C:P!P=&AR96%D7V-O;F1?=`!?7W5?
M:6YT`%]?1T-/3E9?24Q,14=!3%])3E!55`!?7VQO8VMK:6YD`%]?=&]?;F%M
M90!?7V5N9%]F8W0`7U]U:6YT-C1?=`!?7W1?<V-A;&%R7W0`7U]I9%]T`%]?
M<G=?;&]C:P!?7W!T:')E861?871T<E]S`%]?8V0`7U]P<VAA<F5D`%]?:6YO
M7W0`7U]D=6UM>0!?7T=#3TY67TY/0T].5@!?7VEN=F]C871I;VY?8V]U;G1E
M<@!?7W!I9%]T`%]?=5]S:&]R=`!?7V-O=6YT`%]?<75A9%]T`%]?:6YH97)I
M='-C:&5D`%]?9G-I9%]T`%]?<G=?=W)I=&5?=V%I=&EN9P!?7T=#3TY67T95
M3$Q?3U544%54`%]?;6%X7VYE961E9%]T;P!?7W1I;65R7W0`7U]S=&%T969U
M;`!?7W5I;G0S,E]T`'!T:')E861?8F%R<FEE<E]T`%]?:V5Y7W0`7U]U7V-H
M87(`7U]G8V]N=E]S=&5P`%]?;5]C;W5N=`!?7VUI;E]N965D961?=&\`7U]U
M7VQO;F<`<VAO<G0@:6YT`%]?9&5V7W0`;&]N9R!L;VYG(&EN=`!?7V=C;VYV
M7W1R86YS7V1A=&$`<'1H<F5A9%]T`%]?;W5T8G5F`&QO;F<@;&]N9R!U;G-I
M9VYE9"!I;G0`7U]U:61?=`!?7W=C:&(`7U]U:6YT,39?=`!P=&AR96%D7V)A
M<G)I97)A='1R7W0`=VEN=%]T`%]P=&AR96%D7V1E<V-R7W-T<G5C=`!?7W5?
M<75A9%]T`%]?:7!C7W!I9%]T`%]?<V-H961?<')I;W)I='D`<'1H<F5A9%]O
M;F-E7W0`7U]M7W)E<V5R=F5D`%]?9V-O;G9?=')A;G-?96YD7V9C=`!?7V9L
M86=S`%]?;W5T8G5F96YD`%]?8V]M8FEN960`7U]G8V]N=E]T<F%N<U]I;FET
M7V9C=`!?7VEN:71?9F-T`%]?;6]D;F%M90!?7W1R86YS7V-O;G1E>'1?9F-T
M`%]?=')A;G-?9F-T`%]?<FQI;5]T`%]?=V-H`%]?<VAL:6)?:&%N9&QE`%]?
M8U]W86ET:6YG`%]?:6YT<'1R7W0`7U]S=7-E8V]N9'-?=`!?7VEN;S8T7W0`
M=V-H87)?=`!'3E4@0R`S+C(N,@!?7T=#3TY67T5-4%197TE.4%54`'!T:')E
M861?<W!I;FQO8VM?=`!?7T=#3TY67TE37TQ!4U0`7U]B;&MC;G0V-%]T`%]?
M9G-B;&MC;G0V-%]T`%]?;6]D95]T`'!T:')E861?;75T97AA='1R7W0`7U]G
M=6%R9'-I>F4`7U]Q861D<E]T`%]?<&]S`%]?9V-O;G9?96YD7V9C=`!?7W-P
M:6YL;V-K`%])3U]S=&1I;E]U<V5D`%]?8F%?<F5Q=6ER960`7U]'0T].5E])
M3D-/35!,151%7TE.4%54`%]?8U]L;V-K`%]?:6YT97)N86Q?=7-E`%]?1T-/
M3E9?3D]$0@!?7V-L;V-K7W0`<'1H<F5A9%]K97E?=`!?7V=C;VYV7W-T97!?
M9&%T80!?7V=C;VYV7W1R86YS7W%U97)Y7V9C=`!?7V1E=&%C:'-T871E`%]?
M<V]C:VQE;E]T`%]?:6YT-C1?=`!?7V)A7W!R97-E;G0`<'1H<F5A9%]R=VQO
M8VMA='1R7W0`7U]M7V]W;F5R`%]?1T-/3E9?3D]-14T`7U]O9F8V-%]T`%]'
M7V9P;W-?=`!?7V)A7VQO8VL`7U]I;G0X7W0`7U]'0T].5E]/2P!?7V9S8FQK
M8VYT7W0`7T=?=6EN=#,R7W0`7U]N;&EN:U]T`%]?<W=B;&M?=`!?7W-C:&5D
M7W!A<F%M`%]?1T-/3E9?24Y415).04Q?15)23U(`7U]B85]W86ET:6YG`%]?
M<V-O<&4`7U]M8G-T871E7W0`7U]R=U]P<VAA<F5D`%]?9VED7W0`7U]S=&%C
M:V%D9'(`7U]C;&]C:VED7W0`7U]S=&%T90!?7W1?=7-C86QA<E]T`%]?9V-O
M;G9?=')A;G-?8V]N=&5X=%]F8W0`7U]N97AT`%]?1T-/3E9?24=.3U)%7T52
M4D]24P!?<'1H<F5A9%]F87-T;&]C:P!?7W-C:&5D<&]L:6-Y`%]?=')A;G,`
M7U]U:6YT.%]T`%]?9V-O;G9?9F-T`%]?9G)O;5]N86UE`%]?;6EN7VYE961E
M9%]F<F]M`%]?9V-O;G9?=')A;G-?9F-T`%]?;5]K:6YD`%]?9&%T80!P=&AR
M96%D7V%T=')?=`!?7V-A9&1R7W0`7T=?=6EN=#$V7W0`7U]L;V9F7W0`7U]R
M=U]R96%D7W=A:71I;F<`7W!T:')E861?<G=L;V-K7W0`7U]M=71E>&MI;F0`
M7U]I;G0Q-E]T```N<WEM=&%B`"YS=')T86(`+G-H<W1R=&%B`"YI;G1E<G``
M+FYO=&4N04))+71A9P`N:&%S:``N9'EN<WEM`"YD>6YS='(`+F=N=2YV97)S
M:6]N`"YG;G4N=F5R<VEO;E]R`"YR96PN9'EN`"YR96PN<&QT`"YI;FET`"YT
M97AT`"YF:6YI`"YR;V1A=&$`+F1A=&$`+F5H7V9R86UE`"YD>6YA;6EC`"YC
M=&]R<P`N9'1O<G,`+FIC<@`N9V]T`"YB<W,`+F-O;6UE;G0`+F1E8G5G7V%R
M86YG97,`+F1E8G5G7W!U8FYA;65S`"YD96)U9U]I;F9O`"YD96)U9U]A8F)R
M978`+F1E8G5G7VQI;F4`+F1E8G5G7V9R86UE`"YD96)U9U]S='(`````````
M````````````````````````````````````````````````&P````$````"
M````](`$"/0````3```````````````!`````````",````'`````@````B!
M!`@(`0``(```````````````!``````````Q````!0````(````H@00(*`$`
M``0$```$``````````0````$````-P````L````"````+(4$""P%``"`!0``
M!0````$````$````$````#\````#`````@```*R*!`BL"@``C`0`````````
M`````0````````!'````____;P(````XCP0(.`\``+`````$``````````(`
M```"````5````/[__V\"````Z(\$".@/``"P````!0````4````$````````
M`&,````)`````@```)B0!`B8$```>`````0`````````!`````@```!L````
M"0````(````0D00($!$``.`!```$````"P````0````(````=0````$````&
M````\)($"/`2```7```````````````$`````````'`````!````!@````B3
M!`@($P``T`,`````````````!`````0```![`````0````8```#8E@0(V!8`
M`/#;``````````````0`````````@0````$````&````R'(%",CR```;````
M```````````$`````````(<````!`````@````!S!0@`\P``\G4`````````
M````(`````````"/`````0````,`````\`4(`'`!`"0:`````````````"``
M````````E0````$````#````)`H&""2*`0`$```````````````$````````
M`)\````&`````P```"@*!@@HB@$```$```4`````````!`````@```"H````
M`0````,````H"P8(*(L!``@```````````````0`````````KP````$````#
M````,`L&"#"+`0`(```````````````$`````````+8````!`````P```#@+
M!@@XBP$`!```````````````!`````````"[`````0````,````\"P8(/(L!
M`"P!``````````````0````$````P`````@````#````:`P&"&B,`0!$````
M```````````$`````````,4````!``````````````!HC`$`U@``````````
M`````0````````#.`````0``````````````0(T!`%@```````````````@`
M````````W0````$``````````````)B-`0`E```````````````!````````
M`.T````!``````````````"]C0$`>PP``````````````0````````#Y````
M`0``````````````.)H!`"<!``````````````$`````````!P$```$`````
M`````````%^;`0#R`0`````````````!`````````!,!```!````````````
M``!4G0$`%```````````````!``````````@`0```0```#``````````:)T!
M`&,)``````````````$````!````$0````,``````````````,NF`0`K`0``
M```````````!``````````$````"``````````````!(K0$`(`\``"$```!'
M````!````!`````)`````P``````````````:+P!`&X.``````````````$`
M``````````````````````````````````#T@`0(``````,``0``````"($$
M"``````#``(``````"B!!`@``````P`#```````LA00(``````,`!```````
MK(H$"``````#``4``````#B/!`@``````P`&``````#HCP0(``````,`!P``
M````F)`$"``````#``@``````!"1!`@``````P`)``````#PD@0(``````,`
M"@``````"),$"``````#``L``````-B6!`@``````P`,``````#(<@4(````
M``,`#0```````',%"``````#``X```````#P!0@``````P`/```````D"@8(
M``````,`$```````*`H&"``````#`!$``````"@+!@@``````P`2```````P
M"P8(``````,`$P``````.`L&"``````#`!0``````#P+!@@``````P`5````
M``!H#`8(``````,`%@`````````````````#`!<``````````````````P`8
M``````````````````,`&0`````````````````#`!H`````````````````
M`P`;``````````````````,`'``````````````````#`!T`````````````
M`````P`>``````````````````,`'P`````````````````#`"``````````
M`````````P`A``$```````````````0`\?\(```````````````$`/'_$P``
M`/R6!`@``````@`,`",```````````````0`\?\N````*`L&"``````!`!(`
M/````#`+!@@``````0`3`$H````D"@8(``````$`$`!=````.`L&"``````!
M`!0`:@````CP!0@``````0`/`&X```!T#`8(`0````$`%@!Z````()<$"```
M```"``P`D````'@,!@@8`````0`6`)D```!TEP0(``````(`#``C````````
M```````$`/'_I0```"P+!@@``````0`2`+(````T"P8(``````$`$P"_````
M)`H&"``````!`!``S0```#@+!@@``````0`4`-D```"D<@4(``````(`#``(
M```````````````$`/'_[P``````````````!`#Q__L````@\`4(!`````$`
M#P`"`0``0/`%"&\#```!``\`#`$`````````````!`#Q__L```#`\P4(!```
M``$`#P`=`0`````````````$`/'_^P````@(!@@$`````0`/`"H!````````
M``````0`\?_[````%`@&"`0````!``\`.0$`````````````!`#Q__L````8
M"`8(!`````$`#P!'`0`````````````$`/'_^P```$`(!@@$`````0`/`%4!
M``!@"`8(0`````$`#P!K`0`````````````$`/'_^P```*`(!@@$`````0`/
M`'D!``````````````0`\?^%`0``N-P$"(D````2``P`F0$``"S.!`A.`P``
M$@`,`*X!```8DP0(5@```!(```#%`0``*),$"#L````2````U@$``.#S!0@!
M$```$0`/`.$!``#(P00(SP```!(`#`#T`0``.),$"',````2````"@(``,CS
M!0@$````$0`/`!,"``!$W00(&P(``!(`#``I`@``2),$"&<!```2````.P(`
M`)`,!@@$````$0`6`$4"``!8DP0(-````!(```!:`@``U+H$".P````2``P`
M<`(````$!@@!!```$0`/`'P"``!HDP0(+P```!(```".`@``*`H&"``````1
M`/'_EP(``-!L!0A8````$@`,`*H"``!XDP0(70```!(```"_`@``S/,%"`0`
M```1``\`Q0(``-2Y!`C]````$@`,`-H"``#$\P4(!````!$`#P#D`@``K+P$
M"&L````2``P`]@(``(B3!`@L````$@````P#``"8DP0(*0```!(````?`P``
MJ),$"%8````2````,`,```!S!0@$````$0`.`#<#``"XDP0(-````!(```!*
M`P``T/,%"`0````1``\`4@,``,B3!`A$!@``$@```&<#``#8DP0(-P```!(`
M``!X`P```&L%",X!```2``P`C0,``)0,!@@0````$0`6`)8#``#HDP0(-P``
M`!(```"H`P``P&T%"/H!```2``P`Q@,``/B3!`C@````$@```-H#``#\Y`0(
M2P```!(`#`#P`P``_.4$"$P````2``P`!`0```B4!`C:````$@```!@$```8
ME`0(20```!(````J!```*)0$"!L!```2````0P0``'"Y!`AD````$@`,`%@$
M``!(Q`0(U0```!(`#`!Q!```!/`%"``````1``\`?@0``"AM!0B5````$@`,
M`)0$```0OP0(LP```!(`#`"H!```.)0$"-\&```2````O00``#S,!`C\````
M$@`,`-<$``!(E`0(C@```!(```#I!```I,`$")(````2``P`^P0``%B4!`@5
M`0``(@```"(%``!HE`0(<0```!(````^!0``:`P&"`0````A`!8`404``$CE
M!`AS````$@`,`&4%``!XE`0(.P```!(```!V!0``.,T$"/$````2``P`E`4`
M`/"2!`@`````$@`*`)H%``#$OP0(<````!(`#`"L!0``G-P$"!L````2``P`
MR`4``!`(!@@$````$0`/`-<%``"T*@4(0PL``!(`#`#K!0``B)0$"$4"```2
M````_04``/C'!`BI````$@`,`!(&``"8E`0(=````!(````H!@``F,($",L`
M```2``P`/08``(2]!`AP````$@`,`$\&``"\Y00(/P```!(`#`!A!@``I,@$
M"#@!```2``P`=08``$"J!`@\!@``$@`,`(0&``",:04(<@$``!(`#`"7!@``
MG`\%"%P````2``P`L08``*0,!@@$````$0`6`+P&``#D<04(/````!(`#`#)
M!@``;`P&"`0````1`!8`VP8````)!@@D`0``$0`/`/`&``!\L`0(-`<``!(`
M#``"!P``$&D%"%P````2``P`'`<``*B4!`BP````$@```#0'``#TO00(<```
M`!(`#`!(!P``_-\$"%\````2``P`:`<``+B4!`@V`0``$@```'L'``#(E`0(
M5`0``!(```"1!P``2-L$"%(!```2``P`I`<``-B4!`B3````$@```+D'``#H
ME`0(-0$``!(```#1!P``^)0$".,!```2````Z@<``&#?!`B<````$@`,``((
M```@Q00(F````!(`#``8"```V)8$"``````2``P`'P@```B5!`A,````$@``
M`#$(```8E00(G`4``!(````Y"```7.`$",(!```2``P`40@``"B5!`@W````
M$@```&((```<"`8(!````!$`#P!["```^#4%"%(K```2``P`D0@``)3F!`@]
M````$@`,`*T(```@<@4(@0```!(`#`"W"```.)4$",P````2````T`@``/3*
M!`A(`0``$@`,`.@(``#`T@0(AP@``!(`#```"0``2)4$"!,$```2````'0D`
M`+C%!`C$````$@`,`#`)```4*@4(GP```!(`#`!,"0``P`@&""D````1``\`
M7PD``%B5!`A(````$@```'0)```XP00(D````!(`#`"("0``L+<$"$,````2
M``P`EPD``-S)!`@5`0``$@`,`*T)``!H#`8(`````!``\?^Y"0``R)<$"`$1
M```2``P`O@D```0(!@@$````$0`/`,D)``!HE00(H````"(```#N"0``>)4$
M"-8````2````"PH``(B5!`AI`@``$@```!X*```@%P4(]!(``!(`#``R"@``
MF)4$"*H!```2````1`H``&@,!@@$````$0`6`%D*``"HE00(-`,``!(```!W
M"@``-,`$"'`````2``P`BPH```#P!0@`````(``/`)8*``#`NP0([````!(`
M#`"L"@``R'(%"``````2``T`L@H``+B5!`A"````$@```+H*``#(E00(1@``
M`!(```#,"@``V)4$"+D!```2````WPH``.B5!`A-`0``$@```/L*``#XE00(
M5P```!(````/"P````(%")P-```2``P`(PL``$CF!`A)````$@`,`#4+``#T
MMP0(>@$``!(`#`!("P``V.T$"#0+```2``P`7@L``'S1!`A#`0``$@`,`'0+
M``!,804(6@```!(`#`"."P``")8$"'L````2````I`L``&@,!@@`````$`#Q
M_ZL+```8O00(:P```!(`#`"_"P``/`L&"``````1`/'_U0L``!B6!`C5````
M$@```.4+``"L#`8(`````!``\?_J"P``*)8$"&L````2````^@L``*AA!0AE
M!P``$@`,``L,```XE@0(=@(``!(````B#```2'$%")D````2``P`,@P``+QO
M!0B*`0``$@`,`$\,``#,J`0(<@$``!(`#`!H#```2)8$"%0````2````>@P`
M`%B6!`AD````$@```(T,``!HE@0(C0```!(```"@#```>)8$"$$!```2````
MN`P``-3F!`@#!P``$@`,`,P,``!\Q@0(G````!(`#`#A#```<`P&"`0````1
M`!8`\PP``&2^!`BI````$@`,``4-```$<P4(!````!$`#@`4#0``#/D$"'4`
M```2``P`+@T``"`(!@@$````$0`/`$<-``!DPP0(X@```!(`#`!>#0``(.($
M"-P"```2``P`>`T``&QI!0@@````$@`,`)`-``"H#`8(!````!$`%@":#0``
M^`\%""<'```2``P`K`T``(B6!`AK````$@```+P-``"8E@0(*````!(```#3
M#0```/`%"``````0``\`X`T``*B6!`@Z````$@```/(-```,"`8(!````!$`
M#P#_#0`````````````@````$PX``!C'!`C@````$@`,`"8.``"XE@0(,P``
M`!(````[#@``A/D$"'H(```2``P`30X`````````````(````%P.``#(E@0(
M,````!(`````:6YI="YC`&EN:71F:6YI+F,`8V%L;%]G;6]N7W-T87)T`&-R
M='-T=69F+F,`7U]#5$]27TQ)4U1?7P!?7T143U)?3$E35%]?`%]?14A?1E)!
M345?0D5'24Y?7P!?7TI#4E],25-47U\`<"XP`&-O;7!L971E9"XQ`%]?9&]?
M9VQO8F%L7V1T;W)S7V%U>`!O8FIE8W0N,@!F<F%M95]D=6UM>0!?7T-43U)?
M14Y$7U\`7U]$5$]27T5.1%]?`%]?1E)!345?14Y$7U\`7U]*0U)?14Y$7U\`
M7U]D;U]G;&]B86Q?8W1O<G-?875X`&-O<'ER:6=H="YC`'-C8W-I9`!C;W!Y
M<FEG:'0`8W1C87-?<W1R=&-A<V0N8P!C=&-A<U]C;VUM+F,`8W1C87-?96YC
M;V1E+F,`8W1H8F%?;6%R<V@N8P!C=&-A<U]T<F%C92YC`&-A<U]?=')A8V5?
M8V%T96=O<FEE<P!C=&-A<U]U=&EL<RYC`&-T8V%S7VUS9RYC`&-A<U]?;6%R
M<VAA;%]S96-K97D`8V%S7U]E;F-O9&5?97)R8FQO8VL`;FQ?;&%N9VEN9F]`
M0$=,24)#7S(N,`!M:V1I<D!`1TQ)0D-?,BXP`'1R86-E9FYA;64`8V%S7U]E
M;F-O9&5?<W1R:6YG`&-U7V%P:V=?97)R;W)?,4!`0F%S90!P<F]G;F%M90!C
M87-?7W5N;6%R<VAA;%]S96-K97D`<W1R8VAR0$!'3$E"0U\R+C``=')A8V5S
M:7IE`&-U7W)E;%]E<G)O<E\Q0$!"87-E`&-A<U]?8V]N=E]S=')?=&]?=71F
M.`!T<F%C96QE=F5L<P!G971P:61`0$=,24)#7S(N,`!?1%E.04U)0P!C87-?
M7W)E;&5A<V5?>&1A=&$`;F%N;W-L965P0$!'3$E"0U\R+C``=')A8V4`8V%S
M7U]S971U<%]U=&8X7VAD;',`=F%L:61O<'1S`&-A<U]?96YC;V1E7S$V:6YT
M`&-U7W)E;%]E<G)M<V=?,4!`0F%S90!I<W-P86-E0$!'3$E"0U\R+C``8VQO
M<V5`0$=,24)#7S(N,`!?9G!?:'<`9G!R:6YT9D!`1TQ)0D-?,BXP`'9E<F)O
M<V4`8W5?:6-O;G9?<W1R7S%`0$)A<V4`=6UA<VM`0$=,24)#7S(N,`!C87-?
M7W5N;6%R<VAA;%]X9&%T80!T:6UE:6YF;P!U;FQI;FM`0$=,24)#7S(N,`!C
M87-?7V-H96-K7W-O8VME=%]D:7)E8W1O<FEE<P!T<E]S971?<VEZ95\Q0$!"
M87-E`&AB85]?;6%R<VAA;%]E;F1L86)E;`!H8F%?<F5L96%S95]R97%U97-T
M`'1R7V=E=%]S:7IE7S%`0$)A<V4`<V5L96-T0$!'3$E"0U\R+C``7U]A<W-E
M<G1?9F%I;$!`1TQ)0D-?,BXP`&-A<U]?8VQO<V5?=71F.%]H9&QS`&-A<U]?
M=6YE;F-O9&5?8GET97-T<F5A;0!?7V1S;U]H86YD;&4`8V%S7U]C<F5A=&5?
M9&ER96-T;W)Y`&-A<U]?=6YE;F-O9&5?-C1I;G0`<V5T;&]C86QE0$!'3$E"
M0U\R+C``8V%S7U]U;FUA<G-H86Q?8GET97-T<F5A;0!P=71E;G9`0$=,24)#
M7S(N,`!C87-?7V5N8V]D95\V-&9L=`!?7V1E<F5G:7-T97)?9G)A;65?:6YF
M;U]B87-E<T!`1T-#7S,N,`!?7V5R<FYO7VQO8V%T:6]N0$!'3$E"0U\R+C``
M96YV:7)O;D!`1TQ)0D-?,BXP`&AB85]R96QE87-E7V5N8V1A=&$`8VAM;V1`
M0$=,24)#7S(N,`!C87-?7VUA<G-H86Q?97)R8FQO8VM?;65M8V%L8P!?:6YI
M=`!C87-?7V5N8V]D95\S,F9L=`!C87-?7VUA<G-H86Q?<V5C:V5Y7VUE;6-A
M;&,`8V9R;VU?=71F.%]H9&P`:&)A7VUA<G-H86Q?96YC9&%T80!M86QL;V-`
M0$=,24)#7S(N,`!C87-?7W5N;6%R<VAA;%\V-&EN=`!C=5]G971?97)R;7-G
M7S%`0$)A<V4`8V%S7U]U;F5N8V]D95]S=')I;F<`8V%S7U]E;F-O9&5?,S)I
M;G0`:&)A7W)E;&5A<V5?8W)E9',`8V%S7U]M87)S:&%L7W-T<FEN9P!C87-?
M7W-E;F1?9&%T80!C87-?7VUA<G-H86Q?>&1A=&$`:&)A7VUA<G-H86Q?8W)E
M9'-?;65M8V%L8P!T<F%C96QE=F5L`&-A<U]?<F5V97)S90!S=&1O=71`0$=,
M24)#7S(N,`!C=5]M97-G=&)L7V-T8V%S7VUS9P!C87-?7W)E8V5I=F5?9&%T
M80!C87-?7W)E;5]E;&5M7V9R;VU?9&QL:7-T`'1R7V=E=%]F:6QE;F%M95\Q
M0$!"87-E`&-A<U]?=6YE;F-O9&5?,S)I;G0`8V%S7U]M87)S:&%L7VAO<W1I
M9&QI<W1?;65M8V%L8P!?7WAS=&%T0$!'3$E"0U\R+C``8W5?:6-O;G9?;W!E
M;E\Q0$!"87-E`&-A<U]?96YC;V1E7W-E8VME>0!T<E]R96-O<F1?:61?,4!`
M0F%S90!P=&AR96%D7V]N8V5`0$=,24)#7S(N,`!C=5]G971?<')O8W-P965D
M7S%`0$)A<V4`8V%S7U]R96QE87-E7VAO<W1I9&QI<W0`8V%S7U]M87)S:&%L
M7V=R;W=?;65M`%]S=&%R=`!G971O<'1`0$=,24)#7S(N,`!S<F-S=')T`&-A
M<U]?;6%R<VAA;%]H;W-T:61L:7-T`&-H9&ER0$!'3$E"0U\R+C``8V%S7U]T
M<F%C95]R96=I<W1E<E]O;F-E`&AB85]U;FUA<G-H86Q?96YC9&%T80!H8F%?
M;6%R<VAA;%]R97%U97-T7VUE;6-A;&,`8V%S7U]I=&]A`'-E8U]R96QE87-E
M7V)U9F9E<D!`0F%S90!C87-?7VUA<G-H86Q?8GET97-T<F5A;0!C87-?7W5N
M;6%R<VAA;%]E<G)B;&]C:P!?7W-T<G1O;%]I;G1E<FYA;$!`1TQ)0D-?,BXP
M`&-A<U]?;6%R<VAA;%\S,FEN=`!H8F%?;6%R<VAA;%]E;F-D871A7VUE;6-A
M;&,`8W5?8F%D:61?8W1C87-?;7-G`&-U7V=E=%]E<G)O<E\Q0$!"87-E`&-A
M<U]?=6YE;F-O9&5?-C1F;'0`8V%S7U]S869E7V9R964`8V%S7U]U;FUA<G-H
M86Q?<W1R:6YG`%]?8G-S7W-T87)T`&UA:6X`=')A8V5F<VEZ90!?7W)E9VES
M=&5R7V9R86UE7VEN9F]?8F%S97-`0$=#0U\S+C``7U]L:6)C7W-T87)T7VUA
M:6Y`0$=,24)#7S(N,`!R96%L;&]C0$!'3$E"0U\R+C``:&)A7W5N;6%R<VAA
M;%]C<F5D<P!S=')C871`0$=,24)#7S(N,`!?7V5N=FER;VY`0$=,24)#7S(N
M,`!T<E]R96=I<W1E<E]C;VUP;VYE;G1?,4!`0F%S90!C87-?7W5N96YC;V1E
M7S,R9FQT`&1A=&%?<W1A<G0`8V%S7U]C;VYV7W5T9CA?=&]?<W1R`%]F:6YI
M`'-R8W-T870`;65M8W!Y0$!'3$E"0U\R+C``<W1R<F-H<D!`1TQ)0D-?,BXP
M`'1R7W-E=%]T<F%C95]L979E;'-?,4!`0F%S90!?7W-T<F1U<$!`1TQ)0D-?
M,BXP`&AB85]U;FUA<G-H86Q?<F5P;'D`:&)A7W)E;&5A<V5?<F5P;'D`8V%S
M7U]O<&5N7W5T9CA?:&1L`&AB85]U;FUA<G-H86Q?<F5Q=65S=`!C87-?7VUA
M<G-H86Q?97)R8FQO8VL`8V%S7U]T<F%C95]R96=I<W1E<E]C=&-A<P!C=5]P
M<V5T7V5R<F]R7S%`0$)A<V4`7V5D871A`&-A<U]?=6YE;F-O9&5?,39I;G0`
M7T=,3T)!3%]/1D93151?5$%"3$5?`&9R965`0$=,24)#7S(N,`!?96YD`'-E
M;F1`0$=,24)#7S(N,`!C87-?7W-E='5P7W1R86-E`&-U7VEC;VYV7V-L;W-E
M7S%`0$)A<V4`8V%S7U]T<F%C95]E>&ET`&-A<U]?8VAE8VM?8W5R<F5N=%]D
M:7)E8W1O<GD`8V%S7U]C;&5A;E]T<F%C95]E;G9I<F]N`&UE;7-E=$!`1TQ)
M0D-?,BXP`&-O;FYE8W1`0$=,24)#7S(N,`!S=')N8W!Y0$!'3$E"0U\R+C``
M=')?<V5T7V9I;&5N86UE7S%`0$)A<V4`:&)A7VUA<G-H86Q?<F5Q=65S=`!C
M87-?7W5N;6%R<VAA;%\S,FEN=`!O<'1A<F=`0$=,24)#7S(N,`!C87-?7V5N
M8V]D95\V-&EN=`!?24]?<W1D:6Y?=7-E9`!H8F%?;6%R<VAA;%]R97!L>5]M
M96UC86QC`&-A<U]?=')A8V5?9&5T86EL7VQE=F5L<P!C87-?7V5N8V]D95]B
M>71E<W1R96%M`&-A<U]?=6YM87)S:&%L7VAO<W1I9&QI<W0`8V%S7U]A9&1?
M96QE;5]T;U]D;&QI<W0`=')A8V5F:6QE`&AB85]M87)S:&%L7V-R961S`')E
M8W9`0$=,24)#7S(N,`!T<E]R96-O<F1?9&%T85\Q0$!"87-E`%]?9&%T85]S
M=&%R=`!S;V-K971`0$=,24)#7S(N,`!C=&]?=71F.%]H9&P`7TIV7U)E9VES
M=&5R0VQA<W-E<P!C87-?7VUA<G-H86Q?-C1I;G0`8W5?<V5T7V5R<F]R7S%`
M0$)A<V4`:&)A7VUA<G-H86Q?<F5P;'D`7U]G;6]N7W-T87)T7U\`<W1R8W!Y
,0$!'3$E"0U\R+C``
`
end
begin 755 getLocalHostName.aix
M`=\`!#U_3"\```I.````=@!($`(!"P`!```#Z````50````$(``&`!```2@@
M``40(``&%``"``$``@`"``0``P`"``,Q3```````````````````````````
M```N=&5X=````!```2@0``$H```#Z````2@```A:```````A```````@+F1A
M=&$````@``40(``%$````50```40```)I```````$0``````0"YB<W,`````
M(``&9"``!F0````$`````````````````````````(`N;&]A9&5R````````
M```````!]0``!F0``````````````````!``````````````````````````
M``````````````````````````````````""(@`D?&X;>'R/(WA\L"MX?![X
M`)'"``"1X@`$@C$``(%"`"@Y(```92D$`RT1``"1*@``0((`$$@``)%@````
M2```%(/B`#!(``&!@$$`%'QN&WA!B@`<@!$``)!!`!1\"0.F@%$`!$Z`!"&`
M00`4@.(`.#D```!]PW-X?>1[>'X%@WB1!P``2``!:6````"`X@`<+`<``$&"
M``B`8@`@2``#(8!!`!1\@0@(```````,($``````````K``'7U]S=&%R=```
M`(!B``A\"`*F+`,``)0A_\"0`0!(08(`P(%C``"000`4?6@#IH%C``B`0P`$
M3H``(8!!`!2`8@`,+`,``$&"`!R``P``@6,`"'P(`Z:`0P`$3H``(8!!`!2`
M8@`0+`,``$&"`!R``P``@6,`"'P(`Z:`0P`$3H``(8!!`!2`8@`4+`,``$&"
M`!R``P``@6,`"'P(`Z:`0P`$3H``(8!!`!2`8@`8+`,``$&"`!R``P``@6,`
M"'P(`Z:`0P`$3H``(8!!`!2!@0!(."$`0'V(`Z9.@``@."$`0$Z``"``````
M```@08````````#<``Y?7W1H<F5A9'-?:6YI=(```"R!@@`TD$$`%(`,``"`
M3``$?`D#IDZ`!"````````R@```````````8?`@"IK_!__B0`0`(E"'^L(/B
M`#R080%HD($!;#AA`$`X@`$`.\```&/%``!(``"]8````)/!`4`X80!`.(`!
M`$@``1F`00`4B&$`0'P>&$!!@@!0.&$`0$@``2F`00`4D&$!0'P>&$!!@@`<
M@(,``&/C``!(``$U@$$`%&/#``!(```X@&(`.("#```X?P`D2``!&8!!`!0X
M8``"2```'(!B`#B`@P``.'\`4$@``/V`00`4.&```8`!`5A\"`.F."$!4+O!
M__A.@``@````````($&``@(!`````````,P`!&UA:6XP("@$`!!\IBMX?*<K
M>'RH*WA!@0`0?($#IGR@'2I.@``@5(#9?WRI*WA\JBMX?*LK>'RL*WA!@O_@
M?`D#IC@``"!\`0.F5(0&_GR@'2HP8P`@0@#_^$O__\````````P@0```````
M``!8``5?9FEL;`"!@@!`D$$`%(`,``"`3``$?`D#IDZ`!"````````R@````
M```````8@8(`1)!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```````````
M&(&"`$B000`4@`P``(!,``1\"0.F3H`$(```````#*```````````!B!@@!,
MD$$`%(`,``"`3``$?`D#IDZ`!"````````R@```````````80"@C*38Q"3$N
M,3,@('-R8R]B;W,O=7-R+V-C<R]L:6(O;&EB8R]?7W1H<F5A9'-?:6YI="YC
M+"!L:6)C=&AR9"P@8F]S-#-.(#,O,C4O.3D@,3,Z-3`Z,C<````@``84(``&
M"`````!24T-4($-T4V5C(&YA;64@9F]R(&QO8V%L(&AO<W0Z("5S"@!#86YN
M;W0@<F5S;VQV92!L;V-A;"!H;W-T(&YA;64@*&5R<FYO("5D*0H``$-A;FYO
M="!O8G1A:6X@:&]S="!N86UE(&9O<B!L;V-A;"!S>7-T96T@*&5R<FYO("5D
M*0H`````$``!*"``!A00``'P(``&%```````````````````````````````
M```````````````````````@``9D`````"``!1`@``5L```````````@``5X
M``````````````````````````$````(````$0```!X````"```!K````"L`
M``'*97)R;F\```````````!`!0````$```````````````(```````!`"@``
M``$`````97AI=`````````````!`"@````$`````<')I;G1F``````````!`
M"@````$``````````````!````````!`"@````$``````````````"``````
M``!`"@````$`````7U]C<G0P=@````````!`!0````$`````7U]S=&%R=``@
M``8```(A"@``````````(``%;`````$?```"(``%<`````$?```"(``&````
M```?```"(``&!`````$?```"(``&"``````?```"(``&#`````$?```"(``&
M.`````(?```"(``&/`````D?```"(``&0`````$?```"(``&1`````$?```"
M(``&2`````@?```"(``&3`````,?```"(``&4`````$?```"(``&5`````0?
M```"(``&6`````<?```"(``&7`````8?```"(``&8`````4?```"+W5S<B]L
M:6(Z+VQI8@````!L:6)C+F$`<VAR+F\```QG971H;W-T;F%M90``#F=E=&AO
M<W1B>6YA;64```M?7VUO9%]I;FET```0``$J````$`\#$``!/@```#`/`Q``
M`4(````R#P,0``%*````$@\#$``!8````$"9&A```6X````6#P,0``%P````
M8)D:$``!F@```!H/`Q```;````!6F1H0``&Z````-`\#$``!Q@```#8/`Q``
M`<@```!EF1H0``'R````1H\#$``")@```$B/`Q```DH```!*CP,0``)N````
M3(\#$``"D@```$Z/`Q```NX````4CP,0``+R````&`\#$``#*@```!R/`Q``
M`T0```!;F1H0``-8````:ID:$``#<````&^9&A```XP```!TF1H0``.>````
M&H\#$``#J````'29&A```[H````:CP,0``/$````=)D:$``$`````%L`#Q``
M!'(````>#P,0``2:````(`\#$``$P@```"(/`Q``!.H````D#P,@``5L````
M,!\`(``%<````$0?`"``!@`````H'P`@``8$````#A\`(``&"````$`?`"``
M!@P````.'P`@``8X````.!\`(``&/`````P?`"``!D````!"'P`@``9$````
M+A\`(``&2`````H?`"``!DP`````'P`@``90````6!\`(``&5`````(?`"``
M!E@````('P`@``9<````!A\`(``&8`````0?`&5R<FYO```````````````"
M`0``````````````!0`````````````````$```````````"`0``````````
M````"@```````&5X:70````````````````"`0``````````````"@``````
M`'!R:6YT9@`````````````"`0``````````````"@`````````````````0
M```````````"`0``````````````"@`````````````````>```````````"
M`0``````````````"@```````%]?8W)T,'8````````````"`0``````````
M````!0```````%1/0P``````(``&%``"``!K`0`````````````1#P``````
M```````````I(``&.``"``!K`0````0````````1`P```````%]?8W)T,'8`
M(``&/``"``!K`0````0````````1`P```````%\D4U1!5$E#(``&0``"``!K
M`0````0````````1`P`````````````````^(``&1``"``!K`0````0`````
M```1`P`````````````````>(``&2``"``!K`0````0````````1`P``````
M`&5R<FYO````(``&3``"``!K`0````0````````1`P```````%\D4U1!5$E#
M(``&4``"``!K`0````0````````1`P`````````````````$(``&5``"``!K
M`0````0````````1`P`````````````````0(``&6``"``!K`0````0`````
M```1`P```````'!R:6YT9@``(``&7``"``!K`0````0````````1`P``````
M`&5X:70`````(``&8``"``!K`0````0````````1`P```````"````$`````
M````)__^^0-G``````````!(````.O_^#`-G`"Y?7W-T87)T$``!*``!``!K
M`0```,4````````1`````````"Y?7W-T87)T$``!*``!```"`0```"@`````
M```"`````````%]?<W1A<G0`(``&```"```"`0````@````````1"@``````
M```````````^(``%;``"``!K`0````P````````1!0```````'!?>&%R9V,`
M(``&%``"```"`0````0````````3$````````'!?>&%R9W8`(``&&``"```"
M`0````0````````3$````````'!?>')C9F<`(``&,``"```"`0````0`````
M```3$````````'!?>')C````(``&-``"```"`0````0````````3$```````
M```````````I(``&9``#```"`0````0````````3!0```````"YF:6QE````
M````4/_^``-G`P````````!3``````````````````````"2`````````0``
M``````````"L`````````@``````````````$``!\``!``!K`0```0``````
M```1``````````````````#;$``!\``!`"`"`0```#X````````"````````
M`%\D4U1!5$E#(``%$``"``!K`0```%H````````9!0````````````````#<
M(``&"``"```"`0````P````````1"@````````````````#K(``&'``"```"
M`0````0````````3$`````````````````$!(``&(``"```"`0````0`````
M```3$`````````````````$3(``&)``"```"`0````0````````3$```````
M``````````$I(``&*``"```"`0````0````````3$`````````````````$[
M(``&+``"```"`0````0````````3$````````"YF:6QE````````6O_^``-G
M`VQO8V%L;F%M92YC``````````````````%5`````````0````````````%O
M`````````@``````````````$``#&``!``!K`0```.@````````1````````
M`"YM86EN````$``#&``!`"`"`0```%0````````"`````````%\D4U1!5$E#
M(``%>``"``!K`0```(4````````9!0```````&YO;F%M90``````7?_^#`-G
M`"Y?9FEL;```$``$```!```"`0```&\````````1`````````&=L:6YK+G,`
M````8O_^#`-G``````````&<$``"\``!``!K`0```"@````````1!@``````
M``````````&<$``"\``!```"`0```%X````````"!@```````&=L:6YK+G,`
M````9__^#`-G`"YE>&ET````$``$Z``!``!K`0```"@````````1!@``````
M`"YE>&ET````$``$Z``!```"`0```&,````````"!@```````&=L:6YK+G,`
M````;/_^#`-G``````````&H$``$<``!``!K`0```"@````````1!@``````
M``````````&H$``$<``!```"`0```&@````````"!@```````&=L:6YK+G,`
M````<?_^#`-G``````````&U$``$F``!``!K`0```"@````````1!@``````
M``````````&U$``$F``!```"`0```&T````````"!@```````&=L:6YK+G,`
M_______^#`-G`"YP<FEN=&8`$``$P``!``!K`0```"@````````1!@``````
M`"YP<FEN=&8`$``$P``!```"`0```'(````````"!@```````````<1G971H
M;W-T;F%M90!G971H;W-T8GEN86UE`%]?;6]D7VEN:70`7U]#7W)U;G1I;65?
M<'-T87)T=7``8W)T,%]D871A`&-R=#!M86EN+G,`+BXO+BXO+BXO+BXO+BXO
M+BXO+BXO<W)C+V)O<R]U<W(O8V-S+VQI8B]L:6)C+U]?=&AR96%D<U]I;FET
M+F,`36]N($IU;"`R-B`Q-#HU-CHR-B`Q.3DY(`!#(%-E="`K*R!F;W(@04E8
M($-O;7!I;&5R(%9E<G-I;VX@-"XQ+C`N,"`M+2T@`"Y?7W1H<F5A9'-?:6YI
M=`!?<'1H<F5A9%]I;FET7W)O=71I;F4`7V)S9%]I;FET7W)O=71I;F4`7WAT
M:5]T;&E?:6YI=%]R;W5T:6YE`%]N<VQ?:6YI=%]R;W5T:6YE`%]?9&-E7V-O
M;7!A=%]I;FET7W)O=71I;F4`5V5D(%-E<"`Q,2`P.3HU.3HQ,"`R,#`R(`!)
M0DT@0R!A;F0@0RLK($-O;7!I;&5R<R!697)S:6]N(#,N-BXV+C`@+2TM(``N
G7U]M;V1?:6YI=``N9V5T:&]S=&YA;64`+F=E=&AO<W1B>6YA;64`
`
end
begin 755 getRemoteHostName.aix
M`=\`!#U_2SP```DD````:@!($`(!"P`!```#2````3@````$(``%2!```2@@
M``1P(``%7``"``$``@`"``0``P`"``,Q3```````````````````````````
M```N=&5X=````!```2@0``$H```#2````2@```=L```````<```````@+F1A
M=&$````@``1P(``$<````3@```1P```(A```````$```````0"YB<W,`````
M(``%J"``!:@````$`````````````````````````(`N;&]A9&5R````````
M```````!PP``!:@``````````````````!``````````````````````````
M``````````````````````````````````""(@`D?&X;>'R/(WA\L"MX?![X
M`)'"``"1X@`$@C$``(%"`"@Y(```92D$`RT1``"1*@``0((`$$@``)%@````
M2```%(/B`#!(``&!@$$`%'QN&WA!B@`<@!$``)!!`!1\"0.F@%$`!$Z`!"&`
M00`4@.(`.#D```!]PW-X?>1[>'X%@WB1!P``2``!:6````"`X@`<+`<``$&"
M``B`8@`@2``"@8!!`!1\@0@(```````,($``````````K``'7U]S=&%R=```
M`(!B``A\"`*F+`,``)0A_\"0`0!(08(`P(%C``"000`4?6@#IH%C``B`0P`$
M3H``(8!!`!2`8@`,+`,``$&"`!R``P``@6,`"'P(`Z:`0P`$3H``(8!!`!2`
M8@`0+`,``$&"`!R``P``@6,`"'P(`Z:`0P`$3H``(8!!`!2`8@`4+`,``$&"
M`!R``P``@6,`"'P(`Z:`0P`$3H``(8!!`!2`8@`8+`,``$&"`!R``P``@6,`
M"'P(`Z:`0P`$3H``(8!!`!2!@0!(."$`0'V(`Z9.@``@."$`0$Z``"``````
M```@08````````#<``Y?7W1H<F5A9'-?:6YI=(```"R!@@`TD$$`%(`,``"`
M3``$?`D#IDZ`!"````````R@```````````8?`@"IK_!__B0`0`(E"'_L(/B
M`#R080!HD($`;("!`&@X8``"?`,@`$&"`""`80!L@(,``&/C``!(``"I@$$`
M%#A@``%(``!H.\```)/!`$"`80!L@&,`!$@``+&`00`4D&$`0'P>&$!!@@`D
M@($`;("$``2`HP``.'\`'$@``&6`00`48\,``$@``"2`80!L@(,`!(!B`#B`
MHP``.'\`1$@``$&`00`4.&```H`!`%A\"`.F."$`4+O!__A.@``@````````
M($&``@(!`````````,``!&UA:6XP(`````"!@@!`D$$`%(`,``"`3``$?`D#
MIDZ`!"````````R@```````````8@8(`1)!!`!2`#```@$P`!'P)`Z9.@`0@
M```````,H```````````&(&"`$B000`4@`P``(!,``1\"0.F3H`$(```````
M#*```````````!A`*",I-C$),2XQ,R`@<W)C+V)O<R]U<W(O8V-S+VQI8B]L
M:6)C+U]?=&AR96%D<U]I;FET+F,L(&QI8F-T:')D+"!B;W,T,TX@,R\R-2\Y
M.2`Q,SHU,#HR-P```"``!5P@``50`````%5S86=E.B`E<R`\<F5M;W1E7VAO
M<W0^"@````!24T-4($-T4V5C(&YA;64@9F]R(')E;6]T92!H;W-T("5S.B`E
M<PH`0V%N;F]T(')E<V]L=F4@<F5M;W1E(&AO<W0@)7,@*&5R<FYO("5D*0H`
M```0``$H(``%7!```?`@``5<````````````````````````````````````
M`````````````````"``!:@`````(``$<"``!,P``````````"``!-@`````
M```````````````!````!P```!`````>`````@```8@````=```!IF5R<FYO
M````````````0`4````!`````&5X:70`````````````0`H````!`````'!R
M:6YT9@``````````0`H````!```````````````"````````0`H````!````
M```````````2````````0`H````!`````%]?8W)T,'8`````````0`4````!
M`````%]?<W1A<G0`(``%2``"(0H``````````"``!,P````!'P```B``!-``
M```!'P```B``!4@`````'P```B``!4P````!'P```B``!5``````'P```B``
M!50````!'P```B``!8`````"'P```B``!80````('P```B``!8@````!'P``
M`B``!8P````!'P```B``!9`````''P```B``!90````#'P```B``!9@````!
M'P```B``!9P````%'P```B``!:`````&'P```B``!:0````$'P```B]U<W(O
M;&EB.B]L:6(`````;&EB8RYA`'-H<BYO```.9V5T:&]S=&)Y;F%M90``"U]?
M;6]D7VEN:70``!```2H````.#P,0``$^````+`\#$``!0@```"X/`Q```4H`
M```0#P,0``%@````/)D:$``!;@```!0/`Q```7````!9F1H0``&:````&`\#
M$``!L````%*9&A```;H````P#P,0``'&````,@\#$``!R````%Z9&A```?(`
M``!"CP,0``(F````1(\#$``"2@```$:/`Q```FX```!(CP,0``*2````2H\#
M$``"[@```!*/`Q```O(````6#P,0``,J````&H\#$``#4````&.9&A```W``
M``!HF1H0``.4````8YD:$``#K@```!B/`Q```[@```!CF1H0``/Z````'`\#
M$``$(@```!X/`Q``!$H````@#P,@``3,````+!\`(``$T````$`?`"``!4@`
M```D'P`@``5,````#!\`(``%4````#P?`"``!50````,'P`@``6`````-!\`
M(``%A`````H?`"``!8@````^'P`@``6,````*A\`(``%D`````@?`"``!90`
M````'P`@``68````5!\`(``%G`````0?`"``!:`````&'P`@``6D`````A\`
M97)R;F\```````````````(!```````````````%````````97AI=```````
M``````````(!```````````````*````````<')I;G1F``````````````(!
M```````````````*``````````````````0```````````(!````````````
M```*`````````````````!(```````````(!```````````````*````````
M7U]C<G0P=@````````````(!```````````````%````````5$]#```````@
M``5<``(``&L!`````````````!$/`````````````````!T@``6```(``&L!
M````!````````!$#````````7U]C<G0P=@`@``6$``(``&L!````!```````
M`!$#````````7R135$%424,@``6(``(``&L!````!````````!$#````````
M`````````#(@``6,``(``&L!````!````````!$#`````````````````!(@
M``60``(``&L!````!````````!$#````````97)R;F\````@``64``(``&L!
M````!````````!$#````````7R135$%424,@``68``(``&L!````!```````
M`!$#````````<')I;G1F```@``6<``(``&L!````!````````!$#````````
M``````````0@``6@``(``&L!````!````````!$#````````97AI=``````@
M``6D``(``&L!````!````````!$#````````(````0`````````C__[Y`V<`
M`````````#P````V__X,`V<`+E]?<W1A<G00``$H``$``&L!````Q0``````
M`!$`````````+E]?<W1A<G00``$H``$```(!````)`````````(`````````
M7U]S=&%R=``@``5(``(```(!````"````````!$*`````````````````#(@
M``3,``(``&L!````#````````!$%````````<%]X87)G8P`@``5<``(```(!
M````!````````!,0````````<%]X87)G=@`@``5@``(```(!````!```````
M`!,0````````<%]X<F-F9P`@``5X``(```(!````!````````!,0````````
M<%]X<F,````@``5\``(```(!````!````````!,0`````````````````!T@
M``6H``,```(!````!````````!,%````````+F9I;&4```````!,__X``V<#
M`````````$<``````````````````````(8````````!`````````````*``
M```````"```````````````0``'P``$``&L!```!`````````!$`````````
M`````````,\0``'P``$`(`(!````.@````````(`````````7R135$%424,@
M``1P``(``&L!````6@```````!D%`````````````````-`@``50``(```(!
M````#````````!$*`````````````````-\@``5D``(```(!````!```````
M`!,0`````````````````/4@``5H``(```(!````!````````!,0````````
M`````````0<@``5L``(```(!````!````````!,0`````````````````1T@
M``5P``(```(!````!````````!,0`````````````````2\@``5T``(```(!
M````!````````!,0````````+F9I;&4```````!6__X``V<#;&]C86QN86UE
M+F,``````````````````4D````````!`````````````6,````````"````
M```````````0``,8``$``&L!````X````````!$`````````+FUA:6X````0
M``,8``$`(`(!````4`````````(`````````7R135$%424,@``38``(``&L!
M````;@```````!D%````````9VQI;FLN<P````!;__X,`V<``````````9`0
M``+P``$``&L!````*````````!$&`````````````````9`0``+P``$```(!
M````5P````````(&````````9VQI;FLN<P````!@__X,`V<`+F5X:70````0
M``1(``$``&L!````*````````!$&````````+F5X:70````0``1(``$```(!
M````7`````````(&````````9VQI;FLN<P````!E__X,`V<`+G!R:6YT9@`0
M``/X``$``&L!````*````````!$&````````+G!R:6YT9@`0``/X``$```(!
M````80````````(&````````9VQI;FLN<P#_______X,`V<``````````9P0
M``0@``$``&L!````*````````!$&`````````````````9P0``0@``$```(!
M````9@````````(&```````````!JV=E=&AO<W1B>6YA;64`7U]M;V1?:6YI
M=`!?7T-?<G5N=&EM95]P<W1A<G1U<`!C<G0P7V1A=&$`8W)T,&UA:6XN<P`N
M+B\N+B\N+B\N+B\N+B\N+B\N+B]S<F,O8F]S+W5S<B]C8W,O;&EB+VQI8F,O
M7U]T:')E861S7VEN:70N8P!-;VX@2G5L(#(V(#$T.C4V.C(V(#$Y.3D@`$,@
M4V5T("LK(&9O<B!!25@@0V]M<&EL97(@5F5R<VEO;B`T+C$N,"XP("TM+2``
M+E]?=&AR96%D<U]I;FET`%]P=&AR96%D7VEN:71?<F]U=&EN90!?8G-D7VEN
M:71?<F]U=&EN90!?>'1I7W1L:5]I;FET7W)O=71I;F4`7VYS;%]I;FET7W)O
M=71I;F4`7U]D8V5?8V]M<&%T7VEN:71?<F]U=&EN90!7960@4V5P(#$Q(#`Y
M.C4U.C`S(#(P,#(@`$E"32!#(&%N9"!#*RL@0V]M<&EL97)S(%9E<G-I;VX@
H,RXV+C8N,"`M+2T@`"Y?7VUO9%]I;FET`"YG971H;W-T8GEN86UE````
`
end
begin 755 check_ctcasd.aix
M`=\`!#VP608```````````!($`<!"P`!``!)4```=,`````H(`!]B!```0`@
M``I0(`!]J``"``$``@`"``0``P`%``,Q3```````````````````````````
M```N=&5X=````!```0`0``$```!)4````0`````````````````````@+F1A
M=&$````@``I0(``*4```=,```$I0````````````````````0"YB<W,`````
M(`!_$"``?Q`````H`````````````````````````(`N;&]A9&5R````````
M```````/K0``OQ```````````````````!```````((B`"A\;AMX?(\C>'RP
M*WA\'O@`D<(``)'B``2",0``@4(`+#D@``!E*00#+1$``)$J``!`@@`02```
MD6````!(```4@^(`1$@``A&`00`4?&X;>$&*`!R`$0``D$$`%'P)`Z:`40`$
M3H`$(8!!`!2`X@!,.0```'W#<WA]Y'MX?@6#>)$'``!(``'Y8````(#B`"`L
M!P``08(`"(!B`"1(`$?I@$$`%'R!"`@```````P@0`````````"L``=?7W-T
M87)T````?`@"IH!B``B4(?_`D$$`%)`!`$B``@`,+(,``(""`#PL````@*,`
M`(%C``A!@@`(D`0``'RH`Z9!A@"@@$,`!$Z``"&`00`4@&(`$"P#``"``P``
M@6,`"'P(`Z9!@@`0@$,`!$Z``"&`00`4@&(`%"P#``"``P``@6,`"'P(`Z9!
M@@`0@$,`!$Z``"&`00`4@&(`&"P#``"``P``@6,`"'P(`Z9!@@`0@$,`!$Z`
M`"&`00`4@&(`'"P#``"``P``@6,`"'P(`Z9!@@`0@$,`!$Z``"&`00`4@8$`
M2#@A`$!]B`.F3H``(````````"!!@````````.@`#E]?=&AR96%D<U]I;FET
M@```0`````!\"`*F@&(`,)0A_\"`8P``D`$`2$@``$6`00`4@8$`2#@A`$!]
MB`.F3H``(````````"!!@````````"P`$6-A;&Q?<'1H<F5A9%]I;FET`(``
M`#@`````@8(`-)!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```````````
M&(&"`$B000`4@`P``(!,``1\"0.F3H`$(```````#*```````````!B]H?^T
M?`@"ICO@``!@G0``?8``)I&!``20`0`(E"'M@)!A$=B3X0!8D^$`7#O!`=2`
M9```.(``+T@`$SF`00`4@((`5"P#``"09```0((`*(`=``"0!```@X(`6(!A
M$=ACI```@+P``$@`$S&`00`42```)#@#``&0!```@X(`6(!A$=ACI```@+P`
M`$@`$PV`00`4+`/__T&"`(R#8@!@@T(`9(,B`&@_```0/N```2P#`&8L@P!L
M+P,`<R^#`'8XH`/_@&(`;$&"$A`XH`0`@&(`<$&&$@1!FA',0)X`$(![```X
M`P`!D!L``("\``"`81'88Z0``$@`$J&`00`4+`/__T&"`"`L`P!F+(,`;"\#
M`',O@P!V.*`#_X!B`&Q+__^H2``:)6````"`8@!L2``P*8!!`!2`8@!D@&,`
M`$@`,$&`00`4@&(`<$@`,/V`00`4@Z(`M(@=``(L````+(```4&"`-2#@@$0
M0(8`-#A\`!PX@`!E2``RR8!!`!0[8``#.!P`Q#B<``0X_``L.5P`/#E\`,PY
MG`$D2```O("B`&"`W``0.&$`4CB<`!0[80!@@`4``'RD'*HL````D,$`8'RC
M':I!@@`(.V$`4H!B`&Q(`!L]@$$`%#M#``&`8@!P2``;+8!!`!0[(P`!8V,`
M`$@`&QV`00`4.`,``3A\`"0X@`!F.*``!(#"`&QC1P``@0(`9#D@``2!0@!P
MDR$`.)`!`$"380`\2``NC8!!`!1(```(@X(!$#M@``,X'`#$.)P`!#C\`"PY
M7``\.7P`S#F<`20[0```DV$`9)`!$=R0@1'@@R(`8(,"`1B"X@"0.L$"2I#A
M$>0ZO``T.H``!#I@``$\8`7V.;P`3#G<`-PY_`$\.AP`Y#H\``PZ7`!<.+P`
M]#ACX0`XW`%4.1P`9#D\`/R101'HD6$1[)&!$?"1H1'TD<$1^)'A$?R2`1(`
MDB$2!))!$@@X'`%@.)P`;#C\`$0Y7`#4.7P`=)"A$@R081(0D,$2%)$!$AB1
M(1(<D`$2()"!$B0Z00$0.B$!")#A$BB101(LD6$2,#H<`3`YH!``@&$1X+&A
M`%:`@1'<.*```#C!`%8Y`0!D..$!U$@`,26`00`4D&$`7"P#``"('0`"0((.
MA"L```&H80!6.(``9#AC_XY(`#.#D&$`:$"9`"R`81'D.(``:CB@``(XP0!H
M..``!#D!`&0Y(``$2``M)8!!`!2`80!H+`,``)/A`&PX@```0($`X(@=``(<
M9`!D?+X:%#AE`'9@;P``*````4"!`("HA0!RJ`4`=)`!`'20@0!P2``9-8!!
M`!0YPP`!@`$`;!P``&1\?@(4.&,`MV!M``!(`!D5@$$`%#@#``%BHP``.(``
M:SB@``4XP0!L..``!#D!`'`Y(``$.4$`=)*!`#B1X0`\D<$`0)`!`$B1H0!$
M2``L?8!!`!2`@0!L@`$`:!S$`&0XA``!?'XR%*AC`')\!```'`0`9"R#`!%\
MO@(4.&4`=F!O``!!A@:4D($`;$"``!"('0`"*````4O__T"``0!8+```*D&"
M`#2`80!D+`,``$&"`"@YH!``@&$1X+&A`%:`@1'<.*```#C!`%8Y`0!D..$!
MU$O__H`L```!0((%Q(@=``*#P@$@.($!:3AA`85\ON2J+````)OA`6A\I.6J
M?*/EJCAA`;TX@0&A?*3EJGRCK:J3X0!X08(`%#A\`(0X@`!X2``O+8!!`!0X
M`$``/(``F3Q@<W5\`($@.WP`C#M``"HZP``!.KP!Q#J<`9`Z?`"4.D26@#H\
M`)PZ`0#P.>$`Z#G#<FF3X0!8.&```3B@```X@``!2``O*8!!`!1\;1MY.&$!
M:F*D``!`@`!(B!T``B@```$L@``$3$8+0D&"`"A(`"I=@$$`%&!F``!C8P``
M.(``=CB@``$XX``$2``K"8!!`!2300!83)```$@``^":P0%I2``L^6`````X
M80%J8H0``$@`+NE@````8:,``#B!`6@XH`!J2``P98!!`!0L`P``.&$!0#B!
M`0!`@`$`2``I[8!!`!2``P``8:,``"P``#=`@@`82``P78!!`!2``0!8+(``
M`$@``W"('0`"*````2R```1,1@M"08(`*$@`*:V`00`48&8``&)C```X@`!W
M.*```3C@``1(`"I9@$$`%&&C``"300!82``P"8!!`!2('0`"D^$`Z))!`.QB
M(P``*````2R```0X@`!T3$8+0D&"``Q(`"VE@$$`%#AA`.@X@0#P2``O]8!!
M`!0L`___0(("W$@`*36`00`4@`,``#AA`.@X@0#P+```!$""`L!\L$2J?*]%
MJD@`+\&`00`4+`/__T&"_]"``0!8+(```$&&`]Q(``*D?+[DJI/A`1@Y@0$<
M?*SEJGR^1*HYX0%$..$!.'RG1:I\ON2J?*_EJGR^1*HXX0%@D^$`^'RG1:J3
MX0#\D^$!`)/A`022P0%$D<$!0$@`)3U@````D&$`6"P#``!AHP``.($!`#GA
M`.A!@@!H.&$`?(`9```L````08(!W$@`*BV`00`4@&$`?#B!`(!(`"I%@$$`
M%("!`(`X>``@2``O+8!!`!2`80"`2``J48!!`!2`80!\2``J;8!!`!2300!8
M8:,``$@`+K6`00`42``!F$@`-F%@````D&$`6"P#``!AHP``.($`^$&"`&@X
M80"$@!D``"P```!!@@%<2``IK8!!`!2`80"$.($`B$@`*<6`00`4@($`B#AX
M`"!(`"ZM@$$`%(!A`(A(`"G1@$$`%(!A`(1(`"GM@$$`%)-!`%AAHP``2``N
M-8!!`!1(``$82``NH6````"080!8+`,``#AA`/@X@0$808(`:#AA`(R`&0``
M+````$&"`-Q(`"DM@$$`%(!A`(PX@0"02``I18!!`!2`@0"0.'@`($@`+BV`
M00`4@&$`D$@`*5&`00`4@&$`C$@`*6V`00`4DT$`6&&C``!(`"VU@$$`%$@`
M`)A(`"$98````)!A`%@L`P``.&$`E(`!`2A!@@!D@!D``"P```!!@@!@2``H
ML8!!`!2`80"4.($`F$@`*,F`00`4@($`F#AX`"!(`"VQ@$$`%(!A`)A(`"C5
M@$$`%(!A`)1(`"CQ@$$`%)-!`%AAHP``2``M.8!!`!1(```<*```9$&"``B3
M00!88:,``$@`+1V`00`4.&$`^$@`.[&`00`4.&$!`$@`.Z6`00`4.&$!&$@`
M&0U@````@`$`6"R```!(```,@`$`6"R```!!A@$X@&$`>"P#`,@X`P`!D`$`
M>$"``!B3X0!8.&```3B@```X@``!2__[I$&&`""('0`"+````$&"`!0X?`"L
M.(``>D@`*F&`00`4@!D``"P```!!@@"@@`$`6"P```!`@@`L@1<!##D\`0PX
MO`%X.&``*CB````XP``!..``0T@`%P6`00`42```*($7`1`Y/`$4.+P!A#A@
M`"HX@```.,```3C@`$1(`!;=@$$`%#AA`)Q(`"=9@$$`%(!A`)PX@0"@2``G
M<8!!`!2`@0"@.'@`($@`+%F`00`4@&$`H$@`)WV`00`4@&$`G$@`)YF`00`4
MB!T``BP````L@``!08((:$"&"$@X?`"T.(``9T@`*96`00`4@8$2A(`!$HB`
M80!8."$2@'P(`Z9]@($@N:'_M$@`"%"('0`"+````$&"_NPXP0!X.'P`I#B`
M`'DXH``!..``!$@`)<6`00`4@`$`6"R```!+__[$.*$"2'QE,BZ!`@%,@.(!
M('QD!S0X`___.&3__R@#``I4`!:Z?&<"%(`#`"!\`$(408$$+'P)`Z9.@`0@
MB!T``BP```!!@@(H?`:R%)/A`*B0`0"D?&:PKBP#``!!@@'T2``YV8!!`!0L
M`P``08(`4(!A`*0X8P`!D&$`I(AC```L`P``08(!S$@`.;&`00`4+`,``(!A
M`*0X@P`!08(`%)"!`*2(8P`!+`,``$O__]B(`P``+````$@``!"`80"DB`,`
M`"P```!!@@&(.(``($@`.9&`00`4D&$`I(AC```L`P``08(!;$@`.5&`00`4
M+`,``$&"`%"`80"D.&,``9!A`*2(8P``+`,``$&"`41(`#DI@$$`%"P#``"`
M80"D.(,``4&"`!20@0"DB&,``2P#``!+___8B`,``"P```!(```0@&$`I(@#
M```L````08(!`#B!`*0XH``*2``Y+8!!`!2080"H@&$`I(AC```L`P``0((`
MW$@`.,&`00`4+`,``$""`,R3X0"H@&$`I#B``"!(`#C-@$$`%)!A`*2(8P``
M+`,``$&"`*A(`#B-@$$`%"P#``!!@@!0@&$`I#AC``&080"DB&,``"P#``!!
M@@"`2``X98!!`!0L`P``@&$`I#B#``%!@@`4D($`I(AC``$L`P``2___V(@#
M```L````2```$(!A`*2(`P``+````$&"`#PX@0"D.*``"D@`.&F`00`4D&$`
MJ(!A`*2(8P``+`,``$""`!A(`#?]@$$`%"P#``!`@@`(D^$`J(!A$>@X@`!L
M.*```3C!`*@XX``$2``C38!!`!2`&0``+````$&"`&R!%P#P.&```3B```"`
MH1'P.,```3C@`#R!(1'L2``3A8!!`!0X80"L2``D`8!!`!2`80"L.($`L$@`
M)!F`00`4@($`L#AX`"!(`"D!@$$`%(!A`+!(`"0E@$$`%(!A`*Q(`"1!@$$`
M%))A`%@X```!2__VJ(@=``*(?```B)P`")AA`%`L````F($`44&"`!2`81'T
M.(``;T@`)BF`00`4@!D``"P```!!@@!L@1<`^#A@``$X@```@*$1_#C```$X
MX``^@2$1^$@`$MF`00`4.&$`M$@`(U6`00`4@&$`M#B!`+A(`"-M@$$`%("!
M`+@X>``@2``H58!!`!2`80"X2``C>8!!`!2`80"T2``CE8!!`!2`81($@($2
M`#BA`%`XP0!1..```#D```!(`#<-@$$`%"P#W+LL@P``D&$`7$"$`+!!@@1@
MB!T``BP```!!@@`@.,$`7#A\`%0X@`!P.*```3C@``1(`"'1@$$`%(`9```L
M````08(`;($7`/PY/`#L.+P!2#A@``$X@```.,```3C@`#](`!()@$$`%#AA
M`+Q(`"*%@$$`%(!A`+PX@0#`2``BG8!!`!2`@0#`.'@`($@`)X6`00`4@&$`
MP$@`(JF`00`4@&$`O$@`(L6`00`4.```*I`!`%A+__LDB!T``BP```!!@@"T
M@&$2&#B``'(XH``!.,$`7#C@``1(`"$I@$$`%(`9```L````08+^2$@``)2`
M&0``+````$&"_CB!%P$(@4$`7#A@``$X@```@*$2%#C```$XX`!"@2$2#$@`
M$4V`00`4.&$`Q$@`(<F`00`4@&$`Q#B!`,A(`"'A@$$`%("!`,@X>``@2``F
MR8!!`!2`80#(2``A[8!!`!2`80#$2``B"8!!`!2280!8.````4O_]'"`&0``
M+````$&"_;2!%P$`@4$`7#A@``$X@```@*$2(#C```$XX`!`@2$2'$@`$,F`
M00`4.&$`S$@`(46`00`4@&$`S#B!`-!(`"%=@$$`%("!`-`X>``@2``F18!!
M`!2`80#02``A:8!!`!2`80#,2``AA8!!`!1+__U$+!H``$""_KB`81(0B!T`
M`CM:``&380!D+````))A`%B080$,D^$!"$&"`!2`81(D.(``=4@`(V6`00`4
M.&$!"#B!`1!(`"6U@$$`%"P#__]`@O.42``>]8!!`!2``P``.&$!"#B!`1`L
M```$0(+S>'RR1*I\L46J2``E@8!!`!0L`___08+_T(`!`%@L```J08+SD$O_
M\UR('0`"+````$&"`!2`81(H.(``;D@`(NV`00`4@!D``"P```!!@OR$@1<`
M]#A@``$X@```8@4``#C```$XX``]@2$2+$@`#YV`00`4.&$`U$@`(!F`00`4
M@&$`U#B!`-A(`"`Q@$$`%("!`-@X>``@2``E&8!!`!2`80#82``@/8!!`!2`
M80#42``@68!!`!2280!8.````4O_\L`L@]R@+````$"&`"!!@@`4@&$2,#B`
M`&E(`")-@$$`%)-A`&1+__$D08(`(#C!`%PX?`!\.(``<SB@``$XX``$2``>
MG8!!`!2`&0``+````$&"_3B!%P$$.3P!!#B\`6PX8``!.(```#C```$XX`!!
M2``.U8!!`!0X80#<2``?48!!`!2`80#<.($`X$@`'VF`00`4@($`X#AX`"!(
M`"11@$$`%(!A`.!(`!]U@$$`%(!A`-Q(`!^1@$$`%#@``"J0`0!82__W\(!Y
M``!(`#,Y@$$`%)!Z``!\`\``0('N-)+Z``"`O```@&$1V&.D``!(``#-@$$`
M%$O_[BR`F0``2``,96````!+_^X(.,$`6#A\`+PX@`!H.*```3C@``1(`!V]
M@$$`%(&!$H2``1*(@&$`6#@A$H!\"`.F?8"!(+FA_[1.@``@B!T``BP```!!
M@OQ\@&$2"#B``'%(`"$)@$$`%(`9```L````08+ZH$O__&@````````@0X`3
M`@`````````34``$;6%I;@```````(&"`%"000`4@`P``(!,``1\"0.F3H`$
M(```````#*```````````!B!@@!<D$$`%(`,``"`3``$?`D#IDZ`!"``````
M``R@```````````8OP'_X'P(`J:#P@!T.(``'X/B`'B0`0`(E"'Q\(@?``0[
MH```?+X$JCN```"8`07H?(D#ICAA!>E\HP6J.&,`($(`__B('P``?(D#IGRC
M]:J8`0GH.&$)Z7RC!:HX8P`@0@#_^(,"`'P[8```?*/UJH-8```XGP#<8T,`
M`$@`!Z5@````+`,``$&"`=1C0P``2``(P8!!`!0X`P`!*``#_X"8``!`@0!(
M.&$%Z#B@`_](``CQ8````("8```X80GH.*`#_T@`"-U@````.'\!`$@`"HF`
M00`4D'@``"P#``!!@@$T.V```4@``70X80GH.*`#_D@`"HU@````@)@``#AA
M!>@XH`/^2``*>6````"`>```.($`8$@`#"&`00`4+`,``$&``$"``0!H5``$
M)B@`0`!`@@`P.'\!)$@`"AV`00`4D'@``'QD&WE`@O^8.&$%Z#B@`_Y(``HI
M8````$@``!B`F```.&$%Z#B@`_Y(``H18````#AA!>@X@``O2__^,8!!`!0L
M`P``0((`)#A_`4A(``G%@$$`%)!X```L`P``08(`<#M@``%(``"PFZ,``#AA
M!>@X@0!@2``+?8!!`!0L`P``0(``)#A_`6Q(``F)@$$`%)!X```L`P``08(`
M-#M@``%(``!T@`$`:%0`!"8H`$``08(`9#A_`9!(``E9@$$`%)!X```L`P``
M0(+^U(""`)`Y/P)D.+\`G#A@``:!!``0.(```#C```$XX``$.4``I$@`"RF`
M00`4@8$.&(,!#?`X8``&."$.$'V(`Z:[0?_H3H``(#A@`#](``LI@$$`%(!X
M```XGP&T2``%L6`````L`P``0((`)#A_`*@X@`'`2``+*6`````X?P#`.(`!
MP$@`"QE@````.&``?T@`"N6`00`42``$W8!B`,R``P``+````$&"`-R#0@#0
M@!H``"P```!!@@`4+``0`$"```PX`!``D!H``(!X``!(`!JU@$$`%'Q\&WE`
M@@!T@'H``"P#``!!@@!(2``:P8!!`!1\?!MY08(`.#AA`$!(`!K5@$$`%(!A
M`$`X@0!$2``:[8!!`!2`80!$2``;"8!!`!2`80!`2``;)8!!`!2`8@#L@&,`
M`"P#``!!@@!(2``;-8!!`!1\?!MY08(`.#AA`$!(`!J!@$$`%(!A`$`X@0!$
M2``:F8!!`!2`80!$2``:M8!!`!2`80!`2``:T8!!`!2#0@"T@`(`](AZ``,H
M`P`'5&,6^GQ^&A2`8P`@?`,"%$&!`R1\"`.F3H``(#A@``B('P`(.(```7QI
M`Z9\O@2JD($`2)@!`-0X80#5?*,%JCAC`"!"`/_XDZ$`3#AA`$Q(`!JY@$$`
M%#AA`-1(`!K5@$$`%"P#``!!@@`4.&$`U#B?`'1(`!KE8````#AA`-1(``4I
M@$$`%#DC``$X```$.,$`2#A_`#PX@``$.*```SC@``0Y`0#4D`$`.#E!`$Q(
M`!BA@$$`%$@``GPX8``(B!\`##B```)\:0.F?+X$JI"!`$B8`0'8.&$!V7RC
M!:HX8P`@0@#_^).A`%`X80!02``:&8!!`!0X80'82``:-8!!`!0L`P``08(`
M%#B?`'PX80'82``:16`````X80'82``$B8!!`!0Y(P`!.```!#C!`$@X?P!$
M.(``!#B@``,XX``$.0$!V)`!`#@Y00!02``8`8!!`!1(``'<.&``"(@?`!`X
M@``#?&D#IGR^!*J0@0!(F`$"W#AA`MU\HP6J.&,`($(`__B3H0!4.&$`5$@`
M&7F`00`4.&$"W$@`&96`00`4+`,``$&"`!0XGP"$.&$"W$@`&:5@````.&$"
MW$@``^F`00`4.2,``3@```0XP0!(.'\`3#B```0XH``#..``!#D!`MR0`0`X
M.4$`5$@`%V&`00`42``!/#A@``B('P`4.R``!'QI`Z9\O@2JDR$`2)@!`^`X
M80/A?*,%JCAC`"!"`/_XDZ$`6#AA`%A(`!C9@$$`%#AA`^!(`!CU@$$`%"P#
M``!!@@`4.)\`C#AA`^!(`!D%8````#AA`^!(``-)@$$`%#DC``$XP0!(.'\`
M5#B```0XH``#..``!#D!`^`Y00!8DR$`.$@`%L6`00`42```H#A@``B('P`8
M.(``!WQI`Z9\O@2JD($`2)@!!.0X803E?*,%JCAC`"!"`/_XDZ$`7#AA`%Q(
M`!@]@$$`%#AA!.1(`!A9@$$`%"P#``!!@@`4.)\`E#AA!.1(`!AI8````#AA
M!.1(``*M@$$`%#DC``$X```$.,$`2#A_`%PX@``$.*```SC@``0Y`03DD`$`
M.#E!`%Q(`!8E@$$`%"P;``%`@@!LB!H``BP````L@``!+P``!"^```A!@@!4
M3$;3@D&"``A`G@!(.&$)Z$@``D6`00`4.\,``8.X``!CHP``2``",8!!`!0Y
M(P`!.'\`9#B``%0XH``".,$)Z&/'``!CJ```2``5M8!!`!1C@P``@8$.&#@A
M#A"[`?_@?8@#IDZ``"`````````@08`(``````=D`!!C87-?7W-E='5P7W1R
M86-E``!\"`*FE"'_L#AA`$"0`0!82``648!!`!2`8@!X@((`M#C```0XHP'8
M.&,`-$@`&%6`00`4D&$`2(!A`$!(`!AM@$$`%(!B`0A(`!B)@$$`%(!A`$B!
M@0!8."$`4'V(`Z9.@``@````````($&`````````9``98V%S7U]T<F%C95]R
M96=I<W1E<E]C=&-A<P```````````(%B`("!BP`$.```"'&,``]!@@"T?`$#
MIGR@&BM\X"(J08(`2'R%.$!_!D!`0(8`?$&:``Q,F```2```<'RC`BM\Y`(J
M08(`)#````A\A3A`?P9`0'RC`BM`A@!00)H`1'SD`BI`@O_D?`$"IBP```0@
M```(5``>^$&!`!1\I00P?.<$,'R%.$!(```<?(4X0'S&!#!]"`0P?P9`0$"&
M``Q,F```088`&$&%``PX8/__3H``(#A@``%.@``@.&```$Z``"`X8___.(3_
M_XBC``&(Q``!+`4``'R%,$!!@@`<C*,``4"&`!B,Q``!+`4``'R%,$!+___H
M088`$$&%`!0X8/__3H``(#A@``!.@``@.&```4Z``"````````P@0```````
M``$8``9S=')C;7"!@@"$D$$`%(`,``"`3``$?`D#IDZ`!"````````R@````
M```````8``````````!\9AMX?(,C>'S$,WA@````8````&````!@````8```
M`(%B`(!4H-E_@8L`!$"!`0AQC``/0*(!$'R#($!-A@`@080`$'P$*A1\@!A`
M084`C'!I``-!@@`\.(3__SC#__\A*0`$?2D#IHSD``&<Y@`!0@#_^'RI*!`X
MA/_].,;__7"H``=4I>C^?*D#ID@``!APJ``'5*7H_GRI`Z8XA/_\.,/__(3D
M``2%)``$E.8`!)4F``1"`/_P38(`('T)`Z8XA``#.,8``XSD``&<Y@`!0@#_
M^$Z``"!\PRH4?.0J%'#(``-!@@`8?0D#IHTG__^=)O__0@#_^'RH*!!PJ``'
M5*7H_GRI`Z:%)__\A4?__)4F__R51O_\0@#_\$V"`"!]"0.FC2?__YTF__]"
M`/_X3H``('RA`Z9\H"0J?*`=*DZ``"!\A!A`0(0`#'U$*!1\@U!`?`D#IC@`
M`"!\`0.F5*`&_Y!A`!A\9!@0080`*'R@)"I\HR4J,(0`($(`__1\`0.F?*`D
M*GRC)2J`80`83H``('R$*!0PA/_@?*`D*GRC)2I"`/_T?(`@$'P!`Z9\H"0J
M?*,E*H!A`!A.@``@```````,($`````````!P``%8F-O<'D`@8(`B)!!`!2`
M#```@$P`!'P)`Z9.@`0@```````,H```````````&(%B`("!BP`$.,``''&,
M``\X`/_D08(`?'S!`Z8P```<-*7_Y$"!`%1\Q`(K?,,%*D""_^PPI0`<?,$"
MIGP&`!1\IB@0..``"'SA`Z8XX```.0```#2E__A`@0`0?.,%*C````A+___P
M,*4`"'RA`Z9\XP4J3H``(#"E`!Q\H0.F?,0"*WS#!2I!@O^P3H``("^%``!4
M@`>_+(```B\```-\J0.F39X`(#"$__\PH___08(`2$&&`!Q!F@`LC.0``2P'
M``"<Y0`!3D``($&"`*R-!``!+`@``)T%``%.0``@08(`I(TD``$L"0``G24`
M`4Y``"!!@@"<C,0``8SD``&-!``!C20``2P&```LAP``+P@``"^)``"<Q0`!
M3D``($&"`$R<Y0`!3D``($&&`$R=!0`!3D``($&:`$R=)0`!3D``($&>`$R,
MQ``!C.0``8T$``&-)``!+`8``"R'```O"```+XD``$O__["<Q0`!0@#__$Z`
M`""<Y0`!0@#__$Z``""=!0`!0@#__$Z``""=)0`!0@#__$Z``"````````P@
M0`````````&<``=S=')N8W!Y````@8(`C)!!`!2`#```@$P`!'P)`Z9.@`0@
M```````,H```````````&(&"`)2000`4@`P``(!,``1\"0.F3H`$(```````
M#*```````````!B!@@"8D$$`%(`,``"`3``$?`D#IDZ`!"````````R@````
M```````8?`@"IK_!__B0`0`(E"'_H)"!`$B080!$.^```$@`#CV`00`4+`,`
M`(!A`$2`@0!(@*(`D(/"`*!`@`!4@^4`4$@`#D&`00`4@4,``#B^`$0X8`!I
M.(```#C```$XX``48^@``($A`$1+__])@$$`%#O@`&ECXP``@8$`:#@A`&"[
MP?_X?8@#ID@``&1(``X=@$$`%"P#``"`8@"00(``/(/C`$A(``W=@$$`%(%#
M```XO@!0.&``:3B````XP``!..``$F/H``"!(0!$2__^Y8!!`!0[X`!I8^,`
M`(&!`&@X(0!@N\'_^'V(`Z9.@``@````````($&``@(``````````/``%6-A
M<U]?8W)E871E7V1I<F5C=&]R>0"3X?_\?`@"IGQ_&WF0`0`(E"'_P$&"`%PX
M@```@+\`("P%``!!@@`D@'\`)"P#``!!@@`82``-@8!!`!2`?P`D2``-G8!!
M`!1CXP``.(```#B@`"A(``UA@$$`%(&!`$@X(0!`@^'__'V(`Z9.@``@@^$`
M/#@A`$!.@``@````````($&``0$``````````'P`$F-A<U]?<F5L96%S95]X
M9&%T88"B`+1\"`*FD^'__(/B`*"(I0`"D`$`")0A_[`X80!$+`4``"R%``$O
M!0`$+X4`"#B?``PX````08(`;$Q&TX)!@@`(0)X`8'RD/*I\HSVJF`$`2T@`
M#0V`00`4D&$`0#AA`$1+__E]@$$`%#CC``$Y`0!`.'\`!#B```(XH``".,$`
M1#D@``1(``T!@$$`%(&!`%@X(0!0@^'__'V(`Z9.@``@@^$`3#@A`%!.@``@
M````````($&``0``````L``/8V%S7U]T<F%C95]E>&ET````?`@"IK_!__B0
M`0`(E"'_P#O```!@?P``2__X]8!!`!0T@___?'\:%#B$__\XO___.]X``4"!
M`#A\'B``B`/__XC%``$[W@`!G`4``3B$__^<P___0(``&'P>(`"(`___B,4`
M`3O>``%+___@@8$`2#@A`$"[P?_X?8@#IDZ``"`````````@08`"`0``````
M````@``,8V%S7U]R979E<G-E``!\"`*F8(4``'QJ&WD\P&9FE"'_P)`!`$@X
MAF9G..```#D```!,@```.27__SCG``$X````0(``"'U*`-!52P_^84,``$@`
M,0-\8Q9P?&-:%'QK&WD<8P`*?4-0$$"!`&@XAF9G86,``$@`,0,XB@`P56@/
M_GQC%G!\8T(4G(D``6#H```<@P`*..<``7U$6!!\:QMY0($`,#B&9F=A8P``
M2``Q`SB*`#!5:`_^?&,6<'QC0A2<B0`!8.@``!R#``I+___(8*,``#B*`#"<
MB0`!.(``+4"$``Q\A3FN..@``GP%.:Y+__YY@8$`2#@A`$!]B`.F3H``(```
M`````"!!@``"``````````#X``EC87-?7VET;V$`?`@"IK_!__B#P@"@D`$`
M")0A_T`[X```.'X!)#B!`$!+__L9@$$`%(`!`$@L`P``.'X!/%0$!"8H@`'H
M*P1``$&``)PX@`'H09H`($@`"M6`00`4.($`0#A^`*A+__K=@$$`%$@``(@X
M?@%4088`:$@`">F`00`4?'\;>8!B`)!!@@!4@^,`2$@`":F`00`4@4,``#D^
M`6PX8`!I.+X`=#B````XP``!..``$F/H``!+__JQ@$$`%#O@`&ECXP``@8$`
MR#@A`,"[P?_X?8@#IDZ``"`L'P`!0((`?#B!`$`X?@"H2__Z58!!`!2``0!(
M+`,``#A^`80X@`'H5``$)H#"`)`H@$``.+X`@$&```A!A@`\@08`5#A@`&DX
MP``!.(```#C@`!5+__HY@$$`%#O@`&ECXP``@8$`R#@A`,"[P?_X?8@#ID@`
M`'1+__IE8'\``#A^`9PL'P``0((`3$@`">F`00`4+`,``(!B`)!`@``X@^,`
M8$@`"+F`00`4@2,``#B^`(PX8`!I.(```#C```$XX``88^@``$O_^<6`00`4
M.^``:6/C``"!@0#(."$`P+O!__A]B`.F3H``(````````"!!@`(``````<``
M'&-A<U]?8VAE8VM?8W5R<F5N=%]D:7)E8W1O<GD``'P(`J:_P?_X@\(`H)`!
M``B4(?]`.^```#A^`>0X@0!`2__Y*8!!`!2``0!(+`,``#A^`@!4!`0F5``%
M_BB``?\K!$``08``B#B``?]!F@`@2``(X8!!`!0X@0!`.'X`F$O_^.F`00`4
M2```=#A^`AQ!A@!42``']8!!`!1\?QMY@&(`D$&"`$"#XP!(2``'M8!!`!2!
M0P``.3X".#A@`&DXO@!<.(```#C```$XX``28^@``$O_^+V`00`4.^``:4@`
M`3`L'P`!0((`V#B!`$`X?@"82__X=8!!`!2``0!(+`,``#A^`-PX@0!`5``$
M)H#"`)`H@$``.+X`:$&```A!A@`\@08`5#A@`&DXP``!.(```#C@`!5+__A9
M@$$`%#O@`&ECXP``@8$`R#@A`,"[P?_X?8@#ID@``,Q+__@-@$$`%(`!`$@L
M`P``.'X`]%0`!"8H@$``08``"$&&`"1`@@`,2``'S8!!`!0X@`'_.'X!#$O_
M^$U\?QMY0((`=#B``?\X?@)42__X.7Q_&WDX@0!`.'X"<$""`%A(```4+!\`
M`#B!`$`X?@)P0((`1$O_]YF`00`4@`$`2'Q_&WDX?@*,5``$)BB`0`!!@``(
M088`($""``Q(``=9@$$`%#B``?\X?@*H2__WV6!_``!CXP``@8$`R#@A`,"[
MP?_X?8@#IDZ``"`````````@08`"``````((`!UC87-?7V-H96-K7W-O8VME
M=%]D:7)E8W1O<FEE<P"_H?_T?`@"IH"B`*!\?AMY8)\``)`!``@Y)0&T.Z``
M`)0A_["!8@"0.&``!#BE`!0XP``!.(```$&"`B2`'@``+!\``#C@``8L@```
M*P``)$&&`!!A:```@4(`H$""`"R!"P`82__VU8!!`!0[H``$8Z,``(&!`%@X
M(0!0NZ'_]'V(`Z9(``'L8^,``#B@`"@XX``,.2H!S$"8`#2!"``P.*H`+#A@
M``=+__:1@$$`%#N@``=CHP``@8$`6#@A`%"[H?_T?8@#IDZ``"!(``6-@$$`
M%(/>``0X80!`.*``!&/$``!+__*58````(`!`$`[W@`$8\0``#AA`$"0'P``
M.*``!$O_\G5@````@`$`0#O>``1CQ```.&$`0)`?``0XH``$2__R56````"`
M`0!`.]X`!&/$```X80!`D!\`"#B@``1+__(U8````(`!`$`[W@`$8\0``#AA
M`$"0'P`,.*``!$O_\A5@````@`$`0#O>``1CQ```.&$`0)`?`!`XH``$2__Q
M]6````"``0!`.]X`!&/$```X80!`D!\`%#B@``1+__'58````(`!`$`[W@`$
M8\0``#AA`$"0'P`8.*``!$O_\;5@````@`$`0#O>``1CQ```.&$`0)`?`!PX
MH``$2__QE6````"`80!`.]X`!)!_`"`L`P``08(`8$@`!4F`00`4@*(`H"P#
M``"0?P`D@.(`D#DE`Q`XP``!.*4`.#B```!`@@`D@0<`$#A@``8Y0`#/..``
M!$O_]/V`00`4.Z``!D@``!1CQ```@+\`($O_\25@````8Z,``(&!`%@X(0!0
MNZ'_]'V(`Z9.@``@````````($&``P(``````````G0`%&-A<U]?=6YM87)S
M:&%L7WAD871A``"_@?_P?`@"IH"B`*!\?QMY8)X``)`!``@Y)0"X.X```)0A
M_Z"!`@"0.&``!#BE`-`XP``!.(```$&"`<0XX``&+!X``$""`"2!"``82__T
M38!!`!2!@0!H."$`8+N!__!]B`.F2``!K(!_`"`X8P`DD'X``$@`!#6`00`4
M+`,``)!^``2`'P``8'T``#B!`$`XH``$@,(`H$""`#R`H@"0.28"Q).>```X
M8``&@04`$#BF`"`X@```.,```3E``&<XX``$2__SU8!!`!0[@``&2``!+)`!
M`$!+__`!8````(`?``0[W0`$8\,``#B!`$"0`0!`.*``!$O_[^%@````@!\`
M"#O=``ACPP``.($`0)`!`$`XH``$2__OP6````"`'P`,.]T`#&/#```X@0!`
MD`$`0#B@``1+_^^A8````(`?`!`[W0`08\,``#B!`$"0`0!`.*``!$O_[X%@
M````@!\`%#O=`!1CPP``.($`0)`!`$`XH``$2__O86````"`'P`8.]T`&&/#
M```X@0!`D`$`0#B@``1+_^]!8````(`?`!P[W0`<8\,``#B!`$"0`0!`.*``
M!$O_[R%@````@!\`(#O=`"!CPP``.($`0)`!`$`XH``$2__O`6````"`OP`@
M.'T`)"P%``!!@@`0@)\`)$O_[N5@````8X,``(&!`&@X(0!@NX'_\'V(`Z9.
M@``@````````($&`!`(``````````A0`$F-A<U]?;6%R<VAA;%]X9&%T83@`
M``"`I```D`,``)"C``2`I```+`4``$&"``B090``D&0``$Z``"`````````@
M0````@``````````*``78V%S7U]A9&1?96QE;5]T;U]D;&QI<W0```"``P`$
M@*,``#C````Y(```+`4``"R````Y````..```$&&`#1!@@`@D`4`!(`#``"`
M@P`$D`0``)##``"0PP`$3H``()`$``"`@P`$D20``$@``!Q!@@`4D.4`!)##
M``"0PP`$3H``()$$``"0PP``D,,`!$Z``"`````````@0````@``````````
M>``98V%S7U]R96U?96QE;5]F<F]M7V1L;&ES=```````@8(`G)!!`!2`#```
M@$P`!'P)`Z9.@`0@```````,H```````````&(&"`*2000`4@`P``(!,``1\
M"0.F3H`$(```````#*```````````!B!@@"HD$$`%(`,``"`3``$?`D#IDZ`
M!"````````R@```````````8@8(`K)!!`!2`#```@$P`!'P)`Z9.@`0@````
M```,H```````````&(&"`+"000`4@`P``(!,``1\"0.F3H`$(```````#*``
M`````````!B!@@"XD$$`%(`,``"`3``$?`D#IDZ`!"````````R@````````
M```8@8(`O)!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```````````&(&"
M`,"000`4@`P``(!,``1\"0.F3H`$(```````#*```````````!B!@@#$D$$`
M%(`,``"`3``$?`D#IDZ`!"````````R@```````````8@8(`R)!!`!2`#```
M@$P`!'P)`Z9.@`0@```````,H```````````&(&"`-2000`4@`P``(!,``1\
M"0.F3H`$(```````#*```````````!B!@@#8D$$`%(`,``"`3``$?`D#IDZ`
M!"````````R@```````````8@8(`W)!!`!2`#```@$P`!'P)`Z9.@`0@````
M```,H```````````&(&"`."000`4@`P``(!,``1\"0.F3H`$(```````#*``
M`````````!B!@@#DD$$`%(`,``"`3``$?`D#IDZ`!"````````R@````````
M```8@8(`Z)!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```````````&(&"
M`/"000`4@`P``(!,``1\"0.F3H`$(```````#*```````````!B!@@#XD$$`
M%(`,``"`3``$?`D#IDZ`!"````````R@```````````8@8(`_)!!`!2`#```
M@$P`!'P)`Z9.@`0@```````,H```````````&(%B`("!BP`$.```('&,``]!
M@@`H?`$#IGR@(BM\H!TJ38(`('RD`BM\HP4J,```($""__1.@``@<(L``SU`
M?W\A:P`$.4I_?WUI`Z9\91MX08(`((C$```L!@``F,4``#B$``%-@@`@.*4`
M`4(`_^B`Y```,*7__'SI4#A]*5`4?2Q0^4""`#2%!``$E.4`!'T)4#A]*5`4
M?2Q0^4""`"R$Y``$E04`!'SI4#A]*5`4?2Q0^4&"_]!]*3CX?2E0>4&"_\1(
M```4?2E`^'TI4'E!@O_,?0=#>#BE``-TYO\`5.=`/ISE``%`@O_T3H``(```
M````#"!``````````/``!G-T<F-P>8&"`0"000`4@`P``(!,``1\"0.F3H`$
M(```````#*```````````!B!@@$$D$$`%(`,``"`3``$?`D#IDZ`!"``````
M``R@```````````8@8(!#)!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```
M````````&(&"`12000`4@`P``(!,``1\"0.F3H`$(```````#*``````````
M`!B!@@$<D$$`%(`,``"`3``$?`D#IDZ`!"````````R@```````````8@8(!
M))!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```````````&```````````
M@6(`@(&+``0X```@<8P`#T&"`$A\`0.F?*`:*T&"`!!\HP(K,```($""__A\
MP0*F,,;_WWP&`!0XP``@?,$#IGR@(BM\HP4J.(0`(#```"!`@O_P3H``('!K
M``,]0']_(6L`!#E*?W]]:0.F..,``$&"`!B(QP``+`8``$&"`%`XYP`!0@#_
M\#CG__R%!P`$?0E0.'TI4!1]+%#Y0((`&(4'``1]"5`X?2E0%'TL4/E!@O_<
M?2E`^'TI4'E!@O_0?2L`-%5KZ/Y\YU@4<(L``R%K``1]:0.F08(`((C$```L
M!@``F,<``#B$``%-@@`@..<``4(`_^B`I```,.?__'RI4#A]*5`4?2Q0^4""
M`#2%!``$E*<`!'T)4#A]*5`4?2Q0^4""`"R$I``$E0<`!'RI4#A]*5`4?2Q0
M^4&"_]!]*2CX?2E0>4&"_\1(```4?2E`^'TI4'E!@O_,?05#>#CG``-TIO\`
M5*5`/IRG``%`@O_T3H``(```````#"!``````````7@`!G-T<F-A=(&"`2B0
M00`4@`P``(!,``1\"0.F3H`$(```````#*```````````!B!@@$LD$$`%(`,
M``"`3``$?`D#IDZ`!"````````R@```````````8@8(!,)!!`!2`#```@$P`
M!'P)`Z9.@`0@```````,H```````````&(&"`32000`4@`P``(!,``1\"0.F
M3H`$(```````#*```````````!B_(?_D?`@"IH/B`3A]@``F8'X``#N@``"1
M@0`$D`$`")0AWU!@G```DZ$`0#AA`%`XGP&82__[G6````"#(@"TB!D``BP`
M```L@``(3$(S0D&"`"PX80!02__ER8!!`!0XXP`!.'\`1#B``#PXH``!.,$`
M4$O_^56`00`4.&$`D#B````XH!``2__XR8!!`!17P`;^5\3H^CA@``%_82(4
M?'H`,(`;`)`X81"0.(```'P`TW@XH!``D!L`D$O_^)6`00`4@!L0D#A@`#R0
M80!(DZ$`3#A^``%_0`-XD!L0D#CA`$@X@0"0.*```#C!$)!(``S!@$$`%)!A
M`$`L`P``0(``N(!B`)"#PP`<2__W]8!!`!2!0P``.3\`P#A@``HXOP$H.(``
M`#C```$XX``'8\@``$O_Z/V`00`4.```"HAY``"0`0!`.`/__R@```%`@0`@
M+`,``"R#``0O`P`(3,81`DQ"TT)!A@`(08(%2#AA`%!+_^2M@$$`%#CC``$Y
M`0!`.'\`3#B``#XXH``".,$`4#D@``1+__@Q@$$`%(@9``(L````+(``"$Q"
M,T)!@@5(2``%%$""`$B`P@"0.+\!-#A@`&8X@```@08`)#C```$XX``)2__H
M68!!`!0X``!FD`$`0(@9``(L````+(``"$Q",T)!@@4`2``$S).A`$"`&Q"0
M?T``.4""`#2`&P"0?`#0.4&"`"@X`$``.V``!'P`@2`[00!$8\,``#B!`$0X
MP```.*``!$@``#2`P@"0.+\!0#A@``HX@```@08`(#C```$XX``(2__GU8!!
M`!0X```*D`$`0$@`!$A(``MI@$$`%"P#``!`@`"\2__V@8!!`!2``P``+```
M!$&"`+B`8@"0@V,`'$O_]F6`00`4@4,``#D_`*0X8``*.+\!3#B````XP``!
M..``!V-H``!+_^=M@$$`%#B```J(>0``D($`0#@#__\H```!0($`("P#```L
M@P`$+P,`"$S&$0),0M-"088`"$&"`&0X80!02__C'8!!`!0XXP`!.0$`0#A_
M`&0X@``^.*```CC!`%`Y(``$2__VH8!!`!2`@0!`2```+']CV!`N&P``?UH:
M%$&"`HACPP``8T0``&-E```XP```0)+_&("!`$`L!```0((#4(!A`$20?```
M+`,``$""`""3H0!`B!D``BP````L@``(3$(S0D&"`VQ(``,X2__VK8!!`!20
M?``$+`,``$""`*R`@@"0.3\!K#B_`60X8``&@00`$#B````XP``!..``!#E`
M`/Q+_^9E@$$`%#@```:(>0``D`$`0#@#__\H```!0($`("P#```L@P`$+P,`
M"$S&$0),0M-"088`"$&"`K`X80!02__B%8!!`!0XXP`!.0$`0#A_`'0X@``^
M.*```CC!`%`Y(``$2__UF8!!`!2(&0`"+````"R```A,0C-"08("L$@``GR#
M7```8'L``"P:``!.````08("(&/#``!C9```.,```&-%``!(``EE@$$`%"P#
M``!`@`'<2__T?8!!`!2``P``+```!$&"`=B`8@"0@\,`'$O_]&&`00`4@4,`
M`#D_`*PX8``*.+\!<#B````XP``!..``!V/(``!+_^5I@$$`%#B```J(>0``
MD($`0#@#__\H```!0($`("P#```L@P`$+P,`"$S&$0),0M-"088`"$&"`80X
M80!02__A&8!!`!0XXP`!.0$`0#A_`'PX@``^.*```CC!`%`Y(``$2__TG8!!
M`!2`@0!`2``!3(#"`)`XOP%\.&``"CB```"!!@`L.,```3C@``M+_^39@$$`
M%#B```J(>0``D($`0#@#__\H```!0($`("P#```L@P`$+P,`"$S&$0),0M-"
M088`"$&"`/0X80!02__@B8!!`!0XXP`!.0$`0#A_`(0X@``^.*```CC!`%`Y
M(``$2__T#8!!`!2`@0!`2```O(#"`)`XOP%8.&``"CB```"!!@`L.,```3C@
M``M+_^1)@$$`%#B```J(>0``D($`0#@#__\H```!0($`("P#```L@P`$+P,`
M"$S&$0),0M-"088`"$&"_4`X80!02__?^8!!`!0XXP`!.0$`0#A_`&PX@``^
M.*```CC!`%`Y(``$2__S?8!!`!2`@0!`2__]"']#T!`N&@``?WL:%$&"_M1C
MPP``8V0``&-%```XP```0)+]^("!`$`L!```08(`+(`<```L````08(`&(!\
M``0L`P``08(`#$O_\M6`00`4D[P``).\``2(&0`"+````"R```A,0C-"08(`
M-#AA`%!+_]]5@$$`%#CC``$Y`0!`.'\`C#B``#TXH``".,$`4#D@``1+__+9
M@$$`%(!A`$"!@2"T@`$@N#@A(+!\"`.F?8"!(+LA_^1.@``@````````($.`
M!P(`````````!Q@`$6-A<U]?<F5C96EV95]D871A`+\A_^1\"`*F@^(!.&!^
M```[H```D`$`")0AWU!@G```DZ$`0#AA`%`XGP&(2__T96````"#(@"TB!D`
M`BP````L@``(3$(S0D&"`"PX80!02__>D8!!`!0XXP`!.'\`V#B``#PXH``!
M.,$`4$O_\AV`00`4.&$`D#B````XH!``2__QD8!!`!17P`;^5\3H^CA@``%_
M82(4?'H`,(`;`)`X81"0.(```'P`TW@XH!``D!L`D$O_\5V`00`4@!L0D#A@
M`#R080!(DZ$`3#A^``%_0`-XD!L0D#CA`$@X@```.*$`D#C!$)!(``6)@$$`
M%)!A`$`L`P``0(``N(!B`)"#PP`<2__PO8!!`!2!0P``.3\`M#A@``HXOP#,
M.(```#C```$XX``'8\@``$O_X<6`00`4.```"HAY``"0`0!`.`/__R@```%`
M@0`@+`,``"R#``0O`P`(3,81`DQ"TT)!A@`(08($C#AA`%!+_]UU@$$`%#CC
M``$Y`0!`.'\`##B``#XXH``".,$`4#D@``1+__#Y@$$`%(@9``(L````+(``
M"$Q",T)!@@2,2``$6$""`*2`P@"0.+\`X#A@`&8X@```@08`)#C```$XX``)
M2__A(8!!`!0X``!FB'D``)`!`$`X`___*````4"!`"`L`P``+(,`!"\#``A,
MQA$"3$+30D&&``A!@@/H.&$`4$O_W-&`00`4..,``3D!`$`X?P`$.(``/CB@
M``(XP0!0.2``!$O_\%6`00`4B!D``BP````L@``(3$(S0D&"`^A(``.TDZ$`
M0(`;$)!_0``Y0((`M(`;`)!\`-`Y08(`J(`<```X@0!$8\,``#B@``20`0!$
M.,```$@`!#F`00`48&H``"@#``1!@@'P+`H``(!B`)!`@`%$@\,`'$O_[Q6`
M00`4@4,``#D_`)0X8``*.+\`^#B````XP``!..``!V/(``!+_^`=@$$`%#@`
M``J(>0``D`$`0#@#__\H```!0($`Q"P#```L@P`$+P,`"$S&$0),0M-"088`
MK$&"`N1(``"D@,(`D#B_`.PX8``*.(```($&`"`XP``!..``"$O_W\&`00`4
M.```"HAY``"0`0!`.`/__R@```%`@0`@+`,``"R#``0O`P`(3,81`DQ"TT)!
MA@`(08("B#AA`%!+_]MQ@$$`%#CC``$Y`0!`.'\`%#B``#XXH``".,$`4#D@
M``1+_^[U@$$`%(@9``(L````+(``"$Q",T)!@@*(2``"5#AA`%!+_]LI@$$`
M%#CC``$Y`0!`.'\`'#B``#XXH``".,$`4#D@``1+_^ZM@$$`%$@``@R!`P`H
M.+\!!#A@``HX@```.,```3C@``HY(``$2__>[8!!`!0X```*B'D``)`!`$`X
M`___*````4"!`"`L`P``+(,`!"\#``A,QA$"3$+30D&&``A!@@&T.&$`4$O_
MVIV`00`4..,``3D!`$`X?P`D.(``/CB@``(XP0!0.2``!$O_[B&`00`4B!D`
M`BP````L@``(3$(S0D&"`;1(``&`@)P`!("\``!CPP``.,```$@``BF`00`4
M8&H``($\``!\`T@`08(!1"P*``"`8@"00(``M(/#`!Q+_^T!@$$`%(%#```Y
M/P"<.&``"CB_`1`X@```.,```3C@``=CR```2__>"8!!`!0X```*B'D``)`!
M`$`X`___*````4"!`"`L`P``+(,`!"\#``A,QA$"3$+30D&&``A!@@#0.&$`
M4$O_V;F`00`4..,``3D!`$`X?P`L.(``/CB@``(XP0!0.2``!$O_[3V`00`4
MB!D``BP````L@``(3$(S0D&"`-!(``"<@0,`*#B_`1PX8``*.(```#C```$X
MX``*2__=;8!!`!0X```*B'D``)`!`$`X`___*````4"!`"`L`P``+(,`!"\#
M``A,QA$"3$+30D&&``A!@@`T.&$`4$O_V1V`00`4..,``3D!`$`X?P`T.(``
M/CB@``(XP0!0.2``!$O_[*&`00`4B!D``BP````L@``(3$(S0D&"`#0X80!0
M2__8V8!!`!0XXP`!.0$`0#A_`#PX@``].*```CC!`%`Y(``$2__L78!!`!2`
M80!`@8$@N#@A(+"[(?_D?8@#IDZ``"`````````@08`'`@`````````&3``.
M8V%S7U]S96YD7V1A=&&!@@$\D$$`%(`,``"`3``$?`D#IDZ`!"````````R@
M```````````8@8(!0)!!`!2`#```@$P`!'P)`Z9.@`0@```````,H```````
M````&(&"`42000`4@`P``(!,``1\"0.F3H`$(```````#*```````````!B!
M@@%(D$$`%(`,``"`3``$?`D#IDZ`!"````````R@```````````8@8(!4)!!
M`!2`#```@$P`!'P)`Z9.@`0@```````,H```````````&(&"`52000`4@`P`
M`(!,``1\"0.F3H`$(```````#*```````````!B!@@%8D$$`%(`,``"`3``$
M?`D#IDZ`!"````````R@```````````8@8(!7)!!`!2`#```@$P`!'P)`Z9.
M@`0@```````,H```````````&(&"`6"000`4@`P``(!,``1\"0.F3H`$(```
M````#*```````````!B!@@%DD$$`%(`,``"`3``$?`D#IDZ`!"````````R@
M```````````8``````````````````````````````````````````````;<
M```#Q```!&0```4$```%I```!MP```;<```&0```````````````````````
M```````````````````````+1```#?0``!"H```0J```$*@``!%````/9```
M#V0```]D```/9```#?1)0DT@24)-($E"32!)0DT@("`@`$`H(RDR,R`@,2XT
M("!S<F,O8F]S+W5S<B]C8W,O;&EB+VQI8G!T:')E861S+VEN:70N8RP@;&EB
M<'1H+"!B;W,U,3`@."\Q.2\Y.2`Q,CHR,#HQ-`````!`*",I-C$),2XQ-"`@
M<W)C+V)O<R]U<W(O8V-S+VQI8B]L:6)C+U]?=&AR96%D<U]I;FET+F,L(&QI
M8F-T:')D+"!B;W,U,3`@-R\Q,2\P,"`Q,CHP-#HQ-````"``?:@@`'V<````
M```````@``PT`````````````````````$]&1@!/3@``(``,P%]314,`````
M7U-%0P````!?4T5#`````%]314,`````7U-%0P````!?4T5#`````%]314,`
M````7U-%0P````!?4T5#`````%]314,`````7U-%0P````!?4T5#`````%]3
M14,`````7U-%0P````!?4T5#`````%]314,`````7U-%0P````!?4T5#````
M`%]314,`````7U-%0P````!?4T5#`````&-T8V%S````8W1C87,```!C=&-A
M<P```&-T8V%S````8W1C87,```!C=&-A<P```&-T8V%S````8W1C87,```!C
M=&-A<P```&-T8V%S````8W1C87,```!F.FPZ<SIV`&-T8V%S+F-A=````&-T
M8V%S+F-A=````&-T8V%S+F-A=````&-T8V%S+F-A=````&-T8V%S+F-A=```
M`&-T8V%S+F-A=````&-T8V%S+F-A=````&-T8V%S+F-A=````&-T8V%S+F-A
M=````"\N8F]B:&5M86YT<F%V:7-E<F)A;@```"5:)25-)2`@("5))2`@("57
M)2`E1R4@)54E```O=F%R+V-T+TE7+W-O8R]C=&-A<R]S97)V97(`"B,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(`HC($QI8V5N<V5D($UA=&5R:6%L<R`M
M(%!R;W!E<G1Y(&]F($E"32`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@(R`*(R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(",@"B,@-3<V-2U%-C$@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*
M(R`H0RD@0T]065))1TA4($EN=&5R;F%T:6]N86P@0G5S:6YE<W,@36%C:&EN
M97,@0V]R<"X@,3DY-BPR,#`Q("`@("`@(",@"B,@06QL(%)I9VAT<R!297-E
M<G9E9"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R!54R!'
M;W9E<FYM96YT(%5S97)S(%)E<W1R:6-T960@4FEG:'1S("T@57-E+"!D=7!L
M:6-A=&EO;B!O<B`@("`@("`@(",@"B,@9&ES8VQO<W5R92!R97-T<FEC=&5D
M(&)Y($=302!!1%`@4V-H961U;&4@0V]N=')A8W0@=VET:"!)0DT@0V]R<"X@
M("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,@"@H``````````0``+W9A<B]C="])5R]R=6XO8W1C
M87,O8W1S=')T8V%S9"YT<F%C90``````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````%]314,Z26YF;STQ````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````````````````````````````````````@`!MX
M26YF;P````!!4$D`4&5R9@````!?4T5#`````%]314,`````7U-%0P````!?
M4T5#`````%]314,`````7U-%0P````!?4T5#`````$5R<F]R<P``=6YK;F]W
M;@!U;FMN;W=N`'5N:VYO=VX`=6YK;F]W;@!U;FMN;W=N`&-T8V%S+F-A=```
M`"]V87(O8W0O25<O;&]G+V-T<V5C`````"]V87(O8W0O25<O;&]G+V-T<V5C
M+V-T8V%S9``O=F%R+V-T+TE7+VQO9R]C='-E8R]C=&-A<V0O=')A8V4````O
M=F%R+V-T+TE7+VQO9R]C='-E8R]C=&-A<V0O=')A8V4````O=F%R+V-T+TE7
M+VQO9R]C='-E8R]C=&-A<V0O=')A8V4````O=F%R+V-T+TE7+VQO9R]C='-E
M8R]C=&-A<V0O=')A8V4````O=F%R+V-T+TE7+VQO9R]C='-E8R]C=&-A<V0O
M=')A8V4````O=F%R+V-T+TE7+VQO9R]C='-E8R]C=&-A<V0O=')A8V4````O
M=F%R+V-T+TE7+VQO9R]C='-E8R]C=&-A<V0O=')A8V4`````````(``8Y```
M`````````````2``&*````````````````(@`!B8```````````````#(``8
MI```````````+W!R;VIE8W0O<W!R96QR:6<O8G5I;&0O<G)I9W0Q9FPO<W)C
M+W)S8W0O<V5C=7)I='DO0T%3+V)I;B]C=&-A<U]T<F%C92YC`````"]P<F]J
M96-T+W-P<F5L<FEG+V)U:6QD+W)R:6=T,69L+W-R8R]R<V-T+W-E8W5R:71Y
M+T-!4R]B:6XO8W1C87-?=')A8V4N8P````!N;U]C871S(#T]('-I>F5O9BAC
M87-?7W1R86-E7V1E=&%I;%]L979E;',I+W-I>F5O9BAC87-?7W1R86-E7V1E
M=&%I;%]L979E;'-;,%TI`$`H(RDY-B`@(#$N-B`@('-R8R]R<V-T+W-E8W5R
M:71Y+T-!4R]B:6XO8W1C87-?=')A8V4N8RP@8W1S96,L(')S8W1?<G)I9RP@
M<G)I9W0Q9FL@.2\R,R\P,B`Q-3HP-SHR-P`*(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,@"B,@3&EC96YS960@36%T97)I86QS("T@4')O<&5R='D@;V8@
M24)-("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`C(`HC("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@(R`*(R`U-S8U+44V,2`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M(",@"B,@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`C(`HC("A#*2!#3U!94DE'
M2%0@26YT97)N871I;VYA;"!"=7-I;F5S<R!-86-H:6YE<R!#;W)P+B`Q.3DV
M+#(P,#$@("`@("`@(R`*(R!!;&P@4FEG:'1S(%)E<V5R=F5D("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(",@"B,@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`C(`HC(%53($=O=F5R;FUE;G0@57-E
M<G,@4F5S=')I8W1E9"!2:6=H=',@+2!5<V4L(&1U<&QI8V%T:6]N(&]R("`@
M("`@("`@(R`*(R!D:7-C;&]S=7)E(')E<W1R:6-T960@8GD@1U-!($%$4"!3
M8VAE9'5L92!#;VYT<F%C="!W:71H($E"32!#;W)P+B`@(",@"B,@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`C(`HC(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R`*"@```````"``(,@@`""D(``HS"``(70@`"'\(``@X"``)(P@`"/8(``H
M""``(00@`"=0(``B+"``)=`@`"3,(``BP"``(O@@`"9@(``FK"``*&@@`"04
M(``EC"``(9P@`"88(``F^"``)Z@@`",P(``R/"``9:0@`#6<(``WU"``*O@@
M`##4(``]""``/^0@`#I0(`!80"``,^`@`%'@(`!.R"``2+@@`$6\(`!B0"``
M7N`@`"R`(``M6"``+E@@`&D4(`!LS"``5/P@`$NX(`!"P"``6X@@`"$H(``E
M3"``(4P@`"10(``I-"``(V@@`"]T(``KN"``((@@`"!H(``AS"``*C@@`".@
M(``IH"``(HP@`")<(``E#`````!34D,@<WES=&5M("4Q)',@:7,@<W1A<G1I
M;F<N"@```%-20R!S>7-T96T@)3$D<R!I<R!A8W1I=F4N"@`R-C4Q+3`P,2!)
M;F9O<FUA=&EO;F%L(&UE<W-A9V4@,2X```!297-E<G9E9#H@1$\@3D]4(%53
M12$````R-C4Q+3`P-"!#;VYF:6=U<F%T:6]N(&9I;&4@97)R;W(N```R-C4Q
M+3`P."!4:&4@8V]N;F5C=&EO;B!T:6UE9"!O=70N```R-C4Q+3$R-R!5;FEX
M($ED96YT:71Y(&UI<RUM871C:"X*```R-C4Q+3$R.2!4:&4@8W)E9&5N=&EA
M;',@:&%V92!E>'!I<F5D+@``,C8U,2TP,#(@8W1C87-D(&ES(&YO="!R=6YN
M:6YG(&%S(')O;W0N`#(V-3$M,#(P(%5N86)L92!T;R!F:6YD(&1I<F5C=&]R
M>2`O=F%R+V-T+RX*`````%-20R!S>7-T96T@)3$D<R!I<R!I;F%C=&EV92!O
M<B!I;F]P97)A=&EV92X*`````#(V-3$M,#`S($UE;6]R>2!A;&QO8V%T:6]N
M(&5R<F]R("@E,21S.B4R)&0I+@```#(V-3$M,#$P(%1H92!R96%D:6YG(&]F
M(&1A=&$@=V%S(&EN=&5R<G5P=&5D+@```%-20R!S>7-T96T@)3$D<R!I<R!R
M96%D>2!T;R!R96-E:79E(')E<75E<W1S+@H``%-20R!S>7-T96T@)3$D<R!I
M<R!A;')E861Y(')U;FYI;F<@;VX@=&AE(&AO<W0N"@`````R-C4Q+3`Q,R!3
M97)V:6-E(#!X)3$D,#AX(&ES(&YO="!S=7!P;W)T960@8GD@8W1C87-D+@``
M`#(V-3$M,#$T($5R<F]R(&]N('1H<F5A9"!O<&5R871I;VX@*"4Q)',Z(')C
M(#T@)3(D9"DN````,C8U,2TP,C0@5&AE('-E<G9E<B!R97!O<G1E9"!A("=S
M97)V97(@8G5S>2<@8V]N9&ET:6]N```R-C4Q+3$S,B!%;G9I<F]N;65N="!6
M87)I86)L93H@)3$D<R!V86QU92!I<R!I;B!E<G)O<BX``%-20R!S>7-T96T@
M)3$D<R!W87,@<W1A<G1E9"!S=6-C97-S9G5L;'D@*'!I9"`]("4R)&0I+@H`
M,C8U,2TP,#8@17)R;W(@;VX@<V]C:V5T(&]P97)A=&EO;B`H)3$D<SH@97)R
M;F\@/2`E,B1D*2X`````,C8U,2TP,3@@17)R;W(@;VX@<VEG;F%L(&]P97)A
M=&EO;B`H)3$D<SH@97)R;F\@/2`E,B1D*2X*````,C8U,2TQ,S`@5&AE(&-R
M961E;G1I86QS(&%R92!E:71H97(@:6YV86QI9"!O<B!C;W)R=7!T960N````
M,C8U,2TP,#4@3VYE(&]F('1H92!A<F=U;65N=',@<')O=FED960@=&\@)3$D
M<R!I<R!N;W0@=F%L:60N`````#(V-3$M,#$R(%)E<75E<W0@,'@E,20P.'@@
M;F]T('-U<'!O<G1E9"!B>2!S97)V:6-E(#!X)3(D,#AX+@````!34D,@<WES
M=&5M("4Q)',@=V%S('-T87)T960@8G5T('5N86)L92!T;R!R96-E:79E(')E
M<75E<W1S+@H`````,C8U,2TQ,C@@5&AE('-Y<W1E;2!C86QL('1O(')E=')I
M979E('1H92!L;V-A;"!H;W-T;F%M92!F86EL960N`#(V-3$M,#$Y(%5N86)L
M92!T;R!C<F5A=&4@9&ER96-T;W)Y("4Q)',@*&UK9&ER*"DZ(&5R<FYO(#T@
M)3(D9"DN"@``,C8U,2TP,3$@)3$D<SH@=&AE(&)U9F9E<B!C;VYT86EN:6YG
M('1H92!M87)S:&%L960@9&%T82!I<R!N;W0@=F%L:60N````,C8U,2TP,C$@
M5&AE('-E<G9E<B!I<R!N;W0@86)L92!T;R!P97)F;W)M('1H92!A=71H96YT
M:6-A=&EO;B!R97%U97-T+@H`,C8U,2TP,34@56YA8FQE('1O('%U975E(')E
M<75E<W0Z"@EQ=65U92!S:7IE/24Q)&0*"7!E;F1I;F<@<F5Q=65S=',])3(D
M9`H``#(V-3$M,#$V(%5N86)L92!T;R!C<F5A=&4@=&AE(&UI;FEM=6T@;G5M
M8F5R(&]F('=O<FME<B!T:')E861S(&-O;F9I9W5R960N"@`R-C4Q+3`R,B!!
M;B!E<G)O<B!O8V-U<F5D(&1U<FEN9R!T:&4@<V5R=F5R)W,@871T96UP="!T
M;R!G970@=&AE(&-L:65N="=S(&ED96YT:71Y+@H`````,C8U,2TP,#D@1&%T
M82!C;VUM=6YI8V%T:6]N(&9A:6QU<F4@*'-E;F0H*3H@;65S<V%G92!L96YG
M=&@@/2`E,21D+"!B>71E<R!S96YT(#T@)3(D9"X``#(V-3$M,#(S(%5N86)L
M92!T;R!S970@=&AE(&-U<G)E;G0@=V]R:VEN9R!D:7)E8W1O<GD@=&\@+W9A
M<B]C="])5R]R=6XO8W1C87,@*&-H9&ER*"DZ("4Q)&0I+@H``#(V-3$M,#`W
M(%1H92!F:6QE(&1E<V-R:7!T;W(@<F5A9'D@9F]R(')E861I;F<@;W(@=W)I
M=&EN9R!D;V5S(&YO="!M871C:"!T:&4@8V]N;F5C=&EN9R!S;V-K970N`#(V
M-3$M,#$W(%5N86)L92!T;R!S970@=&AE(&%P<')O<')I871E('!E<FUI<W-I
M;VX@;VX@9FEL92]D:7)E8W1O<GD@)3$D<R`H8VAM;V0H*3H@97)R;F\@/2`E
M,B1D*2X*```R-C4Q+3`P,2!5;F%B;&4@=&\@<W1A<G0@1$%%.B!D865?:6YI
M="@I(&9A:6QE9"`H<F,@/2`E,21D*0H)9FEL92`]("4R)',*"79E<G-I;VX@
M/2`E,R1S"@EL:6YE(#T@)30D<PH``#(V-3$M,3,Q(%1H92!P=6)L:6,@:V5Y
M(&EN("4Q)',@9&]E<R!N;W0@;6%T8V@@=&AE('!U8FQI8R!K97D@9F]R('1H
M92!H;W-T(&EN('1H92!4<G5S=&5D($AO<W0@3&ES="`E,B1S+@H``$%N(&5R
M<F]R(&]C8W5R<F5D('=H96X@871T96UP=&EN9R!T;R!A8W%U:7)E('-T871U
M<R!O9B!34D,@<WES=&5M("4Q)',N"@E-86ME('-U<F4@=&AA="!T:&4@;F%M
M960@4U)#('-Y<W1E;2!I<R!D969I;F5D(&%N9"!H87,@82!V86QI9"!D969I
M;FET:6]N+@H`````4U)#('-Y<W1E;2`E,21S(&-O=6QD(&YO="!B92!S=&%R
M=&5D(&)Y('1H92!34D,@;6%S=&5R+@H)36%K92!S=7)E('1H870@+W5S<B]S
M8FEN+W)S8W0O8FEN+V-T8V%S9"!E>&ES=',@86YD(&ES(&$@=F%L:60*"7!R
M;V=R86T@;W(@=&AA="!S>7-T96T@<F5S;W5R8V5S(&%R92!A=F%I;&%B;&4@
M=&\@<W1A<G0@=&AE(&1A96UO;BX*````,C8U,2TQ,#4@;&EB8W1?8V%S($EN
M=&5R;F%L(&9A:6QU<F4@9&5T96-T960N"@E&=6YC=&EO;B!N86UE.B`E,21S
M"@E2971U<FX@8V]D92!F<F]M(&9U;F-T:6]N.B`E,B1D"@E2;W5T:6YE(&-A
M;&QI;F<@=&AE(&9U;F-T:6]N.B`E,R1S"D-O;G1A8W0@24)-($-U<W1O;65R
M(%-U<'!O<G0@86YD(')E<&]R="!T:&ES(&EN8VED96YT+@H`,C8U,2TP,C4@
M;&EB8W1?8V%S(&9A:6QU<F4Z('1H92!C=&-A<R!C;&EE;G0@;&EB<F%R>2!I
M<R!U;F%B;&4@=&\@97AE8W5T90H)=&AE("]U<W(O<V)I;B]R<V-T+V)I;B]C
M='-T<G1C87-D(&-O;6UA;F0N("!4:&4@9F]L;&]W:6YG(&5R<F]R('=A<R!R
M971U<FYE9"!B>2!T:&4*"7-Y<W1E;2@I(&9U;F-T:6]N(&-A;&PZ(&5R<FYO
M(#T@)3$D9"X*```R-C4Q+3$Q."!C=&-A<V0@1&%E;6]N($EN=&5R;F%L(&9A
M:6QU<F4@9&5T96-T960N"@E&=6YC=&EO;B!N86UE.B`E,21S"@E2971U<FX@
M8V]D92!F<F]M(&9U;F-T:6]N.B`E,B1D"@E2;W5T:6YE(&-A;&QI;F<@=&AE
M(&9U;F-T:6]N.B`E,R1S"D-O;G1A8W0@=&AE(&-L=7-T97(@<V]F='=A<F4@
M<V5R=FEC92!P<F]V:61E<B!A;F0@<F5P;W)T('1H:7,@:6YC:61E;G0N"@``
M```R-C4Q+3$Q.2!C=&-A<V0@1&%E;6]N($EN=&5R;F%L($9A:6QU<F4Z(&EN
M8V]R<F5C="!P87)A;65T97)S('=E<F4*<')O=FED960@=&\@82!D865M;VX@
M<W5B<F]U=&EN92X*"49U;F-T:6]N(&YA;64Z("4Q)',*"5!O<VET:6]N86P@
M<&%R86UE=&5R(&YU;6)E<CH@)3(D9`H)4&%R86UE=&5R('9A;'5E.B`P>"4S
M)'@*0V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R;W9I
M9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*````,C8U,2TQ,C`@8W1C
M87-D($1A96UO;B!&86EL=7)E.B!T:&4@9&%E;6]N(&1E=&5C=&5D('1H870@
M86X*=6YS=7!P;W)T960@:V5Y(&=E;F5R871I;VX@;65T:&]D('=A<R!C;VYF
M:6=U<F5D+B`@5&AE(&9O;&QO=VEN9R!U;G-U<'!O<G1E9`IK97D@9V5N97)A
M=&EO;B!M971H;V0@=V%S(&-O;F9I9W5R960Z"@DP>"4Q)'@*4F5P86ER('1H
M92!C=&-A<V0@9&%E;6]N(&-O;F9I9W5R871I;VX@:6YF;W)M871I;VX@=&\@
M<W!E8VEF>2!A('-U<'!O<G1E9`IK97D@9V5N97)A=&EO;B!M971H;V0N"@``
M```R-C4Q+3$S,R!C=&-A<V0@1F%I;'5R93H@=&AE(&-I<&AE<B!C;VYT86EN
M960@:6X@=&AE($-#1$(@:&%S(&$@;&5N9W1H("@E,21D*0H)=&AA="!I<R!N
M;W0@;75L=&EP;&4@;V8@=&AE(%)302!M;V1U;'5S(&9O<B!T:&4@='EP92!O
M9B!K97D@=7-E9"!F;W(@9&5C<GEP=&EO;B`H)3(D9"DN"@E4:&ES(&-O;F1I
M=&EO;B!M87D@:&%P<&5N('=H96X@=&AE(&-L:65N="!A;F0@<V5R=F5R(&AO
M<W1S(&AA=F4@9&EF9F5R;G0@='EP97,@;V8@:&]S="!K97ES+@H)4&QE87-E
M(&UA:V4@<W5R92!T:&%T('1H92!C;&EE;G0@86YD('-E<G9E<B!H;W-T<R!H
M87,@=&AE('-A;64@='EP92!O9B!H;W-T($A"02!K97ES+@H`````,C8U,2TQ
M,#8@;&EB8W1?8V%S($9A:6QU<F4Z(%1H92!S96-U<FET>2!L:6)R87)Y(&ES
M('5N86)L92!T;PII;FET:6%L:7IE('1H92!D871A('-T<G5C='5R97,@;F5C
M97-S87)Y('1O(&-O;G9E<G0@8F5T=V5E;B!T:&4@8V]D97-E="!U<V5D"F)Y
M('1H:7,@87!P;&EC871I;VX@86YD('1H92!55$8M."!D871A(&5N8V]D:6YG
M(&9O<FUA="X@(%1H:7,@9F%I;'5R92!H87,*;V-C=7)R960@8F5C875S92!R
M97-O=7)C97,@;F5E9&5D(&)Y('1H92!C;'5S=&5R('5T:6QI=&EE<R!A<F4@
M;F]T(&%V86EL86)L90IA="!T:&ES('1I;64N("!4<GD@=&\@<G5N('1H:7,@
M87!P;&EC871I;VX@86=A:6X@870@82!L871E<B!T:6UE+@H`````,C8U,2TQ
M,#$@;&EB8W1?8V%S($9A:6QU<F4Z(&EN8V]R<F5C="!P87)A;65T97)S('!R
M;W9I9&5D+@H)1G5N8W1I;VX@;F%M93H@)3$D<PH)4&]S:71I;VYA;"!P87)A
M;65T97(@;G5M8F5R.B`E,B1D"@E087)A;65T97(@=F%L=64Z(#!X)3,D>`I)
M9B!T:&ES(&9A:6QU<F4@:7,@96YC;W5N=&5R960@9'5R:6YG('1H92!E>&5C
M=71I;VX@;V8@=&AE($-L=7-T97(@<V]F='=A<F4*=')U<W1E9"!S97)V:6-E
M<RP@8V]N=&%C="!)0DT@0W5S=&]M97(@4W5P<&]R="!A;F0@<F5P;W)T('1H
M:7,@:6YC:61E;G0N"DEF('1H:7,@9F%I;'5R92!I<R!E;F-O=6YT97)E9"!D
M=7)I;F<@=&AE(&5X96-U=&EO;B!O9B!O=&AE<B!S;V9T=V%R92P*=F5R:69Y
M('1H870@=&AE('-O9G1W87)E(&ES('5S:6YG('1H:7,@9G5N8W1I;VX@8V]R
M<F5C=&QY+@H`,C8U,2TQ,3$@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@
M<W1A="!S>7-T96T@8V%L;"!R97!O<G1E9"!A"F9A:6QU<F4@:6X@;V)T86EN
M:6YG(&ME<FYE;"!M96UO<GD@<F5S;W5R8V5S+B`@5&AI<R!M87D@:6YD:6-A
M=&4@=&AA="!T:&4*;W!E<F%T:6YG('-Y<W1E;2!I<R!N;W0@8V]N9FEG=7)E
M9"!P<F]P97)L>2P@;W(@=&AA="!A9&1I=&EO;F%L(')E<V]U<F-E<PIN965D
M('1O(&)E(&1E9&EC871E9"!T;R!T:&4@;W!E<F%T:6YG('-Y<W1E;2!K97)N
M96PN("!#;VYS=6QT('1H92!P<F]B;&5M"F1E=&5R;6EN871I;VX@9&]C=6UE
M;G1A=&EO;B!A;F0@<')O8V5D=7)E<R!F;W(@=&AE(&]P97)A=&EN9R!S>7-T
M96T@:6X@=7-E"F]N('1H92!S>7-T96T@86YD('!E<F9O<FT@86YY(&-O<G)E
M8W1I=F4@86-T:6]N<R!R96-O;6UE;F1E9"!B>2!T:&]S90IS;W5R8V5S+@H`
M````,C8U,2TQ,#,@;&EB8W1?8V%S($9A:6QU<F4Z(%1H92!M87)S:&%L960@
M9&%T82!P<F]V:61E9"!T;R!T:&ES"G)O=71I;F4@:7,@96ET:&5R(&EN=F%L
M:60@;W(@8V]R<G5P=&5D+B`@270@:7,@<&]S<VEB;&4@=&AA="!T:&4@87!P
M;&EC871I;VX*:&%S(&EN861V97)T96YT;'D@;W9E<G=R:71T96X@=&AE('9A
M<FEA8FQE(&-O;G1A:6YI;F<@=&AE(&%D9')E<W,@;V8@=&AE"F1A=&$L(&]R
M('1H92!A<'!L:6-A=&EO;B!M87D@:&%V92!I;F%D=F5R=&5N=&QY(&]V97)W
M<FET=&5N('1H92!M96UO<GD@=7-E9`IT;R!S=&]R92!T:&4@9&%T82X@(%9E
M<FEF>2!T:&%T('1H92!A<'!L:6-A=&EO;B!I<R!P<F]V:61I;F<@=&AE(&-O
M<G)E8W0*861D<F5S<R!F;W(@=&AE(&UA<G-H86QE9"!I;G!U="!D871A('1O
M('1H:7,@<F]U=&EN92X@(%!E<F9O<FT@;65M;W)Y(&QE86L*86YD(&UE;6]R
M>2!U<V4@=F5R:69I8V%T:6]N('1E<W1S(&]N('1H92!A<'!L:6-A=&EO;B!T
M;R!E;G-U<F4@=&AA="!T:&4*87!P;&EC871I;VX@:7,@;F]T(&EN861V97)T
M96YT;'D@;6]D:69Y:6YG('1H:7,@;65M;W)Y+@H``#(V-3$M,3`T(&QI8F-T
M7V-A<R!&86EL=7)E.B!4:&4@;6%R<VAA;&5D(&1A=&$@<')O=FED960@=&\@
M=&AI<PIR;W5T:6YE(&1O97,@;F]T(&-O;G1A:6X@82!R97%U:7)E9"!D871A
M(&9I96QD+B`@270@:7,@<&]S<VEB;&4@=&AA="!T:&4*87!P;&EC871I;VX@
M:&%S('!R;W9I9&5D(&%N(&EN8V]R<F5C="!A9&1R97-S(&9O<B!T:&4@;6%R
M<VAA;&5D(&1A=&$L(&]R(&AA<PII;F%D=F5R=&5N=&QY(&]V97)W<FET=&5N
M('1H92!V87)I86)L92!C;VYT86EN:6YG('1H92!A9&1R97-S(&]F('1H90ID
M871A+"!O<B!T:&4@87!P;&EC871I;VX@;6%Y(&AA=F4@:6YA9'9E<G1E;G1L
M>2!O=F5R=W)I='1E;B!T:&4@;65M;W)Y('5S960*=&\@<W1O<F4@=&AE(&1A
M=&$N("!697)I9GD@=&AA="!T:&4@87!P;&EC871I;VX@:7,@<')O=FED:6YG
M('1H92!C;W)R96-T"F%D9')E<W,@9F]R('1H92!M87)S:&%L960@:6YP=70@
M9&%T82!T;R!T:&ES(')O=71I;F4N("!097)F;W)M(&UE;6]R>2!L96%K"F%N
M9"!M96UO<GD@=7-E('9E<FEF:6-A=&EO;B!T97-T<R!O;B!T:&4@87!P;&EC
M871I;VX@=&\@96YS=7)E('1H870@=&AE"F%P<&QI8V%T:6]N(&ES(&YO="!I
M;F%D=F5R=&5N=&QY(&UO9&EF>6EN9R!T:&ES(&UE;6]R>2X*`#(V-3$M,3`Y
M(&QI8F-T7V-A<R!&86EL=7)E.B!4:&4@;6%R<VAA;&5D(&1A=&$@<')O=FED
M960@=&\@=&AI<PIR;W5T:6YE(&ES(&5I=&AE<B!I;G9A;&ED(&]R(&-O<G)U
M<'1E9"X@(%1H92!M87)S:&%L960@9&%T82!I;G1E<G!R971A=&EO;@IF=6YC
M=&EO;G,@;V8@=&AE('-E8W5R:71Y(&QI8G)A<GD@9&5T96-T960@82!R97!E
M871E9"!D871A(&9I96QD('=I=&AI;B!T:&4*;6%R<VAA;&5D(&1A=&$N("!)
M="!I<R!P;W-S:6)L92!T:&%T('1H92!A<'!L:6-A=&EO;B!H87,@:6YA9'9E
M<G1E;G1L>0IO=F5R=W)I='1E;B!T:&4@=F%R:6%B;&4@8V]N=&%I;FEN9R!T
M:&4@861D<F5S<R!O9B!T:&4@9&%T82P@;W(@=&AE"F%P<&QI8V%T:6]N(&UA
M>2!H879E(&EN861V97)T96YT;'D@;W9E<G=R:71T96X@=&AE(&UE;6]R>2!U
M<V5D('1O('-T;W)E('1H90ID871A+B`@5F5R:69Y('1H870@=&AE(&%P<&QI
M8V%T:6]N(&ES('!R;W9I9&EN9R!T:&4@8V]R<F5C="!A9&1R97-S(&9O<B!T
M:&4*;6%R<VAA;&5D(&EN<'5T(&1A=&$@=&\@=&AI<R!R;W5T:6YE+B`@4&5R
M9F]R;2!M96UO<GD@;&5A:R!A;F0@;65M;W)Y('5S90IV97)I9FEC871I;VX@
M=&5S=',@;VX@=&AE(&%P<&QI8V%T:6]N('1O(&5N<W5R92!T:&%T('1H92!A
M<'!L:6-A=&EO;B!I<R!N;W0*:6YA9'9E<G1E;G1L>2!M;V1I9GEI;F<@=&AI
M<R!M96UO<GDN"@```#(V-3$M,3`W(&QI8F-T7V-A<R!&86EL=7)E.B!4:&4@
M<V5C=7)I='D@;&EB<F%R>2!I<R!U;F%B;&4@=&\*=')A;G-L871E(&$@8VAA
M<F%C=&5R('-T<FEN9R!B971W965N('1H92!A<'!L:6-A=&EO;B!C;V1E<V5T
M(&%N9`IT:&4@551&+3@@9&%T82!E;F-O9&EN9R!F;W)M870N("!4:&4@8VAA
M<F%C=&5R('-T<FEN9R!C;VYT86EN<R!B>71E<R!T:&%T(&%R90II;G9A;&ED
M(&EN('1H92!A<'!L:6-A=&EO;B!C;V1E<V5T+B`@5&AI<R!F86EL=7)E(&-A
M;B!O8V-U<B!W:&5N"F-O9&5S971S('1H870@9&\@;F]T(&9U;&QY('-U<'!O
M<G0@551&+3@@8V]N=F5R<VEO;B!A<F4@=7-E9"!B>2!T:&4@97AE8W5T:6]N
M"F5N=FER;VYM96YT+B`@5&AI<R!F86EL=7)E(&-A;B!A;'-O(&]C8W5R(&EF
M('1H92!C:&%R86-T97(@<W1R:6YG(&UE;6]R>2!I<PIO=F5R=W)I='1E;BX@
M(%9E<FEF>2!T:&%T('1H92!A<'!L:6-A=&EO;B!U<V5S(&$@;&]C86QE('=I
M=&@@82!C;V1E<V5T('1H870*9&]E<R!S=7!P;W)T(%541BTX(&-O;G9E<G-I
M;VXL(&]R(&-O;G1A8W0@=&AE('-Y<W1E;2!A9&UI;FES=')A=&]R('1O(&AA
M=F4*=&AE(&1E9F%U;'0@97AE8W5T:6]N(&5N=FER;VYM96YT('-E="!T;R!U
M<V4@<W5C:"!A(&QO8V%L92X@($%L<V\@=F5R:69Y('1H870*=&AE(&%P<&QI
M8V%T:6]N(&ES(&YO="!A8V-I9&5N=&%L;'D@;W9E<G=R:71I;F<@=&AE(&-H
M87)A8W1E<B!S=')I;F<@9&%T82X*`````#(V-3$M,3`X(&QI8F-T7V-A<R!&
M86EL=7)E.B!4:&4@;6%R<VAA;&5D(&1A=&$@<')O=FED960@=&\@=&AI<PIR
M;W5T:6YE(&ES(&5I=&AE<B!I;G9A;&ED(&]R(&-O<G)U<'1E9"X@(%1H92!M
M87)S:&%L960@9&%T82!I;G1E<G!R971A=&EO;@IF=6YC=&EO;G,@;V8@=&AE
M('-E8W5R:71Y(&QI8G)A<GD@9&5T96-T960@;6]R92!S=6)S=&ET=71I;VYA
M;"!A<F=U;65N=',@=&AA;@II;F1I8V%T960@:6X@=&AE(&UA<G-H86QE9"!D
M871A)W,@87)G=6UE;G0@8V]U;G0N("!)="!I<R!P;W-S:6)L92!T:&%T('1H
M90IA<'!L:6-A=&EO;B!H87,@:6YA9'9E<G1E;G1L>2!O=F5R=W)I='1E;B!T
M:&4@=F%R:6%B;&4@8V]N=&%I;FEN9R!T:&4@861D<F5S<PIO9B!T:&4@9&%T
M82P@;W(@=&AE(&%P<&QI8V%T:6]N(&UA>2!H879E(&EN861V97)T96YT;'D@
M;W9E<G=R:71T96X@=&AE(&UE;6]R>0IU<V5D('1O('-T;W)E('1H92!D871A
M+B`@5F5R:69Y('1H870@=&AE(&%P<&QI8V%T:6]N(&ES('!R;W9I9&EN9R!T
M:&4@8V]R<F5C=`IA9&1R97-S(&9O<B!T:&4@;6%R<VAA;&5D(&EN<'5T(&1A
M=&$@=&\@=&AI<R!R;W5T:6YE+B`@4&5R9F]R;2!M96UO<GD@;&5A:PIA;F0@
M;65M;W)Y('5S92!V97)I9FEC871I;VX@=&5S=',@;VX@=&AE(&%P<&QI8V%T
M:6]N('1O(&5N<W5R92!T:&%T('1H90IA<'!L:6-A=&EO;B!I<R!N;W0@:6YA
M9'9E<G1E;G1L>2!M;V1I9GEI;F<@=&AI<R!M96UO<GDN"@```#(V-3$M,3(U
M(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA8FQE
M('1O(&-R96%T92!A;@II;FET:6%L('1R=7-T960@:&]S="!L:7-T(&9I;&4@
M=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*5VET
M:&]U="!T:&ES(&9I;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@=&\@
M875T:&5N=&EC871E('-Y<W1E;7,@=VET:&EN"G1H92!C;'5S=&5R+B`@5&AE
M(&1A96UO;B!A='1E;7!T960@=&\@8W)E871E('1H92!I;FET:6%L('1R=7-T
M960@:&]S="!L:7-T"F9I;&4@:6X@=&AE(&9O;&QO=VEN9R!D:7)E8W1O<GDZ
M"@DE,21S"E1H92!F:6QE('-Y<W1E;2!C;VYT86EN:6YG('1H:7,@9&ER96-T
M;W)Y(&1O97,@;F]T(&AA=F4@<W5F9FEC:65N="!S<&%C92!T;PIC<F5A=&4@
M=&AE(&EN:71I86P@=')U<W1E9"!H;W-T(&QI<W0@9FEL92X@($-O;G1A8W0@
M=&AE('-Y<W1E;2!A9&UI;FES=')A=&]R"F%N9"!R97!O<G0@=&AI<R!P<F]B
M;&5M+B`@4WES=&5M(&%D;6EN:7-T<F%T;W)S('-H;W5L9"!E>&%M:6YE('1H
M92!F:6QE"G-Y<W1E;2!C;VYT86EN:6YG('1H:7,@9&ER96-T;W)Y(&9O<B!O
M8G-O;&5T92!F:6QE<R!T:&%T(&-A;B!B92!R96UO=F5D(&]R"G1R:6UM960N
M("!4:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@8V%N(&%L<V\@8V]R<F5C="!T
M:&ES('!R;V)L96T@8GD@97AT96YD:6YG"FAE('-I>F4@;V8@=&AE(&9I;&4@
M<WES=&5M(&-O;G1A:6YI;F<@=&AI<R!D:7)E8W1O<GDN"@``,C8U,2TQ,34@
M8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B;&4@
M=&\@8W)E871E(&%N"FEN:71I86P@<'5B;&EC(&ME>2!F:6QE('1O(&)E('5S
M960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN"E=I=&AO=70@=&AI
M<R!F:6QE+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA8FQE('1O(&%U=&AE;G1I
M8V%T92!T:&4@;&]C86P@<WES=&5M"G1O(&]T:&5R('-Y<W1E;7,@:6X@=&AE
M(&-L=7-T97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE
M(&EN:71I86P*<'5B;&EC(&ME>2!F:6QE(&EN('1H92!F;VQL;W=I;F<@9&ER
M96-T;W)Y.@H))3$D<PI4:&4@9FEL92!S>7-T96T@8V]N=&%I;FEN9R!T:&ES
M(&1I<F5C=&]R>2!D;V5S(&YO="!H879E('-U9F9I8VEE;G0@<W!A8V4@=&\*
M8W)E871E('1H92!I;FET:6%L('!U8FQI8R!K97D@9FEL92X@($-O;G1A8W0@
M=&AE('-Y<W1E;2!A9&UI;FES=')A=&]R(&%N9`IR97!O<G0@=&AI<R!P<F]B
M;&5M+B`@4WES=&5M(&%D;6EN:7-T<F%T;W)S('-H;W5L9"!E>&%M:6YE('1H
M92!F:6QE('-Y<W1E;0IC;VYT86EN:6YG('1H:7,@9&ER96-T;W)Y(&9O<B!O
M8G-O;&5T92!F:6QE<R!T:&%T(&-A;B!B92!R96UO=F5D(&]R('1R:6UM960N
M"E1H92!S>7-T96T@861M:6YI<W1R871O<B!C86X@86QS;R!C;W)R96-T('1H
M:7,@<')O8FQE;2!B>2!E>'1E;F1I;F<@=&AE('-I>F4*;V8@=&AE(&9I;&4@
M<WES=&5M(&-O;G1A:6YI;F<@=&AI<R!D:7)E8W1O<GDN"@`R-C4Q+3$Q-"!C
M=&-A<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M;VX@=V%S('5N86)L92!T
M;R!C<F5A=&4@86X*:6YI=&EA;"!P<FEV871E(&ME>2!F:6QE('1O(&)E('5S
M960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN"E=I=&AO=70@=&AI
M<R!F:6QE+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA8FQE('1O(&%U=&AE;G1I
M8V%T92!T:&4@;&]C86P@<WES=&5M"G1O(&]T:&5R('-Y<W1E;7,@:6X@=&AE
M(&-L=7-T97(N("!4:&4@9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE
M(&EN:71I86P*<')I=F%T92!K97D@9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I
M<F5C=&]R>3H*"24Q)',*5&AE(&9I;&4@<WES=&5M(&-O;G1A:6YI;F<@=&AI
M<R!D:7)E8W1O<GD@9&]E<R!N;W0@:&%V92!S=69F:6-I96YT('-P86-E('1O
M"F-R96%T92!T:&4@:6YI=&EA;"!P<FEV871E(&ME>2!F:6QE+B`@0V]N=&%C
M="!T:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@86YD"G)E<&]R="!T:&ES('!R
M;V)L96TN("!3>7-T96T@861M:6YI<W1R871O<G,@<VAO=6QD(&5X86UI;F4@
M=&AE(&9I;&4@<WES=&5M"F-O;G1A:6YI;F<@=&AI<R!D:7)E8W1O<GD@9F]R
M(&]B<V]L971E(&9I;&5S('1H870@8V%N(&)E(')E;6]V960@;W(@=')I;6UE
M9"X*5&AE('-Y<W1E;2!A9&UI;FES=')A=&]R(&-A;B!A;'-O(&-O<G)E8W0@
M=&AI<R!P<F]B;&5M(&)Y(&5X=&5N9&EN9R!T:&4@<VEZ90IO9B!T:&4@9FEL
M92!S>7-T96T@8V]N=&%I;FEN9R!T:&ES(&1I<F5C=&]R>2X*```R-C4Q+3$R
M-"!C=&-A<V0@1&%E;6]N($9A:6QU<F4Z(%1H92!D865M;VX@=V%S('5N86)L
M92!T;R!C<F5A=&4@86X*:6YI=&EA;"!T<G5S=&5D(&AO<W0@;&ES="!F:6QE
M('1O(&)E('5S960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN"E=I
M=&AO=70@=&AI<R!F:6QE+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA8FQE('1O
M(&%U=&AE;G1I8V%T92!S>7-T96US('=I=&AI;@IT:&4@8VQU<W1E<BX@(%1H
M92!D865M;VX@871T96UP=&5D('1O(&-R96%T92!T:&4@:6YI=&EA;"!T<G5S
M=&5D(&AO<W0@;&ES=`IF:6QE(&EN('1H92!F;VQL;W=I;F<@9&ER96-T;W)Y
M.@H))3$D<PI!(&-O;7!O;F5N="!D:7)E8W1O<GD@:6X@=&AE(&%B;W9E('!A
M=&@@;F%M92!M87D@8F4@;6ES<VEN9RP@;W(@=&AE(&%C8V5S<PIP97)M:7-S
M:6]N<R!F;W(@;VYE(&]F('1H97-E(&-O;7!O;F5N=',@;6%Y(&AA=F4@8F5E
M;B!M;V1I9FEE9"!T;R!F;W)B:60*86-C97-S+B`@5F5R:69Y('1H870@=&AE
M(&1I<F5C=&]R>2!L:7-T960@86)O=F4@97AI<W1S+"!A;F0@=&AA="!T:&4*
M<&5R;6ES<VEO;G,@;VX@=&AA="!D:7)E8W1O<GD@<&5R;6ET('!R;V-E<W-E
M<R!R=6YN:6YG('=I=&@@<F]O="!A8V-E<W,@=&\*86-C97-S('1H92!D:7)E
M8W1O<GD@86YD(&-R96%T92!F:6QE<R!W:71H:6X@=&AE(&1I<F5C=&]R>2X@
M($EF('1H:7,@8V]N9&ET:6]N"G!E<G-I<W1S+"!C;VYT86-T('1H92!C;'5S
M=&5R('-O9G1W87)E('-E<G9I8V4@<')O=FED97(@86YD(')E<&]R="!T:&ES
M"FEN8VED96YT+@H`,C8U,2TQ,3,@8W1C87-D($1A96UO;B!&86EL=7)E.B!4
M:&4@9&%E;6]N('=A<R!U;F%B;&4@=&\@8W)E871E(&%N"FEN:71I86P@<'5B
M;&EC(&ME>2!F:6QE('1O(&)E('5S960@9F]R(&AO<W0M8F%S960@875T:&5N
M=&EC871I;VXN"E=I=&AO=70@=&AI<R!F:6QE+"!T:&4@9&%E;6]N('=I;&P@
M8F4@=6YA8FQE('1O(&%U=&AE;G1I8V%T92!T:&4@;&]C86P@<WES=&5M"G1O
M(&]T:&5R('-Y<W1E;7,@:6X@=&AE(&-L=7-T97(N("!4:&4@9&%E;6]N(&%T
M=&5M<'1E9"!T;R!C<F5A=&4@=&AE(&EN:71I86P*<'5B;&EC(&ME>2!F:6QE
M(&EN('1H92!F;VQL;W=I;F<@9&ER96-T;W)Y.@H))3$D<PI!(&-O;7!O;F5N
M="!D:7)E8W1O<GD@:6X@=&AE(&%B;W9E('!A=&@@;F%M92!M87D@8F4@;6ES
M<VEN9RP@;W(@=&AE(&%C8V5S<PIP97)M:7-S:6]N<R!F;W(@;VYE(&]F('1H
M97-E(&-O;7!O;F5N=',@;6%Y(&AA=F4@8F5E;B!M;V1I9FEE9"!T;R!F;W)B
M:60*86-C97-S+B`@5F5R:69Y('1H870@=&AE(&1I<F5C=&]R>2!L:7-T960@
M86)O=F4@97AI<W1S+"!A;F0@=&AA="!T:&4*<&5R;6ES<VEO;G,@;VX@=&AA
M="!D:7)E8W1O<GD@<&5R;6ET('!R;V-E<W-E<R!R=6YN:6YG('=I=&@@<F]O
M="!A8V-E<W,@=&\*86-C97-S('1H92!D:7)E8W1O<GD@86YD(&-R96%T92!F
M:6QE<R!W:71H:6X@=&AE(&1I<F5C=&]R>2X@($EF('1H:7,@8V]N9&ET:6]N
M"G!E<G-I<W1S+"!C;VYT86-T('1H92!C;'5S=&5R('-O9G1W87)E('-E<G9I
M8V4@<')O=FED97(@86YD(')E<&]R="!T:&ES"FEN8VED96YT+@H`,C8U,2TQ
M,3(@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B
M;&4@=&\@8W)E871E(&%N"FEN:71I86P@<')I=F%T92!K97D@9FEL92!T;R!B
M92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H;W5T
M('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A=71H
M96YT:6-A=&4@=&AE(&QO8V%L('-Y<W1E;0IT;R!O=&AE<B!S>7-T96US(&EN
M('1H92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E871E
M('1H92!I;FET:6%L"G!R:79A=&4@:V5Y(&9I;&4@:6X@=&AE(&9O;&QO=VEN
M9R!D:7)E8W1O<GDZ"@DE,21S"D$@8V]M<&]N96YT(&1I<F5C=&]R>2!I;B!T
M:&4@86)O=F4@<&%T:"!N86UE(&UA>2!B92!M:7-S:6YG+"!O<B!T:&4@86-C
M97-S"G!E<FUI<W-I;VYS(&9O<B!O;F4@;V8@=&AE<V4@8V]M<&]N96YT<R!M
M87D@:&%V92!B965N(&UO9&EF:65D('1O(&9O<F)I9`IA8V-E<W,N("!697)I
M9GD@=&AA="!T:&4@9&ER96-T;W)Y(&QI<W1E9"!A8F]V92!E>&ES=',L(&%N
M9"!T:&%T('1H90IP97)M:7-S:6]N<R!O;B!T:&%T(&1I<F5C=&]R>2!P97)M
M:70@<')O8V5S<V5S(')U;FYI;F<@=VET:"!R;V]T(&%C8V5S<R!T;PIA8V-E
M<W,@=&AE(&1I<F5C=&]R>2!A;F0@8W)E871E(&9I;&5S('=I=&AI;B!T:&4@
M9&ER96-T;W)Y+B`@268@=&AI<R!C;VYD:71I;VX*<&5R<VES=',L(&-O;G1A
M8W0@=&AE(&-L=7-T97(@<V]F='=A<F4@<V5R=FEC92!P<F]V:61E<B!A;F0@
M<F5P;W)T('1H:7,*:6YC:61E;G0N"@```#(V-3$M,3(S(&-T8V%S9"!$865M
M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA8FQE('1O(&QO8V%T92!O
M<@IA8V-E<W,@=&AE('1R=7-T960@:&]S="!L:7-T(&9I;&4@=&\@8F4@=7-E
M9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*5VET:&]U="!T:&ES
M(&QI<W0L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@=&\@875T:&5N=&EC
M871E('-Y<W1E;7,@=VET:&EN"G1H92!C;'5S=&5R+B`@5&AE(&1A96UO;B!E
M>'!E8W1E9"!T;R!F:6YD('1H:7,@9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I
M<F5C=&]R>3H*"24Q)',*5&AE('1R=7-T960@:&]S="!L:7-T(&9I;&4@;6%Y
M(&)E(&UI<W-I;F<L('1H92!P97)M:7-S:6]N<R!O;B!T:&4@9FEL92!M87D*
M:&%V92!B965N(&UO9&EF:65D('1O(&9O<F)I9"!A;GD@<')O8V5S<R!F<F]M
M(&%C8V5S<VEN9R!T:&4@9FEL92P@;W(@80IC;VUP;VYE;G0@;V8@=&AE(&1I
M<F5C=&]R>2!N86UE(&UA>2!H879E(&)E96X@;6]D:69I960@=&\@9F]R8FED
M(&%C8V5S<RX*5F5R:69Y('1H870@=&AE('1R=7-T960@:&]S="!L:7-T(&9I
M;&4@97AI<W1S+"!A;F0@=&AA="!T:&4@<&5R;6ES<VEO;G,@;VX*=&AE(&9I
M;&4@86YD('1H92!D:7)E8W1O<GD@87)E('-E="!T;R!P97)M:70@<')O8V5S
M<V5S(')U;FYI;F<@=VET:"!R;V]T"G!E<FUI<W-I;VX@=&\@86-C97-S(&%N
M9"!M;V1I9GD@=&AE(&1I<F5C=&]R>2!A;F0@=&AE(&9I;&4N("!)9B!T:&ES
M"F-O;F1I=&EO;B!P97)S:7-T<RP@8V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T
M=V%R92!S97)V:6-E('!R;W9I9&5R(&%N9"!R97!O<G0*=&AI<R!I;F-I9&5N
M="X*````,C8U,2TQ,3`@8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E
M;6]N('=A<R!U;F%B;&4@=&\@;&]C871E(&]R"F%C8V5S<R!T:&4@:V5Y(&9I
M;&5S('1O(&)E('5S960@9F]R(&AO<W0M8F%S960@875T:&5N=&EC871I;VXN
M("!7:71H;W5T"G1H97-E(&9I;&5S+"!T:&4@9&%E;6]N('=I;&P@8F4@=6YA
M8FQE('1O(&%U=&AE;G1I8V%T92!T:&4@;&]C86P@<WES=&5M"G1O(&]T:&5R
M('-Y<W1E;7,@:6X@=&AE(&-L=7-T97(N("!4:&4@9&%E;6]N(&5X<&5C=&5D
M('1O(&9I;F0@=&AE<V4@:V5Y"F9I;&5S(&EN('1H92!F;VQL;W=I;F<@9&ER
M96-T;W)Y.@H))3$D<PI4:&4@:V5Y(&9I;&5S(&UA>2!B92!M:7-S:6YG+"!T
M:&4@<&5R;6ES<VEO;G,@;VX@=&AE(&9I;&5S(&UA>2!H879E"F)E96X@;6]D
M:69I960@=&\@9F]R8FED(&%N>2!P<F]C97-S(&9R;VT@86-C97-S:6YG('1H
M92!F:6QE<RP@;W(@82!C;VUP;VYE;G0*;V8@=&AE(&1I<F5C=&]R>2!N86UE
M(&UA>2!H879E(&)E96X@;6]D:69I960@=&\@9F]R8FED(&%C8V5S<RX@(%9E
M<FEF>2!T:&%T"G1H92!P=6)L:6,@86YD('!R:79A=&4@:V5Y(&9I;&5S(&5X
M:7-T+"!A;F0@=&AA="!T:&4@<&5R;6ES<VEO;G,@;VX@=&AE(&9I;&5S"F%N
M9"!T:&4@9&ER96-T;W)Y(&%R92!S970@=&\@<&5R;6ET('!R;V-E<W-E<R!R
M=6YN:6YG('=I=&@@<F]O="!P97)M:7-S:6]N"G1O(&%C8V5S<R!T:&4@9&ER
M96-T;W)Y(&%N9"!T:&4@9FEL97,N("!)9B!T:&ES(&-O;F1I=&EO;B!P97)S
M:7-T<RP@8V]N=&%C=`IT:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E('!R
M;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*````,C8U,2TQ,C8@
M8W1C87-D($1A96UO;B!&86EL=7)E.B!4:&4@9&%E;6]N('=A<R!U;F%B;&4@
M=&\@8W)E871E(&%N"FEN:71I86P@=')U<W1E9"!H;W-T(&QI<W0@9FEL92!T
M;R!B92!U<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H
M;W5T('1H:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A
M=71H96YT:6-A=&4@<WES=&5M<R!W:71H:6X*=&AE(&-L=7-T97(N("!4:&4@
M9&%E;6]N(&%T=&5M<'1E9"!T;R!C<F5A=&4@=&AE(&EN:71I86P@=')U<W1E
M9"!H;W-T(&QI<W0*9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I<F5C=&]R>3H*
M"24Q)',*5&AI<R!D:7)E8W1O<GD@;6%Y(')E<VED92!I;B!A(')E860M;VYL
M>2!F:6QE('-Y<W1E;2P@;VYE(&]F('1H92!C;VUP;VYE;G0*9&ER96-T;W)I
M97,@:6X@=&AI<R!P871H(&YA;64@;6%Y(&)E(&UI<W-I;F<L('1H92!D:7)E
M8W1O<GD@;F%M92!M87D@8V]N=&%I;@IM;W)E('-Y;6)O;&EC(&QI;FMS('1H
M86X@=&AE(&]P97)A=&EN9R!S>7-T96T@8V%N('-U<'!O<G0L(&]R('1H92!P
M871H(&YA;64*;6%Y(&YO="!R969E<F5N8V4@82!D:7)E8W1O<GDN("!#;VYT
M86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0@<F5P;W)T"G1H:7,@
M<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@=F5R:69Y
M('1H870@=&AE(&%B;W9E(&1I<F5C=&]R>0IN86UE(&ES('-P96-I9FEE9"!A
M;F0@8V]N<W1R=6-T960@<')O<&5R;'DN("!)9B!T:&ES(&-O;F1I=&EO;B!P
M97)S:7-T<RP*8V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R92!S97)V:6-E
M('!R;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*`#(V-3$M,3$W
M(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W87,@=6YA8FQE
M('1O(&-R96%T92!A;@II;FET:6%L('!U8FQI8R!K97D@9FEL92!T;R!B92!U
M<V5D(&9O<B!H;W-T+6)A<V5D(&%U=&AE;G1I8V%T:6]N+@I7:71H;W5T('1H
M:7,@9FEL92P@=&AE(&1A96UO;B!W:6QL(&)E('5N86)L92!T;R!A=71H96YT
M:6-A=&4@=&AE(&QO8V%L('-Y<W1E;0IT;R!O=&AE<B!S>7-T96US(&EN('1H
M92!C;'5S=&5R+B`@5&AE(&1A96UO;B!A='1E;7!T960@=&\@8W)E871E('1H
M92!I;FET:6%L"G!U8FQI8R!K97D@9FEL92!I;B!T:&4@9F]L;&]W:6YG(&1I
M<F5C=&]R>3H*"24Q)',*5&AI<R!D:7)E8W1O<GD@;6%Y(')E<VED92!I;B!A
M(')E860M;VYL>2!F:6QE('-Y<W1E;2P@;VYE(&]F('1H92!C;VUP;VYE;G0*
M9&ER96-T;W)I97,@:6X@=&AI<R!P871H(&YA;64@;6%Y(&)E(&UI<W-I;F<L
M('1H92!D:7)E8W1O<GD@;F%M92!M87D@8V]N=&%I;@IM;W)E('-Y;6)O;&EC
M(&QI;FMS('1H86X@=&AE(&]P97)A=&EN9R!S>7-T96T@8V%N('-U<'!O<G0L
M(&]R('1H92!P871H(&YA;64*;6%Y(&YO="!R969E<F5N8V4@82!D:7)E8W1O
M<GDN("!#;VYT86-T('1H92!S>7-T96T@861M:6YI<W1R871O<B!A;F0@<F5P
M;W)T"G1H:7,@<')O8FQE;2X@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U
M;&0@=F5R:69Y('1H870@=&AE(&%B;W9E(&1I<F5C=&]R>0IN86UE(&ES('-P
M96-I9FEE9"!A;F0@8V]N<W1R=6-T960@<')O<&5R;'DN("!)9B!T:&ES(&-O
M;F1I=&EO;B!P97)S:7-T<RP*8V]N=&%C="!T:&4@8VQU<W1E<B!S;V9T=V%R
M92!S97)V:6-E('!R;W9I9&5R(&%N9"!R97!O<G0@=&AI<R!I;F-I9&5N="X*
M`#(V-3$M,3$V(&-T8V%S9"!$865M;VX@1F%I;'5R93H@5&AE(&1A96UO;B!W
M87,@=6YA8FQE('1O(&-R96%T92!A;@II;FET:6%L('!R:79A=&4@:V5Y(&9I
M;&4@=&\@8F4@=7-E9"!F;W(@:&]S="UB87-E9"!A=71H96YT:6-A=&EO;BX*
M5VET:&]U="!T:&ES(&9I;&4L('1H92!D865M;VX@=VEL;"!B92!U;F%B;&4@
M=&\@875T:&5N=&EC871E('1H92!L;V-A;"!S>7-T96T*=&\@;W1H97(@<WES
M=&5M<R!I;B!T:&4@8VQU<W1E<BX@(%1H92!D865M;VX@871T96UP=&5D('1O
M(&-R96%T92!T:&4@:6YI=&EA;`IP<FEV871E(&ME>2!F:6QE(&EN('1H92!F
M;VQL;W=I;F<@9&ER96-T;W)Y.@H))3$D<PI4:&ES(&1I<F5C=&]R>2!M87D@
M<F5S:61E(&EN(&$@<F5A9"UO;FQY(&9I;&4@<WES=&5M+"!O;F4@;V8@=&AE
M(&-O;7!O;F5N=`ID:7)E8W1O<FEE<R!I;B!T:&ES('!A=&@@;F%M92!M87D@
M8F4@;6ES<VEN9RP@=&AE(&1I<F5C=&]R>2!N86UE(&UA>2!C;VYT86EN"FUO
M<F4@<WEM8F]L:6,@;&EN:W,@=&AA;B!T:&4@;W!E<F%T:6YG('-Y<W1E;2!C
M86X@<W5P<&]R="P@;W(@=&AE('!A=&@@;F%M90IM87D@;F]T(')E9F5R96YC
M92!A(&1I<F5C=&]R>2X@($-O;G1A8W0@=&AE('-Y<W1E;2!A9&UI;FES=')A
M=&]R(&%N9"!R97!O<G0*=&AI<R!P<F]B;&5M+B`@4WES=&5M(&%D;6EN:7-T
M<F%T;W)S('-H;W5L9"!V97)I9GD@=&AA="!T:&4@86)O=F4@9&ER96-T;W)Y
M"FYA;64@:7,@<W!E8VEF:65D(&%N9"!C;VYS=')U8W1E9"!P<F]P97)L>2X@
M($EF('1H:7,@8V]N9&ET:6]N('!E<G-I<W1S+`IC;VYT86-T('1H92!C;'5S
M=&5R('-O9G1W87)E('-E<G9I8V4@<')O=FED97(@86YD(')E<&]R="!T:&ES
M(&EN8VED96YT+@H````R-C4Q+3$P,B!L:6)C=%]C87,@365M;W)Y(&%L;&]C
M871I;VX@9F%I;'5R92X*"49U;F-T:6]N(&YA;64Z("4Q)',*"4%T=&5M<'1E
M9"!A;&QO8V%T:6]N.B`E,B1D(&)Y=&5S"DUO<W0@;V9T96XL('1H:7,@9F%I
M;'5R92!O8V-U<G,@=VAE;B!A('!R;V-E<W,@97AC965D<R!I=',@;65M;W)Y
M(&%L;&]C871I;VX*;&EM:70N("!);B!R87)E(&-A<V5S+"!T:&ES(&9A:6QU
M<F4@;V-C=7)S('=H96X@82!N=6UB97(@;V8@<')O8V5S<V5S"F%L;&]C871E
M(&AU9V4@86UO=6YT<R!O9B!M96UO<GD@86YD('5T:6QI>F4@86QL(&%V86EL
M86)L92!M96UO<GD@;VX@=&AE"G-Y<W1E;2X@(%9E<FEF>2!T:&%T('1H92!A
M;&QO8V%T:6]N(&ET<V5L9B!I<R!N;W0@97AC965D:6YG(&ET<R!O=VX@;&EM
M:70N"DEF(&$@0VQU<W1E<B!S;V9T=V%R92!T<G5S=&5D('-E<G9I8V4@:7,@
M97AC965D:6YG(&ET<R!L:6UI="P@8V]N=&%C="!)0DT*0W5S=&]M97(@4W5P
M<&]R="!A;F0@<F5P;W)T('1H:7,@:6YC:61E;G0N("!)9B!A;F]T:&5R('-O
M9G1W87)E(&%P<&QI8V%T:6]N"FES(&5X8V5E9&EN9R!I=',@;&EM:70L(&5X
M86UI;F4@=&AE('-O9G1W87)E(&9O<B!M96UO<GD@;6%N86=E;65N="!P<F]B
M;&5M<PIA;F0@;65M;W)Y(&QE86MS+B`@268@=&AE(&%P<&QI8V%T:6]N(&ES
M(&YO="!E>&-E961I;F<@:71S(&UE;6]R>2!A;&QO8V%T:6]N"FQI;6ET<RP@
M8V]N=&%C="!T:&4@<WES=&5M(&%D;6EN:7-T<F%T;W(@86YD(')E<&]R="!T
M:&ES(&EN8VED96YT+B`@4WES=&5M"F%D;6EN:7-T<F%T;W)S('-H;W5L9"!I
M9&5N=&EF>2!P<F]C97-S97,@=7-I;F<@97AC97-S:79E(&UE;6]R>2!A;F0@
M8V]N<VED97(*=&5R;6EN871I;F<@=&AE<V4@<')O8V5S<V5S+@H`,C8U,2TQ
M,C$@8W1C87-D($1A96UO;B!&86EL=7)E.B!T:&4@9&%E;6]N(&1E=&5C=&5D
M(&$@<')I=F%T92!K97D*9FEL92!O;B!T:&4@;&]C86P@<WES=&5M+"!B=70@
M=V%S('5N86)L92!T;R!L;V-A=&4@=&AE(&%S<V]C:6%T960@<'5B;&EC(&ME
M>0IF:6QE(&]N('1H92!L;V-A;"!S>7-T96TN("!4:&4@9&%E;6]N(&AA<R!C
M;VYC;'5D960@=&AA="!T:&4@<')I=F%T92!A;F0*<'5B;&EC(&ME>2!C;VYF
M:6=U<F%T:6]N(&]F('1H92!L;V-A;"!S>7-T96T@:&%S(&)E96X@8V]R<G5P
M=&5D+B`@5&AE(&1A96UO;@IE>'!E8W1E9"!T;R!F:6YD(&)O=&@@=&AE('!U
M8FQI8R!A;F0@=&AE('!R:79A=&4@:V5Y(&9I;&5S(&EN('1H92!F;VQL;W=I
M;F<*9&ER96-T;W)Y.@H))3$D<PI);F9O<FT@=&AE('-Y<W1E;2!A9&UI;FES
M=')A=&]R(&]F('1H:7,@9F%I;'5R92X@(%-Y<W1E;2!A9&UI;FES=')A=&]R
M<PIS:&]U;&0@<F5C<F5A=&4@=&AE('!U8FQI8R!A;F0@<')I=F%T92!K97D@
M9FEL97,@;VX@=&AE('-Y<W1E;2X@($EF(&-L=7-T97(*<V5C=7)I='D@8F%S
M960@:V5Y<R!A<F4@:6X@=7-E+"!T:&5S92!K97ES(&-A;B!B92!R96-R96%T
M960@=7-I;F<@=&AE"B=C='-K97EG96XG(&-O;6UA;F0N("!)9B!S96-U<F5D
M(')E;6]T92!S:&5L;"!K97ES(&%R92!I;B!U<V4L(&-O;G-U;'0@=&AE"F1O
M8W5M96YT871I;VX@86YD('!R;V-E9'5R97,@9F]R(&-O;F9I9W5R:6YG('-E
M8W5R960@<F5M;W1E('-H96QL('!U8FQI8R!A;F0*<')I=F%T92!K97ES+B`@
M4WES=&5M(&%D;6EN:7-T<F%T;W)S('-H;W5L9"!A;'-O(&-O;G-I9&5R(&UO
M;FET;W)I;F<@=&AE"G-T871U<R!O9B!T:&4@<'5B;&EC(&%N9"!P<FEV871E
M(&ME>2!F:6QE<RP@:6X@8V%S92!A;B!A<'!L:6-A=&EO;B!I<PIA8V-I9&5N
M=&%L;'D@;W(@:6YT96YT:6]N86QL>2!R96UO=FEN9R!T:&5S92!F:6QE<RX*
M`#(V-3$M,3(R(&-T8V%S9"!$865M;VX@1F%I;'5R93H@=&AE(&1A96UO;B!D
M971E8W1E9"!A('!U8FQI8R!K97D*9FEL92!O;B!T:&4@;&]C86P@<WES=&5M
M+"!B=70@=V%S('5N86)L92!T;R!L;V-A=&4@=&AE(&%S<V]C:6%T960@<')I
M=F%T92!K97D*9FEL92!O;B!T:&4@;&]C86P@<WES=&5M+B`@5&AE(&1A96UO
M;B!H87,@8V]N8VQU9&5D('1H870@=&AE('!R:79A=&4@86YD"G!U8FQI8R!K
M97D@8V]N9FEG=7)A=&EO;B!O9B!T:&4@;&]C86P@<WES=&5M(&AA<R!B965N
M(&-O<G)U<'1E9"X@(%1H92!D865M;VX*97AP96-T960@=&\@9FEN9"!B;W1H
M('1H92!P=6)L:6,@86YD('1H92!P<FEV871E(&ME>2!F:6QE<R!I;B!T:&4@
M9F]L;&]W:6YG"F1I<F5C=&]R>3H*"24Q)',*26YF;W)M('1H92!S>7-T96T@
M861M:6YI<W1R871O<B!O9B!T:&ES(&9A:6QU<F4N("!3>7-T96T@861M:6YI
M<W1R871O<G,*<VAO=6QD(')E8W)E871E('1H92!P=6)L:6,@86YD('!R:79A
M=&4@:V5Y(&9I;&5S(&]N('1H92!S>7-T96TN("!)9B!C;'5S=&5R"G-E8W5R
M:71Y(&)A<V5D(&ME>7,@87)E(&EN('5S92P@=&AE<V4@:V5Y<R!C86X@8F4@
M<F5C<F5A=&5D('5S:6YG('1H90HG8W1S:V5Y9V5N)R!C;VUM86YD+B`@268@
M<V5C=7)E9"!R96UO=&4@<VAE;&P@:V5Y<R!A<F4@:6X@=7-E+"!C;VYS=6QT
M('1H90ID;V-U;65N=&%T:6]N(&%N9"!P<F]C961U<F5S(&9O<B!C;VYF:6=U
M<FEN9R!S96-U<F5D(')E;6]T92!S:&5L;"!P=6)L:6,@86YD"G!R:79A=&4@
M:V5Y<RX@(%-Y<W1E;2!A9&UI;FES=')A=&]R<R!S:&]U;&0@86QS;R!C;VYS
M:61E<B!M;VYI=&]R:6YG('1H90IS=&%T=7,@;V8@=&AE('!U8FQI8R!A;F0@
M<')I=F%T92!K97D@9FEL97,L(&EN(&-A<V4@86X@87!P;&EC871I;VX@:7,*
M86-C:61E;G1A;&QY(&]R(&EN=&5N=&EO;F%L;'D@<F5M;W9I;F<@=&AE<V4@
M9FEL97,N"@``````(`!SY%]314,`````8W1C87-D``!C=&-A<RYC870```!C
M=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870`
M``!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC
M870```!C=&-A<RYC870```!C=&-A<RYC870````O=F%R+V-T+TE7+W-O8P``
M+W9A<B]C="])5R]R=6X``&-A<U]?;6%R<VAA;%]X9&%T82@I`````&-T8V%S
M+F-A=````"]V87(O8W0O25<O<V]C+V-T8V%S`````"]V87(O8W0O25<O<V]C
M+V-T8V%S`````"]V87(O8W0O25<O<V]C+V-T8V%S`````"]V87(O8W0O25<O
M<G5N+V-T8V%S`````"]V87(O8W0O25<O<G5N+V-T8V%S`````"]V87(O8W0O
M25<O<G5N+V-T8V%S`````"]V87(O8W0O25<O<G5N+V-T8V%S`````"]V87(O
M8W0O25<O<G5N+V-T8V%S`````"]V87(O8W0O25<O<G5N+V-T8V%S`````&-A
M<U]?=6YM87)S:&%L7WAD871A*"D``&-A<U]?=6YM87)S:&%L7WAD871A*"D`
M`"]V87(O8W0O25<O<V]C+V-T8V%S+V-L:65N=``O=F%R+V-T+TE7+W-O8R]C
M=&-A<R]C;&EE;G0`+W9A<B]C="])5R]S;V,O8W1C87,O8VQI96YT`"]V87(O
M8W0O25<O<V]C+V-T8V%S+V-L:65N=``O=F%R+V-T+TE7+W-O8R]C=&-A<R]C
M;&EE;G0`+W9A<B]C="])5R]S;V,O8W1C87,O<V5R=F5R`"]V87(O8W0O25<O
M<V]C+V-T8V%S+W-E<G9E<@`O=F%R+V-T+TE7+W-O8R]C=&-A<R]S97)V97(`
M+W!R;VIE8W0O<W!R96QR:6<O8G5I;&0O<G)I9W0Q9FPO<W)C+W)S8W0O<V5C
M=7)I='DO0T%3+V)I;B]C=&-A<U]U=&EL<RYC`````"]P<F]J96-T+W-P<F5L
M<FEG+V)U:6QD+W)R:6=T,69L+W-R8R]R<V-T+W-E8W5R:71Y+T-!4R]B:6XO
M8W1C87-?=71I;',N8P````!`*",I.3@@("`Q+C@@("!S<F,O<G-C="]S96-U
M<FET>2]#05,O8FEN+V-T8V%S7W5T:6QS+F,L(&-T<V5C+"!R<V-T7W)R:6<L
M(')R:6=T,69K(#<O,S$O,#(@,#@Z-#8Z,C@`"B,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(`HC($QI8V5N<V5D($UA=&5R:6%L<R`M(%!R;W!E<G1Y(&]F
M($E"32`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@(",@"B,@-3<V-2U%-C$@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R`H0RD@0T]065))
M1TA4($EN=&5R;F%T:6]N86P@0G5S:6YE<W,@36%C:&EN97,@0V]R<"X@,3DY
M-BPR,#`Q("`@("`@(",@"B,@06QL(%)I9VAT<R!297-E<G9E9"`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`C(`HC
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R!54R!';W9E<FYM96YT(%5S
M97)S(%)E<W1R:6-T960@4FEG:'1S("T@57-E+"!D=7!L:6-A=&EO;B!O<B`@
M("`@("`@(",@"B,@9&ES8VQO<W5R92!R97-T<FEC=&5D(&)Y($=302!!1%`@
M4V-H961U;&4@0V]N=')A8W0@=VET:"!)0DT@0V]R<"X@("`C(`HC("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@(R`*(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,@"@H`````````````(`!YM%]314,`````7U-%0P````!?4T5#`````%]3
M14,`````7U-%0P````!?4T5#`````%]314,`````7U-%0P````!?4T5#````
M`%]314,`````7U-%0P````!?4T5#`````%]314,`````7U-%0P````!?4T5#
M`````%]314,`````7U-%0P````!?4T5#`````'-E;F0H*0``<V5N9"@I``!R
M96-V*"D``')E8W8H*0``<V5L96-T*"D`````<V5L96-T*"D`````8W1C87,N
M8V%T````7U-%0P````!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC
M870```!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A
M<RYC870```!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870```!C
M=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870```!C=&-A<RYC870`
M``!C87-?7W-E;F1?9&%T80``8V%S7U]R96-E:79E7V1A=&$````O<')O:F5C
M="]S<')E;')I9R]B=6EL9"]R<FEG=#%F;"]S<F,O<G-C="]S96-U<FET>2]#
M05,O8FEN+V-T8V%S7V-O;6TN8P!`*",I.3D@("`Q+C<@("!S<F,O<G-C="]S
M96-U<FET>2]#05,O8FEN+V-T8V%S7V-O;6TN8RP@8W1S96,L(')S8W1?<G)I
M9RP@<G)I9W0Q9FL@-R\S,2\P,B`P.#HT-CHS,```"B,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(`HC($QI8V5N<V5D($UA=&5R:6%L<R`M(%!R;W!E<G1Y
M(&]F($E"32`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@(",@"B,@-3<V-2U%-C$@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`C(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R`H0RD@0T]0
M65))1TA4($EN=&5R;F%T:6]N86P@0G5S:6YE<W,@36%C:&EN97,@0V]R<"X@
M,3DY-BPR,#`Q("`@("`@(",@"B,@06QL(%)I9VAT<R!297-E<G9E9"`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`C
M(`HC("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@(R`*(R!54R!';W9E<FYM96YT
M(%5S97)S(%)E<W1R:6-T960@4FEG:'1S("T@57-E+"!D=7!L:6-A=&EO;B!O
M<B`@("`@("`@(",@"B,@9&ES8VQO<W5R92!R97-T<FEC=&5D(&)Y($=302!!
M1%`@4V-H961U;&4@0V]N=')A8W0@=VET:"!)0DT@0V]R<"X@("`C(`HC("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@(R`*(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,@"@H``!```0`@`'VH$``"V"``?:@`````$``!R"``?:@`````````
M```````@`'V0`````````````````````````````````````"``?Q``````
M```````````@``I0`````"``"J@@``L$````````````````(``+$"``"Q0`
M````(``0:"``$&P`````(``0<"``%'`0`$FP(``8>"``?Q0`````````````
M````````(``?4````````````````"``<(@`````````````````````(`!W
MN```````````````````````````(`!_&"``?QP`````````````````````
M```````````@`'\@`````!``%T``````````````````````(`!_*``````@
M``L8````````````````$`!)\```````````````````````````(`!WP```
M```````````````````0``.`````````````````````````````````````
M`0```#H```"G````J0````@```UD```!H```#@UE<G)N;P```````````$`%
M`````0````!C:&1I<@```````````$`*`````0````!C:&UO9```````````
M`$`*`````0````!C;&]S90```````````$`*`````0````!M:V1I<@``````
M`````$`*`````0````!U;6%S:P```````````$`*`````0````!U;FQI;FL`
M`````````$`*`````0````!S;V-K970``````````$`*`````0````!S96YD
M`````````````$`*`````0````!R96-V`````````````$`*`````0``````
M`````````@```````$`$`````0````!?7VUU;&@`````,0```$`'`````0``
M``!?7W%U;W5S````,X```$`'`````0````!?:6]B`````````````$`%````
M`0````!?17)R;F\``````````$`*`````0````!E>&ET`````````````$`*
M`````0````!F<F5E`````````````$`*`````0````!M86QL;V,`````````
M`$`*`````0````!S=')L96X``````````$`*`````0````!A=&]I````````
M`````$`*`````0````!F<')I;G1F`````````$`*`````0````!S=')C:'(`
M`````````$`*`````0````!M96US970``````````$`*`````0````!S=')R
M8VAR`````````$`*`````0````!S96QE8W0``````````$`*`````0````!I
M<W-P86-E`````````$`*`````0````!G971P:60``````````$`*`````0``
M````````````&@```````$`*`````0````!S=')D=7```````````$`*````
M`0````!S=&%T`````````````$`*`````0````!G971O<'0``````````$`*
M`````0````!C;VYN96-T`````````$`*`````0````!S=')T;VP`````````
M`$`*`````0``````````````)@```````$`*`````0````!?7V-R=#!V````
M`````$`%`````0````!O<'1A<F<``````````$`%`````0``````````````
M,P```````$`%`````0``````````````4````````$`%`````@``````````
M````8@```````$`*`````P``````````````<0```````$`*````!```````
M````````@P```````$`*````!```````````````E0```````$`*````!```
M````````````I@```````$`*````!```````````````MP```````$`*````
M!```````````````R0```````$`*````!```````````````V@```````$`*
M````!```````````````[P```````$`*````!0`````````````!`@``````
M`$`*````!0`````````````!$P```````$`*````!0`````````````!*P``
M`````$`*````!0`````````````!/P```````$`*````!0`````````````!
M4P```````$`*````!0`````````````!8P```````$`*````!0``````````
M```!<P```````$`*````!0````!S<F-S=&%T`````````$`*````!@````!S
M<F-S=')T`````````$`*````!@`````````````!C0```````$`*````!P``
M``!?7W-T87)T`"``?8@``B$*```````````@``L$`````1\```(@``L(````
M`1\```(@``L4`````1\```(@``LP`````1\```(@`!B4`````1\```(@`!I4
M`````1\```(@`!ID`````1\```(@`!IT`````1\```(@`!J$`````1\```(@
M`!]0`````1\```(@`!]4`````1\```(@`!]8`````1\```(@`!]<`````1\`
M``(@`!]@`````1\```(@`!]D`````1\```(@`!]H`````1\```(@`!]L````
M`1\```(@`!]P`````1\```(@`!]T`````1\```(@`!]X`````1\```(@`!]\
M`````1\```(@`!^``````1\```(@`!^$`````1\```(@`!^(`````1\```(@
M`!^,`````1\```(@`!^0`````1\```(@`!^4`````1\```(@`!^8`````1\`
M``(@`!^<`````1\```(@`!^@`````1\```(@`!^D`````1\```(@`!^H````
M`1\```(@`!^L`````1\```(@`!^P`````1\```(@`!^T`````1\```(@`!^X
M`````1\```(@`!^\`````1\```(@`!_``````1\```(@`!_$`````1\```(@
M`!_(`````1\```(@`!_,`````1\```(@`!_0`````1\```(@`!_4`````1\`
M``(@`!_8`````1\```(@`!_<`````1\```(@`!_@`````1\```(@`!_D````
M`1\```(@`!_H`````1\```(@`!_L`````1\```(@`!_P`````1\```(@`!_T
M`````1\```(@`!_X`````1\```(@`!_\`````1\```(@`"```````1\```(@
M`"`$`````1\```(@`"`(`````1\```(@`"`,`````1\```(@`"`0`````1\`
M``(@`"`4`````1\```(@`"`8`````1\```(@`"`<`````1\```(@`"`@````
M`1\```(@`"`D`````1\```(@`"`H`````1\```(@`"`L`````1\```(@`"`P
M`````1\```(@`"`T`````1\```(@`"`X`````1\```(@`"`\`````1\```(@
M`"!``````1\```(@`"!$`````1\```(@`"!(`````1\```(@`"!,`````1\`
M``(@`"!0`````1\```(@`"!4`````1\```(@`"!8`````1\```(@`"!<````
M`1\```(@`"!@`````1\```(@`'"(`````1\```(@`'?``````1\```(@`'V(
M`````!\```(@`'V,`````1\```(@`'V0`````!\```(@`'V4`````1\```(@
M`'V<`````!\```(@`'V@`````1\```(@`'VP`````1\```(@`'W0`````A\`
M``(@`'W4````)1\```(@`'W8````*!\```(@`'W<````*1\```(@`'W@````
M`1\```(@`'WD````)Q\```(@`'WH`````1\```(@`'WL`````1\```(@`'WP
M````)!\```(@`'WT`````Q\```(@`'WX````&A\```(@`'W\`````1\```(@
M`'X``````1\```(@`'X$````(1\```(@`'X(`````1\```(@`'X,`````1\`
M``(@`'X0````)A\```(@`'X4`````1\```(@`'X8`````1\```(@`'X<````
M`!\```(@`'X@`````1\```(@`'XD`````A\```(@`'XH````#1\```(@`'XL
M````%1\```(@`'XP````'Q\```(@`'XT````(!\```(@`'XX`````1\```(@
M`'X\````+Q\```(@`'Y`````"!\```(@`'Y$````!Q\```(@`'Y(`````1\`
M``(@`'Y,````$1\```(@`'Y0````!1\```(@`'Y4````&1\```(@`'Y8````
M$Q\```(@`'Y<`````1\```(@`'Y@````'1\```(@`'YD````,1\```(@`'YH
M````"1\```(@`'YL````!!\```(@`'YP````%!\```(@`'YT`````A\```(@
M`'YX`````A\```(@`'Y\````-1\```(@`'Z`````-Q\```(@`'Z$````+1\`
M``(@`'Z(````*Q\```(@`'Z,````*A\```(@`'Z0````+!\```(@`'Z4````
M`A\```(@`'Z8````,Q\```(@`'Z<`````!\```(@`'Z@````-A\```(@`'ZD
M````-!\```(@`'ZH````.!\```(@`'ZL````+A\```(@`'ZP`````A\```(@
M`'ZT````,!\```(@`'ZX`````1\```(@`'Z\````,A\```(@`'[`````$!\`
M``(@`'[$````.1\```(@`'[(`````!\```(@`'[,````"A\```(@`'[0````
M(A\```(@`'[4````!A\```(@`'[8````'A\```(@`'[<````%Q\```(@`'[@
M`````1\```(@`'[D````&Q\```(@`'[H````#!\```(@`'[L````"Q\```(@
M`'[P````.Q\```(@`'[T`````!\```(@`'[X````'!\```(@`'[\````&!\`
M``(@`'\`````(Q\```(@`'\$````.A\```(@`'\(````%A\```(@`'\,````
M$A\```(O=7-R+VQI8CHO;&EB.B]U<W(O:6)M8WAX+VQI8@````!L:6)C7W(N
M80!S:'(N;P``;&EB<'1H<F5A9"YA`'-H<E]C;VUM+F\``&QI8G!T:')E860N
M80!S:')?>'!G-2YO``!L:6)C=%]C=2YA`'-H<BYO``!L:6)C=%]T<BYA`'-H
M<BYO``!L:6)S<F,N80!S:'(N;P``;&EB8W1?<V5C+F$`<VAR+F\``!9?<WES
M=&5M7V-O;F9I9W5R871I;VX```IN86YO<VQE97````M?7VUO9%]I;FET```;
M7U]M86QL;V-?=7-E<E]D969I;F5D7VYA;64``!!?7W!T:')E861?=')A8V4`
M``UP=&AR96%D7VEN:70``!!C=5]R96Q?97)R;7-G7S$``!!C=5]G971?97)R
M;7-G7S$```]C=5]R96Q?97)R;W)?,0``#V-U7V=E=%]E<G)O<E\Q```08W5?
M<'-E=%]E<G)O<E\Q```/8W5?<V5T7V5R<F]R7S$``!-C=5]G971?<')O8W-P
M965D7S$``!%T<E]R96-O<F1?9&%T85\Q```/=')?<F5C;W)D7VED7S$``!9T
M<E]S971?=')A8V5?;&5V96QS7S$``!)T<E]G971?9FEL96YA;65?,0``$G1R
M7W-E=%]F:6QE;F%M95\Q```.=')?9V5T7W-I>F5?,0``#G1R7W-E=%]S:7IE
M7S$``!AT<E]R96=I<W1E<E]C;VUP;VYE;G1?,0``$W-E8U]R96QE87-E7V)U
&9F9E<@``
`
end
k 0PB$  7u     ]  q@q@q@             ]      ./opt/csm/csmbin/diagnostics/USAGE_and_README Co                   $          
***  This is not a supported program and it is supplied ***
***  AS-IS for official support personnel only          ***

--------------------------------------------------------------------------------
Overview
--------------------------------------------------------------------------------

The HMC Diagnostic tool is intended to find common configuration and
setup errors found between pSeries HMC and Regatta LPARs.

On the whole, it looks for things that will cause RMC communications
to fail. This includes checking for active daemons, correct THL files,
correct ACL files, and (optionally) consistent hostname resolution
between machines. It does this automatically and reports all found
errors.

To be most affective though, the tool needs to collect data from the
LPARs. To do this, it uses rexec from the HMC to the LPAR and it
invokes a copy of itself on the LPAR. This implies two things:

	-rexec is setup between the HMC and the LPAR
	-The tool is installed on the HMC and the LPAR

However, it is not required to use the tool in this fashion, but
running tests on a single machine only is less useful and does not
check for the most common setup problems, ie, consistent hostname
resolution.

The tool will (when appropriate) suggest corrective actions to take to
fix found problems. You can also have the tool perform these actions
for you, but its suggested that you don't use this option until you are
a bit more familiar with this tool (the default is to simply suggest
actions but not take any actions).

--------------------------------------------------------------------------------
Disclaimers
--------------------------------------------------------------------------------
This tool is currently at the alpha release stage. It probably has a
few problems, especially when testing on differing levels of AIX and
HMC (since I developed it on AIX 5.2 and a GA3 HMC almost
exclusively). 

The script is designed for AIX 5.1F/5.2 or better. It may run
on prior levels, but it will probably generate false messages.

I have taken a lot of care so that the tool has no side
effects. Unless directed to, it has no trace files. It only runs
commands that I consider "read only" commands, with one exception. It
will run "refresh -s ctrmc" to validate the ctrmc.acls file, but this
command results in ctrmc re-reading the file. This may have some side
effect, though I would expect in most cases, this is a very minor
issue.

It certainly will not catch all errors, so its entirely possible that
the tool will not find anything wrong, yet things are still not
working. Alternately, it may find problems that don't exist. While I
try to minimize these false messages, they can come up.

Moral : its not a panacea - you must still know how things work...

--------------------------------------------------------------------------------
Usage
--------------------------------------------------------------------------------

To get a "usage" message from the tool itself, give it a bogus command line option:

For example, 

	DiagnoseHMC --help

will produce the usage summary.


Example 1: Test the local machines setup

1) Get command-line access on the machine as user root.  
2) Invoke the script like so:

	DiagnoseHMC

Example 2: How to use the tool to test the HMC setup and validate with LPARs setup

1) Get command-line access to the HMC as user root.  
2) Ensure rexec is enabled from the HMC to the LPAR. (The HMC gui has a way to
	do this). You should be able to run this command on the HMC without being
	prompted for a username and password:

		REXEC_USER=root REXEC_PASS=<roots password on LPAR> rexec <LPAR Hostname> ls

3) Invoke the script (as root) on the HMC like so:

     DiagnoseHMC --target=<LPAR Hostname> --password=<roots password on target>

   To provide multiple targets, use quotes and separate them with a comma:

     DiagnoseHMC --target="lpar1, lpar2, lpar3" --password=<roots password on *all* targets>

--------------------------------------------------------------------------------
Known problems / future work
--------------------------------------------------------------------------------
Basic NLS support is present. Each sub-command exports "LC_ALL=C" so
the output should now be parsable by the script even if the default
locale is something other than C. I have not tested this feature too
much - let me know how it goes.

The output can be a bit too wordy and ugly looking.








igukV 0PB  7u     0 @@@             0     ./opt/csm/csmbin/getSourceIP2Target nd_R                              @ Q  v H    f     t (    h        1L                      .text    ( (   (     _      .data         f  D    :     @.bss      (  (                      .loader            (                                                           " (|nx|#x|+x|    1  B h9   e)-  *  @ H `   H   H !A |nxA   A |	Q N!A  9   }sx}{x~x  H Y`     ,  A b $H 	A |      @        __start   |b ,  0!;  8  `?   \ XH ՀA 8`P H A 8 ;  @ D H @ D8` P H A  H,@ dH 	A   ,  @ 4 @H 	A  D8  D`P H A  @ HH    H,@ 8` cH A  H,  A  @ D8` P Kt L @H   8  Ld TTd 6 @|!n8 @ P8 TH  T L P< 8   T|).|*  8  PH U T P X < @,  @ Ѐ P *} |(.Tg8|:}e8. | @A D,  A H 9A   } 8c } Tf8|2}e0. | @@̃ < T; |   <@ , P *} |(.Tg8|:}e8. KH  (H 8` cH A 8`  H A  0 T8   d  XH ̀A  T| @ P H `    @H !A !   }N       	(!          X0   X|!֐   |H d     	         8    ,  A 4`f  |c"8 | .,  A `f  |c"8 | .,  K`  N       	         H|`  `  `}   !b \;   : b    <F 89 @8 H \ (|(. (|(.~:;6   H `   ,  A b  8 H `   ,  A :   ,  @ :  p  P,  @ L,  _@ @c#  8 ,8 H A ,  @ $|  @  ,  A l,  A d: | ;9 @  p  P,  K  ,   A  : b    <F 89 @8 H \ (|(.K  y |. |c, |*|). @  8 c |).f 8   K 8   Kp x8! p}N       	     b 0| < !,  `?   L@  @8 < |  @,  A   8ed `e  T8|cc ,  A D8 T8|` Hc H eA  @ ,  A HH   8`  H uA  @ ,  A (  8ed `e  T8|cc ,  Kb 0 <,  @ ( @8 < |  @,  K8!   }N       	(!    (      H0  c  | @@ 8` N  8`M  8`  N       	         (" X898	  |	 `i  G `  	  `  8c  8 8   I  B N       	         P X88  |	 `g   `  8c   8 	  B N       	         <؃ X|`  `~     !| \|~|@@PcD  c  H 3|~b  |@@ @ c#  b  H ]A ,  @ ~c#  b  K5K@ <K|@@ | b  c  H A ,  @ ~ܲb  c  KK@ @|@c#  @  ~ܲb  c  Km~b  Kc  K<KHK|@A $~c  c%  b  K)~۲b  K|~||  A $||c  Kb  |~|@@ Kc  b  KܲK h8! `}N       	 
    K     	         KD     	              4A   L |	N               8A   L |	N               <A   L |	N               @A   L |	N               DA   L |	N               HA   L |	N                A |	K k N      @        _ptrgl TA   L |	N                      |fx|#x|3xH       @        bcopy       @        memmove                               b ` 8  q A ||+|"*A H|8@@@@ |A L  H  p|+|*A $0  |8@@@|+@ P@ D|*@|,     T A |0|0|8@H  |8@|0}0@@@ L  A A 8`N  8` N  8`  N  8c8  ,  |0@A  @  ,  |0@KA A 8`N  8`  N  8` N        @       strcmp dA   L |	N              !|b A ,   H ,   A  x    c A |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A  H8! @}N  8! @N         A       __threads_init  |    b l|!c   HH  EA  H8! @}N         A      , call_pthread_init   t     pA   L |	N               A   L |	N              | `d  !8e h HH A  H8! @}N       	 A         0 
usage__FPc|, `   !A   K8` KA 8     @8 @8  8  H Q`   8(  8( @ 4@ L,  , /A A TA lb 8cH  A H  b 8cH  ՀA 8` K	A b 8c,H  A 8` KA b 8cDH  A 8` KрA b 8c`H  A 8` KA b 8cH  eA 8` KA  @b 8c H  AA 8`   X8! P}N       	 A       P main    A   L |	N              | `~   !   L T P,  @ $ b 8c  888DH A 8    @ D8a @ L P TH  a X  ,  @ ( b 8 Xc  88H A a X x8! p}N       	 A         5fetchConnectivityNames__10CSM_COMMONFCPcPP8ct_arrayUL |;   } &   !  a8}`  ,  `  a ̓ ȓ Г @ $ b 8c  8p8|HŀA (  ,  @ ( A P  ,  @ ( b 88 c  88HA (A8! 8` }N  8`RKA |cya@ P  ,  @ ( b 88 c  808LHA (A8! 8` }N  a8R8  H`    E9 8`a ڑ; ` X @ ٓ  F8`  ;` HA `y  `d   \8` HA ,  A  \  8  `8` HA ,  A  `  8 8` HmA ,  A     y ! 8   y a ˂  a c a ,  c  a c  A`WC}  8  8 |  B|aă" ȃ :: b  8 dHuA ,  A $ d 8` 8 8  HyA H  :  M  b  8 XHA  X`g  `s  ,  @ \,  A 0  ,   A $,  @ y  88b  H1A : - 
@ b  8 XK X,  A0@,d c     8` 8 8  HɀA |uyA8 8 HA ,  A,8a 8  8 Hy`   9 b   h8 8 hHA ,  A8}HA aa lHA |sybt  A 0:Cr HA ,  @   ,  .@<6 @:@8a@8  8 eH`   bc  ,  A 48@8 dH "E:`  :A8a@HyA H  88a@bd  8 H`   :`  :A8a@HAA `p  a,  A |@A |c|@@ 49|@@8aH)A ,  O   AH ؀a~#| @@ 8aHA |q |@@ b  ~| @99@ 8aHA 8|p | @@ `o  ,  A,  A<d,  A$, A`  | @@ 8aHiA | @@ ,  A ,  A t, A l,  @ L8d@ $HqA L  8  H  8L  8  H  8aa  H 送,  H  l,  @  A l H  ,  H  H|p@@ <T~8a|p| @@  |  @A |*H  a  H },  A |p"|| | K`   ~ |@@ 8aH%A | @@ ,  L  A l,  A `/ A X,  @ <8d@ H)A H  8H  8ab  H ,  H  l,  @ $A | I  | @@ tH  l| @@ 4T~8a|| @@  |  @A |*H  b  H E,  A a JÁH  | @@ `  ,  A̀a,  A@,  A(, A `  | @@ 8aHɀA | @@ a,  A ,  A x, A p,  @ P8@ (`  H̀A L  8`  H  8L  8`  H  8ab  H Ea,  H  l,  @  A l H  a,  H  H|@@ <T~8a|| @@  |  @A |*H  b  H ـa,  A a|| K]`   ~1 |@@ 8aHA | @@ !,  O   A l,  A `, A X,  @ <8e@ HA H 8H 8ab$  H ,  H  ,  @ 8A I  a 0 a b   ,   @H | @@ 4T~8a|| @@  |  @A |*H  b$  H ,  ALa! JÉa 0 a b   ,   H 8,  O   A @,  A 4, A ,,  @ 8e@K8ab  H ,  H  ,  @ $A8e,  A, @K(  A | @@ dA H8e,  A , @ (HA 8ab  H H  $88ab  H q,  A (a8@b  K`   a KÁa 0 a b   ,   @ 耒  L ,  @   ,   @   z     | @@ `  ,  A <q ,  @ 8`  |x|y| (8|KA ,  A T`H  $|x@@ a  H  8   A 8  T A 1  ,   @ 0H  b.  1   ,   @   L ,  K4  p0  ,   @ 䀑  M ,  @   ,   @   z     | x@@ `  ,  A <r ,  @ 8`  |p|q| (8|KA ,  A T`H  $|p@@ a  H  8   A 8  T A b0  1   ,   @ ,H  1  ,   @   M ,  K4a p x t a  |a  a a b  8 | NH %a |a :C,  A L8e,  A , @ ,H!A   ,  , @ LH  (8  ,  , @ $@y  888@HA H p@ y  88 8@HA :` :A048<8a@H	A `q  a4,  A |@A 8|c|@@ 49|@@8a0HA 84,  O   AH ؀a4~| @@ 8a0HA 8|t |@@ b#  ~4| @a  @ 8a0HA 88|q | @@ `p  ,  A4/  A<d,  A$, A`  | @@ 8a0H5A 8| @@ 84/  A ,  A t, A l,  @ L8d@ $H=A 4O  8<8  H  84O  8<8  H  8a0a  H 뵀4/  H  l,  @  A l8 H  4/  H  H<| x@@ <T~8a0|x| @@  |  @A |*H  a  H I4/  A 48|q"|| | K`   89~0 |@@ 8a0HA 8| @@ !84,  O   A l,  A `, A X,  @ <8e@ HA 48<H  848<H  8a0b$  H y,  H  l,  @ $A |8 I  8| @@ tH  l<| @@ 4T~8a0|| @@  |  @A |*H  b$  H ,  A a4!8 JÉ8H  8| @@ `  ,  A̀a4,  A<,  A$, A`  | @@ 8a0HA 8| @@ !84|+yA ,  A t, A l,  @ L8c@ $HA 4L  8<8`  H  84L  8<8`  H  8a0b$  H a4,  H  l,  @  A l8 H  a4,  H  H<|@@ <T~8a0|| @@  |  @A |*H  b$  H 襀a4,  A a4|8| K)`   89~ |@@ 8a0HQA 8| @@ 84,  O   A l,  A `, A X,  @ <8e@ HUA 48<H 848<H 8a0b  H ,  H  ,  @ 8A8 I  8`  a :  4  ,   @H <| @@ 4T~8a0|| @@  |  @A |*H  b  H ],  ALa48 Já8`  a :  4  ,   H 884,  O   A @,  A 4, A ,,  @ 8e@K8a0b$  H ,  H  ,  @ $A8e,  A, @K<(  A | @@ dA H8e,  A , @ (HA 48<8a0b$  H ]H  $848<8a0b$  H 9,  A (a48@b%  K`   a4!8 KÉ8`  a :  4  ,   @  b4   P Q,   @   ,   @   z     | @@ `  ,  A <r ,  @ 8`  |x|y| (8|K䥀A ,  A TpH  $|x@@ a  H  8   A 8  TA 1   ,   @ 4H  1  ,   @   b4   P Q,   K0,   b  AH   | @ @8a 8 8 b  80H ca R a Đ a 8a08 H H  ,   A ,  `  4 Q SC ,  @ H  ܀   ,   @ H`    ,   @ ,c   ,   @ c   ,   Ka H  p  ,   @ L  | @@ @ `    ,   @ (  | @@  `    ,   K܈ ,   @  `  4 Q SC ,  @   ,   @   z   !8 | @@ `  ,  A <c ,  @ 8`  ||| (8|KiA ,  A T`H  |@A 9  A 9 UA8a 8 b  b  80H aa T a Đ a 8a08 H H   K̀,   A aKߡA b  HA   ,  @  y  8 8884HA  8a 8 H !8` H Tb  H̀A ,  A aK1A   ,  @  y  8 888HQA  8a 8 H 8` H ,   A aKـA   ,  @  y  8 888HA  8a 8 H e8` H ,   A aKށA ,  @ 8    ,  @  y  88P8lHA  8a 8 H aH 0 U  Đ a 8a08 H Mc  8@8 dHM`   8}HA ,  A `  Ȁd  ,  Tc8.@ y  88c  HA c  HA 8   8   b  HA a8 Tc:~.,  A b  8 dK  a,  d  @ ( b 88  c  88HaA  8a 8 H 8`  $(8! |} } } N       	(C              5fetchConnectivityNames__10CSM_COMMONFPPcPP8ct_arrayUL 8 H H     	 @          __dftdt__Q2_3std3setXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____Fv `  |,   !A P8e,  A , @ 0HmA 8       H8! @}N  88       H8! @}N       	 A         S__dftdt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv   | `  ! C;  8`   T DHiA `}  `d   H8` HyA ,  A  H  8  L8` HUA ,  A  L  8 8` H5A ,  A  T  8      c           x8! p}N       	 A        __ct__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FRCQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___    N       	 @           __as__7in_addrFRC7in_addr !| `    !`  8  c ;   ,   ``  8( h d l @ ca | x; |; xA     H| (@ a L|A|(A  P c  ,   @   ,   @ D   ,   @ ,     ,   @      ,   K  H  `  ,   @ L | @@ @ x`    ,   @ ( | @@  x`    ,   Kܐ x8 XH e x  | (A  P c  ,   K(  DH | c   ,   @@| cz   ,   @  c  H уZ   ,  A H8e,  A , @ (HA    cc  HA H  $8   cc  HqA c[   ,   @  c  Kx   ,  A H8e,  A , @ (H%A    c  HA H  $8   c  HA c   ,   @ | cz   ,   K܀ c   c   c      DHA s    A c  HuA c   8! !}N       	(A       8      `__dt__Q2_3std3setXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____Fv   !| HHeA  H8! @}N       	 A         $ getsockname__FiP8sockaddrPUl   | !  a L T P,  @ $ b 8c  88H yA 8   a L @8 DHA 8 @8a D8 8 HA |fy@ a @,  A ̀  a T PH|)`     ,  @ P  8 T8(   LH A   ,  @    88P8l8  H ɀA 8`  H    ,  @   88  H A   ,  @ t  888,8 H qA H  T  ,  @ H  88Ԁ  H EA   ,  @    888,8 H A 8`  x8! p}N       	 A         ip2hostname__10CSM_COMMONFPcT1Ui  ;  |`~     ! `  `  H-A `{   ,  A |@A  || @@ 48 | @; @c  HA   /  AH  ; | @@ c  HA  || |@@ cc  || @;@c  @ c  HрA  |{ |@@ `z  ,  A /  A@e,  A$, A8`| @`  @ c  HQA  | @@ >  /  A 8e,  A p, A h,  @ H@ $H{YA       8  H  8      8  H  c  c$  H р /  H  h,  @  A l  A   /  H  D | @@ 8T~c  || @@  |  @A  *c$  H i /  A 8   |{ ||e| | K`    8`z |@@ c  HA  | @@ ~  /  A l8e,  A \, A T,  @ 8@ HzA    H  8   H  c  cd  H Е,  H  l,  @ $A |  B   | @@ tH  l | @@ 4T~|d| @@  d| @A |"H  cd  c  H ),  A ~ ~  C H   | @@ `  ,  A /  A(e,  A, A8`| @`  @ c  H}A  | @@ ~  /  A h8e,  A X, A P,  @ @ $HxA       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A `"c  cd  H ـ /  A 8   | `  | KU`    8` |@@ c  H|}A  | @@   /  A l8e,  A \, A T,  @ 8@ HwA    H 8   H c  c  H ,  H  p,  @ (A    x8! pc  }N   | @@ 4T~|d| @@  d| @A |"H  c  c  H ͝,  A8~   x8! pc  }N    /  A @8e,  A 0, A (,  @ @Kc  cd  H -,  H  ,  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (Hv	A    c  cd  H ̭H  $8   c  cd  H ̉,  A $~ c  ce  K`   ~ ~  x8! pc  }N       	 A       L R__ct__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc؃c |`  ;    !P`   cv  ,   @ b|B ;    @ ,  @   ,   @   ;     | @@ `  ,  A <| ,  @ 8`  ||| (8|KaA ,  A T`H  $|@@ 8 H  8   A 8  T A   ,   @ 0H  c     ,   @   @ ,  K4  D  ,   @ |B ;    A ,  @   ,   @   <     | @@ `  ,  A <} ,  @ 8`  ||| (8|K]A ,  A T`H  $|@@ 8 H  8   A 8  T A c     ,   @ ,H    ,   @   A ,  K4a Da La Ha la h Pa Ta X8 Pa pa \cd   BH ma P 8! }N       	 A
       t{count__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__    |,   !`  `  A H8e,  A , @ (HpـA 8`  s    A 4H  $88`  s    A c  HpA c   H8! @}N       	 A         P__dt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv  ԃ |`  `  ~  !p`   ;@ : ,   @ ;   |  c~  ! @! A,   @   ,   @ 5  X     | @@ `  ,  A <| ,  @ 8`  ||| (8|KAA ,  A TwH  $|@@ 8 H  8   A 8  TA {   ,   @ 4H  {  ,   @   c~  ! @! A,   K0,   Hc  AH   | L@ <8 Pc  8 c  c  H D) P]    8! }H   ,   A 0  H`   ;`  a Aa C,  # @ H     ,   @ H`    ,   @ ,c   ,   @ c   ,   Ka HH  p  ,   @ L  | @@ @ H`    ,   @ (  | @@  H`    ,   K܈ ,   @  H`   ;`  a Aa C,  # @  |   ,   @ d  E    | @@ `  ,  A <c ,  @ 8`  ||| (8|KA ,  A T`H  $|@@ 8 H  8   A 8  T A <8 Tc  b  c  c  H BI T]    8! }H    H}    8! }N       	 A       {insert__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__   a|b `  `~     !@,  @ $ b 8c  88$H 址A s A P  ,  @ ( b 88c  8p8H eA  ȃa 8! 8`}N  8   8a D @8 dH|-A |yA x  ,  @ d b c    HjA  `g  c  88c  H A   ,  @  ~  88 88 H 佀A 8` H 8 @8a DHzA |}yA   ,  @ p  88 D8h  H qA   ,  @ D  88c  H MA   ,  @    8888 H %A  ȃa 8! 8` }N  8`RK=A ~  ,  @ P  ,  @ ( b 88 c  88,H A  ȃa 8! 8` }N  8  8RHh]`     a @8  8 d    8 `Hfy`      ,  @ P~   8 8x   H =A   ,  @    8888  H A  ȃa 8! 8`  }N   8! a}N       	 A         :fetchLocalHostPrimaryHostnames__10CSM_COMMONFPP8ct_arrayUL| `     !a L,  @ $ b 8c  88H MA 8   a L @8 DHwA 8 @8a D8 8 HxA |fy@ a @,  A Ȁc  Hy!A     ,  @ P  `f  88~   LH ɀA   ,  @  ~  888,8  H ᡀA 8`  H  Ĉ  ,  @   88d  H qA   ,  @ t  8888 H IA H  T  ,  @ H  88  H A   ,  @    8888 H A  h P8! `8` }N   h8! `}N       	 A        ip2hostname__10CSM_COMMONFPcPPc   | `     !a H,  @ $ b 8c  88H EA 8   8 @ @a HHv9A |fy@ `a @,  A Tc c  Hw-A ~    ,  @ b    88c   HH ՀA   ,  H  4  ,  @ Pb  88,c  H ߡA   ,  @ ( b 88  c  8P8lH qA 8`   h8! `}N       	 A       4 hostname2ip__10CSM_COMMONFPcPPc   |  !  ,  @ T b 8c  88$H A   ,  @ ( b 88  c  8h8H ޱA 8`   H8! @}N       	 A          hostname2ip__10CSM_COMMONFPcT1Ui  | `   !   L P T,   X@ $ b 8c  8P8\H A   |` 4T ~| @@   ,  @8  88  H рA   ,  @  8888 H ݩA 8`  x8! p}H    ,  @ ( b 88  c  8@8\H aA 8`  H  ;  ,  A hc  }   @ D L P T XH  ,  A;   | @@ (}   @ D L P T XKĈ  ,  @ ( b 88 c  88H ܹA 8`  x8! p}N       	"A        &areEqual__10CSM_COMMONFP8ct_arrayT1iUL| } &`~      !,  a  `  `  `  a  @ $ b 8c  8
8
H A :    ,   A8{WDzb * -  Tc:B c  Ax|c|iN   ,  @  z  88,8H8 H ۍA 8` H  y |@@H  ,  @z  8888 H MA 8` H \ y |  @|@@   ,  @z  888 8 H A 8` H  y | @@|@@  ,  @Pz  88p88 H ڽA 8` H !    @x  ,  @z  8888 H }A 8` H !    @8  ,  @Ѐz  88H8d8 H =A 8` H L    D,  A h@ z   88H A  a DHqAA ,  @   ,  @Xz  8888 H ŀA 8` H  @ z   88LH ١A  a DKY`   ,  @ X  ,  @z  88x88 H aA 8` H  p y | A: | @;9 AtH    : | @;9 A\  ,  @ ( b 88  c  88 H A 8`   t x8! p|} } N       	"C
        3isElementOf__10CSM_COMMONF10ct_value_tP8ct_arrayiUL   ||}y } &  !N     ,  @ Pb c  A $c  8 8	8	H )A H  $ 8 d8 8	8	H A @ $8`   T X8! P|} N  c  HaiA ,  AЃ c  8~	HoA ,  @ H  ,  @b 88	܀c  H ׍A 8`   T X8! P|} K8~
c  HnA ,  @ H  ,  @Lb 88
c  H 1A 8`   T X8! P|} K08~
8c  HnMA ,    , @ 8@b 88
Pc  H ՀA 8`   T X8! P|K@ b 88
c  H ֡A 8`  T X8! P|} N       	 C         +isValidNonLocalMachineName__10CSM_COMMONFPc   ||~y } &  !N     ,  @ Pb c  A $c  8 8	8	 H A H  $ 8 l8 8	8	 H A A8 @c  HkiA ,  @ H  ,  @ b  8c  8	Pc  H yA 8`   d h8! `|H  8a D8  8 HZ`   8a Dc  8 HXA`   8a D8 .HlA ,  A l8     8a DHlA , @ H  ,  @ Db  8c  8	pc  H ـA 8`   d h8! `|H   8` H  8`   d h8! `|} N       	 C        ,isValidNonLoopbackIPAddress__10CSM_COMMONFPc  |!Tc(4 HH]1A  H8! @}N       	 A         (_Allocate__3stdHQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_UlPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_PQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node  |!T(4 HHYEA  H8! @}N       	 A         (allocate__Q2_3std9allocatorXTQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_Hv_UlPCv_PQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node  N       	 @          __ct__Q2_3std9allocatorXTQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_GQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___  N       	 @          __ct__Q2_3std9allocatorXTPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_GQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___ |`   p !A \ ,  A P8e,  A , @ 0HNAA 8       H8! @}N  88       H8! @}N       	 A         Q_Tidy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fb |`  } &c   ,  ! L`  A | @A  |c|@@ 88 | @;  ; @c  HQрA   /  AH  ; ;   | @@ c  HQA  |x |@@ c  ~   | @;`@ c  HQA  || |@@ `{  ,  Ac   /  A(e,  A, A8`| @`  @ c  HQ	A  | @@ ?  /  A h8e,  A X, A P,  @ @ $HLA  O    8  H  8 O    8  H  h,  @  A l  @   /  H  D | @@ 8T~|d| @@  d| @A  "cC  c$  H 9 /  A 8   || ||e| | K`    8` |@@ c  HOՀA  | @@   /  A l8e,  A \, A T,  @ 8@ HJ݀A    H  8   H  c  c  H e,  H  l,  @ $A |  A   | @@ tH  l | @@ 4T~|d| @@  d| @A |"H  c  c  H ,  A    B H   | @@ `  ,  Axc   /  A(e,  A, A8`| @`  @ c  HNuA  | @@   /  A h8e,  A X, A P,  @ @ $HI}A  O    8  H  8 O    8  H  h,  @  A l  @   /  H  D | @@ 8T~|d| @@  d| @A `"c  cd  H  /  A 8   | `  | K!`    8` |@@ c  HMIA  | @@   /  A l8e,  A \, A T,  @ 8@ HHQA    H  8   H  c  c  H ,  H  x,  @ 0A |    t x8! pc  |} N   | @@ 4T~|d| @@  d| @A |"H  c  c  H a,  A    t x8! pc  |} N    /  A l8e,  A \, A T,  @ 8@ HG5A    H  8   H  c  c  H ,  H  ,  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (HFA    c  c  H =H  $8   c  c  H ,  A $  Lc  K`      x8! pc  }N       	 C       l Vassign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCcUl| !   !`  `  ,   `y   l @ h; l; hA     H| (@  L| A|(A  P c#  ,   @   ,   @ D   ,   @ ,     ,   @      ,   K  H  `  ,   @ L | @@ @ h`    ,   @ ( | @@  h`    ,   Kܐ h8 XH ` h  | (A  P c#  ,   K(  DH  a tc   ,   @D;  } cz   ,   @  a tH v	Z   ,  A H8e,  A , @ (HCA    cc  HC̀A H  $8   cc  HCA c[   ,   @  a tKx   ,  A H8e,  A , @ (HC]A    c  HCEA H  $8   c  HC!A c   ,   @ } cz   ,   K܀  y 8   c  y  c y     D`  HBA 8      8! !}N       	 A       4__dftbdt__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__Fv  c     N       	 @          1begin__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__Fv |! ! `  `   ,    ; ; A (    @| (@  |0a DA  | (A  H c  ,   @   ,   @ H   ,   @ ,     ,   @      ,   K쐝   HH  `  ,   @ L | @@ @ `    ,   @ ( | @@  `    ,   Kܐ 8 PH Z   | (A  H c  ,   K$ x  ! T8! p}N   c   ,   @D;  } cz   ,   @  c  H pIZ   ,  A H8e,  A , @ (H>%A    cc  H>A H  $8   cc  H=A c[   ,   @  c  Kx   ,  A H8e,  A , @ (H=A    c  H=A H  $8   c  H=aA c   ,   @ } cz   ,   K܀ c  8   c    c       x8! p!}N       	 A       cerase__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorT1   |!`   HH:iA  H8! @}N       	 A         (g_Freenode__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node   | ;  `~  ! T8`  H;A `}  `d   @8` H;A ,  A  @  8  D8` H;A ,  A  D  8 8` H;eA ,  A  T  8       ~ c ~ c  ~ c  x8! p}N       	 A        1_Init__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__Fv ԃc |`  `    !`   cu  ,   @ ;`  B| ;   a @ ,  @   ,   @ x  :     | @@ `  ,  A <| ,  @ 8`  ||| (8|KA ,  A T`H  $|@@ 8 H  8   A 8  T A   ,   @ 0H  c     ,   @  a @ ,  K4  D  ,   @ ;  B| ;    A ,  @   ,   @   :     | @@ `  ,  A <~ ,  @ 8`  ||| (8|KA ,  A T`H  $|@@ 8 H  8   A 8  T A c     ,   @ ,H    ,   @   A ,  K4a H D   H  8! }N       	 A       Tequal_range__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ |!a ha D X @H ,} X8! P}N       	 A        ,_Distance__3stdHQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorUl_Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorT1RUl_v8   8c N       	 @          b_Key__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node |,   ! ;  @ $b|   ,   @   8      | @@ `  ,  A Pd ,  @ c  |`  || (8|KـA ,  A Tc X8! P}N  |@@ 8`  X8! P}N  A ; W X8! P}N       	 A         __cl__Q2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__   a|;  =  } &  9 | @@ !8`?  `~  a(,4`   ̘0 \ Xa ` dAB ;? h l p:ӓ tb  H.}A `v   l,  A |@A  p|| @@ 88 | @: ; @8 hH.]A  p l/  A H :  l`x  ~d| @@ 8 hH.MA  p|s |@@ c  ~| @; :@ 8 hH.A  p|v |@@ `u  ,  A l/  ADe,  A(, A 8`| @`  @ 8 hH-A  p| @@  p l/  A ,  A t, A l,  @ L8e@ $H(A  l    p t8  H  8 l    p t8  H  8 hb  H  l/  H  l,  @ $A p p A   l,  O   H  D t| @@ 8T~8 h|| @@  |  @A ~*b  H ~ l/  A 8   l|v p||v*| | K|!`    p8`~ |@@ 8 hH,IA  p| @@  p l/  A l,  A `, A X,  @ <8e@ H'QA  l p tH  8 l p tH  8 hb  H },  H  l,  @ $A | p B   p| @@ tH  l t| @@ 4T~|d| @@  d| @A |"H  b  8 hH }m,  A  l p C pH   p| @@ `  ,  AĀ l,  A(e,  A, A8`| @`  @ 8 hH*A  p| @@  p l,  A h,  A \, A T,  @ 8e@ $H%A  l|    p t8  H  8 l|    p t8  H  h,  @  A l p A   l,  H  D t|@@ 8T~|d| @@  d| @A ~"8 hb  H | l,  A 8   l|* p`  | Ky`    p8`~ |@@ 8 hH)A  p| @@  p l/  A l,  A `, A X,  @ <8e@ H$ɀA  l p tH 8 l p tH 8 hb  H {Q,  H  ,  @ HA̓ p B  8z 8 8| @ [ | x   _ p@H  t| @@ 4T~|d| @@  d| @A |"H  b  8 hH z,  AH l p C8z 8 8| @ [ | xH 4 p l/  A @,  A 4, A ,,  @ 8e@K8 hb  H zE,  H  ,  @ $A8e,  A, @K t(  A | @@ dA H8e,  A , @ (H#!A  l p t8 hb  H yH  $8 l p t8 hb  H y,  A ( lb  b  Kw1`    l p D8z 8 8| @ [ | x   _ p@Zy; 8   A 8 H'EA  |z |@@ `y  ,  Ax /  A(e,  A, A8`| @`  @ 8 H&ŀA  | @@   /  A h,  A \, A T,  @ 8e@ $H!̀A       8  H  8      8  H  h,  @  A l  F   /  H  D | @@ 8T~|d| @@  d| @A  "8 c  H w /  A 8   |z ||e| | Kui`    8`Y |@@ 8 H%A  | @@ _  /  A l,  A `, A X,  @ <8e@ H A    H 8   H 8 cD  H w!,  H  |,  @ 4Ax  G  88 x8 8 xH%)`   H h | @@ 4T~|d| @@  d| @A |"H  cD  8 H v,  A _  HѮ88 x8 8 xH$`   H .  A  l,  @ $|  ,   @     c  H  `d  ,  @ L@ (b|  ,   @      c  H   _  t 8 H L8 | @@ 8 H#A   ,  A <,  A 0, A (@ 8e@XK<8 cD  H u,  H  @ $A@8e,  A, @ K (  A | @@ dA H8e,  A , @ (HiA    8 cD  H uH  $8   8 cD  H t,  A L l,  @  b|  ,   @     c   cE  KrU`    _  IѮ88 x8 8 xH"`    [ l,  A L8e,  A , @ ,HA  l p t 8`  H!]A H  (8 l p t 8`  H!5A `|  `d   L8` H!EA ,  A  L  8  P8` H!!A ,  A  P  8 8` H!A ,  A       8`  [ T   8|   H 	 [~  | @8  @ tH  X8`  H)A ( Tc  HqA 8`  H,e`   8` KpA 4~  | @8  @  ~   ~  H  X0,   A 4  ~   | @@ 8  c    ,   @H  0 ~  | @@  c    ,   @8   9  `     |(@@  ,  @ 4     c c   ,  @8H $ | @@   `      ,  @ e     |0@@ 8 d             H  x   |0@@ 8  d             H  4 d                 ,  @      |8@@    H   |8@@    H Ȑ    H  ,  @ 4     c c   ,  @H   | @@  `      ,  @ e     |0@@ 8 d            H  x  |0@@ 8 d            H  4  d                ,  @      |8@@ $      ,  @ dH  P   |8@@ $       ,  @ 4H         ,  @    |(@K~ !  8  , c     |} aN       	(c             X_Insert__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FbPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_NodeRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__    ,   A    N     ,   @ D  ,   @ ,   ,   @    ,   K쐣  N    ,   @ L  | @@ @  `    ,   @ (  | @@   `    ,   K܈ ,   L    N       	 @          9_Dec__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorFv | !8    d`d  `?   P X T \8` HՀA |~yA d8   Sc  8  K%c   d8  8H !   }N  8`  HA 8`  H"i`   8` H"]`   !   }N       	(a              P7_Construct__3stdHQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___PQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___v  |A } &  !`  | (@`~  `  `  @ HA   |@@ c  |@@ ;| @@ c  HQA  | |@@ `}  ,  ;`  A /  A(e,  A, A8`| @`  @ c  H̀A  | @@   /  A h8e,  A X, A P,  @ @ $HՀA ~    ~ ~ 8  H  8~    ~ ~ 8  H  h,  @  A l~ a @e   /  H  D | @@ 8T~|d| @@  d| @A "c  c  H e /  A 8   | ||*| | Kcq`    8` |@@ c  HA  | @@   /  A p8e,  A `, A X,  ; @ 8@ HA ~ ~ ~ H  8~ ~ ~ H  c  c  H e%,  H  ,  @ $A ~ a Ae   | @@ H   | @@ DT~c  || @@   | (@; A |"H dH  ; c  H dH  ; ,  A ~  a B} H   | @@ `  ,  A /  A@e,  A$, A8`| @`  @ c  H%A  | @@   /  A 8e,  A p, A h,  @ H@ $H-A ~    ~ ~ 8  H  8~    ~ ~ 8  H  c  c  H c /  H  h,  @  A l~ a @e   /  H  D | @@ 8T~c  || @@  |  @A *c  H c= /  A 8   |* `  | K``    8` |@@ c  HA  | @@   /  A p8e,  A `, A X,  ; @ 8@ HA ~ ~ ~ H 88~ ~ ~ H  c  c  H bm,  H  ,  @ 0A ~ e   d h8! `c  |} AN   | @@ HT~|| @@ $ |  @; A |c  H aH  ; c  c  H aH  ; ,  A|~  } d h8! `c  |} AN  .  A | @@  ; ;`  ,  @  |b   ,   @ c    ,  @  ,  A H8e,  A , @ (H
uA ~ ~ ~  ,  @ DH  $8~ ~ ~  ,  @  |b   ,   @ c      ~   8 H \; ;`  8 | @@ c  HA ~  ,  A <8e,  A ,, A $@ @Kc  c  H `U,  H  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H	5A ~ ~ ~ c  c  H _H  $8~ ~ ~ c  c  H _,  A T ,   @ (|b   ,   @ c    |H  |~ c  K]`   ~  } d h8! `c  |} AN       	 C       p assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__UlT2   N       	 @           __dl__FPvT1   N       	 @          N_Iter_cat__3stdHQ2_3std26bidirectional_iterator_tagQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__lPCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std8iteratorXTQ2_3std26bidirectional_iterator_tagTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TlTPCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____Q2_3std26bidirectional_iterator_taga  8 8   | M    8    ,   @   ,   @ Hh   ,   @ ,  h   ,   @   h   ,   K  a H  d  ,   @ L | @@ @ a    ,   @ ( | @@  a    ,   Kܑ a    | M  8    ,   K,N       	 @        _Distance2__3stdHQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorUl_Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorT1RUlQ2_3std26bidirectional_iterator_tag_v |,   ! ;  @ $|   ,   @   8      | @@ `  ,  A Pc ,  @ c  |`  || (8|KVɀA ,  A Tc X8! P}N  |@@ 8`  X8! P}N  A ; W X8! P}N       	 A         __lt__3stdHcQ2_3std11char_traitsXTc_Q2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___b   |,   ! ;  @ $|   ,   @   8    ,   A 8c ,  @ c  |`  || (8|KUA ,  @ 4|@@  ;c   X8! P}N  A ; c   X8! P}N       	 A         compare__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ N       	 @          y_Destroy__3stdHPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_PPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_v |`  `d   !8` H qA ,  A      H8! @}N       	 A        H_Construct__3stdHPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_NodePQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_PPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_NodeRCPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_v    `  |,   !A P8e,  A , @ 0H A 8       H8! @}N  88       H8! @}N       	 A         _Destroy__3stdHQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___PQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___v           N       	 @           swap__3stdHc_RcT1_v    ,   A |  @A c | | @@ 8`  N  8` N       	 @          4 U_Inside__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc | 8 | @!`  `}  T>@ H A ,  A 8    } /  A H    | @@  } /  A ,  A , A |,  @ ` ,  A @8e,  A , @  H aA 8`  } } } H x88`  } } } H \c  c  H I8` H H,  @ |A ` ,  A @8e,  A , @  H A 8      H  088      H  A 8      8`  H  Ȁ A (  A | @@  ,  A L8e,  A , @ ,H YA 8   c     c  H HH  `88   c     c  H HH  8| @@ 0T~|d| @@  d| @A "c  c  H H8`  X8! P}N       	 A       P S_Grow__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlb   ܃ |  ! ,   @ `  ;  b|B ;    @ ,  @   ,   @   ;     | @@ `  ,  A <~ ,  @ 8`  ||| (8|KFA ,  A T`H  $|@@ 8 H  8   A 8  T A   ,   @ 0H  c     ,   @   @ ,  K4c   x8! p}N       	 A	       0}_Lbound__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ؃ |`  `    ! ,   @ ;`  B| ;   a @ ,  @   ,   @ x  :     | @@ `  ,  A <} ,  @ 8`  ||| (8|KCՀA ,  A T`H  $|@@ 8 H  8   A 8  T A c     ,   @ ,H    ,   @  a @ ,  K4   x8! p}N       	 A
       4upper_bound__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ |8`   ! |`  H A `~  ;   @8` c  H A ,  A  @  8  D8` H uA ,  A  D  8 ; |8` H QA ,  A       c   h8! `}N       	 A       g_Buynode__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Nodec   c    | |  4T ~h N       	 @          l__ne__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorCFRCQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iterator     ,   L    ,   @ D   ,   @ ,     ,   @      ,   K쐣  N    ,   @ L | @@ @  `    ,   @ ( | @@   `    ,   Kܐ  N       	 @          9_Inc__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorFv | } &;    ! 8 萡  X \a ` d `  `}  ,   A
 b  l p t;c  H A `y   l,  A |@A  p|| @@ 48 | @;@ @8a hH A  p l/  AH Ԁ l;@ ~| @@ 8a hH ՀA  p|v |@@ c#  6| @; @ 8a hH 祀A  p|y |@@ `x  ,  A l/  ADe,  A(, A 8`| @`  @ 8a hH %A  p| @@  p l/  A ,  A t, A l,  @ L8e@ $H -A  l    p t8  H  8 l    p t8  H  8a hb  H 8 l/  H  l,  @ $A p p A   l,  O   H  D t| @@ 8T~8a h|| @@  |  @A ~*b  H 89 l/  A 8   l|y p||y*| | K5`    p8`8 |@@ 8a hH ՀA  p| @@ ! p l/  A l,  A `, A X,  @ <8e@ H ݀A  l p tH  8 l p tH  8a hc$  H 7e,  H  l,  @ $A | p B   p| @@ tH  l t| @@ 4T~|d| @@  d| @A |"H  c$  8a hH 6,  A a l! p Cɮ pH   p| @@ `  ,  A l,  A(e,  A, A8`| @`  @ 8a hH yA  p| @@ ! p l,  A h,  A \, A T,  @ 8e@ $H ߁A  l|    p t8  H  8 l|    p t8  H  h,  @  A l p A   l,  H  D t|@@ 8T~|d| @@  d| @A  "8a hc$  H 5 l,  A 8   l|* p`  | K3%`    p8`6 |@@ 8a hH MA  p| @@ ! p l/  A l,  A `, A X,  @ <8e@ H UA  l p tH  8 l p tH 8a hc$  H 4,  H  ,  @ DAȓ p B  ! p88A [.   |a x   A@H  t| @@ 4T~|d| @@  d| @A |"H  c$  8a hH 4Q,  AHa l! p Cɮ! p88A [.   |a xH 4 p l/  A @,  A 4, A ,,  @ 8e@K8a hc$  H 3,  H  ,  @ $A8e,  A, @K t(  A | @@ dA H8e,  A , @ (H ܱA  l p t8a hc$  H 3UH  $8 l p t8a hc$  H 31,  A (a lc  c%  K0`   a l! p Dɮ! p88A [.   |a x   A a l,  @ $|  ,   @   D  c  H  `d  ,  @ L@ (b|  ,   @   C   c  H  a !  t 8 H x8 | @@ 8a H 1A   ,  A h,  A \, A T@ <8e@ H IA    H 8   H  8a c$  H 1,  H  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H ڱA    8a c$  H 1UH  $8   8a c$  H 11,  A L l,  @  b|  ,   @   C  c  a c%  K.`   a !  Iɮ88 ( x8a 8 xH 	`    [ l,  A T8e,  A , @ 4H ـA  l p t  L 8a ,   @ H  08 l p t  L 8a ,   @   ,   @ H   ,   @ ,     ,   @      ,   K쐃   LH  `e  ,   @ L | @@ @a `d  c  ,   @ ( | @@ a `d  c  ,   Kܐa  Pe  `  `   ,   A e H  T  ,   @ Dd   ,   @ ,  d   ,   @   d   ,   K`  d |@@X  ,   @    | @@ e    | @@ H  <  | @@ d     | @@ H  d    | @@ p  ,   A     | @@H  T`g     ,   @ ,     ,   @      ,   K    | @@8   ,   A   ,  @H  `g    ,   @ ,   ,   @    ,   K H  Ѐ        | @@ `    | @@ HH  <  ,   @  d        | @@  H  D   | @@ 0         ,  @H  ,        ,  @  | @A| ,  @p8    |(@@T  ,  @          ,  @      |8@@ $      ,  A \H  P   |8@@ $       ,  A ,H         ,  A `  H p   , @   , AH  ,  @ 8           ,   @      | @@ 8     8        H  x  | @@ 8     8        H  4      8            ,   @      | @@     H @   | @@      H      H  ,  @          ,  @      |8@@ $      ,  @H  P  |8@@ $      ,  @H          ,  @  , @    , @  `     |(@A  , @   |(@K8    ,  A8e,  A , @H qA    c  H YA H    ,  @ 8           ,   @      | @@ 8       8         H  x   | @@ 8        8         H  4       8             ,   @      | @@    Kx  | @@    KX    KH8   c  H ɀA } ,  A 8      8! |} N       	(C
      P      Xaerase__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iterator |a  !`  ,   `  @Xa D;   c   ,   @  a DK{   ,  A H8e,  A , @ (H ͕A    c  H }A H  $8   c  H YA c|   ,   @  a DKx   ,  A H8e,  A , @ (H A    c  H A H  $8   c  H рA c   ,   @  c   ,   K܁ h8! `a}N   X8! `N       	 A       d_Erase__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node  8 8  H %d     	 @            __dftdt__Q2_3std12length_errorFv  <` 8cN       	 @          5max_size__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFv !|;  ; `  b } &| @  8c 8    !   $ `  ;@@ ;y; 8   A c  H ՀA  |{ |@@ `y  ,  A /  A(e,  A, A8`| @`  @ c  H UA  | @@ _  /  A h8e,  A X, A P,  @ @ $H ]A       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A @"c  cD  H  /  A 8   |{ ||e| | K`    8`Y |@@ c  H !A  | @@ _  /  A p8e,  A `, A X,  ;` @ 8@ H %A    H 8   H c  cD  H ,  H  ,  @ 8A    t8   x8! pc  |} !N   | @@ HT~|| @@ $ |  @;` A |c  H 1H  ;` cD  c  H H  ;` ,  A _  t8   x8! pc  |} !H .  A { ;@ ,  @  b|  ,   @   C  c  ,  @ \{ ,  @ (b|  ,   @   C   c  H       8 H L;@ 8 | @@ c  H A   ,  A <8e,  A ,, A $@ @,Kc  c$  H ,  H  @ $A8e,  A, @K؀ (  A | @@ dA H8e,  A , @ (H ɀA    c  c$  H mH  $8   c  c$  H I,  A H ,  @  b|  ,   @   C  c   c%  K`    ?  t8   x8! pc  |} !N       	 C       \ f__ct__Q2_3std12length_errorFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__       ,   @    c  | @@     N  d   | @@      N      N       	 @          xf_Lrotate__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node       ,   @    c  | @@    N  d  | @@    N      N       	 @          xf_Rrotate__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node  ,   L  c   ,   L  c   ,   KN       	 @          <b_Max__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Nodec    | |  4T ~h N       	 @          z__ne__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorCFRCQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iterator   ,   L    ,   @ D   ,   @ ,     ,   @      ,   K쐣  N    ,   @ L | @@ @  `    ,   @ ( | @@   `    ,   Kܐ  N       	 @          @_Inc__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorFv  !| HH A  H8! @}N       	 A         $ _Allocate__3stdHc_UlPc_Pc |!`   HH A  H8! @}N       	 A         ( *allocate__Q2_3std9allocatorXTc_Hv_UlPCv_Pc8` N       	 @           >__eq__3stdHcc_RCQ2_3std9allocatorXTc_RCQ2_3std9allocatorXTc__b!| HKy`    H8! @}N       	 A         $ &copy__Q2_3std11char_traitsXTc_FPcPCcUl|!`   HH A  H8! @}N       	 A         ( &deallocate__Q2_3std9allocatorXTc_FPcUlc ,  L  |b   ,   L  8  8      N       	 @          4 Rc_str__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv|b   ,   L  8  8      N       	 @       ( T_Nullstr__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv  c N       	 @           Qsize__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv c N       	 @           Ucapacity__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv |  !`  |  @`  `   D`  @ H A  | | @@ `  ,  A <8`   ,   A |~| D|| (8|KA ,  @ 0|@@ 8` h8! `}H   8`  A 8`  h8! `}N       	 A         \compare__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFUlT1PCcT1    8   |)N       	 @           Q_Eos__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl 8dN       	 @           U_Refcnt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc |a  !`  |  @`  `  @ H ɀA  | | @@ `  ,  A ;`  /  A@,   A(,  A  8 `|  | @@ c  H AA  |@@   /  A 8e,  A p, A h,  @ H@ $H IA       8  H  8      8  H  c  c  H  /  H  h,  @  A h a @e   /  H  D | @@ 8T~c  || @@  |  @A *c  H Y /  A 8    ||}|(|(|"K`    8 | @@ c  H A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H A    H  8   H  c  c  H ,  H  ,  @ (A  e  c   h8! `a}N   | @@ HT~|| @@ $ |  @; A |c  H H  ; c  c  H H  ; ,  A   }c   h8! `a}N       	 A        Terase__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlT1  `  |c  !,  AT,   A(,  A  8 | @@ c  H A  | @@   /  A 8e,  A p, A h,  @ H@ $H A 8`  |     H  88`  |     H  c  c  H  ,  H  l,  @ $A X8       ,  A TH  H | @@ 0T~|d| @@  d| @A "c  c  H  ,  A 8   H8! @}N   <8! @N       	 A       | S_Freeze__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv   8`N       	 @           Umax_size__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv A|;  `   !8 | @8`?  `z  a   H La P T@ `  8  8~  KH ̀A  K`}   ; ,  A \H  D8`  H =A  _ 8~ H A `}  8` KŀA  ; ,  A  c  K`    `   ,  A \8d,  A , @ <H EA  8      z z |!   A}H  88 8      z z |!   A}N       	(a       l      H R_Copy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl   ܃ |  ! ,   @ `  ;  b|B ;    @ ,  @   ,   @   ;     | @@ `  ,  A <} ,  @ 8`  ||| (8|KA ,  A T`H  $|@@ 8 H  8   A 8  T A c     ,   @ ,H    ,   @   @ ,  K4c   x8! p}N       	 A	       0}_Ubound__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ | `  8` 8 `  88!8    Da @ H L   C8  c  8  H 	s A c  H =A c   h8! `}N       	(A              @ __dt__Q2_3std12length_errorFv 8 8  H 
,     	 @            __dftdt__Q2_3std12out_of_rangeFv  !|;  ; `  b } &| @  8c8    !   $ `  ;@@ ;y; 8   A c  H A  |{ |@@ `y  ,  A /  A(e,  A, A8`| @`  @ c  H A  | @@ _  /  A h8e,  A X, A P,  @ @ $H A       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A @"c  cD  K /  A 8   |{ ||e| | K)`    8`Y |@@ c  H QA  | @@ _  /  A p8e,  A `, A X,  ;` @ 8@ H UA    H 8   H c  cD  K,  H  ,  @ 8A    t8ؐ   x8! pc  |} !N   | @@ HT~|| @@ $ |  @;` A |c  KaH  ;` cD  c  KMH  ;` ,  A _  t8ؐ   x8! pc  |} !H .  A { ;@ ,  @  b|  ,   @   C  c  ,  @ \{ ,  @ (b|  ,   @   C   c  H       8 H L;@ 8 | @@ c  H MA   ,  A <8e,  A ,, A $@ @,Kc  c$  K,  H  @ $A8e,  A, @K؀ (  A | @@ dA H8e,  A , @ (H A    c  c$  KH  $8   c  c$  Ky,  A H ,  @  b|  ,   @   C  c   c%  K`    ?  t8ؐ   x8! pc  |} !N       	 C       \ f__ct__Q2_3std12out_of_rangeFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__   ,   L  c     ,   L  c     ,   KN       	 @          <b_Min__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node8  8  H  <     	 @            __dftbdt__Q2_3std11logic_errorFv  |  `  8  ;  8H8~,  8 ! @`   H D   L CA P8e,  A , @ 0H aA s 8~x      CA <H  ,8s 8~x      CA c  H 	A c   h8! `}N       	(A              @ __dt__Q2_3std11logic_errorFv  | `  8` 8ؐ `  8X!8    Da @ H L   C8  c  8  Ks A c  H MA c   h8! `}N       	(A              @ __dt__Q2_3std12out_of_rangeFv  8x  N       	 @           __dftbdt__Q2_3std9exceptionFv |`   p ! 8x  A H A c   H8! @}N       	 A        H __dt__Q2_3std9exceptionFv c N       	 @           what__Q2_3std9exceptionCFvN       	 @           _Doraise__Q2_3std9exceptionCFv|c  ,   !`?  @ b|  ,   @ 8  8      `  H  X8`  H A 8   CH =A 8    CH  $8`  H ̀A H A 8` H 9`   8` H -`   !   }N       	(a              @ what__Q2_3std11logic_errorCFv|A} &`~    !` 8` H 1A 0;  8 8a P| @8x8 H a H T L X \;`^ @^y;@8   A 8a PH %A  X|~ |@@ `z  ,  Ah T/  A(e,  A, A8`| @`  @ 8a PH A  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H A  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  KՀ T/  A 8   T|~ X||e| | KI`    X8`z |@@ 8a PH qA  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H uA  T X \H 8 T X \H 8a Pcd  K,  H  x,  @ Ad X B  H T \| @@ HT~|| @@ $ |  @; A |8a PKH  ; cd  8a PKH  ; ,  Aa Ta X CٮH .  A ~ ;` ,  @ $|  ,   @   d  c  H  `d  ,  @ T@ (b|  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH A  X T,  A <,  A 0, A (@ 8e@lKP8a PcD  Ky,  H  @ $AT8e,  A$, @4K \(  A | @@ dA H8e,  A , @ (H YA  T X \8a PcD  KH  $8 T X \8a PcD  K,  A L ,  @  b|  ,   @   c  c  a TcE  KE`   a TA X DѮc  H AA 8 X8a `8 HH `     8! |} AN       	 C       L !_Doraise__Q2_3std11logic_errorCFv |A} &`~    !` 8` H A 0;  8 8a P| @8x8 H a H T L X \;`^ @^y;@8   A 8a PH A  X|~ |@@ `z  ,  A T/  A(e,  A, A8`| @`  @ 8a PH !A  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H )A  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  KQ T/  A 8   T|~ X||e| | K`    X8`z |@@ 8a PH A  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H A  T X \H 8 T X \H 8a Pcd  Ky,  H  ,  @ ,A X B  8c   HH 	A H | \| @@ HT~|| @@ $ |  @; A |8a PK	H  ; cd  8a PKH  ; ,  Aa Ta X Cٮ8c   HH A H .  A ~ ;` ,  @ $|  ,   @   d  c  H  `d  ,  @ T@ (b|  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH A  X T,  A <,  A 0, A (@ 8e@DK(8a PcD  K,  H  @ $A,8e,  A, @K \(  A | @@ dA H8e,  A , @ (H A  T X \8a PcD  KQH  $8 T X \8a PcD  K-,  A L ,  @  b|  ,   @   c  c  a TcE  K`   a TA X DѮ8c   HH A 8 x8a `8 HH `     8! |} AN       	 C       | "_Doraise__Q2_3std12length_errorCFv|A} &`~    !` 8` H A 0;  8 8a P| @8x8 H a H T L X \;`^ @^y;@8   A 8a PH A  X|~ |@@ `z  ,  A T/  A(e,  A, A8`| @`  @ 8a PH mA  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H uA  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  K T/  A 8   T|~ X||e| | K`    X8`z |@@ 8a PH 9A  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H =A  T X \H 8 T X \H 8a Pcd  K,  H  ,  @ ,A X B  8c   HH UA H | \| @@ HT~|| @@ $ |  @; A |8a PKUH  ; cd  8a PKAH  ; ,  Aa Ta X Cٮ8c   HH рA H .  A ~ ;` ,  @ $|  ,   @   d  c  H  `d  ,  @ T@ (b|  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH MA  X T,  A <,  A 0, A (@ 8e@DK(8a PcD  K,  H  @ $A,8e,  A, @K \(  A | @@ dA H8e,  A , @ (H A  T X \8a PcD  KݝH  $8 T X \8a PcD  Ky,  A L ,  @  b|  ,   @   c  c  a TcE  K`   a TA X DѮ8c   HH ـA 8 8a `8 HH E`     8! |} AN       	 C       | "_Doraise__Q2_3std12out_of_rangeCFv8 8  K     	 @           __dftdt__Q2_3std11logic_errorFv   Ks,N       	 @       @146  KhN       	 @       @528  KܤN       	 @       @31   KN       	 @       @7KN       	 @       @9 A   L |	N              |,   !`  `  `  `  A 8 H `   H  8     ,    A ,8 c  8 H `    X8! P}H  8     X8! P}N       	 A         Qinit__11StanzaEntryFPCcQ2_7ACLFile14PermissionTypeQ2_7ACLFile15PermissionLevelPCc |,  `   !8cA (8 H `   88  8H m`   H  , 8 8H `   88  8H A`   8   8`    c   H8! @}N       	 A         __ct__7ACLFileFPc |`   !a Db H ݀A s A a DH A a D X8! P}N       	 A        P __dt__7ACLFileFv  | 8; !8a,8P8dc  H A 8a,H A 8 @c  H ـA 8 `  8~dH ŀA |`y@ a \ |  A 8` H8!@}N  8`  H8!@}N       	 A         _copyDefaultFile__7ACLFileFv  |`  8c !@8 @H %A ,  @ , \,  A 8`  8! }N  A DKA   ,  A 0KA c  H A 8`  8! }N  c  K, @ (8H A 8`  8! }N  8`   8! }N       	 A         _fileExists__7ACLFileFv   | !`~  K,  , A (@ 8   8~ 8 hH mA H  $8  H  8~ 8 hH IA ~  ,  @ 8`  H8! @}N  8  8  H =A 8~8888H 1A 8~8 lH A ~ |`y@ 0~  H !A 8   8`    H8! @}N  8`   H8! @}N   H8! @}N       	 A       , _openFiles__7ACLFileFv`  |c  ;   !,  ;  A H yA `~   ,  A H aA |~x   c   X8! P}N       	 A        l _closeFiles__7ACLFileFv   |`  } &;    !;  b H A b 888cH A `|  ,@ DKA c  H A b H A 8`  t x8! p|} N  8  8` a @|   D B Hc  8 8 @H A `}  KсA c  H ~A ,  A XKeA   ,  A KQA   ,  @L8` H A ; . @ c  8 8 @KK @ 8`   t x8! p|} N       	 C       ` _aquireFileLocks__7ACLFileFv  |8  !`  8a @8  H |`    8   @8   , B D HA X8 8 @H ~A `~   H ~A 8 b  H ~qA 8 |  4T~ h8! `}H  8b H ~EA  h8! `8`  }N   h8! `}N       	 A         _releaseFileLocks__7ACLFileFv |`   ! ,   @  8a 888H |A 8   8 @ \8H |QA ,  A 0KMA c  H |]A 8` 8!}N   \,   A (8a H |UA 88 H }ՀA ,  @8   c H }݀A ,  A 0KрA c  H {A 8` 8!}N  8   8 @ \8H {A ,  @< \,   @ 8` 8!}N  88H }}A ,  @|8`  8!}N       	 A       x _SwapFiles__7ACLFileFv|`     !8 8c H }1A ,  A 8`   H8! @}N     p  A 8`  H8! @}N  K͕A c  H zA 8`  H8! @}N       	 A         _readLine__7ACLFileFv | !0`}  `  K!,  @ ,  A  , A c  H A,  A 0c  8 @H ,  @ c  8 @K`   ,  A Ȁ c  88 H ,  @ c  K,  A}   p  @ |H  L , A l c  88 H ,  @ Xc  KY,  AЀ}   p  @ 0KAA c  H yQA 8`  8! л}N  8` K8` K8`  K     	 A       @ %_copy_till_stanza_found__7ACLFileFPCc |!c  HH {%A 0|` H8! @}N       	 A         0 _lineIsStanzaHeader__7ACLFileFv   | !`   H8c 8H zـA 80`|c H8! @}N       	 A         @ _first_token__7ACLFileFPc | ;  !8   axH!;A||L @8a A|8c  B 8a @8H8H z9A `~  ,@ 8` h8!`}N  (@ 8` h8!`}N  aL88 @H z	A `  aLH z!A | @8`  h8!`}N       	 A       "_printToFile__7ACLFileCFP4FILEPCce|`~  d `   ! H  ݀ `g  `  H Q `h  c  `  8c  Ky,  A 8`  X8! P}N   4 A c  8KA,  H  c  8K-,  @8`   X8! P}N       	 A         '_print_entry__7ACLFileCFPC11StanzaEntry   ,  , /  A A A 8d dN  8d XN  8d \N  8d `N       	 @          < 1get_permission_type__FQ2_7ACLFile14PermissionType ,  , / / b A A A A 8c dN  8c hN  8c lN  8c pN       	 @          D 3get_permission_level__FQ2_7ACLFile15PermissionLevel    |a,   !p`  T>at; @;`  @ a @cd  |  D; DH     @|  D; DA L atK|{x @  Le   D  }   @ H|  A  atK,  @ ,  A  8a P8 8 88Ke8a`88 8 8$KMatc  88  H ,  @ at8 PK`{  atc  88  H i,  @ at8`K|{xcc  8!a}N       	 A       \ __print_all_entries__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__b   c ,  @ 8     N      N       	 @          $ Ibegin__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv    N       	 @           Gend__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv   c    | |  4T ~h N       	 @           __ne__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator  c  8c N       	 @           R__ml__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFv          N       	 @            Q__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFi |,   !pT>`  A8    @,  @ x D @ ; X|`  XA H  x, @ Ha Ha xa P  a T x         H nA  8 8` H     D @ ; X|`  XA \  a 8 H rqA ,  a @Al a \  a ` X   @|  A  a 8 K8`   8! }N       	 A       8 \_entry_exists__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Pcb      N       	 @           __as__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator   | ! @ p8 p  `~  `    a @a D         H lрA ~  p  8  X8! P}N       	 A       | erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator N       	 @           _Next__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__4_AccFPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node c 8|  4T~N       	 @           _lineIsComment__7ACLFileFv|} &  ! `   `  K],  @ .  , A `c  K,  @ Pc  Ki,  A H c  88 K-,  A |8`   8! |} N  8`  H  hA Pc  8 @K},  @  c   8 @8 K,  @   c  88 K,  @c  K,  A88`   8! |} N       	 C       $ d_copy_stanza_to_outfile__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__i  8 H  L     	 @           1AddOrUpdateEntries__7ACLFileFPCcCPC11StanzaEntryi |`  ;  } &b  !8 4`  `  `   ԓ Г ܓ c  K,  A h8!`a}8` N  c  K,  A $c  K]h8!`a}8` N  c  4K`z  ;   8` H l9A  a D`d  ,   A ;! H  ;! D8` H l5A ,  A     a D ,   8 A ;! H  ;! D8` H kA ,  A      D,   8` a Ӑ c  @ D;; ē H8a 8 HH -;9 | @ ; ē H8a 8 HK,  , AA$c  Kc  K% Ӏ ,  @ ( P| c   ; ; A H  (   P| c   ; ; A ;a X  aa `    a d           H fA a    |  \8 A (a X  aa `    a d  K Đa T`  H faA h8!`}8` N  , @䃢  c  48K,  A$c  Kc  Kݛ Ӏ ,  @ ( h| c   ; ; A H  (   h| c   ; ; A ;a X  aa `    a d           H euA a    |  \8 A (a X  aa `    a d  K Đa l`  H eA h8!`}8` N  ;8a88 8 8K;a 8a 88 8 8$Kᓁ p8 p 8a H Ea x8 x 8a H 1c  8 8  Ku,  A,c  Kc  KE Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H c݀A a    |  \8 A (a X  aa `    a d  K Đa `  H cA h8!`}8` N  . A4  8 c  8K,  Ac  Kc  K Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H bA a    |  \8 A (a X  aa `    a d  K Đa `  H b9A 8` H , @,c  8 8  K,  Ac  Kc  K͛ Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H aeA a    |  \8 A (a X  aa `    a d  K Đa `  H a	A 8` H @ c  8 8 K, H  c  8 8  K, @c  Kac  K㉛ Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H `!A a    |  \8 A (a X  aa `    a d  K Đa `  H _ŀA 8` H t,  @X  8 c  8K5,  Ac  K)c  KQ Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H ^A a    |  \8 A (a X  aa `    a d  K Đa `  H ^A 8` H <c  8  K, Ac  Kc  K- Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H ]ŀA a    |  \8 A (a X  aa `    a d  K Đa `  H ]iA 8` H c  K1`}  c  Kc  K,   ,  A  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H \A a    |  \8 A (a X  aa `    a d  K Đa `  H \EA 8` H   @ ( c  |a  ; ; A H  $d  a |a  ; ; A ;a X  aa `    a d           H [A a    |  \8 A (a X  aa `    a d  K Đa `  H [QA c  dh8!`|} N       	(C              -_processFile__7ACLFileFPCcCPC11StanzaEntryiT3 |! !; a D`  ~ H`  H ^A |}y@   xa \8! p8`}N  ;  ,  @ P;=B ;9  c#  8 8 8 dKy; | @  ;9 c#  8 8 8 dK؀a D Hc  c  8  Ka L,  A c  H ^iA a L x8! p!}N       	 A         DeleteEntries__7ACLFileFPCcPPci   8  8  8 K     	 @           DeleteStanza__7ACLFileFPCc |,   !p`  @ ,8`  a @ a h; l; h| lA H  (d  a @ a h; l; h| lA ; xa H  a xa P    a T           H XɀA a h    x|  L8 A (a H  a xa P    a T  K a D`  H XmA 8      8! }N       	 A       , K__dftdt__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv   |8`  ! p lH [A a @ l,   A ; l`d  8` H [A H  ; @`d  8` H [A ,  A     a @ p,   8 A ; pH  ; @8` H []A ,  A     a @ X8! P}N       	 A        _Buynode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeT1 |;  } &  `~  8| ȑ !a T`  `   P X d h \8` H ZA  da L`d  ,   A ;A dH  ;A L8` H ZA ,  A     a L h,   8 A ;A hH  ;A L8` H YŀA ,  A     ~ <@ A L8| (  @
"  t x |: db  H YA `w   t,  A |@A  x|| @@ 48 | @;  @8a pH YՀA  x t/  AH Ԁ t;  ~| @@ 8a pH YɀA  x|t |@@ b  ~| @:@ 8a pH YA  x|w |@@ `v  ,  A t/  ADe,  A(, A 8`| @`  @ 8a pH YA  x| @@  x t/  A ,  A t, A l,  @ L8e@ $H T!A  t    x |8  H  8 t    x |8  H  8a pb  H B t/  H  l,  @ $A p x A   t,  O   H  D || @@ 8T~8a p|| @@  |  @A ~*b  H BE t/  A 8   t|w x||w*| | K`    x8`~ |@@ 8a pH WɀA  x| @@  x t/  A l,  A `, A X,  @ <8e@ H RрA  t x |H  8 t x |H  8a pb  H Aq,  H  l,  @ $A | x B   x| @@ tH  l || @@ 4T~|d| @@  d| @A |"H  b  8a pH A,  A a t x C xH   x| @@ `  ,  A t,  A(e,  A, A8`| @`  @ 8a pH VmA  x| @@  x t,  A h,  A \, A T,  @ 8e@ $H QuA  t|    x |8  H  8 t|    x |8  H  h,  @  A l x A   t,  H  D ||@@ 8T~|d| @@  d| @A ~"8a pb  H ? t,  A 8   t|* x`  | K`    x8`~ |@@ 8a pH UAA  x| @@  x t/  A l,  A `, A X,  @ <8e@ H PIA  t x |H  8 t x |H 8a pb  H >,  H  ,  @ DAȓ x B   x8 8|H S.   a    A@H  || @@ 4T~|d| @@  d| @A |"H  b  8a pH >],  AHa t x C x8 8|H S.   a H 4 x t/  A @,  A 4, A ,,  @ 8e@K8a pb  H =,  H  ,  @ $A8e,  A, @K |(  A | @@ dA H8e,  A , @ (H NA  t x |8a pb  H =aH  $8 t x |8a pb  H ==,  A (a tb  b  K`   a t x D x8 8|H S.   a    A a t,  @ $8  ,   @     c  H  `d  ,  @ L@ (b8  ,   @      c  H  a   | 8 H x8 | @@ 8a H R%A   ,  A h,  A \, A T@ <8e@ H M=A    H 8   H  8a b  H ;,  H  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H LA    8a b  H ;aH  $8   8a b  H ;=,  A L t,  @  b8  ,   @     c  a b  K`   a   I8h8   8a 8 H P`    S t,  A X8e,  A , @ 8H K̀A  t x |~ 8 8  8` H OA H  48 t x |~ 8 8  8` H OA ,  A     _  z  |8! C  } N       	(C       <      P _Insert__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorRCP11StanzaEntry   |a !  ; `    ; | (A `{  ; X @    a @a Xa H  a L           H IA   X{  D  8c{ | (A 0 @    a @a Xa H  a L   K   x8! pa}N       	 A        erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorT1   |!`   HH H̀A  H8! @}N       	 A         ( _Freenode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node  | !  8 `d   H8hlKuA  H8! @}N       	 A         < dump__11StanzaEntryCFvN       	 @           _Destroy__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v   N       	 @           /_Destroy__3stdHP11StanzaEntry_PP11StanzaEntry_v   |`  `d   !8` H J}A ,  A      H8! @}N       	 A        H O_Construct__3stdHP11StanzaEntryP11StanzaEntry_PP11StanzaEntryRCP11StanzaEntry_v   |`  `d   !8` H ÌA ,  A      H8! @}N       	 A        HG_Construct__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodePQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeRCPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v   |!c  HH H	A  H8! @}N       	 A         ( _Allocate__3stdHQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_UlPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node   |!d  HH FрA  H8! @}N       	 A         ( allocate__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_Hv_UlPCv_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeN       	 @           __ct__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_ N       	 @           __ct__Q2_3std9allocatorXTPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_      N       	 @           Q__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFv  `  |,   !A P8e,  A , @ 0H ?A 8       H8! @}N  88       H8! @}N       	 A         S__dftdt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv   8 8  H  8     	 @            __dftdt__Q2_3std12length_errorFv  <`@ 8cN       	 @           Mmax_size__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__CFv ;  |`~     ! `  `  H BɀA `{   ,  A |@A  || @@ 48 | @; @c  H BA   /  AH  ; | @@ c  H BA  || |@@ cc  || @;@c  @ c  H BmA  |{ |@@ `z  ,  A /  A@e,  A$, A8`| @`  @ c  H AA  | @@ >  /  A 8e,  A p, A h,  @ H@ $H <A       8  H  8      8  H  c  c$  H + /  H  h,  @  A l  A   /  H  D | @@ 8T~c  || @@  |  @A  *c$  H + /  A 8   |{ ||e| | Ky`    8`z |@@ c  H @A  | @@ ~  /  A l8e,  A \, A T,  @ 8@ H ;A    H  8   H  c  cd  H *I,  H  l,  @ $A |  B   | @@ tH  l | @@ 4T~|d| @@  d| @A |"H  cd  c  H ),  A ~ ~  C H   | @@ `  ,  A /  A(e,  A, A8`| @`  @ c  H ?EA  | @@ ~  /  A h8e,  A X, A P,  @ @ $H :MA       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A `"c  cd  H ( /  A 8   | `  | K`    8` |@@ c  H >A  | @@   /  A l8e,  A \, A T,  @ 8@ H 9!A    H 8   H c  c  H ',  H  p,  @ (A    x8! pc  }N   | @@ 4T~|d| @@  d| @A |"H  c  c  H 'Q,  A8~   x8! pc  }N    /  A @8e,  A 0, A (,  @ @Kc  cd  H &,  H  ,  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H 7A    c  cd  H &aH  $8   c  cd  H &=,  A $~ c  ce  K`   ~ ~  x8! pc  }N       	 A       L R__ct__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc!|;  ; `  b } &| @ 8c 8H    !   $ `  ;@@ ;y; 8   A c  H ;!A  |{ |@@ `y  ,  A /  A(e,  A, A8`| @`  @ c  H :A  | @@ _  /  A h8e,  A X, A P,  @ @ $H 5A       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A @"c  cD  H #逿 /  A 8   |{ ||e| | KE`    8`Y |@@ c  H 9mA  | @@ _  /  A p8e,  A `, A X,  ;` @ 8@ H 4qA    H 8   H c  cD  H #,  H  ,  @ 8A    t8h   x8! pc  |} !N   | @@ HT~|| @@ $ |  @;` A |c  H "H  ;` cD  c  H "H  ;` ,  A _  t8h   x8! pc  |} !H .  A { ;@ ,  @  b8  ,   @   C  c  ,  @ \{ ,  @ (b8  ,   @   C   c  H       8 H L;@ 8 | @@ c  H 7iA   ,  A <8e,  A ,, A $@ @,Kc  c$  H !M,  H  @ $A8e,  A, @K؀ (  A | @@ dA H8e,  A , @ (H 2A    c  c$  H  H  $8   c  c$  H  ,  A H ,  @  b8  ,   @   C  c   c%  K`    ?  t8h   x8! pc  |} !N       	 C       \ f__ct__Q2_3std12length_errorFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__|`   p !A \ ,  A P8e,  A , @ 0H 0A 8       H8! @}N  88       H8! @}N       	 A         Q_Tidy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fb |`  } &c   ,  ! L`  A | @A  |c|@@ 88 | @;  ; @c  H 41A   /  AH  ; ;   | @@ c  H 4!A  |x |@@ c  ~   | @;`@ c  H 3A  || |@@ `{  ,  Ac   /  A(e,  A, A8`| @`  @ c  H 3iA  | @@ ?  /  A h8e,  A X, A P,  @ @ $H .qA  O    8  H  8 O    8  H  h,  @  A l  @   /  H  D | @@ 8T~|d| @@  d| @A  "cC  c$  H  /  A 8   || ||e| | K`    8` |@@ c  H 25A  | @@   /  A l8e,  A \, A T,  @ 8@ H -=A    H  8   H  c  c  H ,  H  l,  @ $A |  A   | @@ tH  l | @@ 4T~|d| @@  d| @A |"H  c  c  H q,  A    B H   | @@ `  ,  Axc   /  A(e,  A, A8`| @`  @ c  H 0ՀA  | @@   /  A h8e,  A X, A P,  @ @ $H +݀A  O    8  H  8 O    8  H  h,  @  A l  @   /  H  D | @@ 8T~|d| @@  d| @A `"c  cd  H  /  A 8   | `  | K`    8` |@@ c  H /A  | @@   /  A l8e,  A \, A T,  @ 8@ H *A    H  8   H  c  c  H Q,  H  x,  @ 0A |    t x8! pc  |} N   | @@ 4T~|d| @@  d| @A |"H  c  c  H ,  A    t x8! pc  |} N    /  A l8e,  A \, A T,  @ 8@ H )A    H  8   H  c  c  H 5,  H  ,  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H (A    c  c  H H  $8   c  c  H ,  A $  Lc  K}	`      x8! pc  }N       	 C       l Vassign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCcUl|A } &  !`  | (@`~  `  `  @ H ,A   |@@ c  |@@ ;| @@ c  H ,qA  | |@@ `}  ,  ;`  A /  A(e,  A, A8`| @`  @ c  H +A  | @@   /  A h8e,  A X, A P,  @ @ $H &A ~    ~ ~ 8  H  8~    ~ ~ 8  H  h,  @  A l~ a @e   /  H  D | @@ 8T~|d| @@  d| @A "c  c  H 5 /  A 8   | ||*| | Kz`    8` |@@ c  H *A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H %A ~ ~ ~ H  8~ ~ ~ H  c  c  H ],  H  ,  @ $A ~ a Ae   | @@ H   | @@ DT~c  || @@   | (@; A |"H H  ; c  H H  ; ,  A ~  a B} H   | @@ `  ,  A /  A@e,  A$, A8`| @`  @ c  H )EA  | @@   /  A 8e,  A p, A h,  @ H@ $H $MA ~    ~ ~ 8  H  8~    ~ ~ 8  H  c  c  H ݀ /  H  h,  @  A l~ a @e   /  H  D | @@ 8T~c  || @@  |  @A *c  H u /  A 8   |* `  | Kw`    8` |@@ c  H (A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H #A ~ ~ ~ H 88~ ~ ~ H  c  c  H ,  H  ,  @ 0A ~ e   d h8! `c  |} AN   | @@ HT~|| @@ $ |  @; A |c  H 1H  ; c  c  H H  ; ,  A|~  } d h8! `c  |} AN  .  A | @@  ; ;`  ,  @  8b  ,   @ c    ,  @  ,  A H8e,  A , @ (H !A ~ ~ ~  ,  @ DH  $8~ ~ ~  ,  @  8b  ,   @ c      ~   8 H \; ;`  8 | @@ c  H %A ~  ,  A <8e,  A ,, A $@ @Kc  c  H ,  H  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H  UA ~ ~ ~ c  c  H H  $8~ ~ ~ c  c  H ,  A T ,   @ (8b  ,   @ c    |H  |~ c  Kt5`   ~  } d h8! `c  |} AN       	 C       p assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__UlT2   |`  8` 8h `  8 !8    Da @ H L   C8  c  8  H s A c  H A c   h8! `}N       	(A              @ __dt__Q2_3std12length_errorFv |a  !`  |  @`  `  @ H "ՀA  | | @@ `  ,  A ;`  /  A@,   A(,  A  8 `|  | @@ c  H "MA  |@@   /  A 8e,  A p, A h,  @ H@ $H UA       8  H  8      8  H  c  c  H 倿 /  H  h,  @  A h a @e   /  H  D | @@ 8T~c  || @@  |  @A *c  H } /  A 8    ||}|(|(|"Kp`    8 | @@ c  H !A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H A    H  8   H  c  c  H 
,  H  ,  @ (A  e  c   h8! `a}N   | @@ HT~|| @@ $ |  @; A |c  H 
9H  ; c  c  H 
%H  ; ,  A   }c   h8! `a}N       	 A        Terase__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlT1  8b  ,   L  8  8      N       	 @       ( T_Nullstr__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv  | 8 | @!`  `}  T>@ H A ,  A 8    } /  A H    | @@  } /  A ,  A , A |,  @ ` ,  A @8e,  A , @  H mA 8`  } } } H x88`  } } } H \c  c  H 8` H H,  @ |A ` ,  A @8e,  A , @  H A 8      H  088      H  A 8      8`  H  Ȁ A (  A | @@  ,  A L8e,  A , @ ,H eA 8   c     c  H H  `88   c     c  H H  8| @@ 0T~|d| @@  d| @A "c  c  H 8`  X8! P}N       	 A       P S_Grow__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlb    ,   A |  @A c | | @@ 8`  N  8` N       	 @          4 U_Inside__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc 8  8  H  <     	 @            __dftbdt__Q2_3std11logic_errorFv  | `  8  ;  88~H,  8 ! @`   H D   L CA P8e,  A , @ 0H A s 8~(      CA <H  ,8s 8~(      CA c  H A c   h8! `}N       	(A              @ __dt__Q2_3std11logic_errorFv  !| HH 5A  H8! @}N       	 A         $ _Allocate__3stdHc_UlPc_Pc |!`   HH ݀A  H8! @}N       	 A         ( *allocate__Q2_3std9allocatorXTc_Hv_UlPCv_Pc8` N       	 @           >__eq__3stdHcc_RCQ2_3std9allocatorXTc_RCQ2_3std9allocatorXTc__b8(  N       	 @           __dftbdt__Q2_3std9exceptionFv |`   p !8(  A H ՀA c   H8! @}N       	 A        H __dt__Q2_3std9exceptionFv `  |c  !,  AT,   A(,  A  8 | @@ c  H A  | @@   /  A 8e,  A p, A h,  @ H@ $H A 8`  |     H  88`  |     H  c  c  H  ,  H  l,  @ $A X8       ,  A TH  H | @@ 0T~|d| @@  d| @A "c  c  H  ,  A 8   H8! @}N   <8! @N       	 A       | S_Freeze__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv   8`N       	 @           Umax_size__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv A|;  `  !8 | @8`?  `z  a   H La P T@ `  8  8~  KH A  K`}   ; ,  A \H  D8`  H %A  _ 8~ H yA `}  8` KdA  ; ,  A  c  Kd`    `   ,  A \8d,  A , @ <H -A  8      z z |!   A}H  88 8      z z |!   A}N       	(a       l      H R_Copy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl   c N       	 @           what__Q2_3std9exceptionCFvN       	 @           _Doraise__Q2_3std9exceptionCFv|c ,   !`?  @ b8  ,   @ 8  8      `  H  X8`  H 	A 8   CH QA 8    CH  $8`  H A H 	A 8` H M`   8` H A`   !   }N       	(a              @ what__Q2_3std11logic_errorCFv|A} &`~    !`8` H EA 0;  8 8a P| @8(8H H a H T L X \;`^ @^y;@8   A 8a PH 9A  X|~ |@@ `z  ,  Ah T/  A(e,  A, A8`| @`  @ 8a PH A  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H A  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  K T/  A 8   T|~ X||e| | K`]`    X8`z |@@ 8a PH A  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H A  T X \H 8 T X \H 8a Pcd  K),  H  x,  @ Ad X B  H T \| @@ HT~|| @@ $ |  @; A |8a PKH  ; cd  8a PKH  ; ,  Aa Ta X CٮH .  A ~ ;` ,  @ $8  ,   @   d  c  H  `d  ,  @ T@ (b8  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH A  X T,  A <,  A 0, A (@ 8e@lKP8a PcD  K,  H  @ $AT8e,  A$, @4K \(  A | @@ dA H8e,  A , @ (H 	mA  T X \8a PcD  K)H  $8 T X \8a PcD  K,  A L ,  @  b8  ,   @   c  c  a TcE  K]Y`   a TA X DѮc  H UA 8 P8a `8 HH `     8! |} AN       	 C       L !_Doraise__Q2_3std11logic_errorCFv |A} &`~    !`8` H A 0;  8 8a P| @8(8H H a H T L X \;`^ @^y;@8   A 8a PH A  X|~ |@@ `z  ,  A T/  A(e,  A, A8`| @`  @ 8a PH 5A  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H =A  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  K} T/  A 8   T|~ X||e| | KZ`    X8`z |@@ 8a PH A  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H A  T X \H 8 T X \H 8a Pcd  K,  H  ,  @ ,A X B  8hc   HH A H | \| @@ HT~|| @@ $ |  @; A |8a PK5H  ; cd  8a PK!H  ; ,  Aa Ta X Cٮ8hc   HH A H .  A ~ ;` ,  @ $8  ,   @   d  c  H  `d  ,  @ T@ (b8  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH 	A  X T,  A <,  A 0, A (@ 8e@DK(8a PcD  K,  H  @ $A,8e,  A, @K \(  A | @@ dA H8e,  A , @ (H A  T X \8a PcD  K}H  $8 T X \8a PcD  KY,  A L ,  @  b8  ,   @   c  c  a TcE  KW`   a TA X DѮ8hc   HH A 8 p8a `8 HH `     8! |} AN       	 C       | "_Doraise__Q2_3std12length_errorCFv8 8  K0     	 @           __dftdt__Q2_3std11logic_errorFv   KN       	 @       @31   KN       	 @       @7KN       	 @       @9                b ` 8 q 8 A ||0  4@ T|+|*@0 || |(8 |8  9   4@ |*0  K0 ||*N  0 ||+|*AN  /  T, /  |M  00A HA A , ,   N@  A  ,   N@  A $ ,	  % N@  A    $ ,  ,  /  /   N@  A L N@  A L N@  A L% N@  A L   $ ,  ,  /  /  K B N   B N   B N  % B N        @       strncpy           H 
      @        memset A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               ĐA   L |	N               ȐA   L |	N               ̐A   L |	N               АA   L |	N               ԐA   L |	N               ؐA   L |	N               ܐA   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N               A   L |	N              $A   L |	N              (A   L |	N              ,A   L |	N              0A   L |	N              4A   L |	N              | !`  `  `}  H  mA         c  8   X0! Px= | H  p                                  <A   L |	N              b@c  N       	         |} &`    !`  8` H A 8a PH A  W.   ; : ;  M  A  H  $ ,  A 4@      H A a @H A   ,   A (`d  8c  ,   A 8c  ,   K8 a @8  8 PH }A a @ H c  ,   Da @A<<`@; P;dޭ;Cޭ? H }  ,  A KM	A  D  `  `  ,  A $8c  ,  A 8c  ,  K:  T>, 	@8p A08  T?@ TA 8 p  A d  |`8 | @@8 T>|  @ 8 8d   ,  @8c  @ (@ 8 c  |T:H    T:H  W:||.}"| .,   @ d |  A|d  |@|@A @h<cA-  8c!S:|c 4Tt~` ~c |.| @ 0`  s    ,`    T>@ H  @ o |@ < ,  @|.s    ,`    T>@ H  tp A Ho ,  A <:  8a H8 D8 @b  c  9 PH H p ||.|*A |(.s    ,`    T>@ bc  H `   H  ,  A  bc  H `     ,   @$H  ,   A A @  T A <A 4|( A 4 8  ,  s c  `r  `q  @ `H  $A  ,  s c  `r  `q  @ <  T | @A ,:R  T | @A :R  T | @K~.a @b  c  8 PH A  @ ~. T]T :}|ѐ8a P| H A   ,   @ ` ~c |.| K:  8a H8 D8 @b  c  9 PH  e @,   A }  ,  K@c  H рA H A $(8! |} } } N       	      !`  |c  `   !,  `  a  A 8 0;c 0;C P8c p|8 @;<  ||||||8 `8| |  8 8HKH`      8   c    ~    H  P}  `  `  c     }  H ]A   c  c  H  A}   h8! `}N   h8! `!}N       	     d   ,  ,  A L  <  |  L  L  <  |  L  8 p  <  | @M  d N       	         T    DA   L |	N              HA   L |	N              LA   L |	N              PA   L |	N              TA   L |	N              |8 X  !`?  ,   x | @ D@ ,c `  8 KFqA !   }N    p A     `   `  H AA H  H ]A 8`  KFEA !   }N       	(!          @0  |9` X  !`?   H8   Lp   x |   c  @A (`  d8  KEA !   H  8`  `  KEeA H  H  A 8`  KE}A !   }N       	(!          H0  K     	         K     	         \A   L |	N              `A   L |	N              hA   L |	N              lA   L |	N              pA   L |	N              tA   L |	N              | !`  KuA ,  c   L8  X@ $,  8 A # H  0! P|H  80! P|Kp                                  xA   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N                  /usr/lib/libc.a /usr/lib/profiled/libc.a IBM__cdtors    @(#)70   1.1   src/csm/common/getSourceIP2Target.C, csm_clients, csm_rveg, rveg0414a 8/12/02 18:40:37 IBPrint source IP addresses that would be used to connect to a remote host.
usage: %s <target>
target can be a hostname or an IP address.
prints:
	IP address that would be used to connect to the target host.
returns:
	0 - success
	1 - bad parameters passed
	2 - no such host found
	3 - socket/connect error
	4 - memory allocation error
	5 - internal error - bad api call
	6 - internal error - unexpected return code from function
 IBMno such host found
 socket/connect error
 IBmemory allocation error
 IBMinternal error - bad api call
 Iinternal error - unexpexted return code from function
 I%s
     @(#)69   1.8   src/csm/common/HostNameUtils.C, csm_clients, csm_rveg, rvegs004a 6/30/04 11:43:43    <null>  <null>  Q2_3std12length_error:0,Q2_3std11logic_error:0,Q2_3std9exception:0  logic error Q2_3std12out_of_range:0,Q2_3std11logic_error:0,Q2_3std9exception:0  logic error std::logic_error    std::length_error   Q2_3std12length_error   std::logic_error    std::out_of_range   std::logic_error    std::length_error   std::out_of_range   Q2_3std12out_of_range   std::exception  Q2_3std9exception   std::logic_error    Q2_3std11logic_error    Q2_3std11logic_error:0,Q2_3std9exception:0  Q2_3std12length_error:0,Q2_3std11logic_error:0,Q2_3std9exception:0  Q2_3std12out_of_range:0,Q2_3std11logic_error:0,Q2_3std9exception:0   IBM%s called IBCSM_COMMON::ip2hostname(ct_char_ptr_t, ct_char_ptr_t, ct_uint32_t) I  returning [%s] for hostname of [%s] IB%s exiting, returning %d IBMCSM_COMMON::ip2hostname(ct_char_ptr_t, ct_char_ptr_t, ct_uint32_t) I  cu_gethostbyaddr() returned %d IBM  cu_gethostbyaddr() returned %d, but did not set host_p IBM%s exiting, returning %d IBMCSM_COMMON::ip2hostname(ct_char_ptr_t, ct_char_ptr_t, ct_uint32_t) I%s called IBCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I  cu_gethostbyname(%s) failed with code %d I  [%s] was already added to result, skipping it this time IB  adding [%s] to result %s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I  added [%s] to result I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(char **, ct_array_ptr_t *, ct_uint64_t) I%s called IBCSM_COMMON::fetchConnectivityNames(const ct_char_ptr_t, ct_array_ptr_t *, ct_uint64_t) I%s exiting, returning %d IBMCSM_COMMON::fetchConnectivityNames(const ct_char_ptr_t, ct_array_ptr_t *, ct_uint64_t) I%s(%s) called
 ICSM_COMMON::isValidNonLoopbackIPAddress(char *) inet_aton(%s) returned an error %s is a local loopback address I%s(%s) called
 ICSM_COMMON::isValidNonLocalMachineName(char *) Ilocalhost IBhname is 'localhost', returning false IBloopback IBMhname is 'loopback', returning false IBMlocalhost.localdomain IBhname is 'localhost.localdomain', returning false IBhname is not a local hostname, returning true IB%s called IBCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM  G  E  E  FD  F  F  G%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBMcomparing [%s] to [%s], case insensitively I%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBMcomparing [%s] to [%s], case sensitively IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s exiting, returning %d IBMCSM_COMMON::isElementOf(ct_value_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBM%s called IBCSM_COMMON::areEqual(ct_array_ptr_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IBboth are empty - so they are the same IB%s exiting, returning %d IBMCSM_COMMON::areEqual(ct_array_ptr_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IB%s exiting, returning %d IBMCSM_COMMON::areEqual(ct_array_ptr_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IB%s exiting, returning %d IBMCSM_COMMON::areEqual(ct_array_ptr_t, ct_array_ptr_t, ct_int32_t, ct_uint64_t) IB%s called IBCSM_COMMON::hostname2ip(ct_char_ptr_t, ct_char_ptr_t, ct_uint32_t) I%s exiting, returning %d IBMCSM_COMMON::hostname2ip(ct_char_ptr_t, ct_char_ptr_t, ct_uint32_t) I%s called IBCSM_COMMON::hostname2ip(ct_char_ptr_t, ct_char_ptr_t *)   returning [%s] for ip of [%s]   cu_gethostbyname() returned %d IBM%s exiting, returning %d IBMCSM_COMMON::hostname2ip(ct_char_ptr_t, ct_char_ptr_t *) %s called IBCSM_COMMON::ip2hostname(ct_char_ptr_t, ct_char_ptr_t *)   returning [%s] for hostname of [%s] IB%s exiting, returning %d IBMCSM_COMMON::ip2hostname(ct_char_ptr_t, ct_char_ptr_t *)   cu_gethostbyaddr() returned %d IBM  cu_gethostbyaddr() returned %d, but did not set host_p IBM%s exiting, returning %d IBMCSM_COMMON::ip2hostname(ct_char_ptr_t, ct_char_ptr_t *) %s called IBCSM_COMMON::fetchLocalHostPrimaryHostnames(ct_array_ptr_t *, ct_uint64_t) IB%s exiting, returning %d IBMCSM_COMMON::fetchLocalHostPrimaryHostnames(ct_array_ptr_t *, ct_uint64_t) IB  gethostname() returned %d, errno=[%s] %s exiting, returning %d IBMCSM_COMMON::fetchLocalHostPrimaryHostnames(ct_array_ptr_t *, ct_uint64_t) IBgethostname() returns [%s] I  cu_gethostbyname() returned %d IBM%s exiting, returning %d IBMCSM_COMMON::fetchLocalHostPrimaryHostnames(ct_array_ptr_t *, ct_uint64_t) IB%s exiting, returning %d IBMCSM_COMMON::fetchLocalHostPrimaryHostnames(ct_array_ptr_t *, ct_uint64_t) IB  added [%s] to result I%s exiting, returning %d IBMCSM_COMMON::fetchLocalHostPrimaryHostnames(ct_array_ptr_t *, ct_uint64_t)   %Z%%M%   %I%   %W% %G% %U%   IBMmarshalSD() called, count == %d Data was NULL or count < 1, returning 1      P      t  t  \  %i Iadding %d to size for CT_INT32 type [%s] IBM%u Iadding %d to size for CT_INT32 type [%s] IBM%lli IBMadding %d to size for CT_INT32 type [%s] IBM%llu IBMadding %d to size for CT_INT32 type [%s] IBMSize was zero, returning 3 Iunable to allocate buffer for munged data IB  X  ,       l  l    %i ICopying %d bytes of string [%s], was originally a CT_INT32 I%lli IBMCopying %d bytes of string [%s], was originally a CT_INT64 I%u ICopying %d bytes of string [%s], was originally a CT_UINT32 Copying %d bytes of string [%s] Copying %d bytes of binary data adding %d to size for Char type [%s] IBMadding %d to size for Binary type IB%llu IBMCopying %d bytes of string [%s], was originally a CT_UINT64 convertASCIIToKey(%s) called, converting %d bytes IB%c%c IBMafter strtoul %x
 IBCSM_COMMON::SecBufferConvert::convertKeyToASCII(key,%d) called I%02x IBMSecBufferConvert::convertKeyToASCII, returnString=[%s] ICSM_COMMON::sec2binary() called CSM_COMMON::sec2binary() returing 0 CSM_COMMON::sec2binary() allocation error, returing 1 IBCSM_COMMON::signSD() called, count == %d IBMsigning marshaled data buffer IBfreeing marshalled data buffer Isec_prepare_message() call failed with error code == %d, returning that CSM_COMMON::signSD() returning 0    @(#)32   1.11.1.8   src/csm/common/ACLFile.C, dms, csm_rveg, rveg0414a 8/5/03 09:17:53  C   R   *       r   w   rw  Q2_3std12length_error:0,Q2_3std11logic_error:0,Q2_3std9exception:0  logic error std::exception  Q2_3std9exception   std::length_error   Q2_3std12length_error   std::logic_error    Q2_3std11logic_error    Q2_3std11logic_error:0,Q2_3std9exception:0 I[%s][%d][%d][%s]
 IB/var/ct/lck/ctrmc.acls.lock %s.orig %s I                                	%30s	%s %-2s IB # %s
 I
 IBroot@LOCALHOST Iroot on this node always has access LOCALHOST IBevery one else on this node can read only IB/bin/cp %s %s 2>&1 I/usr/sbin/rsct/cfg/ctrmc.acls IB%s.%s IBnew_file IBM%s
 /var/ct/cfg/ctrmc.acls      <unknown>     |ޭ                     ޭ                                     @(#)23  1.4  src/bos/usr/ccs/lib/libpthreads/init.c, libpth, bos520 8/19/99 12:20:14    @(#)61	1.14  src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos520 7/11/00 12:04:14     h                                                 \        hx        όϠ         ϸ                         <P         (       άZ         Z            Z  (D      ޭ      h                         ޭ                      ޭ                       ޭ                                   l      x      (                      H                      h                     ޭ      h                          ޭ                        ޭ         ,                       ޭ         8              D                                                           ͘ޭ        P                         0           
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

                                                                                   0      @     $t                (         0@                 $t       Z         Z  D      ޭ        <           ޭ      p  H              ޭ         T              ޭ         `                        l      x                                                ޭ                        H        ޭ                                       ޭ                     ޭ                     ޭ         \            
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

   (  h   h       h     
  h     
  h     <  h       h       h      h    1  h       h     0@  h    2  h      h      h    x  h    4  h    ^t  h    w  h    (  h    x  h      h      h    l  h      h      h      h      h      h      h      h      h      h    8  h    ,H  h    2`  h     r<  h      h    2  h    2  h     /  h    2@  h                                                                                  (ʠ                            p                ͘           x                                                                                                                                        0                                                          4                                                                S  :          w  r__quous   3  @                  @                   @       errno         @       close         @
       link          @
                    @
       open          @
       rename        @
       unlink        @
       socket        @
              '      @
              6      @
              D      @       malloc        @
       free          @
       _Errno        @
       exit          @
       atexit        @
       strlen        @
       fopen         @
       strchr        @
              \      @
       fprintf       @
       atoi          @
       printf        @
       isdigit       @
       fclose        @
       fflush        @
              j      @
       snprintf      @
       fgets         @
       sscanf        @
       strdup        @
       fseek         @
       stat          @
       system        @
       isalpha       @
       memcmp        @
       strerror      @
       connect       @
              v      @
                    @
                    @
                    @
                    @
       __crt0v       @                    @                    @
                    @
                    @
                    @
                   @
                   @
             )      @
             8      @
             U      @
             j      @
             x      @
                   @
                   @
                   @
                   @
                   @                   @
                   @
             *      @
             B      @
       fcntl         @
             Q      @
       sleep         @
             ^      @
             w      @
                   @
                   @                   @                   @
   	                @
   	                @
   	          -      @
   	          O      @
   
          d      @
   
    __start   t !
                                                        M       M              M               M                             N                     (   N    ,        0        <       @        H   N    L        P        \       `        h   N    l        p        |                                                                                    $       D       X       \       `       h       p       x       |                                                                                                                       4       H       d       x                                       M       M              M                             N                       N                                      N                    $       (        4        D        L        d       t                                                                                                                          (       0       D       X       t                                            t        x       |                                                                                                                                                                                                                   $        (       0        4       <        @       H        L       T        X       `        d       l        p       x        |                                                                                                                                                                                                                    $       ,        0       8        <       D        H       P        T       \        `       p       x   H                                          	                                          7                             )       1       B       F              2                     0                                                    J                             E       3        !    $   '    (   &    ,   *    0       4       8   %    <       @   D    D   
    H   C    L   G    P   I    T       X       \   ,    `       d   "    h   (    l   #    p        t       x       |                 4       5       K       L              Q       R              ;              ?       :       <       =       >              8       6               @       A       O       P       9              -              T       +              .               S              $               /                          $     /usr/lib:/lib:/usr/ibmcxx/lib    libc.a shr.o  libC.a shr.o  libpthread.a shr_comm.o  libpthread.a shr_xpg5.o  libbsd.a shr.o  libct_tr.a shr.o  libC.a shr2.o  libC.a shr3.o  libC.a ansi_32.o  libct_cu.a shr.o  
___memset  ___memmove  
loadquery  ngetsockname  gethostname  _system_configuration  strncasecmp  
vsnprintf  
fdatasync  
inet_aton  
inet_ntoa  strcasecmp  __mod_init  __malloc_user_defined_name  
__dl__FPv  
__nw__FUl  __nw__FUlPv  terminate__Fv  __CleanupCatch  __vec__delete2  __BadRethrow  __SaveNonVolatileRegisters  __CurrentException  __frame_ptr  __my_pc_address  __ExtractRegs  #__setUncaughtExceptionFlag__3stdFb  __RestoreRegsAndJump  __ResetStackPointer  __pthread_trace  pthread_mutex_unlock  pthread_mutex_lock  pthread_mutex_destroy  pthread_init  __bsd_init  tr_record_fmt_string_1  
__vn__FUl  
__vd__FPv  0__vft24__DynaCastDesc_si_public14__DynaCastDesc  __vft13eti_cplusplus9type_info  terminate__3stdFv  unexpected__3stdFv   _Xlen__Q2_3std12_String_baseCFv   _Xran__Q2_3std12_String_baseCFv  cu_gethostbyaddr_1  cu_gethostbyname_1   *    >   B   J    `   n    p                              (   T  ř h            &    R       $   0  f :    L   d   p      ď F   Ə n   Ə         V r   Ə     |     f     v   ď    ď 	&   ď 	\   F 	   	   
        B    j                    @    L   N                      ԏ B   f         
   ֏    Ώ $  4 b   ҏ j           ޏ     0   P      ޏ        ޏ           ޏ           ޏ           ޏ           ޏ         .   ޏ 8    v  v z                  C "    &    <  C                   C >    B    X  C              C   
 ,  W D  \ h  \   \   V            j D  ٙ `  M   C   ٙ   ` (  
 D  ޙ X  * h  o      
       ,   l         ,   t  R T   p     R      R       X  R   R L         V       V    R !$  C !D  C !d   !   !   "   "`   "  R #   #   #  R %   %L  R &$   &D   &  R (,  R (   (    ),  V +*    +h  V +   +   ,$  C ,H   ,`   ,  C ,   ,  C -   -H  C -   -  % -  C -   .   .^    .b    .x  C 0x  R 1d  W 1|  \ 1  \ 1  \ 4    68  R 6P  R 6t  R 6  R 6  R 6  R 7T  R 7p  R 8  ޙ 9"    9J    9N    9`  C 9x  j 9  H 9   9    9    9  C :  C :.    :2    :@  C :h  C :    :    :  C :  C ;@   ;   ;   ;   <D   <  R =p   =   =  R >   ?4  R ?   @   @`  R A  R B4   B  V C    C2    Cp  V D  V D    D6    Dt  V G  R GT  R H  V H    HR    H  V J~  V J    J  V M    M&    M*    M<  C MZ    M^    Mt  C M   M    M   ܏ M  [ M    M  C N  C N4  M NR    NV    Nh  C N  C N  C N   N    O    O  C OD  
 Oh   O    O    O  C O  C PV    Pv    Pz    P  C P  j P  H P  = P    P    Q  C Q8  C QV    QZ    Qh  C Q  C Q    Q    Q  C Q  C R^    R~    R    R  C R  M R  = R    R    S  C S&    S*    S8  C SN    SR    Sh  C S    S    S    S  C T    T    T(  C T    T    T    T  C T    T    U  C U0  C U^    Ub    Ux  C V    V
    V   C V    V    V    V  C V    W
    W  l WL  C W  C W  C X  C X\  C X  C X  C X  t Y  C Y8  C YH   Yx  C Y    Y    Y  C Zn    Z    Z    Z  C Z    Z    Z  C [   [    [   t [>    [L  C [|  t [    [  C [  t [    \  C \*    \8  C \    \    \    \  C ]    ]    ]  C ],  j ]J    ]N    ]`  C ]  
 ]   ]   ]   ]    ]    ^   C ^  W b  W i  R j   j   k0   k   k  R l   l   m  R n    nh  R o,   oL   o  R p  R qL  R q   t   R t  R t<  R t  R t  R t  R u$  R y  R y  R y  R zH  R z`  R z  R }|  R 4  W L  \ p  \   \ n  V r          V v  V z          V   V       V            8   p         D  R ,   L     R      R         R   R    x        R       L  R    0   R  V   V    |  R   V    $   T  R p  W   W   \   \   \ `   t  R      f   t    \ p   |      0   l        R       H  R p     R          R &  V *    p  R   V          R 
  V     8     V       V ~  V       V   \   R     Ą  R    R Ō  R   V         4  V Ɋ  V Ɏ    ɾ      V @  W \  \ ̀  \ ̤  \     Z    p   Դ         p   ո  R ֠        R    d  R (   H   ِ  R 4  R ی     V   V d   ܜ  R 4  R ݎ  V ݰ        R t  R   R   R P  R h  R   R   R   R   R            @     R T   t     R   V   V x     R v  V     W  W  8  R  V   *  V.       V  	T  	  R
  
  
  R    R      W(  <  WL  fl    R  V      $  VR     R^   j       X  R$  D    R  V  VH    RF  Vh  &     R  RB     R   R   `  R *    F  V p                 !.   !4  !  !  "8  R#  #$  #p  R$Z  V$  V$  %  R%  V&  &$  &8  &   &  '  't  '  R(  (  (  R)\  )  *  V*:  V*  +8  R+  V+  +  +  ,f   ,l  ,  -(  -p  R.<  .\  .  R/  /  /  V/  V0H  0  R1F  V1h  1  1  2   3,  3\  4   44  
4B   4L  4`  
4   4  /4  R5F   5h  .5t  L5  G5  G68  G6p  6  6  [6  ԙ7b   7h  7   7  7  B7  .7  8  8  8  9F   9H  *9R   9`  ʙ9t  9  [9   9  %9  99  9  [:  :  :0  >:  
;  9;  ;&   ;,  %;V   ;X  %;   ;  .<  G<  <(  [<X  ԙ<h  <  e<  <  [<  G=  ϙ=  3=  =  [>Z   >  >   ?(  ?4  [?  Q@   @,  8@   @  )AL  A\  $A   B   CN   D   H  RI4  K  RM   N  $O  WO  \O  \Q(  RQ  RQ   Rp  RR  RT  RTd  RT   UP  RU  RV  RV  RW  RX   RX:   X  RYX  RZ   RZ|  R[D  R[  R\8  R\  R]0  ]n   ]  _  R_x  R`   W`D  \`\  \`  \a  $a  Wa  \b0  \bf   b|  b  b  c$  c|  c  Rd  d  e  Rf(  fp  Rg4  gT  g  Ri@  Ri  i  4j  4jp  j  Rk@  Rk  4k  k  l  Rl@  \lt  \m  Ro  Ro   p   qx  \r(  \s  Wt  Wx   Ry  y  z  zP  z  z  R{  {  |<  R}P  }  R~\  ~|  ~  R@  R  B   N  $    <  R  (  t  R  4  4,    R*  4L  D  Rd      ,  t  R@  `    R    R    4  RP  R  RD    L      R    (  RP    Rt      R  4
  $P  R  4  $    R  4  $    $d  R  H    Rt      R>  4B  $  x  R  R  Rz  $  R0  R  W  W  $  $  R    R  $  W@  T  Wd  f    R  $2  4\  l            $       $  R    \  RF  4z  4  x  R  4    $    $    `    Rt      RH      4&  4  $  R~  4              
    J         6   ^               &  N  v      
    >  f          .  V  ~     "  &  (  *F  ,n  .  0  2   z@  n  6  8    u4  @      8    ԙ,  ҙ  4    ¤  `  è  f  :Ď  <Ķ  >  @  B:  Dp  Ů   Ŵ  k  a  f  DV  J\  |  ƈ  aƔ  f  F  HF  Ln  Nǖ  PǾ  R  z4  p@  n  TȖ  XȾ  Z  \  ^6  `^  bɆ  dɮ  f  h  j&  nN  pv  r                                   8      8     `      8     `       8     `     j     ^      :     ^      ^   (   :   ,  ^   0  ^   <  n   @  ^   H   :   L  ^   P  ^   \  l   `  ^   h   :   l  ^   p  ^   |  j     ^     ^     ^     ^     ^     ^     v     l     ^     f   $  t   D  t   X  `   \  `   `  p   h  n   p  l   x  `   |  `     j     d     h     `     `     f     d     b     `     `     r     d     p     v     h     z   4  x   H  v   d  d   x  b     ^     |     v     v      8      8     V      8     V     ^     T      :     T     T      :     T     T     `     T      :     T     T   $  ^   (  T   4  T   D  T   L  T   d  x   t  T     r     v     \     V     V     p     n     l     V     V      j     d     h     V     V      f   (  d   0  b   D  t   X  r   t  Z     X                        t  z   x      |                                                                               6           R                                  X           <           :         $     (      0  L   4      <     @      H     L      T  .   X      `  N   d      l  B   p      x  D   |        0           F           H           $           J           8           P           R                                 @            P           V               $      ,  B   0      8  Z   <      D  \   H      P     T      \  T   `      p     x                        n      f      V      j      h      l                                d                                                          P           |           ^                `     T     |                      $      (      ,      0   \   4   r   8      <      @      D   X   H      L   
   P      T   R   X   T   \      `   Z   d      h      l      p      t   x   x      |   v     V                  4      6      p      @      B     z      &           .      $      (      *      ,                             0      2      <      >      "     ~            ^                  `             ~            b                       t      z         $                                                             
             )                   
             <                   
             R                   
      fcntl                      
             _                   
      sleep                      
             j                   
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                               
            .                   
            :                   
            J                   
            X                   
            {                   
                               
                               
                               
                                                                                             
                               
            ,                   
            L                   
      __quous   3                     .__quous  3                           l                             v                                                                                   errno                            close                      
      link                       
                               
      open                       
      rename                     
      unlink                     
      socket                     
                               
                               
                                     malloc                     
      free                       
      _Errno                     
      exit                       
      atexit                     
      strlen                     
      fopen                      
      strchr                     
                               
      fprintf                    
      atoi                       
      printf                     
      isdigit                    
      fclose                     
      fflush                     
                               
      snprintf                   
      fgets                      
      sscanf                     
      strdup                     
      fseek                      
      stat                       
      system                     
      isalpha                    
      memcmp                     
      strerror                   
      connect                    
                               
                               
                               
                               
                               
      __crt0v                                                         TOC       h   k                      6     k                     K     k               _$STATIC     k               atexit       k               malloc       k                          k               _Errno       k               free         k               exit         k               _cdtors      k                     c     k                           k                     t     k                            k                          k               memcmp       k               __crt0v      k                           k                      R     k               _$STATIC     k                          k               _$STATIC     k                          k                          k               errno        k                            k               printf       k                          k                             k                          k                      j     k               _$STATIC     k                            k                          k                      <     k                           k               snprintf      k               system    $   k               stat      (   k               strerror  ,   k               unlink    0   k               fopen     4   k               fseek     8   k               fclose    <   k                      )  @   k               open      D   k                        H   k               fcntl     L   k               sleep     P   k               close     T   k               link      X   k                       \   k               rename    `   k               fgets     d   k               isalpha   h   k               sscanf    l   k                       p   k               fprintf   t   k               fflush    x   k                       |   k               _$STATIC     k                           k                           k                          k                          k               strlen       k                     ,     k                     L     k                     t     k                          k               _$STATIC     k                     X     k                           k                     .     k                     :     k                     J     k               _$STATIC     k                           k                           k                            k                     {     k                          k                          k                          k                           k                     t     k                          k               socket       k                           k               connect      k                          k                          k               isdigit       k                           k                          k               strdup       k                            k                          k               strchr       k               atoi         k                           k               _$STATIC  $   k                        yg         g .__start (   k                .__start (     z             __start   t            
                 k               p_xargc   h                  p_xargv   l                  p_xrcfg                     p_xrc                       .file      g      '                f                                    k                                        _$STATIC  p   k   Z                                
              t                          |                                                                      .file     	g                      D               ^                     k                                        .main                                 k              _$STATIC      k  s            .file     ~	g                                     ^                 3    k                     3                         >3                        Q4                        c5<                        6                        7,                        8                        9                         :                        ;                         =d                        7>,                        ^?                        @                        @                        A                        B   k                     	C<   k                     	OC                        	E                        	F$                        
DF                        
G`                        6G                        H\                        J                        J                        K                        L                        L                        4N                        gN                        ]                        ^4                        ^t   k                      `                        ax                        `mx                        o                        o                        pH                        Tq                        q\                        r                        s                        t                        u                        sv                        wP                        bw   k                     x   k                     y                        (yx                        |,                                                7                                                0                        O                        <                                                P                        (   k                     l                                                                        .H                        n   k                                             `                        H                        T                                                                                                                        &                        J4   k               .@31    x   k               .@7        k               .@9        k                           k              _$STATIC     k              @9           k         
      @7           k         
      @31       `   k         
              $   k         
            K  0   k         
            '              
                          
            1              
                          
                          
              x            
              l            
                          
            c  H   k         
            o     k         
              T   k         
              <   k         
            t  0   k                       x      4            .file     	g      k                               ^                    k  m                                                                .file     	g                                     ^                     k !8                                            '                         ^ /   k                     b 0@   k                      v 1<                        "^ 4                        "y 4X   k                     # 8                        # 9                        ( ;                        # B                        %K F                        % G                        ' L                        'V PL                        'w RT                        ' S                        ' T                        ' V|                        ( Z`                        (D \                        (r ^                        ,  bx                        . eD                        0 gT                         id                        7 jd                        2 r<   k                     3 v                        5 w                        7i }l                        9                         ; 4                        <                          ?                         Ax t                        Bm l                        E                         FZ                                                  G $                        G L                        I                         L                         Mr X                        N                         P h                        Uq                         V                         P 8                                                 V+ Ɣ                        W X                        Y- $                        [ \                        ^                         _?                         a                             k                     d                          | x                        e? P                        g D                        j 8                        ls                         n                                                                         .l                        p1                        pY(                        p                        (                        p                        q((                        q                        q                        r0X                        O                        H                        0                        T                        r                        0H                        t   k                     t(H                        t                            k                                             v8                        n   k                     8                                                                                                  !                        &&                        w,H                        J1   k               .@146   2@   k               .@528   2`   k               .@31    2   k               .@7     2   k               .@9     2   k                       ͘   k              _$STATIC     k              @9        D   k         
      @7        8   k         
      @31           k         
      @528         k         
            t     k         
                 k         
            K     k         
            w              
            v              
                 k         
            c     k         
            o  ,   k         
            2      k         
            _  P   k         
            t  4   k                                         @146      \   k         
      .file      g      w7                wv                                    k   X                   w                   _$STATIC     k   U                  w              
            w  p                  .file      g      w                w                              x  x                  .file     	g../../cdtors.C          x!               x;         _cdtors                     .file     	g      xd                xt               x;                     k  	                    x                         x    k                     x    k                     x (   k                     x                         y <   k                     y) t   k                     y9    k                     yG 	    k                     yS 
   k                     y] 
   k                       ʠ   k   5            _$STATIC     k   D            __glab26     k         
      __glab13     k         
            t  (   k                     x  |            
            K              
            c     k         
            6                    .file     	g      yg                yy               x;                 ,   k                     y,                        y                  .__glab7   k               .__glab6   k                          k   
            _$STATIC     k   <            __glab6      k         
      __glab7      k         
      .file     	g      y                y               y                    k                     z,                        zG                        zR   k                     z   k               _$STATIC     k               noname    g .__Throw                   noname    g       z                   strcmp.s  g .strcmp       0      )             z  g .strncpy           )       moveeq.s  	g .bcopy   @      A      )       .ovbcopy @                  ._moveeq L                  .memcpy  L                  .memmove L                  memset.s  g .memset             )       ptrgl.s   g ._ptrgl     k   0             ._ptrgl                    .$PTRGL                    glink.s   g       z    k   (                  z                  glink.s   g .exit       k   (            .exit                     glink.s   "g .printf  x   k   (            .printf  x                 glink.s   'g       z   k   (                  z     #            glink.s   ,g       zL   k   (                  zL     (            glink.s   1g       {   k   (                  {     -            glink.s   6g       { h   k   (                  { h     2            glink.s   ;g .fcntl     k   (            .fcntl       7            glink.s   @g .sleep     k   (            .sleep       <            glink.s   Eg       {+2   k   (                  {+2     A            glink.s   Jg       {Cɬ   k   (                  {Cɬ     F            glink.s   Og       {W   k   (                  {W     K            glink.s   Tg       {k   k   (                  {k     P            glink.s   Yg       {v   k   (                  {v     U            glink.s   ^g       {   k   (                  {     Z            glink.s   cg       {   k   (                  {     _            glink.s   hg       {    k   (                  {      d            glink.s   mg       {   k   (                  {     i            glink.s   rg       {l   k   (                  {l     n            glink.s   wg       {Č   k   (                  {Č     s            glink.s   |g       {l   k   (                  {l     x            glink.s   g       {Ĵ   k   (                  {Ĵ     }            glink.s   g       |   k   (                  |                 glink.s   g       |   k   (                  |                 glink.s   g       |(d   k   (                  |(d                 glink.s   g       |LD   k   (                  |LD                 glink.s   g       |bl   k   (                  |bl                 glink.s   g       |w   k   (                  |w                 glink.s   g       |D   k   (                  |D                 glink.s   g       |ǔ   k   (                  |ǔ                 glink.s   g       |Ǽ   k   (                  |Ǽ                 glink.s   g       |   k   (                  |                 glink.s   g       |   k   (                  |                 glink.s   g .close     k   (            .close                   glink.s   g .link   <   k   (            .link   <                 glink.s   g       | @   k   (                  | @                 glink.s   g .open   t   k   (            .open   t                 glink.s   g .rename    k   (            .rename                  glink.s   g .unlink    k   (            .unlink                  glink.s   g .socket ȼ   k   (            .socket ȼ                 glink.s   g       }4   k   (                  }4                 glink.s   g       }   k   (                  }                 glink.s   g .malloc     k   (            .malloc                   glink.s   g .free       k   (            .free                     glink.s   g ._Errno  h   k   (            ._Errno  h                 glink.s   g .atexit  
   k   (            .atexit  
                 glink.s   g .strlen l   k   (            .strlen l                 glink.s   g .fopen     k   (            .fopen                   glink.s   g .strchr L   k   (            .strchr L                 glink.s   g       }   k   (                  }     	            glink.s   g .fprintfT   k   (            .fprintfT                 glink.s   g .atoi   t   k   (            .atoi   t                 glink.s   g .isdigitɄ   k   (            .isdigitɄ                 glink.s   !g .fclose $   k   (            .fclose $                 glink.s   &g .fflush |   k   (            .fflush |     "            glink.s   +g       }),   k   (                  }),     '            glink.s   0g       }4   k   (                  }4     ,            glink.s   5g .fgets     k   (            .fgets       1            glink.s   :g .sscanf    k   (            .sscanf      6            glink.s   ?g .strdup    k   (            .strdup      ;            glink.s   Dg .fseek     k   (            .fseek       @            glink.s   Ig .stat   \   k   (            .stat   \     E            glink.s   Ng .system 4   k   (            .system 4     J            glink.s   Sg .isalpha   k   (            .isalpha     O            glink.s   Xg .memcmp     k   (            .memcmp       T            glink.s   ]g       }>   k   (                  }>     Y            glink.s   bg .connect   k   (            .connect     ^            glink.s   gg       }Hd   k   (                  }Hd     c            glink.s   lg       }SȔ   k   (                  }SȔ     h            glink.s   qg       }^\   k   (                  }^\     m            glink.s g       }i$   k   (                  }i$     r              }u__pthread_trace pthread_mutex_unlock pthread_mutex_lock pthread_mutex_destroy pthread_init __bsd_init tr_record_fmt_string_1 cu_gethostbyaddr_1 cu_gethostbyname_1 __dl__FPv __nw__FUl __nw__FUlPv terminate__Fv __CleanupCatch __vec__delete2 __BadRethrow __SaveNonVolatileRegisters __CurrentException __frame_ptr __my_pc_address __ExtractRegs __setUncaughtExceptionFlag__3stdFb __RestoreRegsAndJump __ResetStackPointer __vn__FUl __vd__FPv __vft24__DynaCastDesc_si_public14__DynaCastDesc __vft13eti_cplusplus9type_info terminate__3stdFv unexpected__3stdFv _Xlen__Q2_3std12_String_baseCFv _Xran__Q2_3std12_String_baseCFv ___memset .___memset ___memmove .___memmove loadquery ngetsockname gethostname _system_configuration strncasecmp vsnprintf fdatasync inet_aton inet_ntoa strcasecmp __mod_init __malloc_user_defined_name __C_runtime_pstartup __C_runtime_termination PrioFcn__FPCvPCv _$STATIC_BSS crt0_data TRACE_ENABLED__10CSM_COMMON TRACE_COMP_ID__10CSM_COMMON _file_mutex__7ACLFile __fsm_tab___Construct__3stdHQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___PQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___v crt0main.s ../../../../../../../src/bos/usr/ccs/lib/libc/__threads_init.c Sun Sep 15 15:10:49 2002  C for AIX Compiler Version 5.0.1.0 ---  .__threads_init _malloc_user_defined_name _xti_tli_init_routine _nsl_init_routine __dce_compat_init_routine ../../../../src/csm/common/getSourceIP2Target.C Thu Jul  8 15:48:24 2004  VisualAge C++ for AIX Compiler (DEVELOPMENT/BETA) Version 5.0.0.0 .usage__FPc ../../../../src/csm/common/ACLFile.C Thu Jul  8 15:38:46 2004  .init__11StanzaEntryFPCcQ2_7ACLFile14PermissionTypeQ2_7ACLFile15PermissionLevelPCc .__ct__7ACLFileFPc .__dt__7ACLFileFv ._copyDefaultFile__7ACLFileFv ._fileExists__7ACLFileFv ._openFiles__7ACLFileFv ._closeFiles__7ACLFileFv ._aquireFileLocks__7ACLFileFv ._releaseFileLocks__7ACLFileFv ._SwapFiles__7ACLFileFv ._readLine__7ACLFileFv ._copy_till_stanza_found__7ACLFileFPCc ._lineIsStanzaHeader__7ACLFileFv ._first_token__7ACLFileFPc ._printToFile__7ACLFileCFP4FILEPCce ._print_entry__7ACLFileCFPC11StanzaEntry .get_permission_type__FQ2_7ACLFile14PermissionType .get_permission_level__FQ2_7ACLFile15PermissionLevel ._print_all_entries__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__b .begin__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv .end__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv .__ne__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator .__ml__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFv .__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFi ._entry_exists__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Pcb .__as__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator .erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator ._Next__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__4_AccFPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node ._lineIsComment__7ACLFileFv ._copy_stanza_to_outfile__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__i .AddOrUpdateEntries__7ACLFileFPCcCPC11StanzaEntryi ._processFile__7ACLFileFPCcCPC11StanzaEntryiT3 .DeleteEntries__7ACLFileFPCcPPci .DeleteStanza__7ACLFileFPCc .__dftdt__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv ._Buynode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeT1 ._Insert__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorRCP11StanzaEntry .erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorT1 ._Freenode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node .dump__11StanzaEntryCFv ._Destroy__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v ._Destroy__3stdHP11StanzaEntry_PP11StanzaEntry_v ._Construct__3stdHP11StanzaEntryP11StanzaEntry_PP11StanzaEntryRCP11StanzaEntry_v ._Construct__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodePQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeRCPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v ._Allocate__3stdHQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_UlPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node .allocate__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_Hv_UlPCv_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node .__ct__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_ .__ct__Q2_3std9allocatorXTPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_ .__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFv .__dftdt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv .__dftdt__Q2_3std12length_errorFv .max_size__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__CFv .__ct__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc .__ct__Q2_3std12length_errorFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Tidy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fb .assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCcUl .assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__UlT2 .__dt__Q2_3std12length_errorFv .erase__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlT1 ._Nullstr__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv ._Grow__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlb ._Inside__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc .__dftbdt__Q2_3std11logic_errorFv .__dt__Q2_3std11logic_errorFv ._Allocate__3stdHc_UlPc_Pc .allocate__Q2_3std9allocatorXTc_Hv_UlPCv_Pc .__eq__3stdHcc_RCQ2_3std9allocatorXTc_RCQ2_3std9allocatorXTc__b .__dftbdt__Q2_3std9exceptionFv .__dt__Q2_3std9exceptionFv ._Freeze__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv .max_size__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv ._Copy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl .what__Q2_3std9exceptionCFv ._Doraise__Q2_3std9exceptionCFv .what__Q2_3std11logic_errorCFv ._Doraise__Q2_3std11logic_errorCFv ._Doraise__Q2_3std12length_errorCFv .__dftdt__Q2_3std11logic_errorFv ../../../../src/csm/common/security.C Thu Jul  8 15:39:02 2004  ../../../../src/csm/common/HostNameUtils.C Thu Jul  8 15:39:10 2004  .fetchConnectivityNames__10CSM_COMMONFCPcPP8ct_arrayUL .fetchConnectivityNames__10CSM_COMMONFPPcPP8ct_arrayUL .__dftdt__Q2_3std3setXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____Fv .__ct__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FRCQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___ .__as__7in_addrFRC7in_addr .__dt__Q2_3std3setXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____Fv .getsockname__FiP8sockaddrPUl .ip2hostname__10CSM_COMMONFPcT1Ui .count__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ .__dt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv .insert__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ .fetchLocalHostPrimaryHostnames__10CSM_COMMONFPP8ct_arrayUL .ip2hostname__10CSM_COMMONFPcPPc .hostname2ip__10CSM_COMMONFPcPPc .hostname2ip__10CSM_COMMONFPcT1Ui .areEqual__10CSM_COMMONFP8ct_arrayT1iUL .isElementOf__10CSM_COMMONF10ct_value_tP8ct_arrayiUL .isValidNonLocalMachineName__10CSM_COMMONFPc .isValidNonLoopbackIPAddress__10CSM_COMMONFPc ._Allocate__3stdHQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_UlPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_PQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node .allocate__Q2_3std9allocatorXTQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_Hv_UlPCv_PQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node .__ct__Q2_3std9allocatorXTQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_GQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___ .__ct__Q2_3std9allocatorXTPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_GQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___ .__dftbdt__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__Fv .begin__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__Fv .erase__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorT1 ._Freenode__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node ._Init__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__Fv .equal_range__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Distance__3stdHQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorUl_Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorT1RUl_v ._Key__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node .__cl__Q2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Insert__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FbPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_NodeRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Dec__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorFv ._Construct__3stdHQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___PQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___v .__dl__FPvT1 ._Iter_cat__3stdHQ2_3std26bidirectional_iterator_tagQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__lPCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___RCQ2_3std8iteratorXTQ2_3std26bidirectional_iterator_tagTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TlTPCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____Q2_3std26bidirectional_iterator_tag ._Distance2__3stdHQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorUl_Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorT1RUlQ2_3std26bidirectional_iterator_tag_v .__lt__3stdHcQ2_3std11char_traitsXTc_Q2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__RCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___b .compare__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Destroy__3stdHPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_PPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_v ._Construct__3stdHPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_NodePQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_PPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_NodeRCPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node_v ._Destroy__3stdHQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___PQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___v .swap__3stdHc_RcT1_v ._Lbound__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ .upper_bound__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Buynode__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Nodec .__ne__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorCFRCQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iterator ._Inc__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iteratorFv .erase__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__8iterator ._Erase__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node .max_size__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFv ._Lrotate__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node ._Rrotate__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node ._Max__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node .__ne__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorCFRCQ3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iterator ._Inc__Q3_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__14const_iteratorFv .copy__Q2_3std11char_traitsXTc_FPcPCcUl .deallocate__Q2_3std9allocatorXTc_FPcUl .c_str__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv .size__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv .capacity__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv .compare__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFUlT1PCcT1 ._Eos__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl ._Refcnt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc ._Ubound__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__CFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ .__dftdt__Q2_3std12out_of_rangeFv .__ct__Q2_3std12out_of_rangeFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Min__Q2_3std5_TreeXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__FPQ3_3std9_Tree_nodXTQ2_3std12_Tset_traitsXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std4lessXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc___SP0__5_Node .__dt__Q2_3std12out_of_rangeFv ._Doraise__Q2_3std12out_of_rangeCFv ../../../../../../../../src/bos/usr/ccs/lib/libpthreads/init.c Sun Sep 15 16:25:03 2002  .call_pthread_init _pthread_init_routine ../../../../../../../src/bos/usr/ccs/lib/libbsd/__threads.c Sun Sep 15 18:32:13 2002  _bsd_init_routine Wed Jul 19 12:25:37 2000  IBM C and C++ Compilers, Version 3.6.4.0 ../../startup.C Wed Jul 19 12:25:36 2000  .__C_runtime_startup .__qsort__FPvUlT2PFPCvPCv_i .__NLibraries__FPc .__Extract_cdtors_Addresses__FPcP7LibDescRi .__C_runtime_termination .PrioFcn__FPCvPCv .qstexc__FPcN21 .qsexc__FPcT1 .qs1__FPcT1 .__glab13 .__glab26 ../../invokedtr.C Wed Jul 19 12:25:38 2000  .__Invoke__Destructor .__Invoke__Delete ../..//rs6000/except.C Wed Jul 19 13:30:20 2000  IBM VisualAge C++ Professional for AIX Compiler Version 5.0.0.0 .__set_PA_callback__FPFv_v .__DoThrow .GrabInformation__FRP12__sigcontextRPlT2P7tbtablelR9registers .nextFrame__FR9registersPlRP12__sigcontext .__ReThrow strncpy.s .__mod_init .pthread_mutex_unlock .pthread_mutex_lock .pthread_mutex_destroy .pthread_init .tr_record_fmt_string_1 .cu_gethostbyaddr_1 .cu_gethostbyname_1 .__dl__FPv .__nw__FUl .__nw__FUlPv .terminate__Fv .__CleanupCatch .__vec__delete2 .__BadRethrow .__SaveNonVolatileRegisters .__CurrentException .__frame_ptr .__my_pc_address .__ExtractRegs .__setUncaughtExceptionFlag__3stdFb .__RestoreRegsAndJump .__ResetStackPointer .__vn__FUl .__vd__FPv .terminate__3stdFv .unexpected__3stdFv ._Xlen__Q2_3std12_String_baseCFv ._Xran__Q2_3std12_String_baseCFv .loadquery .ngetsockname .gethostname .strncasecmp .vsnprintf .snprintf .strerror .fdatasync .inet_aton .inet_ntoa .strcasecmp 1chk̃ 0PB  7u       ^q@^q@^q@                   ./opt/csm/csmbin/popk5login 2Tar                                @q^     H   <`  #    / (    /        1L                      .text    ( (  <`  (  l6    0      .data         #  =       t     @.bss      1t  1t                     .loader           
  at                                                           " (|nx|#x|+x|    1  B ,9   e)-  *  @ H  `   H   DH A |nxA   A |	Q N!A  L9   }sx}{x~x  H `     ,  A b $H ;A |      @        __start   !|b A ,   H ,   A  <    c A |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A  H8! @}N  8! @N         A       __threads_init  @    b 0|!c   HH  EA  H8! @}N         A      , call_pthread_init   8     4A   L |	N               HA   L |	N              |!  P!a D`  ;  8`8 H A 8 8 H A  \b `|      H A B h l" p8 e  cC    H *`   ,    c  @$a DH 
|}yz  @ H =`}  z  , @ ;  H E`     |  88 8 H 0IA   `d  c  c  H 0YA z  H .ŀA ,    8 lb, LB1A H ,`   ,  |  808 8 A (8 hH 8A b8 H ,`   H  0H /A 8`d  8~  H /̀A b8 H ,e`   ,  8 pA H 7A c   x8! p!}N         A        main  |!} &  ! Pa8;A48a48 H -`   8 8a4H -`   8 c  H -`   `~  "8 c#  H -`   `y  848a4H -`   8 H8a4H .A ,  A a8H `    \88 8 1}  H .A `d  a884H .A b p  ,  @ 4}  88 8 1H .EA `d  8~  84H .YA x!TAX8!p}8` N  a8H 1`   ,  @Ѐ 8a @d  H 1]A |dyA 48 a8H `   x!TAX8!p}8` N  a @<8 De  H 1A |dyA 48 Ȁa8H E`   x!TAX8!p}8` N  8 ,8a4H )1A ,  @ `a8H `   b \8p8 8 #c  H -!A `d  a884H -5A x!TAX8!p}8` N  a<H -1A ,  @8 @ }   |  8a48 <H -1A H  @ 8a48 <H -A ,  8a48 8 A H /̀A ,  8a4@ H -A ; |@;` @ h|  H -=A ,    ( =+  ,@ <8 c  A 0@ ; ;{ , , c  A c#  @ H -1`   ; |@AM  a<H ,5A ,  A,@ H  }   a<H *eA 8 c  H (`   ,  A 48 0c  H 0`    Dc  H /`   8 4c  H /`   8 c#  H (=`   ,  A 48 8c#  H /`    Dc#  H /`   8 <c#  H /`   A 8  c  H '`   ,  @ da8H `   b \8(8 8 3c  H *A `d  a884H +A 8` tx8!p|} } !N  b p  ,   @8`  H 3A  8a4H )]`   8 @8a4H 'M`   ,  @ 8 $8a4H )5`   8 x8a4H .`   8 D8a4H .`   8` H 2)A ;  ;  c  H *ŀA a@c#  H *A aD8 8a4H )ـA ,  @8 d8a4H %ɀA ,  @ da8H `   b \88 8 #c  H )A `d  a884H )̀A 8` tx8!p|} } !N  `{  H )ŀA ,  @8a48 ce  H )рA ,  8a4c  @A 8H ,A ,  8a4c$  D@ ; H ,iA ,  @ ; cc  H )UA ,  8a48 ce  A,  B \@ H  8 H8a4H $A ,  @ da8H `   b \88 8 #c  H (A `d  a884H (A 8` tx8!p|} } !N  `{  ,  B \@ dcc  c  H (qA 8 Lcc  H (aA a8H `   z  8 8 8 H (A `d  a8c  84H (%A H  @a8H `   z  8d8 8 H 'ՀA `d  a8c  84H 'A 8 (c#  H $}`   ,  A ,  @ dcc  c$  H 'A 8 Pcc  H 'A a8H Q`   z  8 8 8 H 'YA `d  a8c%  84H 'iA H  @a8H `   z  88 8 H 'A `d  a8c%  84H ')A cc  H %A a @ De  H *QA a @|d  H *=A 8`  tx8!p|} } !N         C        UpdateK5login A| P} &`~    !`  ;  D8a @c  H %`   . ;@ ;` 8a @@   H *`   ;{ | 8a @A, 8 T8a @A 0@ H "`   ,  8 X8a @A H "`   ,  A ЀaDH `    \888 8 }  H %A  ``d  aD8 @  H %A aDH i`   }  88 8 H %qA `d  aD8 @H %A }  88 8 H %AA `d  8~  8 @H %UA 8` dh8!`|} AN  8 \8a @H !`   ,   \8P}  8 8 @  H $ՀA `d  8~  H $A ; 8 `8a @H !`   ,  aD p@ D  H 
u`   }  8h8 8 H $}A  ``d  aD8 @  H $A c  dh8!`|} AN         C       @ 	ParseArgs  TA   L |	N               XA   L |	N               dA   L |	N              | !P a 8`  H =A  x8 DH UA |ya 8  @    8! 8`  }N  H IA 8a @H eA 8a @8 H }A 8a @8 H mA 8`  8 @8 HH A  ; P8 PH A |8a p8 d|a H `   ,   |8 8 pT p@  | H  A a  H  A  a c  H  ՀA ,, 
; @;LFA 0@ ~ ; a H  A ,, 
@LF@8   8` 
   H  A  8 8 PH  A 8` 8 H8  H }A a H  A b  8! }N         A        get_info  |AȐ  x ! ;  a8 c  H  Y`   `~   c  c  H  A`   `|  8a 8 H  -`   8 8aH  `   88 @H !A ,  @ (88aH `   8 88aH A H  <8@8 @H  ـA ,  @8d8aH `   8 88aH A ,  @ TaH b \88 8 #c  H  A `d  a8H  A 8! }8` N  a;`  ;@  ;   ;   H  A ,  @\:8a8 H  A H  @<8a8 H  A , 8a@H  A ~w8a8 H `   8a8 /H  A ,  : |@Ac @ hH  A ,  :b  :  8ab  8 @ @H  `   : |@@ ,t H  A ,  b  8a: b  8 Aț  :8 8a H -`   |@@ hw  H  9A ,  :8a :b  8 @ @H  U`   : |@@ ,t H A ,  b  8a : b  8 Aț  8a 8 @H A ,  8a8 t8 @ `H "A ,  8 c  @ H y`   `~  ;@ 8a8 8 H !ـA ,  8 c  @ H E`   `|  ;  , , LB1A ;  8a8 <8 H !A ,  8a8 l8 A H !uA ,  @ ;` aH aA ,  ,  A8 c  H `   ,  @ TaH b \88 8 4c  H ɀA `d  8 aH ݀A 8` 8! A}H 8 c  H ]`   ,  @ aH Yb \88 8 4c  H aA `d  8aH uA 8` 8! A}H  aH 	b \8|8 8 9c  H A `d  a88H !A 8` H  \aH ŀb \88 8 5c  H ̀A `d  8a8H ݀A 8! }8` N  8`  8! A}N         A       4 find_linux_libkrb5| !a H L PH  8 @a Le  H A |y \ x8 ~  8 /8A l8H A `d  a H P LH 	A ~  8
48 8 H ɀA 8`d  a Hc  H ـA  h8! `}H  88 "H A  @`d  a H PH A  h8! `}N         A         
LogInfoMsg| !a H L PH  8 @a Le  H A |y \ x8 ~  8 8	$A l8	H A `d  a H P LH A ~  8
8 8 H A 8`d  a Hc  H A  h8! `}H  88 "H yA  @`d  a H PH A  h8! `}N         A         LogErrorMsg   | !a H8a @H A 8a @H ɀA  x8 a H8 |H A b \8 \8 8 c  H ɀA  l`d  a H  H ـA  X8! P}N         A         LogDateTime   | ! xa 8a @;  8H `   8 8H A ,  b 8	x@ H `   a < 8 H A ,  a 8@ a KՀb \8
8 8 c  H ݀A aH A   a  H A (8! }8` N  a Kub \808 8 4c  H }A `d  a 8 @H A (8! }8` N  H A  ,  8e  a @ Xa Kb \88 8 c  H A 8`d  a  H A (8! }8` N  H A  ,  8Đe  a @ Xa Kb \88 8 c  H A 8$`d  a  H A (8! }8` N  H A  ,  8le  a @ Xa Kb \8D8 8 c  H %A 8`d  a  H 5A (8! }8` N  H 1A  ,  8 e  a @ Xa Kb \8|8 8 c  H A 8`d  a  H A (8! }8` N  H A ,  8  d  8\  a A 8    H A ,  8e  a @   H aA ,  8e  a @   H =A ,  8̐e  a @ Xa Kb \88 8 c  H A 8`d  a  H ̀A 8` (8! }H  H ɀA ,  d  a @ TKIb \88 8 c  H QA 8`d  a  H aA 8` (8! }H  8`  (8! }N         A       p secLoadKRB5AdminLib   | ! xa 8a @8<H `   8 8}TH }A ,  @ b 8H ]`   a < 8 H mA ,  @ a KEb \8
8 8 c  H MA a H ]A   a   H QA (8! 8` }N  a Kb \8T8 8 4c  H A `d  a 8 @H A (8! 8` }N  8paH A  ,  d  @ Xa Kub \88 8 c  H }A 8`d  a  H A (8! 8` }N  8aH A $,  d  @ Xa Kb \8<8 8 c  H 	A 8 `d  a  H A (8! 8` }N  8daH A (8e  aH A ,8e  aH ݀A 08  aH ŀA 48 Аe  aH A 88~  aH A   8 aH A ~  8 aH mA ~  8aH YA <,  d  @ Xa Kـb \8t8 8 c  H A 8`d  a  H A 8` (8! }N  80aH A @,  d  @ Xa Keb \88 8 c  H mA 8@`d  a  H }A 8` (8! }N  8laH qA D,  d  @ Xa Kb \88 8 c  H A 8`d  a  H 	A 8` (8! }N  8aH A H,  d  @ Xa K}b \88 8 c  H A 8`d  a  H A 8` (8! }N  8PaH A L,  d  @ Xa K	b \8T8 8 c  H A 8``d  a  H !A 8` (8! }N  8 aH A P8pe  aH A T8$e  aH A X88  aH ̀A   8aH A \,  d  @ Xa K9b \88 8 c  H AA 8`d  a  H QA 8` (8! }N  8aH EA `,  d  @ Xa Kŀb \88 8 c  H ̀A 8`d  a  H ݀A 8` (8! }N  8LaH рA d80e  aH A h8e  aH A l8	Le  aH A p8Le  aH qA t,  d  @ Xa Kb \88 8 c  H A 8h`d  a  H 	A 8` (8! }N  8aH A x,  d  @ Xa K}b \848 8 c  H A 8`d  a  H A 8` (8! }N  8aH A |,  d  @ Xa K	b \8l8 8 c  H A 8`d  a  H !A 8` (8! }N  8aH A ,  d  @ Xa Kb \88 8 c  H A 8`d  a  H A 8` (8! }N  8aH A ,  d  @ Xa K!b \88 8 c  H )A 8`d  a  H 9A 8` (8! }N  84aH -A ,  d  @ Xa Kb \88 8 c  H A 8P`d  a  H ŀA 8` (8! }N  8aH A ,  d  @ Xa K9b \8L8 8 c  H AA 8`d  a  H QA 8` (8! }N  8aH EA ,  d  @ Xa Kŀb \88 8 c  H 
̀A 84`d  a  H 
݀A 8` (8! }N  8 aH рA ,  d  @ Xa KQb \88 8 c  H 
YA 8L`d  a  H 
iA 8` (8! }N  8aH ]A ,  d  @ Xa K݀b \88 8 c  H 	A 8`d  a  H 	A 8` (8! }N  8`aH A ,  d  @ Xa Kib \8,8 8 c  H 	qA 8t`d  a  H 	A 8` (8! }N  8aH uA ,  d  @ Xa Kb \8d8 8 c  H A 8`d  a  H 	A 8` (8! }N  8|aH A ,  d  A b8    84aH ՀA  ,  d  @ Xa KUb \88 8 c  H ]A 8H`d  a  H mA 8` (8! }N  8`  (8! }N         A        secLoadKRB5Lib|! !  xa`  ;  8a 8  H `   ;8 $8aH }`   c  H AA   ~|@c  (  /|iA H; @  B@ ,H  A 0;  (  /|@B A ;  |@(  /@ ;>8a 8  8 @ H U`    8a 8 @(  /@ dH y`   8 @8a H рA ,  8a A @H A `z  88a8 H `   8a8H A ,  A H; |@8 8a 8 Ap8`  8!!}H  8!!}N  aKAb \8
d8 8  c  H IA `d  a8H ]A 8` K       A        	checkpath | !0`  ;  8` [H ՀA  x8a 8 H `   8a H 
1`   8 L8a H 
!`   8 ,8a H 
`   8 8aH a`   8aH 	`   8 T8aH 	`   8 (8aH 	`   8 @8a H )A  \< 8,  |  8a 8LDBA H =A ,  8 08a @ pH  A   ,  @ 8` 8!л}N  K  b \8	8 c  8 H ŀA `d  c  8H ـA 8` H  (8a 8 4H  yA   ,  @ ; c  8!л}N         A        SetupLog   tA   L |	N               |A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N              b  8  q A ||+|"*A H|8@@@@ |A L  H  p|+|*A $0  |8@@@|+@ P@ D|*@|,     T A |0|0|8@H  |8@|0}0@@@ L  A A 8`N  8` N  8`  N  8c8  ,  |0@A  @  ,  |0@KA A 8`N  8`  N  8` N        @       strcmp A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                      b  8   q A (||"+|*M  |+|*0   @N  p =@!k 9J}i|exA    ,    8 M  8 B   0|P8})P},P@ 4  }	P8})P},P@ ,  |P8})P},PA})8})PyAH  })@})PyA}Cx8 t T@> @N        @        strcpy A   L |	N               A   L |	N               A   L |	N               ĐA   L |	N               ȐA   L |	N               ̐A   L |	N               АA   L |	N               ԐA   L |	N                                      b  8  q A ||+A |+0  @|0| 8 |4@ |"+|*8 0  @N  4 A $||"+|*M  | 8   |)N  |N  T`, /  |fxA 80A A  ,  A ` ,  A T ,  A H0 }@Py=`01k@ & }*X8}JX}@XK}JH}JXyA}L 4U|`/  T, /  |M  00A HA A , ,   M  B@ $ ,	  & M  B@ D ,
  F M  B@ x  $ D ,  ,  /	  /   M  B@ L M  B@ @& M  B@ 4F M  B@ (  $ D ,  ,  /	  /  K8    N        @        strncat    ؐA   L |	N                A |	K k N      @        _ptrgl A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                  b  8   q A H||+A |+0   @|0| 8  ||"+|*8  0   @N  pk =@!k 9J}i8  A   ,  A P8 B 8 }	P8})P},P@  }	P8})P},PA})@})PyA}+ 4Uk|Xp !k }iA    ,    8 M  8 B 耤  0|P8})P},P@ 4  }	P8})P},P@ ,  |P8})P},PA})(})PyAH  })@})PyA}Cx8 t T@> @N        @      x strcat                b  8 q 8 A ||0  4@ T|+|*@0 || |(8 |8  9   4@ |*0  K0 ||*N  0 ||+|*AN  /  T, /  |M  00A HA A , ,   N@  A  ,   N@  A $ ,	  % N@  A    $ ,  ,  /  /   N@  A L N@  A L N@  A L% N@  A L   $ ,  ,  /  /  K B N   B N   B N  % B N        @       strncpy   A   L |	N              A   L |	N              A   L |	N              A   L |	N              ĐA   L |	N              ȐA   L |	N              @(#)23  1.4  src/bos/usr/ccs/lib/libpthreads/init.c, libpth, bos520 8/19/99 12:20:14    @(#)61	1.14  src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos520 7/11/00 12:04:14     /  /                                                r   @       @       /       w   
   
   -h  -v  -h  -v  r+  %s
     %s
   /.k5login   popk5login  csmKRB5.cat     CSMKRB5Principal    krb5_init_context   krb5_get_default_realm  Adding:%1$s to file %2$s.
  Adding:%1$s to file %2$s.
  /opt/csm/install/configinfo /opt/csm/install/configinfo Usage: popk5login [-h| -v] 
    2657-014 Could not  open file = %1$s.
  2657-014 Could not  open file = %1$s.
  2657-014 Could not  open file = %1$s.
  2657-028 The %1$s file does not exist.
 2657-028 The %1$s file does not exist.
 2657-001 This command invoked as : %1$s %2$s 
  2657-001 This command invoked as : %1$s %2$s 
  2657-005 %1$s exiting with return code = %2$d.
 2657-002 Not valid argument : %1$s was entered.
    2657-002 Not valid argument : %1$s was entered.
    There is no CSMKRB5Principal attribute in %1$s. 
   Did not add:%1$s to file %2$s. It already exists.
  Did not add:%1$s to file %2$s. It already exists.
  @(#)49   1.10   src/csm/krb5/api/popk5login.c, setup, csm_rveg, rveg0414a 1/12/04 10:10:33  2657-030 Could not create CSM KRB5 principal in .k5login file. The name was not available from the %1$s file.
  
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

                                                  a   a   r   #       r+    't.log    .bak    %1$d    QUIET   [libs]  libkrb5 %15.15s     libkrb5*    hdb_kt_ops  libkadm5clnt    /var/log/csm/   /var/log/csm/   krb5_kt_close   krb5_kt_close   krb5_kt_close   krb5_cc_close   krb5_kt_resolve krb5_kt_resolve krb5_parse_name krb5_parse_name krb5_cc_resolve krb5_cc_resolve krb5_cc_destroy krb5_cc_default krb5_cc_default krb5_kt_default krb5_kt_default libkrb5admclnt* krb5_svc_get_msg    krb5_svc_get_msg    krb5_free_string    krb5_free_string    krb5_kt_register    krb5_svc_get_msg    krb5_svc_get_msg    kadm5_get_policy    krb5_init_context   krb5_init_context   krb5_kt_get_entry   krb5_kt_get_entry   krb5_free_context   krb5_free_context   krb5_kt_add_entry   krb5_kt_add_entry   krb5_kt_next_entry  krb5_cc_store_cred  krb5_cc_store_cred  krb5_cc_initialize  krb5_kt_free_entry  krb5_kt_free_entry  krb5_kt_end_seq_get krb5_free_principal krb5_free_principal kadm5_get_principal kadm5_get_principal krb5_cc_default_name    krb5_cc_default_name    krb5_kt_default_name    krb5_kt_default_name    krb5_kt_default_name    krb5_kt_start_seq_get   krb5_ktf_writable_ops   kadm5_free_policy_ent   krb5_get_default_realm  krb5_get_default_realm  kadm5_create_principal  kadm5_create_principal  kadm5_modify_principal  kadm5_modify_principal  /usr/krb5/lib/libkrb5.a /usr/krb5/lib/libkrb5.a krb5_sname_to_principal krb5_sname_to_principal krb5_free_cred_contents krb5_free_cred_contents kadm5_randkey_principal kadm5_randkey_principal krb5_build_principal_ext    krb5_build_principal_ext    krb5_kt_read_service_key    krb5_kt_read_service_key    kadm5_init_with_password    kadm5_init_with_password    kadm5_free_principal_ent    kadm5_free_principal_ent    /etc/opt/csm/csmkrb5.conf   /etc/opt/csm/csmkrb5.conf   /etc/opt/csm/csmkrb5.conf   krb5_get_init_creds_keytab  krb5_get_in_tkt_with_keytab krb5_get_in_tkt_with_keytab krb5_free_keyblock_contents krb5_free_keyblock_contents krb5_get_init_creds_opt_init    /usr/krb5/lib/libkadm5clnt.a    /usr/krb5/lib/libkadm5clnt.a    /usr/lib/libkrb5.a(libkrb5.a.so)    /etc/opt/csm/csmkrb5.conf.default   /etc/opt/csm/csmkrb5.conf.default   /etc/opt/csm/csmkrb5.conf.default   2657-014 Could not open file = %1$s.
   2657-026 Call to %1$s returned: %2$i.
  2657-024  Call to %1$s returned: %2$s
  2657-013  Call to %1$s had error: %2$s
 krb5_get_init_creds_opt_set_default_flags   /usr/lib/libkadm5clnt.a(libkadm5clnt.a.so)  2657-004 Could not create backup log: %1$s 
    2657-007 Call to %1$s had error return: %2$i.
  2657-007 Call to %1$s had error return: %2$i.
  2657-007 Call to %1$s had error return: %2$d.
  2657-011 Could not create the directory: %1$s 
 2657-009 Error on dlopen of library: %1$s errno=%2$d 
  2657-009 Error on dlopen of library: %1$s errno=%2$d 
  2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 2657-010 Could not establish address for %1$s in %2$s.
 @(#)48   1.11   src/csm/krb5/api/k5utils.c, setup, csm_rveg, rveg0414a 3/25/04 13:01:16 2657-036 The file %1$s line $2$s has syntax error. Full path to library is not provided. 
  2657-032 The %1$s  and the %2$s configuration files do not exist. Cannot determine the path to the KRB5 api libraries. 
    2657-031 Could not find the %1$s shared library.For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library. 
 2657-031 Could not find the %1$s shared library.For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library. 
 2657-031 Could not find the %1$s shared library. For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library.
 2657-031 Could not find the %1$s shared library. For Linux, check path to library named configured in /etc/opt/csm/csmkrb5.conf.default. For AIX, check /usr/krb5/lib directory. If missing, install the KRB5 api library.  
   
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

   (  /   /       /              /                              1t                      <          H          1x  1|      1  1  1      P                                      1              5  7                                      9                      9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  :   :  :  :  :  :  :  :  :   :$  :(  :,  :0  :4  :8  :<  :@  :D              :H          >H              ,   t   b     	     
errno         @       mkdir         @
       rename        @
                    @
       umask         @
                    @       _iob          @       _Errno        @
       exit          @
       strlen        @
       fopen         @
       fprintf       @
       catopen       @
       catgets       @
              (      @
              6      @
       printf        @
       fclose        @
       strncmp       @
       strrchr       @
       fputc         @
       fgets         @
       isspace       @
       getpid        @
       getpwuid      @
       fgetc         @
       stat          @
       fputs         @
       ctime         @
       time          @
              B      @
       setbuf        @
              N      @
              Z      @
       dlopen        @
       dlsym         @
       ctermid       @
       feof          @
              f      @
       __crt0v       @              s      @                    @                    @
       __start   / !
          <       @                     /        /       /        /       /        /       /       /       /   *    /   ,    /   -    /       /   +    /       /       /   )    /       /       /   !    0        0       0       0       0       0       0       0   '    0        0$       0(   "    0,       00       04       08   #    0<       0@   $    0D       0H       0L       0P       0T       0X       0\       0`       0d       0h       0l   (    0p       0t       0x       0|       0       0       0        0       0   %    0   
    0   &    0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       1        1       1       1       1       1       1       1       1        1$       1(       1,       10       14       18       1<       1@       1D       1H       1L       1P       1T       1X       1\       1`   	    1d       1h       1l       1p     /usr/lib:/lib:/usr/ibmcxx/lib    libc_r.a shr.o  libpthread.a shr_comm.o  libpthread.a shr_xpg5.o  sigprocmask  _system_configuration  sigemptyset  
sigaddset  
setlocale  
tcgetattr  
tcsetattr  __mod_init  __malloc_user_defined_name  __pthread_trace  pthread_init   *   X >  4 B  6 J   Z `  D n   f p      j   Z   8   :      ܏ 
  J    b :  L ^  N   P   R    d 
   \   m Z   ` b   ^    h    l      "    r    t   '    x    z    | (   l     ,   1   6                ;   $      , ,  1 6  $ <   N  $ T  ;    l               $         @ 0   :   r L  , `  1 j   | z      ,   1       ԏ        .    8   P     E       r   ,   1   J   O 4  O P  T d  Y   ^      J 	  6 	   	4   	D   	T   	d   	|   	   	   	   	   	   r 	  , 	  1 
"   | 
4  c 
D   
T   
l   
|   
   
  h 
  Y 
  Y 
  @ 
  E 
      r   , ,  1 \  J x  O   T   T   J    r    E       r 0  , D  1 z   r   1   1      ,   1      ,   1 $   D  1 T  1 `   x  ,   1      ,   1   6             b   l                   r    , *   t <  1 H   `  , t  1 ~      ,   1       r       ,   1     2   | <   T  , ^   t p  1    n    p 
   v L  Ǚ V    \  E               |        (   8   B    L              |   6     .    2    H   V    `   t        @      E   @      E    r $  , 8  1 l  J   O   O   Y          ^ (   @  ^ t     ^      ^   @   T (   D  T \     T   T   J       r   ,   1 D   ^   r p  ,   1    r   ,   1    r   ,   1           r       ,   1   ,    1 @  , X  1           r       ,   1    , 8  1 X  , p  1             1    r   ,    z    1 r         @              r   ,       1 B   r T  , h  1           r   ,   1        &   r 8  , P  1 p   z       r   ,   1       ď    r    , 8  1 X   b   Ə j   ȏ    ʏ       ̏       Ώ       Џ    r   , ,  1 L   V   ҏ n   r   ,   1           ,  @  >     D    X    r   r    ,        1     r    ,    1 !    !*   ԏ !B   r !T  , !l  1 !   !   ֏ !   r !  , !  1 "   "   ؏ "    "*   ڏ "8   "B   ܏ "P   "Z   ޏ "h   "r    "   "   "   "   "    "   r "  , #  1 #0   #:    #R   r #d  , #|  1 #   #    #   r #  , #  1 $   $"    $:   r $L  , $d  1 $   $    $   r $  , $  1 %    %
    %   %"    %0   %:    %H   %\   %f    %~   r %  , %  1 %   %    %   r &  , &  1 &D   &N    &\   &f    &t   &~    &   &    &   &    &   r &  , &  1 '   '"    ':   r 'L  , 'd  1 '   '   '   r '  , '  1 (    (
   ("   r (4  , (L  1 (t   (~   (   r (  , (  1 (   (   )
   r )  , )4  1 )\   )f  
 )~   r )  , )  1 )   )   )   r *  , *  1 *D   *N   *f   r *x  , *  1 *   *   *   r *  , +  1 +,   +6   +N   r +`  , +x  1 +   +   +   r +  , +  1 ,   ,   ,.   ʏ ,@   ,J    ,b   r ,t  , ,  1 ,    -   -$   -0  Y -   -   -  @ -  Y .   .  r .v   r .  , .  1 .  h .    /    /   /    /0   /@   /P   /`   /p   /  @ /  w /  E /   r 0  , 0   1 08  E 0   ~ 0    0    1    1*    1R    1z    1    1    2    2    3"    3J    3r    3    3    4    4    4    5"    5J    5r    5    5    6     6    8    8D  
  8v    8    8    8    9    9@    9B    :    :    <   <   <   =  " =:  & =b  (  <  4   @  H     `        /  ,   /   V   /     /   V   /  D   /   V   /     /  <   /   R   /       /      /     /   T   /  F   /  2   /   P   /      /  `   /   @   0       0  b   0  d   0   2   0  f   0  h   0  j   0   L   0      0$      0(   B   0,       00   "   04   
   08   D   0<      0@   F   0D   :   0H     0L   6   0P   ,   0T   &   0X  z   0\  x   0`   8   0d      0h      0l   N   0p   .   0t      0x   *   0|   0   0   (   0     0   >   0   <   0   H   0      0   J   0     0     0     0     0     0  ~   0  |   0     0     0     0     0  p   0     0     0     0     0     0     0  r   0     0     0     0     0     0     1      1     1     1     1     1     1     1     1      1$  v   1(     1,  t   10     14     18     1<     1@     1D     1H     1L     1P      1T      1X      1\  l   1`      1d   $   1h  n   1l   4   1p                                                              
      errno                            mkdir                      
      rename                     
             !                   
      umask                      
             -                         _iob                             _Errno                     
      exit                       
      strlen                     
      fopen                      
      fprintf                    
      catopen                    
      catgets                    
             C                   
             O                   
      printf                     
      fclose                     
      strncmp                    
      strrchr                    
      fputc                      
      fgets                      
      isspace                    
      getpid                     
      getpwuid                   
      fgetc                      
      stat                       
      fputs                      
      ctime                      
      time                       
             Y                   
      setbuf                     
             c                   
             m                   
      dlopen                     
      dlsym                      
      ctermid                    
      feof                       
             w                   
      __crt0v                                                          TOC       /   k                         /   k               __crt0v   /   k                        /   k                        /   k               _$STATIC  /   k                        /   k               _$STATIC  /   k                        /   k                      w  /   k               errno     /   k               _$STATIC  /   k                      Y  /   k               catopen   0    k               catfd     0   k               progname  0   k               getpid    0   k                        0   k               pid       0   k               verbose   0   k               ctermid   0   k               _$STATIC  0    k               fopen     0$   k               setbuf    0(   k                      C  0,   k                      O  00   k                      !  04   k                      c  08   k                      -  0<   k                      m  0@   k               fputs     0D   k                        0H   k               fgetc     0L   k               fputc     0P   k               fclose    0T   k                        0X   k                        0\   k               stat      0`   k               catgets   0d   k               fprintf   0h   k               feof      0l   k               fgets     0p   k               strlen    0t   k               strrchr   0x   k               isspace   0|   k               strncmp   0   k                        0   k               time      0   k               ctime     0   k               dlopen    0   k               _Errno    0   k               dlsym     0   k                       0   k                       0   k                     4  0   k                     J  0   k                     e  0   k               policy    0   k                     r  0   k                     ~  0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                     1  0   k                     E  0   k                     [  0   k                     k  0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       0   k                       1    k                       1   k                     .  1   k                     E  1   k                     Z  1   k                     w  1   k                       1   k                       1   k                       1    k                       1$   k                     
  1(   k                       1,   k                     /  10   k                     J  14   k                     \  18   k                     s  1<   k                       1@   k                       1D   k                       1H   k                       1L   k               mkdir     1P   k               umask     1T   k               rename    1X   k                       1\   k               _iob      1`   k               printf    1d   k                       1h   k               getpwuid  1l   k               exit      1p   k                        +g         >g .__start (   k                .__start (     ,             __start   /            
               <   k               p_xargc   /                  p_xargv   /                  p_xrcfg   /                  p_xrc     /                           1t                  .file     T g                      M               g                     k                           B             _$STATIC     k   Z                    /            
              /                          /                          /                          /                          /                  .file      g                      :               g                     k               .main         X                   T      X                   c X     X             _$STATIC  H   k              catfd     1x                  progname  1|                           1                  pid       1                  verbose   1                          :H                          >H                          9                        k  9                          :$                          :                           7                           5                        r  9                  policy    9                          9                          9                        ~  9                        J  9                          9                        4  9                          9                          9                        e  9                          :D                          :@                          :<                          :                        w  :                        Z  :                        E  :                        .  :                           :8                        /  :(                           9                        
  :                           :                          :                          9                          9                          9                          9                          9                          9                          9                          9                        \  :0                        s  :4                        J  :,                        [  9                        1  9                          9                        E  9                          9                          9                  .file      g      n                               g                     k   X                                      _$STATIC     k   U                    /            
              /                  .file      g                                     g                  0   k  X                   4 0                        >                          R |                        ^                         k                         x `                                                  ,                         .                  _$STATIC  P   k  7                     1   k               strcat.s  g .strcat  9@           )       strcpy.s   g .strcpy  3           )       strcmp.s  g .strcmp  1     0      )               g .strncat 6            )               	g .strncpy :           )       ptrgl.s   g ._ptrgl  8D   k   0             ._ptrgl  8D     
             .$PTRGL  8D     
             glink.s   g           k   (                                    glink.s   g .exit    =`   k   (            .exit    =`                 glink.s   g           k   (                                    glink.s   $g .catopen    k   (            .catopen                   glink.s   )g .getpid     k   (            .getpid       %            glink.s   .g .catgets 4   k   (            .catgets 4     *            glink.s   3g .fprintf 4   k   (            .fprintf 4     /            glink.s   8g .fclose  3p   k   (            .fclose  3p     4            glink.s   =g .printf  =   k   (            .printf  =     9            glink.s   Bg .stat    4   k   (            .stat    4     >            glink.s   Gg .fopen   0   k   (            .fopen   0     C            glink.s   Lg .feof    5    k   (            .feof    5      H            glink.s   Qg .fgets   5H   k   (            .fgets   5H     M            glink.s   Vg .strncmp 8   k   (            .strncmp 8     R            glink.s   [g .strlen  5p   k   (            .strlen  5p     W            glink.s   `g .isspace 5   k   (            .isspace 5     \            glink.s   eg        =8   k   (                   =8     a            glink.s   jg .umask   <   k   (            .umask   <     f            glink.s   og        `   k   (                   `     k            glink.s   tg .mkdir   <   k   (            .mkdir   <     p            glink.s   yg .rename  <   k   (            .rename  <     u            glink.s   ~g        1P   k   (                   1P     z            glink.s   g ._Errno  8   k   (            ._Errno  8                 glink.s   g        1    k   (                   1                  glink.s   g        1(   k   (                   1(                 glink.s   g .strrchr 5   k   (            .strrchr 5                 glink.s   g .fputc   3H   k   (            .fputc   3H                 glink.s   g .fgetc   3    k   (            .fgetc   3                  glink.s   g .fputs   2   k   (            .fputs   2                 glink.s   g .ctime   8   k   (            .ctime   8                 glink.s   g .time    8t   k   (            .time    8t                 glink.s   g .setbuf  0   k   (            .setbuf  0                 glink.s   g        1x   k   (                   1x                 glink.s   g       % 2   k   (                  % 2                 glink.s   g .dlopen  8   k   (            .dlopen  8                 glink.s   g .dlsym   9   k   (            .dlsym   9                 glink.s g .ctermid 0   k   (            .ctermid 0                   0__pthread_trace pthread_init sigprocmask _system_configuration sigemptyset sigaddset setlocale tcgetattr tcsetattr __mod_init __malloc_user_defined_name __C_runtime_pstartup crt0_data logfileptr _$STATIC_BSS krb5libname krb5admlibname krb5_svc_get_msg_p kadm5_create_principal_p kadm5_modify_principal_p kadm5_get_principal_p kadm5_init_with_password_p hdb_kt_ops_p writableops kadm5_get_policy_p kadm5_free_policy_ent_p kadm5_free_principal_ent_p kadm5_randkey_principal_p krb5_init_context_p krb5_kt_resolve_p krb5_kt_start_seq_get_p krb5_kt_next_entry_p krb5_kt_get_entry_p krb5_kt_end_seq_get_p krb5_kt_close_p krb5_get_default_realm_p krb5_parse_name_p krb5_sname_to_principal_p krb5_build_principal_ext_p krb5_cc_resolve_p krb5_cc_close_p krb5_cc_destroy_p krb5_cc_store_cred_p krb5_free_cred_contents_p krb5_cc_default_name_p krb5_cc_initialize_p krb5_get_init_creds_keytab_p krb5_get_init_creds_opt_init_p krb5_get_init_creds_opt_set_default_flags_p krb5_get_in_tkt_with_keytab_p krb5_free_principal_p krb5_free_context_p krb5_cc_default_p krb5_free_string_p krb5_kt_read_service_key_p krb5_kt_default_p krb5_kt_default_name_p krb5_kt_register_p krb5_kt_add_entry_p krb5_kt_free_entry_p krb5_free_keyblock_contents_p krb5_ktf_writable_ops_p principalname1 principalname2 crt0main.s ../../../../../../../src/bos/usr/ccs/lib/libc/__threads_init.c Sun Sep 15 15:10:49 2002  C for AIX Compiler Version 5.0.1.0 ---  .__threads_init _malloc_user_defined_name _bsd_init_routine _xti_tli_init_routine _nsl_init_routine __dce_compat_init_routine ../../../../../src/csm/krb5/api/popk5login.c Mon Apr  5 20:39:50 2004  .UpdateK5login .ParseArgs ../../../../../../../../src/bos/usr/ccs/lib/libpthreads/init.c Sun Sep 15 16:25:03 2002  .call_pthread_init _pthread_init_routine ../../../../../src/csm/krb5/api/k5utils.c Mon Apr  5 20:04:16 2004  .get_info .find_linux_libkrb5 .LogInfoMsg .LogErrorMsg .LogDateTime .secLoadKRB5AdminLib .secLoadKRB5Lib .checkpath .SetupLog strncat.s strncpy.s .__mod_init .setlocale .getpwuid .pthread_init .sigprocmask .sigemptyset .sigaddset .tcgetattr .tcsetattr k: 0PBm  7u     (  Fq@Fq@Fq@             (      ./opt/csm/csmbin/rmnode_client r                   m          #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#                                                                   #
# @(#)74   1.14   src/csm/install/rmnode_client.perl, setup, csm_rveg, rveg0414a 3/29/04 09:18:18

#--------------------------------------------------------------------------------

=head1	rmnode.client


	Description: This command runs of the node throucg dsh

	AIX:	Remove the logs  on the node.
	Linux:	Removes the logs, csm, rsct file sets and /var/opt/csm/CFMlocal
		file from the node

	Return 0 or 1.


        Development notes:

        The html view of the pod headers in this file can be updated
        by running the command:  

                  tidypod <filename>

	The html veiw of the pod headers will be in the file ./<filename>.html
	and can be viewed with a browser.

	The tidy formatted file will be in <filename>.tdy

	Be sure to run tidypod and copy the tdy file to <filename> before checking
	in changes.

=cut

#--------------------------------------------------------------------------------

BEGIN    # load first at runtime
{
    use lib '/opt/csm/pm';
    use strict;
    use locale;

    $::MSGCAT     = 'csmInstall.cat';
    $::MSGSET     = 'csminstall';
    $::MSGMAPPATH = '/opt/csm/msgmaps';

}

use Getopt::Std;
use NodeUtils;
use CSMDefs;
use InstallUtils;

#--------------------------------------------------------------------------------

=head3	initialize	

	Initialize the global data

        Notes:

=cut

#--------------------------------------------------------------------------------

sub initialize
{

    # setup the global defs data
    InstallUtils->get_OSDefs();

    $::ostype    = InstallUtils->get_OSName;                 #AIX/Linux
    $::osdistr   = InstallUtils->get_DistributionName;       #RedHat
    $::osversion = InstallUtils->get_DistributionVersion;    #5.1.0/7.1/7.2
    $::arch      = InstallUtils->get_PkgArchitecture;        #i.86

    if ($::arch =~ /i.86/) { $::arch = "i386"; }

    $::csmvers = InstallUtils->get_CSMVersion("csm.core");

    @::csm_logfilelist;    # csm file, log list thate need to removed
    @::csm_rpmlist;        # Linux CSM RPM list to uninstall
    @::rsct_rpmlist;       # Linux RSCT RPM list to uninstall

    $::GLOBAL_EXIT = 0;
    $::logging     = 0;
    $::temp_remove_item;
    $::rsct_basic_Flg = 0;

}

#--------------------------------------------------------------------------------

=head3	getArgs	

        Notes:

=cut

#--------------------------------------------------------------------------------

sub getArgs
{
    if (!getopts('vVh'))
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgrmnodeClientNodeUsage');
        exit 1;
    }

    if ($::opt_h)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgrmnodeClientNodeUsage');
        exit 0;
    }
    if ($::opt_v || $::opt_V)
    {
        if ($::opt_v) { $::VERBOSE = $::opt_v; }
        if ($::opt_V) { $::VERBOSE = $::opt_V; }
    }
}

#--------------------------------------------------------------------------------

=head3	get_install_lists

	Get the lists of files that we need to remove.

        Notes:

=cut

#--------------------------------------------------------------------------------

sub get_install_lists
{

    if ($::PLTFRM eq "AIX")
    {    # AIX lists of filesets to install
            # make sure we have the info we need
        if (($::ostype eq "") || ($::osversion eq "") || ($::csmvers eq ""))
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       'E',
                                      'EMsgNoConfigInfo', $::CSM_NODENAME
                                      );
            return $::NOK;
        }

        # get the appropriate lists of filesets/packages
        my %pkgdefs =
          InstallUtils->get_pkgdefs($::ostype, $::osdistr, $::osversion,
                                    $::arch,   "MgdNode",  $::csmvers);

        # log file list that need to uninstalled
        @::csm_logfilelist = @{$pkgdefs{logfiles}};
    }
    else
    {    # Linux lists of filesets to install
            # make sure we have the info we need
        if (   ($::ostype eq "")
            || ($::osdistr   eq "")
            || ($::osversion eq "")
            || ($::csmvers   eq ""))
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       'E',
                                      'EMsgNoConfigInfo', $::CSM_NODENAME
                                      );
            return $::NOK;
        }

        # get the appropriate lists of filesets/packages
        my %pkgdefs =
          InstallUtils->get_pkgdefs($::ostype, $::osdistr, $::osversion,
                                    $::arch,   "MgdNode",  $::csmvers);

        # CSM RPMs for Linux that need to Uninstalled
        @::csm_rpmlist = @{$pkgdefs{csm_unpackages}};
        @::csm_rpmlist = reverse @::csm_rpmlist;

        # rsct rpms that need to uninstalled
        @::rsct_rpmlist = @{$pkgdefs{rsct_unpackages}};
        @::rsct_rpmlist = reverse @::rsct_rpmlist;

        # check if the node is management server to it self.
        # if yes, than remove only client
        if (NodeUtils->isMgmtSvr())
        {
            @::csm_rpmlist  = ("csm.client");
            @::rsct_rpmlist = ();
        }

        # if the rsct.basic is installed than don't remove rsct
        NodeUtils->runcmd("$::RPMCMD -q rsct.basic", -1);
        if ($::RUNCMD_RC == 0)
        {
            @::rsct_rpmlist   = ();
            $::rsct_basic_Flg = 1;
        }

        # log file list that need to uninstalled
        @::csm_logfilelist = @{$pkgdefs{logfiles}};
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3	remove_files_dir

	Remove the directries and files passes.

        Notes:

=cut

#--------------------------------------------------------------------------------

sub remove_files_dir
{
    my ($file_name, undef) = @_;
    NodeUtils->runcmd("$::RM -rf $file_name", -1);
    if ($::RUNCMD_RC != 0)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'W', 'EMsgCannotDelete', $file_name);
    }
    return $::RUNCMD_RC;
}

#--------------------------------------------------------------------------------

=head3	remove_rpm

	Remove the rpm from the system

        Notes:

=cut

#--------------------------------------------------------------------------------

sub remove_rpm
{
    my ($rpm_name, undef) = @_;
    NodeUtils->runcmd("$::RPMCMD -e $rpm_name", -1);
    if ($::RUNCMD_RC != 0)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'W', 'EMsgRemoveRpm', $rpm_name);
    }
    return $::RUNCMD_RC;
}

#--------------------------------------------------------------------------------

=head3	remove_installp

	Remove the installp immage from the system

        Notes:

=cut

#--------------------------------------------------------------------------------

sub remove_installp
{
    my ($installp_img, undef) = @_;
    NodeUtils->runcmd("$::INSTALLP -u $installp_img", -1);
    if ($::RUNCMD_RC != 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',        $::MSGMAPPATH,
                                  'csminstall',            'W',
                                  'EMsgRemoveInstallpImg', $installp_img
                                  );
    }
    return $::RUNCMD_RC;

}

#--------------------------------------------------------------------------------

=head3	Main	

        Notes:

=cut

#--------------------------------------------------------------------------------

{    # main

    my $ret_code = 0;

    # initialize the global data
    &initialize;

    # get/check command line args
    &getArgs;

    #  Get the lists of filesets and file that must be uninstalled or removed
    if (&get_install_lists != 0)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgNO_LIST');
        $::GLOBAL_EXIT = 1;
        exit;
    }

    # Uninstalling and removing the files from the node
    if ($::PLTFRM eq "AIX")
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgUninstallingCsm');

        # Remove the log and otherfiles
        foreach $::temp_remove_item (@::csm_logfilelist)
        {
            $ret_code = &remove_files_dir($::temp_remove_item);
        }
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgUninstallingCsm');

        # Remove the Linux Cluster Support extensions, if present
        # Do not remove if node is management server for itself
        unless (   (($::osdistr =~ /RedHatEL-AS/) && ($::arch =~ /ppc64/))
                || NodeUtils->isMgmtSvr())
        {
            NodeUtils->runcmd("$::RMLCSEXT -A", 0);
        }

        # Remove the csm rpms
        foreach $::temp_remove_item (@::csm_rpmlist)
        {
            $ret_code = &remove_rpm($::temp_remove_item);
        }

        # Remove the rsct rpms
        foreach $::temp_remove_item (@::rsct_rpmlist)
        {
            $ret_code = &remove_rpm($::temp_remove_item);
        }

        # Remove the log and otherfiles
        foreach $::temp_remove_item (@::csm_logfilelist)
        {
            $ret_code = &remove_files_dir($::temp_remove_item);
        }

    }
    if ($::rsct_basic_Flg == 1)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgDidnotUninstallRsct');
    }

    exit $ret_code;
}
---kq 0PB  7u     &O q@q@q@             &O     ./opt/csm/csmbin/rmstanza ient r                              @q     H     n      (  *          1L                      .text    ( (    (  x          .data     *  *  n  *  ܺ          @.bss                              .loader                                                                        " (|nx|#x|+x|    1  B h9   e)-  *  @ H `   H   H !A |nxA   A |	Q N!A  9   }sx}{x~x  H `     ,  A b $H 	A |      @        __start   |b ,  0!;  8  `?   \ XH ՀA 8`P H A 8 ;  @ D H @ D8` P H A  H,@ dH 	A   ,  @ 4 @H 	A  D8  D`P H A  @ HH    H,@ 8` cH A  H,  A  @ D8` P Kt L @H   8  Ld TTd 6 @|!n8 @ P8 TH  T L P< 8   T|).|*  8  PH U T P X < @,  @ Ѐ P *} |(.Tg8|:}e8. | @A D,  A H 9A   } 8c } Tf8|2}e0. | @@̃ < T; |   <@ , P *} |(.Tg8|:}e8. KH  (H 8` cH A 8`  H A  0 T8   d  XH ̀A  T| @ P H `    @H !A !   }N       	(!          X0   X|!֐   |H d     	         8    ,  A 4`f  |c"8 | .,  A `f  |c"8 | .,  K`  N       	         H|`  `  `}   !b \;   : b    <F 89 @8 H \ (|(. (|(.~:;6   H `   ,  A b  8 H `   ,  A :   ,  @ :  p  P,  @ L,  _@ @c#  8 ,8 H A ,  @ $|  @  ,  A l,  A d: | ;9 @  p  P,  K  ,   A  : b    <F 89 @8 H \ (|(.K  y |. |c, |*|). @  8 c |).f 8   K 8   Kp x8! p}N       	     b 0| < !,  `?   L@  @8 < |  @,  A   8ed `e  T8|cc ,  A D8 T8|` Hc H eA  @ ,  A HH   8`  H uA  @ ,  A (  8ed `e  T8|cc ,  Kb 0 <,  @ ( @8 < |  @,  K8!   }N       	(!    (      H0  c  | @@ 8` N  8`M  8`  N       	         (" X898	  |	 `i  G `  	  `  8c  8 8   I  B N       	         P X88  |	 `g   `  8c   8 	  B N       	         <؃ X|`  `~     !| \|~|@@PcD  c  H 3|~b  |@@ @ c#  b  H ]A ,  @ ~c#  b  K5K@ <K|@@ | b  c  H A ,  @ ~ܲb  c  KK@ @|@c#  @  ~ܲb  c  Km~b  Kc  K<KHK|@A $~c  c%  b  K)~۲b  K|~||  A $||c  Kb  |~|@@ Kc  b  KܲK h8! `}N       	 
    K     	         KD     	              4A   L |	N               8A   L |	N               <A   L |	N               @A   L |	N               DA   L |	N               HA   L |	N                A |	K k N      @        _ptrgl TA   L |	N                      |fx|#x|3xH       @        bcopy       @        memmove                               b ` 8  q A ||+|"*A H|8@@@@ |A L  H  p|+|*A $0  |8@@@|+@ P@ D|*@|,     T A |0|0|8@H  |8@|0}0@@@ L  A A 8`N  8` N  8`  N  8c8  ,  |0@A  @  ,  |0@KA A 8`N  8`  N  8` N        @       strcmp dA   L |	N              !|b A ,   H ,   A  x    c A |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A b ,    A c |C N !A  H8! @}N  8! @N         A       __threads_init  |    b l|!c   HH  EA  H8! @}N         A      , call_pthread_init   t     pA   L |	N               A   L |	N              | `d  ! H88f H A  H8! @}N       	 A         4 
usage__FPc|, ! !`  `  @ ~  K8` KA  c  c  8H AA ,A  b " ;@ , f, h/ vA (A 0@ @\  c  c  8H A H  L    H  ,~  K8`  KA ~  K8`KA c  c  8H A ,A , f, h/ vK| h8! `!}N   h8! `}N       	 A         processCommandLineArgs__FiPPc | ;   !p`   @ D H LK 8a P  H `   |8   C;`  |  B 8 Tc:>.  ,  A d   ,   A   8x c$  H yA 8a Pc$  H ,`   |{x|  8 Tc:>.  ,  A   ,   K  ,   A ,  , A dA 0b cd  8cHH A  C8a P8 H `   H  \  b 8cH  A  C8a P8 H `   8` H  0  b 8cH  A  C8a P8 H `   8`  8!}N       	(A             @ main  |!8  HH ]`    H8! @}N       	 A         ( __dftdt__7ACLFileFv        A   L |	N               A   L |	N              |,   !`  `  `  `  A 8 H `   H  8     ,    A ,8 c  8 H `    X8! P}H  8     X8! P}N       	 A         Qinit__11StanzaEntryFPCcQ2_7ACLFile14PermissionTypeQ2_7ACLFile15PermissionLevelPCc |,  `   !8cA (8 H `   88  8H u`   H  , 8 8H `   88  8H I`   8   8`    c   H8! @}N       	 A         __ct__7ACLFileFPc |`   !a Db H A s A a DH A a D X8! P}N       	 A        P __dt__7ACLFileFv  | 8; !8a,8P8dc  H A 8a,H ɀA 8 @c  H A 8 `  8~dH ̀A |`y@ a \ |  A 8` H8!@}N  8`  H8!@}N       	 A         _copyDefaultFile__7ACLFileFv  |`  8c !@8 @H -A ,  @ , \,  A 8`  8! }N  A DKAA   ,  A 0K-A c  H A 8`  8! }N  c  K, @ (8H A 8`  8! }N  8`   8! }N       	 A         _fileExists__7ACLFileFv   | !`~  K,  , A (@ 8   8~ 8 hH uA H  $8  H  8~ 8 hH QA ~  ,  @ 8`  H8! @}N  8  8  H EA 8~8888H 9A 8~8 lH A ~ |`y@ 0~  H )A 8   8`    H8! @}N  8`   H8! @}N   H8! @}N       	 A       , _openFiles__7ACLFileFv`  |c  ;   !,  ;  A H A `~   ,  A H iA |~x   c   X8! P}N       	 A        l _closeFiles__7ACLFileFv   |`  } &;    !;  b H A b 888cH A `|  ,@ DK=A c  H A b H A 8`  t x8! p|} N  8  8` a @|   D B Hc  8 8 @H A `}  KɀA c  H ~A ,  A XKA   ,  A KA   ,  @L8` H ŀA ; . @ c  8 8 @KK @ 8`   t x8! p|} N       	 C       ` _aquireFileLocks__7ACLFileFv  |8  !`  8a @8  H |`    8   @8   , B D HA X8 8 @H ~ŀA `~   H A 8 b  H ~yA 8 |  4T~ h8! `}H  8b H ~MA  h8! `8`  }N   h8! `}N       	 A         _releaseFileLocks__7ACLFileFv |`   ! ,   @  8a 888H |!A 8   8 @ \8H |YA ,  A 0KA c  H |eA 8` 8!}N   \,   A (8a H |]A 88 H }݀A ,  @8   c H }A ,  A 0KA c  H {A 8` 8!}N  8   8 @ \8H {A ,  @< \,   @ 8` 8!}N  88H }A ,  @|8`  8!}N       	 A       x _SwapFiles__7ACLFileFv|`     !8 8c H }9A ,  A 8`   H8! @}N     p  A 8`  H8! @}N  K݀A c  H zA 8`  H8! @}N       	 A         _readLine__7ACLFileFv | !0`}  `  K!,  @ ,  A  , A c  H A,  A 0c  8 @H ,  @ c  8 @KY`   ,  A Ȁ c  88 H ,  @ c  K,  A}   p  @ |H  L , A l c  88 H ,  @ Xc  KY,  AЀ}   p  @ 0K뉀A c  H yYA 8`  8! л}N  8` K8` K8`  K     	 A       @ %_copy_till_stanza_found__7ACLFileFPCc |!c  HH {-A 0|` H8! @}N       	 A         0 _lineIsStanzaHeader__7ACLFileFv   | !`   H8c 8H zA 80`|c H8! @}N       	 A         @ _first_token__7ACLFileFPc | ;  !8   axH!;A||L @8a A|8c  B 8a @8H8H zAA `~  ,@ 8` h8!`}N  (@ 8` h8!`}N  aL88 @H zA `  aLH z)A | @8`  h8!`}N       	 A       "_printToFile__7ACLFileCFP4FILEPCce|`~  d `   ! H  ݀ `g  `  H Q `h  c  `  8c  Ky,  A 8`  X8! P}N   4 A c  8KA,  H  c  8K-,  @8`   X8! P}N       	 A         '_print_entry__7ACLFileCFPC11StanzaEntry   ,  , /  A A A 8d dN  8d XN  8d \N  8d `N       	 @          < 1get_permission_type__FQ2_7ACLFile14PermissionType ,  , / / b A A A A 8c dN  8c hN  8c lN  8c pN       	 @          D 3get_permission_level__FQ2_7ACLFile15PermissionLevel    |a,   !p`  T>at; @;`  @ a @cd  |  D; DH     @|  D; DA L atK|{x @  Le   D  }   @ H|  A  atK,  @ ,  A  8a P8 8 88Ke8a`88 8 8$KMatc  88  H ,  @ at8 PK`{  atc  88  H i,  @ at8`K|{xcc  8!a}N       	 A       \ __print_all_entries__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__b   c ,  @ 8     N      N       	 @          $ Ibegin__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv    N       	 @           Gend__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv   c    | |  4T ~h N       	 @           __ne__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator  c  8c N       	 @           R__ml__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFv          N       	 @            Q__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFi |,   !pT>`  A8    @,  @ x D @ ; X|`  XA H  x, @ Ha Ha xa P  a T x         H oA  8 8` H     D @ ; X|`  XA \  a 8 H ryA ,  a @Al a \  a ` X   @|  A  a 8 K8`   8! }N       	 A       8 \_entry_exists__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Pcb      N       	 @           __as__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator   | ! @ p8 p  `~  `    a @a D         H lـA ~  p  8  X8! P}N       	 A       | erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator N       	 @           _Next__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__4_AccFPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node c 8|  4T~N       	 @           _lineIsComment__7ACLFileFv|} &  ! `   `  K],  @ .  , A `c  K,  @ Pc  Ki,  A H c  88 K-,  A |8`   8! |} N  8`  H  hA Pc  8 @K},  @  c   8 @8 K,  @   c  88 K,  @c  K,  A88`   8! |} N       	 C       $ d_copy_stanza_to_outfile__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__i  8 H  L     	 @           1AddOrUpdateEntries__7ACLFileFPCcCPC11StanzaEntryi |`  ;  } &b  !8 4`  `  `   ԓ Г ܓ c  K,  A h8!`a}8` N  c  K,  A $c  K]h8!`a}8` N  c  4K`z  ;   8` H lAA  a D`d  ,   A ;! H  ;! D8` H l=A ,  A     a D ,   8 A ;! H  ;! D8` H lA ,  A      D,   8` a Ӑ c  @ D;; ē H8a 8 HH -;9 | @ ; ē H8a 8 HK,  , AA$c  Kc  K% Ӏ ,  @ ( P| c   ; ; A H  (   P| c   ; ; A ;a X  aa `    a d           H fŀA a    |  \8 A (a X  aa `    a d  K Đa T`  H fiA h8!`}8` N  , @䃢  c  48K,  A$c  Kc  Kݛ Ӏ ,  @ ( h| c   ; ; A H  (   h| c   ; ; A ;a X  aa `    a d           H e}A a    |  \8 A (a X  aa `    a d  K Đa l`  H e!A h8!`}8` N  ;8a88 8 8K;a 8a 88 8 8$Kᓁ p8 p 8a H Ea x8 x 8a H 1c  8 8  Ku,  A,c  Kc  KE Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H cA a    |  \8 A (a X  aa `    a d  K Đa `  H cA h8!`}8` N  . A4  8 c  8K,  Ac  Kc  K Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H bA a    |  \8 A (a X  aa `    a d  K Đa `  H bAA 8` H , @,c  8 8  K,  Ac  Kc  K͛ Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H amA a    |  \8 A (a X  aa `    a d  K Đa `  H aA 8` H @ c  8 8 K, H  c  8 8  K, @c  Kac  K㉛ Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H `)A a    |  \8 A (a X  aa `    a d  K Đa `  H _̀A 8` H t,  @X  8 c  8K5,  Ac  K)c  KQ Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H ^A a    |  \8 A (a X  aa `    a d  K Đa `  H ^A 8` H <c  8  K, Ac  Kc  K- Ӏ ,  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H ]̀A a    |  \8 A (a X  aa `    a d  K Đa `  H ]qA 8` H c  K1`}  c  Kc  K,   ,  A  @ ( | c   ; ; A H  (   | c   ; ; A ;a X  aa `    a d           H \A a    |  \8 A (a X  aa `    a d  K Đa `  H \MA 8` H   @ ( c  |a  ; ; A H  $d  a |a  ; ; A ;a X  aa `    a d           H [A a    |  \8 A (a X  aa `    a d  K Đa `  H [YA c  dh8!`|} N       	(C              -_processFile__7ACLFileFPCcCPC11StanzaEntryiT3 |! !; a D`  ~ H`  H ^A |}y@   xa \8! p8`}N  ;  ,  @ P;=B ;9  c#  8 8 8 dKy; | @  ;9 c#  8 8 8 dK؀a D Hc  c  8  Ka L,  A c  H ^qA a L x8! p!}N       	 A         DeleteEntries__7ACLFileFPCcPPci   8  8  8 K     	 @           DeleteStanza__7ACLFileFPCc |,   !p`  @ ,8`  a @ a h; l; h| lA H  (d  a @ a h; l; h| lA ; xa H  a xa P    a T           H XрA a h    x|  L8 A (a H  a xa P    a T  K a D`  H XuA 8      8! }N       	 A       , K__dftdt__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv   |8`  ! p lH [A a @ l,   A ; l`d  8` H [A H  ; @`d  8` H [A ,  A     a @ p,   8 A ; pH  ; @8` H [eA ,  A     a @ X8! P}N       	 A        _Buynode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeT1 |;  } &  `~  8| ȑ !a T`  `   P X d h \8` H ZA  da L`d  ,   A ;A dH  ;A L8` H Z	A ,  A     a L h,   8 A ;A hH  ;A L8` H ỲA ,  A     ~ <@ A L8| (  @
"  t x |: db  H YA `w   t,  A |@A  x|| @@ 48 | @;  @8a pH Y݀A  x t/  AH Ԁ t;  ~| @@ 8a pH YрA  x|t |@@ b  ~| @:@ 8a pH YA  x|w |@@ `v  ,  A t/  ADe,  A(, A 8`| @`  @ 8a pH Y!A  x| @@  x t/  A ,  A t, A l,  @ L8e@ $H T)A  t    x |8  H  8 t    x |8  H  8a pb  H B t/  H  l,  @ $A p x A   t,  O   H  D || @@ 8T~8a p|| @@  |  @A ~*b  H BE t/  A 8   t|w x||w*| | K`    x8`~ |@@ 8a pH WрA  x| @@  x t/  A l,  A `, A X,  @ <8e@ H RـA  t x |H  8 t x |H  8a pb  H Aq,  H  l,  @ $A | x B   x| @@ tH  l || @@ 4T~|d| @@  d| @A |"H  b  8a pH A,  A a t x C xH   x| @@ `  ,  A t,  A(e,  A, A8`| @`  @ 8a pH VuA  x| @@  x t,  A h,  A \, A T,  @ 8e@ $H Q}A  t|    x |8  H  8 t|    x |8  H  h,  @  A l x A   t,  H  D ||@@ 8T~|d| @@  d| @A ~"8a pb  H ? t,  A 8   t|* x`  | Ka`    x8`~ |@@ 8a pH UIA  x| @@  x t/  A l,  A `, A X,  @ <8e@ H PQA  t x |H  8 t x |H 8a pb  H >,  H  ,  @ DAȓ x B   x8 8|H S.   a    A@H  || @@ 4T~|d| @@  d| @A |"H  b  8a pH >],  AHa t x C x8 8|H S.   a H 4 x t/  A @,  A 4, A ,,  @ 8e@K8a pb  H =,  H  ,  @ $A8e,  A, @K |(  A | @@ dA H8e,  A , @ (H NA  t x |8a pb  H =aH  $8 t x |8a pb  H ==,  A (a tb  b  K`   a t x D x8 8|H S.   a    A a t,  @ $8  ,   @     c  H  `d  ,  @ L@ (b8  ,   @      c  H  a   | 8 H x8 | @@ 8a H R-A   ,  A h,  A \, A T@ <8e@ H MEA    H 8   H  8a b  H ;,  H  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H LA    8a b  H ;aH  $8   8a b  H ;=,  A L t,  @  b8  ,   @     c  a b  K`   a   I8h8   8a 8 H Q`    S t,  A X8e,  A , @ 8H KՀA  t x |~ 8 8  8` H OA H  48 t x |~ 8 8  8` H OA ,  A     _  z  |8! C  } N       	(C       <      P _Insert__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorRCP11StanzaEntry   |a !  ; `    ; | (A `{  ; X @    a @a Xa H  a L           H JA   X{  D  8c{ | (A 0 @    a @a Xa H  a L   K   x8! pa}N       	 A        erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorT1   |!`   HH HՀA  H8! @}N       	 A         ( _Freenode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node  | !  8 `d   H8hlK­A  H8! @}N       	 A         < dump__11StanzaEntryCFvN       	 @           _Destroy__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v   N       	 @           /_Destroy__3stdHP11StanzaEntry_PP11StanzaEntry_v   |`  `d   !8` H JA ,  A      H8! @}N       	 A        H O_Construct__3stdHP11StanzaEntryP11StanzaEntry_PP11StanzaEntryRCP11StanzaEntry_v   |`  `d   !8` H IՀA ,  A      H8! @}N       	 A        HG_Construct__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodePQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeRCPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v   |!c  HH HA  H8! @}N       	 A         ( _Allocate__3stdHQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_UlPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node   |!d  HH FـA  H8! @}N       	 A         ( allocate__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_Hv_UlPCv_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeN       	 @           __ct__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_ N       	 @           __ct__Q2_3std9allocatorXTPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_      N       	 @           Q__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFv  `  |,   !A P8e,  A , @ 0H ?A 8       H8! @}N  88       H8! @}N       	 A         S__dftdt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv   8 8  H  8     	 @            __dftdt__Q2_3std12length_errorFv  <`@ 8cN       	 @           Mmax_size__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__CFv ;  |`~     ! `  `  H BрA `{   ,  A |@A  || @@ 48 | @; @c  H BA   /  AH  ; | @@ c  H BA  || |@@ cc  || @;@c  @ c  H BuA  |{ |@@ `z  ,  A /  A@e,  A$, A8`| @`  @ c  H AA  | @@ >  /  A 8e,  A p, A h,  @ H@ $H <A       8  H  8      8  H  c  c$  H + /  H  h,  @  A l  A   /  H  D | @@ 8T~c  || @@  |  @A  *c$  H + /  A 8   |{ ||e| | K`    8`z |@@ c  H @A  | @@ ~  /  A l8e,  A \, A T,  @ 8@ H ;A    H  8   H  c  cd  H *I,  H  l,  @ $A |  B   | @@ tH  l | @@ 4T~|d| @@  d| @A |"H  cd  c  H ),  A ~ ~  C H   | @@ `  ,  A /  A(e,  A, A8`| @`  @ c  H ?MA  | @@ ~  /  A h8e,  A X, A P,  @ @ $H :UA       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A `"c  cd  H ( /  A 8   | `  | K9`    8` |@@ c  H >!A  | @@   /  A l8e,  A \, A T,  @ 8@ H 9)A    H 8   H c  c  H ',  H  p,  @ (A    x8! pc  }N   | @@ 4T~|d| @@  d| @A |"H  c  c  H 'Q,  A8~   x8! pc  }N    /  A @8e,  A 0, A (,  @ @Kc  cd  H &,  H  ,  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H 7A    c  cd  H &aH  $8   c  cd  H &=,  A $~ c  ce  K`   ~ ~  x8! pc  }N       	 A       L R__ct__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc!|;  ; `  b } &| @ 8c 8H    !   $ `  ;@@ ;y; 8   A c  H ;)A  |{ |@@ `y  ,  A /  A(e,  A, A8`| @`  @ c  H :A  | @@ _  /  A h8e,  A X, A P,  @ @ $H 5A       8  H  8      8  H  h,  @  A l  A   /  H  D | @@ 8T~|d| @@  d| @A @"c  cD  H #逿 /  A 8   |{ ||e| | K`    8`Y |@@ c  H 9uA  | @@ _  /  A p8e,  A `, A X,  ;` @ 8@ H 4yA    H 8   H c  cD  H #,  H  ,  @ 8A    t8h   x8! pc  |} !N   | @@ HT~|| @@ $ |  @;` A |c  H "H  ;` cD  c  H "H  ;` ,  A _  t8h   x8! pc  |} !H .  A { ;@ ,  @  b8  ,   @   C  c  ,  @ \{ ,  @ (b8  ,   @   C   c  H       8 H L;@ 8 | @@ c  H 7qA   ,  A <8e,  A ,, A $@ @,Kc  c$  H !M,  H  @ $A8e,  A, @K؀ (  A | @@ dA H8e,  A , @ (H 2A    c  c$  H  H  $8   c  c$  H  ,  A H ,  @  b8  ,   @   C  c   c%  KI`    ?  t8h   x8! pc  |} !N       	 C       \ f__ct__Q2_3std12length_errorFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__|`   p !A \ ,  A P8e,  A , @ 0H 0A 8       H8! @}N  88       H8! @}N       	 A         Q_Tidy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fb |`  } &c   ,  ! L`  A | @A  |c|@@ 88 | @;  ; @c  H 49A   /  AH  ; ;   | @@ c  H 4)A  |x |@@ c  ~   | @;`@ c  H 3A  || |@@ `{  ,  Ac   /  A(e,  A, A8`| @`  @ c  H 3qA  | @@ ?  /  A h8e,  A X, A P,  @ @ $H .yA  O    8  H  8 O    8  H  h,  @  A l  @   /  H  D | @@ 8T~|d| @@  d| @A  "cC  c$  H  /  A 8   || ||e| | KU`    8` |@@ c  H 2=A  | @@   /  A l8e,  A \, A T,  @ 8@ H -EA    H  8   H  c  c  H ,  H  l,  @ $A |  A   | @@ tH  l | @@ 4T~|d| @@  d| @A |"H  c  c  H q,  A    B H   | @@ `  ,  Axc   /  A(e,  A, A8`| @`  @ c  H 0݀A  | @@   /  A h8e,  A X, A P,  @ @ $H +A  O    8  H  8 O    8  H  h,  @  A l  @   /  H  D | @@ 8T~|d| @@  d| @A `"c  cd  H  /  A 8   | `  | K`    8` |@@ c  H /A  | @@   /  A l8e,  A \, A T,  @ 8@ H *A    H  8   H  c  c  H Q,  H  x,  @ 0A |    t x8! pc  |} N   | @@ 4T~|d| @@  d| @A |"H  c  c  H ,  A    t x8! pc  |} N    /  A l8e,  A \, A T,  @ 8@ H )A    H  8   H  c  c  H 5,  H  ,  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H )A    c  c  H H  $8   c  c  H ,  A $  Lc  KQ`      x8! pc  }N       	 C       l Vassign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCcUl|A } &  !`  | (@`~  `  `  @ H ,A   |@@ c  |@@ ;| @@ c  H ,yA  | |@@ `}  ,  ;`  A /  A(e,  A, A8`| @`  @ c  H +A  | @@   /  A h8e,  A X, A P,  @ @ $H &A ~    ~ ~ 8  H  8~    ~ ~ 8  H  h,  @  A l~ a @e   /  H  D | @@ 8T~|d| @@  d| @A "c  c  H 5 /  A 8   | ||*| | K`    8` |@@ c  H *A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H %ŀA ~ ~ ~ H  8~ ~ ~ H  c  c  H ],  H  ,  @ $A ~ a Ae   | @@ H   | @@ DT~c  || @@   | (@; A |"H H  ; c  H H  ; ,  A ~  a B} H   | @@ `  ,  A /  A@e,  A$, A8`| @`  @ c  H )MA  | @@   /  A 8e,  A p, A h,  @ H@ $H $UA ~    ~ ~ 8  H  8~    ~ ~ 8  H  c  c  H ݀ /  H  h,  @  A l~ a @e   /  H  D | @@ 8T~c  || @@  |  @A *c  H u /  A 8   |* `  | K!`    8` |@@ c  H (	A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H #A ~ ~ ~ H 88~ ~ ~ H  c  c  H ,  H  ,  @ 0A ~ e   d h8! `c  |} AN   | @@ HT~|| @@ $ |  @; A |c  H 1H  ; c  c  H H  ; ,  A|~  } d h8! `c  |} AN  .  A | @@  ; ;`  ,  @  8b  ,   @ c    ,  @  ,  A H8e,  A , @ (H !A ~ ~ ~  ,  @ DH  $8~ ~ ~  ,  @  8b  ,   @ c      ~   8 H \; ;`  8 | @@ c  H %A ~  ,  A <8e,  A ,, A $@ @Kc  c  H ,  H  @ $A8e,  A, @K (  A | @@ dA H8e,  A , @ (H  ]A ~ ~ ~ c  c  H H  $8~ ~ ~ c  c  H ,  A T ,   @ (8b  ,   @ c    |H  |~ c  K}`   ~  } d h8! `c  |} AN       	 C       p assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__UlT2   |`  8` 8h `  8 !8    Da @ H L   C8  c  8  H s A c  H A c   h8! `}N       	(A              @ __dt__Q2_3std12length_errorFv |a  !`  |  @`  `  @ H "݀A  | | @@ `  ,  A ;`  /  A@,   A(,  A  8 `|  | @@ c  H "UA  |@@   /  A 8e,  A p, A h,  @ H@ $H ]A       8  H  8      8  H  c  c  H 倿 /  H  h,  @  A h a @e   /  H  D | @@ 8T~c  || @@  |  @A *c  H } /  A 8    ||}|(|(|"K!`    8 | @@ c  H !	A  | @@   /  A p8e,  A `, A X,  ; @ 8@ H A    H  8   H  c  c  H 
,  H  ,  @ (A  e  c   h8! `a}N   | @@ HT~|| @@ $ |  @; A |c  H 
9H  ; c  c  H 
%H  ; ,  A   }c   h8! `a}N       	 A        Terase__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlT1  8b  ,   L  8  8      N       	 @       ( T_Nullstr__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv  | 8 | @!`  `}  T>@ H A ,  A 8    } /  A H    | @@  } /  A ,  A , A |,  @ ` ,  A @8e,  A , @  H uA 8`  } } } H x88`  } } } H \c  c  H 8` H H,  @ |A ` ,  A @8e,  A , @  H A 8      H  088      H  A 8      8`  H  Ȁ A (  A | @@  ,  A L8e,  A , @ ,H mA 8   c     c  H H  `88   c     c  H H  8| @@ 0T~|d| @@  d| @A "c  c  H 8`  X8! P}N       	 A       P S_Grow__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlb    ,   A |  @A c | | @@ 8`  N  8` N       	 @          4 U_Inside__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc 8  8  H  <     	 @            __dftbdt__Q2_3std11logic_errorFv  | `  8  ;  88~H,  8 ! @`   H D   L CA P8e,  A , @ 0H A s 8~(      CA <H  ,8s 8~(      CA c  H A c   h8! `}N       	(A              @ __dt__Q2_3std11logic_errorFv  !| HH =A  H8! @}N       	 A         $ _Allocate__3stdHc_UlPc_Pc |!`   HH A  H8! @}N       	 A         ( *allocate__Q2_3std9allocatorXTc_Hv_UlPCv_Pc8` N       	 @           >__eq__3stdHcc_RCQ2_3std9allocatorXTc_RCQ2_3std9allocatorXTc__b8(  N       	 @           __dftbdt__Q2_3std9exceptionFv |`   p !8(  A H ݀A c   H8! @}N       	 A        H __dt__Q2_3std9exceptionFv `  |c  !,  AT,   A(,  A  8 | @@ c  H A  | @@   /  A 8e,  A p, A h,  @ H@ $H A 8`  |     H  88`  |     H  c  c  H  ,  H  l,  @ $A X8       ,  A TH  H | @@ 0T~|d| @@  d| @A "c  c  H  ,  A 8   H8! @}N   <8! @N       	 A       | S_Freeze__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv   8`N       	 @           Umax_size__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv A|;  `  !8 | @8`?  `z  a   H La P T@ `  8  8~  KH A  K`}   ; ,  A \H  D8`  H -A  _ 8~ H A `}  8` KA  ; ,  A  c  K`    `   ,  A \8d,  A , @ <H 5A  8      z z |!   A}H  88 8      z z |!   A}N       	(a       l      H R_Copy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl   c N       	 @           what__Q2_3std9exceptionCFvN       	 @           _Doraise__Q2_3std9exceptionCFv|c ,   !`?  @ b8  ,   @ 8  8      `  H  X8`  H A 8   CH YA 8    CH  $8`  H A H A 8` H U`   8` H I`   !   }N       	(a              @ what__Q2_3std11logic_errorCFv|A} &`~    !`8` H MA 0;  8 8a P| @8(8H H a H T L X \;`^ @^y;@8   A 8a PH AA  X|~ |@@ `z  ,  Ah T/  A(e,  A, A8`| @`  @ 8a PH A  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H ɀA  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  K T/  A 8   T|~ X||e| | K`    X8`z |@@ 8a PH A  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H A  T X \H 8 T X \H 8a Pcd  K),  H  x,  @ Ad X B  H T \| @@ HT~|| @@ $ |  @; A |8a PKH  ; cd  8a PKH  ; ,  Aa Ta X CٮH .  A ~ ;` ,  @ $8  ,   @   d  c  H  `d  ,  @ T@ (b8  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH ɀA  X T,  A <,  A 0, A (@ 8e@lKP8a PcD  K,  H  @ $AT8e,  A$, @4K \(  A | @@ dA H8e,  A , @ (H 	uA  T X \8a PcD  K)H  $8 T X \8a PcD  K,  A L ,  @  b8  ,   @   c  c  a TcE  K|`   a TA X DѮc  H ]A 8 P8a `8 HH `     8! |} AN       	 C       L !_Doraise__Q2_3std11logic_errorCFv |A} &`~    !`8` H ɀA 0;  8 8a P| @8(8H H a H T L X \;`^ @^y;@8   A 8a PH A  X|~ |@@ `z  ,  A T/  A(e,  A, A8`| @`  @ 8a PH =A  X| @@ a X T/  A h,  A \, A T,  @ 8e@ $H EA  T    X \8  H  8 T    X \8  H  h,  @  A l X A   T/  H  D \| @@ 8T~|d| @@  d| @A `"8a Pcd  K} T/  A 8   T|~ X||e| | Kz!`    X8`z |@@ 8a PH 	A  X| @@ a X T/  A p,  A d, A \,  ; @ <8e@ H A  T X \H 8 T X \H 8a Pcd  K,  H  ,  @ ,A X B  8hc   HH %A H | \| @@ HT~|| @@ $ |  @; A |8a PK5H  ; cd  8a PK!H  ; ,  Aa Ta X Cٮ8hc   HH A H .  A ~ ;` ,  @ $8  ,   @   d  c  H  `d  ,  @ T@ (b8  ,   @   c   Tc  H  a T  X  \8 H P;` 8 | @@ 8a PH 	A  X T,  A <,  A 0, A (@ 8e@DK(8a PcD  K,  H  @ $A,8e,  A, @K \(  A | @@ dA H8e,  A , @ (H ɀA  T X \8a PcD  K}H  $8 T X \8a PcD  KY,  A L ,  @  b8  ,   @   c  c  a TcE  Kv`   a TA X DѮ8hc   HH A 8 p8a `8 HH `     8! |} AN       	 C       | "_Doraise__Q2_3std12length_errorCFv8 8  K0     	 @           __dftdt__Q2_3std11logic_errorFv   KN       	 @       @31   KN       	 @       @7KN       	 @       @9                        b ` 8 q 8 A ||0  4@ T|+|*@0 || |(8 |8  9   4@ |*0  K0 ||*N  0 ||+|*AN  /  T, /  |M  00A HA A , ,   N@  A  ,   N@  A $ ,	  % N@  A    $ ,  ,  /  /   N@  A L N@  A L N@  A L% N@  A L   $ ,  ,  /  /  K B N   B N   B N  % B N        @       strncpy           H 
      @        memset A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               ĐA   L |	N               ȐA   L |	N               ̐A   L |	N               АA   L |	N               ԐA   L |	N               ؐA   L |	N               ܐA   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N              A   L |	N               A   L |	N              $A   L |	N              (A   L |	N              ,A   L |	N              0A   L |	N              4A   L |	N              | !`  `  `}  H  mA         c  8   X0! Px= | H  p                                  <A   L |	N              b@c  N       	         |} &`    !`  8` H A 8a PH A  W.   ; : ;  M  A  H  $ ,  A 4@      H A a @H A   ,   A (`d  8c  ,   A 8c  ,   K8 a @8  8 PH }A a @ H c  ,   Da @A<<`@; P;dޭ;Cޭ? H }  ,  A KlIA  D  `  `  ,  A $8c  ,  A 8c  ,  K:  T>, 	@8p A08  T?@ TA 8 p  A d  |`8 | @@8 T>|  @ 8 8d   ,  @8c  @ (@ 8 c  |T:H    T:H  W:||.}"| .,   @ d |  A|d  |@|@A @h<cA-  8c!S:|c 4Tt~` ~c |.| @ 0`  s    ,`    T>@ H  @ o |@ < ,  @|.s    ,`    T>@ H  tp A Ho ,  A <:  8a H8 D8 @b  c  9 PH H p ||.|*A |(.s    ,`    T>@ bc  H `   H  ,  A  bc  H `     ,   @$H  ,   A A @  T A <A 4|( A 4 8  ,  s c  `r  `q  @ `H  $A  ,  s c  `r  `q  @ <  T | @A ,:R  T | @A :R  T | @K~.a @b  c  8 PH A  @ ~. T]T :}|ѐ8a P| H A   ,   @ ` ~c |.| K:  8a H8 D8 @b  c  9 PH  e @,   A }  ,  K@c  H рA H A $(8! |} } } N       	      !`  |c  `   !,  `  a  A 8 0;c 0;C P8c p|8 @;<  ||||||8 `8| |  8 8HKh-`      8   c    ~    H  P}  `  `  c     }  H ]A   c  c  H  A}   h8! `}N   h8! `!}N       	     d   ,  ,  A L  <  |  L  L  <  |  L  8 p  <  | @M  d N       	         T    DA   L |	N              HA   L |	N              LA   L |	N              PA   L |	N              TA   L |	N              |8 X  !`?  ,   x | @ D@ ,c `  8 KeA !   }N    p A     `   `  H AA H  H ]A 8`  KeA !   }N       	(!          @0  |9` X  !`?   H8   Lp   x |   c  @A (`  d8  KdŀA !   H  8`  `  KdA H  H  A 8`  KdA !   }N       	(!          H0  K     	         K     	         \A   L |	N              `A   L |	N              hA   L |	N              lA   L |	N              pA   L |	N              tA   L |	N              | !`  KuA ,  c   L8  X@ $,  8 A # H  0! P|H  80! P|Kp                                  xA   L |	N                  /usr/lib/libc.a /usr/lib/profiled/libc.a IBM__cdtors    /var/ct/cfg/ctrmc.acls   IBM
Removes entire stanzas from the RMC ACL file.

usage: %s [-f<ACL file name>] [-v] [-h] <stanza names>

	<stanza names>      name of stanzas to remove
	-f<ACL file name>   ACL file location instead of default location %s
	-v                  verbose output
	-h                  display this message

Return values:
	0 - success (stanzas are now not present in file)
	1 - no such ACL file
	2 - unable to acquire lock on ACL file
	3 - other error occured
	666 - bad arguments

 /var/ct/cfg/ctrmc.acls Ihvf: IBMhvf: IBMremoving stanza "%s" from ACL file %s
 IUnexpected return value from ACLFile::DeleteStanza() of %d
 File "%s" not valid
 IBMsuccess! Original file has been backed up to %s.orig
       @(#)32   1.11.1.8   src/csm/common/ACLFile.C, dms, csm_rveg, rveg0414a 8/5/03 09:17:53  C   R   *       r   w   rw  Q2_3std12length_error:0,Q2_3std11logic_error:0,Q2_3std9exception:0  logic error std::exception  Q2_3std9exception   std::length_error   Q2_3std12length_error   std::logic_error    Q2_3std11logic_error    Q2_3std11logic_error:0,Q2_3std9exception:0 I[%s][%d][%d][%s]
 IB/var/ct/lck/ctrmc.acls.lock %s.orig %s I                                	%30s	%s %-2s IB # %s
 I
 IBroot@LOCALHOST Iroot on this node always has access LOCALHOST IBevery one else on this node can read only IB/bin/cp %s %s 2>&1 I/usr/sbin/rsct/cfg/ctrmc.acls IB%s.%s IBnew_file IBM%s
 /var/ct/cfg/ctrmc.acls      <unknown>     Ծޭ                     ޭ                                     @(#)23  1.4  src/bos/usr/ccs/lib/libpthreads/init.c, libpth, bos520 8/19/99 12:20:14    @(#)61	1.14  src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos520 7/11/00 12:04:14                ޭ      P  (                                                                                                 0     4          , <         |          @          P d         4         |Z          |Z   PD      ޭ        L           hޭ      p  X              ޭ         d              ޭ         p                  |                                                             ޭ                        X        ޭ                                       ޭ                      ޭ                  (                 
       
       <                            Y|              ?,       X              0              T              $                     y       8       \       P       l                                                            ,    0                          x         X                              4                   @  D      H h  h                                                                                                                                                                                                            H         	  @    __quous   3  @                  @                   @       errno         @       close         @
       link          @
                    @
       open          @
       rename        @
       unlink        @
              '      @       malloc        @
       free          @
       _Errno        @
       exit          @
       atexit        @
       strlen        @
       fopen         @
              ?      @
       fprintf       @
       printf        @
       fclose        @
       fflush        @
              M      @
       snprintf      @
       fgets         @
       sscanf        @
       fseek         @
       stat          @
       system        @
       isalpha       @
       memcmp        @
       getopt        @
       strerror      @
              Y      @
              e      @
       __crt0v       @       optind        @       optarg        @              r      @                    @
                    @
                    @
                    @
                    @
                    @
                    @
                    @
                   @
             (      @
             6      @
             H      @
             X      @
             }      @
                   @
                   @                   @
                   @
                   @
                    @
       fcntl         @
                   @
       sleep         @
                   @
             (      @
             4      @             f      @                   @
                   @
                   @
                   @
       __start    !
          ,       <       \       4       8       D        T          D       D              D                             E                       E                                       E                                   $        4        <        T       d        t                                                                                                                                4       H       d       x                                                                                                                                              (        ,       4        8       @        D       L        P       X        \       d        h       p        t       |                                                                                                                                                                                                            (   @    @       D       H       L       P       T   	    X       \       `       d       h       l   /    p       t        x       |   "       '       :       >              *                     &                             #                     )                             =       +                             $                                   <       
       ;       ?        A                     %                     !                   $       (       ,       0       4   ,    8   -    <   B    @   C    D       H   H    L   I    P       T   3    X       \   7    `   2    d   4    h   5    l   6    p       t   0    x   .    |           8       9       F       G       1       (  /usr/lib:/lib:/usr/ibmcxx/lib    libc.a shr.o  libC.a shr.o  libpthread.a shr_comm.o  libpthread.a shr_xpg5.o  libbsd.a shr.o  libC.a shr2.o  libC.a shr3.o  libC.a ansi_32.o  
___memset  ___memmove  
loadquery  _system_configuration  strncasecmp  
vsnprintf  
fdatasync  __mod_init  __malloc_user_defined_name  
__dl__FPv  
__nw__FUl  __nw__FUlPv  terminate__Fv  __CleanupCatch  __vec__delete2  __BadRethrow  __SaveNonVolatileRegisters  __CurrentException  __frame_ptr  __my_pc_address  __ExtractRegs  #__setUncaughtExceptionFlag__3stdFb  __RestoreRegsAndJump  __ResetStackPointer  __pthread_trace  pthread_mutex_unlock  pthread_mutex_lock  pthread_mutex_destroy  pthread_init  __bsd_init  
__vn__FUl  
__vd__FPv  0__vft24__DynaCastDesc_si_public14__DynaCastDesc  __vft13eti_cplusplus9type_info  terminate__3stdFv  unexpected__3stdFv   _Xlen__Q2_3std12_String_baseCFv   _Xran__Q2_3std12_String_baseCFv  *    >  L B  N J    `  Z n    p         r   P   R               (   T   h            &    R      ݙ $   0  * :    L   d  љ p       F    n      Ǚ   Ǚ    r        |  ݙ   *     v        	&    	\   @ 	  ݙ 	  ݙ 
        B    j                    @    L   H               ^   `     B  d f  b   d   f 
        $   b    j           ȏ    8   B   ȏ P   b   Ώ f   Џ j   ҏ             r   ԏ    Џ      @    Ώ    ȏ       ș R   ȏ \   p      ȏ          ȏ           j          ʙ   ʙ   ʙ   ؙ    ֏   ʙ   ؙ    ؏          ֏    ԙ ,   <   P      (   <   H   |      ֏     >   ֏ D   x     ԙ      ř d  ř |  ř    ؏     
   ֏    ,   8   B   ؏ D                       ؙ          ؏       ؏       ֏   ԙ                 @   P   \         <  ٙ          ֏ H  Ǚ    ֏        p       ֏    ޙ !B   ֏ !  ϙ "   "  ʙ "   ֏ #~   ֏ $   ֏ %>   ֏ )   )   +   -   ֏ /   0L   0x    0    1   2<   2f   ֏ 3(   3   4   5   5F   ֏ 6   6d   78   7   8|   8   8   ֏ 9   :   :   ;4   ;   <X   <   =L   =  a >&   ֏ >  f ?   @0   @   @    A    AP    BB   B   B    B    C   ֏ C4   Cx  u C  z C  z D4  u D|   Ed  ՙ E  u E   F  u G(   G  ՙ H  u HT   I   JP  ә J   J   K(  u K`   K   LR   Lt  ә L   L   L    M,    N   O   P   ֏ P   R0    R    T|   U   X   Z\   Z  u Z  z [  z [`  u [   \  ՙ \  u \   ^  u ^P   _  ՙ _4  u _|   `   aP  ә a   ֏ b   bT  z b  u b   c  ՙ c  u d,   eV   e   e  u f   f   g  ә g   i  u iT  z i  z i  u j,   j  ՙ k  u k`   lx  u l   m  ՙ m  u m   o   o   o  ә p  z q  z q`  u q   rt  ՙ r  u r   t  u tP   u,  ՙ uL  u u   v   v   w   wN   wR   w  u xH   x   x   x  ә y   z   z  z {   u {H   |,  ՙ |L  u |   }   }   ~  u 0      8   2         P      ^         `  u            R      * <  ә p           R $  p <  R D  k P  ę \  ę      R <  z   u      ՙ   u       2     u 0        ә   R    V   \  R   z   u `   ,  ՙ L  u       R   R       8  u    6   X  ә |  R            `    `   D ~                    F    n                    6    ^                    &    N    v                >  
 f               .   V   ~     >     .    V  "   R   9   C    H H  M z  "   ݙ         M   W \  \ d  k    љ h  M &  $ N  & v  (   *   ,   . 0  ݙ n   ܏ t  /   %   *   .   4   ݙ <  ݙ H  % T  *   0   2   6 .  8 V  : ~  <   >   4     .  >  ,     <     \     4  L   8  ^   D  v   T  z      2      2     *      2     *     2     (      4     (     (      4     (     (     4     (       4     (     (     2     (   $  (   4  (   <  (   T  L   d  (   t  F     J     0     *     *     D     B     @     *     *     >     8      <     *     *     :     8      6   4  H   H  F   d  .   x  ,               D           r           z                                 |           X           Z          (  t   ,      4     8      @      D      L     P      X     \      d     h      p  "   t      |                                                                                                     $           &                                   \   (      @     D     H     L   b   P   Z   T   P   X   ^   \   \   `   `   d  j   h     l      p     t     x   X   |                           Z           \     J            J     v      l           |     ~           x     (     P                  t      ~      |            V      f      z      n            R            
             L      N            T      v            x       r   $   j   (   p   ,   h   0  *   4      8      <   .   @   0   D   d   H   :   L   <   P  N   T       X     \   (   `      d   "   h   $   l   &   p     t      x      |        *      ,      6      8                                                                       
             )                   
             <                   
             R                   
      fcntl                      
             _                   
      sleep                      
             j                   
             t                   
             ~                   
                                
                                
                                
                                
                                
                                
                                
                                
                               
                               
            >                   
            S                   
            g                   
            q                   
            {                                                                                 
                               
                               
                               
      __quous   3                     .__quous  3                           /                             9                             D                              O                        errno                            close                      
      link                       
            [                   
      open                       
      rename                     
      unlink                     
            e                         malloc                     
      free                       
      _Errno                     
      exit                       
      atexit                     
      strlen                     
      fopen                      
            {                   
      fprintf                    
      printf                     
      fclose                     
      fflush                     
                               
      snprintf                   
      fgets                      
      sscanf                     
      fseek                      
      stat                       
      system                     
      isalpha                    
      memcmp                     
      getopt                     
      strerror                   
                               
                               
      __crt0v                          optind                           optarg                                                          TOC          k                        @   k                       D   k               _$STATIC  H   k               atexit    L   k               malloc    P   k                     [  T   k               _Errno    X   k               free      \   k               exit      `   k               _cdtors   d   k                       h   k                        l   k                       p   k                         t   k                     e  x   k               memcmp    |   k               __crt0v      k                           k                      R     k               _$STATIC     k                          k               _$STATIC     k                          k                          k               errno        k                            k               printf       k               getopt       k               verbose      k               acl_file     k               optarg       k               _$STATIC     k                            k                          k                      <     k                      j     k               snprintf     k               system       k               stat         k               strerror     k               unlink       k               fopen        k               fseek        k               fclose       k                      )     k               open         k                           k               fcntl        k               sleep         k               close        k               link         k                          k               rename       k               fgets        k               isalpha      k               sscanf       k                           k               fprintf   $   k               fflush    (   k                     {  ,   k               _$STATIC  0   k                      t  4   k                      ~  8   k                     g  <   k                     q  @   k               strlen    D   k                       H   k                       L   k                       P   k                        T   k               _$STATIC  X   k                       \   k                        `   k                        d   k                        h   k                       l   k               _$STATIC  p   k                        t   k                        x   k                         |   k                     >     k                     S     k                          k                          k                           k               optind       k                        Cg       ,  Tg .__start (   k                .__start (     D             __start               
              4   k               p_xargc                     p_xargv                     p_xrcfg   8                  p_xrc     <                  .file     h g      7                v                                    k                           X             _$STATIC     k   Z                                
              $                          ,                          0                        
  4                  .file     	g      $                J               d                     k                           l                         l             .main    `     l                       k  l                         k              _$STATIC  H   k                       (   k         
      verbose   @                  acl_file  D                  .file     R	g                                     d                     k                     %                         x                          |                                                                                                    <                                                 # l                        B x                        Z                         q                           `                                                   !8                         "t                        ! #p   k                     T #   k                      $                         &X                        5 &                        ~ 'H                        	 (                        	p (                        	 )                        
! *                        
 +                        Q ,                         -X                         -                        n /<                         /                         =                         >                         ?,   k                     Z @                         B0                         N0                        / O                         P                         Q                          Q                         R                         R                        Y Tl                        R U                         V                         WT                        I X                         X   k                      Y|   k                      Y                        b Z0                         a                         g                        q h                         p                        j y                         zx                         }                        5 ~                         @                            k                      $                        ! D                        <                         h                           \   k                                                                       7                           t                         T                                                                          =                         ` 8                            k               .@31     0   k               .@7      P   k               .@9      l   k                        h   k              _$STATIC     k              @9           k         
      @7           k         
      @31       p   k         
              4   k         
              @   k         
            a              
                          
            k              
            >              
                          
                          
                          
              |            
              X   k         
                 k         
              d   k         
              L   k         
                 k                       h      4            .file     ` g                                                          k   X                         V             _$STATIC     k   U                                
                                 .file     f g      '                c                              }  (                  .file     l	g../../cdtors.C                                  _cdtors   x                  .file     	g                                                          k  	                          p                       k  p                   -    k  p                   @ (   k  p                   l      p                    <   k  p                    t   k  p                       k  p                    	    k  p                    
   k  p                    
   k  p                      X   k   5            _$STATIC  0   k   D            __glab26     k         
      __glab13     k         
                 k                                   
                          
                 k         
              ,                  .file     	g                                                          k                                                                 .__glab7    k               .__glab6    k                            k   
            _$STATIC     k   <            __glab6      k         
      __glab7       k         
      .file     	g      )                @               Z                  T   k                      T                         p                            k                         k               _$STATIC     k               noname    g .__Throw                    noname    g        )                    strcmp.s  g .strcmp       0      )              4  g .strncpy            )       moveeq.s  g .bcopy   @      A      )       .ovbcopy @                  ._moveeq L                  .memcpy  L                  .memmove L                  memset.s  g .memset  `            )       ptrgl.s   g ._ptrgl     k   0             ._ptrgl                    .$PTRGL                    glink.s   g        >    k   (                   >                  glink.s   g .exit       k   (            .exit                     glink.s   g .printf  h   k   (            .printf  h                 glink.s   g .getopt     k   (            .getopt                   glink.s   g        J \   k   (                   J \                 glink.s   g        `    k   (                   `                  glink.s   g        t |   k   (                   t |                  glink.s   	g         h   k   (                    h                 glink.s   g .fcntl      k   (            .fcntl        
            glink.s   g .sleep      k   (            .sleep                    glink.s   g            k   (                                     glink.s   g            k   (                                     glink.s   "g            k   (                                     glink.s   'g            k   (                         #            glink.s   ,g            k   (                         (            glink.s   1g            k   (                         -            glink.s   6g         ,   k   (                    ,     2            glink.s   ;g         L   k   (                    L     7            glink.s   @g       ! ,   k   (                  ! ,     <            glink.s   Eg       !) t   k   (                  !) t     A            glink.s   Jg       !6    k   (                  !6      F            glink.s   Og       !G    k   (                  !G      K            glink.s   Tg       !V $   k   (                  !V $     P            glink.s   Yg       !z    k   (                  !z      U            glink.s   ^g       ! ,   k   (                  ! ,     Z            glink.s   cg       !    k   (                  !      _            glink.s   hg       !    k   (                  !      d            glink.s   mg       ! T   k   (                  ! T     i            glink.s   rg       ! |   k   (                  ! |     n            glink.s   wg       ! T   k   (                  ! T     s            glink.s   |g       " |   k   (                  " |     x            glink.s   g .close      k   (            .close        }            glink.s   g .link       k   (            .link                     glink.s   g       "$ @   k   (                  "$ @                 glink.s   g .open    4   k   (            .open    4                 glink.s   g .rename  L   k   (            .rename  L                 glink.s   g .unlink  l   k   (            .unlink  l                 glink.s   g .malloc     k   (            .malloc                   glink.s   g .free       k   (            .free                     glink.s   g ._Errno  h   k   (            ._Errno  h                 glink.s   g .atexit  
   k   (            .atexit  
                 glink.s   g .strlen  ,   k   (            .strlen  ,                 glink.s   g .fopen      k   (            .fopen                    glink.s   g       "/ d   k   (                  "/ d                 glink.s   g .fprintf    k   (            .fprintf                  glink.s   g .fclose     k   (            .fclose                   glink.s   g .fflush  <   k   (            .fflush  <                 glink.s   g       "<    k   (                  "<                  glink.s   g       "G    k   (                  "G                  glink.s   g .fgets   t   k   (            .fgets   t                 glink.s   g .sscanf     k   (            .sscanf                   glink.s   g .fseek      k   (            .fseek                    glink.s   g .stat       k   (            .stat                     glink.s   g .system     k   (            .system                   glink.s   g .isalpha    k   (            .isalpha                  glink.s   g .memcmp     k   (            .memcmp                   glink.s   g       "Q D   k   (                  "Q D                 glink.s g       "[ $   k   (                  "[ $                   "f__pthread_trace pthread_mutex_unlock pthread_mutex_lock pthread_mutex_destroy pthread_init __bsd_init __dl__FPv __nw__FUl __nw__FUlPv terminate__Fv __CleanupCatch __vec__delete2 __BadRethrow __SaveNonVolatileRegisters __CurrentException __frame_ptr __my_pc_address __ExtractRegs __setUncaughtExceptionFlag__3stdFb __RestoreRegsAndJump __ResetStackPointer __vn__FUl __vd__FPv __vft24__DynaCastDesc_si_public14__DynaCastDesc __vft13eti_cplusplus9type_info terminate__3stdFv unexpected__3stdFv _Xlen__Q2_3std12_String_baseCFv _Xran__Q2_3std12_String_baseCFv ___memset .___memset ___memmove .___memmove loadquery _system_configuration strncasecmp vsnprintf fdatasync __mod_init __malloc_user_defined_name __C_runtime_pstartup __C_runtime_termination PrioFcn__FPCvPCv _$STATIC_BSS crt0_data _file_mutex__7ACLFile crt0main.s ../../../../../../../src/bos/usr/ccs/lib/libc/__threads_init.c Sun Sep 15 15:10:49 2002  C for AIX Compiler Version 5.0.1.0 ---  .__threads_init _malloc_user_defined_name _xti_tli_init_routine _nsl_init_routine __dce_compat_init_routine ../../../../src/csm/common/rmstanza.C Mon Apr  5 20:11:33 2004  VisualAge C++ for AIX Compiler (DEVELOPMENT/BETA) Version 5.0.0.0 .usage__FPc .processCommandLineArgs__FiPPc .__dftdt__7ACLFileFv ../../../../src/csm/common/ACLFile.C Mon Apr  5 20:02:03 2004  .init__11StanzaEntryFPCcQ2_7ACLFile14PermissionTypeQ2_7ACLFile15PermissionLevelPCc .__ct__7ACLFileFPc .__dt__7ACLFileFv ._copyDefaultFile__7ACLFileFv ._fileExists__7ACLFileFv ._openFiles__7ACLFileFv ._closeFiles__7ACLFileFv ._aquireFileLocks__7ACLFileFv ._releaseFileLocks__7ACLFileFv ._SwapFiles__7ACLFileFv ._readLine__7ACLFileFv ._copy_till_stanza_found__7ACLFileFPCc ._lineIsStanzaHeader__7ACLFileFv ._first_token__7ACLFileFPc ._printToFile__7ACLFileCFP4FILEPCce ._print_entry__7ACLFileCFPC11StanzaEntry .get_permission_type__FQ2_7ACLFile14PermissionType .get_permission_level__FQ2_7ACLFile15PermissionLevel ._print_all_entries__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__b .begin__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv .end__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv .__ne__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator .__ml__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorCFv .__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFi ._entry_exists__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Pcb .__as__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFRCQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator .erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iterator ._Next__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__4_AccFPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node ._lineIsComment__7ACLFileFv ._copy_stanza_to_outfile__7ACLFileFRQ2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__i .AddOrUpdateEntries__7ACLFileFPCcCPC11StanzaEntryi ._processFile__7ACLFileFPCcCPC11StanzaEntryiT3 .DeleteEntries__7ACLFileFPCcPPci .DeleteStanza__7ACLFileFPCc .__dftdt__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__Fv ._Buynode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeT1 ._Insert__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorRCP11StanzaEntry .erase__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FQ3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorT1 ._Freenode__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__FPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node .dump__11StanzaEntryCFv ._Destroy__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v ._Destroy__3stdHP11StanzaEntry_PP11StanzaEntry_v ._Construct__3stdHP11StanzaEntryP11StanzaEntry_PP11StanzaEntryRCP11StanzaEntry_v ._Construct__3stdHPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodePQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_NodeRCPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_v ._Allocate__3stdHQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_UlPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node .allocate__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_Hv_UlPCv_PQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node .__ct__Q2_3std9allocatorXTQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_ .__ct__Q2_3std9allocatorXTPQ3_3std9_List_nodXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__5_Node_GP11StanzaEntry_RCQ2_3std9allocatorXTP11StanzaEntry_ .__pp__Q3_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__8iteratorFv .__dftdt__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv .__dftdt__Q2_3std12length_errorFv .max_size__Q2_3std4listXTP11StanzaEntryTQ2_3std9allocatorXTP11StanzaEntry__CFv .__ct__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc .__ct__Q2_3std12length_errorFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ ._Tidy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fb .assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCcUl .assign__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__UlT2 .__dt__Q2_3std12length_errorFv .erase__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlT1 ._Nullstr__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv ._Grow__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUlb ._Inside__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FPCc .__dftbdt__Q2_3std11logic_errorFv .__dt__Q2_3std11logic_errorFv ._Allocate__3stdHc_UlPc_Pc .allocate__Q2_3std9allocatorXTc_Hv_UlPCv_Pc .__eq__3stdHcc_RCQ2_3std9allocatorXTc_RCQ2_3std9allocatorXTc__b .__dftbdt__Q2_3std9exceptionFv .__dt__Q2_3std9exceptionFv ._Freeze__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__Fv .max_size__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__CFv ._Copy__Q2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__FUl .what__Q2_3std9exceptionCFv ._Doraise__Q2_3std9exceptionCFv .what__Q2_3std11logic_errorCFv ._Doraise__Q2_3std11logic_errorCFv ._Doraise__Q2_3std12length_errorCFv .__dftdt__Q2_3std11logic_errorFv ../../../../../../../../src/bos/usr/ccs/lib/libpthreads/init.c Sun Sep 15 16:25:03 2002  .call_pthread_init _pthread_init_routine ../../../../../../../src/bos/usr/ccs/lib/libbsd/__threads.c Sun Sep 15 18:32:13 2002  _bsd_init_routine Wed Jul 19 12:25:37 2000  IBM C and C++ Compilers, Version 3.6.4.0 ../../startup.C Wed Jul 19 12:25:36 2000  .__C_runtime_startup .__qsort__FPvUlT2PFPCvPCv_i .__NLibraries__FPc .__Extract_cdtors_Addresses__FPcP7LibDescRi .__C_runtime_termination .PrioFcn__FPCvPCv .qstexc__FPcN21 .qsexc__FPcT1 .qs1__FPcT1 .__glab13 .__glab26 ../../invokedtr.C Wed Jul 19 12:25:38 2000  .__Invoke__Destructor .__Invoke__Delete ../..//rs6000/except.C Wed Jul 19 13:30:20 2000  IBM VisualAge C++ Professional for AIX Compiler Version 5.0.0.0 .__set_PA_callback__FPFv_v .__DoThrow .GrabInformation__FRP12__sigcontextRPlT2P7tbtablelR9registers .nextFrame__FR9registersPlRP12__sigcontext .__ReThrow strncpy.s .__mod_init .pthread_mutex_unlock .pthread_mutex_lock .pthread_mutex_destroy .pthread_init .__dl__FPv .__nw__FUl .__nw__FUlPv .terminate__Fv .__CleanupCatch .__vec__delete2 .__BadRethrow .__SaveNonVolatileRegisters .__CurrentException .__frame_ptr .__my_pc_address .__ExtractRegs .__setUncaughtExceptionFlag__3stdFb .__RestoreRegsAndJump .__ResetStackPointer .__vn__FUl .__vd__FPv .terminate__3stdFv .unexpected__3stdFv ._Xlen__Q2_3std12_String_baseCFv ._Xran__Q2_3std12_String_baseCFv .loadquery .strncasecmp .vsnprintf .snprintf .strerror .fdatasync stkA 0PB  7u     D   q@q@q@             D       ./opt/csm/install/CSM_CLIENT.bnd et nd_R                             #CSM_CLIENT.bnd
I:csm.core
I:csm.dsh
I:csm.client
I:csm.diagnostics
11Stkv 0PB  7u        q@q@q@                    ./opt/csm/install/CSM_SERVER.bnd et nd_R                             #CSM_SERVER.bnd
#MEDIA="AIX Base Install Media Volume 2"
I:csm.server
I:csm.diagnostics
I:csm.gui.dcem
I:csm.gui.websm
I:csm.dsh
I:csm.client
R:conserver
R:expect
R:tcl
R:tk
d9k7 0PB$  7u     *   q@q@q@             *       ./opt/csm/install/csmfilelist_aixV51 d_R                   $          I:csm.client
I:csm.core
I:csm.diagnostics
edia Vk 0PB$  7u        q@q@q@                    ./opt/csm/install/csmfilelist_aixV52 d_R                   $          I:csm.client
I:csm.core
I:csm.dsh
I:csm.msg.en_US
I:csm.msg.EN_US
I:csm.server
I:csm.diagnostics
I:csm.gui.dcem
I:csm.gui.websm
k 0PB$  7u     \   q@q@q@             \       ./opt/csm/install/csmrpms_aixV52 V52 d_R                   $          R:conserver.aix5.1.ppc.rpm
R:expect.aix4.3.ppc.rpm
R:tcl.aix4.3.ppc.rpm
R:tk.aix4.3.ppc.rpm
ticskS 0PB  7u     
  :q@:q@:q@             
      ./opt/csm/install/defs/AIX.pm 52                             # @(#)47   1.2   src/csm/install/defs/AIX.pm.perl, setup, csm_rveg, rveg0414a 7/29/03 17:15:16
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Base AIX definition file
#

#($::VERBOSE) && print "Loading /opt/csm/install/defs/AIX.pm\n";
NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/AIX.pm");

%::OSDefs = (
    # Command pathnames
    # while CSM no longer works with atftp, we still have the variable
    # to support older kickstart files.
    ATFTP       =>  "/usr/bin/tftp",
    TFTP        =>  "/usr/bin/tftp",
    CAT         =>  "/bin/cat",
    CHMOD       =>  "/bin/chmod",
    COPY        =>  "/bin/cp",
    CP          =>  "/bin/cp",
    ESPTTY      =>  "/usr/bin/esptty",
    EXPORTFS    =>  "/usr/sbin/exportfs",
    GREP        =>  "/bin/grep",
    GUNZIP      =>  "/bin/gunzip",
    GZIP        =>  "/bin/gzip",
    IFCONFIG    =>  "/sbin/ifconfig",
    LN          =>  "/bin/ln",
    LS          =>  "/bin/ls",
    LSOF        =>  "/usr/sbin/lsof",
    MKDIR       =>  "/bin/mkdir",
    MOVE        =>  "/bin/mv",
    MV          =>  "/bin/mv",
    NETSTAT     =>  "/bin/netstat",
    RM          =>  "/bin/rm",
    RPMCMD      =>  "/bin/rpm",
    SLEEP       =>  "/bin/sleep",
    TOUCH       =>  "/bin/touch",
    TAIL        =>  "/usr/bin/tail",
    TAR         =>  "/bin/tar",
    UNAME       =>  "/bin/uname",

    # Commands with pathnames specific to AIX
    AIX_MNT_DEV =>  "/dev/cd0",
    CPIO        =>  "/bin/cpio",
    CUT         =>  "/usr/bin/cut",
    HEAD        =>  "/bin/head",
    INSTALLPCMD =>  "/usr/sbin/installp",
    LSITAB      =>  "/usr/sbin/lsitab",
    LSLPP       =>  "/bin/lslpp",
    LSNIM       =>  "/usr/sbin/lsnim",
    LSRSRC      =>  "/bin/lsrsrc",
    LSRSRC_API  =>  "/bin/lsrsrc-api",
    MKITAB      =>  "/usr/sbin/mkitab",
    MKNFS       =>  "/usr/sbin/mknfs",
    MKNFSEXP    =>  "/usr/sbin/mknfsexp",
    MNTCDROM    =>  "/tmp/tmpcdmount.csm",
    MOUNT       =>  "/usr/sbin/mount",
    NIM         =>  "/usr/sbin/nim",
    NIMINFO     =>  "/etc/niminfo",
    OSLEVEL     =>  "/bin/oslevel",
    PING        =>  "/etc/ping",
    RESTORE     =>  "/usr/sbin/restore",
    RMITAB      =>  "/usr/sbin/rmitab",
    RPM2CPIO    =>  "/bin/rpm2cpio",
    UMOUNT     =>  "/usr/sbin/umount",
    UNMOUNT     =>  "/usr/sbin/umount",
);

1; 

4.k$ 0PB  7u       :q@:q@:q@                   ./opt/csm/install/defs/Linux-SLES.pm d_R                             # @(#)50   1.5   src/csm/install/defs/Linux-SLES.pm.perl, setup, csm_rveg, rveg0414a 11/21/03 03:36:20
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Linux-SLES
#
#  Load base Linux definitions:
if(-e "/opt/csm/install/defs/Linux.pm"){
	do "/opt/csm/install/defs/Linux.pm";
}elsif(-e "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm"){
    do "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm";
}else{
	do "/csminstall/csm/defs/Linux.pm";
}

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/Linux-SLES.pm");

$::OSDefs{LSOF}		= "/usr/bin/lsof";
$::OSDefs{MNTCDROM}	= "/media/cdrom";

1;

 =kR5 0PB  7u     9  :q@:q@:q@             9      ./opt/csm/install/defs/Linux-SLES8.1.pm                              # @(#)49   1.4   src/csm/install/defs/Linux-SLES8.1.pm.perl, setup, csm_rveg, rveg0414a 6/12/03 22:04:37
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Linux-SLES8.1
#
#  Load base Linux definitions:
if(-e "/opt/csm/install/defs/Linux.pm"){
	do "/opt/csm/install/defs/Linux.pm";
	do "/opt/csm/install/defs/Linux-SLES.pm";
}
elsif(-e "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm"){
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm";
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux-SLES.pm";
}
else{
	do "/csminstall/csm/defs/Linux.pm";
	do "/csminstall/csm/defs/Linux-SLES.pm";
}



NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/Linux-SLES8.1.pm");

$::OSDefs{MNTCDROM}	= "/media/cdrom";

1;

bin/espkꬪ 0PB  7u       :q@:q@:q@                   ./opt/csm/install/defs/Linux-SuSE.pm pm                              # @(#)52   1.4   src/csm/install/defs/Linux-SuSE.pm.perl, setup, csm_rveg, rveg0414a 6/12/03 22:04:39
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Linux-SuSE
#
#  Load base Linux definitions:
if(-e "/opt/csm/install/defs/Linux.pm"){
	do "/opt/csm/install/defs/Linux.pm";
}
elsif(-e "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm"){
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm";
}
else{
	do "/csminstall/csm/defs/Linux.pm";
}

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/Linux-SuSE.pm");

$::OSDefs{LSOF}		= "/usr/bin/lsof";
$::OSDefs{MNTCDROM}	= "/cdrom";

1;

nskF 0PB  7u     7  :q@:q@:q@             7      ./opt/csm/install/defs/Linux-SuSE8.1.pm                              # @(#)51   1.4   src/csm/install/defs/Linux-SuSE8.1.pm.perl, setup, csm_rveg, rveg0414a 6/12/03 22:04:38
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Linux-SuSE8.1
#
#  Load base Linux definitions:
if(-e "/opt/csm/install/defs/Linux.pm"){
	do "/opt/csm/install/defs/Linux.pm";
	do "/opt/csm/install/defs/Linux-SuSE.pm";
}
elsif(-e "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm"){
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm";
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux-SuSE.pm";
}
else{
	do "/csminstall/csm/defs/Linux.pm";
	do "/csminstall/csm/defs/Linux-SuSE.pm";
}

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/Linux-SuSE8.1.pm");

$::OSDefs{MNTCDROM}	= "/media/cdrom";

1;


k 0PB  7u       :q@:q@:q@                   ./opt/csm/install/defs/Linux-SuSE8.2.pm                              # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Linux-SuSE8.2
#
#  Load base Linux definitions:
if(-e "/opt/csm/install/defs/Linux.pm"){
	do "/opt/csm/install/defs/Linux.pm";
	do "/opt/csm/install/defs/Linux-SuSE.pm";
}
elsif(-e "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm"){
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux.pm";
	do "$::CSMCLIENTMNTDIR/csm/defs/Linux-SuSE.pm";
}
else{
	do "/csminstall/csm/defs/Linux.pm";
	do "/csminstall/csm/defs/Linux-SuSE.pm";
}


NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/Linux-SuSE8.2.pm");

$::OSDefs{MNTCDROM}	= "/media/cdrom";

1;

,k4< 0PB  7u       :q@:q@:q@                   ./opt/csm/install/defs/Linux.pm                              # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Definition File:  Base Linux definition file
#
# @(#)48   1.3   src/csm/install/defs/Linux.pm.perl, setup, csm_rveg, rveg0414a 9/5/03 18:37:30

#($::VERBOSE) && print "Loading /opt/csm/install/defs/Linux.pm\n";
NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/defs/Linux.pm");

%::OSDefs = (
    # Command pathnames
    # while CSM no longer uses atftp, the variable will stay for
    # older kickstart files.
    ATFTP       =>  "/usr/bin/tftp",
    TFTP        =>  "/usr/bin/tftp",
    CAT         =>  "/bin/cat",
    CHMOD       =>  "/bin/chmod",
    COPY        =>  "/bin/cp",
    CP          =>  "/bin/cp",
    ESPTTY      =>  "/usr/bin/esptty",
    EXPORTFS    =>  "/usr/sbin/exportfs",
    GREP        =>  "/bin/grep",
    GUNZIP      =>  "/bin/gunzip",
    GZIP        =>  "/bin/gzip",
    IFCONFIG    =>  "/sbin/ifconfig",
    LN          =>  "/bin/ln",
    LS          =>  "/bin/ls",
    LSOF        =>  "/usr/sbin/lsof",
    MKDIR       =>  "/bin/mkdir",
    MOVE        =>  "/bin/mv",
    MV          =>  "/bin/mv",
    NETSTAT     =>  "/bin/netstat",
    RM          =>  "/bin/rm",
    RPMCMD      =>  "/bin/rpm",
    RPM_BLD_CMD =>  "/usr/bin/rpmbuild",
    SLEEP       =>  "/bin/sleep",
    TAIL        =>  "/usr/bin/tail",
    TAR         =>  "/bin/tar",
    TOUCH       =>  "/bin/touch",
    UNAME       =>  "/bin/uname",

    # Commands with pathnames specific to Linux
    CPIO        =>  "/bin/cpio",
    HEAD        =>  "/usr/bin/head",
    LSRSRC      =>  "/usr/bin/lsrsrc",
    LSRSRC_API  =>  "/usr/bin/lsrsrc-api",
    MNTCDROM    =>  "/mnt/cdrom",
    MOUNT       =>  "/bin/mount",
    PING        =>  "/bin/ping",
    RPM2CPIO    =>  "/usr/bin/rpm2cpio",
    SERVICE     =>  "/sbin/service",
    UMOUNT      =>  "/bin/umount",
    UNMOUNT     =>  "/bin/umount",
);

1;
  k@o 0PB  7u       <q@<q@<q@                   ./opt/csm/install/pkgdefs/AIX-5.1.0.pm                               # @(#)68   1.6   src/csm/install/pkgdefs/AIX-5.1.0.pm.perl, setup, csm_rveg, rveg0414a 10/10/03 09:55:11
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  AIX 5.1.0
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.1.0, 1.1.1, 1.1.2, 1.1.3, etc.

package AIX510;
do "/opt/csm/install/pkgdefs/AIX.pm";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/AIX-5.1.0.pm");


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgdNode'}{'1.1.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.1.1'} = [];
$opensrc_prereqs{'MgdNode'}{'1.1.2'} = [];
$opensrc_prereqs{'MgdNode'}{'1.1.3'} = [];
$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};

# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgdNode'}{'1.1.0'} = [];
$rsct_packages{'MgdNode'}{'1.1.1'} = [];
$rsct_packages{'MgdNode'}{'1.1.2'} = [];
$rsct_packages{'MgdNode'}{'1.1.3'} = [];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};

# CSM Packages to Install
# This is used by copycsmpkgs.  Since gencopy places extra characters
# after the fileset name, we put the * to handle this case.  This
# potentially could cause problems elsewhere.
my $csm_packages;
$csm_packages{'MgdNode'}{'1.1.0'}
	    =['csm.core*','csm.client*','csm.diagnostics*'];
$csm_packages{'MgdNode'}{'1.1.1'}
	    =['csm.core*','csm.client*','csm.diagnostics*'];
$csm_packages{'MgdNode'}{'1.1.2'}
	    =['csm.core*','csm.client*','csm.diagnostics*'];
$csm_packages{'MgdNode'}{'1.1.3'}
	    =['csm.core*','csm.client*','csm.diagnostics*'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgdNode'}{'1.1.0'}=[];
$rsct_unpackages{'MgdNode'}{'1.1.1'}=[];
$rsct_unpackages{'MgdNode'}{'1.1.2'}=[];
$rsct_unpackages{'MgdNode'}{'1.1.3'}=[];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgdNode'}{'1.1.0'}=[];
$csm_unpackages{'MgdNode'}{'1.1.1'}=[];
$csm_unpackages{'MgdNode'}{'1.1.2'}=[];
$csm_unpackages{'MgdNode'}{'1.1.3'}=[];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgdNode'}{'1.1.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.1.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.1.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.1.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgdNode'}{'1.1.0'}=['csm.core','csm.client'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.1.1'}=['csm.core','csm.client'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.1.2'}=['csm.core','csm.client'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.1.3'}=['csm.core','csm.client'];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=[];
$os_prereqs{'MgdNode'}=[];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

1;  # end
2_3sk{ 0PB  7u       <q@<q@<q@                   ./opt/csm/install/pkgdefs/AIX-5.2.0.pm                               # @(#)69   1.7   src/csm/install/pkgdefs/AIX-5.2.0.pm.perl, setup, csm_rveg, rveg0414a 10/10/03 09:59:00
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  AIX 5.2.0
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package AIX520;
do "/opt/csm/install/pkgdefs/AIX.pm";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/AIX-5.2.0.pm");


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tcl*','tk*','expect*','conserver*'];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = [];
$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};

# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'} = [];
$rsct_packages{'MgdNode'}{'1.3.0'} = [];
$rsct_packages{'MgdNode'}{'1.3.1'} = [];
$rsct_packages{'MgdNode'}{'1.3.2'} = [];
$rsct_packages{'MgdNode'}{'1.3.3'} = [];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};

# CSM Packages to Install
# This is used by copycsmpkgs.  Since gencopy places extra characters (VRMF)
# after the fileset name, we put the * to handle this case.  This
# potentially could cause problems elsewhere.
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core*','csm.client*','csm.dsh*','csm.server*',
	       'csm.diagnostics*','csm.gui.dcem*','csm.gui.websm*',
	       'csm.msg.*_*'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core*','csm.client*','csm.diagnostics*',
	       'csm.dsh*','csm.msg.*_*'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core*','csm.client*','csm.diagnostics*',
	       'csm.dsh*','csm.msg.*_*'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core*','csm.client*','csm.diagnostics*',
	       'csm.dsh*','csm.msg.*_*'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core*','csm.client*','csm.diagnostics*',
	       'csm.dsh*','csm.msg.*_*'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=[];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=[];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=[];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=[];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.server','csm.diagnostics','csm.gui*'];
$csm_unpackages{'MgdNode'}{'1.3.0'}=[];
$csm_unpackages{'MgdNode'}{'1.3.1'}=[];
$csm_unpackages{'MgdNode'}{'1.3.2'}=[];
$csm_unpackages{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.dsh'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.dsh'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.dsh'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.dsh'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.dsh'];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=[];
$os_prereqs{'MgdNode'}=[];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

1;  # end
AIX.pkE 0PB  7u     	  <q@<q@<q@             	      ./opt/csm/install/pkgdefs/AIX.pm .0.pm                               # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
package AIX;
NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall', 'V',
                          'IMsgLoading', "/opt/csm/install/pkgdefs/AIX.pm");

%::pkgdefs = ();

# CSM binaries copied to /csminstall/csm directory
my $csm_bin_copy_csm;
$csm_bin_copy_csm = [
                     '/opt/csm/csmbin/updatenode.client',
                     '/opt/csm/csmbin/write_status',
                     '/opt/csm/msgmaps/csmInstall.csminstall.map',
                     '/opt/csm/pm/MessageUtils.pm',
                     '/opt/csm/pm/NodeUtils.pm',
                     '/opt/csm/pm/ArchiveUtils.pm',
                     '/opt/csm/pm/InstallUtils.pm',
                     '/opt/csm/pm/InstallKRB5Utils.pm',
                     '/opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map',
                     '/opt/csm/pm/NetworkUtils.pm',
                     '/opt/csm/pm/ServerUtils.pm',
                     '/opt/csm/pm/CSMDefs.pm',
                     '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                     '/opt/csm/csmbin/rmnode_client',
                     '/opt/csm/csmbin/makenode',
                     '/opt/csm/csmbin/csmprereboot',
                     '/opt/csm/csmbin/csmfirstboot',
                     '/opt/csm/install/defs',
                     '/opt/csm/install/pkgdefs'
                     ];
$::pkgdefs{csm_bin_copy_csm} = $csm_bin_copy_csm;

# CSM binaries copied to /tftpboot directory
my $csm_bin_copy_tftpboot;
$csm_bin_copy_tftpboot            = [];
$::pkgdefs{csm_bin_copy_tftpboot} = $csm_bin_copy_tftpboot;

# Default TFTP Server RPM Name
my $default_tftp_server_pkg_name;
$default_tftp_server_pkg_name            = ['tftp-hpa-0.34-1'];
$::pkgdefs{default_tftp_server_pkg_name} = $default_tftp_server_pkg_name;

# CSM Log files ( used while uninstalling)

my $logfiles;
$logfiles{'MgmtServer'}           = ['/var/log/csm/updatenode.log*',
                                     '/var/log/csm/installms.log*'];
$logfiles{'MgdNode'}              = ['/var/log/csm/install.log*',
                                     '/var/opt/csm/cfmlocal*'];
$::pkgdefs{logfiles}              = $logfiles{$::mgmt_type};

1;

k 0PB  7u     h"  =q@=q@=q@             h"      ./opt/csm/install/pkgdefs/Linux-RedHat7.2.pm  Co                             # @(#)71   1.20   src/csm/install/pkgdefs/Linux-RedHat7.2.pm.perl, setup, csm_rveg, rveg0407a 2/10/04 00:01:47
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHat 7.2
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3 etc.

package RedHat72;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHat7.2.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Linux 7.2";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2";		# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc1-i386',
	    #diskid_searchstring => '',
            diskid_searchargs   => {
                file    => '.disc1-i386',
                key     => '',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat7.2-i386',	    
	},
	{
	    num			=> '2',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc2-i386',
	    #diskid_searchstring => '',
            diskid_searchargs   => {
                file    => '.disc2-i386',
                key     => '',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat7.2-i386',	    
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    =['csm.core','csm.dsh','csm.server','csm.diagnostics',
	      'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    =['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    =['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    =['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    =['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    =['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.32*','XFree86-libs-4.1*','freetype-2.0*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','perl-libnet-1.07*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
knY 0PB  7u     $  =q@=q@=q@             $      ./opt/csm/install/pkgdefs/Linux-RedHat7.3.pm  Co                             # @(#)72   1.20   src/csm/install/pkgdefs/Linux-RedHat7.3.pm.perl, setup, csm_rveg, rveg0407a 2/10/04 00:02:37
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHat 7.3
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package RedHat73;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHat7.3.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Linux 7.3";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc1-i386',
	    #diskid_searchstring => 'Valhalla 7.3 disc1',
            diskid_searchargs   => {
                file    => '.disc1-i386',
                key     => 'Valhalla 7.3 disc1',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat7.3-i386',	    
	},
	{
	    num			=> '2',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc2-i386',
	    #diskid_searchstring => 'Valhalla 7.3 disc2',
            diskid_searchargs   => {
                file    => '.disc2-i386',
                key     => 'Valhalla 7.3 disc2',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat7.3-i386',	    
	},
	{
	    num			=> '3',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc3-i386',
	    #diskid_searchstring => 'Valhalla 7.3 disc3',
            diskid_searchargs   => {
                file    => '.disc3-i386',
                key     => 'Valhalla 7.3 disc3',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat7.3-i386',	    
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];

# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');

   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    =['src','rsct.core.utils','rsct.core','rsct.basic'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}=['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}=['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}=['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}=['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}=['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}=['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.32*','XFree86-libs-4.2*','freetype-2.0*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','perl-libnet-1.09*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
ack" 0PB  7u     V$  c@c@c@             V$      ./opt/csm/install/pkgdefs/Linux-RedHat8.0.pm  Co                             # @(#)73   1.27.1.1   src/csm/install/pkgdefs/Linux-RedHat8.0.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:43:05
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHat 8.0
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package RedHat80;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHat8.0.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Linux 8.0";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^1$',
            diskid_searchargs   => {
                file    => '.disc1-i386',
                key     => '^1$',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat8.0-i386',	    
	},
	{
	    num			=> '2',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^2$',
            diskid_searchargs   => {
                file    => '.disc2-i386',
                key     => '^2$',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat8.0-i386',	    
	},
	{
	    num			=> '3',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^3$',
            diskid_searchargs   => {
                file    => '.disc3-i386',
                key     => '^3$',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat8.0-i386',	    
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};

# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};

# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['syslinux-*','perl-5*','nfs-utils-*','pdksh-*','dhcp-3*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.38*','XFree86-libs-4.2*','freetype-2.1*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################
1;  # end
erk 0PB  7u     l$  c@c@c@             l$      ./opt/csm/install/pkgdefs/Linux-RedHat9.pm m  Co                             # @(#)24   1.15.1.1   src/csm/install/pkgdefs/Linux-RedHat9.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:44:16
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHat 9
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package RedHat9;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHat9.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Linux 9";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^1$',
            diskid_searchargs   => {
                file    => '.discinfo',
                key     => '^1$',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat9-i386',	    
	},
	{
	    num			=> '2',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^2$',
            diskid_searchargs   => {
                file    => '.discinfo',
                key     => '^2$',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat9-i386',	    
	},
	{
	    num			=> '3',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^3$',
            diskid_searchargs   => {
                file    => '.discinfo',
                key     => '^3$',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'RedHat9-i386',	    
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};

# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};

# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['syslinux-*','perl-5*','nfs-utils-*','pdksh-*','dhcp-3*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.38*','XFree86-libs-4.3*','freetype-2.1*','compat-libstdc++-*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
'csmk 0PB  7u     y.  b@b@b@             y.      ./opt/csm/install/pkgdefs/Linux-RedHatAS2.1.pm o                             # @(#)70   1.26.1.3   src/csm/install/pkgdefs/Linux-RedHatAS2.1.pm.perl, setup, csm_rveg 5/18/04 03:26:18
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatAS 2.1
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package RedHatAS21;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatAS2.1.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Linux Advanced Server 2.1";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc1-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1020464629.319525',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-i386',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc2-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1020464629.319525',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-i386',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc2-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc3-i386',
		key	=> '1020464629.319525',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-i386',
        },
);

# Service Pack disks defination
@::qu2_disks = (
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}.' QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1054091198.158084',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU2',
        },
	
	{
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}.' QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1054091198.158084',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU2',
        },

	{
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}.' QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc3-i386',
		key	=> '1054091198.158084',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU2',
        },
 	
);

@::qu4_disks = (
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1083183287.924640',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU4',
        },
	
	{
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1083183287.924640',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU4',
        },

	{
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc3-i386',
		key	=> '1083183287.924640',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU4',
        },

	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc4-i386',
		key	=> '1083183287.924640',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatAS2.1-QU4',
        },

 	
);


$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU2}           = [ @::qu2_disks ];
$::pkgdefs{sp_disks}{QU4}           = [ @::qu4_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
		= ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.32*','XFree86-libs-4.1*','freetype-2.0*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','perl-libnet-1.07*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
.3.3'}
k 0PB  7u     rE  d@d@d@             rE      ./opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-ppc64.pm cs                             # @(#)33   1.16.1.4   src/csm/install/pkgdefs/Linux-RedHatEL-AS3-ppc64.pm.perl, setup, csm_rveg 5/13/04 10:13:20
#.2003 IBM_PROLOG_BEGIN_TAG 
#.2003 This is an automatically generated prolog. 
#.2003  
#.2003  
#.2003  
#.2003 Licensed Materials - Property of IBM 
#.2003  
#.2003 (C) COPYRIGHT International Business Machines Corp. 2003,2004 
#.2003 All Rights Reserved 
#.2003  
#.2003 US Government Users Restricted Rights - Use, duplication or 
#.2003 disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#.2003  
#.2003 IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatEL-AS 3 ppc 
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatELAS3ppc64;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-ppc64.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux AS 3 PPC";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";
$::pkgdefs{DISTRO_UPDATESDIR}  = "RedHat/Updates";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME} . " (Update 1)",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'ppc',
		key => '1065571970.028067',
		rpm  => 'RedHat/Updates/redhat-release-3AS*',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-ppc64',
	},
	{
	    num			=> '2',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'ppc',
		key => '1065571970.028067',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-ppc64',
	},
	{
	    num			=> '3',
	    name		=> $::pkgdefs{DISTRO_NAME},

	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'ppc',
		key => '1065571970.028067',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-ppc64',
	},
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME} . "(Update 1) Extras CD",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'ppc',
		key => '',
		rpm  => 'images/iprdd.img',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-extra',
	},
	{
	    num			=> '4',
	    name		=> $::pkgdefs{DISTRO_NAME} . "(Update 2)",
	    not_for_full_install => 'TRUE',

	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'ppc',
		rpm  => 'RedHat/RPMS/sg3_utils-1.06-2.ppc.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2-extra',
	}
);

@::qu2_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME} . " (Update 2)",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'ppc',
		key =>'1083779332.636875',
		rpm  => 'SRPMS/comps-3AS-0.20040505.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
	},
	{
	    num			=> '2',
	    name		=> $::pkgdefs{DISTRO_NAME} . " (Update 2)",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'ppc',
		key =>'1083779332.636875',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
	},
	{
	    num			=> '3',
	    name		=> $::pkgdefs{DISTRO_NAME} . " (Update 2)",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'ppc',
		key =>'1083779332.636875',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
	},
	{
	    num			=> '4',
	    name		=> $::pkgdefs{DISTRO_NAME} . " (Update 2)",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'ppc',
		key =>'1083779332.636875',
		rpm  => 'RedHat/RPMS/sg3_utils-1.06-2.ppc.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
	},

);

$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU1}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU2}       = [ @::qu2_disks ];

# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} =
  ['tftp-hpa', 'IBMJava2-JRE-ppc-1.4.1', 'conserver', 'fping', 'openCIMOM-0.7*'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};

# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = [];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}
	    = [];
$director_packages{'MgdNode'}{'1.3.1'}
	    = [];
$director_packages{'MgdNode'}{'1.3.2'}
	    = [];
$director_packages{'MgdNode'}{'1.3.3'}
	    = [];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};

# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# CSM binaries copied to /csminstall/csm directory
my $csm_bin_copy_csm;
$csm_bin_copy_csm{'1.2.0'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/usr/bin/tftp',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs'
                              ];
$csm_bin_copy_csm{'1.3.0'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/usr/bin/tftp',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs'
                              ];
$csm_bin_copy_csm{'1.3.1'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/setbootdisk',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/usr/bin/tftp',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs'
                              ];
$csm_bin_copy_csm{'1.3.2'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/setbootdisk',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs',
                              '/usr/sbin/rsct/cfg/ctsec.cfg',
                              '/usr/sbin/rsct/bin/runact-api',
                              '/opt/csm/csmbin/nodestatus.client'
                              ];
$csm_bin_copy_csm{'1.3.3'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/InstallKRB5Utils.pm',
                              '/opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/setbootdisk',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs',
                              '/usr/sbin/rsct/cfg/ctsec.cfg',
                              '/usr/sbin/rsct/bin/runact-api',
                              '/opt/csm/csmbin/nodestatus.client'
                              ];
$::pkgdefs{csm_bin_copy_csm} = $csm_bin_copy_csm{$::csm_version};

# CSM binaries copied to /tftpboot directory
my $csm_bin_copy_tftpboot;
$csm_bin_copy_tftpboot{'1.2.0'}=[];
$csm_bin_copy_tftpboot{'1.3.0'}=[];
$csm_bin_copy_tftpboot{'1.3.1'}=[];
$csm_bin_copy_tftpboot{'1.3.2'}=[];
$csm_bin_copy_tftpboot{'1.3.3'}=[];
$::pkgdefs{csm_bin_copy_tftpboot} = $csm_bin_copy_tftpboot{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-3*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.38*','XFree86-libs-4.3*','freetype-2.1*','compat-libstdc++-*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-*','perl-DB_File-*','sg3_utils-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

1;  # end
1.3.2'krG 0PB  7u     4  d@d@d@             4      ./opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-x86_64.pm s                             # @(#)56   1.11.1.4   src/csm/install/pkgdefs/Linux-RedHatEL-AS3-x86_64.pm.perl, setup, csm_rveg, rvegs001a 5/10/04 05:23:49
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatEL 2.9.5
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatELAS3;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatEL-AS3-x86_64.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux AS 3 x86_64";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => 'SRPMS/comps-3as-0.20031007.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-x86_64',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-x86_64',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-x86_64',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-x86_64',
        }
);

@::qu1_disks=
(
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU1",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => 'RedHat/Updates/redhat-release-3AS*',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        }
);

@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'x86_64',
		key  => '1083796124.084188', 
		rpm  => 'SRPMS/comps-3AS-0.20040505.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		key  => '1083796124.084188',
		arch => 'x86_64',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}. " QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		key  => '1083796124.084188',
		arch => 'x86_64',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}. "QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		key  => '1083796124.084188',
		arch => 'x86_64',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        }
);


$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU1}	= [ @::qu1_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];




# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
		= ['tftp-hpa','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
#   @{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['syslinux-*','perl-5*','nfs-utils-*',,'dhcp-3*','pdksh-*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.38*','XFree86-libs-4.3*','freetype-2.1*','compat-libstdc++-7*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-7*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

# This variable is used to define valid distribution supported by csm on this OS platform
my $valid_distros;
$valid_distros{'MgmtServer'}{'1.3.3'}=['RedHatEL-AS 3','RedHatEL-ES 3'];
$valid_distros{'MgdNode'}{'1.2.0'}=[];
$valid_distros{'MgdNode'}{'1.3.0'}=[];
$valid_distros{'MgdNode'}{'1.3.1'}=[];
$valid_distros{'MgdNode'}{'1.3.2'}=['RedHatEL-AS 3','RedHatEL-ES 3','RedHatEL-WS 3'];
$valid_distros{'MgdNode'}{'1.3.3'}=['RedHatEL-AS 3','RedHatEL-ES 3','RedHatEL-WS 3'];
$::pkgdefs{valid_distros} = $valid_distros{$::mgmt_type}{$::csm_version};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib64";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib64/ld-linux-x86-64.so.2','/lib64/libc.so.6','/lib64/libdl.so.2','/lib64/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################
1;  # end
ct.ck: 0PB  7u     3  d@d@d@             3      ./opt/csm/install/pkgdefs/Linux-RedHatEL-AS3.pm                              # @(#)58   1.11.1.3   src/csm/install/pkgdefs/Linux-RedHatEL-AS3.pm.perl, setup, csm_rveg, rvegs001a 5/10/04 05:25:56
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatEL 3
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatELAS3;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatEL-AS3.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux AS 3";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => 'SRPMS/comps-3as-0.20031007.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-i386',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-i386',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-i386',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-i386',
        }
);

@::qu1_disks=
(
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU1",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => 'RedHat/Updates/redhat-release-3AS*',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU1',
        }
);

@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1083794425.140447', 
		rpm  => 'SRPMS/comps-3AS-0.20040505.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}. " QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}. " QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}. " QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-AS3-QU2',
        }
);

$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU1}	= [ @::qu1_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
		= ['tftp-hpa','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
#   @{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['syslinux-*','perl-5*','nfs-utils-*',,'dhcp-3*','pdksh-*','rdist-6*','tcl-8.3*','XFree86-libs-4.3*','tk-8.3*','expect-5.38*','freetype-2.1*','compat-libstdc++-7*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-7*','syslinux-*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

# This variable is used to define valid distribution supported by csm on this OS platform
my $valid_distros;
$valid_distros{'MgmtServer'}{'1.3.3'}=['RedHatEL-ES 3','RedHatEL-AS 3'];
$valid_distros{'MgdNode'}{'1.2.0'}=[];
$valid_distros{'MgdNode'}{'1.3.0'}=[];
$valid_distros{'MgdNode'}{'1.3.1'}=[];
$valid_distros{'MgdNode'}{'1.3.2'}=['RedHatEL-AS 3','RedHatEL-ES 3','RedHatEL-WS 3'];
$valid_distros{'MgdNode'}{'1.3.3'}=['RedHatEL-AS 3','RedHatEL-ES 3','RedHatEL-WS 3'];
$::pkgdefs{valid_distros} = $valid_distros{$::mgmt_type}{$::csm_version};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
rsk 0PB  7u     +  b@b@b@             +      ./opt/csm/install/pkgdefs/Linux-RedHatEL-ES2.1.pm 4.pm s                             # @(#)70   1.16   src/csm/install/pkgdefs/Linux-RedHatES2.1.pm.perl, setup, csm_rsir, rsir0339a 9/10/03 17:37:00
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatES 2.1
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatES21;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatES2.1.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux ES release 2.1";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc1-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1046404993.105599',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-i386',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc2-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1046404993.105599',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-i386',
        }
);

# Service Pack disks defination
@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},' QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1054133220.861846',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}.' QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1054133220.861846',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-QU2',
        }
);

@::qu4_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1082164164.965491',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-QU4',
        },
	{
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1082164164.965491',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-QU4',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc3-i386',
		key	=> '1082164164.965491',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-QU4',
        },
        {
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc4-i386',
		key	=> '1082164164.965491',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-ES2.1-QU4',
        },

);



$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];
$::pkgdefs{sp_disks}{QU4}	= [ @::qu4_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
		= ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.32*','XFree86-libs-4.1*','freetype-2.0*','lsof-4.51*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','perl-libnet-1.07*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
 ['cskL 0PB  7u     5  d@d@d@             5      ./opt/csm/install/pkgdefs/Linux-RedHatEL-ES3.pm                              # @(#)59   1.10.1.4   src/csm/install/pkgdefs/Linux-RedHatEL-ES3.pm.perl, setup, csm_rveg, rvegs001a 5/10/04 05:27:09
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatEL 3
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatELES3;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatEL-ES3.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux ES 3";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => 'SRPMS/comps-3es-0.20031007.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-i386',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-i386',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^3$',
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-i386',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-i386',
        }
);

@::qu1_disks=
(
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU1",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => 'RedHat/Updates/redhat-release-3ES*',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU1',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU1',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.discinfo',
	    #diskid_searchstring => '^3$',
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU1',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU1',
        }
);


@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1083794425.140447', 
		rpm  => 'SRPMS/comps-3ES-0.20040505.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU2',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU2',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-ES3-QU2',
        }
);



$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU1}	= [ @::qu1_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
		= ['tftp-hpa','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
#   @{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['syslinux-*','perl-5*','nfs-utils-*',,'dhcp-3*','pdksh-*','rdist-6*','tcl-8.3*','expect-5.38*','XFree86-libs-data-4.3*','expat-*','XFree86-libs-4.3*','tk-8.3*','freetype-2.1*','compat-libstdc++-7*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-7*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

# This variable is used to define valid distribution supported by csm on this OS platform
my $valid_distros;
$valid_distros{'MgmtServer'}{'1.3.3'}=['RedHatEL-ES 3','RedHatEL-AS 3'];
$valid_distros{'MgdNode'}{'1.2.0'}=[];
$valid_distros{'MgdNode'}{'1.3.0'}=[];
$valid_distros{'MgdNode'}{'1.3.1'}=[];
$valid_distros{'MgdNode'}{'1.3.2'}=['RedHatEL-AS 3','RedHatEL-ES 3','RedHatEL-WS 3'];
$valid_distros{'MgdNode'}{'1.3.3'}=['RedHatEL-AS 3','RedHatEL-ES 3','RedHatEL-WS 3'];
$::pkgdefs{valid_distros} = $valid_distros{$::mgmt_type}{$::csm_version};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
t.core'k' 0PB  7u     +  b@b@b@             +      ./opt/csm/install/pkgdefs/Linux-RedHatEL-WS2.1.pm 4.pm s                             # @(#)62   1.11.1.4   src/csm/install/pkgdefs/Linux-RedHatEL-WS2.1.pm.perl, setup, csm_rveg 5/18/04 03:26:26
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatWS 2.1
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatWS21;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatWS2.1.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux WS release 2.1";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc1-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1046391612.976893',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-WS2.1-i386',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.disc2-i386',
	    #diskid_searchstring => '',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1046391612.976893',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-WS2.1-i386',
        }
);

# Service Pack disks defination
@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}. 'QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1054153058.519025',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-WS2.1-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}.' QU2',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1054153058.519025',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> '/RedHatEL-WS2.1-QU2',
        }
);

@::qu4_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}. 'QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc1-i386',
		key	=> '1082166166.676267',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'RedHatEL-WS2.1-QU4',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc2-i386',
		key	=> '1082166166.676267',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> '/RedHatEL-WS2.1-QU4',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc3-i386',
		key	=> '1082166166.676267',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> '/RedHatEL-WS2.1-QU4',
        },
        {
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}.' QU4',
	    diskid_searchargs	=> {
	    	file	=> '.disc4-i386',
		key	=> '1082166166.676267',
	    },
	    diskid_searchprog   => \&Linux::linux_diskid_match_prog,
	    diskid_target	=> '/RedHatEL-WS2.1-QU4',
        }
);



$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];
$::pkgdefs{sp_disks}{QU4}	= [ @::qu4_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
		= ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-*','rdist-6*','tcl-8.3*','tk-8.3*','expect-5.32*','XFree86-libs-4.1*','freetype-2.0*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','perl-libnet-1.07*','perl-DB_File-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
.3.3'kF 0PB  7u     .  d@d@d@             .      ./opt/csm/install/pkgdefs/Linux-RedHatEL-WS3-x86_64.pm s                             # @(#)57   1.13.1.4   src/csm/install/pkgdefs/Linux-RedHatEL-WS3-x86_64.pm.perl, setup, csm_rveg, rvegs001a 5/10/04 05:24:47
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatEL 3
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatELWS3;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatEL-WS3-x86_64.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux WS 3 x86_64";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => 'SRPMS/comps-3ws-0.20031007.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-x86_64',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-x86_64',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-x86_64',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-x86_64',
        }
);

@::qu1_disks=
(
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU1",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => 'RedHat/Updates/redhat-release-3WS*',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'x86_64',
		key  => '1065571611.853962',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        }

);

@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'x86_64',
		key  => '1083796124.084188', 
		rpm  => 'SRPMS/comps-3WS-0.20040505.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		key  => '1083796124.084188',
		arch => 'x86_64',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}. " QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		key  => '1083796124.084188',
		arch => 'x86_64',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}. "QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		key  => '1083796124.084188',
		arch => 'x86_64',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        }
);



$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU1}	= [ @::qu1_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];

$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];

$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Director Packages to Install
my $director_packages;
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];

$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];

$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];

$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];

$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];

$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-7*','perl-DB_File-*'];

$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

# This variable is used to define valid distribution supported by csm on this OS platform
my $valid_distros;
$valid_distros{'MgmtServer'}{'1.3.3'}=['RedHatEL-AS 3','RedHatEL-ES 3'];
$valid_distros{'MgdNode'}{'1.2.0'}=[];
$valid_distros{'MgdNode'}{'1.3.0'}=[];
$valid_distros{'MgdNode'}{'1.3.1'}=[];
$valid_distros{'MgdNode'}{'1.3.2'}=[];
$valid_distros{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{valid_distros} = $valid_distros{$::mgmt_type}{$::csm_version};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib64";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib64/ld-linux-x86-64.so.2','/lib64/libc.so.6','/lib64/libdl.so.2','/lib64/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
csm_vek 0PB  7u     .  d@d@d@             .      ./opt/csm/install/pkgdefs/Linux-RedHatEL-WS3.pm                              # @(#)60   1.9.1.3   src/csm/install/pkgdefs/Linux-RedHatEL-WS3.pm.perl, setup, csm_rveg, rvegs001a 5/10/04 05:27:55
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  RedHatEL 3
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package RedHatELWS3;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-RedHatEL-WS3.pm");


$::pkgdefs{DISTRO_NAME}        = "Red Hat Enterprise Linux WS 3";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "RedHat/RPMS";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key =>  '1065565780.808209',
		rpm  => 'SRPMS/comps-3ws-0.20031007.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-i386',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-i386',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-i386',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-i386',
        }
);

@::qu1_disks=
(
	{
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU1",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => 'RedHat/Updates/redhat-release-3WS*',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		arch => 'i386',
		key  => '1065565780.808209',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU1',
        }

);

@::qu2_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '1',
		arch => 'i386',
		key  => '1083794425.140447', 
		rpm  => 'SRPMS/comps-3WS-0.20040505.src.rpm',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME}." QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '2',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME}. "QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '3',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME}. "QU2",
	    diskid_searchargs	=> {
	    	file => '.discinfo',
		num  => '4',
		key  => '1083794425.140447',
		arch => 'i386',
		rpm  => '',
	    },
	    diskid_searchprog	=> \&Linux::rhel3_diskid_match_prog,
	    diskid_target		=> 'RedHatEL-WS3-QU2',
        }
);


$::pkgdefs{distro_disks}	= [ @::distro_disks ];
$::pkgdefs{sp_disks}{QU1}	= [ @::qu1_disks ];
$::pkgdefs{sp_disks}{QU2}	= [ @::qu2_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];

$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];

$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};


# Director Packages to Install
my $director_packages;
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];

$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];

$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];

$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];

$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];

$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','rdist-6*','compat-libstdc++-7*','perl-DB_File-*'];

$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

# This variable is used to define valid distribution supported by csm on this OS platform
my $valid_distros;
$valid_distros{'MgmtServer'}{'1.3.3'}=['RedHatEL-AS 3','RedHatEL-ES 3'];
$valid_distros{'MgdNode'}{'1.2.0'}=[];
$valid_distros{'MgdNode'}{'1.3.0'}=[];
$valid_distros{'MgdNode'}{'1.3.1'}=[];
$valid_distros{'MgdNode'}{'1.3.2'}=[];
$valid_distros{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{valid_distros} = $valid_distros{$::mgmt_type}{$::csm_version};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('usr/bin/grep','usr/sbin/ifconfig','usr/bin/sed','usr/bin/sleep','usr/bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libtermcap.so.2');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc",".profile","sbin","tmp","var");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
$::mgmtkL 0PB  7u     N  =q@=q@=q@             N      ./opt/csm/install/pkgdefs/Linux-SLES7.2.pm 3.pm                              # @(#)82   1.28   src/csm/install/pkgdefs/Linux-SLES7.2.pm.perl, setup, csm_rveg, rveg0414a 3/1/04 04:01:28
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SLES 7.2
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package SLES72;
do "/opt/csm/install/pkgdefs/Linux.pm";


#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-SLES7.2.pm");


$::pkgdefs{DISTRO_NAME}        = "SuSE SLES 7.2";
$::pkgdefs{DISTRO_DISKLIST}    = "1";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "full-names";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.S.u.S.E-disk-001.*',
	    #diskid_searchstring => 'SuSE-Linux-SLES-i386 Version 7',
            diskid_searchargs   => {
                file    => '.S.u.S.E-disk-001.*',
                key     => 'SuSE-Linux-SLES-i386 Version 7',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => 'SLES7.2-i386',	    
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];



# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver',
	       'rdist','expect','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} 
	    = ['rdist'];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} 
	    = ['rdist','perl-libnet-1.07','autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} 
	    = ['rdist','perl-libnet-1.07','autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} 
	    = ['rdist','perl-libnet-1.07','autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} 
	    = ['rdist','perl-libnet-1.07','autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['gppshare-*','perl-5*','nfs-utils-*','pdksh-*','dhcp-*','tcl-8*','tk-8*','xf86-*','freetype2-*','termcap-*','dosfstools-*'];
$os_prereqs{'MgdNode'}=['gppshare-*','perl-5*','nfs-utils-*','pdksh-*','dhcp-*','tcl-8*','tk-8*','xf86-*','freetype2-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

1;  # end
csk 0PB  7u     J  c@c@c@             J      ./opt/csm/install/pkgdefs/Linux-SLES8.1-ppc64.pm 64.pm s                             # @(#)50   1.34.1.2   src/csm/install/pkgdefs/Linux-SLES8.1-ppc64.pm.perl, setup, csm_rveg, rvegs001a 4/30/04 10:58:17
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SLES 8.1 ppc64
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package SLES81;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat(
                          'csmInstall.cat',
                          $::MSGMAPPATH,
                          'csminstall',
                          'V',
                          'IMsgLoading',
                          "/opt/csm/install/pkgdefs/Linux-SLES8.1.pm"
                          );

#%::pkgdefs = ();

$::pkgdefs{DISTRO_NAME}     = "SuSE SLES 8.1 PPC";
$::pkgdefs{DISTRO_DISKLIST} = "1 2 4";               # TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}   = "suse";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
                   {
                    num                 => '1',
                    name                => $::pkgdefs{DISTRO_NAME},
		    #diskid_filename     => 'media.1/products',
		    #diskid_searchstring => '/ SuSE-Linux-SLES-PPC 8',
	   	    diskid_searchargs	=> {
		    	file=>	'media.1/products',
		    	key =>	'/ SuSE-Linux-SLES-PPC 8',
	    	    },
	    	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    	    diskid_target	=> "sles8-ppc64",
                   },
                   {
                    num                  => '2',
                    name                 => $::pkgdefs{DISTRO_NAME},
		    #diskid_filename      => 'media.2/products',
		    #diskid_searchstring  => '/ SuSE-Linux-SLES-PPC 8',
                    not_for_full_install => 'TRUE',
	   	    diskid_searchargs	=> {
		    	file=>	'media.2/products',
		    	key =>	'/ SuSE-Linux-SLES-PPC 8',
	    	    },
	    	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    	    diskid_target	=> "sles8-ppc64",
                   },
                   {
                    num  => '1',
                    name => $::pkgdfs{$DISTRO_NAME} . ' Supplementary',
		    #diskid_filename      => 'media.1/products',
		    #diskid_searchstring  => '/ SuSE-Linux-SLES-PPC-SUPP 1',
                    not_for_full_install => 'TRUE',
	   	    diskid_searchargs	=> {
		    	file=>	'media.1/products',
		    	key =>	'/ SuSE-Linux-SLES-PPC-SUPP 1',
	    	    },
	    	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    	    diskid_target	=> "sles8-ppc64",
                   },
                   );
$::pkgdefs{distro_disks} = [@::distro_disks];

@::sp3_disks = ( 
	{
	    num			=> '1',
	    name		=> "SuSE SLES 8.1 SP3 PPC",
#	    diskid_filename     => '',
#	    diskid_searchstring => '',
	    diskid_searchargs	=> {
		    file=>	'media.1/products',
		    key =>	'/ SuSE-Linux-SLES-PPC 3',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> "sles8-sp3",
	},
);

@::sp3a_disks = ( 
	{
	    num			=> '1',
	    name		=> "SuSE SLES 8.1 SP3A PPC",
#	    diskid_filename     => '',
#	    diskid_searchstring => '',
	    diskid_searchargs	=> {
		    file=>	'media.1/products',
		    key =>	'/ SuSE-Linux-SLES-PPC 3a',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> "sles8-sp3a",
	},
);
$::pkgdefs{sp_disks}{SP3}		= [ @::sp3_disks ];
$::pkgdefs{sp_disks}{SP3A}		= [ @::sp3a_disks ];



# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} =
  ['tftp-hpa', 'IBMJava2-JRE-ppc-1.4.1', 'conserver', 'openCIMOM-0.7*'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}},'ITDAgent');

    #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
    #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
    #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
    #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
    #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};

# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'} = ['src', 'rsct.core.utils', 'rsct.core', 'rsct.basic', 'rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}    = ['src', 'rsct.core.utils', 'rsct.core', 'rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}    = ['src', 'rsct.core.utils', 'rsct.core', 'rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}    = ['src', 'rsct.core.utils', 'rsct.core', 'rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}    = ['src', 'rsct.core.utils', 'rsct.core', 'rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}    = ['src', 'rsct.core.utils', 'rsct.core', 'rsct.basic', 'rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};

# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'} =
  ['csm.core', 'csm.dsh', 'csm.server', 'csm.diagnostics', 'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'} = ['csm.core', 'csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'} =
  ['csm.core', 'csm.client', 'csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'} =
  ['csm.core', 'csm.client', 'csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'} =
  ['csm.core', 'csm.client', 'csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'} =
  ['csm.core', 'csm.client', 'csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent'];
$director_packages{'MgdNode'}{'1.2.0'}    = [];
$director_packages{'MgdNode'}{'1.3.0'}    = [];
$director_packages{'MgdNode'}{'1.3.1'}    = [];
$director_packages{'MgdNode'}{'1.3.2'}    = [];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent'];
$::pkgdefs{director_packages}             =
  $director_packages{$::mgmt_type}{$::csm_version};
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};

# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'} =
  ['src', 'rsct.core.utils', 'rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'} = ['src', 'rsct.core.utils', 'rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'} = ['src', 'rsct.core.utils', 'rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'} = ['src', 'rsct.core.utils', 'rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'} = ['src', 'rsct.core.utils', 'rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'} = ['src', 'rsct.core.utils', 'rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'} =
  ['csm.dsh', 'csm.server', 'csm.diagnostics', 'csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'} = ['csm.core', 'csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'} =
  ['csm.core', 'csm.diagnostics', 'csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'} =
  ['csm.core', 'csm.diagnostics', 'csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'} =
  ['csm.core', 'csm.diagnostics', 'csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'} =
  ['csm.core', 'csm.diagnostics', 'csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'} = ['/csminstall', '/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}    = [];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}    = [];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}    = [];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}    = [];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}    = [];
$::pkgdefs{csm_uninstall_dirs}             =
  $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'} = ['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}    = [];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}    = [];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}    = [];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}    = [];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}    = [];
$::pkgdefs{csm_nouninstall_pkgs}             =
  $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# CSM binaries copied to /csminstall/csm directory
my $csm_bin_copy_csm;
$csm_bin_copy_csm{'1.2.0'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/usr/bin/tftp',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs'
                              ];
$csm_bin_copy_csm{'1.3.0'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/usr/bin/tftp',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs'
                              ];
$csm_bin_copy_csm{'1.3.1'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/setbootdisk',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/usr/bin/tftp',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs'
                              ];
$csm_bin_copy_csm{'1.3.2'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/setbootdisk',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs',
                              '/opt/csm/csmbin/nodestatus.client'
                              ];
$csm_bin_copy_csm{'1.3.3'} = [
                              '/opt/csm/csmbin/updatenode.client',
                              '/opt/csm/csmbin/write_status',
                              '/opt/csm/msgmaps/csmInstall.csminstall.map',
                              '/opt/csm/pm/MessageUtils.pm',
                              '/opt/csm/pm/NodeUtils.pm',
                              '/opt/csm/pm/ArchiveUtils.pm',
                              '/opt/csm/pm/InstallUtils.pm',
                              '/opt/csm/pm/InstallKRB5Utils.pm',
                              '/opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map',
                              '/opt/csm/pm/NetworkUtils.pm',
                              '/opt/csm/pm/ServerUtils.pm',
                              '/opt/csm/pm/CSMDefs.pm',
                              '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                              '/opt/csm/csmbin/rmnode_client',
                              '/opt/csm/bin/setupconsole',
                              '/opt/csm/csmbin/makenode',
                              '/opt/csm/csmbin/setbootdisk',
                              '/opt/csm/csmbin/csmprereboot',
                              '/opt/csm/csmbin/csmfirstboot',
                              '/opt/csm/install/defs',
                              '/opt/csm/install/pkgdefs',
                              '/opt/csm/csmbin/nodestatus.client'
                              ];
$::pkgdefs{csm_bin_copy_csm} = $csm_bin_copy_csm{$::csm_version};

# CSM binaries copied to /tftpboot directory
my $csm_bin_copy_tftpboot;
$csm_bin_copy_tftpboot{'1.2.0'}   = [];
$csm_bin_copy_tftpboot{'1.3.0'}   = [];
$csm_bin_copy_tftpboot{'1.3.1'}   = [];
$csm_bin_copy_tftpboot{'1.3.2'}   = [];
$csm_bin_copy_tftpboot{'1.3.3'}   = [];
$::pkgdefs{csm_bin_copy_tftpboot} = $csm_bin_copy_tftpboot{$::csm_version};

# REMOVE THE USE OF THIS VARIABLE FROM installms and installnode
# Csm binaries copied to /csminstall/csm/<csmVersion> directory
# There are no longer any version specific tools to copy.  Everything
# is in /csminstall/csm.  The kickstart files are still in
# /csminstall/csm/<csmVersion>/<RedHatVersion>, so don't remove the
# <csmVersion> directory.
#my $csm_bin_copy_csmver;
#$csm_bin_copy_csmver{'1.2.0'}=[];
#$csm_bin_copy_csmver{'1.3.0'}=[];
#$csm_bin_copy_csmver{'1.3.1'}=[];
#$csm_bin_copy_csmver{'1.3.2'}=[];
#$csm_bin_copy_csmver{'1.3.3'}=[];
#$::pkgdefs{csm_bin_copy_csmver} = $csm_bin_copy_csmver{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'} = [
                             'perl-5*',      'nfs-utils-*',
                             'pdksh-*',      'dhcp-base*',
                             'dhcp-server*', 'rdist-6*',
                             'tcl-8*',       'tk-8*',
                             'expect-5*',    'xf86-*',
                             'freetype2-*',  'rsync-*',
                             'rsh-server-*', 'termcap-*',
                             'perl-XML-RegExp-*'
                             ];
$os_prereqs{'MgdNode'} = [
                          'perl-5*',      'nfs-utils-*',
                          'pdksh-*',      'dhcp-base*',
                          'dhcp-server*', 'rdist-6*',
                          'tcl-8*',       'tk-8*',
                          'expect-5*',    'xf86-*',
                          'freetype2-*',  'rsync-*',
                          'rsh-server-*'
                          ];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

# CSM Log files ( used while uninstalling)
my $logfiles;
$logfiles{'MgmtServer'} = [
                           '/var/log/csm/csmsetupsis.log*',
                           '/var/log/csm/installnode.log*',
                           '/var/log/csm/updatenode.log*',
                           '/var/log/csm/installms.log*'
                           ];
$logfiles{'MgdNode'} = ['/var/log/csm/install.log*', '/var/opt/csm/cfmlocal*'];
$::pkgdefs{logfiles} = $logfiles{$::mgmt_type};

%::rpm_pkg_flag = ();
$::rpm_pkg_flag{openCIMOM} = " --ignoreos";

#default kernel path name based on SUSE_TOP
$::kernel_path_name = "sles8-ppc64/suse/ppc/kernel-ppc64-2.4.19-108.ppc.rpm";
1;    # end
',
  k3 0PB  7u     '  d@d@d@             '      ./opt/csm/install/pkgdefs/Linux-SLES8.1-x86_64.pm 4.pm s                             # @(#)23   1.14.1.1   src/csm/install/pkgdefs/Linux-SLES8.1-x86_64.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:45:47
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SLES 8.1 x86_64
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package SLES81;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-SLES8.1-x86_64.pm");


$::pkgdefs{DISTRO_NAME}        = "SuSE SLES 8.1 x86_64";
$::pkgdefs{DISTRO_DISKLIST}    = "1 4";		# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "suse";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.1/products',
	    #diskid_searchstring => '/ SuSE-Linux-SLES-x86_64 8',
	    diskid_searchargs	=> {
		    file	=> 'media.1/products',
		    key		=> '/ SuSE-Linux-SLES-x86_64 8',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'sles8-x86_64',
	},
	{
	    num			=> '1',
	    name		=> "UnitedLinux 1.0 x86_64",
	    #diskid_filename     => 'media.1/products',
	    #diskid_searchstring => '/ UnitedLinux-x86-64 1.0',
	    diskid_searchargs	=> {
		    file	=> 'media.1/products',
		    key		=> '/ UnitedLinux-x86-64 1.0',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'unitedlinux-x86_64',
	},
	{
	    num			=> '2',
	    name		=> "UnitedLinux 1.0 x86_64",
	    #diskid_filename     => 'media.2/products',
	    #diskid_searchstring => '/ UnitedLinux-x86-64 1.0',
	    diskid_searchargs	=> {
		    file	=> 'media.2/products',
		    key		=> '/ UnitedLinux-x86-64 1.0',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'unitedlinux-x86_64',
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];

@::sp3_disks = ( 
	{
	    num			=> '1',
            name                => "UnitedLinux 1.0 x86_64 SP3",
	    #diskid_filename     => 'media.1/products',
	    #diskid_searchstring => '/ UnitedLinux-x86-64 3',
	    diskid_searchargs	=> {
		    file	=> 'media.1/products',
		    key		=> '/ UnitedLinux-x86-64 3',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> 'unitedlinux-sp3',
	},
);
$::pkgdefs{sp_disks}{SP3}		= [ @::sp3_disks ];

# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','perl-XML-RegExp','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');

   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};


# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-141*','tcl-8*','tk-8*','expect-5.34-223*','xf86-*','freetype2-*','termcap-*','expat-*','perl-XML-Parser-*','perl-XML-DOM-*','perl-HTML-Tagset-*','perl-HTML-Parser-*','perl-URI-*','perl-libwww-perl-*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-141*','tcl-8*','tk-8*','expect-5.34-223*','xf86-*','freetype2-*','rsh-server-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};
############ Added for noneth0 support ####################################
@::getmacs_Exec=('bin/grep','sbin/ifconfig','bin/sed','bin/sleep','bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib64";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib64/ld-linux-x86-64.so.2','/lib64/libc.so.6','/lib64/libdl.so.2','/lib64/libreadline.so.4','/lib64/libhistory.so.4','/lib64/libncurses.so.5');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc","linuxrc.config","kbd","tmp","var","root","mounts","mnt","info");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
m.direk 0PB  7u     .'  c@c@c@             .'      ./opt/csm/install/pkgdefs/Linux-SLES8.1.pm _64.p                             # @(#)83   1.40.1.1   src/csm/install/pkgdefs/Linux-SLES8.1.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:44:40
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SLES 8.1
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, etc.

package SLES81;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-SLES8.1.pm");


$::pkgdefs{DISTRO_NAME}        = "SuSE SLES 8.1";
$::pkgdefs{DISTRO_DISKLIST}    = "1 4";		# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "suse";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
@::distro_disks = ( 
	{
	    num			=> '1',
	    name		=> $::pkgdefs{DISTRO_NAME},
#	    diskid_filename     => 'media.1/products',
#	    diskid_searchstring => '/ SuSE-Linux-SLES-i386 8',
	    diskid_searchargs	=> {
		    file=>	'media.1/products',
		    key =>	'/ SuSE-Linux-SLES-i386 8',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> "sles8-i386",
	},
	{
	    num			=> '1',
	    name		=> "UnitedLinux 1.0",
#	    diskid_filename     => 'media.1/products',
#	    diskid_searchstring => '/ UnitedLinux-i386 1.0',
	    diskid_searchargs	=> {
		    file=>	'media.1/products',
		    key =>	'/ UnitedLinux-i386 1.0',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> "unitedlinux-i386",
	},
	{
	    num			=> '2',
	    name		=> "UnitedLinux 1.0",
#	    diskid_filename     => 'media.2/products',
#	    diskid_searchstring => '/ UnitedLinux-i386 1.0',
	    diskid_searchargs	=> {
		    file=>	'media.2/products',
		    key =>	'/ UnitedLinux-i386 1.0',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> "unitedlinux-i386",
	}
);
$::pkgdefs{distro_disks}	= [ @::distro_disks ];

# Service Pack Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM

@::sp3_disks = (
	{
	    num			=> '1',
	    name		=> "SuSE SLES 8.1 SP3",
#	    diskid_filename     => '',
#	    diskid_searchstring => '',
	    diskid_searchargs	=> {
		    file=>	'media.1/products',
		    key =>	'/ UnitedLinux-i386 3',
	    },
	    diskid_searchprog	=> \&Linux::linux_diskid_match_prog,
	    diskid_target	=> "unitedlinux-sp3",
	},
);

$::pkgdefs{sp_disks}{SP3}	= [ @::sp3_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','perl-XML-RegExp','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate','syslinux'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');

   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};


# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-543*','tcl-8*','tk-8*','expect-5.34-192*','xf86-*','freetype2-*','termcap-*','expat-*','perl-XML-Parser-*','perl-XML-DOM-*','perl-HTML-Tagset-*','perl-HTML-Parser-*','perl-URI-*','perl-libwww-perl-*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-543*','tcl-8*','tk-8*','expect-5.34-192*','xf86-*','freetype2-*','rsh-server-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('bin/grep','sbin/ifconfig','bin/sed','bin/sleep','bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libreadline.so.4','/lib/libhistory.so.4','/lib/libncurses.so.5');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc","linuxrc.config","kbd","tmp","var","root","mounts","mnt","info");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
.dk 0PB  7u     &  d@d@d@             &      ./opt/csm/install/pkgdefs/Linux-SuSE8.0.pm _64.p                             # @(#)85   1.32.1.1   src/csm/install/pkgdefs/Linux-SuSE8.0.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:44:04
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SuSE 8.0
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package SuSE80;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-SuSE8.0.pm");


$::pkgdefs{DISTRO_NAME}        = "SuSE Linux 8.0";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "suse";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = (
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.S.u.S.E-disk-001.*',
	    #diskid_searchstring => 'SuSE-Linux-.*-i386 Version 8.0',
            diskid_searchargs   => {
                file    => '.S.u.S.E-disk-001.*',
                key     => 'SuSE-Linux-.*-i386 Version 8.0',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.S.u.S.E-disk-002.*',
	    #diskid_searchstring => 'SuSE-Linux-.*-i386 Version 8.0',
            diskid_searchargs   => {
                file    => '.S.u.S.E-disk-002.*',
                key     => 'SuSE-Linux-.*-i386 Version 8.0',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.S.u.S.E-disk-003.*',
	    #diskid_searchstring => 'SuSE-Linux-.*-i386 Version 8.0',
            diskid_searchargs   => {
                file    => '.S.u.S.E-disk-003.*',
                key     => 'SuSE-Linux-.*-i386 Version 8.0',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => '.S.u.S.E-disk-004.*',
	    #diskid_searchstring => 'SuSE-Linux-.*-i386 Version 8.0',
            diskid_searchargs   => {
                file    => '.S.u.S.E-disk-004.*',
                key     => 'SuSE-Linux-.*-i386 Version 8.0',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        }
);
$::pkgdefs{distro_disks}        = [ @::distro_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   @{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}=(@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}},'ITDAgent','DirAgent','RAIDLxAg','MPAAgent');

   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['gppshare-*','perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-429*','tcl-8*','tk-8*','expect-5.34-63*','xf86-*','freetype2-*'];
$os_prereqs{'MgdNode'}=['gppshare-*','perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-429*','tcl-8*','tk-8*','expect-5.34-63*','xf86-*','freetype2-*','rsh-server-*','perl-libnet-1.09*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

1;  # end
k0$ 0PB  7u     d(  d@d@d@             d(      ./opt/csm/install/pkgdefs/Linux-SuSE8.1.pm _64.p                             # @(#)86   1.35.1.1   src/csm/install/pkgdefs/Linux-SuSE8.1.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:44:28
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SuSE 8.1
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package SuSE81;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-SuSE8.1.pm");


$::pkgdefs{DISTRO_NAME}        = "SuSE Linux 8.1";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "suse";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.1/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.1',
            diskid_searchargs   => {
                file    => 'media.1/products',
                key     => '/ SuSE-Linux-.*-i386 8.1',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.2/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.1',
            diskid_searchargs   => {
                file    => 'media.2/products',
                key     => '/ SuSE-Linux-.*-i386 8.1',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.3/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.1',
            diskid_searchargs   => {
                file    => 'media.3/products',
                key     => '/ SuSE-Linux-.*-i386 8.1',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.4/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.1',
            diskid_searchargs   => {
                file    => 'media.4/products',
                key     => '/ SuSE-Linux-.*-i386 8.1',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
);
$::pkgdefs{distro_disks}        = [ @::distro_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-524*','tcl-8*','tk-8*','expect-5.34-178*','xf86-*','freetype2-*','termcap-*','expat-*','perl-XML-Parser-*','perl-XML-DOM-*','perl-XML-RegExp-*','perl-HTML-Tagset-*','perl-HTML-Parser-*','perl-URI-*','perl-libwww-perl-*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-524*','tcl-8*','tk-8*','expect-5.34-178*','xf86-*','freetype2-*','rsh-server-*','telnet-server-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

############ Added for noneth0 support ####################################
@::getmacs_Exec=('bin/grep','sbin/ifconfig','bin/sed','bin/sleep','bin/bash');
$::pkgdefs{getmacs_Exec}=[ @::getmacs_Exec ];
$::getmacs_Lib="/lib";
$::pkgdefs{getmacs_Lib}=$::getmacs_Lib;
@::getmacs_ReqLibs=('/lib/ld-linux.so.2','/lib/libc.so.6','/lib/libdl.so.2','/lib/libreadline.so.4','/lib/libhistory.so.4','/lib/libncurses.so.5');
$::pkgdefs{getmacs_ReqLibs}=[ @::getmacs_ReqLibs ];
@::getmacs_DirStructure=("bin","etc","linuxrc","modules","proc","linuxrc.config","kbd","tmp","var","root","mounts","mnt","info");
$::pkgdefs{getmacs_DirStructure}=[ @::getmacs_DirStructure ];
############ Added end ####################################################

1;  # end
'];
k~ 0PB  7u     %  e@e@e@             %      ./opt/csm/install/pkgdefs/Linux-SuSE8.2.pm _64.p                             # @(#)25   1.13.1.1   src/csm/install/pkgdefs/Linux-SuSE8.2.pm.perl, setup, csm_rveg, rvegs001a 4/27/04 03:44:52
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#  Package Definition File:  SuSE 8.2
#
# The following variables must be set before including this file:
#  $::mgmt_type   = MgmtServer | MgdNode
#  $::csm_version = 1.2.0, 1.3.0, etc.

package SuSE82;
do "/opt/csm/install/pkgdefs/Linux.pm";

#  Load base Linux definitions:
#require "/opt/csm/install/pkgdefs/linux";

NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','V', 'IMsgLoading', "/opt/csm/install/pkgdefs/Linux-SuSE8.2.pm");


$::pkgdefs{DISTRO_NAME}        = "SuSE Linux 8.2";
$::pkgdefs{DISTRO_DISKLIST}    = "1 2 3 4";	# TO BE REMOVED
$::pkgdefs{DISTRO_RPMDIR}      = "suse";

# Distribution Disk descriptions used when prompting for the CD-ROMs
# On stanza per CDROM:
#   num                 = the number on the CD-ROM's label
#   name                = the text string describing the CD-ROM
#   diskid_filename     = the filename to search for to identify the disk
#                           (use shell wildcards if needed)
#   diskid_searchstring = the string to search for in diskid_filename
#                           (use perl regular expressions if needed)
@::distro_disks = ( 
        {
            num                 => '1',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.1/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.2',
            diskid_searchargs   => {
                file    => 'media.1/products',
                key     => '/ SuSE-Linux-.*-i386 8.2',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '2',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.2/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.2',
            diskid_searchargs   => {
                file    => 'media.2/products',
                key     => '/ SuSE-Linux-.*-i386 8.2',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
        {
            num                 => '3',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.3/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.2',
            diskid_searchargs   => {
                file    => 'media.3/products',
                key     => '/ SuSE-Linux-.*-i386 8.2',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },
	{
            num                 => '4',
            name                => $::pkgdefs{DISTRO_NAME},
	    #diskid_filename     => 'media.4/products',
	    #diskid_searchstring => '/ SuSE-Linux-.*-i386 8.2',
            diskid_searchargs   => {
                file    => 'media.4/products',
                key     => '/ SuSE-Linux-.*-i386 8.2',
            },
            diskid_searchprog   => \&Linux::linux_diskid_match_prog,
            diskid_target       => '/',	    
        },

);
$::pkgdefs{distro_disks}        = [ @::distro_disks ];


# Open Source Prereqs to Install
my $opensrc_prereqs;
$opensrc_prereqs{'MgmtServer'}{'1.3.3'} 
	    = ['tftp-hpa','syslinux','IBMJava2-JRE-1.4.1','conserver','fping'];
$opensrc_prereqs{'MgdNode'}{'1.2.0'} = [];
$opensrc_prereqs{'MgdNode'}{'1.3.0'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.1'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.2'} = ['autoupdate'];
$opensrc_prereqs{'MgdNode'}{'1.3.3'} = ['autoupdate'];

if ($::ITDAGENT eq "true")
{
   #push (@{$opensrc_prereqs{'MgmtServer'}{'1.3.3'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.0'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.1'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.2'}}, 'ITDAgent');
   #push (@{$opensrc_prereqs{'MgdNode'}{'1.3.3'}}, 'ITDAgent');
}

$::pkgdefs{opensrc_prereqs} = $opensrc_prereqs{$::mgmt_type}{$::csm_version};


# RSCT Packages to Install
my $rsct_packages;
$rsct_packages{'MgmtServer'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$rsct_packages{'MgdNode'}{'1.2.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.0'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.1'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.2'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic'];
$rsct_packages{'MgdNode'}{'1.3.3'}
	    = ['src','rsct.core.utils','rsct.core','rsct.basic','rsct.core.cimrm'];
$::pkgdefs{rsct_packages} = $rsct_packages{$::mgmt_type}{$::csm_version};


# CSM Packages to Install
my $csm_packages;
$csm_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.core','csm.dsh','csm.server','csm.diagnostics',
	       'csm.gui.dcem'];
$csm_packages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_packages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$csm_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.client','csm.diagnostics'];
$::pkgdefs{csm_packages} = $csm_packages{$::mgmt_type}{$::csm_version};

# Director Packages to Install
my $director_packages;
$director_packages{'MgmtServer'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.2.0'}=[];
$director_packages{'MgdNode'}{'1.3.0'}=[];
$director_packages{'MgdNode'}{'1.3.1'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.2'}
	    = ['csm.director.agent','csm.director.server'];
$director_packages{'MgdNode'}{'1.3.3'}
	    = ['csm.director.agent','csm.director.server'];
$::pkgdefs{director_packages} = $director_packages{$::mgmt_type}{$::csm_version};


# Packages to uninstall
my $rsct_unpackages;
$rsct_unpackages{'MgmtServer'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$rsct_unpackages{'MgdNode'}{'1.2.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.0'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.1'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.2'}=['src','rsct.core.utils','rsct.core'];
$rsct_unpackages{'MgdNode'}{'1.3.3'}=['src','rsct.core.utils','rsct.core','rsct.core.cimrm'];
$::pkgdefs{rsct_unpackages} = $rsct_unpackages{$::mgmt_type}{$::csm_version};

my $csm_unpackages;
$csm_unpackages{'MgmtServer'}{'1.3.3'}
	    = ['csm.dsh','csm.server','csm.diagnostics','csm.gui.dcem'];
$csm_unpackages{'MgdNode'}{'1.2.0'}
	    = ['csm.core','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.0'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.1'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.2'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$csm_unpackages{'MgdNode'}{'1.3.3'}
	    = ['csm.core','csm.diagnostics','csm.client'];
$::pkgdefs{csm_unpackages} = $csm_unpackages{$::mgmt_type}{$::csm_version};

# Directories to uninstall from the management server
# This variable used to be named csmUnistallList_dir
my $csm_uninstall_dirs;
$csm_uninstall_dirs{'MgmtServer'}{'1.3.3'}=['/csminstall','/cfmroot'];
$csm_uninstall_dirs{'MgdNode'}{'1.2.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.0'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.1'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.2'}=[];
$csm_uninstall_dirs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_uninstall_dirs} = $csm_uninstall_dirs{$::mgmt_type}{$::csm_version};

# Packages to NOT uninstall
# This variable used to be named csmUnistallList_pack
my $csm_nouninstall_pkgs;
$csm_nouninstall_pkgs{'MgmtServer'}{'1.3.3'}=['csm.core'];
$csm_nouninstall_pkgs{'MgdNode'}{'1.2.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.0'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.1'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.2'}=[];
$csm_nouninstall_pkgs{'MgdNode'}{'1.3.3'}=[];
$::pkgdefs{csm_nouninstall_pkgs} = $csm_nouninstall_pkgs{$::mgmt_type}{$::csm_version};

# Operating System pre-requisites
# This variable used to be named Linux_os_prereqs
# NOTE:  These variable names have changed slightly.  Now, both are merged
#        into os_prereqs, and there is a $::mgmt_type argument.  The
#        Linux_client_os_prereqs array is gone.
#        Changes required in installms, copycsmpkgs and makenode
my $os_prereqs;
$os_prereqs{'MgmtServer'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-591*','tcl-8*','tk-8*','expect-5.38-28*','xf86-*','freetype2-*','termcap-*','expat-*','perl-XML-Parser-*','perl-XML-DOM-*','perl-XML-RegExp-*','perl-HTML-Tagset-*','perl-HTML-Parser-*','perl-URI-*','perl-libwww-perl-*'];
$os_prereqs{'MgdNode'}=['perl-5*','nfs-utils-*','pdksh-*','dhcp-base-*','dhcp-server-*','rdist-6.1.5-591*','tcl-8*','tk-8*','expect-5.38-28*','xf86-*','freetype2-*','rsh-server-*','telnet-server-*'];
$::pkgdefs{os_prereqs} = $os_prereqs{$::mgmt_type};

1;  # end
ekv 0PB  7u     %  c@c@c@             %      ./opt/csm/install/pkgdefs/Linux.pm E8.2.                             # @(#)60   1.14   src/csm/install/pkgdefs/Linux.pm.perl, setup, csm_rveg, rvegs001a 4/19/04 05:00:36
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
package Linux;
NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall', 'V',
                          'IMsgLoading', "/opt/csm/install/pkgdefs/Linux.pm");

%::pkgdefs = ();

# CSM binaries copied to /csminstall/csm directory
my $csm_bin_copy_csm;
$csm_bin_copy_csm = [
                     '/opt/csm/csmbin/updatenode.client',
                     '/opt/csm/csmbin/nodestatus.client',
                     '/opt/csm/csmbin/write_status',
                     '/opt/csm/msgmaps/csmInstall.csminstall.map',
                     '/opt/csm/pm/MessageUtils.pm',
                     '/opt/csm/pm/NodeUtils.pm',
                     '/opt/csm/pm/ArchiveUtils.pm',
                     '/opt/csm/pm/InstallUtils.pm',
                     '/opt/csm/pm/InstallKRB5Utils.pm',
                     '/opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map',
                     '/opt/csm/pm/NetworkUtils.pm',
                     '/opt/csm/pm/ServerUtils.pm',
                     '/opt/csm/pm/CSMDefs.pm',
                     '/opt/csm/msgmaps/nodecmds.NodeUtils.map',
                     '/opt/csm/csmbin/rmnode_client',
                     '/opt/csm/bin/setupconsole',
                     '/opt/csm/csmbin/makenode',
                     '/opt/csm/csmbin/csmprereboot',
                     '/opt/csm/csmbin/csmfirstboot',
                     '/opt/csm/install/defs',
                     '/opt/csm/install/pkgdefs'
                     ];
$::pkgdefs{csm_bin_copy_csm} = $csm_bin_copy_csm;

# CSM binaries copied to /tftpboot directory
my $csm_bin_copy_tftpboot;
$csm_bin_copy_tftpboot            = ['/usr/lib/syslinux/pxelinux.0'];
$::pkgdefs{csm_bin_copy_tftpboot} = $csm_bin_copy_tftpboot;

# Default TFTP Server RPM Name
my $default_tftp_server_pkg_name;
$default_tftp_server_pkg_name            = ['tftp-hpa-0.34-1'];
$::pkgdefs{default_tftp_server_pkg_name} = $default_tftp_server_pkg_name;

# CSM Log files ( used while uninstalling)
my $logfiles;
$logfiles{'MgmtServer'} = [
                           '/var/log/csm/csmsetupks.log*',
                           '/var/log/csm/installnode.log*',
                           '/var/log/csm/updatenode.log*',
                           '/var/log/csm/installms.log*'
                           ];
$logfiles{'MgdNode'} = ['/var/log/csm/install.log*', '/var/opt/csm/cfmlocal*'];
$::pkgdefs{logfiles} = $logfiles{$::mgmt_type};

# default sub routine for matching linux distribution CD
sub linux_diskid_match_prog{
	my ($base_dir,$ref) = @_;
	my ($key,$file,$orig_dir);

	$file = $ref->{file};
	$key  = $ref->{key};

	if(! -e "$base_dir/$file"){return 0;}

	
	NodeUtils->runcmd("$::GREP \"$key\" $base_dir/$file",-1);
	if($::RUNCMD_RC) {return 0;}
	
	return 1;
}

sub rhel3_diskid_match_prog{
	my ($base_dir,$ref)=@_;
	my ($orig_dir,$cmd,$file,$num,$rpm,$arch);
	
	$file=$ref->{file};
	$key =$ref->{key};
	$num = $ref->{num};
	$arch = $ref->{arch};
	$rpm = $ref->{rpm};

	if(! -e "$base_dir/$file") {return 0;}

	NodeUtils->runcmd("$::GREP \"$arch\" $base_dir/$file",-1);
	if($::RUNCMD_RC) {return 0;}
	
	NodeUtils->runcmd("$::GREP \"$key\" $base_dir/$file",-1);
	if($::RUNCMD_RC) {return 0;}
	
	$cmd = "$::HEAD -n 4 $base_dir/$file|$::TAIL -n 1|$::GREP \"$num\"";
	NodeUtils->runcmd($cmd,-1);
	if($::RUNCMD_RC) {return 0;}
	if($rpm ne ""){
		NodeUtils->runcmd("$::LS $base_dir/$rpm",-1);
		if($::RUNCMD_RC) {return 0;}
	}

	return 1;
}

1;    # end

sm_k 0PB$  7u     Ŵ  ]A]A]A             Ŵ      ./opt/csm/lib/libcsm_clog.a nux.                   $          <aiaff>
44332       44452       96          96          0                                       44137       44332       0           1096669905  30007       1           755         5   shr.o `
 A]     H0   9  '|             &         RE                      .text             9  @  o    `      .data             '|  ;0  }r     X     @.bss      '|  '|                      .loader             b                                                                                   a|  a  ;   !`  `  `  !`  `{  aG   @ D88T8X8;aj   8`	  H 3%A { H|@A  c  H 3-A `~  ; 8a 8 c  H 35A 8 H8a PH 3MA a P T< 8B@|gp`  H 1|08|1|p9  || 2|(8` | 9 ` h la p xa  (8 a   48` a     Xa   8  cc  H m,  A 8` 	8!a}H cc  H !,  A x8`cc  H 8(  a@ L,  , A PA <cc  H 	88h8H 1A 8` 8!a}H dcc  H рaH D8 X9t{ 8 D8 @   ; [  a 8 <H 2A `~  cc  H ,  A X88p8c  H 15A cc  8HH 8x888IH ya @,  A H 1ɀA 8` H  a @,  @ D8X88H 0ـA 8888QH )8` 8!a}H  h  ,  A @ 8 88H 0A a @H 1EA 8` 8!a}H   H 1%A 8`  8!a}N         A       L _logINFO_MSG  |;    } &  `|  ~  !|8  a HL @ D|	8a I|8c  B |8l8$88~LH /A 8x8a H8 LH 0A c  8  H ,  A h8!`}8` 	N  | 88 D8 @8 HH 0aA |fyN   @Pa @  ,   @88~8H /A a @ ,  @ 88~8H .A a @H /A c  H 	9,  A @88~ 8H .ŀA c  H 
8` dh8!`|} N  c  H u,  A @8 8~8H .yA c  H 
8` dh8!`|} N  c  H 
y8`  H ( @ 88~8H .%A 8| XH /YA  @8| 8  H /`    $8| XH /A a @H .A c  H ,  A8D8~8H -A c  H 	8` dh8!`|} N  8,8~ 8H -A 8| XH .A 8  8| X $H /!A a @,  A H .A 8~H /)A `f  88`8 H c  H 	Y8` H <` 8 |  @@ |88~(8H ,A 8088~8H M8| XH .A 8  8| X $H .A c  8H %a @,  A H -qA c  H 8` 
H 48c 
| @@ 8
8~88H ,yA 8| XH -A 8  8| X $H .A  488` 8   8 8 H .AA c  8H 8@88~8H ya @,  A H ,ɀA c  H )8` 	H  88~H8H +݀A a @,  A  888~PH +A 8| XH ,A 8  8| X $H -UA A c  8H a @,  A H ,=A c  H 8` dh8!`|} N         C        _setAuditLogHandle  |;  `}   !  @88h88~H *A c  H q, , / / `f  A\A 8A |A$88~8H *A 8!໡}8` N  88~8H *A 8} XH +A  (8} XH ,!A 8!໡}8`  N  8d8~8H *9A  49  	!(8     $8   8` 8 (& , ܐ ؐ a  a  08 9  P`a 0;a@HTXahpax!a8h888 9 H9>9^D xaa ha 9~09  ` p     ! 8P8a ؓ  XA  ȑa Б Ha P} 8 `8	,8 @8 9   H +!A |fy@ a @  ,  @ 8} XH *	A  (8} XH *uA 8`  8!ແ}H  88~8H (A 8!໡}8` N  88~8H (aA 8!໡}8` N  A H88~8H (1A c  8%H 888~d8&H ua @,  A <H  0`g    88| 8~H 'A a @,  A H (A 8` 8!ແ}N         A       p $_setOrCreateAuditLogTemplateInstance  |  `~  8  8   ! @8А D8a H8  H (-A 8
|8H8`8H '%A 88h88 HH 'A ~ 8	8 D8 @8 HH (	A ||ya @88,  c  @ X  /   A ; @ 8  ,  , A  ; A 8pH &A ; a @H 'QA c  H  8xH &uA c  8H 88
8D8H ; a @,  H  D8A HA 88H &-A  @8X88 H &A ; a @,  A H &A c  h8!`}N  K       A        _AuditLogTemplateExists     |;  8  8  80888x`}  !@99?9@ 8` 9H9 ;  @ H Xa  d   L P ` h p! xA |a   8
L8(8@8H %A } 8 H888 @8 9   H 'A  @||yc  8?@   ,  @ p8} XH %A  @8} 8 8 H &%`    $8} XH &MA a @H %MA 88H8H $qA 8`   8! }H  TA H 8P8
d8$8AH  @8D8X8 c  H $A 8`  8! }N         A        _createAuditLogInstance   |  8`~   !888H #A ~ 88,  A tH %A ,  8~ X8 88@ 8H $A 8   8~ X H %A 8`   H8! @}H  @8H c  8H 
8` H  8(H #A 8`   H8! @}N         A         _stopRMCSession   |"  a  } &`  `  `  ,    !8c X8889   A ,8i H "A  ha L8`  8! `}N  H #A .    ;  ;  8`  8  @ 08 8 H $A -  , , 8~ 888H  @ @ Da H8a @8 8 8 H $uA -  , , 8~ 888A$A 8d@ $H !A ; , @ 8`  8  Kh8 XH #YA 8 X@ H88x8~8cg  9   H !uA 8`   d h8! `|} } aN  H "A  8 XH "A c  8H 8~H #A `f  88`8 H 888~8cg  9  H  A 8` H  8~ H  ـA K d h8! `|} } aN  8 XH "eA K       C       0 _startRMCSession  8(  , 8`  L  M  8` N         @            _is_invalid_msg_type     <|,  ( ! H8a	  88 @ $8h H A 8`  H8! @}N  8l8`  A $8i H ɀA 8`  H8! @}N  8! @N         A          _is_invalid_env   |b  8!8h88c ؐ HH ]A b HH  A  Lb H  ,  8@   H  A  H8! @}N         A      h _decEnvCounterb  |8!8X88c А HH ՀA b HH  	A  Lb H  8   H  iA  H8! @}N         A      ` _incEnvCounter|  8 !888 H QA  L Pb H    ,  ,  LFA PH eA     8<8 ,  ,  8LEA H A H q8     b HH A  X8! P}N         A      _finiCLOGLibrary  |b H P !  ,   @ `H A   ,   @ ,H Ab  8  88c H QA 8    b HH A  H8! @}N   <8! @N         A      _initCLOGLibrary  |8  !8 D8    @ Dc 8 @8 H mA |gya @  8,  c  8h8DA @8 H A 8 8|88:H a @,  A H 1A 8` H  88c  @ <8~ H EA 8 88~8BH 8`  X8! P}N    88,   @ $H ŀA 8`   X8! P}N   8h H ՀA a @H A 8`  X8! P}N         A       H _HandlesAreValid  |b  !8c  HH AA  H8! @}N         A      , _unregister_with_ct_trace |   \ ! `8 8 pH A ,  8 x88
8@QM{8
488 8H рA 8`   H8! @}N         A     x _register_with_ct_trace   N         @           _recordInternalError  |,  A !     #  8C c $A ` < @ D H Lc PC T`f  8l8d 88a 8 < @ D H L PA Xa TH рA H  ,888l8d @8H A  8! }N   8! A}N         A         _dumpEnv  |,    D!a H,  8`  LFA |a @d D8 @H UA    @8 H88D8 0H A  @8Ȁa H8  8 8H A a @H -A  X8! P}N  8! PN         A         _clone_cu_error     |`  `   !88848~ H iA ,  8 XA H A  D,  A H A 8 D8    DH ɀA 8 XH ݀A  D88~  8,   @  H A  H8! @}N  8~ (8H ݀A  H8! @}N         A         _cu_store_error   !|a L P h T X8a @H A a @8 DH A b  A D8 L88c  P X! TH =A a DH }A a @H A  h8! `}N         A          dumpLibraryError  |b  `  !8c  HH A  H8! @}N         A         0 
recordID_f  |`}  `   !88X8c  8H eA c  K1,  ,  c  8`88 A (8H 5A 8`  X8! P}H  A H A ( 8} X@ 88l88c  8 H A 8`  X8! P}H  H 	A } 8,  A H A c  H A } 88} X 8,   @ $H IA 8`  X8! P}N  8} XH %A 8`   X8! P}N         A       L clog_set_lpp_id     |`}  `   !88	8c  8H A c  K,  ,  c  8<88 A (8H A 8`  X8! P}H  A H A ( 8} X@ <8	888c  9  H qA 8`  X8! P}H  H A }  ,  A H )A c  H EA }  8
888c    9  ,   @ 0H A 8} XH A 8`  X8! P}N  8} XH A 8`   X8! P}N         A       p clog_set_component_id !|`     X D H`  a L888ga  8`  H IA a L DH 1,   H@ a LH  E X8! P}N         A         t clog_set_catalog_and_set    |`}  `   !88	t8c  8H A c  K},  8} X888 A (8H A 8`  X8! P}H  0H A  8} XH A 8`   X8! P}N         A         clog_set_message_set  a|  `  } &  `}  !;8
88c  8H ̀A c  K,  ,  8888 A $H A  h8! `}8` N  8` AH A ,  8   8` 8  A X @H A ,  8 @A H рA a @c  8 ,  A `H ݀A `{  a @H A ~@H  <c  8 H A `{  ~@@ tH A   c  8 ,  A@ TH A c  H A `g  8088c  H A } H|@A H A  H8` H  c  H A |y8} X@ $8`  d h8! `|} aN  H A } ,  A H A } H |@A H A } H8} XH ŀA 8`   d h8! `|} aN   h8! `}N         C       < clog_set_message_catalog    |`~  `   !88H88c  8H mA c  K9,  c  8	\8A (8 H EA 8`  X8! P}H  lK,  8` 8
@ H @8 9A $H A 8`  X8! P}N  88H ـA 8`  X8! P}N         A         clog_is_enabled     |`}  `   !8808(c  8H aA c  K-,  c  8	D8A (8H 9A  X8! P}8` N  K,  ,; X88A (A 0H A 8`  X8! P}H  ; Xc  @ Dc  H 	A  @c  d `  @H iA 8`   X8! P}N  H ̀A  @c  x @H 1A 8`   X8! P}N         A       < clog_enable_msgs    |`}  `   !88X8c  8H A c  K,  c  88A (8H ՀA  X8! P}8` N  KA,  ,; Xc  8dA 0; X8A (H A 8`  X8! P}H  t@ <c  H A 8   c   @H A 8`   X8! P}N  H qA  @c  | x @H ՀA 8`   X8! P}N         A       4 clog_disable_msgs |`   !K,  b  88	8c(A $H A 8`   H8! @}N   D H8! @}N         A        h clog_get_error  |`  `}   ! D H L PA X! T;  8888H 
A c  Kc  K,  c  888 A (8H 
ɀA 8`  x8! p}H  K5,  , / / 8 8A $H 
A 8`  x8! p}H   @88 9@ $H 
UA 8`  x8! p}H  \8` A D D H L P! X TA (c  @ Kց x8! p}N  c   x8! p}N         A       l 
clog_rec_v! || D  a xa L  P  T8P8d8| h  H  X! A 8H 	aA 8a ! 9C a L D P T H XK h8! `}N         A         clog_rec  A  |`  `   `  `{  !;@  8
8	88c  c  c  H A cc  K/  ,  ,  88	8O  A $H A 8`  X8! PA}H  8 8@ @ H  l@ $H UA 8`  X8! PA}N  c  A @H рA |zycC  c  c  @ 8`  X8! PA}H  XH 	}`   8{ XH 	-A { P,  A H ŀA [ P L T8{ XH 	}A 8`   X8! PA}N         A       ` clog_set_error_log_info     |`~  ; !8888H EA c  K,  c  8D8A (8 H A 8`  X8! P}H  Kc  K)~ H|@A H aA ~ D,  A H 
EA ~  ,  A H 
A ~ ,  A H 
A ~ 8,  A H 
A ~ P,  A H 
mA c  H 
aA KK8`   X8! P}N         A       $ 	clog_fini |! !`  `   D`  `  KKeb  ;@8888{(H A ,  @  K] x8! pA}8` N  ,  @  K9 x8! pA}8` N  ,  @  K x8! pA}8` N  ,  @  K x8! pA}8` N  8` H 
A   ,  @ \88{088 H )A K奀 488` 8   8 8 H A  x8! pA}8` N  8  8 H 
`     8  8c XH 
A   8  ;    <  #   C H  8c 0H 
A ,  A |88{88H yA 8@88{D8Kɀ  H EA ?  Kр 48(8` 8   8 8 H 9A 8`  x8! p!}H   8  K9,  A P 4888` 8   8 8 H A   H A ?  8` 	 x8! p!}H   8HKӍ`z    K, 
/  , A A ,, 	A A H88{P8cF  H eA H  , A LA 88{P8cF  H =A H    8` 	K  H A ?  K8` 	H ؀  8` 	K陀  H A ?  Kq8` H   8` 	Kq  H A ?  KI8` 
H   H A ?  K-8` H l  H A ?  K8` H P  c  KY|fy, / A A HA `8|8{X8H QA   H 1A ?  K8`  x8! p!}H   H A ?  K8` H Ѐ  H A ?  Ku8` H    DKI|fy, / A hAA D8L8{`8H A   H A ?  K!8`  x8! p!}H `  H iA ?  K8` H 4  c  KU|fy, / LLZA(A D8X8{h8H 1A   H A ?  K8`  x8! p!}H  ܀  c  K|fyA D8H8{p8H  ݀A   H A ?  KI8`  x8! p!}H    8K|gyA H8x8{x88$H  A   H eA ?  K8`  x8! p!}H  0  8`  $ L  $ P  $ T x8! p!}N         A        	clog_init  A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                A   L |	N               $A   L |	N               (A   L |	N                              |fx|#x|3xH       @        bcopy       @        memmove    ,A   L |	N               0A   L |	N               8A   L |	N               <A   L |	N               @A   L |	N               DA   L |	N               TA   L |	N               XA   L |	N               dA   L |	N               hA   L |	N               lA   L |	N               pA   L |	N               tA   L |	N               xA   L |	N               |A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N               A   L |	N                          H 
      @        memset A   L |	N               A   L |	N                                                        _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    CLOG    1.15    1.15    Info    _CLG    1.15    _CLG    _CLG    _CLG    1.15    _CLG    1.15    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    1.15    _CLG    Name    CLOG    _CLG    _CLG    1.15    _CLG    _CLG    _CLG    _CLG    _CLG    1.15    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    CLOG    _CLG    1.15    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    1.15    _CLG    1.15    _CLG    _CLG    _CLG    CLOG    _CLG    _CLG    1.15    _CLG    1.15    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    1.15    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    1.15    CLOG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    _CLG    [%s] %s _dumpEnv    csm.clog    clog_rec    %s called   Subsystem   AddRecord   clog_fini   clog_init   clog_init   MessageSet  TemplateId  clog_rec_v  IBM.CLOG.cat    %s() called
    %s() called
    %s() called
    %s() called
    IBM.CLOG.cat    %s() called
    IBM.AuditLog    %s() called
    error is: %s    %s() called
    Name == "%s"    IBM.AuditLog    IBM.CLOG.cat    _logINFO_MSG    _logINFO_MSG    _logINFO_MSG    _logFFDC_MSG    _logFFDC_MSG    %s() called
    %s() called
    IBM.CLOG.cat    IBM.CLOG.cat    IBM.CLOG.cat    DescriptionId   _incEnvCounter  _decEnvCounter  MessageCatalog  %s(%s) called
  %s(%d) called
  %s(%s) called
  %s(%s) called
  _cu_store_error _clone_cu_error _stopRMCSession _stopRMCSession FormatMessageId %s(%ld) called
 %s(%ld) called
 %s(%ld) called
 clog_is_enabled clog_set_lpp_id _HandlesAreValid    _HandlesAreValid    _HandlesAreValid    _HandlesAreValid    _HandlesAreValid    _finiCLOGLibrary    _startRMCSession    _startRMCSession    _startRMCSession    FieldDefinitions    clog_enable_msgs    FormatMessageText   clog_disable_msgs   _setAuditLogHandle  _setAuditLogHandle  _setAuditLogHandle  select string [%s]
 invalid ct_clog_ptr %s("%s",%d) called
 _recordInternalError    _recordInternalError    IBM.AuditLogTemplate    IBM.AuditLogTemplate    	invalid ct_clog_ptr    	invalid ct_clog_ptr    clog_set_message_set    %s(%d,%p,%d) called
    	invalid ct_clog_ptr    	invalid ct_clog_ptr    clog_set_component_id   clog_set_component_id   clog_set_component_id   _register_with_ct_trace _register_with_ct_trace _createAuditLogInstance _createAuditLogInstance _AuditLogTemplateExists _AuditLogTemplateExists clog_set_error_log_info 	AuditLogRM not running.    message type is enabled
    clog_set_message_catalog    clog_set_catalog_and_set    %s() called from line %d
   fc_log_error() returned %d  %s called, but env was NULL %s(message type=%d) called
 %s() called and returning 0
    message type is not enabled
    message type is not enabled
    cu_get_error() did set _pError  %s(resource_name=[%s]) called
  passed ct_clog_ptr was invalid  ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c ../../../../src/csm/clog/clog.c 	passed message type is invalid
    	passed message type is invalid
    	passed message type is invalid
    Subsystem=="CLOG" & TemplateId=%d   invalid ct_clog_ptr, returning %d   invalid ct_clog_ptr, returning %d   invalid ct_clog_ptr, returning %d   invalid ct_clog_ptr, returning %d   invalid ct_clog_ptr, returning %d   mc_invoke_action_bp() returned %d
  	response has one handle - found it error logging not enabled, aborting cu_get_error() did *not* set _pError    last clog_env found, so cleaning up
    RMC returned MC_EAGAIN, trying again    RMC session could not be established    RMC session could not be established    _setOrCreateAuditLogTemplateInstance    _setOrCreateAuditLogTemplateInstance    	response has %d handles - too many!    %s('%s',%d,'%s',%d,'%s',...) called
    %s('%s',%d,'%s',%d,'%s',...) called
    	mc_define_resource_bp() returned %d
   Too many IBM.AuditLog resources found   Too many IBM.AuditLog resources found   %s(%s) returning %d, allocation error   %s called. calling cu_set_error(%d,%s)  [%s] is an invalid LPPID, returning %d  initializing CLOG library version [%s]
 mc_enumerate_resources_bp() returned %d Unable to allocate memory, returning %d %s(%s) returning %d, invalid component ID   RMC returned MC_ESESSREFUSED, trying again  	template not found, creating new resource  	response has no handles - no such resource %s called, handle not valid. RMC error is:%s    	session was already NULLed out, returning 0    	Default message after substitutions is [%s]
   clog_set_lpp_id() returned invalid code of %d   %s(message type=%d) called, calling clog_v()
   mc_enumerate_resources_bp() response has error  _is_invalid_env() - clogptr is NULL, returning 1    	template already exists, returning CLOG_SUCCESS    %s called, mc_validate_rsrc_hndl_bp() returned %d   %s(%s) called, session established, returning %d
   %s(%s) called, session not created, returning %d
   _setAuditLogHandle() reuturned invalid code of %d   _setAuditLogHandle() reuturned invalid code of %d   clog_set_message_set() returned invalid code of %d  clog_set_component_id() returned invalid code of %d defined IBM.AuditLog resource, and returning success    	unable to locate template, returning CLOG_RMC_ERROR    unexpected number of IBM.AuditLogTemplateIds - got %d   clog_set_message_catalog() returned invalid code of %d  conflicting detailedData and detailedDataSize parameters    %s(%s) called, session was already started, returning %d
   	unable to locate template, returning CLOG_INTERNAL_ERROR   mc_define_resource_bp() returned %d
 %s, returning failure  	mc_enumerate_resources_bp() returned an error: mc_errmsg=%s    	Failed to create AuditLog instance, returning CLOG_RMC_ERROR   	failed to set IBM.AuditLogTemplate id, returning CLOG_RMC_ERROR    	failed to set IBM.AuditLogTemplate id, returning CLOG_RMC_ERROR    Unkown return codes from mc_invoke_action_bp(), file %s, line %d    	mc_enumerate_resources_bp() returned a non-zero return code of %d  %s called, mc_validate_rsrc_hndl_bp() returned 0, but response is NULL  mc_invoke_action_bp() returned 0, yet response not set, aborting now!
  failure in fetching NodeID - possible that we are not running as root.  	mc_enumerate_resource_bp() returned 0 and we have a non-error response catopen(%s) returned -1, error is [%s]. Setting _msg_catalog_hndl to -1 line %d - Internal error: clog_enable_msgs() returned invalid code of %d    	RMC denies permission to query for pre-existing IBM.AuditLog resource instances    @(#)88   1.15   src/csm/clog/clog.c, csm.clog, csm_rveg, rveg0414a 2/20/04 17:01:42 _is_invalid_env() - clogptr has wrong API version (has %d, should be %d), returning 1   	unexpected return value from _AuditLogTemplateExists of %d, returning CLOG_INTERNAL_ERROR  mc_invoke_action_bp response error
 mc_error.mc_errnum == [%d]
 mc_error.mc_error_msg=[%s]  	mc_define_resource_bp response error
 mc_error.mc_errnum == [%d]
 mc_error.mc_error_msg=[%s]   --------- Underlying library function call error report --------
 File:"%s"
 Line:%d
 Function:"%s"
 sccs version:"%s"
 Library error was:%s    	ct_clog_t @%p dump 
	----------------------------------
	_compID                   = [%s]
	_messageCatalog           = [%s]
	_messageSet               = %d
	_rmc_session              = [%p]
	_auditlog_hndl_is_invalid = [%d]
	_lppName                  = [%s]
	_apiversion               = [%d]
	_msg_mask                 = [%08lX]
	_pError                   = [%p]
	_msg_catalog_hndl         = [%p]
	_error_log_template_id    = [%d]
	_detailed_data            = [%p]
	_detailed_data_size       = [%d]
    
####################################################################### 
# Licensed Materials - Property of IBM                                # 
#                                                                     # 
# 5765-E61                                                            # 
#                                                                     # 
# (C) COPYRIGHT International Business Machines Corp. 1996,2001       # 
# All Rights Reserved                                                 # 
#                                                                     # 
# US Government Users Restricted Rights - Use, duplication or         # 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.   # 
#                                                                     # 
####################################################################### 

        %  $  $  $t  $  $P  %  $   $  %,  $0  $@  %X    Component ID    Component ID    Message text    Message text    2653-804 Unable to fetch nodes ID.  2653-802 Unable to start RMC session.   2653-801 Memory allocation error    2653-803 IBM.AuditRM connection error.  2653-800 Internal library error %1$d.%2$s   Reserved: DO NOT USE!   Component ID of system logging this entry   Message text from the system logging this entry This subsystem is defined by CLOG for recording significant event information.                                                                h           &      h  &         &         &      !  &      #  &      $  &      &\  &      '  &      (D  &      )  &      *  &      ,  &      -\  &                                  9                      #                  %  '|  '          &  &                                                                                      6   X   m     	P  I  	             @
                    @
              ,      @
              H      @
       __mull    1  @              b    @              n     @       malloc        @
       free          @
       _Errno        @
       strlen        @
       catopen       @
       catgets       @
       catclose      @
              {      @
       snprintf      @
       strdup        @
                    @
                    @
       strerror      @
                    @
                    @
                    @
                    @
                   @
                   @
             7      @
             L      @
             c      @
             x      @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
             !      @
             8      @
             K  &  
              ]  &, 
              u  &8 
                &D 
                &P 
                &\ 
                &h 
                &t 
                & 
                & 
        clog_rec  & 
                & 
              3  & 
              ?  & 
                   #       #       #       #       #       #       #       #       #       #       $        $       $       &       &         &$       &,        &0       &8        &<       &D        &H       &P        &T       &\        &`       &h        &l       &t        &x       &        &       &        &       &        &       &        &       &        &       &        &       &       &       &       &       &       &       &       &        &       &       &        &       &       &       '    %    '       '       '       '       '       '       '       '        '$       '(       ',       '0   "    '4   !    '8   #    '<   $    '@       'D       'H       'L   &    'P       'T   '    'X   (    '\   )    '`       'd       'h       'l       'p   
    't       'x   *  /usr/lib:/lib    libct_tr.a shr.o  libc.a shr.o  libct_mc.a shr.o  libpthread.a shr_xpg5.o  libct_cu.a shr.o  tr_record_fmt_string_1  tr_record_id_1  tr_unregister_component_1  tr_register_component_1  
___memset  ___memmove  
vsnprintf  gettimeofday  
setlocale  mc_end_session_1  mc_start_session_2  mc_enumerate_resources_bp_1  mc_validate_rsrc_hndl_bp_1  mc_define_resource_bp_1  mc_invoke_action_bp_1  mc_free_response_1  pthread_mutex_unlock  pthread_mutex_init  pthread_mutex_lock  cu_rel_errmsg_1  cu_get_errmsg_1  cu_rel_error_1  cu_get_error_1  cu_set_error_1  cu_utf8_is_assumed_1  cu_get_utf8_locale_1  cu_catopen_1  cu_rel_utf8_locale_1  cu_get_node_id_1  clog_set_lpp_id  clog_set_component_id  clog_set_catalog_and_set  clog_set_message_set  clog_set_message_catalog  clog_is_enabled  clog_enable_msgs  clog_disable_msgs  clog_get_error  clog_rec_v  clog_set_error_log_info  
clog_fini  
clog_init    
   X   d  D     I     N     S      ,    D  (  X  T  D    ]    D     D    ]  ,  ]  ~   X     f    D    b  @  g  p  D    D    ]    D    D  d  D  p  l    :    q    ]    D    D    l  $  q  8  ]  D  v    D    l    q    ]    D    l  0  q  :   r  T  {    ]    D    D    l    q    ]  r   X    D    D  	  D  	  l  	$  q  	P  D  	Z   r  
    
  l  
  q  
  D  (  D  X  D    D    ]  "   X  L  b  d  D  |  D    g    D     ]    D  \  D  x  D    ]     X    D        l    :    q    ]    D  l  D     X    D          l  4  q  t  D     X    D  ,  l  :   X  X          D    q    D  @  l  P  q  h  v    D    D    q  b   X    D    D     X  ,  D  6   |  8  l  B   ~  F   |  \  q     X    D     |    l     ~     |    q     X  8  D  B   ~  F     J   |  d  l    D     |    q     |         l  &   X  8  D  J   |  L  q         X    D     ]  D  D    ]    D    ]     X      j   X  n     z           D  J   X    D    D  X    b   X  |  D    {         X     D  4  l  H    \    h  q    D    D           *   X  L  D  X    d       X         X  $  D  T  D  x  v    D    l            q     q  n   X    D    D    v    D  8  l  L    X      D    q    q      X   @  D      X     D  !  D  !$  l  !4  q  !   X  !  D  !  D  "    "0  ƙ  "D  ˙  "`  Й  "p  ՙ  "  ڙ  "  ߙ  "  ߙ  "    "  D  "    #    #D  l  #X    #p    #  q  #   X  $  D  $D  D  $  D  $  D  $   X  %(  D  %P  D  %  D  %  l  %  q  %  l  &  q  &b   X  &  D  &  D  &  D  '$  l  '8  q  'X  l  'p  q  '   X  '  D  (J   X  (  D  (  D  )   D  )4  D  )   X  *(  D  *   X  *  D  *  D  +4  D  +\    +  :  +  l  +    +  q  ,   X  ,D  D  ,l  D  ,    ,    ,    ,    ,    -    -    -   X  -  D  .<    .`  D  .n   r  .  {  .  ?  .    .    /  D  /0    /B   r  /\  {  /   r  /  {  /    0$  D  0L  D  0h    0    0    0    0    18  D  1D    1p    1    1  D  1    2    2X  D  2d    2  D  2    3  D  3    3   Z  3   \  3   ^  4   `  4*   b  4R   d  4z   h  4   j  4   l  5   4   5   4  5F   n  5n   p  5   t  5   v  5   x  6   z  66     6^     6     6     6     6     7&     7N     7v     7     7     7     8     8>     8f     8     8     8     9     9.     9`  ?   9`   0  9~     9            #  /   #  /   #  /   #  /   #  /   #  /   #  /   #  /   #  /   #  /   $   /   $  /   $  /   &     &       &$   V   &,      &0   V   &8      &<   V   &D      &H   V   &P      &T   V   &\      &`   V   &h      &l   V   &t      &x   V   &      &   V   &      &   V   &      &   V   &      &   V   &      &   V   &      &   V   &     &   "   &   @   &   D   &   J   &   
   &      &     &   F   &      &   T   &   P   &   <   &  1   '       '      '       '      '     '     '  	   '      '    &   '$     '(     ',   (   '0      '4      '8      '<      '@   $   'D   8   'H   H   'L      'P   L   'T      'X      '\      '`   >   'd   :   'h   N   'l   B   'p   6   't   R   'x                               
                                
             (                   
             D                   
             _                   
             w                   
                                
                                
                                
                                
                                
                                
                                
                               
                               
            $                   
            9                   
            J                   
            a                   
            p                   
                               
      __mull    1                     .__mull   1                                                                                                                                           malloc                     
      free                       
      _Errno                     
      strlen                     
      catopen                    
      catgets                    
      catclose                   
                               
      snprintf                   
      strdup                     
                               
                               
      strerror                   
                               
                               
                               
      TOC       &   k                _$STATIC  &   k                     J  &   k               catgets   &   k                       &   k                       &   k                      w  &   k                        &   k                         &   k               snprintf  &   k                      (  &   k                       &   k                       &   k               strlen    &   k                     *  &   k                        '    k                      _  '   k                        '   k                        '   k                     >  '   k                     I  '   k                     V  '   k                      D  '   k                     p  '    k                     j  '$   k                       '(   k                       ',   k                        '0   k                        '4   k                        '8   k                        '<   k                     a  '@   k               free      'D   k               strdup    'H   k                        'L   k                       'P   k                       'T   k                       'X   k                     $  '\   k               catopen   '`   k               _Errno    'd   k               strerror  'h   k               catclose  'l   k               malloc    'p   k                       't   k                     9  'x   k                         g .file     + g                                                             k  3                          k                      	  p   k                        l   k                      C                           \     k                      u     k                                                      k                        `   k                                                                                                                                       k                           k                      0  `   k                      I     k                      _  4   k                      i      k                      z     k                           k                                                                              h                                                                                   !                           #                         ,  $                         >  &\                         Q  '                         a  (D                         m  )                         w  *                           ,                           -\                             9   k                _$STATIC       k  #                  >  %      4                  I  '|                        V  '                        j  &                          &                          &             
              &,            
              &8            
              &D            
              &P            
              &\            
            -  &h            
            ?  &t            
            R  &            
            b  &            
      clog_rec  &            
            x  &            
              &            
              &            
      .file     3 gCLOG_set.c                                      _$STATIC  $   k                    *  #      4            moveeq.s  >g .bcopy    5       A      )       .ovbcopy  5      4             ._moveeq  5     4             .memcpy   5     4             .memmove  5     4             memset.s  Ag .memset   9`            )       glink.s   Fg         3   k   (                    3     B            glink.s   Kg .catgets  3   k   (            .catgets  3     G            glink.s   Pg         3   k   (                    3     L            glink.s   Ug         4    k   (                    4      Q            glink.s   Zg         4(   k   (                    4(     V            glink.s   _g         4P   k   (                    4P     [            glink.s   dg         4x   k   (                    4x     `            glink.s   ig       &  4   k   (                  &  4     e            glink.s   ng       C  4   k   (                  C  4     j            glink.s   sg       W  5D   k   (                  W  5D     o            glink.s   xg .strlen   5l   k   (            .strlen   5l     t            glink.s   }g       m  5   k   (                  m  5     y            glink.s   g       }  5   k   (                  }  5     ~            glink.s   g         5   k   (                    5                 glink.s   g         6   k   (                    6                 glink.s   g         64   k   (                    64                 glink.s   g         6\   k   (                    6\                 glink.s   g         6   k   (                    6                 glink.s   g         6   k   (                    6                 glink.s   g         6   k   (                    6                 glink.s   g       .  6   k   (                  .  6                 glink.s   g       >  7$   k   (                  >  7$                 glink.s   g       N  7L   k   (                  N  7L                 glink.s   g .free     7t   k   (            .free     7t                 glink.s   g .strdup   7   k   (            .strdup   7                 glink.s   g       ^  7   k   (                  ^  7                 glink.s   g       t  7   k   (                  t  7                 glink.s   g         8   k   (                    8                 glink.s   g         8<   k   (                    8<                 glink.s   g         8d   k   (                    8d                 glink.s   g .catopen  8   k   (            .catopen  8                 glink.s   g ._Errno   8   k   (            ._Errno   8                 glink.s   g         8   k   (                    8                 glink.s   g         9   k   (                    9                 glink.s   g .malloc   9,   k   (            .malloc   9,                 glink.s   g         9|   k   (                    9|                 glink.s g         9   k   (                    9                   mc_end_session_1 mc_start_session_2 mc_enumerate_resources_bp_1 mc_validate_rsrc_hndl_bp_1 mc_define_resource_bp_1 mc_invoke_action_bp_1 mc_free_response_1 cu_rel_errmsg_1 cu_get_errmsg_1 cu_rel_error_1 cu_get_error_1 cu_set_error_1 cu_utf8_is_assumed_1 cu_get_utf8_locale_1 cu_catopen_1 cu_rel_utf8_locale_1 cu_get_node_id_1 tr_record_fmt_string_1 tr_record_id_1 tr_unregister_component_1 tr_register_component_1 ___memset .___memset ___memmove .___memmove vsnprintf gettimeofday setlocale pthread_mutex_unlock pthread_mutex_init pthread_mutex_lock cu_mesgtbl_CLOG_set _lib_mutex _env_counter _lib_init_completed clog_trace_detail_levels clog_trace_categories ../../../../src/csm/clog/clog.c Fri Oct  1 18:31:34 2004  C for AIX Compiler Version 5.0.1.0 ---  ._logINFO_MSG ._setAuditLogHandle ._setOrCreateAuditLogTemplateInstance ._AuditLogTemplateExists ._createAuditLogInstance ._stopRMCSession ._startRMCSession ._is_invalid_msg_type ._is_invalid_env ._decEnvCounter ._incEnvCounter ._finiCLOGLibrary ._initCLOGLibrary ._HandlesAreValid ._unregister_with_ct_trace ._register_with_ct_trace ._recordInternalError ._dumpEnv ._clone_cu_error ._cu_store_error .dumpLibraryError .recordID_f .clog_set_lpp_id .clog_set_component_id .clog_set_catalog_and_set .clog_set_message_set .clog_set_message_catalog .clog_is_enabled .clog_enable_msgs .clog_disable_msgs .clog_get_error .clog_rec_v .clog_rec .clog_set_error_log_info .clog_fini .clog_init Fri Oct  1 18:31:29 2004  .tr_record_fmt_string_1 .vsnprintf .gettimeofday .mc_invoke_action_bp_1 .mc_free_response_1 .snprintf .mc_enumerate_resources_bp_1 .pthread_mutex_lock .pthread_mutex_unlock .cu_set_error_1 .mc_define_resource_bp_1 .mc_end_session_1 .mc_start_session_2 .mc_validate_rsrc_hndl_bp_1 .tr_unregister_component_1 .tr_register_component_1 .cu_get_errmsg_1 .cu_rel_errmsg_1 .cu_rel_error_1 .cu_get_error_1 .tr_record_id_1 .cu_utf8_is_assumed_1 .setlocale .cu_get_utf8_locale_1 .cu_catopen_1 .cu_rel_utf8_locale_1 .strerror .catclose .pthread_mutex_init .cu_get_node_id_1    30          44452       96          0           0           0           0           0   `
1           96          shr.o 1735        0           44332       0           0           0           0           0   `
   T   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `   `._AuditLogTemplateExists ._startRMCSession ._decEnvCounter ._incEnvCounter ._finiCLOGLibrary ._initCLOGLibrary .recordID_f .clog_set_lpp_id .clog_set_component_id .clog_set_catalog_and_set .clog_set_message_set .clog_set_message_catalog .clog_is_enabled .clog_enable_msgs .clog_disable_msgs .clog_get_error .clog_rec_v .clog_rec .clog_set_error_log_info .clog_fini .clog_init _lib_mutex _env_counter _lib_init_completed clog_trace_detail_levels clog_trace_categories clog_set_lpp_id clog_set_component_id clog_set_catalog_and_set clog_set_message_set clog_set_message_catalog clog_is_enabled clog_enable_msgs clog_disable_msgs clog_get_error clog_rec_v clog_rec clog_set_error_log_info clog_fini clog_init cu_mesgtbl_CLOG_set .bcopy .ovbcopy ._moveeq .memcpy .memmove .memset .tr_record_fmt_string_1 .catgets .vsnprintf .gettimeofday .mc_invoke_action_bp_1 .mc_free_response_1 .snprintf .mc_enumerate_resources_bp_1 .pthread_mutex_lock .pthread_mutex_unlock .strlen .cu_set_error_1 .mc_define_resource_bp_1 .mc_end_session_1 .mc_start_session_2 .mc_validate_rsrc_hndl_bp_1 .tr_unregister_component_1 .tr_register_component_1 .cu_get_errmsg_1 .cu_rel_errmsg_1 .cu_rel_error_1 .cu_get_error_1 .tr_record_id_1 .free .strdup .cu_utf8_is_assumed_1 .setlocale .cu_get_utf8_locale_1 .cu_catopen_1 .cu_rel_utf8_locale_1 .catopen ._Errno .strerror .catclose .malloc .pthread_mutex_init .cu_get_node_id_1   k 0PB$  7u     W  q@q@q@             W      ./opt/csm/man/man1/mgmtsvr.1 ux.                   $          mgmtsvr Command

   Purpose

      mgmtsvr - Displays or sets the management server entry for the
      Managed node.

   Syntax

      mgmtsvr [-h] [-k] [-v | -V] [-N] [-n hostname] [host | -d]

   Description

      The mgmtsvr command runs on Managed nodes to display or set the
      management server for the node.

   Parameters

      None.

   Flags     

      -d       Deletes the management server entry.

      -h       Writes the command's usage statement to standard output.

      host     Specifies the host name or IP address of the CSM
               management server that will be managing this node. If no
               host is specified, and the -d  flag is not specified, the
               current setting will be displayed. In this case, the exit
               status can be examined to distinguish between nodes and
               the management server.

      -k       Exchanges RSCT public keys, host name, and node
               identifier between the node and the management server.
               Only use this flag if the host name, node identifier, or
               public key of either machines has changed. At the time
               this flag is used, you must trust your network to ensure
               that a rogue machine is not going to insert its public
               key in place of the public key of the real node.

      -n hostname
               Specifies the host name known to the CSM management
               server for this node. Passing a node name to the
               updatenode command is normally only needed for diagnostic
               purposes. The updatenode command uses the -n flag to
               ensure correct operation when the hostname value on the
               node resolves to a different name than the name known to
               the management server. The default is /bin/hostname
               Before using the updatenode command with the -n flag, you
               must run chnode nodename AllowManageRequest=1.

      -N       Displays the value for the local node name and management
               server. This flag is valid only if a host name or IP
               address for the management server is not specified.

      -v | -V  Writes the command's verbose messages to standard output.

   Exit Status

      0        This is a Managed node only and the management server
               value is set.

      1        The combination of flags is not valid.

      11       This is a Managed node only and the management server
               value is not set.

      21       This node is its own management server.

      22       This node is also a management server for a separate
               cluster.

      23       This machine is a CSM management server and a node, but
               the node does not currently have a management server set
               for it.

      31       This machine is a CSM management server only.

      101      This machine is neither a CSM management server or node.

   Security

      The command requires root access to the cluster management server.

   Examples

      To query the current CSM management server for this node, enter:

      mgmtsvr

   Implementation Specifics

      This command is part of IBM Cluster Systems Management (CSM)
      software.

   Files

      /var/log/csm/install.log
               Location of the log output from the updatenode command.

   Location

      /opt/csm/bin/mgmtsvr

   Related Information
      *  The  updatenode command.
      *  See the cluster security section in the IBM CSM for AIX 5L:
         Administration Guide for information on editing the RMC ACL
         file.
 k0~ 0PB$  7u       )r@)r@)r@                   ./opt/csm/msgmaps/IBM.CLOG.Perl.map 8.2.                   $          EMsg_Missing_Clogger	1	2	'2653-975 Bad, missing, or unusable clogger command.'
EMsgInternalError	2	2	'%1$s 2653-976 Internal error %2$s in CLOG.pm.'
EMsgInvalidParamError	3	2	'2653-977 Invalid parameter %1$s.'
EMsgMissingParamError	4	2	'2653-978 Missing parameter%1$s.'
 okf 0PB$  7u     EO AAA             EO     ./opt/csm/msgmaps/csmInstall.csminstall.map 64.p                   $          IMsgRUN_CMD	1	3	'Executing the \"%1$s\" command.\n'
IMsgCFMLogDate	2	3	'All CFM messages will be recorded in /var/log/csm/cfmerror.log under the entry dated: %1$s.\n'
IMsgUpdateNodeUsage_old	3	3	''
IMsgMakeNodeExit	4	3	'MN_EX = %1$s\n'
IMsgShow_Output	5	3	'%1$s\n'
EMsgNO_RunCmd	6	3	'%1$s: 2653-021 Could not execute the \"%2$s\" command.\n'
EMsgCANT_FIND	7	3	'%1$s: 2653-022 Could not find %2$s in %3$s.\n'
EMsgDOESNT_EXIST	8	3	'%1$s: 2653-023 %2$s does not exist.\n'
EMsgInstallError	9	3	'%1$s: 2653-025 An error occurred while installing CSM packages.\n'
EMsgNO_MGMTSVR	10	3	'%1$s: 2653-026 An error occurred while attempting to execute the mgmtsvr command.\n'
IMsgNODE_INSTALL_SUCCESS	11	3	'Node Install - Successful.\n'
IMsgMakeNodeUsage	12	3	'Usage:  makenode [-h] [-v | -V] [-f] [-k] [-t] -m management_server -n nodename\n        -m      management_server \n                Hostname or IP address of the management server \n        -n      nodename \n                Hostname that the CSM management server knows this node by. \n        -f      \n                Force install \n        -k      \n                Exchange RSCT public keys between the node and management server\n        -t      \n                Test what would be installed but do not install. \n        -v | -V \n                Verbose mode \n        -h      \n                Display this usage information. \n'
EMsgMISSING_MS	13	3	'%1$s: 2653-027 Management server must be provided.\n'
EMsgMISSING_Hostname	14	3	'%1$s: 2653-029 The node hostname must be provided.\n'
EMsgCMD_FAILED_RC	15	3	'%1$s: 2653-030 The %2$s command failed with a return code of %3$s.\n'
IMsgRPM_ALREADY_INSTALLED	16	3	'%1$s is already installed.\n'
IMsgINSTALLING_RPM	17	3	'Installing %1$s .\n'
IMsgSETTING_MS	18	3	'Setting Management Server to %1$s.\n'
EMsgERROR_QUERYING	19	3	'%1$s: 2653-031 An error occurred while querying %2$s.\n'
EMsgNO_MOUNT	20	3	'%1$s: 2653-032 Could not mount %2$s.\n'
EMsgNO_UNMOUNT	21	3	'%1$s: 2653-033 Could not unmount %2$s.\n'
EMsgNO_REMOVE	22	3	'%1$s: 2653-034 Could not remove %2$s from %3$s.\n'
EMsgNO_FIND	23	3	'%1$s: 2653-035 Could not find %2$s.\n'
EMsgNO_UPDATE	24	3	'%1$s: 2653-036 Could not update %2$s.\n'
EMsgNO_INTERNAL_CALL	25	3	'%1$s: 2653-037 The internal call to %2$s was not successful.\n'
EMsgNO_ScriptResource	26	3	'%1$s: 2653-039 Could not create NIM script resource.\n'
EMsgDOES_NOT_EXIST	27	3	'%1$s: 2653-043 %2$s does not exist.\n'
IMsgWRITING_LOGFILE	28	3	'Output log for %1$s is being written to %2$s.\n'
IMsgSTART_LOGGING	29	3	'***********************************************\nLogging started %1$s.\n***********************************************\n'
IMsgSTOP_LOGGING	30	3	'**********************************************\nLogging stopped %1$s.\n**********************************************\n'
EMsgNO_RM	31	3	'%1$s: 2653-044 Could not remove %2$s.\n'
EMsgCANT_WRITEtoFILE	32	3	'%1$s: 2653-045 Could not write to file %2$s.\n'
EMsgNO_CORE	33	3	'%1$s: 2653-046 csm.core package is not installed. Please Install csm.core package first.\n'
EMsgINVALID_OSTYPE	34	3	'%1$s: 2653-047 Invalid Operating System Type. Valid values are Linux or AIX.\n'
IMsgCMD	35	3	'Running Command:\t%1$s.\n'
EMsgCMD_FAILED	36	3	'%1$s: 2653-048 Command failed:  %2$s.  Error message:  %3$s.\n'
EMsgRUN_CMD_INVALID	37	3	'%1$s: 2653-049 Invalid argument to run_cmd subroutine: %2$s.\n'
EMsgUNSUPPORTED_DISTRO	38	3	'%1$s: 2653-050 Linux distribution, %2$s, is not currently supported by CSM.  Supported distributions are:  %3$s.\n'
IMsgDETECTED_DISTRO	39	3	'Detected Linux distribution %1$s.\n'
IMsgCOPYING	40	3	'Copying %1$s.\n'
IMsgCOPYING_RPMS	41	3	'About to copy CSM, RSCT and required RPMs.\n'
IMsgCOPYING_INSTALLP	42	3	'About to copy CSM installp images.\n'
IMsgCOPYING_OPENSRC_PREREQS	43	3	'About to copy open source prerequisites required by CSM.\n'
IMsgCOPYING_CSMBINARIES	44	3	'About to copy CSM  command binaries.\n'
IMsgCOPYING_LINUX_RPMS	45	3	'About to copy Linux RPMs\n'
IMsgSEARCHING_FOR_PREREQ	46	3	'Searching for %1$s in the pkg path.\n'
IMsgINSERT_DISK	47	3	'Insert %1$s disk %2$s.\n'
IMsgPRESS_ENTER	48	3	' Press Enter to continue.\n'
IMsgSEARCHING_FOR_PREREQ_ON_CD	49	3	'Searching for \"%1$s\" on the Linux distribution CD # \"%2$s\".\n'
IMsgWAITING_FOR_ERRM	50	3	'Waiting for ERRM to start...\n'
IMsgERRM_STARTED	51	3	'ERRM is started.\n'
IMsgINSTALLING_RPMS	52	3	'Installing %1$s RPMs.\n'
IMsgINSTALLING_INSTALLP_PACKAGES	53	3	'Installing %1$s installp packages.\n'
EMsgNO_RPM	54	3	'%1$s: 2653-051 rpm command package is not installed. Please install rpm command package first to get the rpm command.\n'
IMsgFOUND_RPM	55	3	'Found \"%1$s\" in \"%2$s\" .\n'
IMsgFOUND	56	3	'Found rpm \"%1$s\", which is \"%2$s\" \"%3$s\". \n'
EMsgVERSION_COMPARE_PROBLEM	57	3	'%1$s: 2653-052 Trouble comparing \"%2$s\".  Eval message: \"%3$s\" \n'
IMsgCOMPARING_VERSION	58	3	'Comparing versions \"%1$s\" and result is \"%2$s\".\n'
IMsgINSTALLING_RPM_REQS	59	3	'Installing the following rpms required by \"%1$s\":  \"%2$s\" \n'
EMsgCANT_FIND_RPM	60	3	'%1$s: 2653-053 Cannot find a version of the \"%2$s\" rpm with the condition: \"%3$s\" \"%4$s\". (This is required by \"%5$s\"). \n'
IMsgREQUIRE	61	3	'Rpm \"%1$s\" requires: \"%2$s\" \n'
EMsgBAD_ATTR_VAL_FORM	62	3	'%1$s: 2653-054 Improper attribute=value form.\n'
EMsgBAD_ATTR	63	3	'%1$s: 2653-055 Invalid attribute : \"%2$s\" \n'
EMsgINVALID_ARGS_WITH_F_old	64	3	''
EMsgINVALID_ARGS_WITH_M	65	3	'%1$s: 2653-057 Cannot provide -c, -f, -H, -n or the HWControlPoint, HWControlNodeId or PowerMethod attributes with -M. \n'
EMsgNEED_POWER_METHOD	66	3	'%1$s: 2653-058 PowerMethod attribute must be provided when using the -H flag.\n'
EMsgNEED_CONSOLE_METHOD	67	3	'%1$s: 2653-059 ConsoleMethod attribute must be provided when using -C flag.\n'
IMsgDEFAULT_ATTR_SET	68	3	'Attribute \"%1$s\" set to default: \"%2$s\".\n'
EMsgCANT_GET_OSNAME	69	3	'%1$s: 2653-061 Cannot determine the operating system name on the Management Server.\n'
EMsgCANT_GET_DISTROVERSION	70	3	'%1$s: 2653-062 Cannot determine the version of the distribution installed on the Management Server.\n'
EMsgCANT_GET_DISTRONAME	71	3	'%1$s: 2653-063 Cannot determine the name of the distribution installed on the Management Server. Please set the InstallDistributionName attribute manually.\n'
EMsgCANT_GET_PKGARCH	72	3	'%1$s: 2653-064 Cannot determine the architecture of the Management Server. Please set the InstallPkgArchitecture attribute manually.\n'
EMsgCANT_GET_CSMVERSION	73	3	'%1$s: 2653-065  Cannot determine the CSM version installed on the Management Server.\n'
IMsgNEW_NODES_TO_DEFINE	74	3	'New Nodes to define: \n'
EMsgALREADY_DEFINED_MANAGEDNODES	75	3	'%1$s: 2653-066  The following nodes are already defined as ManagedNodes:\n \"%2$s\" \n'
EMsgPORTNUM_IN_HEX	76	3	'%1$s: 2653-068  The starting console port number \"%2$s\" must be a hexidecimal digit. \n'
IMsgASSIGNING_CONSOLE_PORT	77	3	'Assigning console \"%1$s\", num \"%2$s\", port \"%3$s\" to node \"%4$s\".\n'
EMsgPORTS_IN_USE	78	3	'%1$s: 2653-069  The following requested ports\nfor console server \"%2$s\"\nare already assigned to existing nodes:\n%3$s\n'
IMsgALL_PORTS_AVAILABLE	79	3	'All requested ports are available for console server \"%1$s\".\n'
EMsgINSUFFICIENT_PORTS	80	3	'%1$s: 2653-070  \"%2$s\" nodes were specified, but only \"%3$s\" console ports are available.\n'
EMsgINSUFFICIENT_SP	81	3	'%1$s: 2653-071 \"%2$s\" nodes were specified, but only \"%3$s\" service processors are available.\n'
IMsgGETTING_ROUTE_TO_MS	82	3	'Determining network route from the node (\"%1$s\") to the management server.\n'
EMsgCANT_RUN_CMD	83	3	'%1$s: 2653-072 Cannot run \"%2$s\".\n'
IMsgEXISTING_MANAGEDNODES	84	3	'Existing Managed Nodes: \n'
IMsgDEFINING_NODES	85	3	'Defining CSM Nodes: \n'
IMsgDEFINING_NODE	86	3	'Defining Node \"%1$s\"(\"%2$s\")\n'
EMsgFILE_NOT_FOUND	87	3	'%1$s: 2653-074 File not found: \"%2$s\".\n'
IMsgREADING_NODEDEF	88	3	'Reading nodedef file: \"%1$s\".\n'
EMsgNODEDEF_BAD_FORMAT	89	3	'%1$s: 2653-075 The nodedef file has an invalid format on line \"%2$s\".\n\tNo hostname for \"\"%3$s\"\"\n'
EMsgNODEDEF_INVALID_ATTR	90	3	'%1$s: 2653-076 The nodedef file has an invalid attribute on line \"%2$s\":\n\t\"%3$s\". \n'
EMsgERROR_IN_NODEDEF	91	3	'%1$s: 2653-077 Errors in nodedef file: \"%2$s\".\n'
EMsgDUPLICATE_NODES	92	3	'%1$s: 2653-078 Nodes are already defined.\n'
EMsgERROR_ASSIGNING_PORTS	93	3	'%1$s: 2653-080 Cannot assign console ports to nodes.\n'
EMsgERROR_ASSIGNING_SP	94	3	'%1$s: 2653-081 Cannot assign service processors to nodes.\n'
EMsgNO_NODES_DEFINED	95	3	'%1$s: 2653-082 No nodes were successfully defined.\n'
EMsgERROR_INSTALLING_NODES	96	3	'%1$s: 2653-083 Nodes were successfully defined, but there was an error installing the nodes.\n'
IMsgNOT_INSTALLED	97	3	'The RPM package %1$s is not yet installed.\n'
EMsgNO_LIST	98	3	'%1$s: 2653-084 Could not get the list of install packages.\n'
EMsgTEST_Error	99	3	'%1$s: 2653-085 An error occurred while checking CSM packages.\n'
EMsgNO_FandT	100	3	'%1$s: 2653-086 The \"-f\" flag cannot be used with the \"-t\" flag.\n'
IMsginstallmsUsage_old	101	3	''
IMsgdefinenodeUsage_old	102	3	''
EMsgUNSUPPORTED_AIX_DISTRO	103	3	'%1$s: 2653-087 AIX distribution, \"%2$s\", is not currently supported by CSM.  Supported distributions are:  \"%3$s\".\n'
IMsgDETECTED_AIX_DISTRO	104	3	'Detected AIX distribution \"%1$s\".\n'
EMsgUNSUPPORTED_CSM_DISTRO	105	3	'%1$s: 2653-088 CSM distribution, \"%2$s\", is not currently supported .  Supported distributions are:  \"%3$s\".\n'
IMsgDETECTED_CSM_DISTRO	106	3	'Detected CSM distribution \"%1$s\".\n'
EMsgIPADDR_ERROR	107	3	'%1$s: 2653-089 IP address (\"%2$s\") out of valid range.\n'
IMsgMkgetmacUsage	108	3	'Usage: mkgetmacrd [-h]\n        mkgetmacrd [-v | -V]  \n        \n        -v | -V  Verbose \n        -h       Display usage information \n\n'
IMsgCREATE_GMRD	109	3	'Creating getmacs ramdisk. \n'
IMsgGZIPPING	110	3	'Gzipping \"%1$s\" to \"%2$s\". \n'
IMsgCDHCPUSAGE	111	3	'Usage: createdhcp [-h]\n       createdhcp [-v | -V] [-a | -n node,node...][attr=value attr=value ...]\n       -n Node List (comma-separated)(default will be premanaged nodes)\n       attr=value   attr={Netmask, Gateway, Nameserver[s]}\n       -a Do all premanaged nodes\n'
IMsgCDHCPNETMASKVAL	112	3	'Netmask     = \"%1$s\".\n'
IMsgCDHCPGATEWAYVAL	113	3	'Gateway     = \"%1$s\".\n'
IMsgCDHCPNAMESRVVAL	114	3	'Nameservers = \"%1$s\".\n'
IMsgCDHCP_SUBNET	115	3	'Subnet      = \"%1$s\".\n'
IMsgNOT_FOUND_IN_HOSTS	116	3	'Node: \"%1$s\" was not found in /etc/hosts.\n'
IMsgIP_NOT_ON_NET	117	3	'\"%1$s\" not on net \"%2$s\" / \"%3$s\"!\n'
IMsgGETTING_IP_RANGE	118	3	'Now getting the range of IP addresses...\n'
IMsgNODE_IP	119	3	'Node: \"%1$s\" IP: \"%2$s\" \n'
IMsgCHK_IFACE	120	3	'Checking other active devices...\n'
IMsgUpdateDHCP_USAGE	121	3	'updatedhcp [-v | -V][-h][-n node1, node2] \n'
EMsgBAD_DHCP	122	3	'%1$s: 2653-090 The /etc/dhcpd.conf file does not look correct.\n    The line: ### CSM STATIC ENTRIES in /etc/dhcpd.conf file could not be found.\n    Please run \'createdhcp\' first and then \'updatedhcp\'.\n'
EMsgNO_MAC_DEFINED	123	3	'%1$s: 2653-091 The MAC address for \"%2$s\" was not defined.\n'
EMsgINVALID_INSTALL_METH	124	3	'%1$s: 2653-092 Node \"%2$s\" does not have a valid install method.\n        The valid install methods are \"%3$s\".\n'
EMsgPREREQ_NOT_FOUND	125	3	'%1$s: 2653-093 Could not find the following prerequisite RPMs: \"%2$s\".\n'
EMsgERRM_NOT_STARTED	126	3	'%1$s: 2653-094 ERRM did not start - continuing with the installation of CSM anyway.\n'
EMsgDIFFERENT_ATTR	127	3	'%1$s: 2653-095 All nodes must have the same value for the %2$s attribute.\n'
EMsgNO_ATTR	128	3	'%1$s: 2653-096 The %2$s attribute is not set for any of the nodes.\n'
EMsgINVALID_MODE	129	3	'%1$s: 2653-097 Invalid value for Mode attribute: %2$s.  Valid Mode attributes are %3$s.\n'
EMsgNO_MAC	130	3	'%1$s: 2653-098 Could not get Mac address for %2$s.\n'
IMsgGETMACS_USAGE	131	3	'Usage: getmacs [-v | -V][-h][-f file][-d][-O][node list] \n        -h              Display usage information.\n        -v | -V         Verbose mode.\n        -d              Do not write data to CSM Database.\n        -O              Power off nodes when complete.\n        -f <filename>   Read nodes from a file.\n        node list       The list of nodes separated by spaces.\n\n'
IMsgREBOOTING_NODE	132	3	'Rebooting %1$s\n'
EMsgNODE_DID_NOT_REBOOT	133	3	'%1$s: 2653-100 Node: %2$s failed to reboot.\n'
EMsgNO_NODES	134	3	'%1$s: 2653-101 There are no valid nodes given.\n'
EMsgNODE_DID_NOT_POWER_OFF	135	3	'%1$s: 2653-102 Node: %2$s failed to power off.\n'
EMsgNO_FILECOPY	136	3	'%1$s: 2653-105 An error occurred when copying files to %2$s.\n'
EMsgCANT_OPEN	137	3	'%1$s: 2653-106 Could not open \"%2$s\".\n'
IMsgSETUP_CSM_USAGE_old	138	3	''
EMsgAIX_ONLY	139	3	'%1$s: 2653-107 This command may only be run on AIX systems.\n'
EMsgCANT_OPEN_FOR_CONSOLE	140	3	'%1$s: 2653-108 Cannot open \"%2$s\" to add remote console lines.\n'
IMsgADDING_LINE	141	3	'Adding line to %1$s: %2$s\n'
IMsgREMOVING_LINE	142	3	'Removing line from %1$s: %2$s'
EMsgERROR_RUNNING_COMMAND	143	3	'%1$s: 2653-109 An error occurred when attempting to execute %2$s.\n'
IMsgCheckingAtftp	144	3	''
IMsgfoundAtftp	145	3	''
IMsgAtftpRunning	146	3	''
IMsgAtftpNotUp	147	3	''
IMsgAtftpTryStart	148	3	''
IMsgAtftpNowRunning	149	3	''
IMsgAtftpCantUp	150	3	''
IMsgAtftpXinetdExistquest	151	3	''
IMsgAtftpXinetdExist	152	3	''
IMsgAtftpUrProblem	153	3	''
IMsgAtftpProblemHand	154	3	''
IMsgAtftpNotFound	155	3	''
IMsgDhcpCheck	156	3	'Checking to see that dhcp is up and running...\n'
IMsgDhcpMissing	157	3	'Missing /var/lib/dhcp/dhcpd.leases\n'
IMsgDhcpOutput	158	3	'dhcp : output...  %1$s  \n'
IMsgDhcpProblemRestart	159	3	'There is a problem with the dhcp server.\nTrying to restart dhcp server...\n'
IMsgDhcpNotWorking	160	3	'The dhcp server could not be started.\n'
IMsginstallnodeUsage_old	161	3	''
EMsgINSTALLNODE_NO_TARGET	162	3	'%1$s: 2653-110 There is no target for the installnode command.  Please specify a target with the -a, -P, -N or hostname positional arguments. \n'
IMsgNODES_ALREADY_INSTALLED	163	3	'%1$s nodes already installed. \n'
IMsgNODE_STATUS	164	3	'Node %1$s : %1$s. \n'
EMsgINVALID_INSTALL_METHOD	165	3	'%1$s: 2653-111 The following nodes have an unsupported InstallMethod: \"%2$s\". \n'
IMsgADD_TFTPBOOT_TO_EXPORTS	166	3	'Adding /tftpboot to /etc/exports.\n'
IMsgREMOVE_TFTPBOOT_FROM_EXPORTS	167	3	'Removing /tftpboot from /etc/exports.\n'
IMsgSTARTING_SERVICES	168	3	'Starting Services .\n'
IMsgSTARTING_SERVICE	169	3	'%1$s is not running.  Starting service.\n'
EMsgERROR_STARTING_SERVICE	170	3	'%1$s: 2653-112 Error starting \"%2$s\" service. \n'
EMsgModeSetErrMsg	171	3	'%1$s: 2653-113 Mode can only be set to PreManaged, Installing or Managed\n'
IMsgCSM_FANOUT	172	3	'CSM_FANOUT = %1$s, CSM_FANOUT_DELAY = %2$s .\n'
IMsgREBOOTING_NODE_FULL_INSTALL	173	3	'Rebooting Node for full install: %1$s\n'
IMsgREBOOT_INITIATED	174	3	'Rebooting and Installing Node. \n'
IMsgSLEEPING	175	3	'Sleeping for %1$s seconds (CSM_FANOUT_DELAY=%2$s).\n'
IMsgCANT_DSH_NODE	176	3	'Cannot run dsh on node \"%1$s\" \n'
EMsgNOT_INSTALLING_NODE	177	3	'%1$s: 2653-115 Not installing node %2$s.\n'
EMsgSETUPKS_ERROR	178	3	'%1$s: 2653-116 Error running csmsetupks. \n'
IMsgINSTALLING_FULLINSTALL_NODES	179	3	'Performing Full Install on Nodes: %1$s\n'
EMsgSETUP_PXELINUX_ERROR	180	3	'%1$s: 2653-117 Error setting up /tftpboot/pxelinux.pxe files. \n'
EMsgCANT_CHMOD	181	3	'%1$s: 2653-118 Cannot change the mode of \"%2$s\" to \"%3$s\". \n'
EMsgCANT_CREATE	182	3	'%1$s: 2653-119 Cannot create file \"%2$s\". \n'
IMsgSETTING_PXELINUX_TO_INSTALL	183	3	'Setting pxelinux to INSTALL for %1$s .\n'
EMsgCANT_COPY	184	3	'%1$s: 2653-120 Cannot copy %2$s to %3$s. \n'
IMsgVERIFYING_SETUPKS	185	3	'Verifying that csmsetupks was run properly.\n'
IMsgNO_NODES	186	3	'There are no nodes to verify . %1$s \n'
IMsgFILE_EXISTS	187	3	'File %1$s is in place. \n'
EMsgDHCP_NOT_DEFINED	188	3	'%1$s: 2653-121 Node: \"%2$s\" is not statically defined in \"%3$s\".\n'
IMsgDHCP_DEFINED	189	3	'Node %1$s is defined in \"%2$s\". \n'
EMsgNODES_MISSING_FILES	190	3	'%1$s: 2653-122 The following nodes had missing files:\n                          \t\"%2$s\".\n'
IMsgVERIFY_SETUPKS_OK	191	3	'It looks like csmsetupks ran okay. \n'
EMsgNOT_COPIED	192	3	'%1$s: 2653-123 \"%2$s\" was not copied to /csminstall by installms or copycsmpkgs.\n'
IMsgPREINSTALL_STATUS	193	3	'Status of nodes before the install: \n'
IMsgPrint_Msg	194	3	' %1$s \n'
IMsgNODES_TO_INSTALL	195	3	'Nodes to install:\n        %1$s\n'
IMsgPOSTINSTALL_STATUS	196	3	'Status of nodes after the install:  \n'
EMsgMISSING_CSMINSTALL_FILES	197	3	'%1$s: 2653-124 Files are missing from /csminstall/csm.\n'
EMsgCANT_START_TFTP	198	3	''
EMsgCANT_START_DHCP	199	3	'%1$s: 2653-126 Cannot start dhcp daemon.\n'
EMsgBADNODES	200	3	'%1$s: 2653-127 The following nodes had a problem installing:\n\t%2$s\n'
EMsgINIT_STATUS_ERROR	201	3	'%1$s: 2653-128 Error initializing the status directory or status file.\n'
IMsgUNINSTALLING_TFTP	202	3	''
IMsgINSTALLING_ATFTP_RETRY	203	3	''
IMsgmonitorinstallUsage	204	3	''
EMsgNoNodeDefined_error	205	3	'%1$s: 2653-129 No node defined. Error in program.\n'
IMsgNode_status	206	3	'Node status:  %1$s.\n'
IMsgFULL_INSTALL_INITATED	207	3	'Full Install Initiated.\n'
IMsgINSTALLNODE_VERIFY_ALL_FLAG	208	3	'WARNING:  The -a flag will cause all the nodes in your cluster to be installed.  Nodes that are already installed will be reinstalled.\n\nIf you want to install all the nodes in your cluster, press "y" to continue. Otherwise press Enter to quit.\n'
IMsgINSTALLNODE_NOT_INSTALLING	209	3	'No nodes will be installed.\n'
IMsgADDNODE_DEPRECATED	210	3	'The addnode command is deprecated.  Please run "definenode -U" instead.\n'
EMsgXINETD_MISSING	211	3	'%1$s: 2653-137 The %2$s directory is missing.  This probably means\nthat xinetd is not installed.\n'
EMsgBadCFMoption	212	3	'%1$s: 2653-130 Invalid cfmoption: %2$s\n'
EMsgBadSMSoption	213	3	'%1$s: 2653-060 Invalid smsoption: %2$s\n'
IMsgCHANGING_TFTP_XINETD_FILE	214	3	''
IMsgcheckrpmprereqsUsage	215	3	'Usage: checkrpmprereqs [-p <pkg_name>] [-v | -V] [-h] \n        -p <pkg_name>      Package name for which the open source rpm need \n                           to be verified.\n        -v | -V            Verbose mode\n        -h                 Display usage information\n'
EMsgRpmNotInstalled	216	3	'%1$s: 2653-131 %2$s prerequisite : %3$s is not installed .\n'
EMsgNoConsoleMethod	217	3	'%1$s: 2653-132 No Console Methods are defined in the system. At least one Console Method should be defined in /opt/csm/bin/*_console. \n'
EMsgNoPowerMethod	218	3	'%1$s: 2653-133 No Power Methods are defined in the system. At least one Power Method should be defined in /opt/local/*_power or /opt/csm/lib directory.\n'
EMsgNoValidConsoleMethod	219	3	'%1$s: 2653-134 : %2$s is not a valid ConsoleMethod. The valid console methods are %3$s .\n'
EMsgNoValidPowerMethod	220	3	'%1$s: 2653-135 : %2$s is not a valid PowerMethod. The valid power methods are %3$s .\n'
EMsgNoConfigInfo	221	3	'%1$s: 2653-136  Required attribute values were not found in the configuration information file for node %2$s.\n'
EMsgCommandFailed	222	3	'%1$s: 2653-140 Error: Command %2$s failed with return code %3$s.\n'
EMsgCANT_WRITE_FILE	223	3	'%1$s: 2653-141 Cannot open file %2$s for writing.\n'
EMsgCANT_READ_FILE	224	3	'%1$s: 2653-142 Cannot open file %2$s for reading.\n'
EMsgNO_TARGET	225	3	'%1$s: 2653-143 There is no target for this command. Please specify a target with the -a, -P, -M, -N, or hostname positional arguments.\n'
EMsgCANT_RUN	226	3	'%1$s: 2653-144 Error running command %2$s. Reported %3$s. \n'
EMsgSEMAPHORE_ERROR	227	3	'%1$s: 2653-146 Error: Cannot open file \"%2$s\" to lock. Reported %3$s.\n'
EMsgLOCK_ERROR	228	3	'%1$s: 2653-147 Error: Another execution of %2$s may be running. Cannot place lock on file \"%3$s\": %4$s. \n'
IMsgGet_Lock	229	3	'Getting lock on file %1$s for this execution of %2$s.\n'
EMsgCFM_and_P	230	3	'%1$s: 2653-148 Error: CFM or SMS cannot be run to nodes whose Mode is PreManaged.\n'
EMsgBad_Setup	231	3	'%1$s: 2653-149 An error occurred when setting up CSM installation and configuration files.\n'
EMsgNO_NFS	232	3	'%1$s: 2653-150 An error occurred when attempting to start NFS.\n'
EMsgNO_EXPORT	233	3	'%1$s: 2653-151 An error occurred when attempting to export /csminstall.\n'
EMsgNO_DSH	234	3	'%1$s: 2653-152 An error occurred when attempting to execute DSH.\n'
EMsgNO_ConfigFile	235	3	'%1$s: 2653-153 Could not create configuration information files.\n'
EMsgNO_NodemapFile	236	3	'%1$s: 2653-154 Could not create node name mapping file.\n'
EMsgNO_UpdateClient	237	3	'%1$s: 2653-155 Could not find updatenode.client script.\n'
EMsgNO_AKB_Hostname	238	3	'%1$s: 2653-156 Could not get hostname as known by the management server.\n'
EMsgNO_Attr_Values	239	3	'%1$s: 2653-157 Could not get node attribute values from the node config_info file.\n'
EMsgNO_CreateDir	240	3	'%1$s: 2653-158 Could not create the %2$s directory.\n'
EMsgNO_CopyFile	241	3	'%1$s: 2653-159 Could not copy the %2$s file to %3$s.\n'
EMsgNodesNotDefined	242	3	'%1$s: 2653-160 The following nodes are not defined: %2$s .\n'
IMsgcsmsetupksnodeUsage_old	243	3	''
EMsgBAD_ARGS_X_P	244	3	'%1$s: 2653-161 Cannot use -x with -p option.\n'
EMsgEth0NotUp	245	3	'%1$s: 2653-162 eth0 not up and running on Management Server.\n'
EMsgSETUPKS_NO_TARGET	246	3	'%1$s: 2653-163 There is no target for the csmsetupks command.  Please specify a target with the -a, -P, -N or -n flags.\n'
IMsgCOPYING_SRC_DST	247	3	'Copying  %1$s to  %2$s.\n'
EMsgNO_FILECOPY_RC	248	3	'%1$s: 2653-164 Cannot copy %2$s to %3$s.  %4$s.\n'
IMsgCOPYING_RPMS_OS	249	3	'Copying %1$s Images from %2$s.\n'
EMsgNOT_COPYING_LINUX_RPMS	250	3	'%1$s: 2653-165 Skipping %2$s.  This directory does not look like it contains the contents of a %3$s CD-ROM".\n'
EMsgNOTHING_COPIED	251	3	'%1$s: 2653-166 None of the directories had anything to copy (PKGPATH= %2$s).\n'
IMsgSETUP_MAC_COLLECTION	252	3	'Setting up MAC Address Collection.\n'
IMsgCREATING_GETMAC_RAMDISK	253	3	'Creating the Ramdisk for MAC Address Collection.\n'
IMsgCOLLECTING_MACS	254	3	'Collecting MAC Addresses for nodes %1$s\n'
IMsgRUNNING_GETMACS	255	3	'Running getmacs for nodes %1$s\n'
IMsgGETTING_MACS_VIA_DSH	256	3	'Attempting to use dsh to collect MAC addresses.\n'
IMsgFOUND_MACADDR	257	3	'Found MAC Address for node %1$s : %2$s.\n'
IMsgSETUP_KICKSTART	258	3	'Setting up Kickstart.\n'
IMsgSETUP_PXE	259	3	'Setting up PXE.\n'
IMsgCREATING_KS_FILE	260	3	'Creating Kickstart Configuration File %1$s.\n'
IMsgCREATING_FIRSTBOOT_FILE	261	3	'Creating Firstboot Script %1$s.\n'
IMsgGENERATING_DHCP	262	3	'Generating /etc/dhcpd.conf file for MAC address collection.\n'
IMsgUPDATING_DHCP	263	3	'Adding nodes to /etc/dhcpd.conf file for Kickstart install: %1$s.\n'
EMsgERROR_COPYING_RPMS	264	3	'%1$s: 2653-167 Error while copying the %2$s Images.\n'
EMsgCANT_SETUP_PXE	265	3	'%1$s: 2653-168 Error setting up PXE.\n'
EMsgGETMACS_ERROR	266	3	'%1$s: 2653-169 Error getting MAC addresses.\n'
EMsgSETUPKS_ERROR_KS	267	3	'%1$s: 2653-170 Error setting up Kickstart configuration file.\n'
EMsgUPDATEDHCP_ERROR	268	3	'%1$s: 2653-171 Error running updatedhcp.\n'
EMsgSET_INSTALLMETHOD_ERROR	269	3	'%1$s: 2653-172 Error setting InstallMethod attribute to "kickstart".\n'
EMsgNO_DHCP_ENTRY	270	3	'%1$s: 2653-173 The IP address of node %2$s is not found in the /etc/dhcpd.conf file.\n'
IMsgNodeNodesCategory	271	3	'There aren\'t any nodes in that category to be displayed\n'
IMsgNodeDisplay	272	3	'Node %1$s \n'
IMsgNoStatusFile	273	3	'No status file. \n\n\n'
IMsgPrintWarning	274	3	'Warnings: \n'
IMsgGettingEspPortNumber	275	3	'Getting esp port number.\n'
IMsgPrintNodeAndNodeAttrs	276	3	'%1$s : %2$s \t= %3$s\n'
IMsgPrintHostNameMgmtServer	277	3	'%1$s : ManagementServer \t= %2$s\n'
IMsgPrintNewFormatOutput	278	3	'\n %1$s :\n'
EMsgNoNodesProvided	279	3	'%1$s: 2653-175 No nodes provided.\n'
EMsgKill	280	3	'%1$s: 2653-176 The program was terminated by the user.\n'
EMsgAssignAttrToMultNodes	281	3	'%1$s: 2653-177 Cannot assign the same %2$s to more than one node.\n'
EMsgINVALID_ARGS_WITH_C	282	3	'%1$s: 2653-178 Cannot provide ConsolePortNum, ConsoleServerNumber or ConsoleServerName attributes with -C.\n'
EMsgINVALID_ARGS_WITH_H	283	3	'%1$s: 2653-179 Cannot provide HWControlPoint attribute with -H.\n'
IMsgrmnodeClientNodeUsage	284	3	'Usage: rmnode.client [-v | -V] [-h] \n        -v | -V            Verbose mode\n        -h                 Display usage information\n'
EMsgCannotDelete	285	3	'%1$s: 2653-180 Cannot delete directory or file %2$s.\n'
EMsgRemoveRpm	286	3	'%1$s: 2653-181 Cannot erase  rpm package %2$s.\n'
EMsgRemoveInstallpImg	287	3	'%1$s: 2653-182 Cannot uninstall installp package %2$s.\n'
IMsgUninstallingCsm	288	3	'Uninstalling CSM ...\n'
IMsgREADING_HOSTNAME_MAP	289	3	'Reading hostname map file: \"%1$s\".\n'
EMsgHOSTMAP_NO_HOSTNAME	290	3	'%1$s: 2653-183 The hostname map file has no hostname on line %2$s.  This node will not be defined.\n'
EMsgERROR_IN_HOSTNAME_MAP	291	3	'%1$s: 2653-184 Errors in hostname map file: \"%2$s\".\n'
IMsgcopycsmpkgsUsage_old	292	3	''
EMsgNO_CORE_COPY	293	3	'%1$s: 2653-185 Could not get the CSM version from the system. Please supply the valid CSM version attribute value or please install csm.core package first .\n'
IMsgVALID_ATTRS	294	3	'Valid attributes are:\n\t%1$s\n'
EMsgSkipToValidHeader	295	3	'%1$s: 2653-188 Skipping to the next valid header.\n'
EMsgNoMultStanzas	296	3	'%1$s: 2653-189 Node \"%2$s\" appears in multiple stanzas.  It will not be defined.\n'
IMsguninstallmsUsage	297	3	'Usage: uninstallms [-v | -V] [-h] [-u] [-f] \n        -u         Removes and cleans up nodes before uninstalling \n                   the management server.\n                   (Issues rmnode -u before uninstalling.)\n        -f         Force. Uninstalls Management Server without prompting\n        -v | -V    Verbose mode\n        -h         Display usage information\n'
EMsgCannotRemoveNodegrpMembers	298	3	'%1$s: 2653-191 Cannot remove the members of the nodegroup.\n'
EMsgCannotRemoveNodegrp	299	3	'%1$s: 2653-192 Cannot remove nodegroup from the system.\n'
IMsgCSM2NIMGRPS_USAGE_old	300	3	''
EMsgNO_AandN	301	3	'%1$s: 2653-193 Cannot use the -a flag together with the -N flag.\n'
EMsgAIX_MS_ONLY	302	3	'%1$s: 2653-194 This command may only be run on an AIX management server.\n'
EMsgAorN_REQ	303	3	'%1$s: 2653-195 Either the -a or -N flag must be specified.\n'
EMsgINV_FORMAT	304	3	'%1$s: 2653-196 An invalid format was used on the command line.\n'
EMsgNO_NIM_GROUPS	305	3	'%1$s: 2653-197 Could not get list of NIM groups.\n'
EMsgINV_GRP_NAME	306	3	'%1$s: 2653-198 An invalid group name (%2$s) was provided on the command line.\n'
IMsgHAS_NO_MEMB	307	3	'Group %1$s has no members. Skipping to the next group.\n'
IMsgALREADY_NIM_GROUP	308	3	'NIM group %1$s already exist. Skipping to the next group.\n'
IMsgCSM2NIMNODES_USAGE_old	309	3	''
EMsgBAD_ARGS	310	3	'%1$s: 2653-199 Incorrect arguments were used when calling this command.\n'
EMsgRINGorCABLE_REQ	311	3	'%1$s: 2653-200 Either the \"cable_type\" or \"ring_speed\" must be provided.\n'
EMsgCSM2NIMNODES_NO_TARGET	312	3	'%1$s: 2653-201 There is no target for the csm2nimnodes command.  \nPlease specify a target with the -a, -n or -N arguments.\n'
EMsgINVALID_OPT	313	3	'%1$s: 2653-202 An invalid value was specified for the \"%2$s\" attribute.\n'
EMsgVALUE_MISSING	314	3	'%1$s: 2653-203 The value of the \"%2$s\" attribute for node \"%3$s\" is missing.\nSkipping to the next node.\n'
EMsgNO_LINUX	315	3	'%1$s: 2653-042 Linux nodes are not valid when using this command.\nSkipping \"%2$s\".\n'
IMsgNIM_MACH_CREATE	316	3	'Created the \"%1$s\" NIM machine definition.\n'
IMsgNIM_MACH_UPDATE	317	3	'Updated the \"%1$s\" NIM machine definition.\n'
IMsgNIM_NO_UPDATE	318	3	'Did not update the NIM machine definition for \"%1$s\". \nSkipping to the next node.\n'
EMsgNO_NIM_CLIENTS	319	3	'%1$s: 2653-204 Could not get list of NIM clients.\n'
IMsgDidnotRemoveDir	320	3	'Did not remove the directories or files %1$s.\n'
IMsgDidnotRemovePkgs	321	3	'Did not Remove the Packages %1$s.\n'
EMsgDSHCannotConnect	322	3	'%1$s: 2653-206 dsh, using protocol %2$s, cannot connect to nodes: %3$s.\n'
IMsgPasswd_old	323	3	''
IMsgCopySSHKeys	324	3	'Copying OpenSSH public keys to target nodes.\n'
IMsgGatherSSHserverKeys	325	3	'Gathering nodes OpenSSH server keys and placing in /root/.ssh/known_hosts[2] files.\n'
EMsgRemoteShellSetupFailed	326	3	'%1$s: 2653-207 Remote Shell setup failed on node(s) %2$s.\n'
EMsgRemoteShellSetupFailed_MS	327	3	'%1$s: 2653-208 Remote Shell setup failed on the management server.  The install of the nodes will continue anyway.\n'
IMsgNoSetupRemoteProtocol	328	3	'The setup of Remote Shell %1$s cannot be automated through this tool.\n'
IMsgremoteshellexpectUsage	329	3	'Usage: remoteshell.expect [-t remote_shell hostname] [-k] [-n hostname] \n         [-s node_list] [-rA managment_server node_list] [-rL management_server node_list] [-rS management_server node_list] \n.'
EMsgWrongHomePermissions	330	3	'%1$s: 2653-209 Directory %2$s has invalid permissions for Remote Shell Setup. Please ensure the write bits for both group and other are turned off.\n'
IMsgDidnotUninstallOpenSrcPkgs	331	3	'Did not uninstall the Open Source prerequisites.\n'
IMsgDidnotUnconfigureRemoteShellServer	332	3	'The remote shell (SSH or RSH) have not been unconfigured on the Management Server. To ensure security, you should unconfigure the remote shell on the server manually.\n'
IMsgDidnotUnconfigureRemoteShellNode	333	3	'The remote shell (SSH or RSH) have not been unconfigured on the Managed Nodes. To ensure security, you should unconfigure the remote shell on the nodes manually.\n'
EMsgNoArch	334	3	'%1$s: 2653-210 InstallPkgArchitecture attribute must be provided.\n'
EMsgNoDistributionName	335	3	'%1$s: 2653-211 InstallDistributionName attribute must be provided.\n'
EMsgNoDistributionVersion	336	3	'%1$s: 2653-212 InstallDistributionVersion attribute must be provided.\n'
EMsgNo_Dir_Export	337	3	'%1$s: 2653-024 The directory %2$s , to be exported, does not exist. please check for the directory existence.\n'
EMsgNo_Directory	338	3	'%1$s: 2653-028 %2$s directory need to be created. But a file exits with the same name. Move the file to another name and rerun the command.\n'
EMsgNoSetupRA_old	339	3	''
EMsgUnsupportedOS	340	3	'%1$s: 2653-040 Node %2$s has a unsupported value for InstallOSName attribute: %3$s\n'
IMsgUNINSTALLMS_VERIFY	341	3	'WARNING:  The command will remove all the nodes, nodegroups and uninstall Management Server.\nIf you want to continue , press "y". Otherwise press Enter to quit.\n'
IMsgUNINSTALLMS_VERIFY_U	342	3	'WARNING:  The command will clean the nodes and remove all the nodes, nodegroups and uninstall Management Server.\nIf you want to continue , press "y". Otherwise press Enter to quit.\n'
IMsgUNINSTALLMS_NOT_UNINSTALLING_old	343	3	''
IMsgGPL_LICENSE	344	3	'\nCSM requires the Freeware Package syslinux to be installed.   \nFreeware Packages are provided "AS IS" and are not warranted or  \nsupported by IBM.  IBM disclaims all liability for any damages \n(including without limitation direct and indirect damages) arising in \nconnection with these Freeware Packages.  Freeware Packages are \nlicensed under the terms of the GPL, a copy of which is included in \neach Freeware Package.  For more information about the license terms \nand source availability of these Freeware Packages, see \nhttp://www.linux.org/info/gnu.html and http://freshmeat.net/projects/syslinux, \n\n'
IMsgPRESS_ENTER_TO_INSTALL	345	3	'Press enter to install syslinux and CSM, or any other character to quit:\n'
IMsgCSM_NOT_INSTALLING	346	3	'CSM will not be installed.\n'
IMsgINSTALLING_DIRECTOR	347	3	'Installing the IBM Director Agent and Linux Cluster Support Extension.\n'
EMsgLINUX_ONLY_FLAG	348	3	'%1$s: 2653-213 The %1$s flag can only be used on a Linux machine.\n'
EMsgHostnameMap	349	3	'%1$s: 2653-041 The hostname command returns %2$s on the following nodes: %3$s. Operations will not be completed on these nodes. Please make sure each node has a unique hostname.\n'
EMsgNoAutoupdate	350	3	'%1$s: 2653-073 The Autoupdate RPM is missing from %2$s. This means that Autoupdate is probably not installed on the nodes. Please download the Autoupdate RPM from %3$s and place it in %4$s.\n'
IMsgMissingRPM	351	3	'The %1$s RPM is missing. This may prevent the use of some CSM funtionality. Please consult the Install Guide for information on where to get this RPM.\n'
EMsgAutoupdateNotInstalled	352	3	'%1$s: 2653-079 Autoupdate is not installed. Software Maintenance cannot be performed on this node.\n'
IMsgINSTALLMS_SUCCESSFUL	353	3	'Installation of CSM has successfully completed!\n'
EMsgINSTALLMS_UNSUCCESSFUL	354	3	'%1$s: 2653-214 Installation of CSM was unsuccessful (rc = %2$s).\n'
EMsgINETD_MISSING	355	3	'%1$s: 2653-301 The %2$s file is missing.  This probably means\nthat inetd is not installed.\n'
EMsgSETUPSIS_ERROR	356	3	'%1$s: 2653-302 Error running csmsetupsis. \n'
IMsgVERIFYING_SETUPSIS	357	3	'Verifying that csmsetupsis was run properly.\n'
IMsgVERIFYING_SETUPSIS_OK	358	3	'It looks like csmsetupsis ran okay. \n'
EMsgSETUPSIS_NO_TARGET	359	3	'%1$s: 2653-303 There is no target for the csmsetupsis command.  Please specify a target with the -a, -P, -N or -n flags.\n'
IMsgSETUP_SIS	360	3	'Setting up SIS.\n'
IMsgCREATING_SIS_FILE	361	3	'Creating SIS Configuration File %1$s.\n'
EMsgSETUPSIS_ERROR_SIS	362	3	'%1$s: 2653-304 Error setting up SIS configuration file.\n'
IMsgCOPYING_SISRPMS	363	3	'About to copy SIS RPMs.\n'
IMsgUPDATING_DHCP_SIS	364	3	'Adding nodes to /etc/dhcpd.conf file for SIS install: %1$s.\n'
EMsgBAD_ARGS_A_I	365	3	'%1$s: 2653-305 Cannot use -A with -I option.\n'
EMsgBAD_ARGS_A_I_2	366	3	'%1$s: 2653-306 Must specify either -A or -I option.\n'
IMsgcsmsetupsisnodeUsage	367	3	'Usage:  csmsetupsis [-h]\n        csmsetupsis [-v | -V] [-p pkg_path | -x]\n                    [-P | -a | [-N nodegroups] [-n node_list]]\n                    [ -A | -I ] image_name\n                    [Attr=value [Attr=value...]]\n        -a       Setup SIS for all nodes.  This cannot be used with\n                 the -n, -N or -P flags.\n        -A       Build a new image. This cannot be used with the -I flag.\n        -h       Writes usage information to standard output\n        -I       Using a preexist image. This cannot be used with the -A flag.\n        -n  node_list\n                 Provide a comma-separated list of nodes and node ranges to set\n                 up SIS for.  (See the noderange man page for information on\n                 node ranges.)  This option cannot be used with the -a or -P\n                 options.\n        -N  nodegroups\n                 Provide a comma-separated list of nodegroups to set up\n                 SIS for.  This cannot be used with the -a or -P flags.\n        -p  pkg_path\n                 Specifies one or more directories, separated by colons, that\n                 contain copies of the SuSE-SLES CD-ROMs.  The default is\n                 /cdrom.  This cannot be used with the -x flag.\n        -P       Setup SIS for all nodes whose Mode attribute is\n                 "PreManaged".  This cannot be used with the -a, -n or -N flags.\n        -v | -V  Writes the verbose messages of the command to standard output.\n        -x       Specifies to not copy  SuSE/SLES disks.  This cannot be used\n                 with the -p flag.\n        Valid attributes (see the csmsetupks man page for details):\n\t\t%1$s\n'
IMsgCOPYING_RPMS_SuSE	368	3	'Copying SuSE Images from %1$s.\n'
EMsgSET_CREATESISFILES_ERROR	369	3	'%1$s: 2653-307 Error creating sis script files.\n'
EMsgNOT_COPYING_SuSE_RPMS	370	3	'%1$s: 2653-308 Skipping %2$s. This directory does not look like it contains the contents of a SuSE CD-ROM".\n'
EMsgSET_MKBOOTSERVER_ERROR	371	3	'%1$s: 2653-309 Error when making boot server.\n'
EMsgERROR_PXE_RUN	372	3	'%1$s: 2653-310 Pxe daemon did not start up successfully.\n'
EMsgERROR_CHANGE_PXECMD	373	3	'%1$s: 2653-311 Error when changing pxe command.\n'
EMsgADDIMAGE_ERROR	374	3	'%1$s: 2653-312 Error adding new image.\n'
EMsgCREATE_IMAGESCRIPT_ERROR	375	3	'%1$s: 2653-313 Error creating image script.\n'
EMsgEXCESS_MAX_CONSOLE_NUM	376	3	'%1$s: 2653-314 Excess Max console server port number \"%2$s\".\n'
EMsgERROR_COPYING_LINUX_RPMS	377	3	'%1$s: 2653-315 Error while copying the RPM packages.\n'
EMsgNOManagementServer	378	3	'%1$s: 2653-316 This command can only be run on the Management Server.\n'
IMsgUNINSTALLMS_NOT_UNINSTALLING	379	3	'The Management Server has not been uninstalled.\n'
EMsgOSdiffer	380	3	'%1$s: 2653-103 The operating system of this machine: %2$s, does not match the value stored in the node\'s InstallOSName attribute: %3$s.\n'
EMsgOSDistdiffer	381	3	'%1$s: 2653-104 The operating system distribution of this machine: %2$s, does not match the value stored in the node\'s InstallDistributionName attribute: %3$s\n'
EMsgOSVersdiffer	382	3	'%1$s: 2653-138 The operating system version of this machine: %2$s, does not match the value stored in the node\'s InstallDistributionVersion attribute: %3$s\n'
IMsgGottaWait	383	3	'The following command may take some time.\n'
IMsgIMAGE_EXIST	384	3	'The image %1$s already exists!\n'
IMsgIMAGE_DOESNOT_EXIST	385	3	'The image %1$s does not exist!\n'
IMsgBUILDING_IMAGE	386	3	'Building image, please wait...\n'
IMsginstallmsUsage	387	3	'Usage: installms {-p <pkg_path> | -x} [-c] [-f] [-v | -V] [-h]\n                 [Attr=value [Attr=value...]]\n        -p <pkg_path>      List of directories containing packages (p1:p2:p3)\n        -c                 Force copy from the path\n        -f                 Force install\n        -x                 Do not copy packages.\n        -v | -V            Verbose mode\n        -h                 Display usage information\n        Valid attributes (see the installms man page for details):\n\t\t%1$s\n'
IMsgcsmsetupksnodeUsage	388	3	'Usage:  csmsetupks [-h]\n        csmsetupks [-v | -V] [-p pkg_path | -x] [-k kscfg_file]\n                   [-P | -a | [-N nodegroups] [-n node_list]]\n                   [Attr=value [Attr=value...]]\n        -a       Setup Kickstart for all nodes.  This cannot be used with\n                 the -n, -N or -P flags.\n        -h       Writes usage information to standard output\n        -k  kscfg_file\n                 Specifies a kickstart configuration template file. The\n                 default is /opt/csm/install/kscfg.tmpl.RedHat<version>.\n        -n  node_list\n                 Provide a comma-separated list of nodes and node ranges to set\n                 up Kickstart for.  (See the noderange man page for information\n                 on node ranges.)  This option cannot be used with the -a or -P\n                 options.\n        -N  nodegroups\n                 Provide a comma-separated list of nodegroups to set up\n                 Kickstart for.  This cannot be used with the -a or -P flags.\n        -p  pkg_path\n                 Specifies one or more directories, separated by colons, that\n                 contain copies of the Red Hat CD-ROMs.  The default is\n                 /mnt/cdrom.  This cannot be used with the -x flag.\n        -P       Setup Kickstart for all nodes whose Mode attribute is\n                 "PreManaged".  This cannot be used with the -a, -n or -N flags.\n        -v | -V  Writes the verbose messages of the command to standard output.\n        -x       Specifies to not copy Red Hat disks.  This cannot be used\n                 with the -p flag.\n        Valid attributes (see the csmsetupks man page for details):\n\t\t%1$s\n'
IMsgDidnotUninstallRsct	389	3	'Did not uninstall any RSCT packages as other application are using them.\n'
EMsgMinConserverNot	390	3	'%1$s: 2653-317 The conserver rpm must be 7.2.2-6 or higher. Copy the correct level of the rpm into %2$s and run "installms -x ".\n'
IMsgPasswd_Multi	391	3	'Please enter the password for the current user (normally root) for access to target nodes:'
EMsgDSHCannotConnect_Multi	392	3	'%1$s: 2653-139 dsh, using protocol %2$s, cannot connect to target nodes.\n'
IMsgISvrNotSupported	393	3	'Install servers are not currently supported for %1$s machines.\n'
EMsgRPMWrongVersion	394	3	'%1$s: 2653-187 The %2$s RPM is required, but %3$s is installed.  Remove %4$s and run "installms -x".\n'
IMsgLoading	395	3	'Loading %1$s.\n'
IMsgChecking_For	396	3	'Checking for %1$s.\n'
EMsgNoDefsFiles	397	3	'%1$s: 2653-190 No definition files to load in %2$s.\n'
IMsgMOVE_DIRECTORY	398	3	'Moving the directory %1$s to %2$s for backup.\n'
EMsgERROR_INSTALLED_SIS	399	3	'Cannot find the expected SIS directory, please verify if SIS was installed correctly.\n'
EMsgERROR_MOVE_DIRECTORY	400	3	'An error occurred when moving the directory %1$s to %2$s.\n'
EMsgERROR_LINK_SIS	401	3	'%1$s: An error occured when trying to move and link the SIS image directory.\n'
IMsgUpdateNodeUsage	402	3	'Usage: updatenode  [-h] \n       updatenode  [-v | -V] \n                   [-f] [-t | --test] [-k | -K[auth_meth,[auth_meth...] | hba]]\n                   [--nopwd][-I |--installcsm] [-F | --cfm] \n                   [--cfmoptions "options to pass to CFM"]\n                   [-S | --sms] [--smsoptions "options to pass to SMS"]\n                   {-a | -P | -M | -N nodegroups | --file file |\n                   [-n] node_list } \n        -a         Updates are performed on all nodes.\n        --cfmoptions "options to pass to CFM"\n                   Forwards options to the CFM command. This flag implies\n                   the [--F | --cfm] flag.\n        -F | --cfm \n                   Update the configuration files from /cfmroot.The -I, -S,\n                   and -F flags are the default behavior of updatenode. When\n                   individual command line options are used, updatenode only\n                   performs the actions specified by the given flags.\n        -f         force the updates of CSM filesets. Perform a\n                   binary check on configuration files .\n        --file filename\n                   specifies a file that contains a list of nodes names.\n                   If the file name "-", then the list is read from stdin.\n                   The file  can contain multiple lines and each line can have\n                   one or node names, separated by spaces.\n        -h         shows usage information.\n        [-n] node_list\n                   Specifies a comma or space separated list of node \n                   hostnames, IP addresses, or node ranges on which to \n                   run the command. (See the noderange man page for \n                   information on node ranges.)  Hostnames may not be \n                   specified with either of the -a, -P, or -M flags.\n                   Hostnames may be specified positional arguments or \n                   preceded by the -n flag.\n        -I | --installcsm\n                   Adds the nodes to the cluster and runs customization scripts.\n                   When run to Linux nodes, it will also install or update the\n                   CSM packages. The -I, -S, and -F flags are the default\n                   behavior of updatenode. When individual command line options\n                   are used, updatenode only performs the actions specified by\n                   the given flags.\n        -k         Exchange RSCT public keys between the node and management\n                   server. Only use this option if the RSCT public key of\n                   either of the machines or the Kerberos Version 5 \n                   host principal keytab has changed.  When this option is\n                   used you must trust your network at the time to be sure\n                   that a rogue machine is not going to insert their public\n                   key in place of the real node public key.\n                   With this option, the -I -F and -S options are run.\n        -K authentication_method_list  \n                   Specify a comma separated list of authentication\n                   methods to setup on the node. Valid options are   \n                   rsh, ssh, krb5, or hba.                               \n                   hba cannot be used in combination with ssh, krb5,or rsh.\n                   hba cannot be used with the -F, --cfm, --cfmoptions,    \n                   -S, --sms,or --smsoptions flags.\n                   rsh sets up remote shell authentication by creating a root\n                   .rhosts file on the node when all these conditions are true:\n                   * csmconfig shows SetupRemoteShell=1 & RemoteShell=/.../rsh.\n                   * rsh using Kerberos is currently failing to the node.\n                   * rexec is enabled on the node.\n                   ssh exchanges the ssh public keys, when:\n                   * csmconfig shows SetupRemoteShell=1 & RemoteShell=/.../ssh.\n                   * ssh using Kerberos is currently failing to the node. \n                   krb5 updates the Kerberos Version 5 krb5.keytab file\n                   on the node with the host principal keytab if SetupKRB5 > 8.\n                   hba exchanges RSCT public keys between the node and\n                   the management server. When hba is selected you must\n                   trust your network at the time to insure that a rogue\n                   machine is not going to insert their public\n                   key in place of the real node public key.\n        -M         Updates are performed on all nodes that are in "Managed"\n		           mode.\n        -N nodegroups\n                   Specifies a comma-separated list of nodegroups on which to\n                   run the command. This flag may not be used with either of the\n                   -a, -P, or -M flags.\n        --nopwd    Do not prompt for the node password even if the remote shell\n                   is not set up yet.  (Normally, updatenode will prompt for the\n                   node root password and try to set it up in this case.)\n        -P         Updates are performed on all nodes that are in "PreManaged"\n                   mode.\n        -t | --test\n                   Only report what would be done by the command. Do not\n                   perform any updates.\n        -S | --sms\n                   Installs/updates the Linux RPMS stored under the /csminstall\n                   subdirectory corresponding to the target Linux node. The -I,\n                   -S, and -F flags are the default behavior of updatenode. When\n                   individual command line options are used, updatenode only\n                   performs the actions specified by the given flags.\n        --smsoptions "options to pass to SMS"\n                   Forwards options to the SMS command. This flag implies the\n                   [--S | --sms] flag. All flags following the --smsoptions\n                   operand must be enclosed within double quotes. The following\n                   are the allowed flags "[--noinsdeps] [-i | --install\n                   packagename(s)] [-e | --erase [[--deps] | [--nodeps]]\n                   packagename(s)] [-p | --packages packagename(s)]",\n                   where packagename(s) denotes a commas separated list. \n        -v | -V    Verbose mode.\n'
IMsgCHANGE_TO_NON_CDROM_DRIVE	403	3	'Please start the %1$s command from a directory other than %2$s.\n'
EMsgNoCustScripts	404	3	'%1$s: 2653-215 Could not get lists of customization scripts.\n'
EMsgSkipDir	405	3	'%1$s: 2653-216 The directory \"%2$s\" does not exist.\nSkipping to the next directory.\n'
EMsgSkipScript	406	3	'%1$s: 2653-217 Skipping to the next script name.\n'
EMsgExecScript	407	3	'%1$s: 2653-218 Script \"%2$s\" is not executable.\n'
IMsgListScript	408	3	'\"%1$s\" will be run on the following nodes: \"%2$s\"\n'
EMsgBadScript	409	3	'%1$s: 2653-219 An incorrect file name format was used for the script \"%2$s\".  \"%3$s\" is neither a node name nor a group name.\n'
IMsgUpdatenode_Running	410	3	'Updatenode is running\n'
IMsgUpdatenode_Failed	411	3	'Updatenode failed\n'
EMsgMSNoInstallServer	412	3	'%1$s: 2653-205 Node %2$s is its own management server, therefore it does not need an install server and it will use its own CSM files for install.\n'
IMsgMSisInstallServer	413	3	'The install server for %1$s is the same as the management server, therefore the existing CSM files will be used.\n'
IMsgPxebootMacUsage	414	3	'Usage: pxeboot_mac [-h]\n       pxeboot_mac [-v | -V] {[-f nodlist_file | -n node_list]} \n                   [Attr=value [Attr=value...]] \n       \n       -f<nodelist_file>   The name of the file which contains list of \n                           nodes to process. \n       -h                  Display usage information. \n       -n<node_list>\n                           Provide a comma-seperated list of nodes.\n                           This option cannot be used with the -f options.\n       -v | -V             Display verbose messages to standard out\n\nFor a list of valid attributes to use in the Attr=value pairs, refer\nto the documentation related to pxeboot_mac.\n'
IMsgHWStatbootMacUsage	415	3	'Usage: hwstat_mac [-h]\n       hwstat_mac [-v | -V] {[-f nodlist_file | -n node_list]} [Attr=value [Attr=value...]] \n       \n       -f<nodelist_file>   The name of the file which contains list of \n                           nodes to process. \n       -h                  Display usage information. \n       -n<node_list>\n                           Provide a comma-separated list of nodes.\n                           This option cannot be used with the -f options.\n       -v | -V             Display verbose messages to standard out\n\nFor a list of valid attributes to use in the Attr=value pairs, refer\nto the documentation related to hwstat_mac.\n'
IMsgCSMSetupBootUsage	416	3	'Usage: csmsetupboot [-h]\n       csmsetupboot [-v | -V]  {[-b boot_method]}  [-P yes|no|onlyhex] {[-f nodelist_file | -n node_list]}  [Attr=value [Attr=value...]] \n       \n       -b<boot_method>     The type of boot to be setup for: Supported values are \n                           "getmacs", "kickstart", "sis" and "disk" . \n       -P                  Option to generate hex files. \n       -f<nodelist_file>   The name of the file which contains list of \n                           nodes to process. \n       -h                  Display usage information. \n       -n<node_list>\n                           Provide a comma-seperated list of nodes.\n                           This option cannot be used with the -f options.\n       -v | -V             Display verbose messages to standard out\n\nFor a list of valid attributes to use in the Attr=value pairs, refer\nto the documentation related to csmsetupboot .\n'
IMsgCsmsetupksNetmaskNotUsed	417	3	'Netmask - this attribute is no longer used.\n'
IMsgGetmacsObsolete	418	3	'getmacs - this program is obsolete, instead use "getadapters". Now invoking getadapters.....\n'
IMsgdefinenodeUsage	419	3	'Usage: definenode [-h]\n        definenode [-v | -V] [-s][-m][-U] [--nopwd] -f nodedef_file \n        definenode [-v | -V] [-s][-m][-U] [--nopwd] -M HostnameMapFile [-C ConsoleServers]\n                   [--minmanaged] [Attr=value [Attr=value...]]\n        definenode [-v | -V] [-s][-m][-U] [--nopwd] [-n node_list [-c count]] \n                   [-C ConsoleServers] [-H HWControlPoints] \n                   [--minmanaged] [Attr=value [Attr=value...]]\n\n        -c count            Number of nodes to define (default = 1).\n                            This flag cannot be used with the -n flag if\n                            more than one node is specified with the -n flag.\n        -C ConsoleServers   List of console servers\n                    Format: csname[:csnum[:port[:num_nodes]]][,...]\n                            csname    = Console server hostname or IP addr\n                            csnum     = Console server number (default=1)\n                            port      = Starting console port number (default=0)\n                            num_nodes = Number of nodes controlled by this\n                                        Console Server (default=1)\n        -f nodedef_file     The name of the file which contains node \n                            definition information.  A sample node \n                            definition file is in\n                            /opt/csm/install/nodedef.sample. See the nodedef\n                            man page for more information.  This flag cannot\n                            be used with the -n, -c --minmanaged or -M flags.\n        -h                  Display usage information\n        -H HWControlPoints  List of hardware control points\n                    Format: hwctrlpt[:num_nodes][,...]\n                            hwctrlpt  = Hardware Control Point host name\n                                        or IP address.\n                            num_nodes = Number of nodes controlled by this\n                                        Hardware Control Point (default=1)\n        -m                    Modify existing node definition if a node\n                            attribute changes\n       --minmanaged         Sets the Mode Attribute to MinManaged on the specified\n                            nodes.  Cannot be used with the -f flag.\n        -M HostnameMapFile  Name of a file that map hostnames or IP addresses\n                            to hardware control information.  This file is\n                            initially created by redirecting the output of \n                            the lshwinfo command.  This flag cannot be used\n                            with the -n, -c or -f flags.\n        -U                  After defining the nodes, the updatenode command\n                            is run to install the nodes.\n        -s                  Send the list of node definitions to standard \n                            out instead of defining the nodes.\n        -n node_list        The list of nodes to define.  This is a space or\n                            comma separated list of hostnames, ip addresses\n                            or node ranges (See the noderange man page for\n                            information on node ranges). Space separated lists\n                            must be double quoted.  This flag cannot be\n                            used with the -c flag if more than one node is\n                            is specified with the -n flag.\n        -v | -V             Display verbose messages to standard out\n        --nopwd             Do not prompt for Kerberos Version 5 \n                            administrator name and password.          \n                            Bypasses the Kerberos Version 5 setup.  \n\nFor a list of valid attributes to use in the Attr=value pairs, refer\nto the man page for nodeattributes.\n'
EMsgINVALID_ARGS_WITH_c	420	3	'%1$s: 2653-220 Cannot use the -c flag when multiple nodes or a node range are specified with the -n flag.\n'
EMsgCSMSETUPBOOT_NO_TARGET	421	3	'%1$s: 2653-221 No target specified for this command. Please specify a target with the -f or -n option.\n'
EMsgLiteNodes	422	3	'%1$s: 2653-222 Cannot perform this command on the following nodes whose Mode is %2$s: %3$s.\n'
IMsgUpdateisvrUsage	423	3	'Usage: updateisvr [-h]  [-v | -V]\n                   {-a | --file filename | -N nodegroups [[-n] node_list]}\n        -a   update all install servers\n        --file filename\n                   specifies a file that contains a list of install server\n                   names.\n        -h         shows usage information.\n        [-n] node_list\n                   Specifies  a list of install server hostnames, IP\n                   addresses, or node ranges on which to run the command.\n                   (See the noderange man page for information on node ranges.)\n        -N nodegroups\n                   Specifies one or more nodegroups on which to run the\n                   command.\n        -v | -V    Verbose mode.\n'
EMsgNotIsvr	424	3	'%1$s: 2653-223 This machine: %2$s, is not defined as an install server for any nodes. Run "lsnode -a InstallServer" for a list of all defined install servers.\n'
EMsgNoIsvrsGiven	425	3	'%1$s: 2653-224 None of the given machines either are install servers, or have install servers defined.  Run "lsnode -a InstallServer" for a list of all defined install servers.\n'
IMsgREBOOT_FAILED	426	3	'Reboot failed\n'
IMsgCSMSETUPBOOT_NO_BOOT_METHOD	427	3	'No boot method specified.\n'
EMsgNO_POWER_ATTRS_FOR_MS	428	3	'%1$s: 2653-225 The node %2$s is the management server.   The HWControlPoint, HWControlNodeId and PowerMethod attributes cannot be assigned to a node that is the management server.\n'
EMsgNoRpmFound	429	3	'%1$s: 2653-226 The following RPMs could not be found: %2$s\n'
EMsgNoFilesetFound	430	3	'%1$s: 2653-227 The following filesets are not found: %2$s\n'
IMsgPasswd	431	3	'Please enter the password for the current user (normally root) to access the nodes %1$s:'
IMsgcopycsmpkgsUsage	432	3	'Usage: copycsmpkgs [-v | -V] [-h] [-c] -p <pkg_path> [Attr=value [Attr=value...]]\n        -p <pkg_path>      List of directories containing packages (p1:p2:p3)\n        -c                   Force copy from the path\n        -v | -V            Verbose mode\n        -h                 Display usage information\nValid attributes:\n  InstallCSMVersion          (default is Management Server CSM version)\n  InstallOSName              (default is Management Server OS name)\n  InstallDistributionName    (default is Management Server Distribution name)\n  InstallDistributionVersion (default is Management Server Distribution version)\n  InstallPkgArchitecture     (default is Management Server package architecture)\n'
EMsgFSTAB_INV_FORMAT	433	3	'%1$s: 2653-318 The fstab file \"%2$s\" has an invalid format.\n'
EMsgNETWORK_INV_TYPE	434	3	'%1$s: 2653-319 The network type \"%2$s\" specified in config file: \"%3$s\" is invalid. \n        Valid network type: dhcp or static.\n'
EMsgDEFINE_PARTITION_TABLE_ERROR	435	3	'%1$s: 2653-320 Error defining partition table with the image.\n'
EMsgCONFIG_IMAGE_ERROR	436	3	'%1$s: 2653-321 Error while configing the image based on the config file and distribution.\n'
IMsgGETTING_MACS_VIA_PXEBOOT	437	3	'Attempting to use pxeboot to collect MAC addresses.\n'
IMsgNO_SERIAL_DEVICE	438	3	'%1$s - no console serial device defined. Cannot use pxeboot to get MAC address.\n'
IMsgCreatingDirectories	439	3	'Creating the required directories for CSM.\n'
IMsgSearchingfor	440	3	'Searching for %1$s RPMs.\n'
IMsgCopyingRpms	441	3	'Copying  %1$s RPMs.\n'
IMsgSearchAndCopy	442	3	'Searching and copying the %1$s RPMs.\n'
IMsgChangeNodeAttr	443	3	'%1$s: Changing %2$s from: \"%3$s\" to: \"%4$s\".\n'
IMsgSkipSubDir	444	3	'The \"%1$s\" subdirectory will not be checked for user-provided customization scripts.\n'
EMsgBadScriptName	445	3	'%1$s: 2653-228 \"%2$s\" is not a valid customization script name.\n'
IMsgUPDATING_DHCP_AUTOYAST	446	3	'Adding nodes to /etc/dhcpd.conf file for AutoYaST install: %1$s.\n'
IMsgSETUP_YAST	447	3	'Setting up autoyast.\n'
EMsgUnsupportedRpmName	448	3	'%1$s: 2653-229 The %2$s packaged by %3$s is already installed. This version of %4$s is not supported. Please uninstall this rpm and run installms -x.\n'
IMsgVERIFYING_SETUPYAST_OK	449	3	'Verifying that csmsetupyast was run properly.\n'
IMsgCREATING_YAST_FILE	450	3	'Creating AutoYaST Configuration File %1$s.\n'
EMsgPARSING_YAST_FILE	451	3	'%1$s: 2653-230 Parsing autoyast control file %2$s error, a control file should include <configure>,<install>,<partitioning> sections.\n'
IMsgOkToRemove	452	3	'Ok to remove %1$s (Y/N): '
IMsgUNINSTALLING	453	3	'Uninstalling %1$s.\n'
IMsgRemoveFileOrNoInstall	454	3	'CSM will not continue installing until %1$s is removed.\n'
IMsgcsmsetupyastUsage	455	3	'Usage:  csmsetupyast [-h]\n        csmsetupyast [-v | -V] {-p pkg_path | -x} [-k yastcfg_file]\n                   {-P | -a | [-N nodegroups] [-n node_list]}\n                   [Attr=value [Attr=value...]]\n        -a       Setup AutoYaST for all nodes.  This cannot be used with\n                 the -n, -N or -P flags.\n        -h       Writes usage information to standard output\n        -n  node_list\n                 Provide a comma-separated list of nodes and node ranges to set\n                 up AutoYaST for.  (See the noderange man page for information\n                 on node ranges.)  This option cannot be used with the -a or -P\n                 options.\n        -N  nodegroups\n                 Provide a comma-separated list of nodegroups to set up\n                 AutoYaST for.  This cannot be used with the -a or -P flags.\n        -p  pkg_path\n                 Specifies one or more directories, separated by colons, that\n                 contain copies of the SuSE/SLES CD-ROMs.  The default is\n                 /media/cdrom.  This cannot be used with the -x flag.\n        -P       Setup AutoYaST for all nodes whose Mode attribute is\n                 "PreManaged".  This cannot be used with the -a, -n or -N flags.\n        -v | -V  Writes the verbose messages of the command to standard output.\n        -x       Specifies to not copy SuSE/SLES disks.  This cannot be used\n                 with the -p flag.\n        -k  yastcfg_file\n                 Specifies a AutoYaST control file. The\n                 default is /opt/csm/install/yastcfg.SLES<version>.xml.\n        Valid attributes (see the csmsetupyast man page for details):\n\t\t%1$s\n'
EMsgUNINSTALLMS_RUN_RMLCSEXT	456	3	'%1$s: 2653-231 The Linux Cluster Support extension is installed.  Please run "rmlcsext -A" first, and then run uninstallms again.\n'
EMsgWRONG_DISK	457	3	'%1$s: 2653-232 The disk in the CD-ROM drive does not look like %2$s disk %3$s.\n'
IMsgPRESS_ENTER_OR_FORCE	458	3	'Press Enter to continue, or press "F" to force the use of this disk.\n'
IMsgCOPYING_DISK	459	3	'Copying %1$s disk %2$s.\n'
IMsgAIXandINSTALL_CSM	460	3	'%1$s: The "I" or "--installcsm" flag will not install CSM software onto AIX nodes.  Instead, use AIX tools such as NIM.\n'
EMsgAIXandInstallms	461	3	'%1$s: 2653-233 The installms command is not supported on AIX management servers.  Please see the CSM Planning and Installation Guide for instructions on how to use base AIX commands to install the management server.\n'
EMsgCopyingAIXpkgs	462	3	'%1$s: 2653-234 CSM does not manage the installation of AIX packages.  See the CSM Planning and Installation Guide for instructions on how to use base AIX commands to install CSM onto AIX nodes.\n'
EMsgSETUPYAST_NO_TARGET	463	3	'%1$s: 2653-235 There is no target for the csmsetupyast command.  Please specify a target with the -a, -P, -N or -n flags.\n'
IMsgMonitorinstallUsage	464	3	'Usage: monitorinstall [-h][-v | -V][-e][-i][-l][-u][-a] \n                    [-n node_list] [-f filename] [-N nodegroups]\n               -a          Monitor all nodes. This is the command default.\n               -f filename\n                    The name of the file which contains list of \n                    nodes to process. \n               -h   Display usage information. \n               -n node_list \n                    Provide a comma-seperated list of nodes.\n                    This option cannot be used with the -f options.\n               -N nodegroups \n                    Provide a comma-seperated list of nodegroups.\n        -v | -V     Verbose mode.\n        -e          Shows only the nodes that had an error during the \n                    installation \n                    process. Can be used with -i or -u to display different \n                    types of nodes.\n        -i          Shows only the nodes that are installed.\n        -l          Displays output in long format.\n        -u          Shows only the nodes that are not installed and nodes \n                    that are in the process\n                    of installing. \n\nExample: monitorinstall -vel\n         This will display all the nodes that had an error during the install\n         process, in long format, with the maximum amount of messages\n         being put on the screen (since the -v for verbose was done.)\n'
IMsgNO_NODES_TO_GETMACS	465	3	'No nodes to process getmacs.\n'
IMsgNO_NODES_TO_KICKSTART_SETUP	466	3	'No nodes to do kickstart setup.\n'
IMsgNO_NODES_TO_SIS_SETUP	467	3	'No nodes to do SIS setup.\n'
IMsgNoDeviceFile	468	3	'The device file specified for the HWControlPoint value, (%1$s), for node %2$s, does not exist.\n'
IMsgBadHCP	469	3	'The HWControlPoint value provided for one or more nodes was invalid.\n'
EMsgBadPowerMethod	470	3	'%1$s: 2653-236 Multiple nodes may not be specified when using a PowerMethod attribute of csp.\n'
EMsgNoCwPM	471	3	'%1$s: 2653-237 The -C option is not a valid option when specifying a PowerMethod of csp or hmc.\n'
EMsgERRinValues	472	3	'%1$s: 2653-238  Node definitions could not be created due to errors in one or more of the values provided.\n'
EMsgNoSetupRA_Off	473	3	'%1$s: 2653-239 Cannot setup remote authentication on the following unreachable nodes because they have a PowerStatus of 0: %2$s.\n'
IMsgRemoteSetupComplete	474	3	'Setup complete for remote shell: %1$s\n'
EMsgSETUPYAST_ERROR	475	3	'%1$s: 2653-240 Error running csmsetupyast. \n'
EMsgCANT_GET_NODE_ATTR	476	3	'%1$s: 2653-241 Cannot get the attribute %2$s for node %3$s.\n'
IMsgcsmsis2yastUsage	477	3	'Usage:  csmsis2yast [-h]\n        csmssis2yast [-v | -V] -s siscfg_file -y yastcfg_file\n                   [-o output_file ]\n        -h       Writes usage information to standard output\n        -o  output_file\n                 The pathname to the new AutoYast file that will be created.\n        -s  siscfg_file\n                 The pathname to a SIS config file, which include links to \n                 SIS partition table and package list file.\n        -v | -V  Writes the verbose messages of the command to standard output.\n        -y  yastcfg_file\n                 The pathname to an existing AutoYast configuration file.\n'
EMsgNO_SIS_FILE	478	3	'%1$s: 2653-242 No SIS config file specified.\n'
EMsgNO_YAST_FILE	479	3	'%1$s: 2653-243 No AutoYast config file specified.\n'
EMsgBAD_VALUE	480	3	'The value %1$s for the attribute %2$s/%3$s is invalid, please make sure it is a clean value without any MACRO.\n'
IMsgCONVERT_CONFIG	481	3	'Converting %1$s setting %2$s from SIS to yast...\n'
IMsgDISABLE_SIS	482	3	'CSM does not support SIS full installation now, please run "csmsetupyast" command on SuSE/SLES distribution instead.\n'
IMsgVERIFYING_AUTOYAST	483	3	'Verifying that csmsetupyast was run properly.\n'
IMsgVERIFYING_AUTOYAST_OK	484	3	'It looks like csmsetupyast ran okay. \n'
EMsgISVR_OF_ITSELF	485	3	'%1$s: 2653-244 %2$s is an install server of itself. The management server will be used to serve its files during the operating system install.\n'
IMsgSETUP_CSM_USAGE	486	3	'Usage: \n  csmsetupnim   [-h] [-v | -V] [-a] \n                [-N nodegroups] \n                [[-n] node_list] \n    -a    Sets up CSM customization scripts for all CSM nodes.\n          May not be used with the -n or -N flags.\n    -h    Display usage information.\n    [-n] node_list \n          Specifies a comma or space separated list of node hostnames, \n          IP addresses, or node ranges on which to run the command.\n          (See the noderange man page for information on node ranges.)\n          Hostnames may be specified as positional arguments or preceded \n          by the -n flag.\n    -N nodegroups \n          Specifies a comma separated list of one or more nodegroups \n          on which to run the command.\n    -v | -V    Verbose mode.\n'
IMsgCSM2NIMGRPS_USAGE	487	3	'Usage: \n    csm2nimgrps [-h] [-x] [-v | -V] [-a] \n                [-N nodegroups] \n        -a       NIM groups are created or updated for all CSM groups.\n                 This flag may not be used with the -N flag. \n        -h       Displays usage information.\n        -N       nodegroups \n                 Specifies one or more CSM nodegroups to be used \n                 to create or update NIM groups.\n        -v | -V  Verbose mode.\n        -x       Do not update existing NIM groups.\n'
IMsgCSM2NIMNODES_USAGE	488	3	'Usage: \n csm2nimnodes [-h] [-x] [-v | -V] [-a] \n              [-n node_list] \n              [-N nodegroups] [Attr=value[ Attr=value...]]\n    -a    Create NIM machine definitions for all CSM nodes.\n          May not be used with the -n or -N flags.\n    -h    Display usage information.\n    -n node_list \n          Specifies a comma separated list of node hostnames, IP \n          addresses, or node ranges on which to run the command. (See \n          the noderange man page for information on node ranges.) \n    -N nodegroups\n              Specifies one or more CSM nodegroups. \n    -v | -V   Verbose mode.\n    -x    Do not update existing NIM client definitions.\n    Attr=value[ Attr=value...] \n    Valid attributes:  type, network_name, ring_speed, cable_type,\n              platform, netboot_kernel.\n'
IMsginstallnodeUsage	489	3	'Usage: installnode [-h]\n        installnode [-v | -V] [-t timeout] { -P | -a | [-N nodegroups] [[-n] node_list][--file filename] }\n        -a          install all nodes whose InstallMethod attribute is \n                    kickstart.  This flag cannot be used with the -P or -N  \n                    flags or the node_list. \n        --file filename\n                   specifies a file that contains a list of nodes names.\n                   If the file name "-", then the list is read from stdin.\n                   The file  can contain multiple lines and each line can have\n                   one or node names, separated by spaces.\n        -h          Display this usage information.\n        [-n] node_list\n                    Space or comma separated list of nodes and node ranges.\n                    (See the noderange man page for information on node\n                    ranges.)  This option cannot be used with the -a or -P\n                    options.  Node names may be specified as positional\n                    arguments or preceded by the -n flag.\n        -N nodegroups \n                    Comma-separated list of nodegroups to install.  This \n                    flag cannot be used with the -a or -P flags. \n        -P          install all nodes whose Mode attribute is PreManaged and \n                    whose InstallMethod attribute is kickstart.  This flag \n                    cannot be used with the -a or -N flags or the node_list. \n        -t timeout\n                    Timeout in minitues. After this period the install \n                    process is assumed to be failed. The default value is \n                    60 minitues.\n        -v | -V     Verbose mode \n'
EMsgCSMVersdiffer	490	3	'%1$s: 2653-138 The CSM version on this machine: %2$s, does not match the value stored in the node\'s InstallCSMVersion attribute: %3$s\n'
IMsgCheckingTftp	491	3	'Checking to see if tftp server is running...\n'
IMsgTftpNotRunning	492	3	'Could not detect if %1$s is running\n'
IMsgRunning	493	3	'%1$s is up and running\n'
IMsgStillCantRestart	494	3	'Still can not restart %1$s.\n'
IMsgRestart	495	3	'Attempting to restart %1$s\n'
IMsgCreatingTFTPGroup	496	3	'Creating default %1$s group for the tftp server.\n'
IMsgGroupAlreadyCreated	497	3	'The %1$s group has already been created.\n'
IMsgCreatingTFTPUser	498	3	'Creating default %1$s user for the tftp server.\n'
IMsgUserAlreadyCreated	499	3	'The %1$s user has already been created.\n'
IMsgSecureFiles	500	3	'Securing file permissions in the %1$s directory and all subdirectories...\n'
IMsgTFTPInfo	501	3	'CSM ships with %1$s by default.\nThe above tftp RPMs may conflict with\n%2$s.\nYou have several options at this point:\n'
IMsgTFTPOptions	502	3	'1. Remove the above tftp RPMs and install %1$s\n2. Install %2$s without removing already installed RPMs\n\t(note: There may be conflicting files with this option, and \n\t%3$s may not install correctly.)\n3. Keep the above tftp RPMs.  Continue without installing %4$s\n4. Quit\nPlease choose 1, 2, 3, or 4:\n'
IMsgWILL_NOT_INSTALL	503	3	'CSM will not install %1$s\n'
EMsgINVALID_ARGS_WITH_F	504	3	'%1$s: 2653-056 Cannot provide -c, -C, -H, -m, --minmanaged or -n with -f.\n'
EMsgISDown	505	3	'%1$s: 2653-245 The following install servers are unreachable over dsh: %2$s. Please use other install servers in their place, or fix the dsh connectivity problems.\n'
EMsgNoSetupRA	506	3	'%1$s: 2653-038 Cannot setup remote authentication on the following unreachable nodes because they are no longer in PreManaged or MinManaged mode (run updatenode -k to setup remote authentication these nodes): %2$s.\n'
IMsgChangeTftpUser	507	3	'CSM will change the owner and group of the /tftpboot directory and all \nsubdirectories to be owned by the tftpd user and group.\nFor your tftp server to work correctly, you should ensure that it runs as \nthe %1$s user.\nPress any key to continue...\n'
EMsgSETUPMKINITRD_ERROR	508	3	'%1$s: 2653-246 The required mkinitrd file was not created successfully. Please make sure to download the update-mkinitrd.gz file and put in %2$s directory.\n'
IMsgNO_NODES_TO_AUTOYAST_SETUP	509	3	'No nodes to do autoyast setup.\n'
IMsgTftpProcFound	510	3	'CSM has detected that there is a tftp server process running,\nbut could not detect whether any tftp server rpm was installed.\nCSM ships with %1$s by default.\nYou have several options at this point:\n'
IMsgTftpOptionsMenu	511	3	'1. Install %1$s\n2. Continue without installing %2$s\n3. Quit\nPlease choose 1, 2, or 3:\n'
EMsgUNSUPPORTED_FULLINST_DISTRO	512	3	'Linux distribution %2$s full installation is not currently supported by CSM.\n'
EMsgSET_YASTINSTALLMETHOD_ERROR	513	3	'%1$s: Error setting InstallMethod attribute to "autoyast".\n'
EMsgERROR_SETTINGUP_KRB5	514	3	'%1$s: 2653-247 Nodes were successfully defined, but there was an error creating the KRB5 host principal. Correct the error condition and run csmconfig -K with your desired SetupKRB5 attribute setting to create the principals.\n'
EMsgNO_KRB5client	515	3	'%1$s: 2653-248 An error occurred while attempting to setup the KRB5 client on the node.\n'
EMsgNO_SetupKRB5	516	3	'%1$s: 2653-249 Could not get SetupKRB5 attribute from the node config_info file.\n'
EMsgERROR_KRB5_NonRoot	517	3	'%1$s: 2653-250 You must be root to run the KRB5 setup commands.\n'
IMsgNO_SETUP_KRB5	518	3	'No prompt flag set. Automatic creation of KRB5 principals will not be done.\n'
IMsgListNoPowerMethodNodes	519	3	'The following nodes could not be rebooted because their PowerMethod\nattribute is not set.  Please reboot these nodes manually so that the\ninstall process on these nodes can proceed:\n        %1$s \n'
IMsgNoDefaultTFTPServerFound	520	3	'The  %2$s  RPM  was not found, and CSM can not detect if a tftp server is currently installed. You will need a tftp server installed on this Management Server to perform full Operating System and CSM installations to the nodes in this cluster.  Please ensure that a tftp server is running on this machine.\n'
IMsgSetingNodeAttr	521	3	'%1$s: Setting %2$s to: \"%3$s\".\n'
IMsgNODE_REBOOT_REQ	522	3	'Node reboot required to activate changes.\n'
EMsgNO_kandK	523	3	'%1$s: 2653-300 The \"-k\" flag cannot be used with the \"-K\" flag.\n'
EMsgBadKoption	524	3	'%1$s: 2653-322 Invalid K option: %2$s. Only hba,krb5,ssh, and rsh are allowed.\n'
EMsgBadKKRB5option	525	3	'%1$s: 2653-323 option -K krb5 should not be chosen, if SetupKRB5 < 8.\n'
EMsgBadKSSHoption	526	3	'%1$s: 2653-324 option -K ssh should not be chosen, unless SetupRemoteShell=1 and RemoteShell=/../ssh.\n'
EMsgBadKRSHoption	527	3	'%1$s: 2653-325 option -K rsh should not be chosen, unless SetupRemoteShell=1 and RemoteShell=/../rsh.\n'
IMsgExchangeHBAkeys	528	3	'Exchanging host based authentication (hba) keys with Management Server.\n'
IMsgCreateRAMDISKFAIL	529	3	'The ramdisk for getting MAC addresses could not be created, getadapters \nwill try to get MAC addresses from the BIOS instead.\n'
IMsgNoIPRDriver	530	3	'Can not find ipr drivers! This will result in installation failure if you are installing a pSeries model 615 or 655 node!\n'
IMsgNoSg3utilsRPM	531	3	'Can not find sg3_utils rpm package under %1$s! This may result in full installation failure when setting boot disk for managed node.\n'
EMsgInvalidRpm	532	3	'%1$s: 2653-326 %2$s is not a valid rpm.\n'
EMsgBadKHBAoption	533	3	'%1$s: 2653-327  -K hba can not be used in combination with rsh, ssh or krb5 options.\n'
EMsgBadKHBAoption2	534	3	'%1$s: 2653-328 option -K hba can not be used in combination with -F, --cfm, --cfmoptions, -S, --sms, or --smsoptions flags.\n'
EMsgAdapterNotValid	535	3	'%1$s: 2653-327 %2$s is not a valid InstallAdapterName. Please specify a valid InstallAdapterName for %3$s. \n'
IMsgCopycdsUsage	536	3	'Usage: copycds [-v | -V] [-x] [-p pkg_path] [-h] [Attr=value [Attr=value...]]\n\t-h              Display usage information.\n\t-p <pkg_path>   List of directories containing distribution packages(p1:p2:p3), default is from CDROM.\n\t-x              Do not copy packages, just switch between base level and service level.\n\t-v | -V         Verbose mode.\nValid attributes:\n\tInstallOSName              (default is Management Server OS name)\n\tInstallDistributionName    (default is Management Server Distribution name)\n\tInstallDistributionVersion (default is Management Server Distribution version)\n\tInstallPkgArchitecture     (default is Management Server package architecture)\n\tInstallServiceLevel        (default is null)\n'
IMsgSetInstallAdapterNull	537	3	'CSM can not get an accurate Macaddress for InstallAdapterName=%1$s for %2$s, so it will set InstallAdapterName to null.\n'
IMsgdefinehwdevUsage	538	3	'Usage: definehwdev [-h]\n        definehwdev [-v | -V] [-s][-m] -f devicedef_file \n        definehwdev [-v | -V] [-s][-m] -M HostnameMapFile [-C ConsoleServers]\n                    [Attr=value [Attr=value...]]\n        definehwdev [-v | -V] [-s][-m] [-d device_list [-c count]] \n                    [-C ConsoleServers] [-H HWControlPoints] \n                    [Attr=value [Attr=value...]]\n\n        -c count            Number of devices to define (default = 1).\n                            This flag cannot be used with the -d flag if\n                            more than one device is specified with the -d flag.\n        -C ConsoleServers   List of console servers\n                    Format: csname[:port[:num_devices]][,...]\n                            csname      = Console server hostname or IP addr\n                            port        = Starting console port number (default=0)\n                            num_devcies = Number of devices controlled by this\n                                          Console Server (default=1)\n        -f devicedef_file   The name of the file which contains device \n                            definition information.  A sample device \n                            definition file is in\n                            /opt/csm/install/devicedef.sample. See the devicedef\n                            man page for more information.  This flag cannot\n                            be used with the -d, -c or -M flags.\n        -h                  Display usage information\n        -H HWControlPoints  List of hardware control points\n                    Format: hwctrlpt[:num_devices][,...]\n                            hwctrlpt    = Hardware Control Point host name\n                                          or IP address.\n                            num_devices = Number of devices controlled by this\n                                          Hardware Control Point (default=1)\n        -m                  Modify existing device definition if a device\n                            attribute changes\n        -M HostnameMapFile  Name of a file that map hostnames or IP addresses\n                            to hardware control information.  This file is\n                            initially created by redirecting the output of \n                            the lshwinfo command.  This flag cannot be used\n                            with the -d, -c or -f flags.\n        -s                  Send the list of device definitions to standard \n                            out instead of defining the devices.\n        -d device_list      The list of devices to define.  This is a space or\n                            comma separated list of names. Space separated lists\n                            must be double quoted.  This flag cannot be\n                            used with the -c flag if more than one device is\n                            is specified with the -d flag.\n        -v | -V             Display verbose messages to standard out\n\nFor a list of valid attributes to use in the Attr=value pairs, refer\nto the man page for deviceattributes.\n'
EMsgINVALID_ARGS_WITH_F_dev	539	3	'%1$s: 2653-251 Cannot provide -c, -C, -H, -m, or -d with -f.\n'
EMsgINVALID_ARGS_WITH_c_dev	540	3	'%1$s: 2653-252 Cannot use the -c flag when multiple devices or a node range are specified with the -d flag.\n'
EMsgINVALID_ARGS_WITH_M_dev	541	3	'%1$s: 2653-253 Cannot provide -c, -f, -H, -d or the HWControlPoint, HWControlDeviceId or PowerMethod attributes with -M. \n'
EMsgBadPowerMethod_dev	542	3	'%1$s: 2653-254 Multiple devices may not be specified when using a PowerMethod attribute of csp.\n'
EMsgAssignAttrToMultDevices	543	3	'%1$s: 2653-255 Cannot assign the same %2$s to more than one device.\n'
IMsgEXISTING_MANAGEDDEVICES	544	3	'Existing Managed Devices: \n'
IMsgDEFINING_DEVICES	545	3	'Defining CSM Devices: \n'
IMsgDEFINING_DEVICE	546	3	'Defining Device \"%1$s\"\n'
EMsgBadConsoleMethodForDevice	547	3	'%1$s: 2653-256 The console method \"%2$s\" cannot be used for devices.\n'
IMsgASSIGNING_CONSOLE_PORT_dev	548	3	'Assigning console \"%1$s\", port \"%2$s\" to device \"%3$s\".\n'
IMsgREADING_DEVICEDEF	549	3	'Reading devicedef file: \"%1$s\".\n'
EMsgDEVICEDEF_BAD_FORMAT	550	3	'%1$s: 2653-257 The devicedef file has an invalid format on line \"%2$s\".\n\tNo name for \"\"%3$s\"\"\n'
EMsgDEVICEDEF_INVALID_ATTR	551	3	'%1$s: 2653-258 The devicedef file has an invalid attribute on line \"%2$s\":\n\t\"%3$s\". \n'
EMsgERROR_IN_DEVICEDEF	552	3	'%1$s: 2653-259 Errors in devicedef file: \"%2$s\".\n'
EMsgNoMultStanzas_dev	553	3	'%1$s: 2653-260 Device \"%2$s\" appears in multiple stanzas.  It will not be defined.\n'
EMsgNO_ATTR_WITH_F	554	3	'%1$s: 2653-262 Cannot specify attributes with -f.\n'
EMsgHOSTMAP_NO_HOSTNAME_dev	555	3	'%1$s: 2653-263 The hostname map file has no hostname on line %2$s.  This device will not be defined.\n'
EMsgINSUFFICIENT_PORTS_dev	556	3	'%1$s: 2653-264  \"%2$s\" devices were specified, but only \"%3$s\" console ports are available.\n'
EMsgINSUFFICIENT_SP_dev	557	3	'%1$s: 2653-265 \"%2$s\" devices were specified, but only \"%3$s\" service processors are available.\n'
EMsgDUPLICATE_DEVICES	558	3	'%1$s: 2653-266 Devices are already defined.\n'
EMsgALREADY_DEFINED_MANAGEDDEVICES	559	3	'%1$s: 2653-267  The following devices are already defined as ManagedDevices:\n \"%2$s\" \n'
EMsgERROR_ASSIGNING_PORTS_dev	560	3	'%1$s: 2653-268 Cannot assign console ports to devices.\n'
EMsgERROR_ASSIGNING_SP_dev	561	3	'%1$s: 2653-269 Cannot assign service processors to devices.\n'
IMsgBadHCP_dev	562	3	'The HWControlPoint value provided for one or more devices was invalid.\n'
EMsgERRinValues_dev	563	3	'%1$s: 2653-270  Device definitions could not be created due to errors in one or more of the values provided.\n'
EMsgNO_PING_STATUS_WITH_C	564	3	'%1$s:  2653-271 You must specify a StatusMethod of \"ping\" when defining devices with -c.\n'
EMsgDevicesNotDefined	565	3	'%1$s: 2653-272 The following devices are not defined: %2$s .\n'
IMsgCANT_MOUNT	566	3	'Warnings: Could not mount %1$s, file may not be an iso image or could be some mount problem. \n'
EMsgNO_DEVICES_DEFINED	567	3	'%1$s: 2653-073 No devices were successfully defined.\n'
IMsgScriptUpdate	568	3	'Warnings: %2$s has been updated.\n'
IMsgWRITE_TIMEOUT_MESSAGE	569	3	'%1$s  is still installing -  updating status file with timeout message.\n'
IMsgCANT_READ_FILE	570	3	'Cannot open file %1$s for reading. Install timeout may not work.\n'
IMsgNoIsvrs	571	3	'Warnings: Following machines are neither install servers nor have install servers defined, please check your input: \"%2$s\".\n'
EMsgMissingPackage	572	3	'2653-274 The following package is missing and may need to be installed: %1$s .\n'
EMsgReqOrigDisks	573	3	'2653-275 The CDs of base distribution must be copied before service level, please run copycds without InstallServiceLevel paratermer first.\n'
EMsgBadServiceLevel	574	3	'2653-276 InstallServiceLevel \"%2$s\" is not currently supported by CSM.\n'
EMsgDisksMissing	575	3	'2653-277 It seems that the content of distribution you specified has not been copied yet, please run without -x option.\n'
IMsgCHANGED_BOOT_ORDER	576	3	'Changed boot order to hard disk for the node %1$s.\n'
IMsgWROTE_STATUS_MSG	577	3	'Wrote status message \"%1$s\" to the node %2$s status file.\n'
IMsgMINMANAGED_INSTALLED	578	3	'Changed mode attribute to MinManaged for the node %1$s.\n'
IMsgNODE_INSTALL_INCOMPLETE	579	3	'Node Install - Incomplete. See messages above and take corrective action. Then run updatenode to complete installation of this node.\n'
EMsgNO_NODES_DEFINED_OR_MODIFIED	580	3	'%1$s: 2653-278  No nodes have been defined or modified.\n'
IMsgGATEWAY_INVALID	581	3	'The Gateway attribute %1$s is not valid, the router of management server will be choosed as  default . \n'
IMsgSKIP_SETUP_DHCP	582	3	'CSM_NO_SETUP_DHCP is set , skip setup dhcp.\n'
d DkL 0PB$  7u       r@r@r@                   ./opt/csm/msgmaps/csmKRB5p.csmKRB5p_msg.map 64.p                   $          IMsgStartup	1	1	'%1$s: started %2$s.\n'
IMsgEnd	2	1	'%1$s: ended %2$s with rc=%3$s.\n'
IMsgKRB5ConfigFileExists	3	1	'%1$s: %2$s exists. KRB5 server already setup.\n'
IMsgKRB5ClientCfgExists	4	1	'%1$s: %2$s exists. Will not update the %3$s file.\n'
IMsgKRB5EnterAdminName	5	1	'Specify the principal name for the Kerberos (KRB5) database administrator.\n'
IMsgKRB5EnterDomain	6	1	'Specify the DNS domain name for Kerberos (KRB5) server. Check to ensure that the DNS (Domain Name Server) is configured.\n'
IMsgKRB5NULLName	7	1	'A NULL  name is not valid.\n'
IMsgKRB5CMD	8	1	'Running %1$s.\n'
IMsgKRB5SetupRemoteCmds	9	1	'%1$s: Setup KRB5 remote commands requested.\n'
IMsgKRB5CreateCSMPrinc	10	1	'%1$s: Creating KRB5 CSM principal:%2$s.\n'
IMsgKRB5CreateNodePrinc	11	1	'%1$s: Create KRB5 Node principal requested for %2$s.\n'
IMsgKRB5SetupClient	12	1	'%1$s: Setup KRB5 client requested.\n'
IMsgKRB5NoClientSetup	13	1	'%1$s:No KRB5 client setup requested.\n'
IMsgKRB5NoPrincipalSetup	14	1	'%1$s:No KRB5 principal creation requested.\n'
IMsgKRB5CfgCreated	15	1	'%1$s: %2$s created.\n'
IMsgk5loginUpdated	16	1	'%1$s: .k5login  updated with CSM principal.\n'
IMsgSupplyPWD	17	1	'Please enter the kadmin administrator password.\n'
IMsgNULLSupplyPWD	18	1	'A NULL password is not valid.\n'
IMsgkadminTxt	19	1	'%1$s: Call to kadmin returned %2$s\n'
IMsgPrincipalExists	20	1	'%1$s: The KRB5 principal:%2$s already exists. Will not create. \n'
IMsgNoPrincipals	21	1	'%1$s: No Kerberos principals need to be created at this time. \n'
IMsgKRB5OpenFailed	22	1	'%1$s: The open of file:%2$s failed. \n'
EMsgNASMissing	23	1	'%1$s: 2657-101 The %2$s executable is missing. Can not setup the KRB5 server. \n'
EMsgNASError	24	1	'%1$s: 2657-102 The %2$s routine returned rc=%3$s. \n'
EMsgNotAIXError	25	1	'%1$s: 2657-103 %2$s can only be run on AIX. \n'
EMsgUpdtk5loginError	26	1	'%1$s: 2657-104 The popk5login routine returned rc=%2$s. See /var/log/csm/popk5login.log for more details. \n'
EMsgCopyKRB5ConfigError	27	1	'%1$s: 2657-105 The copy of %2$s to %3$s did not succeed rc=%4$s. \n'
EMsgUnableToCreatePrincipal	28	1	'%1$s: 2657-106 The KRB5 principal could not be created.\n'
EMsgNokadminError	29	1	'%1$s: 2657-107 The kadmin executable cannot be found due to missing or empty CSM KRB5 configuration file. \n'
EMsgkadminError	30	1	'%1$s: 2657-108 An error was returned from the call to kadmin. Check the message and the kadmin.log for more information. \n'
EMsgmkdirError	31	1	'%1$s: 2657-109  mkdir %2$s returned rc=%3$s. \n'
EMsgLinkKRB5ConfigError	32	1	'%1$s: 2657-110 The link of %2$s to %3$s did not succeed rc=%4$s. \n'
EMsgKRB5ConfigError	33	1	'%1$s: 2657-111 The %2$s file exists and the %3$s file does not exist. This configuration is not valid.  \n'
EMsgKRB5CSMConfigError	34	1	'%1$s: 2657-112 The %2$s file does not exists and the %3$s file does not exist. Unable to determine path to kadmin on Linux.  \n'
EMsgKRB5NASAdminError	35	1	'%1$s: 2657-113 The %2$s executable does not exists.  \n'
EMsgKRB5XFERKEYError	36	1	'%1$s: 2657-114 The transfer of the KRB5 keytab did not succeed. Error was returned from sendkeytab. Check /var/log/csm/sendkeytab.%2$s.log.  \n'
EMsgKRB5ReadConfigError	37	1	'%1$s: 2657-115 Could not read the CSM KRB5 configuration file: %2$s. Unable to determine path to kadmin on Linux.  \n'
EMsgKRB5CopyConfigError	38	1	'%1$s: 2657-116 Could not copy the /etc/krb5.conf file to the %2$s.\n'
EMsgKRB5ChkaddKRB5	39	1	'%1$s: 2657-117 Check the /var/log/csm/add_KRB5principals.log for more information.\n'
IMsgMadeKRB5Save	40	1	'%1$s: %2$s exists on the node and is different from the krb5.conf on the Management Server, saving in %3$s and copying the krb5.conf from the Management Server to the node. \n'
Dk 0PB$  7u     )  r@r@r@             )      ./opt/csm/msgmaps/nodecmds.NodeUtils.map ap 64.p                   $          IMsgCMD	1	7	'Running cmd: %1$s\n'
IMsgRESOLVING	2	7	'Resolving names in the specified node list...\n'
EMsgBAD_IPADDR	3	7	'%1$s:  2651-027 Cannot resolve %2$s to a host name.\n'
EMsgBAD_HOSTNAME	4	7	'%1$s:  2651-028 Cannot resolve %2$s to an IP address.\n'
EMsgCMD_FAILED	5	7	'%1$s:  2651-029 Exit code %2$s from command: %3$s\n\nError message from cmd: %4$s\n'
EMsgNODELIST_FILE	6	7	'%1$s:  2651-030 Error opening file %2$s to read node list.  Message from system: %3$s.\n'
EMsgGROUP_NOT_FOUND	7	7	'%1$s:  2651-031 Could not find nodegroup %2$s in the database.  Run nodegrp -l to see a list of valid nodegroups.\n'
EMsgSOME_GROUPS_NOT_FOUND	8	7	'%1$s:  2651-032 Could not find one or more of the following nodegroups in the database:  %2$s.  Run nodegrp -l to see a list of valid nodegroups.\n'
EMsgNO_RES2UNRES	9	7	'%1$s:  2651-033 Internal error in NodeUtils.listNodeAttrs() - SkipResolve set, but Res2Unres not set.\n'
EMsgCannotRunCSMCommands	10	7	'%1$s:  2651-052 You cannot run CSM commands on this machine, since it is an inactive CSM management server.\n'
$s creakL 0PB$  7u       r@r@r@                   ./opt/csm/msgmaps/nodecmds.mgmtsvr.map p                   $          IMsgMgmtsvrUsage	1	6	'Usage:  mgmtsvr [-h] [-v | -V] [-k] [-n nodename] [-N] [host | -d]\n          -d        Delete the management server entry.\n          -n nodename\n                    Hostname that the CSM management server knows this node by.\n                    Normally the user does not need to specify this option.\n                    It is used internally by installnode and makenode to ensure\n                    correct operation even when name resolution of the hostname\n                    value on the node results in a different name than the\n                    management server knows it by.  This argument is only valid\n                    when a hostname or ipaddr for the management server is also\n                    specified.\n          -N        Display the value for the local nodename along with the\n                    management server.  This argument is only valid when a\n                    hostname or ipaddr for the management server is not \n                    specified.\n          -k        Re-exchange the public keys with the management server also.\n          -v | -V   Verbose mode, including messages from the DBI layer.\n          -h        Display this usage information.\n          host      The hostname or IP address of the CSM management server that\n                    will be managing this node.  If no host is specified (and -d\n                    is not specified) the current setting will be displayed. In\n                    this case, the exit status can be examined to distinguish\n                    between nodes and the management server as follows:\n                      0: this is only a node and the mgmt svr value is set\n                      11: this is only a node and the mgmt svr value is not set\n                      21: this is a mgmt svr and a node and the mgmt svr value is set to itself\n                      22: this is a mgmt svr and a node and the mgmt svr value is set to another mgmt svr\n                      23: this is a mgmt svr and a node and the mgmt svr value is not set\n                      31: this is only a mgmt svr\n                      101: this is neither a mgmt svr or a node\n'
IMsgNOT_SET	2	6	'This node does not currently have a CSM management server managing it.\n'
IMsgBOTH_ITSELF	3	6	'%1$s  (This node is also the CSM management server for itself.)\n'
IMsgBOTH_OTHER	4	6	'%1$s  (This node is also the CSM management server for other nodes.)\n'
IMsgBOTH_NOT_SET	5	6	'This machine is a CSM management server and a node, but the node does not currently have a CSM management server managing it.\n'
IMsgMGMT_SVR	6	6	'This machine is a CSM management server.\n'
IMsgMS_AND_LHN	7	6	'Management server:  %1$s,  Local node name:  %2$s\n'
EMsgNEITHER	8	6	'%1$s:  2651-023 This machine is neither a CSM management server or node.  To make this machine a CSM management server, install csm.server.  To make this machine a node, install csm.client.\n'
EMsgNOT_A_NODE	9	6	'%1$s:  2651-024 The management server value cannot be set or removed.  This machine is not a CSM node.  A hostname or -d can only be specified on a machine that has csm.client installed.\n'
EMsgDAEMON_NOT_STARTED	10	6	'%1$s: 2651-040 The %2$s daemon did not start or is not running.\n'
detekX  0PB  7u      ;]A;]A;]A                  ./opt/csm/pm/ArchiveUtils.pm mts                             # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 

#!/usr/bin/perl
# @(#)30   1.49.1.1   src/csm/core/pm/ArchiveUtils.pm.perl, setup, csm_rveg, rvegs006a 9/30/04 10:00:49
#
#####################################################################

package ArchiveUtils;

use strict;

#            locale tells perl to honor locale for sorting, dates, etc.
#            More info about locale.pm and perl handling of locales can be found in
#            /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.
use locale;
use Socket;

my $msgs;
my $distro;
my $useTranslatedMsg;
my %catHashes;
my $csmroot;
my ($MSGCAT, $MSGMAPPATH, $MSGSET);
my $NO_NODERANGES;
my $NODEGROUPEXPMEM_WARNING = 1;

# $NodeUtils::NO_MESSAGES;    # Set this to 1 if you do not want NodeUtils to
# print any error msgs

# $NodeUtils::errno;          # Will be set if an error occurs.  You must zero
# this out before calling a NodeUtils function,
# if you want to check it afterwards.

BEGIN
{

    #    This enables us to redirect where it looks for other CSM files during development
    $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';

    $MSGCAT = 'nodecmds.cat';
    if (defined $::MSGMAPPATH)
    {
        $MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
    }
    else
    {
        $MSGMAPPATH = "$csmroot/msgmaps";
    }
    $MSGSET = 'NodeUtils';
}

umask(0022);   #  This sets umask for all CSM files so that group and world only
               #  have read permissions.
               #  To change it, simply use the umask call in your script, after
               #  the "use ArchiveUtils;" line

#--------------------------------------------------------------------------------

=head1    ArchiveUtils

=head2    Package Description

This program module file, supports the CSM/install archiving and open source
dependencies.  

If adding to this file, please take a moment to ensure that:

    1.  Your contrib has a readable pod header describing the purpose and use of
         your contrib.

    2. Your contrib is under the correct heading and is in alphabetical order
    under that heading.

    3. You test your contribution by running from the command line:  

       pod2html  --verbose --title=ArchiveUtils ArchiveUtils.pm.perl --outfile=ArchiveUtils.html
       
       and examining the ./ArchiveUtils.html file in a browser.


=cut

#--------------------------------------------------------------------------------

=head2    Package Dependancies

    use strict;
    use Fcntl qw(:flock);
    use File::Basename;
    use File::Find;
    use File::Path;    # Provides mkpath()

=cut

#--------------------------------------------------------------------------------

=head1    Subroutines by Functional Group

=head2    Licence Support

=cut

#--------------------------------------------------------------------------------

=head3 display_opensrcLicence

        Display the open source product licence

        Arguments:
                rpm name
        Returns:
                none
        Globals:
                @::GPL_PACKAGES)
                $::DISPLAYED_GPL_LICENSE
                $::PREREQS_ATTR{
        Error:
                none
        Example:
                ArchiveUtils->display_opensrcLicence( $rpmName );
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub display_opensrcLicence
{
    my ($class, $rpm) = @_;

    # If this is one of the GPL open source packages, display a license
    # agreement.  Don't display the license again if it has already been
    # displayed.
    if (grep(/^$rpm$/, @::GPL_PACKAGES) and !$::DISPLAYED_GPL_LICENSE)
    {
        if ($::PREREQS_ATTR{'PkgArchitecture'} =~ /ppc64/)
        {

            # NodeUtils->message('I', 'IMsgGPL_LICENSE_PPC64');
            # NodeUtils->message('P', 'IMsgPRESS_ENTER_TO_INSTALL_PPC64');
        }
        else
        {
            NodeUtils->message('I', 'IMsgGPL_LICENSE');
            NodeUtils->message('P', 'IMsgPRESS_ENTER_TO_INSTALL');
            my $t = <STDIN>;
            chop($t);
            if (length($t) > 0)
            {
                NodeUtils->message('I', 'IMsgCSM_NOT_INSTALLING');
                exit 1;
            }
        }

        # Set to 1 so the license is not displayed again.
        $::DISPLAYED_GPL_LICENSE = 1;
    }
}

#--------------------------------------------------------------------------------

=head3    invokeLAP

        Invoke the LAP tool and display the CSM license agreements.
        The LAP tool will be invoked and copy the LA and LI files to

            /var/opt/csm/<VRnumber>/<type>/license/<lang>.txt
        Where:
                <VRnumber> = CSM Version (1.3, etc)
                <type>     = tryandbuy or full, depending upon the license.
                <lang>     = one of the 17 supported LAP languages.

        Arguments:
                A string - either: "tab" or "full"

        Returns: one of [ 3 | 9 | 127 ]
                If everything ran successful, then LAP will return 9,
        otherwise, if the user returns 3, the license was not
        accepted.  If something went wrong with the LAP tool,
        then an error of 127 will be returned.
        Error:
                127

        Example: Doesn't appear to be used in csm/install

        Comments: none

=cut

#--------------------------------------------------------------------------------

sub invokeLAP
{
    my ($class, $licType) = @_;
    my ($csmVersion, $laDir, $strCmd, $rc);
    my $laptool = "/opt/csm/install/lapapp.jar";

    # make sure that $licType is either tab or full
    if ($licType eq "tab")
    {
        $licType = "tryandbuy";
    }
    elsif ($licType ne "full")
    {

        #print "don't know..\n";
        return 127;
    }

    # get the CSM version:
    $csmVersion = InstallUtils->get_CSMVersion("csm.server");
    $csmVersion = sprintf "%.1f", $csmVersion;                  # e.g. "1.3"

    # check that the LA and LI files are in place:
    if (NodeUtils->isLinux())
    {
        $laDir = "/opt/csm/install/$csmVersion/Linux/license/$licType";
    }
    else                                                        # AIX
    {
        $laDir = "/opt/csm/install/$csmVersion/AIX/license/$licType";
    }

    unless (-f "$laDir/LA_en")
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',     $::MSGMAPPATH,
                                  'csminstall',         'E127',
                                  'EMsgCANT_READ_FILE', "$laDir/LA_en"
                                  );
    }

    # check that the LAP tool is in place:
    unless (-f "$laptool")
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E127', 'EMsgCANT_READ_FILE', $laptool);
    }

    # Everything should be in place now, so let's call LAP and  construct the command:

    if (NodeUtils->isLinux())
    {
      #try to find java
      my $found_java=0;
      my ($java, $rt, $i18n);
      my @output = NodeUtils->runcmd("$::LS -1d /opt/IBMJava\*");
      while(($found_java!=1) && (@output)){
	my $dir = shift @output;
	$dir =~ s/^\s*//;    # Remove any leading whitespace
	$dir =~ s/\s*$//;    # Remove any trailing whitespace
	my $tmp_java = "$dir/jre/bin/java";
	my $tmp_rt = "$dir/jre/lib/rt.jar";
	my $tmp_i18n = "$dir/jre/lib/i18n.jar";
	if(-e "$tmp_java")
	  {
	    $found_java=1;
	    $java = $tmp_java;
	    $rt = $tmp_rt;
	    $i18n = $tmp_i18n;
	  }
      }
      if($found_java){
	$strCmd = "$java -cp /opt/csm/install/lapapp.jar:${rt}:${i18n}:";
      }
      else{ #try the old way
        # check that Java is installed... and use the right one.
        if (-d "/opt/IBMJava2-141")
        {
            $strCmd = "/opt/IBMJava2-141/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/opt/IBMJava2-141/jre/lib/rt.jar:";
            $strCmd .= "/opt/IBMJava2-141/jre/lib/i18n.jar:";
        }
        elsif (-d "/opt/IBMJava2-131")
        {
            $strCmd = "/opt/IBMJava2-131/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/opt/IBMJava2-131/jre/lib/rt.jar:";
            $strCmd .= "/opt/IBMJava2-131/jre/lib/i18n.jar:";
        }
        elsif (-d "/opt/IBMJava2-13")
        {
            $strCmd = "/opt/IBMJava2-13/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/opt/IBMJava2-13/jre/lib/rt.jar:";
            $strCmd .= "/opt/IBMJava2-13/jre/lib/i18n.jar:";
        }
        elsif (-d "/opt/IBMJava2-ppc-141")
        {
            $strCmd = "/opt/IBMJava2-ppc-141/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/opt/IBMJava2-ppc-141/jre/lib/rt.jar:";
            $strCmd .= "/opt/IBMJava2-ppc-141/jre/lib/i18n.jar:";
        }
        elsif (-d "/opt/IBMJava2-ppc-131")
        {
            $strCmd = "/opt/IBMJava2-ppc-131/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/opt/IBMJava2-ppc-131/jre/lib/rt.jar:";
            $strCmd .= "/opt/IBMJava2-ppc-131/jre/lib/i18n.jar:";
        }
        elsif (-d "/usr/lib/IBMJava2-1.3.1")
        {
            $strCmd = "/usr/lib/IBMJava2-1.3.1/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/usr/lib/IBMJava2-1.3.1/jre/lib/rt.jar:";
            $strCmd .= "/usr/lib/IBMJava2-1.3.1/jre/lib/i18n.jar:";
        }
        else    # java isn't installed maybe
        {
            my $string = "IBMJava2-13[1]";
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',     $::MSGMAPPATH,
                                      'csminstall',         'E127',
                                      'EMsgMissingPackage', $string
                                      );
        }
      }
    }
    else
    {           # AIX
      #try to find java
      my $found_java=0;
      my ($java, $rt, $i18n);
      my @output = NodeUtils->runcmd("$::LS -1d /usr/java\*");
      while(($found_java!=1) && (@output)){
	my $dir = shift @output;
	$dir =~ s/^\s*//;    # Remove any leading whitespace
	$dir =~ s/\s*$//;    # Remove any trailing whitespace
	my $tmp_java = "$dir/jre/bin/java";
	my $tmp_rt = "$dir/jre/lib/rt.jar";
	my $tmp_i18n = "$dir/jre/lib/i18n.jar";
	if(-e "$tmp_java")
	  {
	    $found_java=1;
	    $java = $tmp_java;
	    $rt = $tmp_rt;
	    $i18n = $tmp_i18n;
	  }
      }
      if($found_java){
	$strCmd = "$java -cp /opt/csm/install/lapapp.jar:${rt}:${i18n}:";
      }
      else{
	if (-d "/usr/java141")
        {
            $strCmd = "/usr/java141/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/usr/java141/jre/lib/rt.jar:";
            $strCmd .= "/usr/java141/jre/lib/i18n.jar:";
        }
        else
        {
            $strCmd = "/usr/java131/jre/bin/java -cp ";
            $strCmd .= "/opt/csm/install/lapapp.jar:";
            $strCmd .= "/usr/java131/jre/lib/rt.jar:";
            $strCmd .= "/usr/java131/jre/lib/i18n.jar:";
        }
      }
    }

    # this part of the command is common in both AIX and Linux:
    $strCmd .= " com.ibm.lex.lapapp.LAP ";
    $strCmd .= "-l $laDir ";
    $strCmd .= "-s /var/opt/csm/$csmVersion/$licType ";
    $strCmd .= "-text_only";
    $rc = system("$strCmd");
    $rc = $rc >> 8;

    # kill processes if they exist:
    if (NodeUtils->isLinux)
    {
        foreach (`ps -efl --columns 300 | grep lapapp | awk '{print \$4}'`)
        {
            chomp $_;
            `kill -9 $_ 2>/dev/null`;
        }
    }

    return $rc;
}

#--------------------------------------------------------------------------------

=head2    RPM Support

=cut

#--------------------------------------------------------------------------------

=head3    checkDistroCopied

        Determine if there are more than 100 files in /csminstall/RPMS
    directory

        Arguments:
                $rpmDirectory

        Returns:
                1 - more than 100 files in /csminstall/RPMS
                0 - eveything okay
        Globals:
                none
        Error:
                1
        Example:
                never used
        Comments:
                never used???

=cut

#--------------------------------------------------------------------------------

sub checkDistroCopied
{
    my ($class, $rpmdir) = @_;

    if (!-e "$rpmdir")
    {
        return 0;
    }
    my @output = `$::LS -l $rpmdir/ | /usr/bin/wc -l`;
    chomp @output;
    my $lines = $output[0];
    $lines =~ s/\s+//;
    if ($lines > 100)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

#--------------------------------------------------------------------------------

=head3    checkForRpmTool

        Exits E2 if the rpm tool is not installed on the local host.

=cut

#--------------------------------------------------------------------------------

sub checkForRpmTool
{
    my $ret_code;

    $ret_code = NodeUtils->get_CSMVersion("rpm");
    if (length($ret_code) == 0)
    {
        NodeUtils->message('E2', 'EMsgNO_RPM');
    }
}

#--------------------------------------------------------------------------------

=head3    checkRPMInstall

        Checks if a given rpm is installed. The full pathname of the
        rpm must be given.


        Arguments:
                $rpmName


        Returns:
                0 - not installed
                1 - installed

        Globals:
                $::PLTFRM
                $::rpmShortnames
                $::rpmBasenames
        Error:
                0

        Example:
                 my $installed =
                        ArchiveUtils->checkRPMInstall($rpmFileName);

        Comments:
                checkRPMInstall must be called before this function is used.

=cut

#--------------------------------------------------------------------------------

sub checkRPMInstall
{
    my ($class, $filename) = @_;    #rpm name
    my $file;
    if ($::PLTFRM eq "AIX")
    {
        my @output =
          `$::RPMCMD -q --qf %{NAME}-%{VERSION}-%{RELEASE} -p $filename`;
        chomp @output;
        $file = $output[0];
    }
    else
    {
        my @path = split '/', $filename;
        $file = pop @path;
    }

    #determine if the given rpm is installed on the system
    #we need to check to see if this rpm is already installed
    my ($shortname, $basename, $p);
    my @parts = split /-/, $file;
    $shortname = shift @parts;
  SNAME: while ($p = shift @parts)
    {
        if ($p !~ m/^\d/)
        {    #if it doesn't start with a digit
            $shortname .= "-$p";
        }
        else
        {
            unshift @parts, $p;
            last SNAME;
        }
    }
    $basename = $shortname;
    $shortname .= "-" . $parts[0] . "-" . (split /\./, $parts[1])[0];
    if (!exists $::rpmShortnames{$shortname})
    {

        #so check the basename
        if (!exists $::rpmBasenames{$basename})
        {

            #no version of this rpm is installed
            #push @rpms, $wholename;
            return 0;
        }
        else
        {
        	# If the required os package is installed,  CSM need not install them 
        	# This is because the cooperation between different  the Service Level 
        	foreach my $rpm (@::linux_os_prereqs) {
        		if ($rpm =~ /^(.*)\*$/) {
        			$rpm=$1;
        		}
        		my $rpmname = substr ($shortname,0,length $rpm);
        		if ($rpmname eq $rpm) {

        			NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'V', 'IMsgRPM_ALREADY_INSTALLED', $file);
                            return 1;        		
        		}
        	}
        	# a different version of this rpm is installed
                #test to see if this rpm  is installed
                # Check if the RPM is already installed at the correct version
            my $cmd = "$::RPMCMD -U --test $filename";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            my @cmdout = `LANG=C $cmd 2>&1`;
            my $rc     = $? >> 8;
            my $cmdout = join('', @cmdout);    # Put output into a single string
            if ($cmdout !~ /package .* is already installed/)
            {

                #not installed
                return 0;
            }
        }
    }
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'V', 'IMsgRPM_ALREADY_INSTALLED', $file);
    return 1;                                  #it is installed
}

#--------------------------------------------------------------------------------

=head3    check_valid_install_distros

        Check whether current node's InstallDistributionName and
        InstallDistributionVersion is valid for full installation

        Arguments:
                $installMethod
                $distribution
        Returns:
                -1 - not valid
                0  - valid

        Globals:
                none
        Error:
                returns -1

        Example:
                 my $installed =
                    ArchiveUtils->check_valid_install_distros( $installMethod,
                                                               $distribution );
        Comments:
                 none

=cut

#--------------------------------------------------------------------------------

sub check_valid_install_distros
{
    my ($class, $installmethod, $distro) = @_;

    my @VALID_AUTOYAST_DISTROS = ('SuSE8.1', 'SLES8.1');

    if (!grep(/^$distro$/, @VALID_AUTOYAST_DISTROS))
    {
        return -1;
    }
    return 0;
}

#--------------------------------------------------------------------------------

=head3	getServiceLevel

        Notes: This routine just a temperary solution for RedHatEL-AS3

=cut

#--------------------------------------------------------------------------------
sub getServiceLevel
{
    my $readme = "/csminstall/Linux/$::DISTRO_NAME/$::DISTRO_VERSION/$::ARCH/README";
    my $sp=undef;

    if(-l "$readme")
    {
	my $target = readlink "$readme";
	if($target =~ /RedHatEL\-AS3\-ppc64/){
	    $sp = "QU1";
	}elsif($target =~ /RedHatEL\-AS3\-QU2/){
	    $sp = "QU2";
	}
    }

    return $sp;
}

#
# Compatible for original routine
#
sub copyDistroCD
{
   my ($class, $distro_top, $distro_name, $distro_version) = @_;
   my $orig_dir;
   
   if (( $::PLTFRM eq "AIX")
        && !(($::ATTRS{'InstallDistributionName'} =~ /SuSE/) || 
		($::ATTRS{'InstallDistributionName'} =~ /SLES/)))
   {
         #change to the destination dir. if on AIX copying RedHat CDs
         use Cwd;
         $orig_dir = getcwd();
         chdir($distro_top);
   }

   ArchiveUtils->copyDistroPkgs($::ARCH,$distro_top,$distro_name,$distro_version,undef);
   ArchiveUtils->setupBootOrder($::ARCH,$distro_top,$distro_name,$distro_version,undef);
   
   if (($::PLTFRM eq "AIX")
        && !(($::ATTRS{'InstallDistributionName'} =~ /SuSE/) || 
		($::ATTRS{'InstallDistributionName'} =~ /SLES/)))
   {
       chdir($orig_dir);
   }
}


sub copyDistroPKGPATH
{
   my ($class, $distro_top, $distro_name, $distro_version) = @_;
   my $orig_dir;
   
   if (( $::PLTFRM eq "AIX")
        && !(($::ATTRS{'InstallDistributionName'} =~ /SuSE/) || 
		($::ATTRS{'InstallDistributionName'} =~ /SLES/)))
   {
         #change to the destination dir. if on AIX copying RedHat CDs
         use Cwd;
         $orig_dir = getcwd();
         chdir($distro_top);
   }

   ArchiveUtils->copyDistroPkgs($::ARCH,$distro_top,$distro_name,$distro_version,undef);
   ArchiveUtils->setupBootOrder($::ARCH,$distro_top,$distro_name,$distro_version,undef);
   
   if (($::PLTFRM eq "AIX")
        && !(($::ATTRS{'InstallDistributionName'} =~ /SuSE/) || 
		($::ATTRS{'InstallDistributionName'} =~ /SLES/)))
   {
       chdir($orig_dir);
   }
}


sub foundPkgPath
{
    my ($class,$suffix)=@_;
    my @files=();
    
    use DirHandle;
    
    $suffix=lc($suffix);
    
    foreach my $dir(@::PKGPATH)
    {
    	next if(! -d $dir);
	
	push @files,$dir;
	
    	my $d=new DirHandle "$dir";
    	if(defined $d)
	{
    		while (defined($_ = $d->read))
    		{
    			next if($_ eq "." || $_ eq "..");
     			next if($_ !~/$suffix$/);
    			my $tmp_filenam="$dir"."/"."$_";
    			next if(! -f $tmp_filenam);
    			push @files,$tmp_filenam;
    		}
	}
    	undef $d;
     }

     return @files;
}

sub probeImages
{
    my ($class,$r_pkgpath,$r_disks)=@_;
    my @pkgpath = @$r_pkgpath;
    my @disks   = @$r_disks;
    my $images  = { };
    my ($mntpoint,$ismounted);

    foreach my $diskref(@disks)
    {
    	my $diskname = $diskref->{name};
	my $disknum =  $diskref->{num};
    	
	foreach my $path(@pkgpath)
	{
		$ismounted = 0;
		
		if(-f $path && $path =~ /iso$/ )
		{
			# AIX does not support iso image
			next if ($::PLTFRM eq "AIX");
			
			$mntpoint = ArchiveUtils->mount_iso_image($path);
			if($mntpoint)
			{
				$ismounted = 1;
				#$path = $mntpoint;
			}else{
				NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
					'csminstall', 'I', 'IMsgCANT_MOUNT', $path);
				next;
			}
		}elsif( -d $path){
			$mntpoint = $path;
		}

		# valid the disk
		my $progref = $diskref->{diskid_searchprog};
		my $progarg = $diskref->{diskid_searchargs};
		if( &$progref($mntpoint,$progarg) )
		{
			# yes , this is the required disk, save it
			$images->{$diskname}->{$disknum} = $path;
		}

		if($ismounted)
		{
			ArchiveUtils->unmount_iso_image($mntpoint);
			$ismounted = 0;
		}
	}
    }

    return $images;
}

sub is_req_disks_copied{
	my ($class,$distro_top,$ref_disks)=@_;
	my @disks = @$ref_disks;
	foreach my $diskref(@disks)
	{
                next if(defined($diskref->{not_for_full_install}) &&
                        $diskref->{not_for_full_install} eq 'TRUE');

		if(defined $diskref->{diskid_target})
		{
			my $target = $diskref->{diskid_target};
			if($target ne ""){
				if(!-e "$distro_top/$target"){return 0;}
			}
		}
	}

	return 1;
}

sub remove_all_links{
    my ($class,$basedir)=@_;
	
    my $d=new DirHandle "$basedir";
    if(defined $d)
    {
    	while (defined($_ = $d->read))
    	{
    		next if($_ eq "." || $_ eq "..");
    		my $tmp_filenam="$basedir"."/"."$_";
    		if(-l "$tmp_filenam")
		{
    			unlink($tmp_filenam);
		}
   	}
    }
    undef $d;
}

sub setupBootOrder
{
    my ($class,$arch,$distro_top, $distro_name,$distro_version,$sp) = @_;
    my ($cmd,$output);
    my (@origdirs,@spdirs);
    my ($first_origdir,$first_spdir);
    
    if($arch =~ /i.86/) { $arch = "i386"; }
       
    my @orig_disks=@{$::pkgdefs{'distro_disks'}};
    
    # Make sure the original disks were copied
    if($distro_name =~ /SLES/ 
	&& !ArchiveUtils->is_req_disks_copied($distro_top,\@orig_disks))
    {
     	NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                  'csminstall', 'E1', 'EMsgDisksMissing');
    }
    
    foreach my $diskref(@orig_disks){
    	if(!grep(/$diskref->{diskid_target}/,@origdirs)){
		push(@origdirs,$diskref->{diskid_target});
	}
    }
    $first_origdir = $orig_disks[0]->{diskid_target};
    
    
    if($sp){
    	if(defined $::pkgdefs{'sp_disks'}{$sp})
	{
		 my @sp_disks=@{$::pkgdefs{'sp_disks'}{$sp}};
		 foreach my $diskref(@sp_disks){
			if(!grep(/$diskref->{diskid_target}/,@spdirs)){
				push(@spdirs,$diskref->{diskid_target});
			}
		 }
		 
		 $first_spdir = $sp_disks[0]->{diskid_target};
		 
		 if(!ArchiveUtils->is_req_disks_copied($distro_top,\@sp_disks)){
     			NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                	  	 'csminstall', 'E1', 'EMsgDisksMissing');
		 }
		 
	}else{
		NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
			'csminstall', 'E1', 'EMsgBadServiceLevel',$sp);
	}
	
    }

    
    if (($distro_name =~ /SuSE/) || ($distro_name =~ /SLES/)) {
    	
	my $realRPMS = "$distro_top/$distro_name/RPMS";
	        
	if (($distro_name =~ /SLES/) && ($distro_version eq 8.1)) {
	   foreach my $subpath(@origdirs){
	   	$cmd = "cd $realRPMS; $::LN -s ../../$subpath/*/*/*.rpm .";
       	   	NodeUtils->runcmd($cmd,-1);
	   }

	   if ($sp) {
		 foreach my $subpath(@spdirs){
		 	$cmd = "cd $realRPMS; $::LN -s ../../$subpath/*/*/*.rpm .";
		 	NodeUtils->runcmd($cmd,-1);
		 }
	   }
	   
	   $cmd = "$::COPY -a $distro_top/$first_origdir/yast $distro_top/$first_origdir/boot $distro_top/$first_origdir/content $distro_top/$first_origdir/media.1 $distro_top";
	   NodeUtils->runcmd($cmd,-1);
	   
	   if($arch =~ /ppc64/){
		   
		$cmd = "$::MKDIR $distro_top/yast";
		NodeUtils->runcmd($cmd, -1);
		
		if($sp){
			$cmd =
			"$::COPY -a $distro_top/$first_spdir/media.1 $distro_top/$first_spdir/driverupdate $distro_top/$first_spdir/boot $distro_top";
			NodeUtils->runcmd($cmd, -1);	
			$cmd=
			"$::MKDIR -p $distro_top/updates/kernel ; $::COPY $distro_top/$first_spdir/suse/ppc/kernel-ppc64*.ppc.rpm $distro_top/updates/kernel";
                     NodeUtils->runcmd($cmd, -1);		
		}
		
	   }else{
	   	$cmd = "$::MKDIR -p $distro_top/yast/sles8/suse/setup/descr";
	   	NodeUtils->runcmd($cmd,-1);
	   
           	$cmd = "$::COPY -a $distro_top/$first_origdir/suse/setup/descr $distro_top/yast/sles8/suse/setup";
	   	NodeUtils->runcmd($cmd, -1);
	   
	   	$cmd = "$::COPY -a $distro_top/$first_origdir/content $distro_top/$first_origdir/media.1 $distro_top/yast/sles8";
	   	NodeUtils->runcmd($cmd,-1);

                if($sp){
                     $cmd = "$::COPY -a $distro_top/$first_spdir/linux $distro_top/$first_spdir/driverupdate $distro_top";
                     NodeUtils->runcmd($cmd,-1);
		     
                     $cmd = "$::COPY -a $distro_top/$first_spdir/boot/loader/linux $distro_top/boot/loader/";
                     NodeUtils->runcmd($cmd,-1);
		     
                     $cmd = "$::COPY -a $distro_top/$first_spdir/boot/loader/initrd $distro_top/boot/loader/";
                     NodeUtils->runcmd($cmd,-1);
                }	
	  }
	   
	  my $order = "$distro_top/yast/order";
	  my $instorder = "$distro_top/yast/instorder";

	  if($arch =~ /ppc64/){
	  	if (open(FILE, ">$instorder"))
		{
		  	print FILE "$first_origdir\t$first_origdir\n";
			if($sp)
			{
				print FILE "$first_spdir\t$first_spdir\n";
			}
			close(FILE);
		}
	  }
	  
	  if ( open(FILE, ">$order")) {
	      if($arch =~ /ppc64/){
		      if ($sp)
		      {
			      print FILE "$first_spdir\t$first_spdir\n";
		      }
		      print FILE "$first_origdir\t$first_origdir\n";
	      }else{
		      if ($sp=~ /SP3/) {
			      print FILE "/$first_spdir\t/$first_spdir\n";
		      }
		      my $sec_origdir=$orig_disks[1]->{diskid_target};
		      print FILE "/yast/sles8\t/$first_origdir\n";
		      print FILE "/yast/ul\t/$sec_origdir\n";
	      }
	      close(FILE);
          }
	   # end of SLES8.1 support
        }else{ # for SuSE 
	   $cmd = "cd $realRPMS; $::LN -s ../../suse/*/*.rpm .";
	   NodeUtils->runcmd($cmd,-1); 
	   #end of SuSE support
	 }
    }# end of SuSE && SLES
    elsif($distro_name =~ /RedHat/){
    	 
	 ArchiveUtils->remove_all_links("$distro_top/RedHat");
	 ArchiveUtils->remove_all_links("$distro_top/RedHat/RPMS");
    	 
	 my $realRPMS = "$distro_top/RedHat/RPMS";
	 my $subDir = "";
	 if($sp ne undef){
		# link the RPMS from GA disks first
	 	my $orig_subdir = "$distro_name$distro_version-$arch";
		$cmd = "cd $realRPMS; $::LN -s ../../$orig_subdir/RedHat/RPMS/*.rpm . > /dev/null 2>&1";
		NodeUtils->runcmd($cmd,-1);
		
	 	$subDir = "$distro_name$distro_version-$sp";
	 }else{
	 	$subDir = "$distro_name$distro_version-$arch";
	 }
	 
	 $cmd = "cd $realRPMS; $::LN -s ../../$subDir/RedHat/RPMS/*.rpm . > /dev/null 2>&1";
	 NodeUtils->runcmd($cmd,-1);
    	 
	 if(-e "$realRPMS/../../$subDir/RedHat/Updates")
	 {
	 	$cmd = "cd $realRPMS; $::LN -s ../../$subDir/RedHat/Updates/*.rpm . > /dev/null 2>&1";
	 	NodeUtils->runcmd($cmd,-1);
	 }

	 $cmd = "cd $distro_top; $::LN -sf $subDir/* . > /dev/null 2>&1;$::LN -sf $subDir/.* . > /dev/null 2>&1;";
	 NodeUtils->runcmd($cmd,-1); 

	 $cmd = "cd $distro_top/RedHat; $::LN -sf ../$subDir/RedHat/* . > /dev/null 2>&1";
	 NodeUtils->runcmd($cmd,-1); 
    }

    if (($distro_name =~ /SuSE/) || ($distro_name =~ /SLES/))
    {
      if (-f "$distro_top/media.1/info.txt")
      {
        $cmd = "$::RM $distro_top/media.1/info.txt";
	NodeUtils->runcmd($cmd, 0);
      }
    }
    
    return;
}


sub copyDistroPkgs 
{
    my ($class,$arch,$distro_top, $distro_name,$distro_version,$sp) = @_;
    my ($cmd,$output,$orig_dir,$target,$ismounted,$pkghome);
    my ($progref,$progarg,$wrong_disk,$force_use_disk,$junk,$rc);
    
    my $platform = $::PLTFRM;
    if($arch =~ /i.86/) { $arch = "i386"; }

    my $orig_dir = getcwd();

    # Create the directory
    if (!(-e $distro_top))
    {
        $cmd = "$::MKDIR -p $distro_top;";
        $output = NodeUtils->runcmd($cmd, 0);
    }
       
    my @disks=();
    if(! defined($::pkgdefs{'distro_disks'}) )
    {
	 InstallUtils->get_pkgdefs($platform, $distro_name, $distro_version,$arch);  
    }
    
    my @orig_disks=@{$::pkgdefs{'distro_disks'}};
    
    if($sp eq ""){
	@disks = @orig_disks;
    }else{
	if($distro_name =~ /SLES/ && 
		!ArchiveUtils->is_req_disks_copied($distro_top,\@orig_disks))
	{
     		NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                  	 'csminstall', 'E1', 'EMsgReqOrigDisks');
		$rc = 0;
		goto done;
	}
    	if(defined $::pkgdefs{'sp_disks'}{$sp})
	{
		@disks=@{$::pkgdefs{'sp_disks'}{$sp}};
	}else{
		NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
			'csminstall', 'E1', 'EMsgBadServiceLevel',$sp);
		$rc = 0;
		goto done;
	}
    }

    if(scalar(@disks)<=0)
    {
	$rc = 0;
    	goto done;
    }
	
    my @pkgpath = ArchiveUtils->foundPkgPath("iso");
    my $images =  ArchiveUtils->probeImages(\@pkgpath,\@disks);
    
    foreach my $diskref(@disks){
    	my $diskname = $diskref->{name};
	my $disknum =  $diskref->{num};
	next if(defined($diskref->{not_for_full_install}));

	if(!defined $images->{$diskname}->{$disknum})
	{
	#
	# the disk is not included either in PKGPATH or iso files list.
	# try to search pkgs from cd
	#
		# Is it a wrong disk?
		$wrong_disk = 1;
		# Should force to use the disk?
		$force_use_disk = 0;
		
		while($wrong_disk && !$force_use_disk)
		{
			# Prompt insert disk
			NodeUtils->messageFromCat(
				'csmInstall.cat',  $::MSGMAPPATH,
				'csminstall',      'I',
				'IMsgINSERT_DISK', $diskname,
				$disknum
			);
			NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
				'csminstall', 'P', 'IMsgPRESS_ENTER');
			
			$junk       = getc;
		
	        	# Mount the CD-ROM
			if ($platform eq "AIX")
                	{
                    		sleep(5);#this is needed for AIX and wont hurt Linux (too much)
                    		`$::UNMOUNT $::MNTCDROM 2>/dev/null 1>/dev/null`;
                    		InstallUtils->MountAixCdrom();
                	}
                	else
                	{
                    		$cmd = "$::MOUNT $::MNTCDROM";
				
                    		# Ignore mount errors.  Usually they are because
                    		# the CD was already mounted.
                    		NodeUtils->runcmd($cmd, -1);
                	}

			# valid the disk if defined comp routine
			if(defined $diskref->{diskid_searchprog}){
			    $progref = $diskref->{diskid_searchprog};
			    $progarg = $diskref->{diskid_searchargs};
		        }else{
			    # suppose the inserted disk is correct if not defined 
			    # comp routine according to the orig logic
			    $wrong_disk = 0;
			    $ismounted  = 1;
			    $target = $::MNTCDROM;
			    next;
			}
			
			if( &$progref($::MNTCDROM,$progarg) )
			{
				$wrong_disk = 0;
				$target = $::MNTCDROM;
				$ismounted = 1;
				next;
			}else{
				# wrong disk, print a warning message		
                    		NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                	 'csminstall', 'W', 'EMsgWRONG_DISK', $diskname,
                                	 $disknum);
	                	NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                        		'csminstall', 'I', 'IMsgPRESS_ENTER_OR_FORCE');
                    		# Get user input
                        	$junk = getc;
		        	if ($junk eq "F" or $junk eq "f")
                    		{
					$force_use_disk = 1;
					$target = $::MNTCDROM;
					$ismounted = 1;
					next;
				}
 			}				
		} # end while($wrong_disk && $...)
	}else{
	#
	# the disk is included in either PKGPATH or iso files list
	#
		$target = $images->{$diskname}->{$disknum};
		
		# if the target is a iso image
		if( -f $target && $target=~/iso$/i ) 
		{
			$target = ArchiveUtils->mount_iso_image($target);
			if($target)
			{
				$ismounted = 1;
			}else{
				NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
					'csminstall', 'I', 'IMsgCANT_MOUNT', $target);
				$ismounted = 0;
			}
		
		}
	}
	
        # Copy the contents of the Distro disk to /csminstall
        # Handle SLES 8.1
	  if($platform eq "Linux"){
		$pkghome=$distro_top ."/". $diskref->{diskid_target};
		if(! -d $pkghome){
		       $cmd = "$::MKDIR -p $pkghome";
		       NodeUtils->runcmd($cmd, -1);
		}
		$cmd =
		"$::TAR cf - -C $target . | $::TAR xvf - -C $pkghome; ";
	  }else{
       		$cmd = "$::TAR cf - -C $target . | $::TAR xvf - ";
	  }
	  
          NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
              'csminstall', 'I', 'IMsgCOPYING_DISK', $diskname, $disknum);

          $output  = NodeUtils->runcmd($cmd, 0);
	  &show_copy_progress($cmd,$target, $pkghome);

          # Unmount the CD-ROM if necessary
	  if($ismounted)
	  {
               if ($platform eq "AIX")
               {
           	    `$::UNMOUNT $target 2>/dev/null 1>/dev/null`;
               }
               else
               {
                    $cmd = "$::UNMOUNT $target > /dev/null 2>&1";
                    NodeUtils->runcmd("$cmd", -1);
               }		
	  }
    } # end foreach my $diskref...

    $rc = 1; # successfully :)

done:
    chdir($orig_dir);
    return $rc;
}

#--------------------------------------------------------------------------------

=head3    copyRpm

        Copies an rpm to a destination argument

        Arguments:
               $RpmFile,
               $Rpmpath,
               $destDir
        Returns:
                none
        Globals:
                none
        Error:
                exits on error from NodeUtils->run_cmd(...)
        Example:
                ArchiveUtils->copyRpm($basename, $path, $::INSTALLDIR_CSMINSTLP);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub copyRpm
{
    my ($class, $rpmfile, $path, $destination) = @_;
    NodeUtils->message("I", 'IMsgCOPYING', $rpmfile);

    mkpath($destination, $::VERBOSE, 0755);

    NodeUtils->run_cmd("$::COPY $path/$rpmfile $destination");
    NodeUtils->run_cmd("$::CHMOD +r $destination/$rpmfile");

    #If there are any errors during the copy or chmod, run_cmd() exits.
}

#--------------------------------------------------------------------------------

=head3 copy_rpm

        Copies the rpms using the @::Rpms_to_be_copied and @::Rpm_name_path hash

        Arguments:
                none

        Returns:
                none
        Globals:
                @::Rpms_to_be_copied
                %::Rpm_name_path

        Error:
                csmInstall.cat E1
        Example:
                ServerUtils->copy_rpm();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub copy_rpm
{
    foreach my $my_rpm (@::Rpms_to_be_copied)
    {
        my ($location, $destination, $full_name);

        $full_name   = $::Rpm_name_path{$my_rpm}{'BaseName'};
        $location    = $::Rpm_name_path{$my_rpm}{'Location'};
        $destination = $::Rpm_name_path{$my_rpm}{'Destination'};

        # test parameters
        if (
            !(
                  (defined($full_name))
               && (defined($location))
               && (defined($destination))
            )
          )
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E1', 'EMsgNoRpmFound',
                                      $my_rpm);
        }

        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgCOPYING', $full_name);

=head3 mmm - copy_rpm

	-----------------
	This disconnected block of code is being preserved in the file, rather than
	being removed.  It is a part of a change which is pending, which, due to the
	scale of the change, is being defered to a bac or brahms, where it will be
	evaluated and accepted or rejected. 
	-----------------

	# There may be an rpm, which is contained in an iso image file
	# and listed in Rpms_to_be_copied.  This filename would not be
	# in Rpm_name_path (by design for this fix). Check to see if the
	# rpm is in the RpmIndex as an "ISO".  If it is, then copy it
	# using RpmIndex otherwise, error out.

	if ( RpmIndex->in_iso_image ( $full_name ) == $::OK )
	{
		#print "copying $full_name in RpmIndex to $location\n";
		RpmIndex->copy ($full_name, $destination );
	}
        # need an else here 
 	# actually the logic is not quite there yet.
=cut

        my $cmd = "$::COPY $location/$full_name $destination";
        NodeUtils->runcmd("$cmd");

        $cmd = "$::CHMOD +r $destination/$full_name";
        NodeUtils->runcmd("$cmd");
    }
}

#--------------------------------------------------------------------------------

=head3 create_rpm_list_to_copy

        This subroutine will create a real hash of the rpms to be
        copied, by comparing their versions.  The final hash populated
        is %::Rpms_to_be_copied

        Arguments:
                none
        Returns:
                none
        Globals:
                %::temp_CmdLinePathVersionName
                $::PackageVersionName
                @::Rpms_to_be_copied
                (@::Rpms_not_found
                $::PackageVersionName
                $::PREREQS_ATTR{'OSName
                $::ATTRS
        Error:
                none
        Example:
                ServerUtils->create_rpm_list_to_copy();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub create_rpm_list_to_copy
{
    my (@my_rpm_array, @my_result);
    my $my_rpm_string;
    my @temp_RpmsNotFoundInCmdPath_array = ();
    foreach my $path (keys %::temp_CmdLinePathVersionName)
    {
        @my_rpm_array = ();
        foreach my $my_rpm (@{$::temp_CmdLinePathVersionName{$path}})
        {
            push(@my_rpm_array, ($path . "/" . $my_rpm));
        }
        $my_rpm_string = join(" ", @my_rpm_array);
        my $cmd =
          "$::RPMCMD -qp --qf '%{Name}::%{Version}::%{Release}::%{Arch}\n' $my_rpm_string";
        @my_result = NodeUtils->runcmd("$cmd", -1);
        foreach my $i (@my_result)
        {
            if (!($i =~ /.*::.*::.*::.*/))
            {
                if ($i =~ /warning/) { next; }
                else
                {
                    my @error_message = split(/\s+/, $i);
                    foreach my $p (@error_message)
                    {
                        if ($p =~ /\.rpm/)
                        {
                            my @full_path_name = split(/\//, $p);
                            foreach my $temp (@full_path_name)
                            {
                                if ($temp =~ /\.rpm/)
                                {
                                    my @rpm_full_name = split(/-/, $temp);
                                    my $rpm_name_base = shift(@rpm_full_name);
                                    NodeUtils->message('E1', 'EMsgInvalidRpm',
                                                       $rpm_name_base);
                                }
                            }
                        }
                    }
                }
            }
            my ($name, $version, $release, $arch) = split(/::/, $i);
            if (exists $::CmdLinePathVersionName{$arch})
            {
                if (exists $::CmdLinePathVersionName{$arch}{$name})
                {
                    my $ext_ver =
                      $::CmdLinePathVersionName{$arch}{$name}{'Version'};
                    my $ext_rel =
                      $::CmdLinePathVersionName{$arch}{$name}{'Release'};
                    if (
                        InstallUtils->testVersion(
                                    $version, ">=", $ext_ver, $release, $ext_rel
                        )
                      )
                    {
                        $::CmdLinePathVersionName{$arch}{$name}{'Version'} =
                          $version;
                        $::CmdLinePathVersionName{$arch}{$name}{'Release'} =
                          $release;
                        $::CmdLinePathVersionName{$arch}{$name}{'Location'} =
                          $path;
                        $::CmdLinePathVersionName{$arch}{$name}{'Longname'} =
                          $name . "-" . $version . "-" . $release;
                    }
                }
                else
                {
                    $::CmdLinePathVersionName{$arch}{$name}{'Version'} =
                      $version;
                    $::CmdLinePathVersionName{$arch}{$name}{'Release'} =
                      $release;
                    $::CmdLinePathVersionName{$arch}{$name}{'Location'} = $path;
                    $::CmdLinePathVersionName{$arch}{$name}{'Longname'} =
                      $name . "-" . $version . "-" . $release;
                }
            }
            else
            {
                $::CmdLinePathVersionName{$arch}{$name}{'Version'}  = $version;
                $::CmdLinePathVersionName{$arch}{$name}{'Release'}  = $release;
                $::CmdLinePathVersionName{$arch}{$name}{'Location'} = $path;
                $::CmdLinePathVersionName{$arch}{$name}{'Longname'} =
                  $name . "-" . $version . "-" . $release;
            }
        }
    }

    # check for the result with the temp_CmdLinePathVersionName
    #foreach my $arch (%::CmdLinePathVersionName)
    #{
    #}

    #check the version and populate the to be copied hash and version not staisfied hash
    foreach my $arch (keys %::CmdLinePathVersionName)
    {
        if ($::COPY_OPT_FLAG)
        {

            #compare cm line vs defs
            foreach my $rpm_name (keys %{$::CmdLinePathVersionName{$arch}})
            {
                my $def_ver      = $::PackageVersionName{$rpm_name}{'Version'};
                my $def_rel      = $::PackageVersionName{$rpm_name}{'Release'};
                my $cmd_line_ver =
                  $::CmdLinePathVersionName{$arch}{$rpm_name}{'Version'};
                my $cmd_line_rel =
                  $::CmdLinePathVersionName{$arch}{$rpm_name}{'Release'};
                if (
                    InstallUtils->testVersion($cmd_line_ver, ">", $def_ver,
                                              $cmd_line_rel, $def_rel)
                  )
                {

                    #populate the copy hash
                    push(@::Rpms_to_be_copied, $rpm_name);
                }
                elsif (
                       InstallUtils->testVersion($cmd_line_ver, "=", $def_ver,
                                                 $cmd_line_rel, $def_rel)
                  )
                {

                    #populate the copy hash
                    push(@::Rpms_to_be_copied, $rpm_name);
                }
                else
                {

                    # error :rpm of the required version not found
                    push(@::Rpms_not_found, $rpm_name);
                }
            }
        }
        else
        {    #compare and populate the copy hash only necessary
                # First check against the command line and if the rpms are
                # found than  check the /csminstall.. directory
            foreach my $rpm_name (keys %{$::CmdLinePathVersionName{$arch}})
            {
                if (exists $::PathVersionName{$arch}{$rpm_name})
                {
                    my $def_ver = $::PackageVersionName{$rpm_name}{'Version'};
                    my $def_rel = $::PackageVersionName{$rpm_name}{'Release'};
                    my $cmd_line_ver =
                      $::CmdLinePathVersionName{$arch}{$rpm_name}{'Version'};
                    my $cmd_line_rel =
                      $::CmdLinePathVersionName{$arch}{$rpm_name}{'Release'};
                    my $path_ver =
                      $::PathVersionName{$arch}{$rpm_name}{'Version'};
                    my $path_rel =
                      $::PathVersionName{$arch}{$rpm_name}{'Release'};
                    if ($::CmdLinePathVersionName{$arch}{$rpm_name}{'Longname'}
                        eq $::PathVersionName{$arch}{$rpm_name}{'Longname'})
                    {

                        #compare:Cmd vs defs and populate the copy hash the rpm
                        if (
                            InstallUtils->testVersion(
                                                  $cmd_line_ver, ">=", $def_ver,
                                                  $cmd_line_rel, $def_rel)
                          )
                        {

                            #populate the copy hash
                            push(@::Rpms_to_be_copied, $rpm_name);
                            next;
                        }
                        else
                        {
                            push(@::Rpms_not_found, $rpm_name);
                            next;
                        }
                    }
                    else
                    {    #compare: command line vs path
                        if (
                            InstallUtils->testVersion(
                                                 $cmd_line_ver, ">=", $path_ver,
                                                 $cmd_line_rel, $path_rel)
                          )
                        {

                            #compare :cmd vs defs
                            if (
                                InstallUtils->testVersion(
                                                   $cmd_line_ver, ">=",
                                                   $def_ver,      $cmd_line_rel,
                                                   $def_rel
                                )
                              )
                            {

                                #populate the copy csm rpm
                                push(@::Rpms_to_be_copied, $rpm_name);
                                next;
                            }
                            else
                            {
                                push(@::Rpms_not_found, $rpm_name);
                                next;
                            }
                        }
                        else
                        {
                            if (
                                InstallUtils->testVersion(
                                                      $path_ver, ">=", $def_ver,
                                                      $path_rel, $def_rel)
                              )
                            {
                                next;
                            }
                            else
                            {
                                push(@::Rpms_not_found, $rpm_name);
                                next;
                            }
                        }
                    }
                }
                else
                {    # path doesn't exist
                    my $def_ver = $::PackageVersionName{$rpm_name}{'Version'};
                    my $def_rel = $::PackageVersionName{$rpm_name}{'Release'};
                    my $cmd_line_ver =
                      $::CmdLinePathVersionName{$arch}{$rpm_name}{'Version'};
                    my $cmd_line_rel =
                      $::CmdLinePathVersionName{$arch}{$rpm_name}{'Release'};
                    if (
                        InstallUtils->testVersion($cmd_line_ver, ">=", $def_ver,
                                                  $cmd_line_rel, $def_rel)
                      )
                    {

                        #populate the copy hash
                        push(@::Rpms_to_be_copied, $rpm_name);
                        next;
                    }
                    else
                    {
                        push(@::Rpms_not_found, $rpm_name);
                        next;
                    }
                }
            }
        }
    }
    if (   (scalar(@::Rpms_not_found) >= 1)
        || (scalar(@my_result) == 0)
        || (scalar(@::RpmsNotFoundInCmdPath) >= 1))
    {

        # check the /csminstall.. directory
        # gather the arch name and populate the valid arch array of
        # the PathVersionName hash depending on the os
        my (@my_temp_array, @valid_arch) = ();
        foreach my $arch (keys %::PathVersionName)
        {
            push(@my_temp_array, $arch);
        }
        if ($::PREREQS_ATTR{'OSName'} eq "AIX")
        {
            foreach my $arch (@my_temp_array)
            {
                if (($arch =~ /ppc/) || ($arch =~ /noarch/))
                {
                    push(@valid_arch, $arch);
                }
            }
        }
        elsif (   ($::PREREQS_ATTR{'OSName'} eq "Linux")
               || ($::ATTRS{'InstallOSName'} eq "Linux"))
        {
            foreach my $arch (@my_temp_array)
            {
                if (   ($arch =~ /86/)
                    || ($arch =~ /ia64/)
                    || ($arch =~ /ppc64/)
                    || ($arch =~ /ppc/)
                    || ($arch =~ /noarch/))
                {
                    push(@valid_arch, $arch);
                }
            }
        }
        chomp(@valid_arch);
        my (%temp_hash) = ();

        # remove the number for the rpm name in the RpmsNotFoundInCmdPath variable
        foreach my $rpm_name_notfound (@::RpmsNotFoundInCmdPath)
        {
            my @parts = split /-/, $rpm_name_notfound;
            my $shortname = shift @parts;
            my $p;
          SNAME: while ($p = shift @parts)
            {
                if ($p !~ m/^\d/)
                {    #if it doesn't start with a digit
                    $shortname .= "-$p";
                }
                else { unshift @parts, $p; last SNAME; }
            }
            my $tmp_var1;
            my $my_rindex = rindex($shortname, "*");
            if ($my_rindex != -1)
            {
                $tmp_var1 = substr($shortname, 0, rindex($shortname, "*"));
            }
            else { $tmp_var1 = $shortname; }
            $my_rindex = rindex($tmp_var1, "-");
            if (($my_rindex + 1) == 0) { $shortname = $tmp_var1; }
            elsif (($my_rindex + 1) == length($tmp_var1))
            {
                $shortname = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
            }
            push(@temp_RpmsNotFoundInCmdPath_array, $shortname);
        }
        @my_temp_array = (@::Rpms_not_found, @temp_RpmsNotFoundInCmdPath_array);
        @::Rpms_not_found =
          InstallUtils->get_uniqu_arry_elemnts(@my_temp_array);
        my @temp_not_found_rpm = ();
        @temp_not_found_rpm      = @::Rpms_not_found;
        @::Rpms_not_found        = ();
        @::RpmsNotFoundInCmdPath = ();
        my (@temp_array, @Rpmfound) = ();

        if (scalar(@valid_arch) <= 0)
        {
            @::Rpms_not_found = @temp_not_found_rpm;
        }
        foreach my $my_rpm (@temp_not_found_rpm)
        {
          PATHVER: foreach my $arch (@valid_arch)
            {
                if (exists $::PathVersionName{$arch}{$my_rpm})
                {
                    my $def_ver  = $::PackageVersionName{$my_rpm}{'Version'};
                    my $def_rel  = $::PackageVersionName{$my_rpm}{'Release'};
                    my $path_ver =
                      $::PathVersionName{$arch}{$my_rpm}{'Version'};
                    my $path_rel =
                      $::PathVersionName{$arch}{$my_rpm}{'Release'};
                    if (
                        InstallUtils->testVersion(
                                  $path_ver, ">=", $def_ver, $path_rel, $def_rel
                        )
                      )
                    {
                        my %temp_Rpmsfound_hash = ();
                        foreach my $my_Rpmfound (@::Rpmfound)
                        {
                            $temp_Rpmsfound_hash{$my_Rpmfound}++;
                        }
                        if (!exists($temp_Rpmsfound_hash{$my_rpm}))
                        {
                            push(@::Rpmfound, $my_rpm);
                            last PATHVER;
                        }
                        else { push(@::Rpms_not_found, $my_rpm); next PATHVER; }

                    }
                    else { push(@::Rpms_not_found, $my_rpm); next PATHVER; }
                }
                else { push(@::Rpms_not_found, $my_rpm); next PATHVER; }
            }
        }
        @::Rpms_not_found =
          InstallUtils->get_uniqu_arry_elemnts(@::Rpms_not_found);
        my %temp_Rpms_hash = ();
        foreach my $my_Rpmfound (@::Rpmfound)
        {
            $temp_Rpms_hash{$my_Rpmfound}++;
        }
        foreach my $my_rpm_notfound (@::Rpms_not_found)
        {
            if (!exists($temp_Rpms_hash{$my_rpm_notfound}))
            {
                push(@temp_array, $my_rpm_notfound);
            }
        }
        @::Rpms_not_found = @temp_array;
        @temp_array       = ();
        foreach my $my_rpm_notfound (@temp_RpmsNotFoundInCmdPath_array)
        {
            if (!exists($temp_Rpms_hash{$my_rpm_notfound}))
            {
                push(@temp_array, $my_rpm_notfound);
            }
        }
        @temp_RpmsNotFoundInCmdPath_array = @temp_array;

    }

    my %temp_hash = ();
    if (scalar(@::Rpms_to_be_copied) >= 1)
    {
        foreach my $rpm (@::Rpms_to_be_copied) { $temp_hash{$rpm}++; }
        foreach my $rpm (@temp_RpmsNotFoundInCmdPath_array)
        {
            if (!exists($temp_hash{$rpm})) { push(@::Rpms_not_found, $rpm); }
        }
        @::Rpms_not_found =
          InstallUtils->get_uniqu_arry_elemnts(@::Rpms_not_found);
    }
}

#--------------------------------------------------------------------------------

=head3 create_rpm_list_to_install

        Create the rpm list to be installed. The %::Rpms_to_be_installed hash
        the List of the rpms to be installed.  %::Rpms_already_installed hash
        has the list of rpms that are already been installed and
        %::RpmsNotFoundInCmdPath hash has the rpms list which are not found.

        Arguments:
                none
        Returns:
                none

        Globals:
                %::Rpms_to_be_installed
                %::Rpms_already_installe
                %::RpmsNotFoundInCmdPath
                $::CmdLinePathVersionName
                $::PackageVersionName_Server
        Error:
                none

        Example:
                ServerUtils->create_rpm_list_to_install();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub create_rpm_list_to_install
{
    my (@my_rpm_array, @my_result);
    my $my_rpm_string;
    foreach my $path (keys %::temp_CmdLinePathVersionName)
    {
        @my_rpm_array = ();
        foreach my $my_rpm (@{$::temp_CmdLinePathVersionName{$path}})
        {
            push(@my_rpm_array, ($path . "/" . $my_rpm));
        }
        $my_rpm_string = join(" ", @my_rpm_array);
        my $cmd =
          "$::RPMCMD -qp --qf '%{Name}::%{Version}::%{Release}::%{Arch}\n' $my_rpm_string";
        @my_result = NodeUtils->runcmd("$cmd", -1);
        foreach my $i (@my_result)
        {
            if (!($i =~ /.*::.*::.*::.*/)) { next; }
            my ($name, $version, $release, $arch) = split(/::/, $i);
            chomp($arch);
            if (exists $::CmdLinePathVersionName{$arch})
            {
                if (exists $::CmdLinePathVersionName{$arch}{$name})
                {
                    my $ext_ver =
                      $::CmdLinePathVersionName{$arch}{$name}{'Version'};
                    my $ext_rel =
                      $::CmdLinePathVersionName{$arch}{$name}{'Release'};
                    if (
                        InstallUtils->testVersion(
                                    $version, ">=", $ext_ver, $release, $ext_rel
                        )
                      )
                    {
                        $::CmdLinePathVersionName{$arch}{$name}{'Version'} =
                          $version;
                        $::CmdLinePathVersionName{$arch}{$name}{'Release'} =
                          $release;
                        $::CmdLinePathVersionName{$arch}{$name}{'Location'} =
                          $path;
                        $::CmdLinePathVersionName{$arch}{$name}{'Longname'} =
                          $name . "-" . $version . "-" . $release;
                    }
                }
                else
                {
                    $::CmdLinePathVersionName{$arch}{$name}{'Version'} =
                      $version;
                    $::CmdLinePathVersionName{$arch}{$name}{'Release'} =
                      $release;
                    $::CmdLinePathVersionName{$arch}{$name}{'Location'} = $path;
                    $::CmdLinePathVersionName{$arch}{$name}{'Longname'} =
                      $name . "-" . $version . "-" . $release;
                }    ##
            }
            else
            {
                $::CmdLinePathVersionName{$arch}{$name}{'Version'}  = $version;
                $::CmdLinePathVersionName{$arch}{$name}{'Release'}  = $release;
                $::CmdLinePathVersionName{$arch}{$name}{'Location'} = $path;
                $::CmdLinePathVersionName{$arch}{$name}{'Longname'} =
                  $name . "-" . $version . "-" . $release;
            }
        }
    }

    #check the version and populate the to be copied hash and version not staisfied hash
    foreach my $arch (keys %::CmdLinePathVersionName)
    {
        foreach my $rpm_name (keys %{$::CmdLinePathVersionName{$arch}})
        {
            if (exists $::rpmBasenames{$rpm_name})
            {
                my $def_ver =
                  $::PackageVersionName_Server{$rpm_name}{'Version'};
                my $def_rel =
                  $::PackageVersionName_Server{$rpm_name}{'Release'};
                my $path_ver =
                  $::CmdLinePathVersionName{$arch}{$rpm_name}{'Version'};
                my $path_rel =
                  $::CmdLinePathVersionName{$arch}{$rpm_name}{'Release'};
                my $exist_ver = $::rpmBasenames{$rpm_name}{'Version'};
                my $exist_rel = $::rpmBasenames{$rpm_name}{'Release'};
                if (
                    InstallUtils->testVersion(
                                  $path_ver, ">=", $def_ver, $path_rel, $def_rel
                    )
                  )
                {

                    if ($::CmdLinePathVersionName{$arch}{$rpm_name}{'Longname'}
                        eq $::rpmBasenames{$rpm_name}{'Longname'})
                    {
                        push(@::Rpms_already_installed, $rpm_name);
                        next;
                    }
                    elsif (
                           InstallUtils->testVersion($path_ver, ">", $exist_ver,
                                                     $path_rel, $exist_rel)
                      )
                    {
                        push(@::Rpms_to_be_installed, $rpm_name);
                        next;
                    }
                    elsif (
                           InstallUtils->testVersion(
                                                    $path_ver, "<=", $exist_ver,
                                                    $path_rel, $exist_rel)
                      )
                    {
                        push(@::Rpms_already_installed, $rpm_name);
                        next;
                    }
                }
                else
                {
                    if (
                        InstallUtils->testVersion(
                                $exist_ver, ">=", $def_ver, $exist_rel, $def_rel
                        )
                      )
                    {
                        push(@::Rpms_not_found_installed, $rpm_name);
                        next;
                    }
                    else
                    {
                        push(@::Rpms_not_found, $rpm_name);
                        next;
                    }
                }
            }
            else
            {

                # rpm not in the already installed list
                my $def_ver =
                  $::PackageVersionName_Server{$rpm_name}{'Version'};
                my $def_rel =
                  $::PackageVersionName_Server{$rpm_name}{'Release'};
                my $path_ver =
                  $::CmdLinePathVersionName{$arch}{$rpm_name}{'Version'};
                my $path_rel =
                  $::CmdLinePathVersionName{$arch}{$rpm_name}{'Release'};
                if (
                    InstallUtils->testVersion(
                                  $path_ver, ">=", $def_ver, $path_rel, $def_rel
                    )
                  )
                {
                    push(@::Rpms_to_be_installed, $rpm_name);
                    next;
                }
                else { push(@::Rpms_not_found, $rpm_name); next; }
            }
        }
    }
    my %temp_hash = ();
    if ($::FORCE_INSTALL)
    {
        @::Rpms_to_be_installed =
          (@::Rpms_to_be_installed, @::Rpms_already_installed);
        @::Rpms_already_installed = ();
    }
    foreach my $rpm (@::Rpms_to_be_installed) { $temp_hash{$rpm}++; }
    foreach my $rpm (@::RpmsNotFoundInCmdPath)
    {
        if (!exists($temp_hash{$rpm})) { push(@::Rpms_not_found, $rpm); }
    }
}

#--------------------------------------------------------------------------------

=head3    createRPMSdir

        Creates the proper /csminstall/.../RPMS directory structure 

        Arguments:
                $OS
                $distro_name
                $distro_version
                $arch

        Returns:
                undefined
        Globals:
                none
        Error:
                undefined

        Example:
                ServerUtils->createRPMSdir (   "Linux",
                                                $::DISTRO_NAME,
                                                $::DISTRO_VERSION,
                                                $::ARCH);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub createRPMSdir
{
    my ($class, $OS, $dist, $distver, $arch) = @_;
    use File::Path;    # Provides mkpath()

    my $base        = InstallUtils->getBaseDir($OS,     $dist, $distver, $arch);
    my $SMS_RPMS    = InstallUtils->getRPMSDir($OS,     $dist, $distver, $arch);
    my $SMS_updates = InstallUtils->getUpdateDir($OS,   $dist, $distver, $arch);
    my $SMS_install = InstallUtils->getInstallDir($OS,  $dist, $distver, $arch);
    my $realRPMS    = InstallUtils->getRealRPMSDir($OS, $dist, $distver, $arch);

    if (!-e "$base")
    {
        mkpath($base, $::VERBOSE, 0755);
    }
    if (!-e "$realRPMS")
    {
        mkpath($realRPMS, $::VERBOSE, 0755);
    }
    if (!-e "$SMS_updates")
    {
        mkpath($SMS_updates, $::VERBOSE, 0755);
    }
    if (!-e "$SMS_install")
    {
        mkpath($SMS_install, $::VERBOSE, 0755);
    }

    # Now we make new symbolic links to make sure they are
    # up to date
    if ($dist =~ /RedHat/)
    {

        #this is a symbolic link to ->RedHat/RPMS
        # force the change to make the symbolic link
        # relative, instead of full path.
        if (-d $SMS_RPMS)
        {

            #print "removing $SMS_RPMS\n";
            NodeUtils->runcmd("rm $SMS_RPMS");
        }

        #print "Now linking\n";
        #print "dir: $realRPMS\n";
        my $basedir = "$realRPMS/../../";
        my @pa      = split("/", $realRPMS);
        my $srcd    = pop @pa;
        $srcd    = pop(@pa) . "/" . $srcd;
        $basedir = join("/", @pa);

        #print "basedir: $basedir\nsrc: $srcd\n";
        my (undef, $target) = split("$basedir/", $SMS_RPMS);

        #print "target: $target\n";
        my $ln_cmd = "cd $basedir; $::LN -s $srcd $target";

        #print "LInk: $ln_cmd\n";
        NodeUtils->runcmd($ln_cmd, 0);
    }

    #SuSE Changes
    elsif ($dist =~ /SuSE/ || $dist =~ /SLES/)
    {
        if (-d $SMS_RPMS)
        {

            #print "removing $SMS_RPMS\n";
            NodeUtils->runcmd("rm $SMS_RPMS");
        }

        #print "Now linking\n";
        #print "dir: $realRPMS\n";
        my $basedir = "$realRPMS/../../";
        my @pa      = split("/", $realRPMS);
        my $srcd    = pop @pa;
        $srcd    = pop(@pa) . "/" . $srcd;
        $basedir = join("/", @pa);

        #print "basedir: $basedir\nsrc: $srcd\n";
        my (undef, $target) = split("$basedir/", $SMS_RPMS);

        #print "target: $target\n";
        my $ln_cmd = "cd $basedir; $::LN -s $srcd $target";

        #print "LInk: $ln_cmd\n";
        NodeUtils->runcmd($ln_cmd, 0);

        #End of SuSE Changes
    }
    else
    {
        mkpath($SMS_RPMS, $::VERBOSE, 0755);
    }
}

#--------------------------------------------------------------------------------

=head3    createRPMList

        Creates  a global hash of installed RPMS.


        Arguments:
                none


        Returns:
                none


        Globals:
                $::rpmShortnames
                $::rpmBasenames
        Error:
                undefined


        Example:
                ArchiveUtils->createRPMList();


        Comments:
                Subroutine must be called before checkRPMInstall.

=cut

#--------------------------------------------------------------------------------

sub createRPMList
{

    #first run rpm -qa to get a list of all rpms installed
    my @output = `$::RPMCMD -qa`;
    foreach my $line (@output)
    {
        chomp $line;
        $::rpmShortnames{$line} = 1;

        #now create the basename
        my @parts = split /-/, $line;
        my $basename = shift @parts;
        my $p;
      BNAME: while ($p = shift @parts)
        {
            if ($p !~ m/^\d/)
            {    #if it doesn't start with a digit
                $basename .= "-$p";
            }
            else
            {
                unshift @parts, $p;
                last BNAME;
            }
        }
        $::rpmBasenames{$basename} = 1;
    }

}

#--------------------------------------------------------------------------------

=head3    createRPMVersionListAlreadyInstalled

        Create a list(hash) of rpm's version, release and long name
        which are already been installed on the machine.  This
        routine can replace the routine createRPMList.  This routine
        also sets the variable which has been already used.


        Arguments:
                none
        Returns:
                undefined
        Globals:
                none
        Error:
                none


        Example:
                # determine if an rpm has already been installed
                ServerUtils->createRPMVersionListAlreadyInstalled(); 


        Comments:
                none_

=cut

#--------------------------------------------------------------------------------

sub createRPMVersionListAlreadyInstalled
{

    #first run rpm -qa to get a list of all rpms installed
    my @output =
      `$::RPMCMD -qa --qf '%{Name}::%{Version}::%{Release}::%{Arch}\n'`;
    chomp @output;
    my ($name, $version, $release, $arch);
    foreach my $line (@output)
    {
        chomp $line;
        ($name, $version, $release, $arch) = split(/::/, $line);
        my $longname = $name . "-" . $version . "-" . $release;
        $::rpmBasenames{$name}{'Version'}  = $version;
        $::rpmBasenames{$name}{'Release'}  = $release;
        $::rpmBasenames{$name}{'Longname'} = $longname;
        $::rpmBasenames{$name}{'Arch'}     = $arch;
        $::rpmShortnames{$longname}        = 1;
    }
}

#--------------------------------------------------------------------------------

=head3  createBatch  

        Groups the given nodes according to the fanout value.

        Arguments:
                $nodeList 
                $batchNodes 
                $fanout

        Returns:
                Fills $batchNodes.
        Globals:
                none    
        Error:
                undefined

        Example:
               my (@nodeList) = @_;
               my @batch = ();
               my $fanout = $ENV{'CSM_FANOUT'};
               if ($fanout eq '') { $fanout = $::DEFAULT_FANOUT; }
               ArchiveUtils->createBatch(\@nodeList, \@batch, $fanout); 

        Comments:

=cut

#--------------------------------------------------------------------------------
sub createBatch
{
    shift;
    my ($nodeList, $batchNodes, $fanout) = @_;
    my $length = @$nodeList;
    if ($length <= $fanout)
    {
        push(@$batchNodes, $nodeList);
    }
    else
    {

        #group them by the size of fanout value
        my $size = $fanout;
        my @batch;
        foreach my $node (@$nodeList)
        {
            push(@batch, $node);
            $size--;
            unless ($size)
            {
                my @newBatch = @batch;
                push(@$batchNodes, \@newBatch);
                $size  = $fanout;
                @batch = ();
            }
        }    #end of foreach
        if (@batch)
        {

            #last batch
            push(@$batchNodes, \@batch);
        }

    }    # end of else
}

#--------------------------------------------------------------------------------

=head3   displayProgress 

           Shows the %value of CD copy. This function is intended to be used by
           show_copy_progress subroutine.
        Arguments:
                 $lastFile 
                 $total 
                 $totalSize 
                 $isLastFile
        Returns:
                $total
        Globals:
               none
        Error:
                undefined

        Example:
               none

        Comments:  This function is intended to be used by show_copy_progress 
                   subroutine. 


=cut

#--------------------------------------------------------------------------------
sub displayProgress
{
    my ($lastFile, $total, $totalSize, $isLastFile) = @_;
    my @sizeString = ();
    my $size       = 0;
    @sizeString = NodeUtils->runcmd("du -a $lastFile", -1);
    my ($size) = split(/\s+/, $sizeString[0]);
    $size =~ s/^\s*//;    # Remove any leading whitespace
    $size =~ s/\s*$//;    # Remove any trailing whitespace
    if ($size =~ /\d+/)
    {
        $total = $total + $size;
        my $progress = int(($total / $totalSize) * 100);
        if ($progress > 100)
        {
            $progress = 100;
        }
        if ($isLastFile)
        {
            print("$progress% complete...\n");
        }
        else
        {
            print("$progress% complete...\r");
        }
    }    # end of else
    return $total;

}

#--------------------------------------------------------------------------------

=head3    findImagesInPath

        Find the images  in the given path.

        Arguments:
                $image
                @path

        Returns:
                @array of found $images in $path
        Globals:
                none    
        Error:
                undefined

        Example:
                 my @images =
                        ServerUtils->findImagesInPath($file, @::PKGPATH);

        Comments:
                The $image parameter can have a *, i.e. the routine
                can find more than one $image in the $path.

=cut

#--------------------------------------------------------------------------------

sub findImagesInPath
{

    # the $image variable may have a *, so we may find more than one that
    # matches.

    my ($class, $image, @path) = @_;
    my (@tmpImages, @returnImages, $tmpImage, $realImage);

    foreach my $p (@path)
    {
        my $filename = "$p/$image";

        # use the ls command here instead of the -e operator
        # so we can handle *s in the names

        if (`/bin/ls $filename 2> /dev/null`)
        {

            # put all of the images we just got into @tmpImages array
            chomp(@tmpImages = `/bin/ls $filename`);

            # Go through each tmpImage and see if the base name already
            # exists in the returnImages array.  If it does exist, don't
            # put it in, otherwise, put it in!

            foreach $tmpImage (@tmpImages)
            {

                # get the base name of the test image.

                my $tstImageBaseName;
                my $defined = 0;
                ($tstImageBaseName = $tmpImage) =~ s:^.*/::g;

                foreach $realImage (@returnImages)
                {

                    # get the base name of the real image

                    my $realImageBaseName;
                    ($realImageBaseName = $realImage) =~ s:^.*/::g;

                    if ($realImageBaseName eq $tstImageBaseName)
                    {
                        $defined = "true";
                        last;
                    }
                }

                unless ($defined)
                {
                    push @returnImages, $tmpImage;
                }
                else
                {

                    print "\n\nnot copying $tmpImage\n\n";
                }
            }
        }
    }
    return @returnImages;
}

#--------------------------------------------------------------------------------

=head3    findRpm

         Try to find and return the rpm file that is the required version.

        Arguments:
                 $pkg
                 $operator
                 $version
                 @my_pat
        Returns:
                Full package name of required rpm - as a string.
        Globals:
                @::VALID_DISTRO
                $::TFTPBOOT
                $::DISTRO_SHORTNAME
                $::DISTRO_RPMDIR
        Error:
                messageFromCat E11

        Example:
        my $newrpm =    InstallUtils->findRpm(    $pkg,
                            $operator,
                            $version,
                            @my_path);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub findRpm
{
    my ($class, $pkg, $operator, $version, @my_path) = @_;

    my $os_rpm_path  = $my_path[0];
    my $pkg_rpm_path = $my_path[1];
    if ($::PREREQS_ATTR{'OSName'} eq "Linux")
    {

        # Get the current distribution if it was not already obtained.
        my $distro = $::DISTRO;
        if (!$distro)
        {
            $distro =
                NodeUtils->get_DistributionName . " "
              . NodeUtils->get_DistributionVersion;
            if (!grep(/^$distro$/, @::VALID_DISTROS))
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                           'csminstall', 'W', 'EMsgUNSUPPORTED_DISTRO', $distro,
                           join(', ', @::VALID_DISTROS));
            }
            else
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'V', 'IMsgDETECTED_DISTRO', $distro);
            }
        }
    }

    # note: The -vr options on the ls command gives us the entries in
    #       reverse version order to get the latest version first.
    my @rpms;
    my @rpms1;
    my @rpms2;

    # Look for the rpm in packages
    if (NodeUtils->isLinux)
    {
        @rpms1 = NodeUtils->runcmd("$::LS -vr $pkg_rpm_path/$pkg-*", -1);
    }
    else
    {
        @rpms1 = NodeUtils->runcmd("$::LS  $pkg_rpm_path/$pkg-*", -1);
    }
    my $rc1 = $::RUNCMD_RC;
    if (!$rc1) { @rpms = (@rpms, @rpms1); }    # Only add if no errors

    # Look for the rpm in  RPMS
    #my $TFTPBOOT_DISTRORPM = "$::TFTPBOOT/$::DISTRO_SHORTNAME{$distro}/$::DISTRO_RPMDIR{$distro}";
    if (NodeUtils->isLinux)
    {
        @rpms2 = NodeUtils->runcmd("$::LS -vr $os_rpm_path/$pkg-*", -1);
    }
    else
    {
        @rpms2 = NodeUtils->runcmd("$::LS $os_rpm_path/$pkg-*", -1);
    }
    my $rc2 = $::RUNCMD_RC;
    if (!$rc2) { @rpms = (@rpms, @rpms2); }    # Only add if no errors

    if (($rc1 && $rc2) || !scalar(@rpms)) { return undef; }

    foreach my $r (@rpms)
    {

        #my ($ipkg, $iversion, $irelease) = split('-', $r);
        my ($fn) = $r =~ m|^.*?([^/]+)$|;    # get rid of the directory, if any
                                             #print "fn=$fn\n";
        my ($ipkg, $iversion, $irelease) = $fn =~ /^(.+)-(\d.*)-(.*)$/;

        #print "ipkg=$ipkg, iversion=$iversion, irelease=$irelease\n";
        # Note: irelease has .i386.rpm on the end of it
        if ($ipkg ne $pkg || !length($iversion)) { next; }
        if (   !length($operator)
            || !length($version)
            || InstallUtils->testVersion($iversion, $operator, $version))
        {
            $operator = " " if (!$operator);
            $version  = " " if (!$version);

            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     'V',
                                      'IMsgFOUND',      $r,
                                      $operator,        $version
                                      );
            return $r;
        }
    }
    return undef;    # didn't find a suitable rpm

}

#--------------------------------------------------------------------------------

=head3    findRpmInPath

         Find the rpm package in the given path

        Arguments:
                $rpmPackageName
                @path

        Returns:
                Absolute path to rpm package. Package name is not
                returned with path value.

        Globals:
                none
        Error:
                none
        Example:
                $path =
                   ArchiveUtils->findRpmInPath($rpmfile, @my_path);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub findRpmInPath
{
    my ($class, $rpmfile, @path) = @_;
    foreach my $p (@path)
    {
        my $filename = "$p/$rpmfile";

        # use the ls command here instead of the -e operator so we can handle *s in the names
        #print "looking for $filename: ", `/bin/ls $filename`, "\n";
        if (`/bin/ls $filename 2> /dev/null`)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     'V',
                                      'IMsgFOUND_RPM',  $rpmfile,
                                      $p
                                      );
            return $p;
        }
    }

    return undef;
}

#--------------------------------------------------------------------------------

=head3 findRpmInPath_java

        Find the IBMJava rpm package in the given path 

        Arguments:
                $rpmFile
                @path

        Returns:
                rpm name as a string
                or undef.       
        Globals:
                none
        Error:
                none
        Example:
                $path =
                     ArchiveUtils->findRpmInPath_java ( $rpm_pre_file,
                                                        @full_PKGPATH );
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub findRpmInPath_java
{
    my ($class, $rpmfile, @path) = @_;
    foreach my $p (@path)
    {
        my $filename = "$p/$rpmfile";

        # use the ls command here instead of the -e operator so we can handle *s in the names
        if (`/bin/ls $filename 2> /dev/null`)
        {

            # process the rpm  name for the packager...
            my @outout =
              NodeUtils->runcmd(
                "$::RPMCMD -qp --qf '%{Name}::%{Version}::%{Release}::%{Arch}::%{Vendor}\n' $filename",
                -1
                );
            foreach my $i (@outout)
            {
                if (!($i =~ /.*::.*::.*::.*::.*/)) { next; }
                my ($name, $version, $release, $arch, $packager_name) =
                  split(/::/, $i);
                if (   ($packager_name =~ /International Business Machines/)
                    || ($packager_name =~ /UnitedLinux/))
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                              'csminstall', 'V', 'IMsgFOUND_RPM', $rpmfile, $p);
                    return $p;
                }
                else { next; }
            }
        }

=head3 mmm - findRpmInPath

	-----------------
	This disconnected block of code is being preserved in the file, rather than
	being removed.  It is a part of a change which is pending, which, due to the
	scale of the change, is being defered to a bac or brahms, where it will be
	evaluated and accepted or rejected. 
	-----------------

	# Check if rpmfile is in an iso image.  If we got here
	# we can assume that it will be in an iso image if it exists
	# in RpmIndex.  If in_iso is true, then return the path 
	# otherwise return undef.  When it gets copied we need to
	# be there to resolve any iso_image issues (ie mount and copy).

        # find keys matching $rpmfile wildcard string
        my $hash_ref = RpmIndex->defs_filter ( $rpmfile );
        my %ret_hash = %$hash_ref;

	 foreach my $arch ( keys %ret_hash)
	 {
	    my $array = @ret_hash { $arch };
	    foreach my $key ($array)
	    {
	    	if ( RpmIndex->in_iso_image ( $rpmfile ) == $::OK )
	    	{
                    my $ret_path = RpmIndex->path_filter ( $key );
		    #print "findRpmInPath: returning $ret_path \n";
	            return $ret_path;
	    	}
	   }
	}

=cut

    }
    return undef;
}

#--------------------------------------------------------------------------------

=head3    get_csminstall_pathVersion

        Get the version & release of the rpms in the /csminstall/{Linux|AIX} path.
        This routine will populate the PathVersionName hash

        Arguments:
                none

        Returns:
                undefined

        Globals:
                $::CSMINSTALLPATH_FLAG
                $::PREREQS_ATTR
                $::INSTALLDIR_CSMPKG
                $::INSTALLDIR_OS_NAME_RPMS
                $::PathVersionName
        Error:
                NodeUtills=->message E2

        Example:
                ServerUtils->get_csminstall_pathVersion();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_csminstall_pathVersion
{
    $::CSMINSTALLPATH_FLAG = 0;
    my ($my_path1, $my_path2);
    if (   ($::PREREQS_ATTR{'OSName'} eq "Linux")
        || ($::ATTRS{'InstallOSName'} eq "Linux"))
    {
        $my_path1 = $::INSTALLDIR_CSMPKG;
        $my_path2 = $::INSTALLDIR_OS_NAME_RPMS;
        my (@my_rpms, @my_result, @my_temp_array) = ();
        my @my_path = ($my_path1, $my_path2);
        foreach my $mydir (@my_path)
        {
            opendir RPMDIR, $mydir;

            # use two temp files to handle each rpm file
            # only grep *.rpm files ( not . and .. files )
            my $myfile1 = "/tmp/csm_$$.1";
            my $myfile2 = "/tmp/csm_$$.2";
            open(TMPFILE1, ">$myfile1")
              || NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                          'csminstall', "E", 'EMsgCANT_WRITE_FILE', "$myfile1");
            while ($_ = readdir(RPMDIR))
            {
                my $file = "$mydir/$_";
                if ($file !~ /\.rpm$/) { next; }
                print TMPFILE1 "$file\n";
            }
            close TMPFILE1;
            if (-z $myfile1) { next; }
            my $cmd =
              "cat $myfile1 | xargs /bin/rpm -qp --qf '%{Name}::%{Version}::%{Release}::%{Arch}\n' > $myfile2";
            system($cmd);
            open(TMPFILE2, "<$myfile2")
              || NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCANT_READ_FILE', $myfile2);
            while (<TMPFILE2>)
            {
                my $k = $_;
                if (!($k =~ /.*::.*::.*::.*/)) { next; }
                my ($name, $version, $release, $arch) = split(/::/, $k);
                chomp($arch);

                # check if the arch exits
                if (exists $::PathVersionName{$arch})
                {

                    # check of the rpm already exits, if yes, than get the latest
                    if (exists $::PathVersionName{$arch}{$name})
                    {
                        my $ext_ver =
                          $::PathVersionName{$arch}{$name}{'Version'};
                        my $ext_rel =
                          $::PathVersionName{$arch}{$name}{'Release'};
                        if (
                            InstallUtils->testVersion(
                                    $version, ">=", $ext_ver, $release, $ext_rel
                            )
                          )
                        {
                            $::PathVersionName{$arch}{$name}{'Version'} =
                              $version;
                            $::PathVersionName{$arch}{$name}{'Release'} =
                              $release;
                            $::PathVersionName{$arch}{$name}{'Location'} =
                              $mydir;
                            $::PathVersionName{$arch}{$name}{'Longname'} =
                              $name . "-" . $version . "-" . $release;
                        }
                    }
                    else
                    {
                        $::PathVersionName{$arch}{$name}{'Version'}  = $version;
                        $::PathVersionName{$arch}{$name}{'Release'}  = $release;
                        $::PathVersionName{$arch}{$name}{'Location'} = $mydir;
                        $::PathVersionName{$arch}{$name}{'Longname'} =
                          $name . "-" . $version . "-" . $release;
                    }
                }
                else
                {
                    $::PathVersionName{$arch}{$name}{'Version'}  = $version;
                    $::PathVersionName{$arch}{$name}{'Release'}  = $release;
                    $::PathVersionName{$arch}{$name}{'Location'} = $mydir;
                    $::PathVersionName{$arch}{$name}{'Longname'} =
                      $name . "-" . $version . "-" . $release;
                }
            }
            close TMPFILE2;
            system("$::RM -f $myfile1");
            system("$::RM -f $myfile2");
            closedir RPMDIR;
        }
    }
    elsif ($::PREREQS_ATTR{'OSName'} eq "AIX")
    {
    }
    else { NodeUtils->message('E2', 'EMsgINVALID_OSTYPE'); }
}

#--------------------------------------------------------------------------------

=head3    get_definition_version

        Returns the version and release of the definition rpm/fileset
        which is defined in the defs file.

                I/P     - rpm name from the defs file
                O/P     - version and release delimited by "::"  

        Arguments:
                rpm definition file name

        Returns:
                the string: "$version::$release"

        Globals:
                none
        Error:
                undefined
        Example:
                 my($my_version, $my_release) =
                    split(/::/,ServerUtils->get_definition_version($tmp_var_rpm));
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_definition_version
{
    my ($class, $my_rpm_def) = @_;
    my ($req_ver,  $req_rel);
    my ($tmp_var1, $tmp_var2, $tmp_var3);

    #get the base name of the rpm
    my $my_rindex = rindex($my_rpm_def, "*");
    if ($my_rindex != -1)
    {
        $tmp_var1 = substr($my_rpm_def, 0, rindex($my_rpm_def, "*"));
    }
    else { $tmp_var1 = $my_rpm_def; }

    #get the version and release by processing the filename
    $my_rindex = rindex($tmp_var1, "-");
    if (($my_rindex + 1) == 0) { $req_ver = 0; $req_rel = 0; }
    else
    {
        $tmp_var2 = substr($tmp_var1, rindex($tmp_var1, "-") + 1);
        $tmp_var1 = substr($tmp_var1, 0, rindex($tmp_var1, "-"));
        $my_rindex = rindex($tmp_var1, "-");
        if ($my_rindex != -1)
        {
            $tmp_var3 = substr($tmp_var1, rindex($tmp_var1, "-") + 1);
            if (length($tmp_var2) > 0)
            {
                if ($tmp_var2 =~ /^[\d\.]*$/)
                {
                    if ($tmp_var3 =~ /^[\d\.]*$/)
                    {
                        $req_ver = $tmp_var3;
                        $req_rel = $tmp_var2;
                    }
                    else { $req_ver = $tmp_var2; $req_rel = 0; }
                }
                else { $req_ver = 0; $req_rel = 0; }
            }
            else { $req_ver = 0; $req_rel = 0; }
        }
        else
        {
            if (length($tmp_var2) > 0)
            {
                if ($tmp_var2 =~ /^[\d\.]*$/)
                {
                    $req_ver = $tmp_var2;
                    $req_rel = 0;
                }
                else { $req_ver = 0; $req_rel = 0; }
            }
            else { $req_ver = 0; $req_rel = 0; }
        }
    }
    my $return_str = $req_ver . "::" . $req_rel;
    return ($return_str);
}

#--------------------------------------------------------------------------------

=head3	getPackageList

	get packages lists

    Arguments:
        none
    Returns:
        # Lists of Open Source Packages that are required on the node
        @::opensrc_rpm_prereqs

        # Lists of packages that are part of each CSM component
        @::csm_packages

	# rsct client packages
        @::rsct_packages

	# director packages
        @::director_packages

        # Operating System Prereqs for Managed Nodes
        @::os_prereq

	@ package version name
        $::PackageVersionName

    Globals:
        see returns
    Error:
        multipl E1 msgs
    Example:
        ArchiveUtils->getPackageList();
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub getPackageList
{
    %::pkgdefs =
      ServerUtils->get_pkgdefs(
                               $::ATTRS{'InstallOSName'},
                               $::ATTRS{'InstallDistributionName'},
                               $::ATTRS{'InstallDistributionVersion'},
                               $::ATTRS{'InstallPkgArchitecture'},
                               'MgdNode',
                               $::ATTRS{'InstallCSMVersion'}
                               );

    if ($::ATTRS{'InstallOSName'} eq "AIX")
    {
        $::osTypeVersion =
          $::ATTRS{'InstallOSName'} . $::ATTRS{'InstallDistributionVersion'};
        $::INSTALLDIR       = "/csminstall";
        $::INSTALLDIR_CSM   = $::INSTALLDIR . "/csm";
        $::INSTALLDIR_CSMVR =
          $::INSTALLDIR_CSM . "/" . $::ATTRS{'InstallCSMVersion'};
        $::INSTALLDIR_CSMVRBIN = $::INSTALLDIR_CSMVR . "/bin";

        $::INSTALLDIR_OS    = $::INSTALLDIR . "/" . $::ATTRS{'InstallOSName'};
        $::INSTALLDIR_OSVER =
          $::INSTALLDIR_OS . "/" . $::ATTRS{InstallDistributionVersion};
        $::INSTALLDIR_OSCSM = $::INSTALLDIR_OS . "/csm";

        $::INSTALLDIR_CSMVER =
          $::INSTALLDIR_OSCSM . "/" . $::ATTRS{'InstallCSMVersion'};

        $::INSTALLDIR_CSMBIN    = $::INSTALLDIR_CSMVER . "/bin";
        $::INSTALLDIR_CSMPKG    = $::INSTALLDIR_CSMVER . "/packages";
        $::INSTALLDIR_CSMRPM    = $::INSTALLDIR_CSMPKG . "/rpms";
        $::INSTALLDIR_CSMINSTLP = $::INSTALLDIR_CSMPKG . "/installp";

        #
        # create package lists
        #

        # List of Open Source Packages that are required on the node
        my @mgdnode_open_srcrpms = (@{$::pkgdefs{opensrc_prereqs}});
        @::opensrc_rpm_prereqs = (@mgdnode_open_srcrpms);

        # Lists of packages that are part of each CSM component
        my @csm_client_packages = (@{$::pkgdefs{csm_packages}});
        @::csm_packages = (@csm_client_packages);

        my @rsct_client_packages = (@{$::pkgdefs{rsct_packages}});
        @::rsct_packages = (@rsct_client_packages);

        # Operating System Prereqs we need for Managed Nodes
        @::os_prereq = (@{$::pkgdefs{os_prereqs}});

    }
    elsif ($::ATTRS{'InstallOSName'} eq "Linux")
    {
        $::osTypeVersion =
            $::ATTRS{'InstallOSName'}
          . $::ATTRS{'InstallDistributionName'}
          . $::ATTRS{'InstallDistributionVersion'};
        $::INSTALLDIR       = "/csminstall";
        $::INSTALLDIR_CSM   = $::INSTALLDIR . "/csm";
        $::INSTALLDIR_CSMVR =
          $::INSTALLDIR_CSM . "/" . $::ATTRS{InstallCSMVersion};
        $::INSTALLDIR_CSMVRBIN = $::INSTALLDIR_CSMVR . "/bin";

        $::INSTALLDIR_OS =
            $::INSTALLDIR . "/"
          . $::ATTRS{"InstallOSName"} . "/"
          . $::ATTRS{'InstallDistributionName'};

        #/csminstall/Linux/RedHat
        $::INSTALLDIR_OSVER =
          $::INSTALLDIR_OS . "/" . $::ATTRS{InstallDistributionVersion};
        $::INSTALLDIR_OSVER_ARCH =
          $::INSTALLDIR_OSVER . "/" . $::ATTRS{'InstallPkgArchitecture'};

        $::INSTALLDIR_OSCSM  = $::INSTALLDIR_OS . "/csm";
        $::INSTALLDIR_CSMVER =
          $::INSTALLDIR_OSCSM . "/" . $::ATTRS{InstallCSMVersion};

        my $INSTALLDIR_OS_NAME = $::PREREQS_ATTR{DistributionName};
        if ($::PREREQS_ATTR{DistributionName} =~ /RedHat/)
        {
            $INSTALLDIR_OS_NAME = "RedHat";
        }
        $::INSTALLDIR_OS_NAME_RPMS =
          $::INSTALLDIR_OSVER_ARCH . "/" . $INSTALLDIR_OS_NAME . "/RPMS";

        #/csminstall/Linux/RedHat/7.3/i386/RedHat/RPMS
        $::INSTALLDIR_CSMBIN = $::INSTALLDIR_CSMVER . "/bin";
        $::INSTALLDIR_CSMPKG = $::INSTALLDIR_CSMVER . "/packages";

        #
        # create package lists
        #

        # Lists of Open Source Packages that are required on the node
        my @mgdnode_open_srcrpms = (@{$::pkgdefs{opensrc_prereqs}});
        @::opensrc_rpm_prereqs = (@mgdnode_open_srcrpms);

        # Lists of packages that are part of each CSM component
        my @csm_client_packages = (@{$::pkgdefs{csm_packages}});
        @::csm_packages = (@csm_client_packages);

        my @rsct_client_packages = (@{$::pkgdefs{rsct_packages}});
        @::rsct_packages = (@rsct_client_packages);

        # No need of  director if the OS is AIX
        if ($::PLTFRM eq "Linux")
        {
            @::director_packages = (@{$::pkgdefs{director_packages}});
        }
        else
        {
            @::director_packages = ();
        }

        # Operating System Prereqs for Managed Nodes
        @::os_prereq = (@{$::pkgdefs{os_prereqs}});

        foreach my $tmp_var_rpm (
                                 @::opensrc_rpm_prereqs, @::csm_packages,
                                 @::rsct_packages,       @::director_packages,
                                 @::os_prereq
          )
        {
            my ($my_version, $my_release) =
              split(/::/, ArchiveUtils->get_definition_version($tmp_var_rpm));
            my @parts = split /-/, $tmp_var_rpm;
            my $basename = shift @parts;
            my $p;
          BNAME: while ($p = shift @parts)
            {
                if ($p !~ m/^\d/)
                {    #if it doesn't start with a digit
                    $basename .= "-$p";
                }
                else { unshift @parts, $p; last BNAME; }
            }
            my $tmp_var1;
            my $my_rindex = rindex($basename, "*");
            if ($my_rindex != -1)
            {
                $tmp_var1 = substr($basename, 0, rindex($basename, "*"));
            }
            else { $tmp_var1 = $basename; }
            $my_rindex = rindex($tmp_var1, "-");
            if (($my_rindex + 1) == 0) { $basename = $tmp_var1; }
            elsif (($my_rindex + 1) == length($tmp_var1))
            {
                $basename = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
            }
            else { $basename = $tmp_var1; }

            $::PackageVersionName{$basename}{'Version'}  = $my_version;
            $::PackageVersionName{$basename}{'Release'}  = $my_release;
            $::PackageVersionName{$basename}{'FullName'} = $tmp_var_rpm;
        }

    }
    else
    {
        MessageUtils->message("E2", 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3    get_PkgArchitecture

        Linux only routine.

        Returns the rpm package architure for the OS in $::PLTFRM
        i.e. i386 for linux

        Arguments:
                $output,
                $osarch
        Returns:
                none
        Globals:
                $::PLTFRM
        Error:
                messageFromCat E2

        Example:
                $::ATTRS{'InstallPkgArchitecture'} =
                        ServerUtils->get_PkgArchitecture;

        Comments:
                Works for Linux.  Returns null values $::PLTFRM
                is AIX, and exits with E2 for any other $::PLTFRM. 

=cut

#--------------------------------------------------------------------------------

sub get_PkgArchitecture
{
    my ($cmd, $output, $osarch);
    if ($::PLTFRM eq "Linux")
    {
        $cmd    = "$::UNAME -m";
        $output = NodeUtils->runcmd($cmd);
        chomp($output);

        $osarch = $output;

        return (length($osarch) ? $osarch : undef);
    }
    elsif ($::PLTFRM eq "AIX")
    {
        $osarch = "";
        return (length($osarch) ? $osarch : undef);
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3    getRealRPMSDir

        Get the RPMS directory for the install attributes parameters

        Arguments:
                $InstallOSName
                $InstallDistributionName
                $InstallDistributionVersion
                $InstallPkgArchitectur

        Returns:
                appropriate path name for parameter values
        Globals:
                none
        Error:
                none
        Example:
                 my $realRPMS =
                    ArchiveUtils->getRealRPMSDir($OS, $dist, $distver, $arch);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getRealRPMSDir
{
    my ($class, $os, $distributor, $version, $arch) = @_;
    my $distro_dir = $distributor;
    if ($distributor =~ /RedHat/) { $distro_dir = "RedHat"; }
    if ($arch        =~ /i.86/)   { $arch       = "i386"; }
    return "/csminstall/$os/$distributor/$version/$arch/$distro_dir/RPMS";
}

#--------------------------------------------------------------------------------

=head3    getRecentVersionRpm

        Get the most recent version of the rpm argument.

        Arguments:
                $rpmName
        Returns:
                Recent RPM as a string
        Globals:
                none
        Error:
                none
        Example:
                $rpmfile =
                    ArchiveUtils->getRecentVersionRpm($path, $rpmFileName);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getRecentVersionRpm
{
    my ($class, $path, $rpm_name) = @_;

    my %localversions_hash = ();
    my %file_name_hash     = ();
    my %packver;
    my $rpm_basename;
    my $test_rpm_name;
    my $test_rpm_name_short;
    my @output = NodeUtils->runcmd("$::LS  -1 $path/$rpm_name");
    chomp @output;

    # Determine the basename of this rpm (strip off .arch.rpm)

    # %::PackageVersionName hash.  This code can handle an rpm
    # provided in these formats:
    #    rpmname
    #    rpmname*
    #    rpmname-*
    #    rpmname-**
    my (@test_rpm_split) = split(/\./, $rpm_name);
    my $splitpos = $#test_rpm_split - 2;
    $test_rpm_name = join('.', @test_rpm_split[0 .. $splitpos]);

    # Replace two *'s with one * (in case the rpm in pkgdefs already has a *)
    $test_rpm_name =~ s/\*\*$/*/;

    # Also, try stripping off the "-*" at the end
    $test_rpm_name_short = $test_rpm_name;
    $test_rpm_name_short =~ s/-\*$//;

    foreach my $r (keys %::PackageVersionName)
    {
        my $fullname = $::PackageVersionName{$r}{'FullName'};
        if (   ($fullname eq $test_rpm_name)
            or ($fullname eq $test_rpm_name_short))
        {
            $rpm_basename = $r;
            last;
        }
    }

=head3 mmm - getRecentVersionRpm

	-----------------
	This disconnected block of code is being preserved in the file, rather than
	being removed.  It is a part of a change which is pending, which, due to the
	scale of the change, is being defered to a bac or brahms, where it will be
	evaluated and accepted or rejected. 
	-----------------

    # it might be in an iso file

    if (!$rpm_basename)
    {
        #print "getRecentVersionRpm: rpm_basename not found using defs_filter.\n";

        my $hash_ref = RpmIndex->defs_filter ( $rpm_name );
        my %ret_hash = %$hash_ref;
	my $key;

	foreach my $arch ( keys %ret_hash ) 
	{
	     my @key_array = @ret_hash { $arch };
	     foreach $key ( @key_array )
	     {
                #print "found $key\n";
             }
            if (RpmIndex->in_iso_image($key) == $::OK )
            {
                #print "found $key to be in an iso  - returning it\n";
	        #$rpm_basename = $key;
		return $key;
            }
        }
    }

=cut

    if (!$rpm_basename)
    {

        #print "CANNOT FIND BASENAME FOR $rpm_name\n";
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',       $::MSGMAPPATH,
                                  'csminstall',           'E1',
                                  'EMsgPREREQ_NOT_FOUND', $rpm_name,
                                  $path
                                  );
        exit 1;
    }

    # if there is only one rpm with the same basename, then return that rpm name
    if (scalar(@output) == 1)
    {
        my ($fn) = $output[0] =~ m|^.*?([^/]+)$|;    # get rid of the directory.
              # Get the basename of the rpm found in the path or on the CD.
        my ($ipkg, $VERSION, $RELEASE) = $fn =~ /^(.+)-(\d.*)-(\d.*)\..+\..+$/;

        # The name of the RPM must match the basename of the rpm in pkgdefs
        if ($rpm_basename ne $ipkg)
        {

            #print "$rpm_basename DOES NOT MATCH $ipkg\n";
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',       $::MSGMAPPATH,
                                      'csminstall',           'E1',
                                      'EMsgPREREQ_NOT_FOUND', $rpm_basename,
                                      $path
                                      );
            exit 1;
        }
        return $output[0];
    }

    # If there are multiple RPMs with the same basename, then compare their
    # versions to see which is the latest.
    my $i = 0;
    foreach my $rpm1 (@output)
    {

        ####jcran changes start
        #### --getting the version from the output of LS, instead of running rpm multiple times

        # my $VERSION=NodeUtils->runcmd("$::RPMCMD -qp --qf '%{Version}' $rpm1");
        #my $VERSION=`rpm -qp --qf '%{Version}' $rpm1`;
        my ($fn) = $rpm1 =~ m|^.*?([^/]+)$|;  # get rid of the directory, if any
                                              #print "fn=$fn\n";
              #my ($ipkg, $VERSION) = $fn =~ /^(.+)-(\d.*)-.*$/;
        my ($ipkg, $VERSION, $RELEASE) = $fn =~ /^(.+)-(\d.*)-(\d.*)\..+\..+$/;

        ####jcran changes end

        chomp $VERSION;
        chomp $RELEASE;

        # The basename of the rpm must match the name given in pkgdefs
        if ($rpm_basename eq $ipkg)
        {
            $localversions_hash{$i}{'VERSION'}  = $VERSION;
            $localversions_hash{$i}{'RELEASE'}  = $RELEASE;
            $file_name_hash{$VERSION}{$RELEASE} = $rpm1;
            $i++;
        }
    }
    if ($i == 0)
    {

        #print "BASENAME DOES NOT MATCH NAME IN PKGDEFS FOR $rpm_basename\n";
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',       $::MSGMAPPATH,
                                  'csminstall',           'E1',
                                  'EMsgPREREQ_NOT_FOUND', $rpm_basename,
                                  $path
                                  );
        exit 1;

    }
    my $versionout = "";
    my $releaseout = "";
    $i = 0;
    foreach my $k (keys %localversions_hash)
    {
        if ($i == 0)
        {
            $versionout = $localversions_hash{$k}{'VERSION'};
            $releaseout = $localversions_hash{$k}{'RELEASE'};
        }
        if (
            InstallUtils->testVersion(
                                      $localversions_hash{$k}{'VERSION'},
                                      ">",
                                      $versionout,
                                      $localversions_hash{$k}{'RELEASE'},
                                      $releaseout
            )
          )
        {
            $versionout = $localversions_hash{$k}{'VERSION'};
            $releaseout = $localversions_hash{$k}{'RELEASE'};
        }
        $i++;

    }

    return ($file_name_hash{$versionout}{$releaseout});
}

#--------------------------------------------------------------------------------

=head3    getReqsNotSatisfied

        Return the rpms (and versions) that the given rpm requires that
        are not already on the system

        Arguments:
                $rpmPackageName
        Returns:
                Posibly empty array of rpm package names.
        Globals:
                none
        Error:
                none
        Example:
                 my @reqs =
                    ArchiveUtils->getReqsNotSatisfied($rpm);

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getReqsNotSatisfied
{
    my ($class, $rpm) = @_;
    my @requires;
    my @output = `LANG=C $::RPMCMD -i --test $rpm 2>&1`;
    my $RC     = $? >> 8;
    if ($RC == 0) { return @requires; }    # all dependencies were satisfied
    if ($RC > 1)  { return @requires; }
    my $firstline  = shift @output;
    my $secondline = $output[0];
    if ($firstline  =~ /is already installed/) { return @requires; }
    if ($secondline =~ /conflicts with/)       { return @requires; }
    if (!($firstline =~ /failed dependencies/)) { return @requires; }

    foreach my $o (@output)
    {

        #print "o=$o\n";
        my ($pkg, $operator, $version) = InstallUtils->parseRequire($o);

        #print "pkg=$pkg, operator=$operator, version=$version\n";
        if (!defined($pkg)) { next; }    # was not an rpm require

        # Hack for glibc version because I can not find a way to have the require
        # statement in the rpm be different for different distribution levels.
        if ($pkg eq 'glibc' && NodeUtils->distribution() =~ /^RedHat 7/i)
        {
            $o = "$pkg $operator 2.2";
        }

        my $req = "$pkg $operator $version";
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'V', 'IMsgREQUIRE', $rpm, $req);
        push(@requires, $req);
    }
    return @requires;
}

#--------------------------------------------------------------------------------

=head3    getRequiredRpms

        Return the names of any rpms that the rpm parameter depends on if
        they are not already on the system at the required level.

        The rpm passed in as the 1st arg is the complete rpm file name.
        The rest of the args are the list of reqs we have already found
        in previous, recursive invokations of the function.

        Arguments:
                $rpm
                @my_path

        Returns:
                @array of rpm dependancies for the $rpm argument

        Globals:
                none
        Error:
                messageFromCat E11

        Example:
                 my @reqs =
                   ArchiveUtils->getRequiredRpms($rpm, @my_path);

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getRequiredRpms
{
    my ($class, $rpm, @my_path) = @_;
    my @reqrpms;
    my @reqs = InstallUtils->getReqsNotSatisfied($rpm);

    #print "num=" . scalar(@reqs) . ' ,reqs=' . join(':', @reqs) . ".\n";
    foreach my $r (@reqs)
    {
        my ($pkg, $operator, $version) = split(' ', $r);

        my $newrpm = InstallUtils->findRpm($pkg, $operator, $version, @my_path);
        if (defined($newrpm))    # found an appropriate one to install
        {

            # make sure it is not already on the list
            if (grep(/^$newrpm$/, @_)) { next; }    # already on the list

            push @reqrpms, $newrpm;

            push @reqrpms,
              InstallUtils->getRequiredRpms($newrpm, @reqrpms, @my_path);
        }
        else
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E11',
                                      'EMsgCANT_FIND_RPM', $pkg,
                                      $operator,           $version,
                                      $rpm
                                      );
        }
    }
    return @reqrpms;
}

#--------------------------------------------------------------------------------

=head3    getRPMSDir

         Returns the RPMS directory (for SMS) for input params

        Arguments:
                $InstallOSName
                $InstallDistributionName
                $InstallDistributionVersion
                $InstallPkgArchitectur

        Returns:
                appropriate pathname for parameters
        Globals:
                none
        Error:
                none
        Example:
                 my $SMS_RPMS =
                    ArchiveUtils->getRPMSDir($OS, $dist, $distver, $arch);

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getRPMSDir
{
    my ($class, $os, $distributor, $version, $arch) = @_;
    if ($arch =~ /i.86/) { $arch = "i386"; }
    return "/csminstall/$os/$distributor/$version/$arch/RPMS";
}

#--------------------------------------------------------------------------------

=head3    getRPMVersionRelease

         Get RPM version and release if aviable.

        Arguments:
                $rpmPackageName
                $productFlag

        Returns:
                Rpm version and release as an array of two strings.
        Globals:
                none
        Error:
                E1 from csmInstallCat
        Example:
                (@temp_array) =
                   ArchiveUtils->getRPMVersionRelease($conserrpmfile, 1);

        Comments:
                $productFlag values are:
                   0 = already installed rpm or default
                   1 = product rpm

=cut

#--------------------------------------------------------------------------------

sub getRPMVersionRelease
{
    my (
        $cmd,   $version,  $release,      $my_str, $my_cmd,
        $class, $RPM_NAME, $product_flag, @my_array
        );
    @my_array     = ();
    $product_flag = 0;
    ($class, $RPM_NAME, $product_flag) = @_;
    if ($product_flag == 0)
    {
        $my_cmd = "$::RPMCMD -q --qf '%{Version}:|:%{Release}' $RPM_NAME";
        $my_str = NodeUtils->runcmd($my_cmd, -1);
    }
    else
    {
        $my_cmd = "$::RPMCMD -qp --qf '%{Version}:|:%{Release}' $RPM_NAME";
        $my_str = NodeUtils->runcmd($my_cmd, -1);
    }
    if ($::RUNCMD_RC != 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall',     'E1',
                                  'EMsgCANT_RUN',   $my_cmd,
                                  $::RUNCMD_RC
                                  );
    }
    ($version, $release) = split(/:\|:/, $my_str);
    push(@my_array, $version);
    push(@my_array, $release);
    return (@my_array);
}

#--------------------------------------------------------------------------------

=head3    installRequiredRpms

        Install any rpms that the rpm parameter is dependent on
        if they are not already on the system at the required level.

        Arguments:
                $rpmPkgName
                @path
        Returns:
                undefined
        Globals:
                $::FORCE_INSTALL
        Error:
                messageFromCat E11

        Example:
                ArchiveUtils->installRequiredRpms($rpmPkgFileName, @path);

        Comments:
                The rpm passed in is the whole rpm package name.

=cut

#--------------------------------------------------------------------------------

sub installRequiredRpms
{
    my ($class, $rpm, @my_path) = @_;
    my @reqs = InstallUtils->getRequiredRpms($rpm, @my_path);
    if (scalar(@reqs))    # need to install at least 1 rpm
    {
        my $reqlist = join(' ', @reqs);
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',          $::MSGMAPPATH,
                                  'csminstall',              'V',
                                  'IMsgINSTALLING_RPM_REQS', $rpm,
                                  $reqlist
                                  );
        my $cmd = "$::RPMCMD -U ";
        if ($::FORCE_INSTALL) { $cmd .= "--force "; }
        if ($::TEST)          { $cmd .= "--test "; }
        $cmd .= "$reqlist";
        NodeUtils->runcmd("$cmd");
    }

}

#--------------------------------------------------------------------------------

=head3    MountAixCdrom

         Mounts Aix Cdrom

        Arguments:
                none

        Returns:
                none

        Globals:
                $::AIX_MNT_DEV
                $::MNTCDROM
        Error:
                undefined
        Example:
                ServerUtils->MountAixCdrom();

        Comments:
                The caller should unmount the directory or cdrom before using
                this function. After using this subroutine, it is the
                responsibility of the caller to unmount the drive or directory.


=cut

#--------------------------------------------------------------------------------

sub MountAixCdrom
{

    use File::Path;    # Provides mkpath()
                       #$cmd = "$::MOUNT -v cdrfs -o ro /dev/cd0 $::MNTCDROM";
        #MOUNT_CMD="/usr/sbin/mount -rvcdrfs $DEVICE $2" -- mount command used

    if (!(-d $::MNTCDROM))
    {
        mkpath($::MNTCDROM, $::VERBOSE, 0755);
    }
    my $cmd = "$::MOUNT -rvcdrfs $::AIX_MNT_DEV $::MNTCDROM";
    NodeUtils->runcmd($cmd, 0);
    if ($::RUNCMD_RC)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E1', 'EMsgNO_MOUNT', $::MNTCDROM);
    }
}

#--------------------------------------------------------------------------------

=head3  mount_iso_image

	Tries to mount a file parameter as an ISO image file - a CD image as a
	file. The file is mounted to a predetermined mount point "/tmp_loop_mnt".

        Arguments:
                ISO image file including path from root.
        Returns:
                $::OK if mount worked
		$::NOK if not
        Globals:
                none
        Error:
		none
        Example:
                 my $rc = ArchiveUtils->mount_iso_image($file};
        Comments:
		$file parameter must include the path from root.
                

=cut

#--------------------------------------------------------------------------------

sub mount_iso_image
{
    my ($class, $file) = @_;

    # uses predefined mount point
    #my $mnt_point = "/tmp_loop_mnt";
    my $mnt_point = $::MNTCDROM;

    # futz with the mount point

    if (!(stat($mnt_point))[2])
    {

        # need to make the mount point
        my $cmd = "$::MKDIR -m 777 -p $mnt_point";
        my $rc = NodeUtils->runcmd($cmd, -1);    # no exit on error
        if (!($rc == 1)) { return $::NOK; }
    }

    my $cmd = "$::MOUNT -o loop $file $mnt_point";
    NodeUtils->runcmd($cmd, -1);    # no exit on error

    my $rc = $::RUNCMD_RC;

    if ($rc == 0) { return $mnt_point; }

    # umount in case the mount op worked, but cmd failed for some reason.
    my $cmd = "$::UMOUNT $mnt_point";
    NodeUtils->runcmd($cmd, -1);    # no exit on error

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3    parseRequire

        Parse a single require string, distinguishing between rpms
        and individual libraries of executables.

        Arguments:
                $requiredRpmString
        Returns:
                ($package, $operator, $version);
        Globals:
                none
        Error:
                none

        Example:
                my ($pkg, $operator, $version) =
                        ArchiveUtils->parseRequire($requiredRpmString);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub parseRequire
{
    my ($class, $line) = @_;
    $line =~ s/ is needed by .*$//;
    my ($pkg, $operator, $version, $therest) = split(' ', $line);
    if ($pkg =~ /^rpmlib/ || $pkg =~ m|/| || $pkg =~ /\.so/) { return undef; }
    else { return ($pkg, $operator, $version); }
}

#--------------------------------------------------------------------------------

=head3 search_copy_distro_rpms

        Check for the OS required rpms in tha path.

        If an rpm is not found then check the /csminstall.. directory.
        If the rpm is still not found, prompt for the OS CDs.

        If an rpm is found then add it to t$::temp_CmdLinePathVersionName
        and %::Rpm_name_path -  otherwise add it to %::RpmsNotFoundInCmdPath.

        Arguments:
                none
        Returns:
                none

        Globals:
                $::temp_CmdLinePathVersionName
                %::Rpm_name_path
                %::RpmsNotFoundInCmdPath
                @::Rpms_to_be_copied=();
                @::Rpms_not_found=();
                $::pkgdefs
                @::os_prereq
                $::command_line
                @::sis_packages
                $::Svrpkgdefs
                $::PREREQS_ATTR
                $::ATTRS
                $::PKGPATH
                $::DISTRO
                $::INSTALLDIR_OS_NAME_RPMS
        Error:
                none

        Example:
                ServerUtils->search_copy_distro_rpms();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub search_copy_distro_rpms
{
    if (   ($::PREREQS_ATTR{'OSName'} eq "Linux")
        || ($::ATTRS{'InstallOSName'} eq "Linux"))
    {

        #if( $::DISTRO =~ /SLES/ || $::DISTRO =~/SuSE/ )
        #{
        #  NodeUtils->messageFromCat('csmInstall.cat',$::MSGMAPPATH,'csminstall','I','IMsgSearchAndCopy',"Distribution and SIS");
        #}
        #else
        #{
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgSearchAndCopy', "Distribution");

        #}
        my $distro      = $::DISTRO;
        my $destination = $::INSTALLDIR_OS_NAME_RPMS;
        my ($disk, $cmd, $rc);
        my (@notfound);
        my ($my_prereq, $prereq, $path, $dir);

        # First try to get the distro rpms out of the pkg path (which may
        # include the CSM CD).  This allows us to put newer versions of some
        # distro rpms on our media if we need to.
        # Note:  DISTRO_PREREQS is a hash of array references, thus the
        #        funny syntax below.
        my (@DISTRO_PKGPATH) = @::PKGPATH;

        #SuSE Changes
        if ($distro =~ /SLES/ || $distro =~ /SuSE/)
        {
            if ($::command_line =~ /copycsmpkgs/)
            {
                my @Temp = @DISTRO_PKGPATH;
                map { s|$|/$::pkgdefs{DISTRO_RPMDIR}/*| } @DISTRO_PKGPATH;
                if (   ($::pkgdefs{DISTRO_NAME} =~ /SLES/)
                    && ($::pkgdefs{DISTRO_NAME} =~ /8\.1/))
                {
                    map { s|$|/UnitedLinux/*| } @Temp;
                    @DISTRO_PKGPATH = (@DISTRO_PKGPATH, @Temp);
                }
            }
            else
            {
                my @Temp = @DISTRO_PKGPATH;
                map { s|$|/$::Svrpkgdefs{DISTRO_RPMDIR}/*| } @DISTRO_PKGPATH;
                if (($distro =~ /SLES/) && ($distro =~ /8\.1/))
                {
                    map { s|$|/UnitedLinux/*| } @Temp;
                    @DISTRO_PKGPATH = (@DISTRO_PKGPATH, @Temp);
                }
            }
        }
        else
        {
            if ($::command_line =~ /copycsmpkgs/)
            {
                map { s|$|/$::pkgdefs{DISTRO_RPMDIR}| } @DISTRO_PKGPATH;
            }
            else
            {
                map { s|$|/$::Svrpkgdefs{DISTRO_RPMDIR}| } @DISTRO_PKGPATH;
            }
        }
        @DISTRO_PKGPATH = (@DISTRO_PKGPATH, @::PKGPATH);

        #Empty the the hashes already used
        %::temp_CmdLinePathVersionName = ();
        %::Rpm_name_path               = ();
        %::CmdLinePathVersionName      = ();
        @::Rpms_to_be_copied           = ();
        @::Rpms_not_found              = ();
        @::RpmsNotFoundInCmdPath       = ();

        # Determine the RPM architectures to search for on each platform.
        my @archs;
        my $arch = $::PREREQS_ATTR{'PkgArchitecture'};
        if (!$arch) { $arch = $::ATTRS{'InstallPkgArchitecture'}; }

        if ($arch =~ /i.86/)
        {
            @archs = ('i?86', 'noarch');
        }
        elsif ($arch =~ /ppc64/)
        {
            @archs = ($arch, 'ppc', 'noarch');
        }
        elsif ($arch =~ /x86_64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        elsif ($arch =~ /ia64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        else    # Any other unknown architectures.
        {
            @archs = ($arch, 'noarch');
        }

        #foreach $prereq (@::os_prereq, @::sis_packages)
        foreach $prereq (@::os_prereq)
        {

            NodeUtils->message('V', 'IMsgSEARCHING_FOR_PREREQ', $prereq);
            $my_prereq = '';
            $path      = '';
            foreach my $a (@archs)
            {
                if (!($path))
                {
                    $my_prereq = "${prereq}.$a.rpm";
                    $path      =
                      InstallUtils->findRpmInPath($my_prereq, @DISTRO_PKGPATH);
                }
                else { last; }
            }

            if (defined($path))
            {

                # Get the latest version of the file in the first location found
                my $rpm_pre_file =
                  InstallUtils->getRecentVersionRpm($path, $my_prereq);

                chomp $rpm_pre_file;

                my $rpmfile_basename;
                ($rpmfile_basename = $rpm_pre_file) =~ s:^.*/::g;

                #find the shortname
                my @parts = split /-/, $rpmfile_basename;
                my $shortname = shift @parts;
                my $p;

              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }

                push @{$::temp_CmdLinePathVersionName{$path}},
                  $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'BaseName'}    = $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'Location'}    = $path;
                $::Rpm_name_path{$shortname}{'Destination'} = $destination;
            }
            else
            {

                #get the shortname of the rpm
                my @parts = split /-/, $prereq;
                my $shortname = shift @parts;
                my $p;
              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }
                my $tmp_var1;
                my $my_rindex = rindex($shortname, "*");
                if ($my_rindex != -1)
                {
                    $tmp_var1 = substr($shortname, 0, rindex($shortname, "*"));
                }
                else { $tmp_var1 = $shortname; }
                $my_rindex = rindex($tmp_var1, "-");
                if (($my_rindex + 1) == 0) { $shortname = $tmp_var1; }
                elsif (($my_rindex + 1) == length($tmp_var1))
                {
                    $shortname = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
                }
                else { $shortname = $tmp_var1; }
                push(@::RpmsNotFoundInCmdPath, $shortname);

                #push(@::RpmsNotFoundInCmdPath,$prereq);
            }
        }
        my @temp_array2 = ();

        #copy the pacakges found in the path
        InstallUtils->create_rpm_list_to_copy();

        foreach my $my_rpm_name (@::Rpms_not_found)
        {
            push(@temp_array2, $::PackageVersionName{$my_rpm_name}{'FullName'});
        }

        @notfound = @temp_array2;
        InstallUtils->copy_rpm();

        # return if all the packages are found
        if (!scalar(@notfound)) { return; }

        # if the packages are not found in the path than check in the
        # /csminstall.. directory if the copy flag is not set

        # Copy RPMs from distribution CD-ROM(s)
        $cmd = "$::UNMOUNT $::MNTCDROM > /dev/null 2>&1";
        NodeUtils->runcmd("$cmd", -1);

        #NodeUtils->run_cmd($cmd, "W", "ignore_errors");
        #my $my_DISTRO_DISKLIST;
        my $my_DISTRO_NAME;
        my $my_DISTRO_RPMDIR;
        #my @disks;
        my @all_disks;
        if ($::command_line =~ /copycsmpkgs/)
        {

            #$my_DISTRO_DISKLIST=$::pkgdefs{DISTRO_DISKLIST};
            push( @all_disks , $::pkgdefs{'distro_disks'} );
	    if($distro =~ /RedHat/)
            {
                foreach my $obj (keys %{$::pkgdefs{'sp_disks'}})
	        {
	            push (@all_disks , $::pkgdefs{'sp_disks'}{$obj});
	        }
            }
            $my_DISTRO_NAME   = $::pkgdefs{DISTRO_NAME};
            $my_DISTRO_RPMDIR = $::pkgdefs{DISTRO_RPMDIR};
        }
        else
        {
            #$my_DISTRO_DISKLIST=$::Svrpkgdefs{DISTRO_DISKLIST};
	    #@disks            = (@{$::Svrpkgdefs{'distro_disks'}});
            push( @all_disks , $::Svrpkgdefs{'distro_disks'} );
	    if($distro =~ /RedHat/)
            {
                foreach my $obj (keys %{$::Svrpkgdefs{'sp_disks'}})
	        {
	            push (@all_disks , $::Svrpkgdefs{'sp_disks'}{$obj});
	        }
            }
            $my_DISTRO_NAME   = $::Svrpkgdefs{DISTRO_NAME};
            $my_DISTRO_RPMDIR = $::Svrpkgdefs{DISTRO_RPMDIR};
        }

        my $first_disk = 0;
        
	my @disks = @{$all_disks[0]};
	
	foreach my $diskref (@disks)
        {
            my $diskname = $diskref->{name};
            my $disknum  = $diskref->{num};

            #Empty the the hashes already used
            %::temp_CmdLinePathVersionName = ();
            %::Rpm_name_path               = ();
            %::CmdLinePathVersionName      = ();
            @::Rpms_to_be_copied           = ();
            @::Rpms_not_found              = ();
            @::RpmsNotFoundInCmdPath       = ();

            NodeUtils->message('I', 'IMsgINSERT_DISK', $diskname, $disknum);

            NodeUtils->message('P', 'IMsgPRESS_ENTER');
            
            my $junk = getc;

            my $wrong_disk = 1;
	    
            while ($wrong_disk)
            {

                # Mount the CD-ROM
                if ($::PLTFRM eq "AIX")
                {
                    sleep(5);    #this is needed for AIX
                    `$::UNMOUNT $::MNTCDROM 2>/dev/null 1>/dev/null`;
                    InstallUtils->MountAixCdrom();
                }
                else
                {
                    $cmd = "$::MOUNT $::MNTCDROM";

                    # Ignore mount errors.  Usually they are because
                    # the CD was already mounted.
                    NodeUtils->runcmd("$cmd", -1);
                }

                # Check for valid disk inserted
                if (defined $diskref->{diskid_searchprog})
                {
                    my $progref = $diskref->{diskid_searchprog};
                    my $progarg = $diskref->{diskid_searchargs};
                    $wrong_disk = !(&$progref($::MNTCDROM, $progarg));
                    goto check_over;
                }

                # Save the original logic for compatiable with old pkgdefs
                my $diskid_searchstring = $diskref->{diskid_searchstring};
                my $diskid_filename     =
                  "$::MNTCDROM/" . $diskref->{diskid_filename};
                $cmd = "$::LS $diskid_filename 2> /dev/null";
                chomp($diskid_filename = NodeUtils->runcmd($cmd, -1));

                # First make sure the file exists
                if (!$::RUNCMD_RC and -f $diskid_filename)
                {
                    if ($diskid_searchstring)
                    {
                        open(DISKID_FILE, $diskid_filename)
                          || NodeUtils->message('E', 'EMsgCANT_READ_FILE',
                                                $diskid_filename);
                        if (grep (/$diskid_searchstring/, <DISKID_FILE>))
                        {

                            #print "CORRECT DISK!\n";
                            $wrong_disk = 0;
                        }
                        else
                        {

                            #print "Search string $diskid_searchstring not found\n";
                            $wrong_disk = 1;
                        }
                        close DISKID_FILE;
                    }
                    else { $wrong_disk = 0; }
                }
                else
                {

                    #print "Can't find $::MNTCDROM/$diskref->{diskid_filename}.  \nERRORS:  $diskid_filename\n";
                    $wrong_disk = 1;
                }

              check_over:
                if ($wrong_disk)
                {
		    if($first_disk==0)
                    {
                         foreach my $disc (@all_disks)
                         {
                             my $diskref = $disc->[0];
                             my $progref = $diskref->{diskid_searchprog};
                             my $progarg = $diskref->{diskid_searchargs};
                             if(&$progref($::MNTCDROM, $progarg))
                             {
                                  @disks = @$disc;
                                  goto move_on;
                             }
                         }
                    }
		    
                    if ($::PLTFRM eq "AIX")
                    {
                        `$::UNMOUNT $::MNTCDROM 2>/dev/null 1>/dev/null`;
                    }
                    else
                    {
                        $cmd = "$::UNMOUNT $::MNTCDROM > /dev/null 2>&1";
                        NodeUtils->runcmd("$cmd", -1);
                    }
                    NodeUtils->message('W', 'EMsgWRONG_DISK', $diskname,
                                       $disknum);
                    NodeUtils->message('I', 'IMsgINSERT_DISK', $diskname,
                                       $disknum);

                    NodeUtils->message('P', 'IMsgPRESS_ENTER_OR_FORCE');

                    # Get user input
                    $junk = getc;
                    if ($junk eq "F" or $junk eq "f")
                    {

                        #Force it to be the right disk
                        # Mount the CD-ROM
                        if ($::PLTFRM eq "AIX")
                        {
                            `$::UNMOUNT $::MNTCDROM 2>/dev/null 1>/dev/null`;
                            InstallUtils->MountAixCdrom();
                        }
                        else
                        {
                            $cmd = "$::MOUNT $::MNTCDROM";
                            NodeUtils->runcmd($cmd, -1);
                        }
                        $wrong_disk = 0;
                    }
                    else
                    {

                        # Try again
                        next;
                    }
                }
            }

move_on:

            $first_disk++;

            # Determine the RPM architectures to search for on each platform
            # and determine the directory to search for RPMs on each CD.
            my @archs;
            my $arch = $::PREREQS_ATTR{'PkgArchitecture'};
            if (!$arch) { $arch = $::ATTRS{'InstallPkgArchitecture'}; }

            if ($arch =~ /i.86/)
            {
                @archs = ('i?86', 'noarch');

                if (($distro =~ /SLES/) && ($distro =~ /8\.1/))
                {

                    # See if this is the SLES disk (not the UnitedLinux disk)
                    if ($disknum eq '1' and $diskname =~ /$my_DISTRO_NAME/)
                    {
                        $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR/*";
                    }
                    else
                    {
                        $dir = "$::MNTCDROM/UnitedLinux/*";
                    }
                }
                elsif (($distro =~ /SuSE/) || ($distro =~ /SLES/))
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR/*";
                }
                else
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR";
                }
            }
            elsif ($arch =~ /ppc64/)
            {
                @archs = ($arch, 'ppc', 'noarch');

                if (($distro =~ /SuSE/) || ($distro =~ /SLES/))
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR/*";
                }
                else
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR";
                }
            }
            elsif ($arch =~ /x86_64/)
            {
                @archs = ($arch, 'i?86', 'noarch');

                if (($distro =~ /SLES/) && ($distro =~ /8\.1/))
                {

                    # See if this is the SLES disk (not the UnitedLinux disk)
                    if ($disknum eq '1' and $diskname =~ /$my_DISTRO_NAME/)
                    {
                        $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR/*";
                    }
                    else
                    {
                        $dir = "$::MNTCDROM/UnitedLinux/*";
                    }
                }
                elsif (($distro =~ /SuSE/) || ($distro =~ /SLES/))
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR/*";
                }
                else
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR";
                }
            }
            elsif ($arch =~ /ia64/)
            {
                @archs = ($arch, 'i?86', 'noarch');

                if (($distro =~ /SLES/) && ($distro =~ /8\.1/))
                {

                    # See if this is the SLES disk (not the UnitedLinux disk)
                    if ($disknum eq '1' and $diskname =~ /$my_DISTRO_NAME/)
                    {
                        $dir = "$::MNTCDROM/my_DISTRO_RPMDIR/*";
                    }
                    else
                    {
                        $dir = "$::MNTCDROM/UnitedLinux/*";
                    }
                }
                elsif (($distro =~ /SuSE/) || ($distro =~ /SLES/))
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR/*";
                }
                else
                {
                    $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR";
                }
            }
            else    # Any other unknown architectures.
            {
                @archs = ($arch, 'noarch');
                $dir = "$::MNTCDROM/$my_DISTRO_RPMDIR";
            }

            foreach $prereq (@notfound)
            {

                $my_prereq = '';
                $path      = '';
                if (!length($prereq)) { next; }    # already found that one
                NodeUtils->message('V', 'IMsgSEARCHING_FOR_PREREQ_ON_CD',
                                   $prereq, $disknum);
                foreach my $a (@archs)
                {
                    if (!($path))
                    {
                        $my_prereq = "${prereq}.$a.rpm";
                        $path = InstallUtils->findRpmInPath($my_prereq, $dir);

                        if (
                            !($path)
                            && ($::pkgdefs{DISTRO_NAME} =~
                                /Red Hat Enterprise Linux AS 3 PPC/)
                          )
                        {
                            my $updatesdir =
                              "$::MNTCDROM/$::pkgdefs{DISTRO_UPDATESDIR}";
                            $path =
                              InstallUtils->findRpmInPath($my_prereq,
                                                          $updatesdir);
                        }
                    }
                    else { last; }
                }

                if (defined($path))
                {

                    # Get the latest version of the file in the first location found
                    #my $rpm_pre_file = NodeUtils->runcmd("$::LS -vr $path/$my_prereq | $::HEAD -1", -1);
                    my $rpm_pre_file =
                      InstallUtils->getRecentVersionRpm($path, $my_prereq);

                    chomp $rpm_pre_file;
                    my $rpmfile_basename;
                    ($rpmfile_basename = $rpm_pre_file) =~ s:^.*/::g;

                    #find the shortname
                    my @parts = split /-/, $rpmfile_basename;
                    my $shortname = shift @parts;
                    my $p;
                  SNAME: while ($p = shift @parts)
                    {
                        if ($p !~ m/^\d/)
                        {    #if it doesn't start with a digit
                            $shortname .= "-$p";
                        }
                        else { unshift @parts, $p; last SNAME; }
                    }
                    push @{$::temp_CmdLinePathVersionName{$path}},
                      $rpmfile_basename;
                    $::Rpm_name_path{$shortname}{'BaseName'} =
                      $rpmfile_basename;
                    $::Rpm_name_path{$shortname}{'Location'}    = $path;
                    $::Rpm_name_path{$shortname}{'Destination'} = $destination;
                    $prereq = '';    # so we do not search for it on the next cd
                }
            }

            # copy the rpm collected from the cd
            InstallUtils->create_rpm_list_to_copy();
            my $nf =
              join(' ', @notfound);    # this eliminates the ones we blanked out
            @notfound = split(' ', $nf);

            if (scalar(@::Rpms_not_found) >= 1)
            {
                @notfound = (@notfound, @::Rpms_not_found);
            }
            @::Rpms_not_found = ();
            InstallUtils->copy_rpm();

            # return if all the packages are found
            if (!scalar(@notfound)) { last; } # do not need to go to the next cd

            $cmd = "$::UNMOUNT $::MNTCDROM > /dev/null 2>&1";
            NodeUtils->runcmd("$cmd", -1);
        }

        # make sure to unmount cdrom after copying all the rpms
        $cmd = "$::UNMOUNT $::MNTCDROM > /dev/null 2>&1";
        NodeUtils->runcmd("$cmd", -1);

        #NodeUtils->run_cmd($cmd, "W");

        # Ignore all SIS packages
        my $rpm_temp;
        my (@ignore_temp);
        my (@notfound_temp);
        foreach $rpm_temp (@notfound)
        {
            my $short_rpm;
            my $my_rindex = rindex($rpm_temp, "*");
            if ($my_rindex != -1)
            {
                $short_rpm = substr($rpm_temp, 0, $my_rindex);
            }

            #my @foo = grep(/$short_rpm/, @::sis_packages);
            #if (scalar(@foo)) {
            #    push (@ignore_temp,$rpm_temp);
            #}
            #else {
            push(@notfound_temp, $rpm_temp);

            #}
        }

        if (scalar(@ignore_temp))
        {
            NodeUtils->message('I', 'IMsgMissingRPM', join(", ", @ignore_temp));
        }
        if (scalar(@notfound_temp))
        {
            NodeUtils->message('E1', 'EMsgPREREQ_NOT_FOUND',
                               join(", ", @notfound_temp));
        }
    }
    elsif ($::PREREQS_ATTR{'OSName'} eq "AIX")
    {
    }
}

#--------------------------------------------------------------------------------

=head3 search_csm

        Search for rpms in the $::installms path and populate the
        $::Rpm_name_path and %::temp_CmdLinePathVersionName hash.

        If an rpm is not found, add it to the %::RpmsNotFoundInCmdPath hash.

        Arguments:
                none

        Returns:
                undefined

        Globals:
                $::Rpm_name_path
                %::RpmsNotFoundInCmdPath
                $::PREREQS_ATTR
                $::ATTRS
                @::csm_packages
                @::rsct_packages
                @::director_package
                @::PKGPATH
                $::INSTALLDIR_CSMPKG
                $::COPY_OPT_FLAG
        Error:
                undefined
        Example:
                ServerUtils->search_csm();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub search_csm
{
    if (   ($::PREREQS_ATTR{'OSName'} eq "Linux")
        || ($::ATTRS{'InstallOSName'} eq "Linux"))
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',
                                  $::MSGMAPPATH,
                                  'csminstall',
                                  'I',
                                  'IMsgSearchingfor',
                                  "CSM, RSCT and  Director"
                                  );
        my @my_res_path = ();
        my ($rpmfile, $rpm, $path);

        # Determine the RPM architectures to search for on each platform.
        my @archs;
        my $arch = $::PREREQS_ATTR{'PkgArchitecture'};
        if (!$arch) { $arch = $::ATTRS{'InstallPkgArchitecture'}; }

        if ($arch =~ /i.86/)
        {
            @archs = ('i?86', 'noarch');
        }
        elsif ($arch =~ /ppc64/)
        {
            @archs = ($arch, 'ppc', 'noarch');
        }
        elsif ($arch =~ /x86_64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        elsif ($arch =~ /ia64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        else    # Any other unknown architectures.
        {
            @archs = ($arch, 'noarch');
        }

        # Search RPMs from CSM distribution CD-ROM or directory to dirctory structure
        foreach $rpm (@::csm_packages, @::rsct_packages, @::director_packages)
        {

            $rpmfile = '';
            $path    = '';
            foreach my $a (@archs)
            {
                if (!($path))
                {
                    $rpmfile = "${rpm}-*.$a.rpm";
                    $path = InstallUtils->findRpmInPath($rpmfile, @::PKGPATH);
                }
                else { last; }
            }
            if (!($path))
            {

                # we take out the dash because the images, may not have them.
                foreach my $a (@archs)
                {
                    if (!($path))
                    {
                        $rpmfile = "${rpm}*.$a.rpm";
                        $path    =
                          InstallUtils->findRpmInPath($rpmfile, @::PKGPATH);
                    }
                    if ($path) { last; }
                }
            }

            if (defined($path))
            {
                $rpmfile = InstallUtils->getRecentVersionRpm($path, $rpmfile);

                chomp $rpmfile;
                my $rpmfile_basename;
                ($rpmfile_basename = $rpmfile) =~ s:^.*/::g;

                #find the shortname
                my @parts = split /-/, $rpmfile_basename;
                my $shortname = shift @parts;
                my $p;
              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }

                push @{$::temp_CmdLinePathVersionName{$path}},
                  $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'BaseName'}    = $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'Location'}    = $path;
                $::Rpm_name_path{$shortname}{'Destination'} =
                  $::INSTALLDIR_CSMPKG;
            }
            else
            {

                #get the shortname of the rpm
                my @parts = split /-/, $rpm;
                my $shortname = shift @parts;
                my $p;
              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }
                my $tmp_var1;
                my $my_rindex = rindex($shortname, "*");
                if ($my_rindex != -1)
                {
                    $tmp_var1 = substr($shortname, 0, rindex($shortname, "*"));
                }
                else { $tmp_var1 = $shortname; }
                $my_rindex = rindex($tmp_var1, "-");
                if (($my_rindex + 1) == 0) { $shortname = $tmp_var1; }
                elsif (($my_rindex + 1) == length($tmp_var1))
                {
                    $shortname = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
                }
                else { $shortname = $tmp_var1; }
                push(@::RpmsNotFoundInCmdPath, $shortname);
            }

        }
        if ($::COPY_OPT_FLAG)
        {
            if (scalar(@::RpmsNotFoundInCmdPath) > 0)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', 'E1', 'EMsgNoRpmFound',
                                          join(", ", @::RpmsNotFoundInCmdPath));
            }
        }
    }
    elsif ($::PREREQS_ATTR{'OSName'} eq "AIX")
    {
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3 search_opensrc_prereqs

        Search for the open source rpms required for csm. If found then
        populate $::temp_CmdLinePathVersionName.

        Arguments:
                none

        Returns:
                undefined

        Globals:
                $::Rpm_name_path
                %::RpmsNotFoundInCmdPath
                $::temp_CmdLinePathVersionName.
                $::PREREQS_ATTR
                $::ATTRS
                @::PKGPATH
                $::INSTALLDIR_CSMPKG
                $::COPY_OPT_FLAG
        Error:
                message E1

        Example:
                ServerUtils->search_opensrc_prereqs();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub search_opensrc_prereqs
{

    # Append /reqs and /reqs/<distro> to each PKGPATH element to search for pkgs
    my (@reqs_PKGPATH) = @::PKGPATH;    # Used for AIX
    map { s/$/\/reqs/ } @reqs_PKGPATH;  # Used for AIX
    my $distroname = (
                        $::PREREQS_ATTR{'DistributionName'}
                      ? $::PREREQS_ATTR{'DistributionName'}
                      : $::ATTRS{'InstallDistributionName'}
                      );
    my $distroversion = (
                           $::PREREQS_ATTR{'DistributionVersion'}
                         ? $::PREREQS_ATTR{'DistributionVersion'}
                         : $::ATTRS{'InstallDistributionVersion'}
                         );
    my $distro = $distroname . $distroversion;

    # Assemble the full_PKGPATH as follows:
    #  path1/reqs/distro:path1/reqs:path1:path2/reqs/distro/path2/reqs:path2
    my (@full_PKGPATH);
    foreach my $pkgpath (@::PKGPATH)
    {
        push(@full_PKGPATH, "$pkgpath/reqs/$distro");
        push(@full_PKGPATH, "$pkgpath/reqs");
        push(@full_PKGPATH, "$pkgpath");
    }

    if (   ($::PREREQS_ATTR{'OSName'} eq "Linux")
        || ($::ATTRS{'InstallOSName'} eq "Linux"))
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgSearchingfor', "Open Source");
        my ($rpm_pre_file, $rpm_pre, $path);

        # Determine the RPM architectures to search for on each platform.
        my @archs;
        my $arch = $::PREREQS_ATTR{'PkgArchitecture'};
        if (!$arch) { $arch = $::ATTRS{'InstallPkgArchitecture'}; }

        if ($arch =~ /i.86/)
        {
            @archs = ('i?86', 'noarch');
        }
        elsif ($arch =~ /ppc64/)
        {
            @archs = ($arch, 'ppc', 'noarch');
        }
        elsif ($arch =~ /x86_64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        elsif ($arch =~ /ia64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        else    # Any other unknown architectures.
        {
            @archs = ($arch, 'noarch');
        }

        # Search open source prereqs from CSM distribution CD-ROM or directory structure
        foreach $rpm_pre (@::opensrc_rpm_prereqs)
        {
            $rpm_pre_file = '';
            $path         = '';

            # Process the IBMJava rpm begin.....
            if ($rpm_pre =~ /^IBMJava2-JRE/)
            {

                foreach my $a (@archs)
                {
                    if (!($path))
                    {
                        $rpm_pre_file = "${rpm_pre}-*.$a.rpm";
                        $path         =
                          InstallUtils->findRpmInPath_java($rpm_pre_file,
                                                           @full_PKGPATH);
                    }
                    else { last; }
                }
                if (!($path))
                {
                    foreach my $a (@archs)
                    {
                        if (!($path))
                        {
                            $rpm_pre_file = "${rpm_pre}*.$a.rpm";
                            $path         =
                              InstallUtils->findRpmInPath_java($rpm_pre_file,
                                                               @full_PKGPATH);
                        }
                        if ($path) { last; }
                    }
                }

            }
            else    # Not IBMJava
            {

                foreach my $a (@archs)
                {
                    if (!($path))
                    {
                        $rpm_pre_file = "${rpm_pre}-*.$a.rpm";
                        $path         =
                          InstallUtils->findRpmInPath($rpm_pre_file,
                                                      @full_PKGPATH);
                    }
                    else { last; }
                }
                if (!($path))
                {
                    foreach my $a (@archs)
                    {
                        if (!($path))
                        {
                            $rpm_pre_file = "${rpm_pre}*.$a.rpm";
                            $path         =
                              InstallUtils->findRpmInPath($rpm_pre_file,
                                                          @full_PKGPATH);
                        }
                        if ($path) { last; }
                    }
                }

            }
            if (defined($path))
            {

                # Get the latest version of the file in the first location found
                #my $rpm_pre_file = NodeUtils->runcmd("$::LS -vr $path/$rpm_pre_file | $::HEAD -1", -1);
                $rpm_pre_file =
                  InstallUtils->getRecentVersionRpm($path, $rpm_pre_file);

                chomp $rpm_pre_file;
                my $rpmfile_basename;
                ($rpmfile_basename = $rpm_pre_file) =~ s:^.*/::g;

                #find the shortname
                my @parts = split /-/, $rpmfile_basename;
                my $shortname = shift @parts;
                my $p;
              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }
                push @{$::temp_CmdLinePathVersionName{$path}},
                  $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'BaseName'}    = $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'Location'}    = $path;
                $::Rpm_name_path{$shortname}{'Destination'} =
                  $::INSTALLDIR_CSMPKG;
            }
            else
            {

                #get the shortname of the rpm
                my @parts = split /-/, $rpm_pre;
                my $shortname = shift @parts;
                my $p;
              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }
                my $tmp_var1;
                my $my_rindex = rindex($shortname, "*");
                if ($my_rindex != -1)
                {
                    $tmp_var1 = substr($shortname, 0, rindex($shortname, "*"));
                }
                else { $tmp_var1 = $shortname; }
                $my_rindex = rindex($tmp_var1, "-");
                if (($my_rindex + 1) == 0) { $shortname = $tmp_var1; }
                elsif (($my_rindex + 1) == length($tmp_var1))
                {
                    $shortname = substr($tmp_var1, 0, rindex($tmp_var1, "*"));
                }
                else { $shortname = $tmp_var1; }
                push(@::RpmsNotFoundInCmdPath, $shortname);
            }
        }
    }
    elsif ($::PREREQS_ATTR{'OSName'} eq "AIX")
    {

        # Search open source prereqs from CSM distribution CD-ROM or directory structure
        foreach my $rpm_pre (@::opensrc_rpm_prereqs)
        {

            # check for the ppc rpm in path and path/reqs....
            my $rpm_pre_file = "${rpm_pre}-*.ppc.rpm";
            my $path = InstallUtils->findRpmInPath($rpm_pre_file, @::PKGPATH);
            if (!($path))
            {
                $path =
                  InstallUtils->findRpmInPath($rpm_pre_file, @reqs_PKGPATH);
            }

            #...If ppc not found in path then check for the noarch rpm ....
            if (!($path))
            {
                $rpm_pre_file = "${rpm_pre}-*.noarch.rpm";
                $path = InstallUtils->findRpmInPath($rpm_pre_file, @::PKGPATH);
            }
            if (!($path))
            {
                $path =
                  InstallUtils->findRpmInPath($rpm_pre_file, @reqs_PKGPATH);
            }
            if (!($path))
            {
                $rpm_pre_file = "${rpm_pre}*.ppc.rpm";
                $path = InstallUtils->findRpmInPath($rpm_pre_file, @::PKGPATH);
                if (!($path))
                {
                    $path =
                      InstallUtils->findRpmInPath($rpm_pre_file, @reqs_PKGPATH);
                }

                #...If ppc not found in path then check for the noarch rpm ....
                if (!($path))
                {
                    $rpm_pre_file = "${rpm_pre}*.noarch.rpm";
                    $path         =
                      InstallUtils->findRpmInPath($rpm_pre_file, @::PKGPATH);
                }
                if (!($path))
                {
                    $path =
                      InstallUtils->findRpmInPath($rpm_pre_file, @reqs_PKGPATH);
                }
            }

            # And finally exit if the rpm is not found else copy
            if (defined($path))
            {

                # Get the latest version of the file in the first location found
                #my $rpmfile = NodeUtils->runcmd("$::LS $path/$rpm_pre_file | $::HEAD -1", -1);
                my $rpmfile =
                  InstallUtils->getRecentVersionRpm($path, $rpm_pre_file);

                chomp $rpmfile;
                my $rpmfile_basename;
                ($rpmfile_basename = $rpmfile) =~ s:^.*/::g;

                ArchiveUtils->copyRpm($rpmfile_basename, $path,
                                      $::INSTALLDIR_CSMRPM);
            }
            else
            {
                NodeUtils->message('E1', 'EMsgCANT_FIND', $rpm_pre,
                                   join(':', @::PKGPATH));
            }

        }
    }
    else
    {
        NodeUtils->message('E2', 'EMsgINVALID_OSTYPE');
    }
    if ($::COPY_OPT_FLAG)
    {
        if (scalar(@::RpmsNotFoundInCmdPath) > 0)
        {
            my @rpm_ignored     = ();
            my @rpm_not_ignored = ();
            foreach my $rpm_name (@::RpmsNotFoundInCmdPath)
            {
                if (   ($rpm_name =~ m/autoupdate/)
                    || ($rpm_name =~ m/perl-libnet/)
                    || ($rpm_name =~ m/perl-DBI/)
                    || ($rpm_name =~ m/perl-XML-Parser/)
                    || ($rpm_name =~ m/perl-XML-Simple/)
                    || ($rpm_name =~ m/fping/)
                    || ($rpm_name =~ m/perl-DB_File/))
                {
                    push(@rpm_ignored, $rpm_name);
                }
                else { push(@rpm_not_ignored, $rpm_name); }
            }
            @::RpmsNotFoundInCmdPath = @rpm_not_ignored;
            if (scalar(@rpm_ignored) > 0)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', 'I', 'IMsgMissingRPM',
                                          join(", ", @rpm_ignored));
            }
            if (scalar(@::RpmsNotFoundInCmdPath) > 0)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', 'E1', 'EMsgNoRpmFound',
                                          join(", ", @::RpmsNotFoundInCmdPath));
            }
        }
    }
}

#--------------------------------------------------------------------------------

=head3 search_rpm_csminstall_path

        Search the /csminstall.. path for the rpms not found in the
        installms path.   Valid ony if -c arg is not used while using
        installms and copycsmpkgs.

        Populate the $::temp_CmdLinePathVersionName and %::Rpm_name_path and if
        not found then populate the %::RpmsNotFoundInCmdPath

        Arguments:
                Array rpm Names
        Returns:
                none
        Globals:
                %::temp_CmdLinePathVersionName
                %::Rpm_name_path
                %::CmdLinePathVersionName
                @::Rpms_to_be_installed
                @::Rpms_already_installed
                @::Rpms_not_found
                @::RpmsNotFoundInCmdPath
                $::PREREQS_ATTR
                $::INSTALLDIR_CSMPKG
                $::INSTALLDIR_OS_NAME_RPMS

        Error:
                 NodeUtils->message 'E2'

        Example:
                 ServerUtils->search_rpm_csminstall_path(@::mgmtserver_open_srcrpms);

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub search_rpm_csminstall_path
{

    #Empty the the hashes already used
    %::temp_CmdLinePathVersionName = ();
    %::Rpm_name_path               = ();
    %::CmdLinePathVersionName      = ();
    @::Rpms_to_be_installed        = ();
    @::Rpms_already_installed      = ();
    @::Rpms_not_found              = ();
    @::RpmsNotFoundInCmdPath       = ();

    my ($class, @rpm_list) = @_;
    my (@my_path);
    if ($::PREREQS_ATTR{'OSName'} eq "Linux")
    {
        @my_path = ($::INSTALLDIR_CSMPKG, $::INSTALLDIR_OS_NAME_RPMS);
        my ($rpmfile, $rpm, $path);

        # Determine the RPM architectures to search for on each platform.
        my @archs;
        my $arch = $::PREREQS_ATTR{'PkgArchitecture'};
        if (!$arch) { $arch = $::ATTRS{'InstallPkgArchitecture'}; }

        if ($arch =~ /i.86/)
        {
            @archs = ('i?86', 'noarch');
        }
        elsif ($arch =~ /ppc64/)
        {
            @archs = ($arch, 'ppc', 'noarch');
        }
        elsif ($arch =~ /x86_64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        elsif ($arch =~ /ia64/)
        {
            @archs = ($arch, 'i?86', 'noarch');
        }
        else    # Any other unknown architectures.
        {
            @archs = ($arch, 'noarch');
        }

        # Search the RPMs from path
        foreach $rpm (@rpm_list)
        {
            $rpmfile = '';
            $path    = '';

            # Process the IBMJava rpm begin.....
            if ($rpm =~ /^IBMJava2-JRE/)
            {

                foreach my $a (@archs)
                {
                    if (!($path))
                    {
                        $rpmfile = "${rpm}-*.$a.rpm";
                        $path    =
                          InstallUtils->findRpmInPath_java($rpmfile, @my_path);
                    }
                    else { last; }
                }
                if (!($path))
                {

                    # we take out the dash because the images, may not have them.
                    foreach my $a (@archs)
                    {
                        if (!($path))
                        {
                            $rpmfile = "${rpm}*.$a.rpm";
                            $path    =
                              InstallUtils->findRpmInPath_java($rpmfile,
                                                               @my_path);
                        }
                        if ($path) { last; }
                    }
                }

            }       #Process the IBMJava rpm end.....
            else    # Not IBMJava
            {

                foreach my $a (@archs)
                {
                    if (!($path))
                    {
                        $rpmfile = "${rpm}-*.$a.rpm";
                        $path = InstallUtils->findRpmInPath($rpmfile, @my_path);
                    }
                    else { last; }
                }
                if (!($path))
                {

                    # we take out the dash because the images, may not have them.
                    foreach my $a (@archs)
                    {
                        if (!($path))
                        {
                            $rpmfile = "${rpm}*.$a.rpm";
                            $path    =
                              InstallUtils->findRpmInPath($rpmfile, @my_path);
                        }
                        if ($path) { last; }
                    }
                }

            }
            if (defined($path))
            {
                $rpmfile = InstallUtils->getRecentVersionRpm($path, $rpmfile);

                chomp $rpmfile;
                my $rpmfile_basename;
                ($rpmfile_basename = $rpmfile) =~ s:^.*/::g;

                #find the shortname
                my @parts = split /-/, $rpmfile_basename;
                my $shortname = shift @parts;
                my $p;
              SNAME: while ($p = shift @parts)
                {
                    if ($p !~ m/^\d/)
                    {    #if it doesn't start with a digit
                        $shortname .= "-$p";
                    }
                    else { unshift @parts, $p; last SNAME; }
                }

                push @{$::temp_CmdLinePathVersionName{$path}},
                  $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'BaseName'} = $rpmfile_basename;
                $::Rpm_name_path{$shortname}{'Location'} = $path;
            }
            else { push(@::RpmsNotFoundInCmdPath, $rpm); }
        }
    }
    elsif ($::PREREQS_ATTR{'OSName'} eq "AIX")
    {
        NodeUtils->message("I", 'IMsgCOPYING_INSTALLP');

        # Copy RPMs from CSM distribution CD-ROM or directory to dirctory structure
        foreach my $image (@::csm_packages)
        {
            my $file = "${image}";
            my @images = InstallUtils->findImagesInPath($file, @::PKGPATH);
            foreach my $image (@images)
            {
                my $basename;
                ($basename = $image) =~ s:^.*/::g;
                my $path;
                ($path = $image) =~ s/$basename//g;
                ArchiveUtils->copyRpm($basename, $path,
                                      $::INSTALLDIR_CSMINSTLP);
            }
        }

        `inutoc $::INSTALLDIR_CSMINSTLP`;
    }
    else
    {
        NodeUtils->message('E2', 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3   show_copy_progress 

        Copy the entire contents of the Distro CD-ROMs

        Arguments:
                 $command
                 $destination
        Returns:
                none
        Globals:
               none
        Error:
                undefined

        Example:
               none

        Comments:  This function is intended to be used by copyDistroCD
                   subroutine.  This function shows the progress of CD copy
                   as %complete. It takes the 'tar' command which basically
                   copies the files from CD to disk and the destination dir
                   as the arguments. It pipes the output of the 'tar' command
                   and takes the size of each file as it gets copied. Calculates
                   the % value and displys it to the user as the files get copied.  


=cut

#--------------------------------------------------------------------------------

sub show_copy_progress
{
    my ($command, $target, $destination) = @_;
    my $totalSize  = 0;
    my $total      = 0;
    my $isLastFile = 0;
    my @output;
    my $mountPath   = $target;
    my $command_tmp = "du -s " . $mountPath;
    @output = NodeUtils->runcmd($command_tmp);
    my ($max) = split(/\s+/, $output[0]);
    $max =~ s/^\s*//;    # Remove any leading whitespace
    $max =~ s/\s*$//;    # Remove any trailing whitespace
    $totalSize = $max;
    if (!$totalSize) { $totalSize = 1; } # To avoid problem if du -s returns 0
    print("0% complete...\r");    #initial value

    my $firstFile = -1;
    my $file;
    my $lastFile;
    open(CMDOUT, "$command |")
      || NodeUtils->messageFromCat(
                                   'csmInstall.cat',            $::MSGMAPPATH,
                                   'csminstall',                'E',
                                   'EMsgERROR_RUNNING_COMMAND', $command
                                   );

    while (<CMDOUT>)
    {
        if ($firstFile == -1)
        {
            $firstFile = 1;
        }
        chomp;
        my $file1 = $_;
        $file1 =~ s/\.\/(.+)/\1/;    #example ./gcc-3.2.i386.rpm
        my $file = $destination . "/" . $file1;

        #whenever we get a new file, don't process it now. Save the file
        # and process the last file, hopefull by this time the last file is
        # fully copied to the disk.
        if ($file eq $lastFile)
        {
            next;
        }
        elsif ($firstFile)
        {
            $lastFile  = $file;
            $firstFile = 0;
            next;
        }
        else
        {
            $total =
              &displayProgress($lastFile, $total, $totalSize, $isLastFile);
            $lastFile = $file;
        }
    }    #end of whilea
    $isLastFile = 1;
    $total = &displayProgress($file, $total, $totalSize, $isLastFile);
    close(CMDOUT);
}

#--------------------------------------------------------------------------------

=head3    testVersion

        Compare version1 and version2 according to the operator and
        return True or False.

        Arguments:
                $version1
                $operator
                $version2
                $release1
                $release2
        Returns:
                True or False
        Globals:
                none
        Error:
                messageFromCat E11

        Example:
                if (ArchiveUtils->testVersion ( $ins_ver,
                                                "<",
                                                $req_ver,
                                                $ins_rel,
                                                $req_rel)){ blah; }

        Comments:
                The return value is generated with the Require query of the
                rpm command.

=cut

#--------------------------------------------------------------------------------

sub testVersion
{
    my ($class, $version1, $operator, $version2, $release1, $release2) = @_;

    # Note: perl seems to be able to handle really big integers, but if we run into a limit, we
    #       can use the Math::BigInt pkg

    my @a1 = split(/\./, $version1);
    my @a2 = split(/\./, $version2);
    my $len = (scalar(@a1) > scalar(@a2) ? scalar(@a1) : scalar(@a2));
    $#a1 = $len - 1;  # make the arrays the same length before appending release
    $#a2 = $len - 1;
    push @a1, split(/\./, $release1);
    push @a2, split(/\./, $release2);
    $len = (scalar(@a1) > scalar(@a2) ? scalar(@a1) : scalar(@a2));
    my $num1 = '';
    my $num2 = '';

    for (my $i = 0 ; $i < $len ; $i++)
    {
        my ($d1) = $a1[$i] =~ /^(\d*)/;    # remove any non-numbers on the end
        my ($d2) = $a2[$i] =~ /^(\d*)/;

        my $diff = length($d1) - length($d2);
        if ($diff > 0)                     # pad d2
        {
            $num1 .= $d1;
            $num2 .= ('0' x $diff) . $d2;
        }
        elsif ($diff < 0)                  # pad d1
        {
            $num1 .= ('0' x abs($diff)) . $d1;
            $num2 .= $d2;
        }
        else                               # they are the same length
        {
            $num1 .= $d1;
            $num2 .= $d2;
        }
    }

    # Remove the leading 0s or perl will interpret the numbers as octal
    $num1 =~ s/^0+//;
    $num2 =~ s/^0+//;

    #SuSE Changes
    # if $num1="", the "eval '$num1 $operator $num2'" will fail. So MUSTBE be sure that $num1 is not a "".
    if (length($num1) == 0) { $num1 = 0; }
    if (length($num2) == 0) { $num2 = 0; }

    #End of SuSE Changes

    if (length($release1))
    {
        $release1 = "-$release1";
    }    # this is just for error msgs
    if (length($release2))
    {
        $release2 = "-$release2";
    }    # this is just for error msgs

    if ($operator eq '=') { $operator = '=='; }
    my $bool = eval "$num1 $operator $num2";
    if (length($@))
    {
        NodeUtils->messageFromCat(
                              'csmInstall.cat',
                              $::MSGMAPPATH,
                              'csminstall',
                              'W',
                              'EMsgVERSION_COMPARE_PROBLEM',
                              "$version1$release1 $operator $version2$release2",
                              $@
                              );
        return undef;
    }
    if ($ENV{LANG} =~ /^(C|POSIX|en_US)/)
    {    #this is a work around for NLS problems
        NodeUtils->messageFromCat(
                              'csmInstall.cat',
                              $::MSGMAPPATH,
                              'csminstall',
                              'V',
                              'IMsgCOMPARING_VERSION',
                              "$version1$release1 $operator $version2$release2",
                              ($bool ? 'true' : 'false')
                              );
    }
    return $bool;
}

#--------------------------------------------------------------------------------

=head3	update_rpm_packages_to_csminstall

        Copy all appropriate rpms to csminstall.  Compare packages in PATH
	to /csminstall and only performa a copy if the files are more recent.
	Only prompt for CD's if file is not found in PATH or in /csminstall.

        Arguments:
		none
        Returns:
                none
        Globals:
        	$::COPY_OPT_FLAG
		@::Rpms_not_found
		@::RpmsNotFoundInCmdPath
        Error:
                messageFromCat E11

        Example:

        Comments:

		Dependancy on ServerUtils->create_directory_structure().
		Use if (!$::DONT_COPY_RPMS) is true.

=cut

#--------------------------------------------------------------------------------

sub update_rpm_packages_to_csminstall
{

    # get the version/release of the rpms in /csminstall directory
    ArchiveUtils->get_csminstall_pathVersion();

    # Copy csm packages to /csminstall
    ArchiveUtils->search_csm();

    # Copy open source packages to /csminstall
    ArchiveUtils->search_opensrc_prereqs();

    if ($::COPY_OPT_FLAG)
    {

        # force copy flag (-f) - copies all remaining CSM, RSCT,
        # Director and Open Source rpms to /csminstall

        if (scalar(@::RpmsNotFoundInCmdPath) >= 1)
        {
            NodeUtils->message('E1', 'EMsgNoRpmFound',
                               join(", ", @::RpmsNotFoundInCmdPath));
        }
        else
        {
            ArchiveUtils->create_rpm_list_to_copy();
            if (scalar(@::Rpms_not_found) >= 1)
            {
                NodeUtils->message('E1', 'EMsgNoRpmFound',
                                   join(", ", @::Rpms_not_found));
            }
            else
            {
                NodeUtils->message('I', 'IMsgCopyingRpms',
                                   "CSM, RSCT, Director and Open Source");

                ArchiveUtils->copy_rpm();
                ServerUtils->post_csm_copy();
            }
        }
    }
    else    # ignores certain rpms during copy
    {
        ArchiveUtils->create_rpm_list_to_copy();
        if (scalar(@::Rpms_not_found) >= 1)
        {

            #check for the rpms to be ignored
            my @rpm_ignored     = ();
            my @rpm_not_ignored = ();
            foreach my $rpm_name (@::Rpms_not_found)
            {
                if (   ($rpm_name =~ m/autoupdate/)
                    || ($rpm_name =~ m/perl-libnet/)
                    || ($rpm_name =~ m/perl-DBI/)
                    || ($rpm_name =~ m/perl-XML-Parser/)
                    || ($rpm_name =~ m/perl-XML-Simple/)
                    || ($rpm_name =~ m/fping/))
                {
                    push(@rpm_ignored, $rpm_name);
                }
                else { push(@rpm_not_ignored, $rpm_name); }
            }
            @::Rpms_not_found = @rpm_not_ignored;
            if (scalar(@rpm_ignored) >= 1)
            {
                NodeUtils->message('I', 'IMsgMissingRPM',
                                   join(", ", @rpm_ignored));
            }
            if (scalar(@::Rpms_not_found) > 0)
            {
                NodeUtils->message('E1', 'EMsgNoRpmFound',
                                   join(", ", @::Rpms_not_found));
            }
            NodeUtils->message('I', 'IMsgCopyingRpms',
                               "CSM, RSCT, Director and Open Source");

            ArchiveUtils->copy_rpm();
            ServerUtils->post_csm_copy();
        }
        else
        {
            NodeUtils->message('I', 'IMsgCopyingRpms',
                               "CSM, RSCT, Director and Open Source");
            ArchiveUtils->copy_rpm();
            ServerUtils->post_csm_copy();
        }
    }

    # Search for the distro rpms
    ArchiveUtils->search_copy_distro_rpms();
}

#--------------------------------------------------------------------------------

=head3  unmount_iso_image

	Tries to unmount a file as an ISO image (a CD image as a file).

        Arguments:
                mount point (usually "/tmp_loop_mnt")
        Returns:
                $::OK if umount worked
		$::NOK if not
        Globals:
                none
        Error:
		none
        Example:
                 my $rc = ArchiveUtils->unmount_iso_image($mount_pt};
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub unmount_iso_image
{
    my ($class, $mount_point) = @_;

    my $cmd = "$::UMOUNT $mount_point";

    NodeUtils->runcmd($cmd, -1);    # no exit on error
    my $rc = $::RUNCMD_RC;

    if ($rc == 0) { return $::OK; }

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head2    installp Support

=cut

#--------------------------------------------------------------------------------

=head3    get_pkgVersion

        AIX only routine.

        Returns the installp image version from Installp command which,
        looks into the .toc file.

        Arguments:
                $installpPackage

        Returns:
                AIX installp image version as a string
        Globals:
                $::PLTFRM
                $::INSTALLPCMD

        Error:
                messageFromCat E2
        Example:
                not used outside ServerUtils

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_pkgVersion
{
    my ($class, $pkg) = @_;
    my ($cmd, $output, $version);

    if ($::PLTFRM eq "Linux")
    {
        $version = "";
        return (length($version) ? $version : undef);
    }
    elsif ($::PLTFRM eq "AIX")
    {
        $cmd    = qq($::INSTALLPCMD -L -d . | grep $pkg 2>&1);
        $output = NodeUtils->runcmd($cmd);
        chomp($output);
        (undef, undef, $version, undef) = split(/:/, $output);
        return (length($version) ? $version : undef);
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }

}

#--------------------------------------------------------------------------------

1;

to_copyk 0PB$  7u       q@q@q@                   ./opt/csm/pm/CLOG.pm til                   $          # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2002,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
package CLOG;

=head1 NAME

CLOG - Perl API to CSM CLOG logging system.

=head1 SYNOPSIS

use CLOG;

=head1 DESCRIPTION

Logging via CSM CLOG from Perl programs.

All functions that take parameters use named parameters with either the "-name=>value" or "name=>value"
styles, though the "-name=>value" is the standard. So, you can call these functions and pass the 
parameters in any order you choose. Rest assured that if any required parameters are not provided, 
you will get an error return code from the function.

This class caches basic required data values needed in the CLOG C API and only requires the 
data specific to each message being recorded. For example, the message catalog name will not 
generally change, so that is set once in the constructor and this value is used for the life of
the object. 

However, these values may be overridden at each logging request. Continuing with the our example,
when the actual request to log an entry is made, a new value for the message catalog may be passed 
(as the -messageCatalog parameter) and this value will be in effect for this logging request only.

=head1 EXPORTED CONTSTANTS

=item B<Message Types:>

=item B<CLOG_ERROR_MSG>              - Error messages         

=item B<CLOG_WARNING_MSG>            - Warning messages       

=item B<CLOG_INFO_MSG>               - Informational messages 

=item B<CLOG_ALL_MSGS>               - Value to indicate all message types 

=item B<Function return codes:>

=item B<MAP_FILE_ERROR>              - Error in the map file - see error message for details.

=item B<BAD_OR_MISSING_CLOGGER>      - The clogger command is bad or missing

=item B<MISSING_PARAM>               - Bad parameter passed to function

=item B<BAD_PARAM>                   - Bad parameter passed to function

=item B<CLOG C API return codes: note that every effort to keep this list 

=item B<CLOG_SUCCESS>                - Clog function call was successful.       

=item B<CLOG_ALLOC_FAILURE>          - Unable to allocate storage.              

=item B<CLOG_INVALID_ENV>            - Bad ct_clog_ptr or ct_clog_t.            

=item B<CLOG_INVALID_CATALOG>        - Bad or missing catalog name, or unable to open message catalog. 

=item B<CLOG_INVALID_MESSAGE_SET>    - Bad or missing message set.              

=item B<CLOG_INVALID_MESSAGE_ID>     - Bad or missing message id.               

=item B<CLOG_INVALID_COMP_ID>        - Bad or missing component name.           

=item B<CLOG_INVALID_LPP_ID>         - Bad or missing LPP name.                 

=item B<CLOG_FFDC_ERROR>             - Error in call to FFDC.                   

=item B<CLOG_RMC_CONN_ERROR>         - Unable to connect to RMC.                

=item B<CLOG_RMC_PERM_DENIED>        - Denied permission by RMC.                

=item B<CLOG_RMC_ERROR>              - Other RMC error.                         

=item B<CLOG_BAD_NODE_ID>            - Call to cu_get_node_id() failed          

=item B<CLOG_BAD_DETAIL_DATA>        - Invalid or missing detail data.          

=item B<CLOG_DETAIL_DATA_OVERSIZE>   - Detail data is too large (100 bytes max).

=item B<CLOG_BAD_AIX_TEMP_ID>        - Bad AIX template ID.                     

=item B<CLOG_INVALID_MSG_TYPE>       - Invalid message type.                    

=item B<CLOG_INVALID_DEF_MSG>        - Bad or missing default message.          

=item B<CLOG_ERROR_LOG_NOT_ENABLED>  - Error logging is not enabled - call clog_set_error_log_info() first. 

=item B<CLOG_MSG_TYPE_NOT_ENABLED>   - Logging is not enabled for passed message type 

=item B<CLOG_BAD_PARAMS>             - Some other error was found in the passed parameters. 

=item B<CLOG_TRUE>                   - A true result value from CLOG.           

=item B<CLOG_FALSE>                  - A false result value from CLOG.          

=item B<CLOG_INTERNAL_ERROR>         - Internal error in CLOG API

=head1 EXPORTED VARIABLES

=item B<ERROR_MESSAGE>              - last error that occured in *module*

=item B<ERROR_CODE>                 - last error that occured in *module*

=cut

BEGIN
{ 
	 $::csmpm = $ENV{'CSM_PM'} ? $ENV{'CSM_PM'} : '/opt/csm/pm';
} #for development use

use lib $::csmpm;
use NodeUtils();

use strict;

# This tells perl to honor locale for sorting, dates, etc.
# More info about locale.pm and perl handling of locales can be found in
# /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.
use locale;

use Carp;

use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); # $AUTOLOAD);

require Exporter;
require AutoLoader;
#require DynaLoader;

@ISA = qw(Exporter);

%EXPORT_TAGS = ( );

#@EXPORT    = qw( );
#@EXPORT_OK = ( );
#@EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );


# CLOGMessageTypes
use constant CLOG_ALL_MSGS              =>-1;  # Value to indicate all message types 
use constant CLOG_ERROR_MSG             => 1;  # Error messages         
use constant CLOG_WARNING_MSG           => 2;  # Warning messages       
use constant CLOG_INFO_MSG              => 4;  # Informational messages 
use constant CLOG_LAST_MESSAGE_TYPE_VAL => 4;  # Internal use only

# CLOG Return codes 
use constant MAP_FILE_ERROR              =>-13; # Error in the map file - see error message for details.
use constant BAD_OR_MISSING_CLOGGER      =>-12; # The clogger command is bad or missing
use constant MISSING_PARAM               =>-11; # Bad parameter passed to function
use constant BAD_PARAM                   =>-10; # Bad parameter passed to function
use constant CLOG_SUCCESS                => 0; # Clog function call was successful.       
use constant CLOG_ALLOC_FAILURE          => 1; # Unable to allocate storage.              
use constant CLOG_INVALID_ENV            => 2; # Bad ct_clog_ptr or ct_clog_t.            
use constant CLOG_INVALID_CATALOG        => 3; # Bad or missing catalog name, or unable to open message catalog. 
use constant CLOG_INVALID_MESSAGE_SET    => 4; # Bad or missing message set.              
use constant CLOG_INVALID_MESSAGE_ID     => 5; # Bad or missing message id.               
use constant CLOG_INVALID_COMP_ID        => 6; # Bad or missing component name.           
use constant CLOG_INVALID_LPP_ID         => 7; # Bad or missing LPP name.                 
use constant CLOG_FFDC_ERROR             => 8; # Error in call to FFDC.                   
use constant CLOG_RMC_CONN_ERROR         => 9; # Unable to connect to RMC.                
use constant CLOG_RMC_PERM_DENIED        =>10; # Denied permission by RMC.                
use constant CLOG_RMC_ERROR              =>11; # Other RMC error.                         
use constant CLOG_BAD_NODE_ID            =>12; # Call to cu_get_node_id() failed          
use constant CLOG_BAD_DETAIL_DATA        =>13; # Invalid or missing detail data.          
use constant CLOG_DETAIL_DATA_OVERSIZE   =>14; # Detail data is too large (100 bytes max).
use constant CLOG_BAD_AIX_TEMP_ID        =>15; # Bad AIX template ID.                     
use constant CLOG_INVALID_MSG_TYPE       =>16; # Invalid message type.                    
use constant CLOG_INVALID_DEF_MSG        =>17; # Bad or missing default message.          
use constant CLOG_ERROR_LOG_NOT_ENABLED  =>18; # Error logging is not enabled - call clog_set_error_log_info() first. 
use constant CLOG_MSG_TYPE_NOT_ENABLED   =>19; # Logging is not enabled for passed message type 
use constant CLOG_BAD_PARAMS             =>20; # Some other error was found in the passed parameters. 
use constant CLOG_TRUE                   =>21; # A true result value from CLOG.           
use constant CLOG_FALSE                  =>22; # A false result value from CLOG.          
use constant CLOG_INTERNAL_ERROR         =>23; # Internal error in CLOG API - see trace file for details of error.    

$VERSION = '1.0';
my $CLOGGER = "/opt/csm/csmbin/clogger";

#               catalog name     directory where map file is    message set name
my @CATALOG = ("IBM.CLOG.cat",    "/opt/csm/msgmaps/",               "Perl");

################################################################################
# ;mash
################################################################################
sub mash
{
	 my $self = shift;
	 my $str  = shift;

	 return NodeUtils->quote($str);


#	 print "Before:$str\n";
#	 $str =~ s/\\/\\\\/sg; # replace single \ with \
#	 $str =~ s/\$/\\\$/sg; # replace $ with \$
#	 $str =~ s/\'/\\\'/sg; # replace ' with \'
#	 $str =~ s/\"/\\\"/sg; # replace " with \"
#	 print "After :$str\n";
#	 return "\"$str\"";

}
################################################################################
# ;clear_errors
################################################################################
sub clear_errors {
	 my $self = shift;
	 $self->{error_message} = "";
	 $self->{error_code}    = 0;
}

################################################################################
# ;validate_args
################################################################################
sub validate_args {

	 my $self = shift;
    my %input;
	 my $match;
	 my $required_match;
	 my %match_words_not_seen;
	 my $key;

	 # $#_ returns last index of @_, so if its 6, then we really have 7 elements...
	 if ( $#_ % 2 == 0 ) {
		  $self->{error_code}     = MISSING_PARAM;
		  $self->{error_message}  = NodeUtils->getMessageFromCat(@CATALOG,
																					'EMsgMissingParamError', "");
		  return MISSING_PARAM;
	 }

	 %input = @_;
#	 print "input{_match}=[".$input{"_match"}."]\n";
	 if ( $input{"_match"} ne "" ) {
		  $match = $input{"_match"};
		  delete $input{"_match"};
	 }
	 else {
		  $self->{error_code}   = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " _match");
		  return MISSING_PARAM;
	 }

	 if ( $input{"_required"} ne "" ) {
		  $required_match = $input{"_required"};
		  delete $input{"_required"};
	 }
	 else {
		  $required_match = $match;
	 }

	 # store a hash of all match words for use later.
	 my $word;
	 foreach $word ( split(/\|/,$required_match) ) {
		  $match_words_not_seen{$word}=1;
	 }

 
	 # this verifies that the key names are OK
    foreach $key ( keys %input ) { 
#		  print "validate_args. Checking [$key]\n";
		  $key =~ s/^-//; #remove starting dash if there is one
		  if( $key !~ /($match)$/)
		  {
				$self->{error_code}   = BAD_PARAM;
				$self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																						'EMsgInvalidParamError', $key);
				return BAD_PARAM;
		  }
	 }

	 # and this verifies that the values are OK
	 foreach $key ( keys %input ) {
		  if( !$input{$key} ) {
				$self->{error_code}   = MISSING_PARAM;
				$self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																						'EMsgMissingParamError', " $key");
				return MISSING_PARAM;
		  }
		  $key =~ s/^-//;
		  delete $match_words_not_seen{$key};
	 }

	 # finally, verify that we have seen each and every parameter in the match set
  	 foreach $key (keys %match_words_not_seen ) {
  		  if ( $match_words_not_seen{$key} == 1 ) {
  				print "$key = $match_words_not_seen{$key}\n";
  				$self->{error_code}    = MISSING_PARAM;
  				$self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																						'EMsgMissingParamError', " $key");
  				return MISSING_PARAM;
  		  }
  	 }
	 return 0;

}

=head1 FUNCTIONS

Note - each parameter is required to be present and non zero. 
If the parameter is within [brackets], then it is optional.

=cut 

################################################################################
################################################################################

=item B<new()>

Creates a CLOG object.

=item PARAMETERS

 compID         - Component ID 
 lppID          - Licenced Product ID
 messageCatalog - Message catalog file name
 messageSet     - Message set name
 messageMapDir  - Directory where Perl message map is for the message catalog

=item RETURNS 

 blessed reference to new object on success
 BAD_PARAM     - bad parameter passed
 MISSING_PARAM - missing parameter

 

=cut
################################################################################
# ;new
################################################################################
sub new {
    my $self = {
		  error_code => "",       # numeric return code of last action
		  error_message => "",    # string error of last action, if any.
		  compID => "",
		  lppID => "",
		  messageCatalog => "",
		  messageSet => "", 
		  messageMapDir => "",
		  errorTemplate => "",
		  detailedData => "",
		  detailedDataSize => "",
	 };

    my %input;
	 my $key;

    shift @_; #gets rid of the CLOG input

	 # $#_ returns last index, so if its 6, then we really have 7 elements...
	 if ( $#_ % 2 == 0 ) {
		  $CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																				'EMsgMissingParamError',"");
		  $CLOG::ERROR_CODE    = MISSING_PARAM;
		  return undef;
	 }

    while(@_){
		  my ($name, $value) = (shift, shift);
		  $name =~ s/^-//; #remove starting dash if there is one
		  if( $name !~ /(compID|lppID|messageCatalog|messageSet|messageMapDir)$/ )
		  {
				$CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																					 'EMsgInvalidParamError', $name);
				$CLOG::ERROR_CODE    = BAD_PARAM;
				return BAD_PARAM;
		  }
		  else{
				$input{$name} = $value;
		  }
    }

	 # ensure that if a parameter was passed, that its value is present
	 foreach $key ( keys %input ) {
		  if( !$input{$key} ) {
				$CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																					 'EMsgMissingParamError', " $key");
				$CLOG::ERROR_CODE    = BAD_PARAM;
				return MISSING_PARAM;
		  }
	 }
	 
	 
	 if ( $input{"compID"} ) {
		  $self->{compID} = $input{"compID"};
	 }
	 else {
		  $CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																				'EMsgMissingParamError', " compID");
		  $CLOG::ERROR_CODE    = BAD_PARAM;
		  return MISSING_PARAM;
	 }

	 if ( $input{"lppID"} ) {
		  $self->{lppID} = $input{"lppID"};
	 }
	 else {
		  $CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																				'EMsgMissingParamError', " lppID");
		  $CLOG::ERROR_CODE    = BAD_PARAM;
		  return MISSING_PARAM;
	 }

	 if ( $input{"messageCatalog"} ) {  
		  $self->{messageCatalog} = $input{"messageCatalog"};
	 }
	 else {
		  $CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																				'EMsgMissingParamError', " messageCatalog");
		  $CLOG::ERROR_CODE    = BAD_PARAM;
		  return MISSING_PARAM;
	 }

	 if ( $input{"messageSet"} ) {
		  $self->{messageSet} = $input{"messageSet"};
	 }
	 else {
		  $CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																				'EMsgMissingParamError', " messageSet");
		  $CLOG::ERROR_CODE    = BAD_PARAM;
		  return MISSING_PARAM;
	 }

	 if ( $input{"messageMapDir"} ) {
		  $self->{messageMapDir} = $input{"messageMapDir"};
	 }
	 else {
		  $CLOG::ERROR_MESSAGE = NodeUtils->getMessageFromCat(@CATALOG,
																				'EMsgMissingParamError', " messageMapDir");
		  $CLOG::ERROR_CODE    = BAD_PARAM;
		  return MISSING_PARAM;
	 }

	 
    bless $self;

	 $self->enable_msgs(-messageType => CLOG_ALL_MSGS);
	 $self->clear_errors();

    return $self;
}

################################################################################
################################################################################

=item B<get_error()>

Returns a list containing the last return error code and last return error message.
If the last operation did not return an error, then the error message will be a blank string
and the error code will be 0.

Note: the error message may not always be set even in cases where the error code is not 0.

=item PARAMETERS

none

=item RETURNS 

($ErrorCode, $ErrorMessage)

=cut

################################################################################
# ;get_error
################################################################################
sub get_error {
    my $self = shift;
    return ($self->{error_code}, $self->{error_message});
}

################################################################################
################################################################################

=item B<clog_rec()>

Record a message.

=item PARAMETERS
 
 messageType        - one of the error type constants
 fileName           - name of source file logging this entry
 lineNumber         - line number in source file logging this entry
 sccsID             - sccs ID of source file logging this entry
 messageID          - message ID nmumonic from map file
 [fields]           - reference to a list of substitutional field values
 [compID]           - component ID for this entry only
 [lppID]            - lpp ID for this entry only
 [messageCatalog]   - message catalog for this entry only
 [messageSet]       - message set for this entry only
 [messageMapDir]    - message map directory for this entry only
 [errorTemplate]    - AIX error template ID for this entry only
 [detailedData]     - detailed data for this entry only
 [detailedDataSize] - detailed data size for this entry only

=cut

# ;clog_rec
sub clog_rec {
    my $self = shift;
    my %input;
	 my $options;

	 if ( $self->validate_args(@_, 
										_match=>"fileName|lineNumber|sccsID|messageMapDir|messageType|messageID|fields|".
										"compID|lppID|messageCatalog|messageSet|errorTemplate|detailedData|detailedDataSize",
										_required=>"fileName|lineNumber|sccsID|messageType|messageID") != 0 ) {
		  return $self->{error_code};
	 }


	 %input = @_;
	 
	 # Get all required data to be passed to clogger command. We allow any values passed to this 
	 # method to override temporarily those stored in this object. Some of these values are never
	 # stored in the object (eg, lineNumber), but we do it this way since
	 #  1) its clearer what we are doing
	 #  2) it does no real harm other than minor run-time cost
	 #  3) if we decide in the future to cache some data internally, this will still have the correct behavior.

	 # basic stuff from constructor
	 my $compID        = $input{compID}         ? $input{compID}          : $self->{compID};
	 my $lppID         = $input{lppID}          ? $input{lppID}           : $self->{lppID};
	 my $messageMapDir = $input{messageMapDir}  ? $input{messageMapDir}   : $self->{messageMapDir};
	 my $messageSet    = $input{messageSet}     ? $input{messageSet}      : $self->{messageSet};
	 my $messageCat    = $input{messageCatalog} ? $input{messageCatalog}  : $self->{messageCatalog};

	 # AIX error log information
	 my $detailedData      = $input{detailedData}     ? $input{detailedData}     : $self->{detailedData};
	 my $detailedDataSize  = $input{detailedDataSize} ? $input{detailedDataSize} : $self->{detailedDataSize};
	 my $errorTemplate     = $input{errorTemplate}    ? $input{errorTemplate}    : $self->{errorTemplate};

	 # Specific to this error logging call
	 my $fileName      = $input{fileName}       ? $input{fileName}        : $self->{fileName};
	 my $lineNumber    = $input{lineNumber}     ? $input{lineNumber}      : $self->{lineNumber};
	 my $sccsID        = $input{sccsID}         ? $input{sccsID}          : $self->{sccsID};
	 my $messageID     = $input{messageID}      ? $input{messageID}       : $self->{messageID};
	 my $messageType   = $input{messageType}    ? $input{messageType}     : $self->{messageType};

	 if ( ! $self->is_enabled(-messageType=>$messageType) ) {
		  $self->clear_errors();
		  return CLOG_SUCCESS;
	 }

#	 print "messageID=$messageID\n";
#	 print "messageMapDir=$messageMapDir\n";
#	 print "messageSet=$messageSet\n";
#	 print "messageCat=$messageCat\n";


	 # be sure $CLOGGER is runnable
	 if ( ! -x $CLOGGER ) {
		  $self->{error_code}    = BAD_OR_MISSING_CLOGGER;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsg_Missing_Clogger');
		  return BAD_OR_MISSING_CLOGGER;
	 }

	 %input = @_;

	 #formulate the command string
	 my @CommandArgs;
	 

	 # messageMapDir
	 if ( $messageMapDir eq "" ) {
		  $self->{error_code}    = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " messageMapDir");
		  return MISSING_PARAM;
	 }

	 # messageSet
	 if ( $messageSet eq "" ) {
		  $self->{error_code}    = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " messageSet");
		  return MISSING_PARAM;
	 }

	 # messageCat
	 if ( $messageCat eq "" ) {
		  $self->{error_code}    = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " messageCat");
		  return MISSING_PARAM;
	 }
	 # messageID
	 if ( $messageID eq "" ) {
		  $self->{error_code}   = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " messageID");
		  return MISSING_PARAM;
	 }

	 push (@CommandArgs," -I0");
	 push (@CommandArgs," -S0");
	 push (@CommandArgs," -CIBM.CLOG.cat");

	 my $field;
	 my @fields;
	 foreach $field ( @{$input{fields}} ) {
		  push (@fields,$self->mash($field));
	 }

  	 # verify that the message can be fetched.
	 my ($msgnum, $msgset, $defaultmsg) = NodeUtils->getmsgmap($messageMapDir,
																				  $messageSet,
																				  $messageCat,
																				  $messageID);
	 
#	 print "getmsgmap() returned =  ($msgnum, $msgset, [$defaultmsg] )\n";
	 
	 if ( $msgnum == -1 ) {
		  $self->{error_code}    = MAP_FILE_ERROR;
		  $self->{error_message} = $defaultmsg;
		  return MAP_FILE_ERROR;
	 }

  	 # Now fetch the message from the users catalog with any substitution already done.
	 my $FullMessage = NodeUtils->getMessageFromCat($messageCat, $messageMapDir, $messageSet, $messageID, @fields );

	 push (@CommandArgs," -M".$self->mash($FullMessage));

	 # compID
	 if ( $compID ) {
		  push(@CommandArgs," -c".$self->mash($compID));
	 }
	 else {
		  $self->{error_code}    = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " compID");
		  return MISSING_PARAM;
	 }
	 # lppID
	 if ( $lppID ) {
		  push(@CommandArgs," -l".$self->mash($lppID));
	 }
	 else {
		  $self->{error_code}    = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " lppID");
		  return MISSING_PARAM;
	 }


	 # messageType
	 if ( $messageType ) {
		  push(@CommandArgs," -t$messageType");
	 }
	 else {
		  $self->{error_code}   = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " messageType");
		  return MISSING_PARAM;
	 }

	 if ( $messageType == CLOG_ERROR_MSG || $messageType == CLOG_WARNING_MSG ) 
	 {
		  # detailedData
		  if ( $detailedData ) {
				push(@CommandArgs," -D".$self->mash($detailedData));
		  }
		  else {
				$self->{error_code}    = MISSING_PARAM;
				$self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																						'EMsgMissingParamError', " detailedData");
				return MISSING_PARAM;
		  }

		  # detailedDataSize
#  		  if ( $detailedDataSize ) {
#  				push(@CommandArgs," -d".$self->mash($detailedDataSize);
#  		  }
#  		  else {
#  				$self->{error_code}    = MISSING_PARAM;
#  				$self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
#  																						'EMsgMissingParamError', " detailedDataSize");
#  				return MISSING_PARAM;
#  		  }

		  # errorTemplate
		  if ( $errorTemplate ) {
				push(@CommandArgs," -A".$self->mash($errorTemplate));
		  }
		  else {
				$self->{error_code}    = MISSING_PARAM;
				$self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																						'EMsgMissingParamError', " errorTemplate");
				return MISSING_PARAM;
		  }
	 }

	 # fileName
	 if ( $fileName ) {
		  push(@CommandArgs," -f".$self->mash($fileName));
	 }
	 else {
		  $self->{error_code}   = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " fileName");
		  return MISSING_PARAM;
	 }
	 # lineNumber
	 if ( $lineNumber ) {
		  push(@CommandArgs," -n$lineNumber");
	 }
	 else {
		  $self->{error_code}   = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " lineNumber");
		  return MISSING_PARAM;
	 }
	 # sccsID
	 if ( $sccsID ) {
		  push(@CommandArgs," -s".$self->mash($sccsID));
	 }
	 else {
		  $self->{error_code}   = MISSING_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgMissingParamError', " sccsID");
		  return MISSING_PARAM;
	 }

	 my $command = "LC_ALL=C $CLOGGER @CommandArgs";
#	 print "Command = [$command]\n";

	 # run the command, capture output
	 my $output = `$command`;
	 chomp($output);
	 my $ret = ($? >> 8);

#	 print "$CLOGGER return code was [$ret]\n";
#	 print "$CLOGGER output was [$output]\n";

	 $self->clear_errors();

	 $self->{error_code}  = $ret;

	 if ( $self->{error_code} != 0 ) {
		  $self->{error_message} = $output;
	 }

    return $self->{error_code};
}


=item B<enable_msgs()>

Enables logging of the passed message type.

=item PARAMETERS
	 
 -messageType : the message type to disnable.

=item RETURNS 

 CLOG::CLOG_SUCCESS on success
 An error code on error - see get_error()	 	 
	 
=cut
################################################################################
# ;enable_msgs
################################################################################
sub enable_msgs
{
	 my $self = shift;
	 my %input;

	 if ( $self->validate_args(@_, _match=>"messageType", _required=>"messageType" ) != 0 ) 
	 {
		  return $self->{error_code};
	 }
	 
	 %input = @_;
	 
	 my $message_type = $input{"messageType"} ? $input{"messageType"} : $input{"-messageType"};

	 if( $message_type != CLOG_ALL_MSGS &&
		  $message_type != CLOG_ERROR_MSG &&
		  $message_type != CLOG_WARNING_MSG &&
		  $message_type != CLOG_INFO_MSG )
	 {
		  $self->{error_code}   = BAD_PARAM;
		  $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				  'EMsgInvalidParamError', "messageType");
		  return BAD_PARAM;
	 }

	 if ( $message_type == CLOG_ALL_MSGS ) {
		  $self->{message_mask} = (CLOG_LAST_MESSAGE_TYPE_VAL*2)-1;
	 }
	 else {
		  $self->{message_mask} |= $message_type;
	 }

	$self->clear_errors();
	return CLOG_SUCCESS;
}


=item B<disable_msgs()>

Disables the logging of the passed message type.

=item PARAMETERS
	 
 -messageType : the message type to enable.

=item RETURNS 

 CLOG_SUCCESS on success
 An error code on error - see get_error()	 
	 
=cut

################################################################################
# ;disable_msgs
################################################################################
sub disable_msgs
{
 	my $self = shift;
	my %input;

	if ( $self->validate_args(@_, _match=>"messageType", _required=>"messageType" ) != 0 ) 
	{
		 return $self->{error_code};
	}
	
	%input = @_;
	
	my $message_type = $input{"messageType"} ? $input{"messageType"} : $input{"-messageType"};
	
	if( $message_type != CLOG_ALL_MSGS &&
		 $message_type != CLOG_ERROR_MSG &&
		 $message_type != CLOG_WARNING_MSG &&
		 $message_type != CLOG_INFO_MSG )
	{
		 $self->{error_code}   = BAD_PARAM;
		 $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				 'EMsgInvalidParamError', "messageType");
		 return BAD_PARAM;
	}
	
	if ( $message_type == CLOG_ALL_MSGS ) {
		 $self->{message_mask} = 0;
	}
	else {
		 $self->{message_mask} &= ~$message_type;
	}

	$self->clear_errors();
	return CLOG_SUCCESS;

}

=item B<is_enabled()>

Checks if the passed message type is enabled.

=item PARAMETERS
	 
 -messageType : the message type to check.

=item RETURNS 

 CLOG_TRUE  : message type is enabled
 CLOG_FALSE : message type is not enabled
 An error code on error - see get_error()
	 
=cut
################################################################################
# ;is_enabled
################################################################################
sub is_enabled
{
	my $self = shift;
	my %input;

	if ( $self->validate_args(@_, _match=>"messageType", _required=>"messageType" ) != 0 ) 
	{
		 return $self->{error_code};
	}
	
	%input = @_;
	
	my $message_type = $input{"messageType"} ? $input{"messageType"} : $input{"-messageType"};
	
	if( $message_type != CLOG_ERROR_MSG &&
		 $message_type != CLOG_WARNING_MSG &&
		 $message_type != CLOG_INFO_MSG )
	{
		 $self->{error_code}   = BAD_PARAM;
		 $self->{error_message} = NodeUtils->getMessageFromCat(@CATALOG,
																				 'EMsgInvalidParamError', "messageType");
		 return BAD_PARAM;
	}

	$self->clear_errors();
	if ( $self->{message_mask} & $message_type ) {
		 return CLOG_TRUE;
	}
	else {
		 return CLOG_FALSE;
	}
}


=item B<set_lpp_id()>

Sets the LPP ID.

=item PARAMETERS
	 
 -lppID : the LPP ID to set.

=item RETURNS 

 CLOG_SUCCESS  : success
 An error code on error - see get_error()
	 
=cut

################################################################################
# ;set_lpp_id
################################################################################
sub set_lpp_id
{
	 my $self = shift;
	 my %input;

	 if ( $self->validate_args(@_, _match=>"lppID", _required=>"lppID") != 0 ) 
	 {
		  return $self->{error_code};
	 }
	 
	 %input = @_;
	 
	 $self->{lppID} = $input{"lppID"} ? $input{"lppID"} : $input{"-lppID"};

	 $self->clear_errors();
	 return CLOG_SUCCESS;
}

=item B<set_message_catalog()>

Sets the message catalog.

=item PARAMETERS
	 
 -messageCatalog : the message catalog name.

=item RETURNS 

 CLOG_SUCCESS  : success
 An error code on error - see get_error()
	 
=cut

################################################################################
# ;set_message_catalog
################################################################################
sub set_message_catalog
{
	my $self = shift;
	my %input;

	if ( $self->validate_args(@_, _match=>"messageCatalog" ) != 0 ) 
	{
		 return $self->{error_code};
	}
	 
	%input = @_;
	
	$self->{messageCatalog} = $input{"messageCatalog"} ? $input{"messageCatalog"} : $input{"-messageCatalog"};

	$self->clear_errors();
	return CLOG_SUCCESS;
}

=item B<set_message_set()>

Sets the message set.

=item PARAMETERS
	 
 -messageSet : the message set numonic (requires message map file) see new()

=item RETURNS 

 CLOG_SUCCESS  : success
 An error code on error - see get_error()
	 
=cut
################################################################################
# ;set_message_set
################################################################################
sub set_message_set
{
	 my $self = shift;
	 my %input;

	 if ( $self->validate_args(@_, _match=>"messageSet",_required=>"messageSet" ) != 0 ) 
	 {
		  return $self->{error_code};
	 }
	 
	 %input = @_;
	 
	 $self->{messageSet} = $input{"messageSet"} ? $input{"messageSet"} : $input{"-messageSet"};
	 
	 $self->clear_errors();
	 return CLOG_SUCCESS;
}

=item B<set_catalog_and_set()>

Sets both the message catalog and message set.

=item PARAMETERS

 -messageCatalog : the message catalog name
 -messageSet     : the message set numonic (requires message map file) see new()

=item RETURNS 

 CLOG_SUCCESS  : success
 An error code on error - see get_error()
	 
=cut
################################################################################
# ;set_catalog_and_set
################################################################################
sub set_catalog_and_set
{
	 my $self = shift;
	 my %input;
	 
	 if ( $self->validate_args(@_, _match=>"messageSet|messageCatalog" ) != 0 ) 
	 {
		  return $self->{error_code};
	 }
	 
	 %input = @_;
	 
	 my $messageCat = $input{"messageCatalog"} ? $input{"messageCatalog"} : $input{"-messageCatalog"};
	 my $ret = $self->set_message_catalog(messageCatalog=>$messageCat);
	 if ( $ret != CLOG_SUCCESS ) {
		  return $ret;
	 }

	 my $messageSet = $input{"messageSet"} ? $input{"messageSet"} : $input{"-messageSet"};
	 $ret = $self->set_message_set(messageSet=>$messageSet);
	 if ( $ret != CLOG_SUCCESS ) {
		  return $ret;
	 }

	 $self->clear_errors();
	 return CLOG_SUCCESS;
}

=item B<set_component_id()>

Sets the component ID.

=item PARAMETERS

 -compID : the component name.

=item RETURNS 

 CLOG_SUCCESS  : success
 An error code on error - see get_error()
	 
=cut
################################################################################
# ;set_component_id
################################################################################
sub set_component_id
{
	 my $self = shift;
	 my %input;
	 
	 if ( $self->validate_args(@_,_match=>"compID",_required=>"compID" ) != 0 )
	 {
		  return $self->{error_code};
	 }
	 
	 %input = @_;
	 
	 $self->{compID} = $input{"compID"} ? $input{"compID"} : $input{"-compID"};
	 
	 $self->clear_errors();
	 return CLOG_SUCCESS;
}

=item B<set_eror_log_info()>

Sets the field required to log messages via FFDC, specifically, AIX error log 
template information.

=item PARAMETERS

 -errorTemplate    :
 -detailedData     :
 -detailedDataSize :

=item RETURNS 

 CLOG_SUCCESS  : success
 An error code on error - see get_error()

 
=cut
################################################################################
# ;set_error_log_info
################################################################################
sub set_error_log_info
{
	 my $self = shift;
	 my %input;

	 if ( $self->validate_args(@_, 
										_match=>"errorTemplate|detailedData|detailedDataSize",
										_required=>"errorTemplate|detailedData|detailedDataSize") != 0 ) 
	 {
		  return $self->{error_code};
	 }

	 %input = @_;

	 $self->{errorTemplate}    = $input{"errorTemplate"}    ? $input{"errorTemplate"}    : $input{"-errorTemplate"};
	 $self->{detailedData}     = $input{"detailedData"}     ? $input{"detailedData"}     : $input{"-detailedData"};
	 $self->{detailedDataSize} = $input{"detailedDataSize"} ? $input{"detailedDataSize"} : $input{"-detailedDataSize"};

	 $self->clear_errors();
	 return CLOG_SUCCESS;
}

################################################################################

################################################################################
sub DESTROY{
	my $self = shift;
#	print "DESTROY called\n";
#	if($self =~ "CLOG=HASH"){
#		 print "FOOEY\n";
#		 c_destroy($self->{clogptr});
#	}
}

################################################################################
# _dump 
################################################################################
sub _dump 
{
	 my $self = shift;
	 my $key;

	 print "CLOG environment dump:\n";
	 printf ("%-20s\t%s\n","Name","Value");
	 print "----------------------------------------\n";
	 foreach $key ( sort keys %{$self} ) {
		  printf ("%-20s\t%s\n",$key,$self->{$key});
	 }
	 print "----------------------------------------\n";
}


1;
__END__

=back 

=head1

AUTHOR

Anthony Pioli (cluster@us.ibm.com)

=cut
 = klQ 0PB  7u       Aq@Aq@Aq@                   ./opt/csm/pm/CSMDefs.pm                              # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#####################################################################
#                                                                   #
# Module:  CSMDefs.pm                                               #
#                                                                   #
#                                                                   #
# Description:   This module contains definitions used by CSM       #
#                commands.  These are definitions of CSM            #
#                directories and commands.  These definitions       #
#                are not specific to any operating system or        #
#                distribution.                                      #
#                                                                   #
# Subroutines:   None                                               #
#                                                                   #
# Notes:                                                            #
#                                                                   #
#####################################################################
# @(#)46   1.39   src/csm/install/CSMDefs.pm.perl, setup, csm_rveg, rveg0414a 2/20/04 15:06:17
package CSMDefs;

BEGIN  {
    use File::Basename;      # - this gives us the path of the command
    ($::Bin) = dirname($0);  # - for this command we assume the modules and 
                             #     message maps are in the same place
}
use lib "$::Bin";

use NodeUtils;


#-------------------------------------------------------------------
#    Global Definitions
#-------------------------------------------------------------------

#--Default Values--
$::MS_INSTALL_SERVER =1; #management server is an install server (by default)
$::SERVER_DIRECTORY = "/csmserver"; #directory used to store CSM repository on Install servers

$::NOK=1;
$::OK=0;

# The string that indicates a "Lite" node
$::CSMLITE = 'MinManaged';
# To disable CSMLITE, uncomment the following line.
#$::CSMLITE = `/bin/date`; 

$::LCSEXT     =  "true";  # LCS extension rpms on CSM CD?
$::ITDAGENT   =  "true"; # ITDAgent rpm on CSM CD?


# CSM and RSCT Directories
$::CSMTOP                = "/opt/csm";
$::CSMREQS               = $::CSMTOP  . "/reqs";
$::CSMBIN                = $::CSMTOP  . "/bin";
$::CSMCSMBIN             = $::CSMTOP  . "/csmbin";
$::OPTCSMINSTALL         = $::CSMTOP  . "/install";
$::RSCTBIN               = "/usr/sbin/rsct/bin";
$::TFTPBOOT              = "/tftpboot";
$::PXELINUX_CFG_DIR      = "/tftpboot/pxelinux.cfg";
$::CSMSTATUSDIR		 = "/csminstall/csm/status";
$::CSMINSTDIR            = "/csminstall";
$::CSMCFGDIR             = $::CSMINSTDIR . "/csm/config/";
#$::CSMSTATUSLINK	 = $::CSMINSTDIR . "/csm/status"; #obsolete
$::CSMCLIENTMNTDIR		 = "/var/opt/csm/mnt";

# CSM Files
$::NODEMAP_FILE          =  "$::CSMCFGDIR/nodemap";
$::CFGINFOFILE           =  "/opt/csm/install/configinfo";

# CSM and RSCT Commands
$::ADDLCSEXT             = $::CSMBIN    . "/addlcsext";
$::CFORCE                = $::CSMBIN    . "/cfmupdatenode";
$::CHHWDEV               = $::CSMBIN    . "/chhwdev";
$::CHNODE                = $::CSMBIN    . "/chnode";
$::CREATEDHCP            = $::CSMCSMBIN . "/createdhcp";
$::CREATEHWDEV            = $::CSMCSMBIN . "/createhwdev";
$::CREATENODE            = $::CSMCSMBIN . "/createnode";
$::CSM2NIMGRPS           = $::CSMBIN    . "/csm2nimgrps";
$::CSM2NIMNODES          = $::CSMBIN    . "/csm2nimnodes";
$::DSH                   = $::CSMBIN    . "/dsh";
$::GETMACS               = $::CSMBIN    . "/getmacs";
$::HWDEVGRP              = $::CSMBIN    . "/hwdevgrp";
$::LSCONDRESP            = $::RSCTBIN   . "/lscondresp";
$::LSHWDEV               = $::CSMBIN    . "/lshwdev";
$::LSNODE                = $::CSMBIN    . "/lsnode";
$::MGMTSVR               = $::CSMBIN    . "/mgmtsvr";
$::MKGETMACRD            = $::CSMCSMBIN . "/mkgetmacrd";
$::MONITORINSTALL        = $::CSMBIN    . "/monitorinstall";
$::NODEGRP               = $::CSMBIN    . "/nodegrp";
$::REMOTESHELL_EXPECT    = $::CSMCSMBIN . "/remoteshell.expect";
$::RMCONDRESP            = $::RSCTBIN   . "/rmcondresp";
$::RMHWDEV               = $::CSMBIN    . "/rmhwdev";
$::RMLCSEXT              = $::CSMBIN    . "/rmlcsext";
$::RMNODE                = $::CSMBIN    . "/rmnode";
$::RPOWER                = $::CSMBIN    . "/rpower";
$::SMSUPDATENODE         = $::CSMBIN    . "/smsupdatenode";
$::STARTCONDRESP         = $::RSCTBIN   . "/startcondresp";
$::UPDATEDHCP            = $::CSMCSMBIN . "/updatedhcp";
$::UPDATENODE            = $::CSMBIN    . "/updatenode";

# Logfiles
$::LOGFILE_HANDLE        = undef;
$::CSMLOG                = "/var/log/csm";
$::CSMSETUPKS_LOG        = $::CSMLOG . "/csmsetupks.log";
$::CSMSETUPYAST_LOG        = $::CSMLOG . "/csmsetupyast.log";
$::INSTALLNODE_LOG       = $::CSMLOG . "/installnode.log";
$::MAKENODE_LOG          = $::CSMLOG . "/makenode.log";
$::UPDATENODE_LOG        = $::CSMLOG . "/updatenode.log";
$::CSMPREREBOOT_LOG      = $::CSMLOG . "/csmprereboot.log";
$::CSMFIRSTBOOT_LOG      = $::CSMLOG . "/csmfirstboot.log";
$::INSTALLMSLOG          = $::CSMLOG . "/installms.log";
$::CSMSETUPSIS_LOG       = $::CSMLOG . "/csmsetupsis.log";
$::COPYSISRPMS_LOG       = $::CSMLOG . "/copysisrpms.log";
$::MKSIIMAGE_LOG         = $::CSMLOG . "/mksiimage.log";
$::HAMS_LOG             = $::CSMLOG . "/hams/hams.log";
$::INSTALL_LOG           = "/var/log/csm/install.log";
$::GETADAPTERS_LOG       =  $::CSMLOG . "/getadapters/getadapters.log";

# locations of OS and package definition files
$::OSDEFS                = $::OPTCSMINSTALL . "/defs";
$::PKGDEFS               = $::OPTCSMINSTALL . "/pkgdefs";

# locations of user-provided customization scripts and data files
$::SCRIPTDIR           = "/csminstall/csm/scripts";
$::PREINSTALLDIR       = "$::SCRIPTDIR/installprereboot";
$::POSTINSTALLDIR      = "$::SCRIPTDIR/installpostreboot";
$::UPDATEDIR           = "$::SCRIPTDIR/update";
$::SCRIPTDATADIR       = "$::SCRIPTDIR/data";

#$::PLTFRM               = InstallUtils->get_OSName();
if(NodeUtils->isLinux()==1){
    $::PLTFRM            = "Linux";
}
elsif(NodeUtils->isAIX()==1){
    $::PLTFRM            = "AIX";
}

# These variables are required to determine which .pm files to load
# They are used by get_DistributionVersion, get_PkgArchitecture & get_CSMVersion
if ($::PLTFRM eq "AIX") {
    $::UNAME             = "/bin/uname";
    $::RPMCMD            = "/bin/rpm";
    $::LSLPP             = "/bin/lslpp";
}
elsif ($::PLTFRM eq "Linux") {
    $::UNAME             = "/bin/uname";
    $::RPMCMD            = "/bin/rpm";
}

$::DISTRIBUTION= NodeUtils->distribution();

# List of supported distributions
@::VALID_DISTROS  = (
                  'RedHat 7.2',
                  'RedHat 7.3',
                  'RedHatAS 2.1',
                  'RedHatEL-ES 2.1',
                  'RedHatEL-WS 2.1',
                  'RedHatEL-AS 3',
                  'RedHatEL-ES 3',
                  'RedHatEL-WS 3',
                  'RedHat 8.0',
                  'RedHat 9',
                  'SuSE 8.0',
                  'SuSE 8.1',
                  'SuSE 8.2',
                  'SLES 7.2',
                  'SLES 8.1',
                  );
@::VALID_AIX_DISTROS = (
                  'AIX5.1',
                  'AIX5.1.0',
                  'AIX5.2',
                  'AIX5.2.0',
                  );
@::VALID_CSM_DISTROS = (
                  '1.1.0',
                  '1.1.1',
                  '1.1.2',
                  '1.1.3',
                  '1.2.0',
                  '1.3.0',
                  '1.3.1',
                  '1.3.2',
                  '1.3.3',
                  );


$::DISTRO = "";
@::valid_powermethod=();
@::valid_console=();

1;
COk 0PB  7u     x  Aq@Aq@Aq@             x      ./opt/csm/pm/InstallDefs.pm  mts                             # IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2002,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
k9 0PB  7u     v  dq@dq@dq@             v      ./opt/csm/pm/InstallKRB5Utils.pm r.map p                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#"@(#)37   1.33   src/csm/krb5/cmds/InstallKRB5Utils.pm.perl, setup, csm_rveg, rveg0414a 3/9/04 09:25:25"

#------------------------------------------------------------------------------

=head1    InstallKRB5Utils

=head2    Package Description

This program module file supplies a set of utility programs for setting up and 
enabling Kerberos Remote Commands for CSM.

If adding to this file, please take a moment to ensure that:

	1.  Your contrib has a readable pod header describing the purpose and use
			 your contrib.

	2.  Your contrib is under the correct heading and is in alphabetical order under that heading. 

	3. You test your contribution by running from the command line:

		pod2html  --verbose --title=NodeUtils NodeUtils.pm.perl --outfile=NodeUls.html and examining the ./NodeUtils.html file in a browser.




=cut

#------------------------------------------------------------------------------

package InstallKRB5Utils;

use strict;
use File::Basename;
use File::Path;    # Provides mkpath()

#
# Subroutines
#

#$KRB5::MSGMAPPATH = '/opt/csm/msgmaps';
my $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';
if (defined $::MSGMAPPATH)
{
    $KRB5::MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
}
else
{
    $KRB5::MSGMAPPATH = "$csmroot/msgmaps";
}

#------------------------------------------------------------------------------

=head3   setupKRB5server   			    	 

  This routine will setup a KRB5 AIX server using the NAS
  function supplied by AIX.   This will only run on an
  AIX Management Server
  Input (None) 

=cut

#------------------------------------------------------------------------------
#  If /etc/krb5/krb5.conf exists then there is no need to setup the server
#     exit with message
#  else
#   if AIX
#      if NAS KRB5 installed  (config.krb5) exists
#         prompt user for admin id
#         if cannot figure out the domain name
#           prompt user for domain name
#           realm name is built from domain name (uppercase)
#         run config.krb5 -S -a admin id -d domain name -r realm name
#      else
#         Message need to install NAS KRB5
#    else
#       Message only runs on AIX
#    Copy the krb5.conf file in the /csminstall/csm/krb5 directory
###########################################################
sub setupKRB5server
{
    my $pname = "setupKRB5server";
    my $rc    = $::OK;
    my $rc2;
    my $NASCONFILE = "/etc/krb5/krb5.conf";
    my $KRB5CONF   = "/usr/krb5/sbin/config.krb5";
    my $time;
    my $mkservercmd;
    my $nodename;
    my $cmd;
    my ($ms_hostname, $ms_ipaddr);
    my $ms_realm   = "";
    my $ms_domain  = "";
    my $ms_adminid = "";
    $time = scalar localtime();
    chop($nodename = `/bin/hostname`);    # get the local hostname

    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH, 'csmKRB5p_msg',
                              'LI', 'IMsgStartup', $pname, $time)
      ;                                   # start message

    # check for AIX

    if (NodeUtils->isAIX())
    {

        # check to see if the KRB5 server is aleady installed, /etc/krb5/krb5.conf exists
        if (!-e $NASCONFILE)
        {    # if it does not exist then proceed to setup server

            if (-e $KRB5CONF)
            {    # check to see if NAS KRB5 is installed
                    #
                    # prompt the user for the admin id
                    #
                while ($ms_adminid eq "")
                {    # Prompt for admin id
                    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                 'csmKRB5p_msg', 'lI', 'IMsgKRB5EnterAdminName')
                      ;    #specify the principal name
                    chop($ms_adminid = <STDIN>);
                    if ($ms_adminid eq "")
                    {
                        NodeUtils->messageFromCat('csmKRB5p.cat',
                                        $KRB5::MSGMAPPATH, 'csmKRB5p_msg', 'lI',
                                        'IMsgKRB5NULLName');    # NULL invalid
                    }
                }

                # Form the realm and domain names
                while ($ms_domain eq "")
                {    # NULL realm and domain, must prompt
                    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                    'csmKRB5p_msg', 'lI', 'IMsgKRB5EnterDomain')
                      ;    # Enter Domain Name
                    chop($ms_domain = <STDIN>);
                    if ($ms_domain eq "")
                    {
                        NodeUtils->messageFromCat('csmKRB5p.cat',
                                        $KRB5::MSGMAPPATH, 'csmKRB5p_msg', 'lI',
                                        'IMsgKRB5NULLName');    #Null invalid
                    }
                }
                $ms_realm = uc($ms_domain); # realm name is upper case of domain
                $mkservercmd =
                  "$KRB5CONF -S -a $ms_adminid -d $ms_domain -r $ms_realm ";
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                               'csmKRB5p_msg', 'I', 'IMsgKRB5CMD', $mkservercmd)
                  ;                         #Record command run

                ####################################
                #  Now do the work, make the server
                ####################################

                system "$mkservercmd";      # run the setup server command
                if ($? > 0)
                {
                    $rc = $? / 256;
                    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                            'csmKRB5p_msg', 'E', 'EMsgNASError', $KRB5CONF, $rc)
                      ;                     # Record error return
                    $rc = $::NOK;
                }

            }
            else
            {                               #  NAS executable missing
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                               'csmKRB5p_msg', 'E', 'EMsgNASMissing', $KRB5CONF)
                  ;                         # Record error missing config.kr5
                $rc = $::NOK;

            }

        }
        else
        {

            InstallKRB5Utils->copyKRB5cfg; # go ahead and copy it in the install
                                           # directory
            NodeUtils->messageFromCat(
                                  'csmKRB5p.cat',             $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg',             'I',
                                  'IMsgKRB5ConfigFileExists', $pname,
                                  $NASCONFILE
                                  );       # /etc/krb5/krb5.conf exists
            $rc = $::OK;  # This just a warning, must have run the script twice.
        }

        #
        # and copy /etc/krb5.conf into it for the nodes.
        #
        InstallKRB5Utils->copyKRB5cfg;

    }
    else
    {                     # not AIX
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'E', 'EMsgNotAIXError',
                                  $pname);    #  Not AIX error
        $rc = $::NOK;
    }

    $time = scalar localtime();
    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH, 'csmKRB5p_msg',
                              'LI', 'IMsgEnd', $pname, $time, $rc); #end message
    return $rc;
}
##################  end of setupKRB5server#################

#------------------------------------------------------------------------------

=head3	 setupKRB5client


  This routine sets up a Kerberos V5 client  			    

  input \@attrvalues - reference to list of values of the SetupKRB5 attribute

=cut

#------------------------------------------------------------------------------
# If values indicate KRB5 client setup
#  If Linux
#    call processLinuxKRB5file
#  If AIX
#    call processAIXKRB5file
#    (csm principal generated)
#   Call popk5login to update the .k5login file with the
#      principal name
###########################################################
sub setupKRB5client
{
    my ($class, $attrvalue_list) = @_;
    my @attrvaluelist = @$attrvalue_list;
    my $pname         = "setupKRB5client";
    my $rc            = $::OK;
    my $time;
    my $n;
    my $cmd;
    my $setuprcmd         = 0;
    my $setupclient       = 0;
    my $CONFILE           = "/etc/krb5.conf";
    my $CONFILESAVE       = "/etc/krb5.conf.save";
    my $KRB5DIR           = "/etc/krb5";
    my $NASCONFILE        = "/etc/krb5/krb5.conf";
    my $NASCONFILESAVE    = "/etc/krb5/krb5.conf.save";
    my $CONFILEFROMSERVER = "$::CSMCLIENTMNTDIR/csm/krb5.conf";

    $time = scalar localtime();
    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH, 'csmKRB5p_msg',
                              'LI', 'IMsgStartup', $pname, $time)
      ;    # start message

    # determine setup remote command and setup client settings

    foreach my $n (@attrvaluelist)
    {
        if (   ($n == 4)
            || ($n == 5)
            || ($n == 6)
            || ($n == 7)
            || ($n == 12)
            || ($n == 13)
            || ($n == 14)
            || ($n == 15))
        {
            $setuprcmd = 1;
        }
        if (   ($n == 2)
            || ($n == 3)
            || ($n == 6)
            || ($n == 7)
            || ($n == 10)
            || ($n == 11)
            || ($n == 14)
            || ($n == 15))
        {
            $setupclient = 1;
        }
    }

    # check to see if any work to do
    #
    if (($setuprcmd == 0) && ($setupclient == 0))
    {
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'I', 'IMsgKRB5NoClientSetup',
                                  $pname);    # No client setup requested
    }

    #
    # Check Do we setup the clients?
    #
    if ($setupclient)
    {                                         # if setup KV5 client
            # copy the /etc/krb5.conf file from /mnt/csminstall/..
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'I', 'IMsgKRB5SetupClient',
                                  $pname);    # setup client message

        # if Linux and the /etc/krb5.conf does not exist then update it
        umask(0133);                          # ensure file perms are 644
        if (NodeUtils->isLinux())
        {
            InstallKRB5Utils->processLinuxKRB5file;

        }
        else
        {                                     # node is AIX
            InstallKRB5Utils->processAIXKRB5file;    # check and copy

        }
    }    # end setupclient
         #
         # Check Do we setup the remote commands
         #
    if ($setuprcmd)
    {    # if a CSM principal was generated
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                 'csmKRB5p_msg', 'I', 'IMsgKRB5SetupRemoteCmds',
                                 $pname);    # setup remote command message
        $rc = `$::CSMCSMBIN/popk5login`;     # populate the .k5login with it
        if ($? != 0)
        {                                    # error updating .k5login
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                    'csmKRB5p_msg', 'E', 'EMsgUpdtk5loginError',
                                    $rc);    # popk5login error
            $rc = $::NOK;
        }
        else
        {
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',       $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',       'I',
                                      'IMsgk5loginUpdated', $pname
                                      );     # k5login file updated
            $rc = $::OK;
        }

    }    # end setuprcmd

    $time = scalar localtime();
    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH, 'csmKRB5p_msg',
                              'LI', 'IMsgEnd', $pname, $time, $rc); #end message
    return $rc;
}
##################  end of setupKRB5client#################

#------------------------------------------------------------------------------

=head3	 setupKRB5rcmdprincs 


  Sets up a Kerberos V5 remote command principal

  input \@attrvalueslist - value of the SetupKRB5 attribute

  input \@node_list - reference to list of managed nodes, null indicates

=cut

#------------------------------------------------------------------------------

#                    all managed nodes
# Check attrvalues list to see if we are going to create CSM principal and/or
#   host principals, if not get out
# Determine Management Server name
# if add CSM principal requested or add Host principal requested
#    Build a list of principals to create in the addprincipals.tmp file
#    if Heimdal Kerberos not installed then
#      call add_KRB5principals
#    else tell then they must manually create the principals and keys
###########################################################
sub setupKRB5rcmdprincs
{
    my ($class, $attrvalue_list, $node_list) = @_;
    my @attrvaluelist = @$attrvalue_list;
    my @nodelist      = @$node_list;
    my $pname         = "setupKRB5rcmdprincs";
    my $rc            = $::OK;
    my $time;
    my $n;
    my $n1;
    my $cmd;
    my $createcsmprincipal;
    my $createhostprincipal;
    my $principalname     = "";
    my $CSMKEYTAB         = "/var/ct/IW/sec/krb5/csm/k5keytabs/ctsrcmdp";
    my $KRB5DIR           = "/var/ct/IW/sec/krb5";
    my $SECDIR            = "/var/ct/IW/sec";
    my $KRB5CSMDIR        = "/var/ct/IW/sec/krb5/csm";
    my $KEYTABDIR         = "/var/ct/IW/sec/krb5/csm/k5keytabs";
    my $PRINCIPALNAMEFILE =
      "/var/ct/IW/sec/krb5/csm/k5keytabs/CSMprincipalname";
    my $tmpfile    = "/var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp";
    my $nodekeytab = "";
    my $index      = 1;
    my $principalcreated = 1;
    my $csmkeytabfile    = "";
    my $csmkeytab        = "";
    my $keytab           = "keytab";
    my $LS_INFO          = "";
    my $msname           = "";
    my $msname1          = "";
    my $msip             = "";
    my $localhost;
    my $heimdal;
    my $DUMMYKEY;
    my $CSMPRINCIPALFILE;
    my $ADDPRINC = "add_KRB5principal";
    my (@DestNode, @lsnode_info, @empty_array);

    #
    # Start message
    #
    $time    = scalar localtime();
    $heimdal = 0;
    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH, 'csmKRB5p_msg',
                              'LI', 'IMsgStartup', $pname, $time)
      ;    # start message
           #
           # determine create csm principal and create host principal settings
    #
    # Determine the Management Server node id
    $msname1 = NodeUtils->getRSCThostname;
    $msname  = lc($msname1);                 # force to lower case
                                             #
                                             #

    foreach my $n (@attrvaluelist)
    {
        if (   ($n == 4)
            || ($n == 5)
            || ($n == 6)
            || ($n == 7)
            || ($n == 12)
            || ($n == 13)
            || ($n == 14)
            || ($n == 15))
        {
            $createcsmprincipal = 1;
        }
        if (   ($n == 8)
            || ($n == 9)
            || ($n == 10)
            || ($n == 11)
            || ($n == 12)
            || ($n == 13)
            || ($n == 14)
            || ($n == 15))
        {
            $createhostprincipal = 1;
        }
    }

         # if there is work to do
         #   Get the CSM principal name
         #   if createcsmprincipal
         #      Call add_KRB5principals and create the CSM principal
         #   if createhostprincipal
         #      for each node
         #        Call add_KRB5principals and create the host principal
         #

    if ($createcsmprincipal == 0 && $createhostprincipal == 0)
    {    # nothing to do
        $rc = $::OK;
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                'csmKRB5p_msg', 'I', 'IMsgKRB5NoPrincipalSetup',
                                $pname);    #No principals requested
        $time = scalar localtime();
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'LI', 'IMsgEnd', $pname,
                                  $time, $rc);    #end message
        return $rc;
    }

    #
    # setup the required directories to store keytabs
    #
    #
    if (!(-e $SECDIR))
    {    # if the sec directory  does not exist
        `$::MKDIR  -m 600 -p $SECDIR >/dev/null 2>&1`;
        if ($? != 0)
        {    # if error
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',   $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',   'E',
                                      'EMsgmkdirError', $SECDIR,
                                      $rc
                                      );    # Error from mkdir
            $time = scalar localtime();
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg', 'LI',
                                      'IMsgEnd',      $pname,
                                      $time,          $rc
                                      );    #end message
            return $rc;
        }
    }
    if (!(-e $KRB5DIR))
    {                                       # if the directory  does not exist
        `$::MKDIR  -m 600 -p $KRB5DIR >/dev/null 2>&1`;
        if ($? != 0)
        {                                   # if error
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',   $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',   'E',
                                      'EMsgmkdirError', $KRB5DIR,
                                      $rc
                                      );    # Error from mkdir
            $time = scalar localtime();
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg', 'LI',
                                      'IMsgEnd',      $pname,
                                      $time,          $rc
                                      );    #end message
            return $rc;
        }
    }
    if (!(-e $KRB5CSMDIR))
    {                                       # if the directory  does not exist
        `$::MKDIR  -m 600 -p $KRB5CSMDIR >/dev/null 2>&1`;
        if ($? != 0)
        {                                   # if error
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',   $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',   'E',
                                      'EMsgmkdirError', $KRB5CSMDIR,
                                      $rc
                                      );    # Error from mkdir
            $time = scalar localtime();
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg', 'LI',
                                      'IMsgEnd',      $pname,
                                      $time,          $rc
                                      );    #end message
            return $rc;
        }
    }
    if (!(-e $KEYTABDIR))
    {                                       # if the directory  does not exist
        `$::MKDIR -m 755 -p $KEYTABDIR >/dev/null 2>&1`;
        if ($? != 0)
        {                                   # if error
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',   $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',   'E',
                                      'EMsgmkdirError', $KEYTABDIR,
                                      $rc
                                      );    # Error from mkdir
            $time = scalar localtime();
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg', 'LI',
                                      'IMsgEnd',      $pname,
                                      $time,          $rc
                                      );    #end message
            return $rc;
        }
    }

    # open the temp file to build for add_principals routine
    # /var/ct/IW/sec/krb5/csm/k5keytabs/addprincipals.tmp
    #
    if (open(PRINCIPALLIST, ">$tmpfile") == 0)
    {                                       # open the file
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'E', 'EMsgKRB5OpenFailed',
                                  $tmpfile);
        $rc = $::NOK;
        return $rc;

    }
    $cmd = "$::CHMOD 600 $tmpfile";
    $rc  = system("$cmd");
    if ($rc >> 8)
    {
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'E', 'EMsgCHMOD', $rc)
          ;    # chmod error
        $rc = $::OK;
    }

    #
    # if CSM principal key already exist, then ignore request to generate a new
    # CSM principal
    # else
    #  create the CSM principal  and keytab
    #  Create the principal name  ctsrcmdp.<Management Server Hostname>
    #  Store it in the var/ct/IW/sec/krb5/csm/CSMprincipalname file.
    #  Also put the name in the addprincipals.tmp file for add_principal
    #
    if ($createcsmprincipal == 1)
    {    # if requested

        if ((-e "$CSMKEYTAB.$msname.keytab")
            && !(-z "$CSMKEYTAB.$msname.keytab"))
        {    # if exist and not empty don't create principal
            $createcsmprincipal = 0;    # don't need to
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',        $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',        'I',
                                      'IMsgPrincipalExists', $pname,
                                      "ctsrcmdp.$msname"
                                      );    # principal already exists
        }
    }

    if ($createcsmprincipal == 1)
    {    # create a CSM remote command principal requested
        $principalname = "ctsrcmdp.$msname";
        if (open(CSMPRINCIPALFILE, ">$PRINCIPALNAMEFILE") != 0)
        {    # open the file
            print CSMPRINCIPALFILE $principalname;
            print CSMPRINCIPALFILE "\n";
            close(CSMPRINCIPALFILE);
            $cmd = "$::CHMOD 600 $PRINCIPALNAMEFILE";
            $rc  = system("$cmd");
            if ($rc >> 8)
            {
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                           'csmKRB5p_msg', 'E', 'EMsgCHMOD', $rc); # chmod error
                $rc = $::OK;
            }

            # add the CSM principal and keytab name to file for add_KRB5principals
            $csmkeytab =
              "$KEYTABDIR/$principalname.keytab";    # csm keytab file name
            print PRINCIPALLIST $principalname;
            print PRINCIPALLIST "\n";
            print PRINCIPALLIST $csmkeytab;
            print PRINCIPALLIST "\n";
        }
        else
        {
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',
                                      $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',
                                      'E',
                                      'EMsgKRB5OpenFailed',
                                      $PRINCIPALNAMEFILE
                                      );
            $rc = $::NOK;
            return $rc;

        }

    }    # end createcsmprincipal

    #
    # Now build list of all the principals for the managed nodes
    #

    if ($createhostprincipal == 1)
    {    # create the host remote command principal
        if (!@nodelist)
        {    # NULL indicates do all managed nodes
                # get list of all  nodes
            my $ref_lsnode_info = NodeUtils->listNodeAttrs([], "Hostname");
            my @lsnode_info = @$ref_lsnode_info;
            foreach my $hostname (@lsnode_info)
            {
                chomp $hostname;
                push @nodelist, $hostname;
            }
        }    # end null node list
             #
             #  if it does not already exist
             #    add the principal to the file for add_KRB5principals
             #
             #  Determine managment server name
        my $msnode = InstallUtils->determineMS(\@nodelist);
        foreach my $n1 (@nodelist)
        {    # for each node create a principal
            $n = lc($n1);

            $principalname = "host/$n";    # construct the host principal name
            $nodekeytab = "$KEYTABDIR/$n.keytab";  # Create the keytab file name

            if (!(-e $nodekeytab) || (-z $nodekeytab))
            {                                      # if the key does not exist
                                                   # or zero length
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                         'csmKRB5p_msg', 'I', 'IMsgKRB5CreateNodePrinc', $pname,
                         $n1);                     # add Node principal(s)
                print PRINCIPALLIST $principalname;
                print PRINCIPALLIST "\n";

                #
                # if the node is the Management Server then
                # add the key to the default krb5.keytab file
                #
                my $msnodelower = lc($msnode);
                if ($n eq $msnodelower)
                {                                  # put key in default keytable
                    print PRINCIPALLIST "defaultkeytable";
                    print PRINCIPALLIST "\n";
                }
                else
                {    # put keytab in host keytab file
                    print PRINCIPALLIST $nodekeytab;
                    print PRINCIPALLIST "\n";
                }

                # If create CSM principal was requested
                #  If MS then update
                #    call popk5login to update the .k5login file
                if ($createcsmprincipal == 1)
                {
                    if ($n eq $msname)
                    {    # if Management server is a managed node
                        $rc =
                          `/opt/csm/csmbin/popk5login`
                          ;    #populate the .k5login with it
                        if ($? != 0)
                        {      # error updating .k5login
                            $rc = ($? < 256 ? $? : ($? / 256));
                            NodeUtils->messageFromCat('csmKRB5p.cat',
                                $KRB5::MSGMAPPATH, 'csmKRB5p_msg', 'E',
                                'EMsgUpdtk5loginError', $rc); # popk5login error
                            $rc = $::NOK;
                        }
                        else
                        {
                            NodeUtils->messageFromCat('csmKRB5p.cat',
                                         $KRB5::MSGMAPPATH, 'csmKRB5p_msg', 'I',
                                         'IMsgk5loginUpdated', $pname)
                              ;    # k5login file updated
                            $rc = $::OK;
                        }
                    }    # end if CSM principal create request
                }    # end if MS
            }    # end check exists
        }    # end foreach node
    }    # end create host principal

    if (fileno(PRINCIPALLIST))
    {
        close(PRINCIPALLIST);
    }

    # If not Linux with Heimdal installed
    #   call add_KRB5principals to do all the work
    #   create the principal and keys
    # Else
    #   Tell them must create principals and keys manually.
    if (!(-z $tmpfile))
    {    # if there are some principals to add
        if (NodeUtils->isLinux())
        {
            $cmd = "$::RPMCMD -qa | $::GREP  heimdal";
            $rc  = system("$cmd");
            if ($rc == 0)
            {
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                     'csmKRB5p_msg', 'I', 'IMsgNonSupportedKRB5', $pname, $time)
                  ;    # non supported Heimdal
                $heimdal = 1;
            }
            $rc = $::OK;

        }
        if ($heimdal == 0)
        {
            `/opt/csm/csmbin/add_KRB5principals `
              ;        #create the principals and keys
            if ($? != 0)
            {          # error creating principals
                $rc = ($? < 256 ? $? : ($? / 256));
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                            'csmKRB5p_msg', 'E', 'EMsgUnableToCreatePrincipal');
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                     'csmKRB5p_msg', 'E', 'EMsgKRB5ChkaddKRB5');
                $rc = $::NOK;
            }
        }
    }
    else
    {
        NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg', 'I', 'IMsgNoPrincipals',
                                  $pname);    # no principals to create
    }

    # End message
    #
    $time = scalar localtime();
    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH, 'csmKRB5p_msg',
                              'LI', 'IMsgEnd', $pname, $time, $rc); #end message
    return $rc;
}

#
##################  end of setupKRB5rcmdprincs#################

#------------------------------------------------------------------------------

=head3   getKRB5tgt 

Checks for KRB5 enabled and gets KRB5 ticket-granting-ticket        

=cut

#------------------------------------------------------------------------------
#         Message need to install NAS KRB5
#    else
#       Message only runs on AIX
###########################################################
sub getKRB5tgt
{
    my $KRB5CCNAME;
    $KRB5CCNAME = "";
    if (($ENV{'KRB5CCNAME'}) eq "")
    {
        if ($< == 0)
        {    # I am root
            chop($KRB5CCNAME = `$::CSMCSMBIN/k5rcmdtgt`);
        }
    }

    return ($KRB5CCNAME);
}

#------------------------------------------------------------------------------

=head3   xferKRB5Keys        

  Initiates the KRB5 key transfer 

=cut

#------------------------------------------------------------------------------

###########################################################
sub xferKRB5keys
{
    my ($class, $node_list) = @_;
    my @nodes      = @$node_list;
    my $SENDKEYTAB = $::CSMCSMBIN . "/sendkeytab";
    my $rc         = 0;

    if (@nodes)
    {
        foreach my $node (@nodes)
        {
            my $cmd = "$SENDKEYTAB -n $node";
            $rc = `$cmd`;
            if ($? != 0)
            {    # error
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                           'csmKRB5p_msg', 'E ', 'EMsgKRB5XFERKEYError', $node);
            }
        }
    }

    return ($rc);
}

#------------------------------------------------------------------------------

=head3   copyKRB5cfg  

  Copies the KRB5 config file to the install directory 

=cut

#------------------------------------------------------------------------------

###########################################################
sub copyKRB5cfg
{
    my $NASCONFILE  = "/etc/krb5/krb5.conf";
    my $KRB5CONFILE = "/etc/krb5.conf";
    my $CONFILE;
    my $rc  = 0;
    my $rc2 = 0;

    #
    # Create the /csminstall/csm directory if it doesn't exist
    # and copy /etc/krb5.conf into it for the nodes.
    #
    my $INSTALLDIR_CSM = "/csminstall/csm";
    if (!-d "$INSTALLDIR_CSM")
    {
        mkpath($INSTALLDIR_CSM, $::VERBOSE, 0755);
    }
    if (-e "$NASCONFILE")
    {
        $CONFILE = $NASCONFILE;
    }
    else
    {
        if (-e "$KRB5CONFILE")
        {
            $CONFILE = $KRB5CONFILE;
        }
    }
    if ($CONFILE)
    {    # found one
        my $NEWCONFILE = "$INSTALLDIR_CSM/krb5.conf";
        $rc2 = `/bin/cp  $CONFILE $NEWCONFILE >/dev/null`;
        if ($? != 0)
        {    # error updating /etc/krb5.conf
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                   'csmKRB5p.cat',            $KRB5::MSGMAPPATH,
                                   'csmKRB5p_msg',            'E',
                                   'EMsgKRB5CopyConfigError', $NEWCONFILE
                                   );    #  error on copy
            $rc = $::NOK;
        }
    }
    return ($rc);
}
##################  end of copyKRB5cfg#################

#------------------------------------------------------------------------------

=head3	processLinuxKRB5file 


  This routine  copies the krb5.conf file on Linux  			    

  input none 

=cut

#------------------------------------------------------------------------------
#    If the /etc/krb5.conf file does not exist then
#      copy /mnt/csminstall/csm/krb5/krb5.conf file to /etc  (0644)
#  else
#     diff the two files and if they are different then
#      copy the one on the node to krb5.conf.save
#      copy /mnt/csminstall/csm/krb5/krb5.conf file to /etc  (0644)
#      put out a warning that made backup of krb5.conf
#------------------------------------------------------------------------------
sub processLinuxKRB5file
{
    my $pname = "setupKRB5client";
    my $rc    = $::OK;
    my $time;
    my $n;
    my $cmd;
    my $setuprcmd         = 0;
    my $setupclient       = 0;
    my $CONFILE           = "/etc/krb5.conf";
    my $CONFILESAVE       = "/etc/krb5.conf.save";
    my $KRB5DIR           = "/etc/krb5";
    my $NASCONFILE        = "/etc/krb5/krb5.conf";
    my $NASCONFILESAVE    = "/etc/krb5/krb5.conf.save";
    my $CONFILEFROMSERVER = "$::CSMCLIENTMNTDIR/csm/krb5.conf";

    # make the /etc/krb5 directory if it does not exist
    if (!(-e $KRB5DIR))
    {    # if the sec directory  does not exist
        `$::MKDIR  -m 755 -p $KRB5DIR >/dev/null 2>&1`;
        if ($? != 0)
        {    # if error
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',   $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',   'E',
                                      'EMsgmkdirError', $KRB5DIR,
                                      $rc
                                      );    # Error from mkdir
            $time = scalar localtime();
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg', 'LI',
                                      'IMsgEnd',      $pname,
                                      $time,          $rc
                                      );    #end message
            return $rc;
        }
    }

    if (!-e $CONFILE)
    {    # if /etc/krb5.conf it does not exist then proceed
        $rc = `/bin/cp $CONFILEFROMSERVER $CONFILE >/dev/null`;
        if ($? != 0)
        {    # error updating /etc/krb5.conf
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',
                                      $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',
                                      'E',
                                      'EMsgCopyKRB5ConfigError',
                                      $CONFILEFROMSERVER,
                                      $CONFILE,
                                      $rc
                                      );    # copy fail
            $rc = $::NOK;

        }
        else
        {                                   # copy successful
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',       $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',       'I',
                                      'IMsgKRB5CfgCreated', $pname,
                                      $CONFILE
                                      );    # /etc/krb5.conf created
            $rc = $::OK;
        }

    }
    else
    {                                       #  it exists  on Linux
            #  check to see if different than the one from the MS
            #  if different copy node krb5.conf file to backup
            #  copy MS krb5.conf file to node
            #  warn the admin
        `/usr/bin/diff $CONFILEFROMSERVER $CONFILE `;
        if ($? != 0)
        {    # differences found
                # make backup
            $rc = `/bin/cp $CONFILE $CONFILESAVE >/dev/null`;
            if ($? != 0)
            {    # error saving
                $rc = ($? < 256 ? $? : ($? / 256));
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                       'csmKRB5p_msg', 'E', 'EMsgCopyKRB5ConfigError', $CONFILE,
                       $CONFILESAVE, $rc);
                $rc = $::NOK;
                return $rc;

            }
            else
            {    # tell the admin saving
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                      'csmKRB5p_msg', 'I', 'IMsgMadeKRB5Save', $pname, $CONFILE,
                      $CONFILESAVE);    # copy fail

            }

            # copy MS to node
            $rc = `/bin/cp $CONFILEFROMSERVER $CONFILE >/dev/null`;
            if ($? != 0)
            {                           # error updating /etc/krb5.conf
                $rc = ($? < 256 ? $? : ($? / 256));
                NodeUtils->messageFromCat(
                                  'csmKRB5p.cat',            $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg',            'E',
                                  'EMsgCopyKRB5ConfigError', $CONFILEFROMSERVER,
                                  $CONFILE,                  $rc
                                  );    # copy fail
                $rc = $::NOK;
                return $rc;

            }
            else
            {    # tell copying the krb5.conf file to the node
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                              'csmKRB5p_msg', 'I', 'IMsgKRB5CfgCreated', $pname,
                              $CONFILE);    # /etc/krb5.conf created
                $rc = $::OK;
            }
        }

    }    # end diff found

    return ($rc);
}
##################  end of processLinuxKRB5file#################

#------------------------------------------------------------------------------

=head3	processAIXKRB5file 


  This routine  copies the krb5.conf file on AIX  			    

  input none 

=cut

#------------------------------------------------------------------------------
#    If the /etc/krb5.conf and /etc/krb5/krb5.conf file does not exist then
#      copy /mnt/csminstall/csm/krb5/krb5.conf file to
#        /etc/krb5/krb5.conf (644) and link it to /etc/krb5.conf
#    If the /etc/krb5.conf and /etc/krb5/krb5.conf file both exist then
#     diff the two files and if they are different then
#      copy the one on the node to krb5.conf.save
#      copy /mnt/csminstall/csm/krb5/krb5.conf file to /etc/krb5/krb5.conf(0644)
#      put out a warning that made backup of krb5.conf
#    If the /etc/krb5.conf exists and /etc/krb5/krb5.conf file does not exist
#      copy /mnt/csminstall/csm/krb5/krb5.conf file to  /etc/krb5/krb5.conf
#      record existence of /etc/krb5
#    If the /etc/krb5.conf does not exist and /etc/krb5/krb5.conf file
#         does exist, record a warning message but do nothing.
# If values indicate KRB5 remote command setup
#------------------------------------------------------------------------------
sub processAIXKRB5file
{
    my $pname = "setupKRB5client";
    my $rc    = $::OK;
    my $time;
    my $n;
    my $cmd;
    my $setuprcmd         = 0;
    my $setupclient       = 0;
    my $CONFILE           = "/etc/krb5.conf";
    my $CONFILESAVE       = "/etc/krb5.conf.save";
    my $KRB5DIR           = "/etc/krb5";
    my $NASCONFILE        = "/etc/krb5/krb5.conf";
    my $NASCONFILESAVE    = "/etc/krb5/krb5.conf.save";
    my $CONFILEFROMSERVER = "$::CSMCLIENTMNTDIR/csm/krb5.conf";

    # make the /etc/krb5 directory if it does not exist
    if (!(-e $KRB5DIR))
    {    # if the sec directory  does not exist
        `$::MKDIR  -m 755 -p $KRB5DIR >/dev/null 2>&1`;
        if ($? != 0)
        {    # if error
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',   $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',   'E',
                                      'EMsgmkdirError', $KRB5DIR,
                                      $rc
                                      );    # Error from mkdir
            $time = scalar localtime();
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat', $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg', 'LI',
                                      'IMsgEnd',      $pname,
                                      $time,          $rc
                                      );    #end message
            return $rc;
        }
    }

    # if /etc/krb5.conf and /etc/krb5/krb5.conf do not exist then
    # update /etc/krb5/krb5.conf and link to /etc/krb5.conf

    if ((!-e $CONFILE) && (!-e $NASCONFILE))
    {
        $rc = `/bin/cp $CONFILEFROMSERVER $NASCONFILE >/dev/null`;
        if ($? != 0)
        {    # error updating /etc/krb/krb5.conf
            $rc = ($? < 256 ? $? : ($? / 256));
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',
                                      $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',
                                      'E',
                                      'EMsgCopyKRB5ConfigError',
                                      $CONFILEFROMSERVER,
                                      $NASCONFILE,
                                      $rc
                                      );    # copy fail
            $rc = $::NOK;
            return $rc;

        }
        else
        {                                   # copy successful
            NodeUtils->messageFromCat(
                                      'csmKRB5p.cat',       $KRB5::MSGMAPPATH,
                                      'csmKRB5p_msg',       'I',
                                      'IMsgKRB5CfgCreated', $pname,
                                      $NASCONFILE
                                      );    # /etc/krb5/krb5.conf created
            $rc = $::OK;
        }
        if ($rc == $::OK)
        {    # if copy good, then link it to /etc/krb5.conf
            $rc = `/bin/ln -s $NASCONFILE $CONFILE > /dev/null`;
            if ($? != 0)
            {    # error linking
                $rc = ($? < 256 ? $? : ($? / 256));
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                    'csmKRB5p_msg', 'E', 'EMsgLinkKRB5ConfigError', $NASCONFILE,
                    $CONFILE, $rc);
                $rc = $::NOK;
                return $rc;

            }
            else
            {    # link successful
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                              'csmKRB5p_msg', 'I', 'IMsgKRB5CfgCreated', $pname,
                              $CONFILE);    # /etc/krb5.conf created
                $rc = $::OK;
            }
        }

    }
    else
    {    #  /etc/krb5.conf and  /etc/krb5/krb5.conf  exist
            #  diff to see if different from MS krb5.conf
            #  if different
            #  copy the node krb5.conf to krb5.conf.save
            #  copy the MS krb5.conf to krb5.conf
            #  warn the admin
        if ((-e $CONFILE) && (-e $NASCONFILE))
        {    # if both exist check to see if different from MS
            `/usr/bin/diff $CONFILEFROMSERVER $NASCONFILE `;
            if ($? != 0)
            {    # differences found
                $rc = `/bin/cp $NASCONFILE $NASCONFILESAVE>/dev/null`;
                if ($? != 0)
                {    # error saving
                    $rc = ($? < 256 ? $? : ($? / 256));
                    NodeUtils->messageFromCat(
                                   'csmKRB5p.cat',            $KRB5::MSGMAPPATH,
                                   'csmKRB5p_msg',            'E',
                                   'EMsgCopyKRB5ConfigError', $NASCONFILE,
                                   $NASCONFILESAVE,           $rc
                                   );    # copy fail
                    $rc = $::NOK;
                    return $rc;

                }
                else
                {                        # tell the admin saving
                    NodeUtils->messageFromCat(
                                          'csmKRB5p.cat',     $KRB5::MSGMAPPATH,
                                          'csmKRB5p_msg',     'I',
                                          'IMsgMadeKRB5Save', $pname,
                                          $NASCONFILE,        $NASCONFILESAVE
                                          );    # copy fail

                }

                #  copy the MS krb5.conf file on the node
                $rc = `/bin/cp $CONFILEFROMSERVER $NASCONFILE >/dev/null`;
                if ($? != 0)
                {                               # error updating /etc/krb5.conf
                    $rc = ($? < 256 ? $? : ($? / 256));
                    NodeUtils->messageFromCat(
                                  'csmKRB5p.cat',            $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg',            'E',
                                  'EMsgCopyKRB5ConfigError', $CONFILEFROMSERVER,
                                  $NASCONFILE,               $rc
                                  );            # copy fail
                    $rc = $::NOK;
                    return $rc;

                }
                else
                {    # tell copying the krb5.conf file to the node
                    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                              'csmKRB5p_msg', 'I', 'IMsgKRB5CfgCreated', $pname,
                              $NASCONFILE);    # /etc/krb5.conf created
                    $rc = $::OK;
                }
            }    # end if difference found

        }
        else
        {

            #if /etc/krb5.conf exists and /etc/krb5/krb5.conf does not
            # update only /etc/krb5/krb5.conf

            if ((-e $CONFILE) && (!-e $NASCONFILE))
            {

                # log that /etc/krb5.conf exist
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                         'csmKRB5p_msg', 'I', 'IMsgKRB5ClientCfgExists', $pname,
                         $CONFILE, $CONFILE);

                # copy to /etc/krb5/krb5.conf
                $rc = `/bin/cp $CONFILEFROMSERVER $NASCONFILE >/dev/null`;
                if ($? != 0)
                {    # error updating /etc/krb/krb5.conf
                    $rc = ($? < 256 ? $? : ($? / 256));
                    NodeUtils->messageFromCat(
                                  'csmKRB5p.cat',            $KRB5::MSGMAPPATH,
                                  'csmKRB5p_msg',            'E',
                                  'EMsgCopyKRB5ConfigError', $CONFILEFROMSERVER,
                                  $NASCONFILE,               $rc
                                  );    # copy fail
                    $rc = $::NOK;
                    return $rc;

                }
                else
                {                       # copy successful
                    NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                              'csmKRB5p_msg', 'I', 'IMsgKRB5CfgCreated', $pname,
                              $NASCONFILE);    # /etc/krb5/krb5.conf created
                    $rc = $::OK;
                }

            }
            else
            {

                # /etc/krb5 does not exist and /etc/krb5/krb5.conf does put out a
                # warning in the log
                NodeUtils->messageFromCat('csmKRB5p.cat', $KRB5::MSGMAPPATH,
                        'csmKRB5p_msg', 'E', 'EMsgKRB5ConfigError', $NASCONFILE,
                        $CONFILE);             # missing /etc/krb5.conf
                $rc = $::OK;
            }
        }
        return ($rc);
    }
}
##################  end of processAIXKRB5file#################
1;
  k" 0PB  7u     $n  "q@"q@"q@             $n      ./opt/csm/pm/InstallUtils.pm .pm                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2001,2003 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)91   1.358   src/csm/core/pm/InstallUtils.pm.perl, setup, csm_rveg, rveg0414a 12/18/03 13:01:52
#
#--------------------------------------------------------------------------------

package InstallUtils;

#  please refer the to the package descriptions at the link below:
#  http://www.pok.ibm.com/afs/aix.kingston.ibm.com/project/csm/www/home.html#Development
#  this will get you started with the idea and intention of these changed packages.

use strict;

use Fcntl qw(:flock);
use File::Basename;
use File::Find;
use File::Path;    # Provides mkpath()

use ArchiveUtils;
use MessageUtils;
use NodeUtils;
use NetworkUtils;
use ServerUtils;

#--------------------------------------------------------------------------------

=head1    InstallUtils.pm.perl

=head2    Package Description

    This is a deprecated program module, please do not add to this file.

    Every entry in this file is a wrapper to a routine in another package.
    All are a part of the CSM/install product. This work was done to give
    order to the contents of the InstallUils.pm.perl package,  which had
    grown beyond a managable size.

    This file is useful for finding the new location of InstallUtils.pm.perl
    subroutines. Note that in some instances, the package name and the 
    subroutine name have both been changed, but this is not the norm; typically
    just the package name has been changed.

    Please don't use these wrappers in your code -  instead use the new names,
    so that we can eventually retire this file.  It would also be useful if,
    as you encounter old "InstallUtils->" subroutines in existing code, you
    replaced the calls with the new names -  assuming you have time to do so. 


=cut

#--------------------------------------------------------------------------------

=head2    Packages

    use strict;

=cut

#--------------------------------------------------------------------------------

=head1    Redirected Subroutines


=head2    Alphabetical list


=head3  CreateRandomName
    

    ServerUtils->CreateRandomName

=cut

sub CreateRandomName { shift; return ServerUtils->CreateRandomName(@_); }

#--------------------------------------------------------------------------------

=head3  MountAixCdrom
    

    ArchiveUtils->MountAixCdrom

=cut

sub MountAixCdrom { shift; return ArchiveUtils->MountAixCdrom(@_); }

#--------------------------------------------------------------------------------

=head3  SetAllowRequest
    

    NodeUtils->SetAllowRequest

=cut

sub SetAllowRequest { shift; return NodeUtils->SetAllowRequest(@_); }

#--------------------------------------------------------------------------------

=head3  SetControlFlag
    

    NodeUtils->SetControlFlag

=cut

sub SetControlFlag { shift; return NodeUtils->SetControlFlag(@_); }

#--------------------------------------------------------------------------------

=head3  SetMode
    

    NodeUtils->SetMode

=cut

sub SetMode { shift; return NodeUtils->SetMode(@_); }

#--------------------------------------------------------------------------------

=head3  append_logging
    

    MessageUtils->append_logging

=cut

sub append_logging { shift; return MessageUtils->append_logging(@_); }

#--------------------------------------------------------------------------------

=head3  backup_logfile
    

    MessageUtils->backup_logfile

=cut

sub backup_logfile { shift; return MessageUtils->backup_logfile(@_); }

#--------------------------------------------------------------------------------

=head3  chPerm
    

    NetworkUtils->chPerm

=cut

sub chPerm { shift; return NetworkUtils->chPerm(@_); }

#--------------------------------------------------------------------------------

=head3  checkDistroCopied
    

    ArchiveUtils->checkDistroCopied

=cut

sub checkDistroCopied { shift; return ArchiveUtils->checkDistroCopied(@_); }

#--------------------------------------------------------------------------------

=head3  checkForNotFound
    

    NodeUtils->checkForNotFound

=cut

sub checkForNotFound { shift; return NodeUtils->checkForNotFound(@_); }

#--------------------------------------------------------------------------------

=head3  checkHOMEforSSHperm
    

    NetworkUtils->checkHOMEforSSHperm

=cut

sub checkHOMEforSSHperm { shift; return NetworkUtils->checkHOMEforSSHperm(@_); }

#--------------------------------------------------------------------------------

=head3  checkRPMInstall
    

    ArchiveUtils->checkRPMInstall

=cut

sub checkRPMInstall { shift; return ArchiveUtils->checkRPMInstall(@_); }

#--------------------------------------------------------------------------------

=head3  checkRSReachability
    

    NetworkUtils->checkRSReachability

=cut

sub checkRSReachability { shift; return NetworkUtils->checkRSReachability(@_); }

#--------------------------------------------------------------------------------

=head3  check_valid_install_distros
    

    ArchiveUtils->check_valid_install_distros

=cut

sub check_valid_install_distros
{
    shift;
    ArchiveUtils->check_valid_install_distros(@_);
}

#--------------------------------------------------------------------------------

=head3  chkethup
    

    NetworkUtils->chkethup

=cut

sub chkethup { shift; return NetworkUtils->chkethup(@_); }

#--------------------------------------------------------------------------------

=head3  close_delete_file
    

    ServerUtils->close_delete_file

=cut

sub close_delete_file { shift; return ServerUtils->close_delete_file(@_); }

#--------------------------------------------------------------------------------

=head3  configureTftp
    

    NetworkUtils->configureTftp

=cut

sub configureTftp { shift; return NetworkUtils->configureTftp(@_); }

#--------------------------------------------------------------------------------

=head3  configureTftp_inetd
    

    NetworkUtils->configureTftp_inetd

=cut

sub configureTftp_inetd { shift; return NetworkUtils->configureTftp_inetd(@_); }

#--------------------------------------------------------------------------------

=head3  copyBinaries
    

    ServerUtils->copyBinaries

=cut

sub copyBinaries { shift; return ServerUtils->copyBinaries(@_); }

#--------------------------------------------------------------------------------

=head3  copyDistroCD
    

    ArchiveUtils->copyDistroCD

=cut

sub copyDistroCD { shift; return ArchiveUtils->copyDistroCD(@_); }

#--------------------------------------------------------------------------------

=head3  copyDistroPKGPATH
    

    ArchiveUtils->copyDistroPKGPATH

=cut

sub copyDistroPKGPATH { shift; return ArchiveUtils->copyDistroPKGPATH(@_); }

#--------------------------------------------------------------------------------

=head3  copy_csm_scripts
    

    ServerUtils->copy_csm_scripts

=cut

sub copy_csm_scripts { shift; return ServerUtils->copy_csm_scripts(@_); }

#--------------------------------------------------------------------------------

=head3  copy_rpm
    

    ArchiveUtils->copy_rpm

=cut

sub copy_rpm { shift; return ArchiveUtils->copy_rpm(@_); }

#--------------------------------------------------------------------------------

=head3  cpSSHFiles
    

    NetworkUtils->cpSSHFiles

=cut

sub cpSSHFiles { shift; return NetworkUtils->cpSSHFiles(@_); }

#--------------------------------------------------------------------------------

=head3  createRPMList
    

    ArchiveUtils->createRPMList

=cut

sub createRPMList { shift; return ArchiveUtils->createRPMList(@_); }

#--------------------------------------------------------------------------------

=head3  createRPMSdir
    

    ArchiveUtils->createRPMSdir

=cut

sub createRPMSdir { shift; return ArchiveUtils->createRPMSdir(@_); }

#--------------------------------------------------------------------------------

=head3  createRPMVersionListAlreadyInstalled
    

    ArchiveUtils->createRPMVersionListAlreadyInstalled

=cut

sub createRPMVersionListAlreadyInstalled
{
    shift;
    ArchiveUtils->createRPMVersionListAlreadyInstalled(@_);
}

#--------------------------------------------------------------------------------

=head3  createSMSConfig
    

    ServerUtils->createSMSConfig

=cut

sub createSMSConfig { shift; return ServerUtils->createSMSConfig(@_); }

#--------------------------------------------------------------------------------

=head3  createTftpUser
    

    NetworkUtils->createTftpUser

=cut

sub createTftpUser { shift; return NetworkUtils->createTftpUser(@_); }

#--------------------------------------------------------------------------------

=head3  create_nodemap_file
    

    ServerUtils->create_nodemap_file

=cut

sub create_nodemap_file { shift; return ServerUtils->create_nodemap_file(@_); }

#--------------------------------------------------------------------------------

=head3  create_rpm_list_to_copy
    

    ArchiveUtils->create_rpm_list_to_copy

=cut

sub create_rpm_list_to_copy
{
    shift;
    ArchiveUtils->create_rpm_list_to_copy(@_);
}

#--------------------------------------------------------------------------------

=head3  create_rpm_list_to_install
    

    ArchiveUtils->create_rpm_list_to_install

=cut

sub create_rpm_list_to_install
{
    shift;
    ArchiveUtils->create_rpm_list_to_install(@_);
}

#--------------------------------------------------------------------------------

=head3  determineMS
    

    NetworkUtils->determineMS

=cut

sub determineMS { shift; return NetworkUtils->determineMS(@_); }

#--------------------------------------------------------------------------------

=head3  display_opensrcLicence
    

    ArchiveUtils->display_opensrcLicence

=cut

sub display_opensrcLicence
{
    shift;
    return ArchiveUtils->display_opensrcLicence(@_);
}

#--------------------------------------------------------------------------------

=head3  export_csminstall
    

    NetworkUtils->export_csminstall

=cut

sub export_csminstall { shift; return NetworkUtils->export_csminstall(@_); }

#--------------------------------------------------------------------------------

=head3  findImagesInPath
    

    ArchiveUtils->findImagesInPath

=cut

sub findImagesInPath { shift; return ArchiveUtils->findImagesInPath(@_); }

#--------------------------------------------------------------------------------

=head3  findRpm
    

    ArchiveUtils->findRpm

=cut

sub findRpm { shift; return ArchiveUtils->findRpm(@_); }

#--------------------------------------------------------------------------------

=head3  findRpmInPath
    

    ArchiveUtils->findRpmInPath

=cut

sub findRpmInPath { shift; return ArchiveUtils->findRpmInPath(@_); }

#--------------------------------------------------------------------------------

=head3  findRpmInPath_java
    

    ArchiveUtils->findRpmInPath_java

=cut

sub findRpmInPath_java { shift; return ArchiveUtils->findRpmInPath_java(@_); }

#--------------------------------------------------------------------------------

=head3  genHex
    

    NetworkUtils->genHex

=cut

sub genHex { shift; return NetworkUtils->genHex(@_); }

#--------------------------------------------------------------------------------

=head3  getBaseDir
    

    ServerUtils->getBaseDir

=cut

sub getBaseDir { shift; return ServerUtils->getBaseDir(@_); }

#--------------------------------------------------------------------------------

=head3  getBladeStatus
    

    NodeUtils->getBladeStatus

=cut

sub getBladeStatus { shift; return NodeUtils->getBladeStatus(@_); }

#--------------------------------------------------------------------------------

=head3  get_CSMVersion
    

    NodeUtils->get_CSMVersion

=cut

sub get_CSMVersion { shift; return NodeUtils->get_CSMVersion(@_); }

#--------------------------------------------------------------------------------

=head3  get_DistributionName
    

    NodeUtils->get_DistributionName

=cut

sub get_DistributionName { shift; return NodeUtils->get_DistributionName(@_); }

#--------------------------------------------------------------------------------

=head3  get_DistributionVersion
    

    NodeUtils->get_DistributionVersion

=cut

sub get_DistributionVersion
{
    shift;
    return NodeUtils->get_DistributionVersion(@_);
}

#--------------------------------------------------------------------------------

=head3  getInstallDir
    

    ServerUtils->getInstallDir

=cut

sub getInstallDir { shift; return ServerUtils->getInstallDir(@_); }

#--------------------------------------------------------------------------------

=head3  get_OSDefs
    

    ServerUtils->get_OSDefs

=cut

sub get_OSDefs { shift; return ServerUtils->get_OSDefs(@_); }

#--------------------------------------------------------------------------------

=head3  get_OSName
    

    NodeUtils->get_OSName

=cut

sub get_OSName { shift; return NodeUtils->get_OSName(@_); }

#--------------------------------------------------------------------------------

=head3  get_PkgArchitecture
    

    ArchiveUtils->get_PkgArchitecture

=cut

sub get_PkgArchitecture { shift; return ArchiveUtils->get_PkgArchitecture(@_); }

#--------------------------------------------------------------------------------

=head3  getRPMSDir
    

    ArchiveUtils->getRPMSDir

=cut

sub getRPMSDir { shift; return ArchiveUtils->getRPMSDir(@_); }

#--------------------------------------------------------------------------------

=head3  getRPMVersionRelease
    

    ArchiveUtils->getRPMVersionRelease

=cut

sub getRPMVersionRelease
{
    shift;
    return ArchiveUtils->getRPMVersionRelease(@_);
}

#--------------------------------------------------------------------------------

=head3  getRealRPMSDir
    

    ArchiveUtils->getRealRPMSDir

=cut

sub getRealRPMSDir { shift; return ArchiveUtils->getRealRPMSDir(@_); }

#--------------------------------------------------------------------------------

=head3  getRecentVersionRpm
    

    ArchiveUtils->getRecentVersionRpm

=cut

sub getRecentVersionRpm { shift; return ArchiveUtils->getRecentVersionRpm(@_); }

#--------------------------------------------------------------------------------

=head3  getRemoteShell
    

    NetworkUtils->getRemoteShell

=cut

sub getRemoteShell { shift; return NetworkUtils->getRemoteShell(@_); }

#--------------------------------------------------------------------------------

=head3  getReqsNotSatisfied
    

    ArchiveUtils->getReqsNotSatisfied

=cut

sub getReqsNotSatisfied { shift; return ArchiveUtils->getReqsNotSatisfied(@_); }

#--------------------------------------------------------------------------------

=head3  getRequiredRpms
    

    ArchiveUtils->getRequiredRpms

=cut

sub getRequiredRpms { shift; return ArchiveUtils->getRequiredRpms(@_); }

#--------------------------------------------------------------------------------

=head3  getRootHomeDir
    

    NetworkUtils->getRootHomeDir

=cut

sub getRootHomeDir { shift; return NetworkUtils->getRootHomeDir(@_); }

#--------------------------------------------------------------------------------

=head3  getSetupRemoteShell
    

    NetworkUtils->getSetupRemoteShell

=cut

sub getSetupRemoteShell { shift; return NetworkUtils->getSetupRemoteShell(@_); }

#--------------------------------------------------------------------------------

=head3  getSetupKRB5
    

    NodeUtils->getSetupKRB5

=cut

sub getSetupKRB5 { shift; return NodeUtils->getSetupKRB5(@_); }

#--------------------------------------------------------------------------------

=head3  getUpdateDir
    

    ServerUtils->getUpdateDir

=cut

sub getUpdateDir { shift; return ServerUtils->getUpdateDir(@_); }

#--------------------------------------------------------------------------------

=head3  get_common_attrs
    

    NodeUtils->get_common_attrs

=cut

sub get_common_attrs { shift; return NodeUtils->get_common_attrs(@_); }

#--------------------------------------------------------------------------------

=head3  get_csminstall_pathVersion
    

    ArchiveUtils->get_csminstall_pathVersion

=cut

sub get_csminstall_pathVersion
{
    shift;
    ArchiveUtils->get_csminstall_pathVersion(@_);
}

#--------------------------------------------------------------------------------

=head3  get_definition_version
    

    ArchiveUtils->get_definition_version

=cut

sub get_definition_version
{
    shift;
    return ArchiveUtils->get_definition_version(@_);
}

#--------------------------------------------------------------------------------

=head3  get_lock
    

    ServerUtils->get_lock

=cut

sub get_lock { shift; return ServerUtils->get_lock(@_); }

#--------------------------------------------------------------------------------

=head3  getmacs_via_dsh
    

    NetworkUtils->getmacs_via_dsh

=cut

sub getmacs_via_dsh { shift; return NetworkUtils->getmacs_via_dsh(@_); }

#--------------------------------------------------------------------------------

=head3  get_management_server
    

    NetworkUtils->get_management_server

=cut

sub get_management_server
{
    shift;
    return NetworkUtils->get_management_server(@_);
}

#--------------------------------------------------------------------------------

=head3  get_osdefs_files
    

    ServerUtils->get_osdefs_files

=cut

sub get_osdefs_files { shift; return ServerUtils->get_osdefs_files(@_); }

#--------------------------------------------------------------------------------

=head3  get_pkgVersion
    

    ArchiveUtils->get_pkgVersion

=cut

sub get_pkgVersion { shift; return ArchiveUtils->get_pkgVersion(@_); }

#--------------------------------------------------------------------------------

=head3  get_pkgdefs
    

    ServerUtils->get_pkgdefs

=cut

sub get_pkgdefs { shift; return ServerUtils->get_pkgdefs(@_); }

#--------------------------------------------------------------------------------

=head3  get_pkgdefs_files
    

    ServerUtils->get_pkgdefs_files

=cut

sub get_pkgdefs_files { shift; return ServerUtils->get_pkgdefs_files(@_); }

#--------------------------------------------------------------------------------

=head3  get_script_list
    

    ServerUtils->get_script_list

=cut

sub get_script_list { shift; return ServerUtils->get_script_list(@_); }

#--------------------------------------------------------------------------------

=head3  get_target_nodes
    

    NodeUtils->get_target_nodes

=cut

sub get_target_nodes { shift; return NodeUtils->get_target_nodes(@_); }

#--------------------------------------------------------------------------------

=head3  get_uniqu_arry_elemnts
    

    ServerUtils->get_uniqu_arry_elemnts

=cut

sub get_uniqu_arry_elemnts
{
    shift;
    return ServerUtils->get_uniqu_arry_elemnts(@_);
}

#--------------------------------------------------------------------------------

=head3 groupNFSnodes

  NetworkUtils->groupNFSnodes

=cut

sub groupNFSnodes { shift; return NetworkUtils->groupNFSnodes(@_); }

#--------------------------------------------------------------------------------

=head3  inc_ip
    

    NetworkUtils->inc_ip

=cut

sub inc_ip { shift; return NetworkUtils->inc_ip(@_); }

#--------------------------------------------------------------------------------

=head3  initialize_status
    

    MessageUtils->initialize_status

=cut

sub initialize_status { shift; return MessageUtils->initialize_status(@_); }

#--------------------------------------------------------------------------------

=head3  installRequiredRpms
    

    ArchiveUtils->installRequiredRpms

=cut

sub installRequiredRpms { shift; return ArchiveUtils->installRequiredRpms(@_); }

#--------------------------------------------------------------------------------

=head3  installSSHFiles
    

    NetworkUtils->installSSHFiles

=cut

sub installSSHFiles { shift; return NetworkUtils->installSSHFiles(@_); }

#--------------------------------------------------------------------------------

=head3  invokeLAP
    

   ArchiveUtils->invokeLAP

=cut

sub invokeLAP { shift; return ArchiveUtils->invokeLAP(@_); }

#--------------------------------------------------------------------------------

=head3  isAutoupdateInstalled
    

    ServerUtils->isAutoupdateInstalled

=cut

sub isAutoupdateInstalled
{
    shift;
    return ServerUtils->isAutoupdateInstalled(@_);
}

#--------------------------------------------------------------------------------

=head3  makeSyncHash
    

    ServerUtils->makeSyncHash

=cut

sub makeSyncHash { shift; return ServerUtils->makeSyncHash(@_); }

#--------------------------------------------------------------------------------

=head3  make_config_file
    

    ServerUtils->make_config_file

=cut

sub make_config_file { shift; return ServerUtils->make_config_file(@_); }

#--------------------------------------------------------------------------------

=head3  make_node_list_file
    

    ServerUtils->make_node_list_file

=cut

sub make_node_list_file { shift; return ServerUtils->make_node_list_file(@_); }

#--------------------------------------------------------------------------------

=head3  make_script_lists
    

    ServerUtils->make_script_lists

=cut

sub make_script_lists { shift; return ServerUtils->make_script_lists(@_); }

#--------------------------------------------------------------------------------

=head3  name2list
    

    ServerUtils->name2list

=cut

sub name2list { shift; return ServerUtils->name2list(@_); }

#--------------------------------------------------------------------------------

=head3  nfsprobe
    

    NetworkUtils->nfsprobe

=cut

sub nfsprobe { shift; return NetworkUtils->nfsprobe(@_); }

#--------------------------------------------------------------------------------

=head3  parseRequire
    

    ArchiveUtils->parseRequire

=cut

sub parseRequire { shift; return ArchiveUtils->parseRequire(@_); }

#--------------------------------------------------------------------------------

=head3  post_csm_copy
    

    ServerUtils->post_csm_copy

=cut

sub post_csm_copy { shift; return ServerUtils->post_csm_copy(@_); }

#--------------------------------------------------------------------------------

=head3  release_lock
    

    ServerUtils->release_lock

=cut

sub release_lock { shift; return ServerUtils->release_lock(@_); }

#--------------------------------------------------------------------------------

=head3  restartTftp
    

    NetworkUtils->restartTftp

=cut

sub restartTftp { shift; return NetworkUtils->restartTftp(@_); }

#--------------------------------------------------------------------------------

=head3  returnSubdirectory
    

    ServerUtils->returnSubdirectory

=cut

sub returnSubdirectory { shift; return ServerUtils->returnSubdirectory(@_); }

#--------------------------------------------------------------------------------

=head3  rmNodesKnownHosts
    

    NetworkUtils->rmNodesKnownHosts

=cut

sub rmNodesKnownHosts { shift; return NetworkUtils->rmNodesKnownHosts(@_); }

#--------------------------------------------------------------------------------

=head3  search_copy_distro_rpms
    

    ArchiveUtils->search_copy_distro_rpms

=cut

sub search_copy_distro_rpms
{
    shift;
    ArchiveUtils->search_copy_distro_rpms(@_);
}

#--------------------------------------------------------------------------------

=head3  search_csm
    

    ArchiveUtils->search_csm

=cut

sub search_csm { shift; return ArchiveUtils->search_csm(@_); }

#--------------------------------------------------------------------------------

=head3  search_opensrc_prereqs
    

    ArchiveUtils->search_opensrc_prereqs

=cut

sub search_opensrc_prereqs
{
    shift;
    return ArchiveUtils->search_opensrc_prereqs(@_);
}

#--------------------------------------------------------------------------------

=head3  search_rpm_csminstall_path
    

    ArchiveUtils->search_rpm_csminstall_path

=cut

sub search_rpm_csminstall_path
{
    shift;
    ArchiveUtils->search_rpm_csminstall_path(@_);
}

#--------------------------------------------------------------------------------

=head3  secureFilePermissions
    

    NetworkUtils->secureFilePermissions

=cut

sub secureFilePermissions
{
    shift;
    return NetworkUtils->secureFilePermissions(@_);
}

#--------------------------------------------------------------------------------

=head3  setupAIXRSH
    

    NetworkUtils->setupAIXRSH

=cut

sub setupAIXRSH { shift; return NetworkUtils->setupAIXRSH(@_); }

#--------------------------------------------------------------------------------

=head3  setupLinuxRSH
    

    NetworkUtils->setupLinuxRSH

=cut

sub setupLinuxRSH { shift; return NetworkUtils->setupLinuxRSH(@_); }

#--------------------------------------------------------------------------------

=head3  setupRemoteShellforFullInstall
    

    NetworkUtils->setupRemoteShellforFullInstall

=cut

sub setupRemoteShellforFullInstall
{
    shift;
    NetworkUtils->setupRemoteShellforFullInstall(@_);
}

#--------------------------------------------------------------------------------

=head3  start_logging
    

    MessageUtils->start_logging

=cut

sub start_logging { shift; return MessageUtils->start_logging(@_); }

#--------------------------------------------------------------------------------

=head3  start_nfs
    

    NetworkUtils->start_nfs

=cut

sub start_nfs { shift; return NetworkUtils->start_nfs(@_); }

#--------------------------------------------------------------------------------

=head3  stop_logging
    

    MessageUtils->stop_logging

=cut

sub stop_logging { shift; return MessageUtils->stop_logging(@_); }

#--------------------------------------------------------------------------------

=head3  subnet
    

    NetworkUtils->subnet

=cut

sub subnet { shift; return NetworkUtils->subnet(@_); }

#--------------------------------------------------------------------------------

=head3  supportedSSHversion
    

    NetworkUtils->supportedSSHversion

=cut

sub supportedSSHversion { shift; return NetworkUtils->supportedSSHversion(@_); }

#--------------------------------------------------------------------------------

=head3  syncServers
    

    ServerUtils->syncServers

=cut

sub syncServers { shift; return ServerUtils->syncServers(@_); }

#--------------------------------------------------------------------------------

=head3  testVersion
    

    ArchiveUtils->testVersion

=cut

sub testVersion { shift; return ArchiveUtils->testVersion(@_); }

#--------------------------------------------------------------------------------

=head3  testvalidconsole
    

    NodeUtils->testvalidconsole

=cut

sub testvalidconsole { shift; return NodeUtils->testvalidconsole(@_); }

#--------------------------------------------------------------------------------

=head3  testvalidpowermethod
    

    NodeUtils->testvalidpowermethod

=cut

sub testvalidpowermethod { shift; return NodeUtils->testvalidpowermethod(@_); }

#--------------------------------------------------------------------------------

=head3  unexport_csminstall
    

    NetworkUtils->unexport_csminstall

=cut

sub unexport_csminstall { shift; return NetworkUtils->unexport_csminstall(@_); }

#--------------------------------------------------------------------------------

=head3  verifyTftp
    

    NetworkUtils->verifyTftp

=cut

sub verifyTftp { shift; return NetworkUtils->verifyTftp(@_); }

#--------------------------------------------------------------------------------

=head3  verify_dhcp
    

    NetworkUtils->verify_dhcp

=cut

sub verify_dhcp { shift; return NetworkUtils->verify_dhcp(@_); }

#--------------------------------------------------------------------------------

=head3  write_status
    

    MessageUtils->write_status

=cut

sub write_status { shift; return MessageUtils->write_status(@_); }

#--------------------------------------------------------------------------------

1;
 seak0 0PBm  7u       "q@"q@"q@                   ./opt/csm/pm/MessageUtils.pm .pm                   m          #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)29   1.4   src/csm/core/pm/MessageUtils.pm.perl, setup, csm_rveg, rveg0414a 2/20/04 17:15:20
#
#####################################################################

package MessageUtils;

use strict;

#     locale tells perl to honor locale for sorting, dates, etc.
#     more info about locale.pm and perl handling of locales can be found
#     in /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.

use locale;
use Socket;
use File::Path;

my $msgs;
my $distro;
my $useTranslatedMsg;
my %catHashes;
my $csmroot;
my ($MSGCAT, $MSGMAPPATH, $MSGSET);
my $NO_NODERANGES;
my $NODEGROUPEXPMEM_WARNING = 1;

# $NodeUtils::NO_MESSAGES;    # Set this to 1 if you do not want NodeUtils to
                              # print any error msgs

# $NodeUtils::errno;          # Will be set if an error occurs.  You must zero
                              # this out before calling a NodeUtils function,
                              # if you want to check it afterwards.

BEGIN
{

    #    This enables us to redirect where it looks for other CSM files during development
    $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';

    $MSGCAT = 'nodecmds.cat';
    if (defined $::MSGMAPPATH)
    {
        $MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
    }
    else
    {
        $MSGMAPPATH = "$csmroot/msgmaps";
    }
    $MSGSET = 'NodeUtils';
}

umask(0022); #  This sets umask for all CSM files so that group and world only
             #  have read permissions.
             #  To change it, simply use the umask call in your script, after
             #  the "use NodeUtils;" line



#--------------------------------------------------------------------------------


=head1    MessageUtils


=head2    Package Description


This program module file, supports the CSM/install messaging and status
dependencies.  

If adding to this file, please take a moment to ensure that:

    1.  Your contrib has a readable pod header describing the purpose and use of
         your contrib.

    2. Your contrib is under the correct heading and is in alphabetical order
    under that heading.

    3. You test your contribution by running from the command line:  

       pod2html  --verbose --title=MessageUtils MessageUtils.pm.perl --outfile=MessageUtils.html
       
       and examining the ./MessageUtils.html file in a browser.


=cut

#--------------------------------------------------------------------------------

=head2    Package Dependancies

    use strict;
    use Fcntl qw(:flock);
    use File::Basename;
    use File::Find;
    use File::Path;    # Provides mkpath()


=cut


=cut


#--------------------------------------------------------------------------------

=head1    Subroutines by Functional Group

=cut

#--------------------------------------------------------------------------------

=head2    Messaging 

=cut

#--------------------------------------------------------------------------------

=head3    getMessage

     Returns a msg from a catalog.

    Arguments:
        Input arguments are: msg id and then the values to be
        plugged into the msg.
    Returns:
        A msg from a catalog.
    Globals:
        $::MSGCAT
        $::MSGMANPATH
        $::MSGSET
    Error:
        Internal error message.
    Example:
         MessageUtils->getMessageFromCat (    $::MSGCAT,
                        $::MSGMAPPATH,
                        $::MSGSET,
                        @_);
    Comments:
         This function also uses the same global vars as message().

=cut

#--------------------------------------------------------------------------------

sub getMessage
{
    shift;    # get rid of the class name
    if (!defined($::MSGCAT) || !defined($::MSGMAPPATH))
    {
        return NodeUtils->programName()
          . ":  Internal globabl variable MSGCAT or MSGMAPPATH not defined on call to NodeUtils::getMessage().\n";
    }
    return MessageUtils->getMessageFromCat($::MSGCAT, $::MSGMAPPATH, $::MSGSET,
                                           @_);
}

#--------------------------------------------------------------------------------

=head3    getMessageFromCat

    Returns a message without relying on the global variables for msg catalog,
    msg map path, and msg set parameters.

    Arguments:
         The arguments are:    msg catalog,
                    msg map path,
                    msg set,
                    and then the same args as getMessage().

    Returns:
        Multiple posible message strings.
    Globals:
        $::MSGCAT
        $::MSGMAPPATH
        $::MSGSET
    Error:
        Multiple posible message strings.
    Example:
        MessageUtils->getMessageFromCat( $::MSGCAT,
                                         $::MSGMAPPATH,
                                         $::MSGSET,
                                         @_);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub getMessageFromCat
{

    # Process the arguments
    shift;    # get rid of the class name
    my $msgcat     = shift;
    my $msgmappath = shift;
    my $msgset     = shift;
    my $msgid      = shift;

    # the rest are the values to be plugged into the msg.  They are in @_
    if (!length($msgset)) { $msgset = NodeUtils->programName(); }

    my ($msgnum, $msgsetnum, $defaultmsg) =
      MessageUtils->getmsgmap($msgmappath, $msgset, $msgcat, $msgid);

    # Check the NLS related env vars to determine if we really have to get the msg from a
    # translated catalog, or if we can just use the default msg from the msg map, because
    # the latter is much faster (does not have to fork a process for each msg).
    if (!MessageUtils->useTranslatedMsg()
      )    # just display default msg from msg map
    {

        #print "(using default msg...)\n";
        $defaultmsg =~ s/^\'(.*)\'$/$1/s; # remove the surrounding single quotes
        if (NodeUtils->isLinux())
        {
            $defaultmsg =~ s/^(\s*%\d\$s:\s*|\s*)\d{4}-\d{3}\s*/$1/;
        }                                 # on linux remove the error number
        $defaultmsg = MessageUtils->substituteValues($defaultmsg, @_);
        $defaultmsg = MessageUtils->processNewlines($defaultmsg);
        return $defaultmsg;
    }
    else    # use translated msg from catalog via dspmsg
    {

        #print "(using translated msg via dspmsg...)\n";
        # We have to quote the values if they have embedded blanks and other funny
        # chars.
        my @values = @_;    # have to make a copy because @_ is readonly
        foreach my $v (@values)
        {
            $v = NodeUtils->quote(MessageUtils->processNewlines($v));
        }

        # Build the command string and invoke dspmsg
        my $cmd =
          "/usr/bin/dspmsg -s $msgsetnum $msgcat $msgnum $defaultmsg "
          . join(' ', @values) . ' 2>&1';

        #print "$cmd\n";
        my $msg = `$cmd`;
        my $rc  = $? >> 8;
        if ($rc)
        {
            return NodeUtils->programName()
              . ":  Error running dspmsg to display a message.  Exit code from dspmsg is $rc.  Command: $cmd\nMessage from command: $msg\n";
        }
        return $msg;
    }
}

#--------------------------------------------------------------------------------

=head3	getmsg

        Get and return a msg from a msg hash ref.  Used in a similar way to the msg()
        function, except w/o the severity code.

    Arguments:
        $msg catalog,
        $msg ID
    Returns:
        a message string
    Globals:
        none
    Error:
        warining
    Example:
         $msg = MessageUtils->getmsg($msgcat, $msgid, @_);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub getmsg
{
    my $class  = shift;
    my $msgcat = shift;
    my $msgid  = shift;

    # Find the msg and substitute the values left in @_ into the msg
    my $m = $$msgcat{$msgid};
    if (!defined($m))
    {
        $m =
          NodeUtils->programName()
          . ": Can not find message $msgid in the message hash variable.\n";
    }
    if (NodeUtils->isLinux())
    {
        $m =~ s/^(\s*%\d\$s:\s*)\d{4}-\d{3}\s*/$1/;
    }    # on linux remove the error number
    $m = MessageUtils->substituteValues($m, @_);
    $m = MessageUtils->processNewlines($m);

    return $m;
}

#--------------------------------------------------------------------------------

=head3    getmsgmap

     The perl equivalent of the ctdspmsg command.  It finds a msg mnemonic and
    the corresponding msg set, msg number, and default msg in a msg map file.

    Arguments:
         $msgpath, $msgset, $msgcat, $msgid
    Returns:
        a tuple: msg set, msg number and default msg
        as an array.
    Globals:
        _
    Error:
        (-1, -1, $message or progam name);
    Example:
        my ($msgnum, $msgsetnum, $defaultmsg) =
            MessageUtils->getmsgmap($msgmappath, $msgset, $msgcat, $msgid);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub getmsgmap
{
    my ($class, $msgpath, $msgset, $msgcat, $msgid) = @_;
    my ($catbase) = $msgcat =~ /(.+)\.cat$/;
    my $mapname = "$msgpath/$catbase.$msgset.map";

    # If we have not read the msg map yet, do that
    my $catHash =
      $catHashes{$mapname};    # this gets a reference to the msg set hash
    if (!defined($catHash))
    {

        #print "Opening $mapname...\n";
        if (!open(CATFILE, $mapname))
        {
            my $m =
              NodeUtils->programName()
              . ": Can not open message map file $mapname to retrieve message $msgid.\n";
            return (-1, -1, $m);
        }
        $catHash = {};         # create the hash and save the reference to it
        $catHashes{$mapname} = $catHash;
        while (<CATFILE>)      # this puts the next line into $_
        {
            my ($mnemonic, $msgnum, $msgset, $defaultmsg) = split(' ', $_, 4);
            chomp($defaultmsg);
            $$catHash{$mnemonic} = [$msgnum, $msgset, $defaultmsg];
        }
    }

    # Find the msg in the hash and display it
    my $msgref = $$catHash{$msgid};
    if (!defined($msgref))
    {
        my $m =
          NodeUtils->programName()
          . ": Can not find message $msgid in message map file $mapname.\n";
        return (-1, -1, $m);
    }

    return @$msgref;    # msgnum, msgset, defaultmsg
}

#--------------------------------------------------------------------------------

=head3    msg

    Display a msg from a hash reference.  The 1st arg is the hash reference and
    the rest of the args are the same as message().  The msgs in the hash should
    be similar in format to msgs in a catalog.

    This means the following:
    
        - it should use %1$s for substitution instead of %s
        - it should include a newline on the end, if desired
        - if the msg is a warning or error, it should have %1$s: at the beginning
          to have the program name plugged in
        - it can have a msg number, but doesn't have to

    Arguments:
        see intro above
    Returns:
        nothing
    Globals:
        none
    Error:
        none
    Example:
        
        MessageUtils->msg($::MSGS,'E2','OPERATION_FAILED',$var);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub msg
{
    my $class  = shift;
    my $msgcat = shift;

    MessageUtils->messageFromCat($msgcat, '', '', @_);
}

#--------------------------------------------------------------------------------

=head3    message

    Display a msg from a msg catalog to stdout, stderr, or a log file.  This
    function is primarily meant for commands and other code that is sending
    output directly to the user.  Even the log is really a capture of this
    interactive output.  The CLOG API should be used by daemons to log important
    events.

    Arguments:
        The arguments of the message() function are:

        - severity_code -
            A string containing 1 or 2 characters indicating the severity
            or type of message, then some optional digits containing an exit
            code.

            Here's the meaning of the 1st character:
                I - informational
                W - warning.  This type of message will be sent to stderr.
                    The program name will be plugged into the 1st argument in the msg.
                E - error.  This type of message will be sent to stderr.
                    The program name will be plugged into the 1st argument in the msg.
                P - prompt string.  If you don't want the newline at the end of the
                    prompt, don't put it in the message in the catalog.
                O - program output.
                V - verbose.  This message should only be displayed if $::VERBOSE is set.

            If $::LOG_FILE_HANDLE is set, the message goes to both the screen and that
            log file.  (Verbose msgs will be sent to the log file even if $::VERBOSE
            is not set.)  Optionally, an L can be put before any of the above characters
            meaning send this message only to the log file handle in $::LOG_FILE_HANDLE.
            Also, a lowercase L can be put before any of the above characters to mean
            do NOT send this to the log file, even if $::LOG_FILE_HANDLE is set.

        - msg_id The message to display out of the catalog.  The messages in the catalog
            should have the newline at the end (if appropriate) and the error
            message number in it (if an error).

         - The rest of the arguments are values to substitute for %s in the msg.

    Returns:
        none

    Globals:
         MSGCAT        - the name of the message catalog containing the messages
        MSGMAPPATH    - the path of the message map containing the messages
        MSGSET        - the name of the msg set withing the catalog.  If not set, it
                    will default to the program name.
    Error:
        _none

    Example:
        $::MSGCAT    = 'csmserver.cat';
        $::MSGMAPPATH    = '/opt/csm/msgmaps';
        blah;
        MessageUtils->message('E2', 'EMsgOPERATION_FAILED', $value1, $value2);


    Comments:
         For debugging purposes, if you set the undocumented environment variable
        CSM_MESSAGE_DEBUG, it will prefix each msg with the msg mnemonic.

=cut

#--------------------------------------------------------------------------------

sub message
{
    shift;    # get rid of the class name
    if (!defined($::MSGCAT) || !defined($::MSGMAPPATH))
    {

        # Make this msg go through the normal msg processing so we send it to the log file,
        # if appropriate, and we exit with the right rc, if appropriate.
        my $m =
          NodeUtils->programName()
          . ":  Internal globabl variable MSGCAT or MSGMAPPATH not defined on call to NodeUtils::message().\n";
        my $hashref = {M => $m};
        MessageUtils->messageFromCat($hashref, '', '', $_[0], 'M');
        return;
    }
    MessageUtils->messageFromCat($::MSGCAT, $::MSGMAPPATH, $::MSGSET, @_);
}

#--------------------------------------------------------------------------------

=head3    messageFromCat

        Prints a msg w/o relying on the global vars for the msg catalog,
         msg map path, and msg set.

    Arguments:
        $msg catalog,
        $msg map path,
        $msg set, 
        then the same args as message().
        
    Returns:
        none
    Globals:
        none
    Error:
        none
    Example:
                MessageUtils->messageFromCat('csmInstall.cat',
                                          $::MSGMAPPATH,
                                          'csminstall',
                                          'E',
                                          'EMsgCANT_RUN',
                                          $cmd,
                                          $rc);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub messageFromCat
{

    # Process the arguments
    shift;    # get rid of the class name
    my $msgcat     = shift;
    my $msgmappath = shift;
    my $msgset     = shift;
    my $sevcode    = shift;
    if (   $sevcode =~ /V/
        && !$::VERBOSE
        && (!defined($::LOG_FILE_HANDLE) || $sevcode =~ /l/))
    {
        return;
    }
    my $msgid = shift;

    # the rest are the values to be plugged into the msg.  They are in @_

    # Parse the severity code
    my $i       = 1;
    my $logonly = 0;
    my $nolog   = 0;
    my $sev     = substr($sevcode, 0, 1);  # should be I, W, E, P, O, V, L, or l
    if ($sev eq 'L' || $sev eq 'l')
    {
        if ($sev eq 'L') { $logonly = 1; }
        else { $nolog = 1; }
        $i = 2;                          # logically shift everything by 1 char
        $sev = substr($sevcode, 1, 1);
    }
    if (!($sev =~ /[WEPVO]/)) { $sev = 'I'; }
    my $code = substr($sevcode, $i);     # optional exit code

    if ($sev =~ /[WE]/)
    {
        unshift @_, NodeUtils->programName();
    }    # only warnings and errors should have the program name prepended

    my $stdouterrf = \*STDOUT;
    my $stdouterrd = '';
    if ($sev =~ /[WE]/)
    {
        $stdouterrf = \*STDERR;
        $stdouterrd = '1>&2';
    }

    my $msg;

    # If they pass in a hash reference instead of a msg catalog name, we will
    # get the msg from the hash ref.
    if (ref($msgcat) eq 'HASH')
    {
        $msg = MessageUtils->getmsg($msgcat, $msgid, @_);
    }
    else
    {
        $msg =
          MessageUtils->getMessageFromCat($msgcat, $msgmappath, $msgset, $msgid,
                                          @_);
    }

    # If there is a problem with getMessageFromCat() it returns the error as the msg

    # This is used for debugging
    if ($ENV{'CSM_MESSAGE_DEBUG'}) { $msg = "$msgid: $msg"; }

    if (!$logonly && !($sev eq 'V' && !$::VERBOSE)) { print $stdouterrf $msg; }
    if (defined($::LOG_FILE_HANDLE) && !$nolog)
    {
        print $::LOG_FILE_HANDLE $msg;
    }

    if (length($code))
    {
        if (defined($::LOG_FILE_HANDLE))
        {
            close $::LOG_FILE_HANDLE;
            undef $::LOG_FILE_HANDLE;
        }
        exit $code;
    }
}

#--------------------------------------------------------------------------------

=head3    processNewlines

    Process the new lines in a message.

    Arguments:
        message string
    Returns:
        message string with processed \n's
    Globals:
        none
    Error:
        undefined
    Example:
         $defaultmsg = MessageUtils->processNewlines($defaultmsg);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub processNewlines
{
    my ($class, $msg) = @_;

    # For some reason, the presence of $ and @ makes this eval erase the msg, so we
    # must escape them.
    #if ($msg =~ /%\d\$s/) { return $msg; }    # return it unprocessed
    $msg =~ s/([\$\@])/\\$1/sg;
    $msg = 'qq(' . $msg . ')';    # surround with qq() so we can eval it
    $msg = eval $msg;             # this processes the \n correctly
    return $msg;
}

#--------------------------------------------------------------------------------

=head3    substituteValues

    Substitue values in a msg string.

    Arguments:
        msg string
        substitute values
    Returns:
        altered msg string
    Globals:
        none
    Error:
        undefined
    Example:
        $defaultmsg =
            MessageUtils->substituteValues($defaultmsg, @_);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub substituteValues
{
    shift @_;    # get rid of the class argument
    my $msg = shift @_; # the rest of the arguments are values to be substituted

    # Have to substitute the values in the correct order
    my $i = 1;
    foreach my $v (@_)
    {
        $msg =~ s/%$i\$s/$v/;
        $i++;
    }
    return $msg;
}

#--------------------------------------------------------------------------------

=head3    useTranslatedMsg

    Check the NLS related env vars to determine if we really have to
    get the msg from a translated catalog, or if we can just use the
    default msg from the msg map.

    Arguments:
        none
    Returns:
        0 - use translated msg.
        1 - don't use translated msg.d 
    Globals:
        none
    Error:
        none
    Example:
        if (!MessageUtils->useTranslatedMsg()) { blah; }
    Comments:
        not clear which is true: 1 or 0.

=cut

#--------------------------------------------------------------------------------

sub useTranslatedMsg
{
    if (!defined($useTranslatedMsg))    # cache the result
    {
        if    (!(-x '/usr/bin/dspmsg')) { $useTranslatedMsg = 0; }
        elsif ($ENV{CSM_USE_DSPMSG})    { $useTranslatedMsg = 1; }
        elsif (defined($ENV{LC_ALL}) && length($ENV{LC_ALL}))
        {
            if ($ENV{LC_ALL} =~ /^(C|POSIX|en_US)$/) { $useTranslatedMsg = 0; }
            else { $useTranslatedMsg = 1; }
        }
        elsif (defined($ENV{LC_MESSAGES}) && length($ENV{LC_MESSAGES}))
        {
            if ($ENV{LC_MESSAGES} =~ /^(C|POSIX|en_US)$/)
            {
                $useTranslatedMsg = 0;
            }
            else { $useTranslatedMsg = 1; }
        }
        elsif (defined($ENV{LANG}) && length($ENV{LANG}))
        {
            if ($ENV{LANG} =~ /^(C|POSIX|en_US)$/) { $useTranslatedMsg = 0; }

            #RedHat 8.0 changes
            else
            {
                NodeUtils->distribution();
                if ($distro =~ /RedHat\s*8\.0/ && $ENV{LANG} =~ /^en_US.UTF-8$/)
                {
                    $useTranslatedMsg = 0;
                }
                else
                {
                    $useTranslatedMsg = 1;
                }
            }

            #RedHat 8.0 changes
        }
    }

    # The only part of this decision we shouldn't cache is whether dspmsg is available,
    # because that can change as we are installing RSCT.
    if (!(-x '/usr/bin/dspmsg')) { return 0; }
    else { return $useTranslatedMsg; }
}

#--------------------------------------------------------------------------------

=head2    Server Logging Routines

=cut

#--------------------------------------------------------------------------------

=head3 append_logging

        Append logging messages to a logfile. Return the log file handle so
        it can be used to close the file when done logging.

        Arguments:
                 $logFileName
                 $quiet_flag
        Returns:
                $::LOG_FILE_HANDLE
        Globals:
                $::LOG_FILE_HANDLE
        Error:
                $::NOK
        Example:
                ServerUtils->append_logging($::INSTALL_LOG);
        Comments:
                It is the responsibility of the caller to close the
                log file;  this is best done with stop_logging().

=cut

#--------------------------------------------------------------------------------

sub append_logging
{
    my ($class, $logfile, $quiet_flag) = @_;
    my ($cmd, $rc);
    if (!$quiet_flag)
    {
        $quiet_flag = 0;
    }

    # create the log directory if it's not already there
    if (!-d $::CSMLOG)
    {
        $cmd = "$::MKDIR -m 644 -p $::CSMLOG";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                              'csminstall', "E", 'EMsgNO_CreateDir', $::CSMLOG);
            return ($::NOK);
        }
    }

    #
    #  get log file ready
    #
    if (!-e $logfile)
    {    #  create the log file if not already there
            # open the log file
        unless (open(LOGFILE, ">$logfile"))
        {

            # Cannot open file
            MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                            'csminstall', "E", 'EMsgCANT_WRITE_FILE', $logfile);
            return $::NOK;
        }
    }
    else
    {       # it's there so just append
        unless (open(LOGFILE, ">>$logfile"))
        {
            MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                            'csminstall', "E", 'EMsgCANT_WRITE_FILE', $logfile);
            return $::NOK;
        }
    }

    $::LOG_FILE_HANDLE = \*LOGFILE;

    # Print the date to the top of the logfile
    my $sdate = `/bin/date`;
    chomp $sdate;
    my $program = NodeUtils->programName();
    if ($quiet_flag != 1)
    {
        MessageUtils->messageFromCat(
                                     'csmInstall.cat',      $::MSGMAPPATH,
                                     'csminstall',          'V',
                                     'IMsgWRITING_LOGFILE', $program,
                                     $logfile
                                     );
        MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                     'csminstall', "LI", 'IMsgSTART_LOGGING',
                                     $sdate);
        MessageUtils->messageFromCat(
                                     'csmInstall.cat',  $::MSGMAPPATH,
                                     'csminstall',      "LI",
                                     'IMsgShow_Output', $::command_line
                                     );
    }

    return ($::LOG_FILE_HANDLE);
}

#--------------------------------------------------------------------------------

=head3    backup_logfile

        Backup the current logfile. Move logfile to logfile.1. Shift all other logfiles
        (logfile.[1-3]) up one number. The original logfile.4 is removed as in a FIFO.   

        Arguments:
                $logFileName
        Returns:
                $::OK
        Error:
                undefined
        Example:
                MessageUtils->backup_logfile($logfile);
        Comments:
                Never used outside of ServerUtils.

=cut

#--------------------------------------------------------------------------------

sub backup_logfile
{
    my ($class, $logfile) = @_;

    my ($logfile1) = $logfile . ".1";
    my ($logfile2) = $logfile . ".2";
    my ($logfile3) = $logfile . ".3";
    my ($logfile4) = $logfile . ".4";

    if (-f $logfile)
    {
        rename($logfile3, $logfile4) if (-f $logfile3);
        rename($logfile2, $logfile3) if (-f $logfile2);
        rename($logfile1, $logfile2) if (-f $logfile1);
        rename($logfile,  $logfile1);
    }
    return $::OK;
}


#--------------------------------------------------------------------------------

=head3 start_logging

        Start logging messages to a logfile. Return the log file handle so it
        can be used to close the file when done logging.

        Arguments:
                $logFile
                $quiet_flag
        Returns:
                $::LOG_FILE_HANDLE
        Globals:
                $::LOG_FILE_HANDLE
                $::CSMLOG
        Error:
                $::NOK
        Example:
                ServerUtils->start_logging($::CSMSETUPKS_LOG);
        Comments:
                Common method for logging script runtime output.

=cut

#--------------------------------------------------------------------------------

sub start_logging
{
    my ($class, $logfile, $quiet_flag) = @_;
    my ($cmd, $rc);
    if (!$quiet_flag)
    {
        $quiet_flag = 0;
    }
    MessageUtils->backup_logfile($logfile);

    # create the log directory if it's not already there
    if (!-d $::CSMLOG)
    {
        $cmd = "$::MKDIR -m 644 -p $::CSMLOG";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                              'csminstall', "E", 'EMsgNO_CreateDir', $::CSMLOG);
            return ($::NOK);
        }
    }

    # open the log file
    unless (open(LOGFILE, ">>$logfile"))
    {

        # Cannot open file
        MessageUtils->messageFromCat(
                                     'csmInstall.cat',      $::MSGMAPPATH,
                                     'csminstall',          "E",
                                     'EMsgCANT_WRITE_FILE', $logfile
                                     );
        return $::NOK;
    }

    $::LOG_FILE_HANDLE = \*LOGFILE;

    # Print the date to the top of the logfile
    my $sdate = `/bin/date`;
    chomp $sdate;
    my $program = NodeUtils->programName();
    if ($quiet_flag != 1)
    {
        MessageUtils->messageFromCat(
                                     'csmInstall.cat',      $::MSGMAPPATH,
                                     'csminstall',          'V',
                                     'IMsgWRITING_LOGFILE', $program,
                                     $logfile
                                     );
        MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                     'csminstall', "LI", 'IMsgSTART_LOGGING',
                                     $sdate);
        MessageUtils->messageFromCat(
                                     'csmInstall.cat',  $::MSGMAPPATH,
                                     'csminstall',      "LI",
                                     'IMsgShow_Output', $::command_line
                                     );
    }

    return ($::LOG_FILE_HANDLE);
}

#--------------------------------------------------------------------------------

=head3 stop_logging

        Turn off message logging. Routine expects to have a file handle
        passed in via the global $::LOG_FILE_HANDLE.

        Arguments:
                 $quiet_flag
        Returns:
                $::OK
        Globals:
                $::LOG_FILE_HANDLE
        Error:
                none
        Example:
                ServerUtils->append_logging($::INSTALL_LOG);
        Comments:
                closes the logfile and undefines $::LOG_FILE_HANDLE
                even on error.

=cut

#--------------------------------------------------------------------------------

sub stop_logging
{
    my ($class, $quiet_flag) = @_;
    if (!$quiet_flag)
    {
        $quiet_flag = 0;
    }
    if (defined($::LOG_FILE_HANDLE))
    {

        # Print the date at the bottom of the logfile
        if ($quiet_flag != 1)
        {
            my $date = `/bin/date`;
            chomp $date;
            MessageUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                 'csminstall', "LI", 'IMsgSTOP_LOGGING', $date);
        }

        close($::LOG_FILE_HANDLE);
        undef $::LOG_FILE_HANDLE;
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head2    Node Installation Status Routines

=cut

#--------------------------------------------------------------------------------

=head3    initialize_status

        The status directory is used to collect the installation
        status of nodes that are getting full installs.  Each node
        contains a separate file in the status directory with the
        name of the node's hostname.

        Create the /csminstall/csm/status directory and make it
        world writable so that the node can write to it with the
        atftp command.  Also, create initial files for each node
        to be installed.

        Arguments:
                reference to an array of Node Names
        Returns:
                number of errors encounter across node list
        Globals:
                $::CSMSTATUSDIR
                $::CSMSTATUSLINK
        Error:
                number of errors encournterd
        Example:
                 $rc =
                   ServerUtils->initialize_status(\@NODELIST);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub initialize_status
{
    my ($class, $nodes) = @_;
    my ($mode, $rc);
    my ($errors) = 0;
    unlink($::CSMSTATUSDIR);
    mkpath($::CSMSTATUSDIR, $::VERBOSE, 0110);
    $mode = "0110";
    NodeUtils->runcmd("$::CHMOD $mode $::CSMSTATUSDIR");
    if ($::RUNCMD_RC)
    {
        MessageUtils->message('W', 'EMsgCANT_CHMOD', $::CSMSTATUSDIR, $mode);
        $errors++;
    }

    #symlink ($::CSMSTATUSDIR, $::CSMSTATUSLINK);

    foreach my $node (@$nodes)
    {
        my $statusfile = "$::CSMSTATUSDIR/$node";
        unlink($statusfile);
        NodeUtils->runcmd("$::TOUCH $statusfile");
        if ($::RUNCMD_RC)
        {
            MessageUtils->message('W', 'EMsgCANT_CREATE', $statusfile);
            $errors++;
        }
        $mode = "0440";
        NodeUtils->runcmd("$::CHMOD $mode $statusfile");
        if ($::RUNCMD_RC)
        {
            MessageUtils->message('W', 'EMsgCANT_CHMOD', $statusfile, $mode);
            $errors++;
        }
    }

    return ($errors);
}

#--------------------------------------------------------------------------------

=head3    write_status

        Write an entry in the node install status file
        at /csminstall/csm/status/<node>

        Arguments:
                node    - The hostname of the node
                msg     - The message to add to the status file
                status  - (optional) The status of the operation
                dateReference - an empty array reference to get the
                                time the message was written.
        Returns:
                none
        Globals:
                none
        Error:
                csmInstall.cat  E2
        Example:
                ServerUtils->write_status($node, $msg, $rc);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub write_status
{
    my ($class, $node, $msg, $status, $dateReference) = @_;
    my $statusfile = "$::CSMSTATUSDIR/$node";
    open(STATUSFILE, ">>$statusfile")
      || MessageUtils->messageFromCat(
                                      'csmInstall.cat',      $::MSGMAPPATH,
                                      'csminstall',          'E2',
                                      'EMsgCANT_WRITE_FILE', $statusfile
                                      );

    my $date = `date`;
    chomp $date;
    push(@$dateReference, $date);

    chomp $msg;

    if ($status) { print STATUSFILE "$date: $msg: status=$status\n"; }
    else { print STATUSFILE "$date: $msg\n"; }

    close(STATUSFILE);
}

#--------------------------------------------------------------------------------

1;

kw 0PB  7u     H ӄAӄAӄA             H     ./opt/csm/pm/NetworkUtils.pm .pm                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#
# @(#)31   1.38   src/csm/core/pm/NetworkUtils.pm.perl, setup, csm_rveg, rvegs005a 6/25/04 11:36:15
#
#####################################################################

package NetworkUtils;

use strict;

#            locale tells perl to honor locale for sorting, dates, etc.
#            More info about locale.pm and perl handling of locales can be found in
#            /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.

use locale;
use Socket;
use File::Find;

my $msgs;
my $distro;
my $useTranslatedMsg;
my %catHashes;
my $csmroot;
my ($MSGCAT, $MSGMAPPATH, $MSGSET);
my $NO_NODERANGES;
my $NODEGROUPEXPMEM_WARNING = 1;

# $NodeUtils::errno;          # Will be set if an error occurs.  You must zero
# this out before calling a NodeUtils function,
# if you want to check it afterwards.

BEGIN
{

    #    This enables us to redirect where it looks for other CSM files during development
    $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';

    $MSGCAT = 'nodecmds.cat';
    if (defined $::MSGMAPPATH)
    {
        $MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
    }
    else
    {
        $MSGMAPPATH = "$csmroot/msgmaps";
    }
    $MSGSET = 'NodeUtils';
}

umask(0022);   #  This sets umask for all CSM files so that group and world only
               #  have read permissions.
               #  To change it, simply use the umask call in your script, after
               #  the "use NetworkUtils;" line

#--------------------------------------------------------------------------------

=head1    NetworkUtils


This program module file, supports the CSM/install networking dependencies;  
from datalink to session layers.



If adding to this file, please take a moment to ensure that:

    1.  Your contrib has a readable pod header describing the purpose and use of
         the subroutine.

    2. Your contrib is under the correct heading and is in alphabetical order
    under that heading.

    3. You  have run tidypod on your this file and copied NetworkUtils.pm.perl.tdy to
       NetworkUtils.pm.perl before checking in

       you can examine the pod output in  NetworkUtils.pm.perl.html file in a browser.

    4. Copy the new ./NetworkUtils.pm.perl.html to /project/csm/www, to update the pod.
       for the team.

=cut

#--------------------------------------------------------------------------------

=head2    DHCP Support

=cut

#--------------------------------------------------------------------------------

=head3    verify_dhcp

        Check that dhcp is up and running.

        Arguments:
                none
        Returns:
                0 - dhcp is running
                numErrors from attempt to start dhcp
        Globals:
                none
        Error:
                numErrors from attempt to start dhcp
        Example:
                $rc = NetworkUtils->verify_dhcp();
        Comments:
                Right now we don't check the /etc/dhcpd.conf file, since that
                should have  been verified when it was created.  This function
                is just for extremely paranoid peopole.

=cut

#--------------------------------------------------------------------------------

sub verify_dhcp
{
    my $errors = 0;
    my @output;
    my $cmd;
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'V', 'IMsgDhcpCheck');
    unless (-f "/var/lib/dhcp/dhcpd.leases")
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgDhcpMissing');
        unless (-d "var/lib/dhcp")
        {
            NodeUtils->runcmd("$::MKDIR -p /var/lib/dhcp");
        }
        NodeUtils->runcmd("$::TOUCH /var/lib/dhcp/dhcpd.leases");
    }

    # SuSE Change
    #$cmd = "$::SERVICE dhcpd status";
    $cmd = NodeUtils->service("dhcpd", "status");

    chomp(@output = `$cmd`);
    my @line = split(" ", @output);
    if (grep /running/, @output)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'V', 'IMsgDhcpOutput', @output);
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'V', 'IMsgDhcpOutput', @output);
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'V', 'IMsgDhcpProblemRestart', @output);

        # SuSE Change
        #`$::SERVICE dhcpd start`;
        #$cmd = "$::SERVICE dhcpd status";
        $cmd = NodeUtils->service("dhcpd", "start");
        `$cmd`;
        $cmd = NodeUtils->service("dhcpd", "status");

        chomp(@output = `$cmd`);
        if (grep /running/, @output)
        {

            #print "dhcp: @output\n" if $::VERBOSE;
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'V', 'IMsgDhcpOutput',
                                      @output);
        }
        else
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'I', 'IMsgDhcpNotWorking');
            $errors++;
        }
    }
    return $errors;
}

#--------------------------------------------------------------------------------

=head2    Ethernet Support

=cut

#--------------------------------------------------------------------------------

=head3    chkethup

         Ensure that the eth0 is up and running 

        Arguments:
                none
        Returns:
                none
        Globals:
                none
        Error:
                messageFromCat E1
        Example:
                NetworkUtils->chkethup();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub chkethup
{
    my $cmd = "$::NETSTAT -rn | $::GREP eth0";
    unless (`$cmd`)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E1', 'EMsgEth0NotUp');
    }
    return;
}

#--------------------------------------------------------------------------------

=head2    IP Address Support

=cut

#--------------------------------------------------------------------------------

=head3    genHex

        Generates a hex representation of an ip address:
            for example, 9.114.133.193 --> 097285C1

        Takes in a list of hosts and returns a hash where the key is
        the hostname and the value is the IP in hex form. 

        Arguments:
                @hostNames
        Returns:
                Hash of hostName / IP address (in hex) pairs.
        Globals:
                none
        Error:
                undefined
        Example:
                %hex = NetworkUtils->genHex(@::nodes);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub genHex
{
    shift;
    my $host;
    my $uno;
    my $dos;
    my $tres;
    my $cuatro;
    my $hex;
    my %hex;

    foreach $host (@_)
    {
        my $ip = NodeUtils->getHost($host);    # Get ip address
        ($uno, $dos, $tres, $cuatro) = split(/\./, $ip);    # Split by the .
        $hex = sprintf("%02X", $uno);    # put formatted into hex
        $hex .= sprintf("%02X", $dos);
        $hex .= sprintf("%02X", $tres);
        $hex .= sprintf("%02X", $cuatro);
        $hex{$host} = $hex;
    }
    return %hex;
}

#--------------------------------------------------------------------------------

=head3    inc_ip

        Increment an IP address by 1, carrying to the previous octet as required.
        This code originally appeared in the LUI product (luiapi.pm)

        Arguments:
                $IPaddress
        Returns:
                IP address as a string
        Globals:
                none
        Error:
                csmInstall.cat E
        Example:
                $node = NetworkUtils->inc_ip($ipaddr); 
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub inc_ip
{
    my $ip = $_[1];
    my ($a, $b, $c, $d);
    ($a, $b, $c, $d) = split(/\./, $ip);
    $d++;
    if ($d > 255)
    {
        $d = $d - 256;
        $c++;
        if ($c > 255)
        {
            $c = $c - 256;
            $b++;
            if ($b > 255)
            {
                $b = $b - 256;
                $a++;
                if ($a > 255)
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                          'csminstall', 'E', 'EMsgIPADDR_ERROR', "$a.$b.$c.$d");

                    #printf "Error - ip address out of valid range.\n";
                    return 1;
                }
            }
        }
    }
    return $a . "\." . $b . "\." . $c . "\." . $d;

}

#--------------------------------------------------------------------------------

=head3    isIpaddr

    returns 1 if parameter is has a valid IP address form.

    Arguments:
        dot qulaified IP address: e.g. 1.2.3.4
    Returns:
        1 - if legal IP address
        0 - if not legal IP address.
    Globals:
        none
    Error:
        none
    Example:
         if (NetworkUtils->isIpaddr( $ipAddr )) { blah; }
    Comments:
        Doesn't test if the IP address is on the network,
        just tests its form.

=cut

#--------------------------------------------------------------------------------

sub isIpaddr
{
    my ($class, $addr) = @_;

    #print "addr=$addr\n";
    if ($addr =~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/)
    {
        return 1;
    }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    subnet

        Returns the subnet in dot format

        Arguments:
                $hostName
                $netmask
        Returns:
                subnet for $hostName
        Globals:
                none
        Error:
                none
        Example:
                never used.
        Comments:
                never used???

=cut

#--------------------------------------------------------------------------------

sub subnet
{
    my ($class, $host, $netmask) = @_;

    #$host = `hostname` if (!$host);
    #$netmask = '255.255.255.0' if (!$netmask);

    chomp $host;
    chomp $netmask;

    #print "INPUT:  $host $netmask\n";

    my ($hostname, $ipaddr) = NodeUtils->getHost($host);

    my ($ia, $ib, $ic, $id) = split('\.', $ipaddr);
    my ($na, $nb, $nc, $nd) = split('\.', $netmask);

    # Convert to integers so the bitwise and (&) works correctly.
    int $ia;
    int $ib;
    int $ic;
    int $id;
    int $na;
    int $nb;
    int $nc;
    int $nd;

    my $sa     = ($ia & $na);
    my $sb     = ($ib & $nb);
    my $sc     = ($ic & $nc);
    my $sd     = ($id & $nd);
    my $subnet = "$sa.$sb.$sc.$sd";

    #print "IPADDR = $ia.$ib.$ic.$id\n";
    #print "NETMSK = $na.$nb.$nc.$nd\n";
    #print "SUBNET = $subnet\n";

    return $subnet;
}

#--------------------------------------------------------------------------------

=head2    MAC Address Support

=cut

#--------------------------------------------------------------------------------

=head3    getmacs_via_dsh

        Gathers MAC addresses for an array of node Names.

        Arguments:
                referance to an array of Node Names
        Returns:
                Array of unreachable node names
        Globals:
                none
        Error:
                none
        Example:
                unused

        Comments:
                unused???

=cut

#--------------------------------------------------------------------------------

sub getmacs_via_dsh
{
    my ($class, $ref_nodelist) = @_;
    my @nodelist = @$ref_nodelist;
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'I', 'IMsgGETTING_MACS_VIA_DSH');
    my $dshcmd =
      '/sbin/ifconfig eth0 | /bin/grep HWaddr | /bin/awk "{print \$5}"';
    my $RemoteShell = InstallUtils->getRemoteShell();
    my @new_getmacslist;
    my @unreach_nodes = ();
    my @reach         = ();

    my $node_file =
      InstallUtils->make_node_list_file(\@nodelist)
      ;    #put all dest nodes in tmp file
    my $cmd = "$::REMOTESHELL_EXPECT -d $node_file";
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              "V", 'IMsgRUN_CMD', $cmd);
    my @output = `$cmd 2>&1`;
    InstallUtils->close_delete_file($::NODE_LIST_FILE, $node_file)
      ;    #delete node file
    my %out;

    foreach my $line (@output)
    {
        chomp $line;
        my @parts = split ":", $line;
        if ($parts[1] =~ m/test.success/)
        {    #this node is reachable
            $out{$parts[0]} = 1;
        }
    }
    foreach my $n (@nodelist)
    {
        if (!$out{$n})
        {
            push @unreach_nodes, $n;
        }
        else
        {    #it is reachable
            push @reach, $n;
        }
    }
    if (@unreach_nodes)
    {
        my $node_str = join ', ', @unreach_nodes;
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',       $::MSGMAPPATH,
                                  'csminstall',           'W',
                                  'EMsgDSHCannotConnect', $RemoteShell,
                                  $node_str
                                  );
        push @new_getmacslist, @unreach_nodes;
    }
    if (@reach)
    {

        #we can theoretically reach it with DSH
        $node_file =
          InstallUtils->make_node_list_file(\@reach)
          ;    #put all dest nodes in tmp file
        $ENV{'DSH_LIST'} = $node_file;
        my $output = NodeUtils->runcmd("$::DSH '$dshcmd'", -1, 1);
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $node_file)
          ;    #delete node file
        my %macs;
        foreach my $line (@$output)
        {
            chomp $line;
            my ($nodename, $macaddr) = split(': ', $line);
            if ($macaddr =~ /(..:..:..:..:..:..)/)
            {
                $macs{$nodename} = $macaddr;
            }
        }
        foreach my $node (@reach)
        {
            if ($macs{$node})
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'I', 'IMsgFOUND_MACADDR', $node,
                                  $macs{$node});
                NodeUtils->runcmd(
                          "$::CHNODE $node InstallAdapterMacaddr=$macs{$node}");
            }
            else
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                 'csminstall', 'I', 'IMsgCANT_DSH_NODE', $node);
                push(@new_getmacslist, $node);
            }
        }
    }
    return (@new_getmacslist);
}

#--------------------------------------------------------------------------------

=head2    NFS Support

=cut

#--------------------------------------------------------------------------------

=head3   cacheEtcHosts

    This subroutine caches /etc/hosts to improve performance for large clusters.

    Arguments:
        none
    Returns:
        none
    Globals:
        none
    Error:
        none
    Example:
        none
    Comments:
        This routine is only called if more than 15 nodes are used.

=cut

#--------------------------------------------------------------------------------

sub cacheEtcHosts
{
    if (defined $NodeUtils::cacheetchosts)
    {
        return;
    }
    else
    {
        $NodeUtils::cacheetchosts = 1;    #so we don't do this again
    }
    my $cache = 0;
    if (NodeUtils->isLinux())
    {

        #On linux you can tell if /etc/hosts is used by looking at the /etc/host.conf
        my $file = "/etc/host.conf";
        if (open(CONF, $file))
        {
            while (<CONF>)
            {
                my $line = $_;
                chomp $line;
                if ($line =~ m/^\s*order\s+hosts/)
                {
                    $cache = 1;
                    last;
                }
            }
            close(CONF);
        }
        else { return; }

    }
    elsif (NodeUtils->isAIX())
    {

        #there is an environement variable
        if (defined $ENV{'NSORDER'} && length($ENV{'NSORDER'}))
        {
            if ($ENV{'NSORDER'} =~ m/^local/) { $cache = 1; }
            else { $cache = 0; }
        }
        else
        {    #On AIX -- look at /etc/netsvc.conf
            my $file = "/etc/netsvc.conf";
            if (-e "/etc/irs.conf" && !-e "/etc/netsvc.conf")
            {
                $file = "/etc/irs.conf";
            }
            if (open(CONF, $file))
            {
                my $line;
                while ($line = <CONF>)
                {
                    chomp $line;
                    if ($line !~ m/^\#/ && $line =~ m/^\s*hosts/)
                    {    #if it doesn't start with a commnet
                        if ($line =~ m/^\s*hosts\s*=\s*local/)
                        {
                            $cache = 1;
                        }
                        last;
                    }
                }
                close(CONF);
            }
        }

    }
    if ($cache == 0) { return; }
    my $file = "/etc/hosts";
    if (open(HOSTS, $file))
    {

        #print "CACHING ETC HOSTS\n";
        my $line;
        while ($line = <HOSTS>)
        {
            chomp $line;
            my ($before, $after) = split "#", $line;
            if ($before)
            {
                my ($ip, $longhost, $shorthost) = split /\s+/, $before;

                #print "IP =|$ip|\tlonghost =|$longhost|\tshorthost =|$shorthost|\n";
                if (length($longhost) && length($ip))
                {
                    $NodeUtils::Hosts{'Hostname'}{$longhost}{'Name'} =
                      $longhost;
                    $NodeUtils::Hosts{'Hostname'}{$longhost}{'IP'} = $ip;
                    $NodeUtils::Hosts{'IP'}{$ip} = $longhost;
                    if (length($shorthost))
                    {
                        $NodeUtils::Hosts{'Hostname'}{$shorthost}{'Name'} =
                          $longhost;
                        $NodeUtils::Hosts{'Hostname'}{$shorthost}{'IP'} = $ip;
                    }
                }

            }

        }
        close(HOSTS);
    }

}

#--------------------------------------------------------------------------------

=head3    determineMS

        Get the name of the localhost from an array of node names.

        Arguments:
        reference to a list of nodeNames
        Returns:
                Name of the local host
        Globals:
                $::PLTFRM
        Error:
                undefined
        Example:
        :$::MS_NODE = InstallUtils->determineMS(\@::NODELIST);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub determineMS
{
    my ($class, $refnodes) = @_;
    my @nodes = @$refnodes;
    my ($localnode, $ifconfig, $label, $separator, $address, @ipaddrs,
        %localhostnames);

    if ($::PLTFRM eq "AIX")
    {
        $ifconfig = "/usr/sbin/ifconfig -a";

        # format is: "inet xxx.xxx.xxx.xxx
        $label     = "inet";
        $separator = " ";
    }
    else
    {    #Linux
        $ifconfig = "/sbin/ifconfig -a";

        # format is: "inet addr:xxx.xxx.xxx.xxx
        $label     = "inet addr";
        $separator = ":";
    }

    NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils', 'V',
                              'IMsgCMD', $ifconfig);
    my @ips = `$ifconfig 2>&1`;
    my $rc  = $? >> 8;
    if ($rc)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $ifconfig, $rc);
    }
    foreach (@ips)
    {
        if ($_ =~ /$label$separator((\d{1,3}?\.){3}(\d){1,3})\s/o)
        {

            #print "found \"$1\" in \"$_\"\n";
            push @ipaddrs, $1;
        }
    }
    foreach my $addr (@ipaddrs)
    {

        #see what it resolves to
        $localhostnames{NodeUtils->tryHost($addr)} = 1;
    }
  FINDMS: foreach my $name (@nodes)
    {
        my $rn = NodeUtils->tryHost($name);
        if ($localhostnames{$rn})
        {

            #there should only be one ManagedNode that maps to the localhost
            $localnode = $name;
            last FINDMS;
        }
    }
    return $localnode;
}

#--------------------------------------------------------------------------------

=head3    export_csminstall

        NFS Export the /csminstall directory on the Management Server

        Arguments:
                $dir_to_be_exported
        Returns:
                $::OK
                $::NOK
        Globals:
                $::PLTFRM 
                %::MS_INSTALL_SERVER
                %::INSTALL_SERVERS
        Error:
                $::NOK
        Example:
                if(NetworkUtils->export_csminstall('/csminstall/csm') != 0) {
                    blah;
                }
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub export_csminstall
{
    my ($class, $dir_to_be_exported) = @_;
    my $cmd;
    my $rc = 0;

    #my $PLTFRM = `uname`; chomp $PLTFRM;    #using $::PLTFRM instead
    if ($::MS_INSTALL_SERVER)
    {    #the MS is serving NFS files
        if (-d $dir_to_be_exported)
        {
            if ($::PLTFRM eq "AIX")
            {

                #$cmd = "$::EXPORTFS -i -o ro /csminstall";
                $cmd = "$::EXPORTFS -i -o ro $dir_to_be_exported";
                NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                          'NodeUtils', 'V', 'IMsgCMD', $cmd);
                $rc = system($cmd) >> 8;
                if ($rc)
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
                }

            }
            else
            {

                #$cmd = "$::EXPORTFS -o ro,no_root_squash \*:/csminstall";
                $cmd =
                  "$::EXPORTFS -o ro,no_root_squash \*:$dir_to_be_exported";
                NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                          'NodeUtils', 'V', 'IMsgCMD', $cmd);
                $rc = system($cmd) >> 8;
                if ($rc)
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCommandFailed', $cmd, $rc);
                }
            }
        }
        else
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',
                                      $::MSGMAPPATH,
                                      'csminstall',
                                      'W',
                                      'EMsgNo_Dir_Export',
                                      $dir_to_be_exported
                                      );
            $rc = 1;
        }
    }

    #determine AIX and Linux install servers
    my %AIX;
    my %Linux;
    foreach my $key (keys %::INSTALL_SERVERS)
    {
        foreach my $server (keys %{$::INSTALL_SERVERS{$key}})
        {
            my $os  = $::INSTALL_SERVERS{$key}{$server}{'OS'};
            my $dir = $::INSTALL_SERVERS{$key}{$server}{'dir'};
            if ($os eq "AIX")
            {
                $AIX{$dir}{$server} = 1;
            }
            elsif ($os eq "Linux")
            {
                $Linux{$dir}{$server} = 1;
            }
            else
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E1', 'EMsgINVALID_OSTYPE');
            }
        }
    }
    foreach my $dir (keys %AIX)
    {    #there are AIX install servers, this code will be done in rigel
        my $list     = join ",", keys %{$AIX{$dir}};
        my $real_dir = $dir_to_be_exported;

        #check to see if $dir is already exported
        $cmd = "$::DSH -n $list \"$::EXPORTFS | $::GREP $dir\" 2>&1";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        my @output = `$cmd`;
        my @unexport;
        foreach my $line (@output)
        {
            chomp $line;
            my ($hostname, $line) = split ':', $line;
            if ($line =~ m/$dir/)
            {
                push @unexport, $hostname;
            }
        }
        $real_dir =~ s/^\/csminstall/$dir/;
        if (@unexport)
        {
            $cmd = "$::DSH -n $list '$::EXPORTFS -i -u $real_dir'";
            NodeUtils->runcmd($cmd, 0);
        }
        $cmd = "$::DSH -n $list '$::EXPORTFS -i -o ro $real_dir\'";
        NodeUtils->runcmd($cmd, 0);
    }
    foreach my $dir (keys %Linux)
    {
        my $list     = join ",", keys %{$Linux{$dir}};
        my $real_dir = $dir_to_be_exported;

        #check to see if $dir is already exported
        $cmd = "$::DSH -n $list \"$::EXPORTFS | $::GREP $dir\" 2>&1";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        my @output = `$cmd`;
        my @unexport;
        foreach my $line (@output)
        {
            chomp $line;
            my ($hostname, $line) = split ':', $line;
            if ($line =~ m/$dir/)
            {
                push @unexport, $hostname;
            }
        }

        $real_dir =~ s/^\/csminstall/$dir/;

        if (@unexport)
        {
            $cmd = "$::DSH -n $list '$::EXPORTFS -u \*:$real_dir'";
            NodeUtils->runcmd($cmd, 0);
        }

        $cmd =
          "$::DSH -n $list \"$::EXPORTFS -o ro,no_root_squash \*:$real_dir\"";
        NodeUtils->runcmd($cmd, 0);
    }
    return ($rc);
}

#--------------------------------------------------------------------------------

=head3    getHost

    Return primary hostname and ip address for the given hostname or
    ip address and die if hostname resolution fails.

    Arguments:
        A string: either an Ip Address or a HostName.
    Returns:
         ($nodename, $nodeip) as strings
    Globals:
        $NodeUtils::errno
        $NodeUtils::Hosts
    Error:
        returns 0;
        sets NodeUtils::errno.
    Example:
        my ($nodename, $nodeip) = NetworkUtils->getHost($node);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub getHost
{
    my ($class, $arg, $live) = @_;

    #print "arg=$arg\n";
    my ($hostname, $ipaddr);
    if (!$NodeUtils::gethost{$arg})
    {    #not cached
        if (NetworkUtils->isIpaddr($arg))
        {
            if (defined $NodeUtils::Hosts{'IP'}{$arg})
            {

                #cached from /etc/hosts
                $hostname = $NodeUtils::Hosts{'IP'}{$arg};

                #print "using cached IP: $arg\n";
            }
            else
            {
                $ipaddr = $arg;
                my $packedaddr = inet_aton($ipaddr);
                $hostname = gethostbyaddr($packedaddr, AF_INET);
                if (!length($hostname) && $live)
                {
                    MessageUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET,
                                              "E27", 'EMsgBAD_IPADDR', $ipaddr);
                }
                if (!length($hostname))
                {
                    MessageUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET,
                                              "E27", 'EMsgBAD_IPADDR', $ipaddr);
                }

                #print "hostname=$hostname\n";
            }
        }
        else    # they specified a hostname
        {
            if (defined $NodeUtils::Hosts{'Hostname'}{$arg})
            {
                $hostname = $NodeUtils::Hosts{'Hostname'}{$arg}{'Name'};
                $ipaddr   = $NodeUtils::Hosts{'Hostname'}{$arg}{'IP'};

                #print "using cached Hostname: $arg\n";
            }
            else
            {
                $hostname = $arg;    # this may be a short hostname
                my ($name, $aliases, $addrtype, $length, @addrs) =
                  gethostbyname($hostname);
                if (!length($name) && $live)
                {
                    MessageUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET,
                                          "E28", 'EMsgBAD_HOSTNAME', $hostname);
                }
                if (!length($name))
                {
                    MessageUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET,
                                          "E28", 'EMsgBAD_HOSTNAME', $hostname);
                }

                #print "name=$name, # of addrs=$#addrs.\n";
                my $packedaddr = $addrs[0];
                $ipaddr   = inet_ntoa($packedaddr);
                $hostname =
                  $name; # they may have specified a shorter or non-primary name
                         #print "ipaddr=$ipaddr, hostname=$hostname\n";
            }
        }
        $NodeUtils::gethost{$arg}{'Name'} = $hostname;    #cache this for later
        $NodeUtils::gethost{$arg}{'IP'}   = $ipaddr;      #cache this for later
    }
    else
    {                                                     #cached
        $hostname = $NodeUtils::gethost{$arg}{'Name'};
        $ipaddr   = $NodeUtils::gethost{$arg}{'IP'};
    }
    return ($hostname, $ipaddr);
}

#--------------------------------------------------------------------------------

=head3    getHost_rveg

	NOTE:  This is a last minute correction for the rveg release,
	which will be distributed to CSM as a whole during rbac.

    Description:

	Returns primary hostname and ip address for a node.
	Either an IP address or a Hostname will be accepted as
	the single parameter.

	Uses a runcmd style error code and message string to return status.

	Status should be checked before accessing the return values, 
	which will both be undef if the command failed.


    Arguments:
        One scalar parameter:  either an Ip Address or a HostName.

    Returns:
	($host_name, $ip_addr)	- the hostname and ip address for parameter

	$::GETHOST_RC		- $::OK on success - this is zero
	$::GETHOST_MSG		- could contain a warning message on success
                                  but currently doesn't.

    Globals:
	$::GETHOST_RC
	@::GETHOST_MSG

    Error:
        Sets $::GETHOST_RC to:

		27  # - E27 bad ip address
		28  # - E28 bad host_name

		0 # - $::OK  on success 

	Sets @::GETHOST_MSG to one of:

		'EMsgBAD_IPADDR'
		'EMsgBAD_HOSTNAME'
	
    Example:

        my $node = $something; # either ip addres or hostname

        my ($host_name, $ip_address) = NetworkUtils->getHost($node);

	#  if you're not concerned with status and just want to know
	#  if things worked out, use something like this:

        # retun values are undef on error

        if ( $::GETHOST_RC != $::OK )
	{
	    next;
	}

 	# otherwise the $nodename and $nodeip are good.

    Comments:

        none

=cut

#--------------------------------------------------------------------------------

sub getHost_rveg
{
    my ($class, $arg) = @_;
    my ($hostname, $ipaddr, $packedaddr);

    # glob status
    $::GETHOST_RC  = $::OK;    # reassigned on error
    $::GETHOST_MSG = undef;    # reassigned on error

    if ($NodeUtils::gethost{$arg})
    {

        # print "returning cached values \n";
        $hostname = $NodeUtils::gethost{$arg}{'Name'};
        $ipaddr   = $NodeUtils::gethost{$arg}{'IP'};

        return ($hostname, $ipaddr);
    }

    # do the IP address parameter

    if (NetworkUtils->isIpaddr($arg))
    {
        $ipaddr = $arg;

        if (defined $NodeUtils::Hosts{'IP'}{$arg})
        {

            # print "returning cached IP: $ipaddr\n";
            $hostname = $NodeUtils::Hosts{'IP'}{$ipaddr};

            return ($hostname, $ipaddr);

        }

        # IP not cached
        $packedaddr = inet_aton($ipaddr);
        $hostname   = gethostbyaddr($packedaddr, AF_INET);

        if (!$hostname)    # return on error
        {
            $::GETHOST_RC  = 27;
            $::GETHOST_MSG = 'EMsgBAD_IPADDR';

            return (undef, undef);
        }

        # cache the  values
        $NodeUtils::gethost{$arg}{'Name'} = $hostname;
        $NodeUtils::gethost{$arg}{'IP'}   = $ipaddr;

        return ($hostname, $ipaddr);
    }

    # do the hostname parameter

    $hostname = $arg;

    if (defined $NodeUtils::Hosts{'Hostname'}{$hostname})
    {

        # print "using cached Hostname: $hostname\n";
        return ($hostname, $ipaddr);
    }

    # high overhead call...
    my ($name, $aliases, $addrtype, $length, @addrs) = gethostbyname($hostname);

    if (!$name)    # return on error
    {

        $::GETHOST_RC  = 28;
        $::GETHOST_MSG = 'EMsgBAD_HOSTNAME';
        return (undef, undef);
    }

    # print "found name=$name, and addrs=$#addrs.\n";

    $packedaddr = $addrs[0];
    $ipaddr     = inet_ntoa($packedaddr);
    $hostname   = $name;                    # may be a short name

    # cache the  values
    $NodeUtils::gethost{$hostname}{'Name'} = $hostname;
    $NodeUtils::gethost{$hostname}{'IP'}   = $ipaddr;

    return ($hostname, $ipaddr);

}

#--------------------------------------------------------------------------------

=head3    get_management_server

        Get the hostname of the management server.

        Arguments:
                $node_hostname
        Returns:
                ($hostname, $ipaddr) or $hostname, depending on the value of
                wantarray (?)
        Globals:
                $::GETSOURCEIP2TARGET
        Error:
                undefined
        Example:
                ($ms_hostname, $ipaddr) = NetworkUtils->get_management_server_by_hostname;
        Comments:
                Since the nodes might need to contact the management server through a
                different address than its primary hostname, we cannot just use the output
                of the hostname command here.  Use the getSourceIP2Target command instead.

                If we cannot determine the route to the node via getSourceIP2Target
                just return nothing.  This indicates that there is no way to get to the node.

                Note:  caller is reponsible for verifying return values.

=cut

#--------------------------------------------------------------------------------

sub get_management_server
{
    my ($class, $node_hostname) = @_;
    my $ipaddr   = "";
    my $hostname = "";

    # Move this to InstallDefs.pm.perl
    $::GETSOURCEIP2TARGET = "/opt/csm/csmbin/getSourceIP2Target";

    my $cmd    = "$::GETSOURCEIP2TARGET $node_hostname";
    my @output = NodeUtils->runcmd($cmd, 0);
    my $rc     = $::RUNCMD_RC;
    if (!$rc)    # If no errors
    {
        $ipaddr = $output[0];

        if ($ipaddr)
        {
            $hostname = NodeUtils->tryHost($ipaddr);
        }
    }

    if (wantarray) { return ($hostname, $ipaddr); }
    else { return $hostname; }
}

#--------------------------------------------------------------------------------

=head3    getRSCThostname

        This routine is used to always return the same hostname regardless 
        of hostname resolution settings. It returns the RSCT node id of the 
        current machine.

        Since the RSCT node id is unchangable by the user, the only way
        this could change is if RSCT is uninstalled, and reinstalled.
 

    Arguments:
        none
    Returns:
        $ref from lsrsrc-api call.
    Globals:
        none
    Error:
        none
    Example:
        none
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub getRSCThostname
{

    #my $outref =   NodeUtils->runcmd('CT_MANAGEMENT_SCOPE=1 /usr/bin/lsrsrc-api -s IBM.Host::::NodeNameList');
    #$outref =~ s/{|}//g;
    #now using the RSCT node id because the NodeNameList changes when the output of hostname changes
    my $outref = NodeUtils->runcmd("/usr/sbin/rsct/bin/lsnodeid");
    return $outref;
}

#--------------------------------------------------------------------------------

=head3    groupNFSnodes

        I wonder ...

        Arguments:
        \%DestNodeHash    - InstallServer must be an attr of each node in hash.
          Fanout value
        \@nodeArray    - If caller is the only dsh to a select group
        Returns:
                I wonder...
        Globals:
                none
        Error:
                none
        Example:
         my $fan = NetworkUtils->groupNFSnodes( \%nodeHash, $csmFanout );
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub groupNFSnodes
{
    my ($class, $DestNodeHash, $fanout, $nodes) = @_;

    #put nodes into hashes based on install server
    my %is;
    my @norm;
    my @slist;
    if ($nodes)
    {
        foreach my $node (@$nodes)
        {
            my $server = $$DestNodeHash{$node}{'InstallServer'};
            if ($server)
            {    #there is an install server for this node
                    #$is{$server}{$node}=1;
                if (!exists $is{$server})
                {    #haven't scene this one before
                    push @slist, $server;
                }
                push @{$is{$server}}, $node;
            }
            else
            {        #just uses the ms as an install server
                     #$norm{$node}=1;
                push @norm, $node;

                #print "pushed node $node onto norm\n";
            }
        }
    }
    else
    {                #using the entire hash of nodes
        foreach my $node (keys %$DestNodeHash)
        {
            my $server = $$DestNodeHash{$node}{'InstallServer'};
            if ($server)
            {        #there is an install server for this node
                     #$is{$server}{$node}=1;
                if (!exists $is{$server})
                {    #haven't scene this one before
                    push @slist, $server;
                }
                push @{$is{$server}}, $node;
            }
            else
            {        #just uses the ms as an install server
                     #$norm{$node}=1;
                push @norm, $node;

                #print "pushed node $node onto norm\n";
            }
        }
    }
    my %dsh;
    my $num_servers = (scalar @slist) + 1;
    my $num_nodes;
    if ($nodes) { $num_nodes = scalar @$nodes; }
    else { $num_nodes = scalar keys %$DestNodeHash; }

    #print "the number of install servers is $num_servers -1\nthe number of nodes is $num_nodes\nthe fanout is $fanout\n";
    my $count    = 0;
    my $group    = 0;
    my $fancount = 0;
  GROUPNODES: while ($num_nodes)
    {

        #print "in GROUPNODES list: count=$count\tgroup=$group\tnum_nodes=$num_nodes\n";
        if ($fancount == $fanout)
        {    #we are done with one list
            $fancount = 0;
            $group++;
        }
        if ($count > $num_servers)
        {
            $count = 0;
        }
        if ($count == $num_servers)
        {
            $count = 0;
        }
        if ($count == 0)
        {    #grab one from the normal list if any are left
            if (@norm)
            {

                #print "pushing onto group $group\n";
                push @{$dsh{$group}}, shift @norm;
                $num_nodes--;
                $fancount++;
                $count++;
                next GROUPNODES;
            }
        }
        while (!@{$is{$slist[$count - 1]}})
        {    #none in this array
                #print "server $slist[$count] is not defined\n";
                #print "incrementing count $count\n";
            $count++;
            if ($count == $num_servers || !($slist[$count - 1]))
            {
                next GROUPNODES;
            }
        }
        push @{$dsh{$group}}, shift @{$is{$slist[$count - 1]}};
        $fancount++;
        $num_nodes--;
        $count++;
    }
    my %fan = ();
    foreach my $g (keys %dsh)
    {
        @{$fan{$g}{'ALL'}} = @{$dsh{$g}};
        foreach my $node (@{$dsh{$g}})
        {
            my $server = $$DestNodeHash{$node}{'InstallServer'};
            my ($s_hostname, $dir) = split(/:/, $server);
            if (!$server)
            {
                $server = $$DestNodeHash{$node}{'ManagementServer'};
            }
            else
            {    #server exists
                if ($server !~ m/:/)
                {    #doesn't have a directory
                    $server .= ":$::SERVER_DIRECTORY";
                }
                if ($$DestNodeHash{$node}{'ManagementServer'} eq
                    $$DestNodeHash{$node}{'Hostname'})
                {

                    #this node is also the MS
                    $server = $$DestNodeHash{$node}{'ManagementServer'};
                }
                elsif ($s_hostname eq $$DestNodeHash{$node}{'ManagementServer'})
                {
                    $server = $$DestNodeHash{$node}{'ManagementServer'};
                }
            }
            push @{$fan{$g}{'Server'}{$server}}, $node;
        }
        my @s = keys %{$fan{$g}{'Server'}};

        #print "group $g has nodes @{$dsh{$g}}\tand servers @s \n";
    }
    return (\%fan);
}

#--------------------------------------------------------------------------------

=head3    nfsprobe

         Probe NFS status like the "nfs probe" command on redhat

        Arguments:
                none
        Returns:
                NFS service command (e.g. start, restart or reload).
        Globals:
                none
        Error:
                retCode from NodeUils->service("nfs","probe");
        Example:
                $serviceCmd = NetworkUtils->nfsprobe();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub nfsprobe
{
    my $CHECKPROC = "/sbin/checkproc";
    my $PIDOF     = "/sbin/pidof";
    my $NFSD      = "nfsd";
    my $MOUNTD    = "/usr/sbin/rpc.mountd";
    my $EXPORTS   = "/etc/exports";
    my $ETAB      = "/var/lib/nfs/etab";
    my ($nfsd_status, $mountd_status);
    my $cmd = NodeUtils->service("nfs", "probe");

    #my $output=NodeUtils->runcmd($cmd,0);
    my $output = `$cmd 2>&1`;
    if (!$?)
    {
        return $output;
    }

    NodeUtils->runcmd("$CHECKPROC -n $NFSD", -1);
    $nfsd_status = $::RUNCMD_RC;

    NodeUtils->runcmd("$CHECKPROC $MOUNTD", -1);
    $mountd_status = $::RUNCMD_RC;

    #either nfsd and mountd are not start
    if ($nfsd_status || $mountd_status)
    {
        return "start";
    }

    NodeUtils->runcmd("$PIDOF $NFSD", -1);
    $nfsd_status = $::RUNCMD_RC;

    NodeUtils->runcmd("$PIDOF $MOUNTD", -1);
    $mountd_status = $::RUNCMD_RC;

    if ($nfsd_status == 1 || $mountd_status == 1)
    {
        return "restart";
    }

    my $exports_mtime = (stat($EXPORTS))[9];
    my $etab_mtime    = (stat($ETAB))[9];

    if ($exports_mtime > $etab_mtime)
    {
        return "reload";
    }

    return "status";
}

#--------------------------------------------------------------------------------

=head3    service

    Send a service request to an init script.

    Arguments:
        $service  - a service name such as 'inetd','xinetd'
        $svcarg   - arguments for the service such as 'start',
                    'stop' or 'status'. 
    Returns:
        A full cli for the service script.
    Globals:
        none
    Error:
        none
    Example:
        none
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub service
{
    my ($class, $service, $svcarg) = @_;

    my $cmd;
    my $SVCCLI = "/sbin/service";
    my $SVCDIR = "/etc/init.d";
    my $distro = NodeUtils->distribution();

    #  On SuSE, nfs server script is "nfsserver".
    if ($distro =~ /(SuSE)|(SLES)/ && $service eq "nfs")
    {
        $service = "nfsserver";
    }

    if (-f $SVCCLI)
    {
        $cmd = "$SVCCLI $service $svcarg ";
    }
    else
    {
        $cmd = "$SVCDIR/$service $svcarg";
    }

    return $cmd;
}

#--------------------------------------------------------------------------------

=head3    start_nfs

        Starts NFS services on the managment server

        Arguments:
                none
        Returns:
                $::OK
                $::NOK
        Globals:
                $::PLTFRM 
                $::SERVICE
                %::INSTALL_SERVERS
        Error:
                $::NOK
        Example:
                if (NetworkUtils->start_nfs != 0) { blah; }_
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub start_nfs
{
    my ($cmd, $output);
    my $rc      = 0;
    my $exports = "/etc/exports";

    #my $PLTFRM = `uname`; chomp $PLTFRM;      #using $::PLTFRM instead
    if ($::MS_INSTALL_SERVER)
    {    #the MS is serving NFS files
            # Ensure nfs is running.
        if (!-s $exports)
        {

            # nfs will only start if /etc/exports has a size > 0
            open(EXPORTS, ">$exports")
              || NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCANT_READ_FILE', $exports);
            print EXPORTS "\n";
            close(EXPORTS);
        }

        # Start nfs if needed.
        if ($::PLTFRM eq "AIX")
        {
            my $rpc_mountd_up = 0;
            my $nfsd_up = 0;
            my @output = NodeUtils->runcmd("LANG=C /usr/bin/lssrc -s rpc.mountd", -1);
            if(!$::RUNCMD_RC)
            {
                my ($subsys, $group, $pid, $status) = split(' ', $output[1]);
                if (defined($status) && $status eq 'active')
                {
                    $rpc_mountd_up = 1;
                }
            }

            my @output = NodeUtils->runcmd("LANG=C /usr/bin/lssrc -s nfsd", -1);
            if(!$::RUNCMD_RC)
            {
                my ($subsys, $group, $pid, $status) = split(' ', $output[1]);
                if (defined($status) && $status eq 'active')
                {
                    $nfsd_up = 1;
                }
            }
 
            # Only call mknfs if rpc.mountd or nfsd are not active
            if ($rpc_mountd_up == 0 || $nfsd_up == 0)
            {
                my $cmd = "$::MKNFS -N  >/dev/null 2>&1";
                NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                          'NodeUtils', 'V', 'IMsgCMD', $cmd);
                my $rc = system($cmd) >> 8;
                if ($rc)
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
                }
            }

        }
        else
        {

            # We need modify start_nfs in rc.config on SuSE
            my $distro = NodeUtils->distribution();
            if ($distro =~ /SuSE/ || $distro =~ /SLES/)
            {
                my $RCCONFIG = "/etc/rc.config";
                my $s        = NodeUtils->readFile($RCCONFIG);
                $s =~
                  s/^\s*NFS_SERVER\s*=\s*"\s*[Nn][Oo]\s*"\s*$/NFS_SERVER="yes"/m;
                if (open(OUT, ">$RCCONFIG"))
                {
                    print OUT ($s);
                    close(OUT);
                }
                else
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                           'csminstall', 'I', 'IMsgShow_Output',
                                           'Can not open $RCCONFIG for write');
                }
            }

            # The output of the 'service nfs probe' tells
            #    what needs to be done to start nfs.  It returns either
            #    'start', 'restart', 'reload' or nothing.

            # SuSE Change
            #$output = `$::SERVICE nfs probe 2>&1`;
            $output = InstallUtils->nfsprobe();

            if ($output)
            {

                # SuSE Change
                #$cmd = "$::SERVICE nfs $output";
                $cmd = NodeUtils->service("nfs", $output);

                NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                          'NodeUtils', 'V', 'IMsgCMD', $cmd);
                $rc = system($cmd) >> 8;
                if ($rc)
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCommandFailed', $cmd, $rc);
                }
                else
                {

                    #wait for nfsserver to start on SLES7
                    sleep(1);
                }
            }
        }
    }
    if (defined %::INSTALL_SERVERS)
    {    #There are install servers serving files
            #get info about install servers
        my @make_ex        = ();
        my @AIX_servers    = ();
        my @RedHat_servers = ();
        my @SUSE_servers   = ();

        #my @Linux_servers = ();
        my %service;
        if (defined %{$::INSTALL_SERVERS{'isnode'}})
        {

            #if some of the install servers are nodes then this is a lot easier
            my @servers = keys %{$::INSTALL_SERVERS{'isnode'}};
            foreach my $s (@servers)
            {
                my $os     = $::INSTALL_SERVERS{'isnode'}{$s}{'OS'};
                my $distro = $::INSTALL_SERVERS{'isnode'}{$s}{'DISTRO'};
                if ($os eq "AIX")
                {
                    push @AIX_servers, $s;
                }
                elsif ($os eq "Linux")
                {
                    if ($distro =~ m/RedHat/)
                    {
                        push @RedHat_servers, $s;
                    }
                    elsif ($distro =~ m/SuSE/ || $distro =~ m/SLES/)
                    {    #suse?
                        push @SUSE_servers, $s;
                    }

                    #    push @Linux_servers, $s;
                }
            }
            if (@RedHat_servers)
            {
                my $list = join ',', @RedHat_servers;
                my $cmd =
                  "LANG=C $::DSH -n $list \"$::LS -s $exports; /sbin/service nfs probe;\"";
                NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                          'NodeUtils', 'V', 'IMsgCMD', $cmd);
                my @output = `$cmd`;
                foreach my $line (@output)
                {
                    chomp $line;
                    my ($server, $data) = split ":", $line, 2;
                    if ($line =~ m/$exports/)
                    {    #this is the ls line
                        if (   $line !~ m/"does not exist"/
                            || $line !~ m/"not found"/)
                        {

                            #then /etc/exports exists
                            $data =~ s/^\s+//;    #remove any leading whitespace
                            my ($size, $file) = split /\s+/, $data, 2;
                            if ($size == 0)
                            {
                                push @make_ex, $server;
                            }
                        }
                        else
                        {                         #/ext/exports does not exist
                            push @make_ex, $server;
                        }
                    }
                    elsif (   ($data =~ m/start/)
                           || ($data =~ m/restart/)
                           || ($data =~ m/reload/))
                    {
                        $data =~ s/^\s+//;        #remove any leading whitespace
                        push @{$service{$data}}, $server;
                    }
                }
            }
            if (@AIX_servers || @SUSE_servers)
            {
                my $list = join ',', @SUSE_servers, @AIX_servers;

                #make sure /exports is larger than 0
                my $cmd = "LANG=C $::DSH -n $list \"$::LS -s $exports;\" 2>&1";
                NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                          'NodeUtils', 'V', 'IMsgCMD', $cmd);
                my @output = `$cmd`;
                foreach my $line (@output)
                {
                    chomp $line;
                    my ($server, $data) = split ":", $line, 2;
                    if ($line =~ m/$exports/)
                    {    #this is the ls line
                        if (   $line !~ m/"does not exist"/
                            || $line !~ m/"not found"/)
                        {

                            #then /etc/exports exists
                            $data =~ s/^\s+//;    #remove any leading whitespace
                            my ($size, $file) = split /\s+/, $data, 2;
                            if ($size == 0)
                            {
                                push @make_ex, $server;
                            }
                        }
                        else
                        {                         #no file
                            push @make_ex, $server;
                        }
                    }
                }
            }
        }
        if (defined %{$::INSTALL_SERVERS{'notnode'}})
        {

            #size of /etc/exports
            #OS
            my $dsh_list = join ",", (keys %{$::INSTALL_SERVERS{'notnode'}});
            my $cmd =
              "LANG=C $::DSH -n $dsh_list \"$::LS -s $exports; /bin/uname; /bin/cat /etc/*release; /sbin/service nfs probe;\" 2>&1";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            my @output = `$cmd`;
            foreach my $line (@output)
            {
                chomp $line;
                my ($server, $data) = split ":", $line, 2;
                if ($line =~ m/$exports/)
                {    #this is the ls line
                    if ($line !~ m/"does not exist"/ || $line !~ m/"not found"/)
                    {

                        #then /etc/exports exists
                        $data =~ s/^\s+//;    #remove any leading whitespace
                        my ($size, $file) = split /\s+/, $data, 2;
                        if ($size == 0)
                        {
                            push @make_ex, $server;
                        }
                    }
                    else
                    {
                        push @make_ex, $server;
                    }
                }
                elsif ($data =~ m/AIX/)
                {
                    $::INSTALL_SERVERS{'notnode'}{$server}{'OS'} = "AIX";
                    push @AIX_servers, $server;
                }
                elsif ($data =~ m/Red Hat/)
                {
                    $::INSTALL_SERVERS{'notnode'}{$server}{'OS'}     = "Linux";
                    $::INSTALL_SERVERS{'notnode'}{$server}{'DISTRO'} = "RedHat";
                    push @RedHat_servers, $server;
                }
                elsif ($data =~ m/SuSE/)
                {
                    $::INSTALL_SERVERS{'notnode'}{$server}{'OS'}     = "Linux";
                    $::INSTALL_SERVERS{'notnode'}{$server}{'DISTRO'} = "SUSE";
                    push @SUSE_servers, $server;
                }
                elsif (   ($data =~ m/start/)
                       || ($data =~ m/restart/)
                       || ($data =~ m/reload/))
                {
                    $data =~ s/^\s+//;    #remove any leading whitespace
                    push @{$service{$data}}, $server;
                }
            }
        }

        #first make sure /etc/exports has a size > 0 on all of the install servers
        if (@make_ex)
        {
            my $ex_list = join ",", @make_ex;
            $cmd = "$::DSH -n $ex_list \"/bin/echo ' ' >> $exports\" 2>&1";
            NodeUtils->runcmd($cmd, 0);
        }
        if (@RedHat_servers)
        {

            #/sbin/service
            #output of service nfs probe
            #then start NFS
            #special steps required in SuSE / SLES case -- these will be implemented in rigel
            foreach my $value (keys %service)
            {
                my $list = join ",", @{$service{$value}};
                $cmd = "$::DSH -n $list \"/sbin/service nfs $value &\" 2>&1";
                NodeUtils->runcmd($cmd, 0);
            }
        }
        if (@SUSE_servers)
        {
            my $list = join ',', @SUSE_servers;

            #going to need to run sed command to edit /etc/rc.config on SUSE server
            my $RCCONFIG  = "/etc/rc.config";
            my $CHECKPROC = "/sbin/checkproc";
            my $PIDOF     = "/sbin/pidof";
            my $NFSD      = "nfsd";
            my $MOUNTD    = "/usr/sbin/rpc.mountd";
            my $EXPORTS   = "/etc/exports";
            my $ETAB      = "/var/lib/nfs/etab";

            #$cmd = qq($::DSH -n $list '/bin/sed -e s/.*NFS_SERVER.*/NFS_SERVER=\\"yes\\"/ $RCCONFIG | cat '-' > /tmp/csm.rcconfig; /bin/mv /tmp/csm.rcconfig $RCCONFIG; $CHECKPROC -n $NFSD; echo \"nfsd proc rc=\$?\"; $CHECKPROC $MOUNTD; /bin/echo \"mountd proc rc=\$?\"; $PIDOF $NFSD; echo \"pidof nfsd rc=\$?\"; $PIDOF $MOUNTD; echo \"pidof mountd rc=\$?\"; /usr/bin/stat -c %n=%Y $EXPORTS; /usr/bin/stat -c %n=%Y $ETAB;');
            $cmd =
              qq($::DSH -n $list '/bin/sed -e s/.*NFS_SERVER.*/NFS_SERVER=\\"yes\\"/ $RCCONFIG | cat '-' > /tmp/csm.rcconfig; /bin/mv /tmp/csm.rcconfig $RCCONFIG; $CHECKPROC -n $NFSD; echo \"nfsd proc rc=\$?\"; $CHECKPROC $MOUNTD; /bin/echo \"mountd proc rc=\$?\"; $PIDOF $NFSD; echo \"pidof nfsd rc=\$?\"; $PIDOF $MOUNTD; echo \"pidof mountd rc=\$?\";');
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            my @output = `$cmd`;
            my %service_hash;
            my %suse_service = ();
            foreach my $line (@output)
            {

                # print "LINE = $line";
                chomp $line;
                my $hostname;
                ($hostname, $line) = split ':', $line, 2;

                # print "HOSTNAME = $hostname\n";
                my $rc = (split '=', $line)[1];
                if ($line =~ m/nfsd proc/)
                {
                    $service_hash{$hostname}{'NFSD'}{'PROC'} = $rc;

                    #    print "NFSD PROC = $rc\n";
                }
                elsif ($line =~ m/mountd proc/)
                {
                    $service_hash{$hostname}{'MOUNTD'}{'PROC'} = $rc;

                    # print "MOUNTD PROC = $rc\n";
                }
                elsif ($line =~ m/pidof nfsd/)
                {
                    $service_hash{$hostname}{'NFSD'}{'PIDOF'} = $rc;

                    #    print "NFSD PIDOF = $rc\n";
                }
                elsif ($line =~ m/pidof mountd/)
                {
                    $service_hash{$hostname}{'MOUNTD'}{'PIDOF'} = $rc;

                    #    print "MOUNTD PIDOF = $rc\n";
                }
                elsif ($line =~ m/$EXPORTS/)
                {
                    $service_hash{$hostname}{'EXPORTS'} = $rc;
                }
                elsif ($line =~ m/$ETAB/)
                {
                    $service_hash{$hostname}{'ETAB'} = $rc;
                }
            }
            foreach my $hostname (keys %service_hash)
            {
                my $value;
                if (   $service_hash{$hostname}{'NFSD'}{'PROC'}
                    || $service_hash{$hostname}{'MOUNTD'}{'PROC'})
                {
                    $value = "start";
                }
                elsif (   $service_hash{$hostname}{'NFSD'}{'PIDOF'} == 1
                       || $service_hash{$hostname}{'MOUNTD'}{'PIDOF'} == 1)
                {
                    $value = "restart";
                }
                elsif ($service_hash{$hostname}{'EXPORTS'} >
                       $service_hash{$hostname}{'ETAB'})
                {
                    $value = "reload";
                }
                else
                {
                    $value = "status";
                }

                # print "VALUE=$value\n\n";
                push @{$suse_service{$value}}, $hostname;
            }
            foreach my $value (keys %suse_service)
            {
                my $list = join ',', @{$suse_service{$value}};
                my $cmd =
                  "$::DSH -n $list \"PATH=\$PATH:/sbin ; /etc/init.d/nfsserver $value;\"";

                NodeUtils->runcmd($cmd, 0);
            }
        }
        if (@AIX_servers)
        {
            my $list = join ',', @AIX_servers;
            $cmd = "$::DSH -n $list \"$::MKNFS -B >/dev/null\" 2>&1";
            NodeUtils->runcmd($cmd, 0);
        }
    }
    return ($rc);
}

#--------------------------------------------------------------------------------

=head3    tryHost

    Try to return the primary hostname for the given hostname or
    ip address.  If resolution fails, return the argument passed in.
        

    Arguments:
        hostname and/or ip address as a string
    Returns:
        primary hostname as a string or given argument if
        the hostname can's be resolved
 
    Globals:
        $NodeUtils::Hosts
        
    Error:
        undefined
    Example:
         my $hostname =
            NetworkUtils->tryHost($node, \$resolved);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub tryHost
{
    my ($class, $arg, $resolvedref) = @_;
    if (!defined $NodeUtils::tryhost{$arg})
    {
        my $host;
        $resolvedref && ($$resolvedref = 0);
        my $res = 0;    #for caching purposes
        if (NetworkUtils->isIpaddr($arg))
        {
            if (defined $NodeUtils::Hosts{'IP'}{$arg})
            {

                #cached from /etc/hosts
                #print "using cached IP: $arg\n";
                $host = $NodeUtils::Hosts{'IP'}{$arg};
                $resolvedref && ($$resolvedref = 1);
                $res = 1;
            }
            else
            {
                my $packedaddr = inet_aton($arg);
                $host = gethostbyaddr($packedaddr, AF_INET);
                if (!length($host)) { $host = $arg; }
                else { $resolvedref && ($$resolvedref = 1); $res = 1; }
            }
        }
        else    # they specified a hostname, but it may be a short name
        {
            if (defined $NodeUtils::Hosts{'Hostname'}{$arg})
            {

                #cached from /etc/hosts
                #print "using cached hostname: $arg\n";
                $host = $NodeUtils::Hosts{'Hostname'}{$arg}{'Name'};
                $resolvedref && ($$resolvedref = 1);
                $res = 1;
            }
            else
            {
                my ($hostname, $aliases, $addrtype, $length, @addrs) =
                  gethostbyname($arg);
                if (length($hostname))
                {
                    $host = $hostname;
                    $resolvedref && ($$resolvedref = 1);
                    $res = 1;
                }
                else { $host = $arg; }
            }
        }
        $NodeUtils::tryhost{$arg}{'Name'} = $host;    #cache this for later
        if ($resolvedref)
        {
            $NodeUtils::tryhost{$arg}{'resolved'} = $$resolvedref;
        }
        else { $NodeUtils::tryhost{$arg}{'resolved'} = $res; }
        return $host;
    }
    else
    {
        $resolvedref && ($$resolvedref = $NodeUtils::tryhost{$arg}{'resolved'});
        return $NodeUtils::tryhost{$arg}{'Name'};     #use cached version
    }
}

#--------------------------------------------------------------------------------

=head3    unexport_csminstall

        NFS unexport the /csminstall directory on the Management Server

        Arguments:
                $dir_to_be_exported
        Returns:
        0 - All was successful.
        1 - An error occured.
        Globals:
                $::PLTFRM 
                %::MS_INSTALL_SERVER
                %::INSTALL_SERVERS
        Error:
               returns 1
        Example:
                if(NetworkUtils->unexport_csminstall('/csminstall/csm') != 0) {
                    blah;
                }
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub unexport_csminstall
{
    my ($class, $dir_to_be_unexported) = @_;
    my $cmd;
    my $rc = 0;

    #my $PLTFRM = `uname`; chomp $PLTFRM;      #using $::PLTFRM instead
    if ($::MS_INSTALL_SERVER)
    {    #the MS is serving NFS files
        if ($::PLTFRM eq "AIX")
        {

            #$cmd = "$::EXPORTFS -i -u /csminstall";
            $cmd = "$::EXPORTFS -i -u $dir_to_be_unexported";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            $rc = system($cmd) >> 8;
            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
        }
        else
        {

            #$cmd = "$::EXPORTFS -u \*:/csminstall";
            $cmd = "$::EXPORTFS -u \*:$dir_to_be_unexported";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            $rc = system($cmd) >> 8;
            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCommandFailed', $cmd, $rc);
            }
        }
    }

    #determine AIX and Linux install servers
    my %AIX;
    my %Linux;
    foreach my $key (keys %::INSTALL_SERVERS)
    {
        foreach my $server (keys %{$::INSTALL_SERVERS{$key}})
        {
            my $os  = $::INSTALL_SERVERS{$key}{$server}{'OS'};
            my $dir = $::INSTALL_SERVERS{$key}{$server}{'dir'};
            if ($os eq "AIX")
            {
                $AIX{$dir}{$server} = 1;
            }
            elsif ($os eq "Linux")
            {
                $Linux{$dir}{$server} = 1;
            }
            else
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E1', 'EMsgINVALID_OSTYPE');
            }
        }
    }
    foreach my $dir (keys %AIX)
    {    #there are AIX install servers, this code will be done in rigel
        my $list = join ",", keys %{$AIX{$dir}};
        my $real_dir = $dir_to_be_unexported;
        $real_dir =~ s/^\/csminstall/$dir/;
        $cmd = "$::DSH -n $list '$::EXPORTFS -i -u $real_dir'";
        NodeUtils->runcmd($cmd, 0);
    }
    foreach my $dir (keys %Linux)
    {
        my $list = join ",", keys %{$Linux{$dir}};
        my $real_dir = $dir_to_be_unexported;
        $real_dir =~ s/^\/csminstall/$dir/;
        $cmd = "$::DSH -n $list '$::EXPORTFS -u \*:$real_dir'";
        NodeUtils->runcmd($cmd, 0);
    }
    return ($rc);
}

#--------------------------------------------------------------------------------

=head2    Remote Shells - RSH, SSH 

=cut

#--------------------------------------------------------------------------------

=head3    checkHOMEforSSHperm

        Checks attributes of root home directory.

        Arguments:
                none
        Returns:
                1 - if $HOME has the wrong permissions
                0 - if permissions are correct.
        Globals:
                none
        Error:
                1 - wrong permissions on root's  $HOME
        Example:
                $rc = NetworkUtils->checkHOMEforSSHperm();
        Comments:
                If the permessions on $HOME are incorrect, then SSH
                should not be setup.

=cut

#--------------------------------------------------------------------------------

sub checkHOMEforSSHperm
{
    my $home      = InstallUtils->getRootHomeDir();
    my $mode      = (stat($home))[2];
    my $real_mode = sprintf "%04o", $mode & 07777;
    my @perm      = split '', $real_mode;
    if (   ($perm[2] == 2)
        || ($perm[2] == 6)
        || ($perm[2] == 7)
        || ($perm[3] == 2)
        || ($perm[3] == 6)
        || ($perm[3] == 7))
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgWrongHomePermissions', $home);
        return 1;
    }
    else
    {
        return 0;
    }
}

#--------------------------------------------------------------------------------

=head3    checkRSReachability

        Checks a list of machines (they do not need to be CSM nodes) to make
        sure they can be reached via dsh.

        Arguments:
                reference to an array of hostnames
        Returns:
                reference to an array of unreachable nodes
        Globals:
                $::REMOTE_SHELL
        Error:
                none
        Example:
                 my $unreachable =
                   NetworkUtils->checkRSReachability(\@install_servers);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub checkRSReachability
{

    my ($class, $machines) = @_;
    $::REMOTE_SHELL = InstallUtils->getRemoteShell();
    my $file =
      InstallUtils->make_node_list_file($machines)
      ;    #put all dest nodes in tmp file
    my $cmd;
    (my $cmd_basename = $::REMOTE_SHELL) =~ s:^.*/::;
    if ($cmd_basename ne "rsh" && (InstallUtils->supportedSSHversion()))
    {      #can do SSH with options
        $cmd = "$::REMOTESHELL_EXPECT -ds $file";
    }
    else
    {
        $cmd = "$::REMOTESHELL_EXPECT -d $file";
    }
    my $value = InstallUtils->supportedSSHversion();
    NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils', 'V',
                              'IMsgCMD', $cmd);
    my @output = `$cmd 2>&1`;
    InstallUtils->close_delete_file($::NODE_LIST_FILE, $file); #delete node file
    my %reachable;
    my @unreachable;
    foreach my $line (@output)
    {
        chomp $line;
        my @parts = split ":", $line;
        if ($parts[1] =~ m/test.success/)
        {    #this node is reachable
            $reachable{$parts[0]} = 1;
        }
    }

    foreach my $n (@$machines)
    {
        if (!$reachable{$n})
        {
            push @unreachable, $n;
        }
    }
    if (@unreachable)
    {
        return (\@unreachable);
    }
}

#--------------------------------------------------------------------------------

=head3    cpSSHFiles

        Returns the locations of authorized keys in /csminstall.

        Arguments:
                none
        Returns:
                ($authorizedKeys1, $authorizedKeys2)
        Globals:
                none
        Error:
                returns 1 or exits on message E value
        Example:
                $rc = NetworkUtils->cpSSHFiles();

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub cpSSHFiles
{
    my ($cmd, $rc);
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'V', 'IMsgCopySSHKeys');
    my $SSHdir = "/csminstall/csm/config/.ssh";
    if (!(-d "/csminstall/csm/config"))
    {
        $cmd = "$::MKDIR /csminstall/csm/config";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->message('E', 'EMsgNO_CreateDir',
                               "/csminstall/csm/config");
        }
    }
    if (!(-d "$SSHdir"))
    {
        $cmd = "$::MKDIR $SSHdir";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', "E", 'EMsgNO_CreateDir',
                                      $SSHdir);
        }
    }
    my $home             = InstallUtils->getRootHomeDir();
    my $authorized_keys  = "$SSHdir/authorized_keys";
    my $authorized_keys2 = "$SSHdir/authorized_keys2";
    if (   !(-e "$home/.ssh/identity.pub")
        || !(-e "$home/.ssh/id_rsa.pub")
        || !(-e "$home/.ssh/id_dsa.pub"))
    {
        return 1;
    }

    $cmd = "$::COPY $home/.ssh/identity.pub $authorized_keys";
    NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils', 'V',
                              'IMsgCMD', $cmd);
    `$cmd 2>&1`;
    $rc = $? >> 8;
    if ($rc)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $cmd, $rc);
    }

    $cmd = "$::COPY $home/.ssh/id_rsa.pub $authorized_keys2";
    NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils', 'V',
                              'IMsgCMD', $cmd);
    `$cmd 2>&1`;
    $rc = $? >> 8;
    if ($rc)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $cmd, $rc);
    }

    $cmd = "$::CAT $home/.ssh/id_dsa.pub >> $authorized_keys2";
    NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils', 'V',
                              'IMsgCMD', $cmd);
    `$cmd 2>&1`;
    $rc = $? >> 8;
    if ($rc)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $cmd, $rc);
    }

    if (!defined $::HAMODE)
    {
        my $outref =
          NodeUtils->runrmccmd('lsrsrc-api', "-i", "-s IBM.DmsCtrl::::HAMode");
        $::HAMODE = $$outref[0];
    }
    if ($::HAMODE == 1)
    {    #on an active HAMS management server
            #get management server attribute for node on other ms
        require HAMS;
        my ($pvals, $bvals) = HAMS->getAttributes("/var/opt/hams/hamsdef");
        my $activems = HAMS->determineActive($pvals, $bvals);
        if ($activems ne "1")
        {
            my $primary = $$pvals{'hostname'};
            my $backup  = $$bvals{'hostname'};
            my $inactivems;
            if ($activems eq $primary) { $inactivems = $backup; }
            else { $inactivems = $primary; }

            #my $inactivems = HAMS->getManagementServerAttr($activems);
            if ($inactivems ne "")
            {
                NodeUtils->runcmd(
                    "/opt/csm/bin/dsh -n $inactivems /opt/csm/csmbin/remoteshell.expect -k"
                    );

                #my $auth_key = "$SSHdir/inactivems_auth";
                #my $auth_key2 = "$SSHdir/inactivems_auth2";
                NodeUtils->runcmd(
                              "/usr/bin/scp $inactivems:.ssh/\*.pub $SSHdir/.");
                NodeUtils->runcmd(
                             "$::CAT $SSHdir/identity.pub >> $authorized_keys");
                NodeUtils->runcmd(
                              "$::CAT $SSHdir/id_rsa.pub >> $authorized_keys2");
                NodeUtils->runcmd(
                              "$::CAT $SSHdir/id_dsa.pub >> $authorized_keys2");
                NodeUtils->runcmd("$::RM -f $SSHdir/\*.pub");
            }
        }
    }
    if (!(-e "$authorized_keys") || !(-e "$authorized_keys2"))
    {
        return 1;
    }
    return ($authorized_keys, $authorized_keys2);
}

#--------------------------------------------------------------------------------

=head3    getRemoteShell

        Get the path of the remote shell if avialble.

        Arguments:
                none
        Returns:
                path of the remote shell
        Globals:
                none
        Error:
                1 - couldn't connect to remote shell
        Example:
                $::REMOTE_SHELL = NetworkUtils->getRemoteShell();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getRemoteShell
{

    # set local scope because we only want classes on the mgmt svr
    $ENV{'CT_MANAGEMENT_SCOPE'} = 1;

    # todo: remove when lsrsrc-api converts to above
    $ENV{'CT_SESSION_SCOPE'} = 1;
    if (NodeUtils->isMgmtSvr())
    {    #only defined on managment server
        if (!$ENV{'DSH_REMOTE_CMD'})
        {
            my $outref =
              NodeUtils->runrmccmd('lsrsrc-api', "-i",
                                   "-s IBM.DmsCtrl::::RemoteShell");
            return $$outref[0];
        }
        else
        {
            return $ENV{'DSH_REMOTE_CMD'};
        }
    }
    return 1;
}

#--------------------------------------------------------------------------------

=head3    getRootHomeDir

        Get the path the root user home directory from /etc/passwd.

        Arguments:
                none
        Returns:
                path to root user home directory.
        Globals:
                none
        Error:
                none
        Example:
                $myHome = NetworkUtils->getRootHomeDir();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getRootHomeDir
{
    my @root = split ':', (`/bin/grep ^root /etc/passwd 2>&1`);
    my $home = $root[5];
    return $home;
}

#--------------------------------------------------------------------------------

=head3    getSetupRemoteShell

        Get the value of SetupRemoteShell in CSM database.

        Arguments:
                none
        Returns:
                value from database
        Globals:
                none
        Error:
                undefined
        Example:
                $::SETUP_REMOTE_SHELL =
                    NetworkUtils->getSetupRemoteShell();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getSetupRemoteShell
{

    # set local scope because we only want classes on the mgmt svr
    $ENV{'CT_MANAGEMENT_SCOPE'} = 1;

    # todo: remove when lsrsrc-api converts to above
    $ENV{'CT_SESSION_SCOPE'} = 1;
    if (NodeUtils->isMgmtSvr())
    {    #only defined on managment server
        my $outref =
          NodeUtils->runrmccmd('lsrsrc-api', "-i",
                               "-s IBM.DmsCtrl::::SetupRemoteShell");
        return $$outref[0];
    }
}

#--------------------------------------------------------------------------------

=head3    installSSHFiles

        Installs SSH files

        Arguments:
                $filename_of_authorized_keys
                $filename_of_authorized_keys2
        Returns:
                $::OK
        Globals:
                none
        Error:
                undefined
        Example:
                NetworkUtils->installSSHFiles ( $authorized_keys,
                                                $authorized_keys2);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub installSSHFiles
{
    my ($class, $authorized_keys, $authorized_keys2) = @_;
    my ($cmd, $rc);
    my $home                  = InstallUtils->getRootHomeDir();
    my $dest_dir              = "$home/.ssh";
    my $dest_authorized_keys  = "$dest_dir/authorized_keys";
    my $dest_authorized_keys2 = "$dest_dir/authorized_keys2";

    umask(0077);
    if (!-d "$dest_dir")
    {

        # create a local directory
        $cmd = "$::MKDIR -p $dest_dir";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {

            # Could not create $::CSMINSTDIR directory.
            NodeUtils->message('E', 'EMsgNO_CreateDir', $dest_dir);
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       "E",
                                      'EMsgNO_CreateDir', $dest_dir
                                      );
            return $::NOK;
        }
        else
        {
            chmod 0700, $dest_dir;
        }
    }

    umask(0133);
    if (-e "$dest_authorized_keys")
    {
        $cmd = "$::CAT $authorized_keys >> $dest_authorized_keys";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
    }
    else
    {

        #just copy the keys
        my $cmd = "$::COPY $authorized_keys $dest_authorized_keys";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
        chmod 0644, $dest_authorized_keys;
    }
    if (-e "$dest_authorized_keys2")
    {
        $cmd = "$::CAT $authorized_keys2 >> $dest_authorized_keys2";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
    }
    else
    {

        #just copy the keys
        my $cmd = "$::COPY $authorized_keys2 $dest_authorized_keys2";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
        chmod 0644, $dest_authorized_keys2;
    }
}

#--------------------------------------------------------------------------------

=head3    rmNodesKnownHosts

        Removes SSH known hosts

        Arguments:
                \@node_hostnames
                 file name (optional)
        Returns:
                1 - error
                0 - success
        Globals:
                none
        Error:
                1
        Example:
                NetworkUtils->rmNodesKnownHosts(\@nodes);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub rmNodesKnownHosts
{
    my ($class, $ref_nodes, $tmpKnownHosts) = @_;
    my @node_hostnames = @$ref_nodes;
    my $home           = InstallUtils->getRootHomeDir();
    my @all_names;
    my $return = 0;
    foreach my $n (@node_hostnames)
    {
        my @parts = split /\./, $n;
        my $name = shift @parts;
        push @all_names, $name;
        foreach my $ext (@parts)
        {
            $name = "$name.$ext";
            push @all_names, $name;
        }

        #get the IP
        my $ip = inet_ntoa(inet_aton($n));
        push @all_names, $ip;
    }

    #create the sed command
    my $sed = "/bin/sed -e ";
    $sed .= "\"";
    foreach my $n (@all_names)
    {
        $sed .= "/^$n\[,| ]/d; ";
    }
    chop $sed;    #get rid of last space
    $sed .= "\"";
    my $sed2 = $sed;
    my $file = "$home/.ssh/$$";
    while (-e $file)
    {
        $file = InstallUtils->CreateRandomName($file);
    }
    if (defined $tmpKnownHosts)
    {             #use a temporary known hosts
        if (-e $tmpKnownHosts)
        {
            $sed .= " $tmpKnownHosts";
            $sed .= " > $file";
            my $printsed = $sed;
            $printsed =~ s/"//g;    #"
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $printsed);
            `$sed 2>&1`;
            my $rc = $? >> 8;
            if ($rc)
            {
                $return = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCANT_RUN', $printsed, $rc);
            }
            my $cp = "$::MV $file $tmpKnownHosts";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cp);
            `$cp 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                $return = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                   'csminstall', 'E', 'EMsgCANT_RUN', $cp, $rc);
            }

            # system("$::RM -f $file");
        }
    }
    else
    {    #use real known hosts
        if (-e "$home/.ssh/known_hosts")
        {
            $sed .= " $home/.ssh/known_hosts";
            $sed .= " > $file";
            my $printsed = $sed;
            $printsed =~ s/"//g;    #"
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $printsed);
            `$sed 2>&1`;
            my $rc = $? >> 8;
            if ($rc)
            {
                $return = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'E', 'EMsgCANT_RUN', $printsed, $rc);
            }
            my $cp = "$::MV $file $home/.ssh/known_hosts";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cp);
            `$cp 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                $return = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                   'csminstall', 'E', 'EMsgCANT_RUN', $cp, $rc);
            }

            #system("$::RM -f $file");
        }
        if (-e "$home/.ssh/known_hosts2")
        {
            $sed2 .= " $home/.ssh/known_hosts2";
            $sed2 .= " > $file";
            my $printsed2 = $sed2;
            $printsed2 =~ s/"//g;    #"
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $printsed2);
            `$sed2 2>&1`;
            my $rc = $? >> 8;
            if ($rc)
            {
                $return = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                            'csminstall', 'E', 'EMsgCANT_RUN', $printsed2, $rc);
            }
            my $cp = "$::MV $file $home/.ssh/known_hosts2";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cp);
            `$cp 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                $return = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                   'csminstall', 'E', 'EMsgCANT_RUN', $cp, $rc);
            }

            #system("$::RM -f $file");
        }
    }
    return $return;
}

#--------------------------------------------------------------------------------

=head3    setupAIXRSH

        Setup RSH on AIX Managment Server

        Arguments:
                $fullHostNameofManagmentServer
        Returns:
                none
        Globals:
                none
        Error:
                none
        Example:
                NetworkUtils->setupAIXRSH($::csm_server);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub setupAIXRSH
{
    my ($class, $ms, $inactivems) = @_;
    umask(0177);
    my $home = InstallUtils->getRootHomeDir();
    my ($cmd, $rc);
    $cmd = "/bin/grep \"^$ms root\" $home/.rhosts";
    `$cmd 2>&1`;
    $rc = $? >> 8;
    if ($rc)
    {
        $cmd = "/bin/echo $ms root >> $home/.rhosts";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;

        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
    }
    if (defined $inactivems)
    {
        $cmd = "/bin/grep \"^$inactivems root\" $home/.rhosts";
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            $cmd = "/bin/echo $inactivems root >> $home/.rhosts";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            `$cmd 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
        }
    }
    chmod 0600, "$home/.rhosts";
}

#--------------------------------------------------------------------------------

=head3    setupLinuxRSH

        Setup RSH on Linux Mangement Server

        Arguments:
                $fullHostNameofManagmentServer
        Returns:
        none
        Globals:
                none
        Error:
                undefined
        Example:
                NetworkUtils->setupLinuxRSH($::csm_server);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub setupLinuxRSH
{
    my ($class, $ms, $inactivems) = @_;
    umask(0177);
    my $home = InstallUtils->getRootHomeDir();
    my ($cmd, $rc);

    # SuSE Changes
    # Setup rsh in inetd on SuSE
    my $distroname = NodeUtils->get_DistributionName;
    if (($distroname =~ /SuSE/) || ($distroname =~ /SLES/))
    {
        `/bin/rpm -q inetd 2>&1`;
        if ($? >> 8)
        {    #setup rsh by xinetd
            $cmd =
              "/bin/sed -e \"s/disable.*=.*yes/disable = no/\" /etc/xinetd.d/rsh";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            my @rsh = `$cmd 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
            open(RSH, ">/etc/xinetd.d/rsh")
              or NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                 'csminstall', "E", 'EMsgCANT_WRITE_FILE', "/etc/xinetd.d/rsh");
            print RSH @rsh;
            close RSH;
            chmod 0600, "/etc/xinetd.d/rsh";
            $cmd = "/etc/init.d/xinetd restart";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            `$cmd 2>&1`;
            $rc = $? >> 8;

            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
            if (-e "/etc/securetty")
            {
                $cmd = "/bin/grep rsh /etc/securetty";
                `$cmd 2>&1`;
                $rc = $? >> 8;
                if ($rc)
                {
                    `/bin/echo rsh >> /etc/securetty`;
                }
            }
        }
        else
        {
            $cmd = "/bin/sed -e \"s/#.*shell/shell/\" /etc/inetd.conf";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            my @rsh = `$cmd 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
            open(RSH, ">/etc/inetd.conf")
              or NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                   'csminstall', "E", 'EMsgCANT_WRITE_FILE', "/etc/inetd.conf");
            print RSH @rsh;
            close RSH;
            chmod 0600, "/etc/inetd.conf";
            $cmd = "/etc/rc.d/inetd restart";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            `$cmd 2>&1`;
            $rc = $? >> 8;

            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
        }
    }
    else
    {
        $cmd =
          "/bin/sed -e \"s/disable.*=.*yes/disable = no/\" /etc/xinetd.d/rsh";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        my @rsh = `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
        open(RSH, ">/etc/xinetd.d/rsh")
          or NodeUtils->messageFromCat(
                                       'csmInstall.cat',
                                       $::MSGMAPPATH,
                                       'csminstall',
                                       "E",
                                       'EMsgCANT_WRITE_FILE',
                                       "/etc/xinetd.d/rsh"
                                       );
        print RSH @rsh;
        close RSH;
        chmod 0600, "/etc/xinetd.d/rsh";
        $cmd = "/sbin/service xinetd restart";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;

        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
        if (-e "/etc/securetty")
        {
            $cmd = "/bin/grep rsh /etc/securetty";
            `$cmd 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                `/bin/echo rsh >> /etc/securetty`;
            }
        }
    }

    # End of SuSE change

    $cmd = "/bin/grep \"^$ms root\" $home/.rhosts";
    `$cmd 2>&1`;
    $rc = $? >> 8;
    if ($rc)
    {
        $cmd = "/bin/echo $ms root >> $home/.rhosts";
        NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'NodeUtils',
                                  'V', 'IMsgCMD', $cmd);
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_RUN', $cmd,
                                      $rc);
        }
    }
    if (defined $inactivems)
    {
        $cmd = "/bin/grep \"^$inactivems root\" $home/.rhosts";
        `$cmd 2>&1`;
        $rc = $? >> 8;
        if ($rc)
        {
            $cmd = "/bin/echo $inactivems root >> $home/.rhosts";
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH,
                                      'NodeUtils', 'V', 'IMsgCMD', $cmd);
            `$cmd 2>&1`;
            $rc = $? >> 8;
            if ($rc)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall', 'E', 'EMsgCANT_RUN', $cmd, $rc);
            }
        }
    }
    chmod 0600, "$home/.rhosts";
}

#--------------------------------------------------------------------------------

=head3    setupRemoteShellforFullInstall

        Sets up the remote shell across a list of nodes.

        Arguments:
                Reference to an array of nodeNames
        Returns:
                1 - error
                0 - success
        Globals:
                $::REMOTE_SHELL         - shell to configure
                $SETUP_REMOTE_SHELL     - bool: 1 == setup; 0 = don't setup
        Error:
                1
        Example:
                if (NetworkUtils->setupRemoteShellforFullInstall(\@::NODELIST) != 0) {
                    blah;
                }
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub setupRemoteShellforFullInstall
{
    my $rc = 0;

    my ($class, $ref_nodes) = @_;
    my @node_hostnames = @$ref_nodes;

    # SETUP_REMOTE_SHELL controls whether or not to set up the remote shell
    # on the nodes.  It is used when creating the config_file.
    #     0=do not set up remote shell
    #     1=set up whichever remote shell is listed in $::REMOTE_SHELL
    $::SETUP_REMOTE_SHELL = InstallUtils->getSetupRemoteShell();

    # If the SetupRemoteShell attribute is set to 0 (or null) in DMSCTRL,
    # don't do any remote shell setup.
    if (!$::SETUP_REMOTE_SHELL)
    {
        return $rc;
    }

    $::REMOTE_SHELL = InstallUtils->getRemoteShell();

    # If the REMOTE_SHELL is set to 1, there was an error getting it from
    # the dmsctrl.  Don't bother setting up the remote shell.
    if ($::REMOTE_SHELL == 1)
    {
        return $::NOK;
    }

    (my $cmd_basename = $::REMOTE_SHELL) =~ s:^.*/::;
    if ($cmd_basename eq "rsh")
    {
        $::SETUP_REMOTE_SHELL = 1;
    }
    else    # Attempt to set up ssh
    {
        if (InstallUtils->supportedSSHversion())
        {

            # Check permissions on home directory
            $rc = InstallUtils->checkHOMEforSSHperm();
            if ($rc)
            {
                $::SETUP_REMOTE_SHELL = 0;
                return $rc;
            }

            # Setup ssh keys
            NodeUtils->runcmd("/opt/csm/csmbin/remoteshell.expect -k", 0);

            # Copy ssh keys to /csminstall
            $rc = InstallUtils->cpSSHFiles();
            if ($rc == 1)
            {
                $::SETUP_REMOTE_SHELL = 0;
                return $rc;
            }

            # Clean up the Known Hosts file for each node so that when the
            # nodes are reinstalled, the hosts files will be regenerated.
            #$rc = InstallUtils->rmNodesKnownHosts(\@node_hostnames);
            #the rmNodesKnownHosts step was moved to GatherSSHHostKeys

            # ssh was set up properly, so set it up on the nodes.
            $::SETUP_REMOTE_SHELL = 1;

            # Add RemoteShell to config_file
        }
    }

    return $rc;
}

#--------------------------------------------------------------------------------

=head3    supportedSSHversion

        Check if SSH version is supported by CSM install.

        Arguments:
                Requires proper valued in $::REMOTE_SHELL
        Returns:
                1 - remote shell is a supported version 
                0 - unsupported vesion
        Globals:
                $::REMOTE_SHELL
        Error:
                0
        Example:
                my $sshOk = 
                    NetworkUtils->supportedSSHversion();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub supportedSSHversion
{

    #check if its a supported version of OpenSSH
    my $ssh_check = "$::REMOTE_SHELL -V";
    my @ssh_res   = `$ssh_check 2>&1`;
    my $ssh_rc    = $? >> 8;
    if (!$ssh_rc)
    {    #successful
        if ($ssh_res[0] =~ m/OpenSSH.(\d)\.\d/)
        {    #we can set this up
            if ($1 >= 2)
            {
                if (wantarray)
                {
                    return (1, $1);
                }
                else
                {
                    return 1;
                }
            }
        }
        else
        {
            return 0;
        }
    }
}

#--------------------------------------------------------------------------------

=head2    TFTP USER Support

=cut

#--------------------------------------------------------------------------------

=head3    check4InstalledTftpServers

	Checks the current install for tftp rpms

        Arguments:
                $stars
        Returns:
               @tftpRpms  - array of rpms found.
        Globals:
                $::TFTPUSER
		$default_tftp_server_name
        Error:
                error count
        Example:
                 NetworkUtils->check4InstalledTftpServers();
        Comments:
                none


=cut

#--------------------------------------------------------------------------------

sub check4InstalledTftpServers
{

    # check if there are any tftp rpms installed
    my ($class, $stars) = @_;
    my $cmd = "rpm -qa | grep tftp";

    # check and see if any tftp rpms are installed:
    my @tftpRpms = NodeUtils->runcmd($cmd, -1);
    if ($::RUNCMD_RC eq 0)
    {

        # first check:  If our default tftp server is installed, then
        # we can just skip:
        foreach (@tftpRpms)
        {
            my $temp = $_;
            if (grep (/^$temp$/, @::default_tftp_server_name))
            {

                # the default was found:
                MessageUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                      @::default_tftp_server_name);
                return (1, @tftpRpms)
                  ;    # the 1 means that it is the default server
            }
        }
        if ($stars)
        {
            print "\n";
            print "*" x 80 . "\n";
        }

        # how many of them are actually installed?
        if ($#tftpRpms ne -1)
        {
            MessageUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                  @::default_tftp_server_name);
        }
        else
        {
            MessageUtils->message('V', 'IMsgRPM_ALREADY_INSTALLED',
                                  @::default_tftp_server_name);
        }
        foreach (@tftpRpms) { print "\t$_\n"; }
    }
    return (0, @tftpRpms);
}

#--------------------------------------------------------------------------------

=head3    chTftpUserPermissions

        Change permissions on TFTP user files.
	Support routine for calls to find.

        Arguments:
                none
        Returns:
               none
        Globals:
                $::TFTPUSER
    		$::TFTPGROUP
        Error:
                error count
        Example:
		 find(\&chTftpUserPermissions, $dir);
        Comments:
 		none

=cut

#--------------------------------------------------------------------------------

sub chTftpUserPermissions
{

    # these guys seem to be in the wrong place.
    $::TFTPUSER  = "tftpd";
    $::TFTPGROUP = $::TFTPUSER;

    if (NetworkUtils->testTftpUser == 0) { NetworkUtils->createTftpUser; }

    my $filename = $File::Find::name;

    if (-f $filename)
    {
        NodeUtils->runcmd("chmod $::filePermissions $filename");
    }
    elsif (-d $filename)
    {
        NodeUtils->runcmd("chmod $::dirPermissions $filename");
    }
    else
    {
        print "---> $filename is not a file nor a directory.\n";
        return;
    }

    # change owner and group:
    NodeUtils->runcmd("chown $::TFTPUSER $filename");
    NodeUtils->runcmd("chgrp $::TFTPGROUP $filename");

}

#--------------------------------------------------------------------------------

=head3    configureTftp

        Configure the default tftp server 

        Arguments:
                none
        Returns:
                error count or 0 (success)
        Globals:
                none
        Error:
                error count
        Example:
                 my $eCount = NetworkUtils->configureTftp();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub configureTftp
{

    # Configure inetd in SuSE
    my $distro = NodeUtils->distribution();
    if ($distro =~ /SuSE/ || $distro =~ /SLES/)
    {
        my $inetderr = configureTftp_inetd();
        return $inetderr;
    }

    my $xinetd       = "/etc/xinetd.d";
    my $tftpConf     = $xinetd . "/tftp";
    my $xinetdbackup = "/tmp/tftp.bak";
    my $errors       = 0;
    my ($cmd, $output, $rc);

    unless (-d $xinetd)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "E", 'EMsgXINETD_MISSING', "$xinetd");
        $errors++;
    }

    # save old file to tmp
    if (-f "$tftpConf")
    {
        $cmd    = "$::COPY -f $tftpConf $xinetdbackup";
        $output = NodeUtils->runcmd($cmd, 0);
        $rc     = $::RUNCMD_RC;
        if ($rc)
        {
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'I', 'IMsgShow_Output',
                                      $output);
            $errors++;
        }
    }

    # Now, configure our file:
    open(FILE, ">$tftpConf")
      or die NodeUtils->messageFromCat(
                                       'csmInstall',          $::MSGMAPPATH,
                                       'csminstall',          'E1',
                                       'EMsgCANT_WRITE_FILE', $tftpConf
                                       );
    my @fC = <<EOF;
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -vvv -r blksize -p -u tftpd -s /tftpboot
}
EOF
    foreach (@fC) { print FILE "$_"; }
    close(FILE);
    $errors =
      NetworkUtils->restartTftp($errors, "xinetd");    # restart tftp server.
    return $errors;
}

#--------------------------------------------------------------------------------

=head3    configureTftp_inetd

        Modify /etc/inetd.conf for tftp

        Arguments:
                none
        Returns:
                error count
        Globals:
                none
        Error:
                error count or 0 (success)
        Example:
                 my $inetderr = configureTftp_inetd();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub configureTftp_inetd
{

    my $inetdconf   = "/etc/inetd.conf";
    my $inetdbackup = "/tmp/tftp_inetd.bak";
    my $errors      = 0;
    my ($cmd, $output, $rc, $s);

    unless (-f "$inetdconf") { return ($errors++); }

    # backup inetd.conf
    $cmd    = "$::COPY -f $inetdconf $inetdbackup ";
    $output = NodeUtils->runcmd($cmd, 0);
    $rc     = $::RUNCMD_RC;
    if ($rc)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgShow_Output', $output);
        $errors++;
    }

    # now edit the inetd.conf file:
    $s = NodeUtils->readFile($inetdconf);

    #comment tftp entry
    $s =~ s/^\s*(tftp\s+[\s\S]*$)//m;
    $s = $s
      . "\ntftp    dgram   udp     wait    root    /usr/sbin/in.tftpd in.tftpd -r blksize -vvv -p -u tftpd -s /tftpboot\n";
    if (open(FILE, ">$inetdconf"))
    {
        print FILE ($s);
        close(FILE);
    }
    else { exit; }

    # Restart inetd to pick up the changes
    $errors =
      NetworkUtils->restartTftp($errors, "inetd");    # restart tftp server.
    return $errors;
}

#--------------------------------------------------------------------------------

=head3    createTftpUser

        Create the TFTP user to secure system directories

        Arguments:
                none
        Returns:
                none
        Globals:
                $::TFTPUSER
        Error:
                V & I Err mesages
        Example:
                 NetworkUtils->createTftpUser();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub createTftpUser
{
    unless ($::GREP) { $::GREP = '/bin/grep' }
    my $tftpuser   = $::TFTPUSER;
    my $tftpgrp    = $::TFTPGROUP;
    my $passwdFile = "/etc/passwd";
    my $grpFile    = "/etc/group";
    my $bak        = "/tmp/csmjunk";

    # determine whether or not a tftpd user already exists:
    NodeUtils->runcmd("$::GREP -e '^$tftpuser' $passwdFile", -1);
    if ($::RUNCMD_RC eq 0)
    {

        #print "tftpd user has already been created.\n" if $::VERBOSE;
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "V", 'IMsgUserAlreadyCreated', $tftpuser);
    }
    else
    {

        #print "Creating default tftpd user for the tftp server.\n";
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "I", 'IMsgCreatingTFTPUser', $tftpuser);

        # create tftpd user
        #
        NodeUtils->runcmd("cp $passwdFile $bak");
        NodeUtils->runcmd(
            "echo '$tftpuser:x:6969:6969::/dev/null:/dev/null' | \
		cat $bak - > $passwdFile");

        # remove backup file
        NodeUtils->runcmd("rm $bak", -1);
    }
    NodeUtils->runcmd("$::GREP -e '^$tftpgrp' $grpFile", -1);
    if ($::RUNCMD_RC eq 0)
    {

        #print "tftpd group has already been created.\n" if $::VERBOSE;
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "V", 'IMsgGroupAlreadyCreated', $tftpgrp);
    }
    else
    {

        #print "Creating default tftpd group for the tftp server.\n";
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "I", 'IMsgCreatingTFTPGroup', $tftpgrp);
        NodeUtils->runcmd("cp $grpFile $bak");
        NodeUtils->runcmd(
            "echo '$tftpgrp:x:6969:' | \
		cat $bak - > $grpFile");

        # remove backup file
        NodeUtils->runcmd("rm $bak", -1);
    }
}

#--------------------------------------------------------------------------------

=head3    process_tftp

	handles installation of tftp-hpa rpm.  

	Special case for tftp:

	1.  The tftp-hpa (default csm rpm) may already be installed.
		skip and do nothing

 	2.  Another tftp server may already be installed
 		remove old tftp server and install new?
		keep old tftp server and move on?
		keep old tftp server and install new tftp server
		quit

 	3.  No tftp server RPM is installed
		just install the tftp server.

 	if process_tftp returns 1 then install the default tftp package,
 	otherwise, do not install it. (returns 0).

	Notes:

	Stuff like this should probably not be in a shared package.

=cut

#--------------------------------------------------------------------------------

sub process_tftp
{
    my $installTftp = 0;    # 0 means no, 1 means install it.
    my @vn = @::default_tftp_server_name;
    my ($cmd, $output, $rc, $returncode);
    $returncode = 0;
    my ($isDefault, @tftpRpms) = NetworkUtils->check4InstalledTftpServers(1);
    my $ans = "";
    if ($#tftpRpms eq -1)
    {

        # no tftp servers were found.  BUT, perhaps there is a
        # tarball installed.  We should check for that!
        my $running = NetworkUtils->verifyTftp();
        if ($running)
        {
            print "*" x 80 . "\n";
            NodeUtils->message('I', 'IMsgTftpProcFound', @vn);
            while (1)
            {
                NodeUtils->message('I', 'IMsgTftpOptionsMenu', @vn, @vn);
                $|   = 1;         # force a flush
                $ans = <STDIN>;
                chomp($ans);
                if ($ans eq 1 || $ans eq 2 || $ans eq 3) { last; }
                print "\n\n";
                print "*" x 80 . "\n";

            }
            if ($ans eq 3)
            {
                exit;
            }
            elsif ($ans eq 1)
            {

                # install @::default_tftp_server_name
                $installTftp = 1;    # install tftp
            }
            elsif ($ans eq 2)
            {

                # warn them if they do not install tftp...
                NodeUtils->message('I', 'IMsgChangeTftpUser', 'tftpd');
                my $d = <STDIN>;

                # do nothing and leave.
                NodeUtils->message('I', 'IMsgWILL_NOT_INSTALL',
                                   @::default_tftp_server_name);
            }

        }    # there were no tftp processes running.
        else
        {

            # so we need to install!
            $installTftp = 1;
        }
    }
    elsif ($#tftpRpms ne -1 && !$isDefault)
    {
        NodeUtils->message('I', 'IMsgTFTPInfo', @vn, @vn);

        while (1)
        {
            NodeUtils->message('I', 'IMsgTFTPOptions', @vn, @vn, @vn, @vn);
            $|   = 1;         # force a flush
            $ans = <STDIN>;
            chomp($ans);
            if ($ans eq 1 || $ans eq 2 || $ans eq 3 || $ans eq 4) { last; }
            print "\n\n";
            print "*" x 80 . "\n";

        }

        # warn them if they do not install tftp...
        unless ($ans eq 1 || $ans eq 2 || $ans eq 4)
        {
            NodeUtils->message('I', 'IMsgChangeTftpUser', 'tftpd');
            my $d = <STDIN>;
        }

        if ($ans eq 1)
        {

            # remove tftp rpms and install @::default_tftp_server_name
            NetworkUtils->rmTftpRpms(@tftpRpms);
            $installTftp = 1;    # install it!
        }
        elsif ($ans eq 2)
        {

            # install @::default_tftp_server_name
            $installTftp = 1;    # install tftp
        }
        elsif ($ans eq 3)
        {

            # do nothing and leave.
            NodeUtils->message('I', 'IMsgWILL_NOT_INSTALL',
                               @::default_tftp_server_name);
        }
        elsif ($ans eq 4)
        {
            exit;
        }
        else
        {

            # if we got here something went wrong
            print "internal error 127";
            exit;
        }
    }
    elsif (!$isDefault)
    {

        # no tftp server is installed, so install the tftp server:
        $installTftp = 1;
    }

    # the last case is if the default tftp server was already installed.
    # if this is true then nothing needs to be returned (0) because we
    # do not wish to install it again.
    return $installTftp;
}

#--------------------------------------------------------------------------------

=head3    restartTftp

    Restart xinetd to pick up changes.

        Arguments:
        	$errors
        	$service  - e.g. "inetd" or "xinetd"
        Returns:
                Number of errors
        Globals:
                none
        Error:
               Number of errors as a scalar.
        Example:
                $errors = NetworkUtils->restartTftp($errors, "inetd" );
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub restartTftp
{
    my ($class, $errors, $service) = @_;

    my $rc;

    # Restart xinetd to pick up the changes
    my $cmd = NodeUtils->service($service, "start");
    NodeUtils->runcmd($cmd, 0);
    if ($rc) { $errors++ }

    $cmd = NodeUtils->service($service, "reload");
    NodeUtils->runcmd($cmd, 0);
    if ($rc) { $errors++ }

    return $errors;
}

#--------------------------------------------------------------------------------

=head3    rmTftpRpms

        Removes uses rpm to remove TFTP RPMs

=cut

#--------------------------------------------------------------------------------

sub rmTftpRpms
{
    my ($class, @tftpRpms) = @_;

    my ($class, $output, $returncode, $ans);
    $returncode = 1;    # signal an error by default, unless things run right.

    foreach my $installedTftp (@tftpRpms)
    {
        NodeUtils->message("I", 'IMsgUNINSTALLING', $installedTftp);
        my $cmd = "$::RPMCMD -e $installedTftp --nodeps";
        $output = NodeUtils->runcmd($cmd, 0);
        $returncode = $::RUNCMD_RC if ($::RUNCMD_RC > $returncode);
    }
    return ($returncode);
}

#--------------------------------------------------------------------------------

=head3    secureFilePermissions

        Configure the default tftp server 

        Arguments:
                $directory   - the root directory
                $dir-perm    - permissions for dirs and subdirs
                $file-perm   - permissions for files
                
        Returns:
                none
        Globals:
                none
        Error:
                none
        Example:
                 NetworkUtils->secureFilePermissions ( $directory,
                                                       $dir-perm,
                                                       $file-perm);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub secureFilePermissions
{
    my ($class, $dir, $dirPerm, $filePerm, $disable_recurtive) = @_;

    # set these variables global, since &wanted does not
    # take parameters (see find routine in perl docs).

    $::dirPermissions  = $dirPerm;
    $::filePermissions = $filePerm;    
    if($disable_recurtive==0){
	find(\&chTftpUserPermissions, $dir);
    }else{
	$File::Find::name = $dir;
	&chTftpUserPermissions;
    }

}

#--------------------------------------------------------------------------------

=head3   testTftpUser

        Tests that the tftp user exists. 

        Arguments:

        Returns:
                0 = does not exit
                1 = does exits
                errors
        Globals:
                $::TFTPUSER
                $passwdFile
        Error:
                none
        Example:
                if ( NetworkUtils->testTftpUser ) { blah;};
        Comments:
                ATTN:
                set $tftpuser and $passwdFile in this sub.
                the tftp stuff might be better in a security package.

=cut

#--------------------------------------------------------------------------------

sub testTftpUser
{
    my $tftpuser   = $::TFTPUSER;
    my $passwdFile = "/etc/passwd";

    # determine whether or not a tftpd user already exists:
    NodeUtils->runcmd("$::GREP -e '^$tftpuser' $passwdFile", -1);
    if ($::RUNCMD_RC eq 0)
    {
        return 1;
    }

    return 0;
}

#--------------------------------------------------------------------------------

=head3    verifyTftp

        Check that tftp server is running.  If a value of 1 is passed
        in as an argument, then the routine will try to restart tftp if
        it isn't running.

        Arguments:
                optional argument "1"

        Returns:
                0 = not running
                1 = running
                errors
        Globals:
                none
        Error:
                return value of restart routine
        Example:
                my $running = NetworkUtils->verifyTftp(1);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub verifyTftp
{

    # if the value 1 is passed in then we should try to restart tftp if
    # it is not running.
    my ($class, $restart) = @_;

    my $errors  = 0;
    my $running = 0;
    my $cmd;

    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'V', 'IMsgCheckingTftp');

    unless ($::LSOF) { $::LSOF = '/usr/sbin/lsof' }
    $cmd = "$::LSOF -i UDP:tftp";
    NodeUtils->runcmd($cmd, -1);

    if ($::RUNCMD_RC)
    {

        # There is no tftp server running on this machine
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgTftpNotRunning', 'tftp');
    }
    else
    {

        # A tftp server is up and running.
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'V', 'IMsgRunning', 'tftp');
        $running = 1;
    }

    # try to restart it
    if ($restart && $::RUNCMD_RC)
    {

        # trying to restart tftp server
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'I', 'IMsgRestart', 'tftp');
        my $distro = NodeUtils->distribution();

        # restart tftp server.
        if ($distro =~ /SuSE/ || $distro =~ /SLES/)
        {
            $errors = NetworkUtils->restartTftp($errors, "inetd");
        }
        else
        {
            $errors = NetworkUtils->restartTftp($errors, "xinetd");
        }
        $cmd = "$::LSOF -i UDP:tftp";
        NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',       $::MSGMAPPATH,
                                      'csminstall',           'I',
                                      'IMsgStillCantRestart', 'tftp'
                                      );

        }
        else
        {
            $running = 1;
        }
    }
    return $running;
}

#--------------------------------------------------------------------------------

=head3    validate_ip

        Check that tftp server is running.  If a value of 1 is passed
        in as an argument, then the routine will try to restart tftp if
        it isn't running.

        Arguments:
                hostname

        Returns:
                -1 = errors
                ipaddress 
        Globals:
                none
        Error:
                return ip address for the hostname
        Example:
                my $ipaddr = NetworkUtils->validate_ip($hostname);
        Comments:
                none
=cut

#--------------------------------------------------------------------------------

sub validate_ip
{
    my $class = shift;
    my $host  = shift;
    my ($work, $res_ip_addr);

    $work = inet_aton($host);
    if (!defined($work))
    {
        $res_ip_addr = -1;
    }
    else
    {
        $res_ip_addr = inet_ntoa($work);
    }

    return $res_ip_addr;
}

#--------------------------------------------------------------------------------

1;

kP 0PBm  7u     s a@a@a@             s     ./opt/csm/pm/NodeUtils.pm pm .pm                   m          #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2000,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# -*- perl -*-
# "@(#)29   1.133.1.2   src/csm/core/pm/NodeUtils.pm.perl, csmcore, csm_rveg, rvegs002a 6/10/04 13:23:56"
#
#--------------------------------------------------------------------------------

package NodeUtils;

use strict;

#     locale tells perl to honor locale for sorting, dates, etc.
#            More info about locale.pm and perl handling of locales can be found in
#            /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.
use locale;
use Socket;
use File::Basename;

use MessageUtils;
use NetworkUtils;
require CSMDefs;

my $msgs;
my $distro;
my $useTranslatedMsg;
my %catHashes;
my $csmroot;
my ($MSGCAT, $MSGMAPPATH, $MSGSET);
my $NO_NODERANGES;
my $NODEGROUPEXPMEM_WARNING = 1;

# $NodeUtils::NO_MESSAGES;    # Set this to 1 if you do not want NodeUtils to
# print any error msgs

# $NodeUtils::errno;          # Will be set if an error occurs.  You must zero
# this out before calling a NodeUtils function,
# if you want to check it afterwards.

BEGIN
{
    $::progname=basename $0;

    #    This enables us to redirect where it looks for other CSM files during development
    $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';

    $MSGCAT = 'nodecmds.cat';
    if (defined $::MSGMAPPATH)
    {
        $MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
    }
    else
    {
        $MSGMAPPATH = "$csmroot/msgmaps";
    }
    $MSGSET = 'NodeUtils';

    #set LD_ASSUME_KERNEL if running on a RH EL 3 machine
    #    my $rh_relfile = "/etc/redhat-release";
    #    my $rh_vers    = '^Red Hat Enterprise Linux .* release 3 (.*)$';
    #    if (-f $rh_relfile)
    #    {
    #        `/bin/grep \"$rh_vers\" $rh_relfile > /dev/null 2>&1`;
    #        my $exit = $? >> 8;
    #        if ($exit == 0)
    #        {
    #            $ENV{'LD_ASSUME_KERNEL'} = "2.4.19";
    #        }
    #    }
}

# Cannot run lsrsrc from within a DMSRM action (causes deadlock), 
# so don't call it from nodestatus or write_status.
if (($::progname ne "nodestatus") 
    && ($::progname ne "write_status") 
    && (!$ENV{'CSM_HAMS_CONTROL'}))
{
    my $hamode =
      `CT_MANAGEMENT_SCOPE=1 lsrsrc-api -i -s IBM.DmsCtrl::::HAMode 2>/dev/null`;
    if (($hamode != 0) && ($hamode != 1))
    {
        MessageUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET, 'E1',
                                     'EMsgCannotRunCSMCommands');
    }
}

umask(0022);   #  This sets umask for all CSM files so that group and world only
               #  have read permissions.
               #  To change it, simply use the umask call in your script, after
               #  the "use NodeUtils;" line

#--------------------------------------------------------------------------------

=head1    NodeUtils

=head2    Package Description

This program module file, supports the CSM/install Node dependencies, and
provides general utilities used by the node commands and a few other parts of
CSM.

If adding to this file, please take a moment to ensure that:

    1.  Your contrib has a readable pod header describing the purpose and use of
         your contrib.

    2. Your contrib is under the correct heading and is in alphabetical order
    under that heading.

    3. You test your contribution by running from the command line:  

       pod2html  --verbose --title=NodeUtils NodeUtils.pm.perl --outfile=NodeUtils.html
       
       and examining the ./NodeUtils.html file in a browser.

=cut

#--------------------------------------------------------------------------------

=head2    Package Dependancies

    package NodeUtils;


    use strict;

    locale tells perl to honor locale for sorting, dates, etc.
    More info about locale.pm and perl handling of locales can be found in
    /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.

    use locale;
    use Socket;
    use MessageUtils;
    use NetworkUtils;


=cut

#--------------------------------------------------------------------------------

=head2    Global "umask" Setting


    umask(0022);

    umask  sets umask for all CSM files so that group and world
    only have read permissions.  To change it, simply use the
    umask call in your script, after the "use NodeUtils;" line

=cut

#--------------------------------------------------------------------------------

=head1  Subroutines by Functional Group

=cut

#--------------------------------------------------------------------------------

=head2    Misc Tools

=cut

#--------------------------------------------------------------------------------

=head3    csm_license_valid

    Check the status of a CSM License.

    Arguments:
        none
    Returns:
          1 -    a CSM license exists & is not expired
          0 -    no license exists or it has expired
         -1 -    encountered a problem determining status
    Globals:
        none
    Error:
        see returns
    Example:
        not used
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub csm_license_valid
{
    my $outref =
      NodeUtils->runrmccmd('runact-api', "-c IBM.DmsCtrl::::isLicenseValid");

    if (!$outref || @$outref[0] =~ /::0$/)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

#--------------------------------------------------------------------------------

=head3    distribution

     Returns the distribution and version of the current machine in the
    form:
        <distro> <version>

    Arguments:
        none
    Returns:
        distro and version strings separated by a space.
    Globals:
        none
    Error:
        Returns undef if it is an unknown distro.
    Example:
         NodeUtils->distribution();
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub distribution
{
    if (!defined($distro))
    {

        # see info.c of the guname tool in gnome-utils for examples
        # of supporting other distros
        if (-f '/etc/redhat-release')
        {
            my $s = NodeUtils->readFile('/etc/redhat-release');

            #print "s=$s";
            my ($name, $version) = split(/ release /, $s);
            $version = (split(' ', $version))[0];    # Strip codename
            if (($name =~ /Advanced/) && ($version =~ /AS/))
            {
                $version =~ s/AS$//;                 # Strip AS off the end
                $name = 'RedHatAS';
            }
            elsif (   (($name =~ /Enterprise/) && ($version =~ /AS/))
                   || (($name =~ /Enterprise/) && ($name =~ /AS/)))
            {
                $version =~ s/AS$//;
                $name = 'RedHatEL-AS';
            }
            elsif (($version =~ /WS/) || ($name =~ /WS/))
            {
                $version =~ s/WS$//;
                $name = 'RedHatEL-WS';

            }
            elsif (($version =~ /ES/) || ($name =~ /ES/))
            {
                $version =~ s/ES$//;
                $name = 'RedHatEL-ES';

            }
            else
            {
                $name = 'RedHat';
            }

            #print "name=$name version=$version\n";
            $distro = $name . ' ' . $version;
        }
        elsif (-f '/etc/SuSE-release')
        {
            my $s = NodeUtils->readFile('/etc/SuSE-release');

            #print "s=$s";
            my $d = 'SuSE';
            if ($s =~ /SLES/s)
            {
                $d = 'SLES';
            }
            my ($version) = $s =~ /VERSION\s*=\s*(\d+\.\d+)/;
            $distro = "$d $version";
        }
        else
        {
            $distro = '';
        }    # this prevents it from trying to find it every time
    }

    return (length($distro) ? $distro : undef);
}

#--------------------------------------------------------------------------------

=head3    equalArrays

    Compares 2 arrays and returns true if they are the same length and all
    of their elements are equal.  Both arrays are references.

    Arguments:
        ref_array1
        ref_array2
    Returns:
        bool_ret - 1 or 0
    Globals:
        none
    Error:
        none
    Example:
        unused
    Comments:
        unused

=cut

#--------------------------------------------------------------------------------

sub equalArrays
{
    my ($class, $a1, $a2) = @_;
    my $len1 = scalar(@$a1);
    if ($len1 != scalar(@$a2)) { return 0; }
    for (my $i = 0 ; $i < $len1 ; $i++)
    {
        if ($$a1[$i] ne $$a2[$i]) { return 0; }
    }
    return 1;
}

#--------------------------------------------------------------------------------

=head3    isAIX

    returns 1 if localHost is AIX

    Arguments:
        none
    Returns:
        1 - localHost is AIX
        0 - localHost is some other platform
    Globals:
        none
    Error:
        none
    Example:
         if (NodeUtils->isAIX()) { blah; }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub isAIX
{
    if ($^O =~ /^aix/i) { return 1; }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    isLinux

    returns 1 if localHost is Linux

    Arguments:
        none
    Returns:
        1 - localHost is Linux
        0 - localHost is some other platform
    Globals:
        none
    Error:
        none
    Example:
         if (NodeUtils->isLinux()) { blah; }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub isLinux
{
    if ($^O =~ /^linux/i) { return 1; }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    ispLinux

    returns 1 if localHost is pLinux

    Arguments:
        none
    Returns:
        1 - localHost is pLinux
        0 - localHost is some other platform
    Globals:
        none
    Error:
        none
    Example:
         if (NodeUtils->ispLinux()) { blah; }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub isPLinux
{
    my $arch = `/bin/uname -m`;
    chomp($arch);
    if ($arch eq "ppc64") { return 1; }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    isMgmtSvr

    returns 1 if localHost is a CSM Management Server

    Arguments:
        none
    Returns:
        1 - localHost is a Managment Sever
        0 - localHost is not
    Globals:
        none
    Error:
        none
    Example:
         if (NodeUtils->isMgmtSvr()) { blah; }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub isMgmtSvr
{

    # Note: we could check for the csm.server, but that check is slower and OS dependent.
    if (-f '/usr/bin/lsrsrc-api' && -f '/usr/sbin/rsct/bin/IBM.DMSRMd')
    {
        return 1;
    }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    isNode

    returns 1 if localHost is CSM node or Management Server.

    Arguments:
        none
    Returns:
        1 - localHost is a CSM Node or Management Sever
        0 - localHost is neither
    Globals:
        none
    Error:
        none
    Example:
         if (NodeUtils->isNode()) { blah; }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub isNode
{

    # Note: we could check for the csm.client, but that check is slower and OS dependent.
    if (-f '/usr/bin/lsrsrc-api' && -f '/usr/sbin/rsct/bin/IBM.CSMAgentRMd')
    {
        return 1;
    }
    else { return 0; }
}

#--------------------------------------------------------------------------------

=head3    isRoot

    returns 1 if the effective user running this subroutine is the root user.

    Arguments:
        none
    Returns:
        1 - effective user is root
        0 - effective user is not root.
    Globals:
        none
    Error:
        none
    Example:
         if (NodeUtils->isRoot()) { blah; }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub isRoot { return $> == 0; }

#--------------------------------------------------------------------------------

=head3    programName

     Return the name of the perl script currently being executed, w/o the path.

    Arguments:
        none
    Returns:
        program name without the path
    Globals:
        none
    Error:
        none
    Example:
         return NodeUtils->programName() . ":  Houstin , we have a problem.\n";
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub programName
{
    my $progname = $0;
    $progname =~ s|.*/([^/]+?)$|$1|;    # on linux we have to strip the path
    return $progname;
}

#--------------------------------------------------------------------------------

=head3    quote

    Quote a string, taking into account embedded quotes.  This function is most
    useful when passing string through the shell to another cmd.  It handles one
    level of embedded double quotes, single quotes, and dollar signs.

    Arguments:
        string to quote
    Returns:
        quoted string
    Globals:
        none
    Error:
        none
    Example:
         if (defined($$opthashref{'WhereStr'})) {
            $where = NodeUtils->quote($$opthashref{'WhereStr'});
        }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub quote
{
    my ($class, $str) = @_;

    # if the value has imbedded double quotes, use single quotes.  If it also has
    # single quotes, escape the double quotes.
    if (!($str =~ /\"/))    # no embedded double quotes
    {
        $str =~ s/\$/\\\$/sg;    # escape the dollar signs
        $str = qq("$str");
    }
    elsif (!($str =~ /\'/)) { $str = qq('$str'); }   # no embedded single quotes
    else    # has both embedded double and single quotes
    {

        # Escape the double quotes.  (Escaping single quotes does not seem to work
        # in the shells.)
        $str =~ s/\"/\\\"/sg;    #" this comment helps formating
        $str =~ s/\$/\\\$/sg;    # escape the dollar signs
        $str = qq("$str");
    }
}

#--------------------------------------------------------------------------------

=head3    readFile

    Read a file and return its content.

    Arguments:
        filename
    Returns:
        file contents or undef
    Globals:
        none
    Error:
        undef
    Example:
        my $blah = NodeUtils->readFile('/etc/redhat-release');
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub readFile
{
    my ($class, $filename) = @_;
    open(FILE, "<$filename") or return undef;
    my @contents;
    @contents = <FILE>;
    close(FILE);
    if (wantarray) { return @contents; }
    else { return join('', @contents); }
}

#--------------------------------------------------------------------------------

=head2    Attribute Layer

=cut

#--------------------------------------------------------------------------------

=head3    checkForNotFound

        Checks to see if listnodeattrs couldn't find some nodes.

        Arguments:
                $nodeList

        Returns:
                none.
        Globals:
            $::LISTNODEATTRS_NUMNOTFOUND
        Error:
                E12
        Example:
                NodeUtils->checkForNotFound($refnodes);
        Comments:
                none

=cut

#-------------------------------------------------------------------------#

sub checkForNotFound
{
    my ($class, $nodelist) = @_;
    if ($::LISTNODEATTRS_NUMNOTFOUND)
    {
        if (scalar(@$nodelist) == 1)
        {
            NodeUtils->messageFromCat(
                                      'nodecmds.cat',       $::MSGMAPPATH,
                                      'lsnode',             'E12',
                                      'EMsgNODE_NOT_FOUND', $$nodelist[0]
                                      );
        }
        elsif (scalar(@$nodelist) <= 10)
        {
            NodeUtils->messageFromCat(
                                      'nodecmds.cat',
                                      $::MSGMAPPATH,
                                      'lsnode',
                                      'W12',
                                      'EMsgSOME_NOT_FOUND_LIST',
                                      join(', ', @$nodelist)
                                      );
        }
        else
        {
            NodeUtils->messageFromCat('nodecmds.cat', $::MSGMAPPATH, 'lsnode',
                                      'W12', 'EMsgSOME_NOT_FOUND');
        }
    }
}

#--------------------------------------------------------------------------------

=head3    check_valid_install_distros

        Check whether current node's InstallDistributionName and
        InstallDistributionVersion is valid for full installation 

        Arguments:
                $installMethod
                $distro
        Returns:
                -1 - couldn't find valid install distro
                 0 - found valid install distro
        Globals:
                none
        Error:
                -1 - on failure
        Example:
                 my $rc =
                   NodeUtils->check_valid_install_distros("autoyast",$distro);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub check_valid_install_distros
{
    my ($class, $installmethod, $distro) = @_;
    my @VALID_AUTOYAST_DISTROS = ('SuSE8.1', 'SLES8.1');

    if (!grep(/^$distro$/, @VALID_AUTOYAST_DISTROS))
    {
        return -1;
    }
    return 0;
}

#--------------------------------------------------------------------------------

=head3	common_install_method

        Test that the install method attribute is identical
	across all the nodes in the global %::NODEHASH.

        Arguments:
                uses global below
        Returns:
                a scalar value of the InstallMethod node attribute held in
		common by all nodes in the %::NODEHASH ( "kickstart" || "yast" ).
        Globals:
                %::NODEHASH - input list of nodes to check
        Error:
                Exits with an error if the InstallMethod attribute is not
                the same on all the nodes. 
        Example:
                $::INSTALL_METHOD  = NodeUtils->common_install_method();
        Comments:

		May be used in conjuction with "NodeUtils->get_common_attrs()"
		but this routine exists to handle an idiosyncracy in installnode().

=cut

#--------------------------------------------------------------------------------

sub common_install_method
{

    my $const_attr	= 0;			# the InstallMethod value
    my @hosts		= keys %::NODEHASH;	# all hosts
    my $test_host	= @hosts[0];		# just get the first one

    if ( $test_host ) # not empty
    {
        # constant value to test against
        $const_attr = $::NODEHASH{$test_host}{'InstallMethod'};

    }
    else
    {
        NodeUtils->messageFromCat(
				'csmInstall.cat',
				$::MSGMAPPATH,
				'csminstall',
                               	'E',
				'EMsgNO_ATTR',
				'InstallMethod');
     }

    # go through all hosts and compare InstallMethod to $const_attr

    foreach $test_host (@hosts)
    {
        my $next_hash_value = $::NODEHASH{$test_host}{'InstallMethod'};
    
        if ( $next_hash_value ne $const_attr )
        {
            NodeUtils->messageFromCat(
		    			'csmInstall.cat',
		    			$::MSGMAPPATH,
		    			'csminstall',
       	                            	'E1',
					'EMsgDIFFERENT_ATTR',
		    			'InstallMethod');
        }
    }

    return $const_attr;
}


#-------------------------------------------------------------------------#

=head3    getBladeStatus

        Returns a reference to a hash of nodeName/[yes|no].  Determines whether each
    node in the array is or is not a blade.

        Arguments:
                @node_list  -  an array of nodesNames.
        Returns:
                A hash ref of { node => yes or no }
        Error:
                none
        Example:
                $ref_bladeStatus = NodeUtils->getBladeStatus(@goodNodes);
        Comments:
                getBladeStatus will not verify that the nodes are defined in
        the Database.

=cut

#--------------------------------------------------------------------------------

sub getBladeStatus
{

    # local variables.
    my ($node, $nodes, %nodes, $rc, $rv, $cmd, @stdout, $line);

    # first strip the class name:
    shift;

    # need to do 50 at a time so that we don't have scaling problems.
    $nodes = join(',', @_);

    # the command to find out whether we have a blade or not is this:
    $cmd = "/opt/csm/bin/lshwstat -n $nodes blade";

    # do runcmd, but do not exit if there is an error.  Just
    # set the return code.
    @stdout = NodeUtils->runcmd("$cmd");
    foreach $line (@stdout)
    {
        ($node, $rv) = split(': ', $line);
        $nodes{$node} = $rv;
    }
    return \%nodes;
}

#--------------------------------------------------------------------------------

=head3    get_common_attrs

        Get the common attributes across all the nodes for the follwoing attrs:

                InstallDistributionName 
                InstallDistributionVersion 
                InstallPkgArchitecture 
                InstallCSMVersion 

        Arguments:
                uses global below
        Returns:
		Array of common attribute values on success

        Globals:
                %::NODEHASH - input list of nodes to check
        Error:
                Exits with an error if one of the attributes is not
                the same on all the nodes in %::NODEHASH 
        Example:
                ($::DISTRO_NAME,
                $::DISTRO_VERSION,
                $::ARCH,
                $::CSM_VERSION ) = NodeUtils->get_common_attrs();
        Comments:


=cut

#--------------------------------------------------------------------------------

sub get_common_attrs
{

    # no parameters...

    my ($hostname, $distro_name, $distro_version, $arch, $csm_version);

    my ($InstallDistributionName);
    my ($InstallDistributionVersion);
    my ($InstallPkgArchitecture);
    my ($InstallCSMVersion);

    my ($errors)			   = 0;
    my $InstallCSMVersion_Err_Flg          = 0;
    my $InstallPkgArchitecture_Err_Flg     = 0;
    my $InstallDistributionVersion_Err_Flg = 0;
    my $InstallDistributionName_Err_Flg    = 0;
    my $DistributionName_Err_Flg           = 0;
    my $DistributionVersion_Err_Flg        = 0;
    my $PkgArchitecture_Err_Flg            = 0;
    my $CSMVersion_Err_Flg                 = 0;

    foreach $hostname (keys %::NODEHASH)
    {
        $InstallDistributionName	= $::NODEHASH{$hostname}{'InstallDistributionName'};
        $InstallDistributionVersion	= $::NODEHASH{$hostname}{'InstallDistributionVersion'};
        $InstallPkgArchitecture		= $::NODEHASH{$hostname}{'InstallPkgArchitecture'};
        $InstallCSMVersion		= $::NODEHASH{$hostname}{'InstallCSMVersion'};

        if (!$distro_name) { $distro_name = $InstallDistributionName; }
        if (!$distro_version) { $distro_version = $InstallDistributionVersion; }
        if (!$csm_version) { $csm_version = $InstallCSMVersion; }
        if (!$arch) { $arch = $InstallPkgArchitecture; }


        if ("$distro_name" and ($InstallDistributionName ne $distro_name))
        {
            $errors++;
            $InstallDistributionName_Err_Flg++;
        }

        if ("$distro_version"
            and ($InstallDistributionVersion ne $distro_version))
        {
            $errors++;
            $InstallDistributionVersion_Err_Flg++;
        }

        if ("$arch"
            and ($InstallPkgArchitecture ne $arch))
        {
            $errors++;
            $InstallPkgArchitecture_Err_Flg++;
        }

        if ("$csm_version"
            and ($InstallCSMVersion ne $csm_version))
        {
            $errors++;
            $InstallCSMVersion_Err_Flg++;
        }
    }

    if (!$distro_name)
    {
        $errors++;
        $DistributionName_Err_Flg++;
    }
    if (!$distro_version)
    {
        $errors++;
        $DistributionVersion_Err_Flg++;
    }
    if (!$arch)
    {
        $errors++;
        $PkgArchitecture_Err_Flg++;
    }
    if (!$csm_version)
    {
        $errors++;
        $CSMVersion_Err_Flg++;
    }

    if ($InstallDistributionName_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',
                                  $::MSGMAPPATH,
                                  'csminstall',
                                  'E',
                                  'EMsgDIFFERENT_ATTR',
                                  'InstallDistributionName'
                                  );
    }
    if ($InstallDistributionVersion_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',
                                  $::MSGMAPPATH,
                                  'csminstall',
                                  'E',
                                  'EMsgDIFFERENT_ATTR',
                                  'InstallDistributionVersion'
                                  );
    }
    if ($InstallPkgArchitecture_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',
                                  $::MSGMAPPATH,
                                  'csminstall',
                                  'E',
                                  'EMsgDIFFERENT_ATTR',
                                  'InstallPkgArchitecture'
                                  );
    }
    if ($InstallCSMVersion_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',     $::MSGMAPPATH,
                                  'csminstall',         'E',
                                  'EMsgDIFFERENT_ATTR', 'InstallCSMVersion'
                                  );
    }
    if ($DistributionName_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall',     'E',
                                  'EMsgNO_ATTR',    'InstallDistributionName'
                                  );
    }
    if ($DistributionVersion_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',
                                  $::MSGMAPPATH,
                                  'csminstall',
                                  'E',
                                  'EMsgNO_ATTR',
                                  'InstallDistributionVersion'
                                  );
    }
    if ($PkgArchitecture_Err_Flg > 0)
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall',     'E',
                                  'EMsgNO_ATTR',    'InstallPkgArchitecture'
                                  );
    }
    if ($CSMVersion_Err_Flg > 0)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgNO_ATTR', 'InstallCSMVersion');
    }

    exit $errors if ($errors);

    my @return_array = ($distro_name, $distro_version, $arch, $csm_version);

    return (@return_array);
}

#--------------------------------------------------------------------------------

=head3    get_CSMVersion

        Get the version of csm component that is installed on the 
        management server.

        Arguments:
                $component
                $showfixlevel
        Returns:
                the csm version as a string.
        Globals:
                $::PLTFRM
                $::RPMCMD
        Error:
                Undefined
        Example:
                 $ret_code=NodeUtils->get_CSMVersion("rpm");
        Comments:
                The version should be in the form "V.R.M" (e.g. 1.2.0).
                If showfixlevel parameter == true (1),  the version will be
                in the form "V.R.M.F" (e.g. 1.2.0.0). 

=cut

#--------------------------------------------------------------------------------

sub get_CSMVersion
{
    my ($class, $component, $showfixlevel) = @_;
    my ($cmd, $output, $rpm, $version, $release, $v1, $v2, $v3, $v4, $rest);

    if ($::PLTFRM eq "Linux")
    {
        $cmd    = "$::RPMCMD -q $component";
        $output = NodeUtils->runcmd($cmd);
        chomp($output);
        ($rpm, $version, $release) = split(/-/, $output);

        ($v1, $v2, $v3, $v4, $rest) = split(/\./, $version);
        if ($showfixlevel) { $version = join(".", $v1, $v2, $v3, $v4); }
        else { $version = join(".", $v1, $v2, $v3); }
    }
    elsif ($::PLTFRM eq "AIX")
    {
        $cmd    = "$::LSLPP -cLq $component";
        $output = NodeUtils->runcmd($cmd);
        chomp($output);

        # The third field in the lslpp output is the VRMF
        ($version) = (split(/:/, $output))[2];

        ($v1, $v2, $v3, $v4, $rest) = split(/\./, $version);
        if ($showfixlevel) { $version = join(".", $v1, $v2, $v3, $v4); }
        else { $version = join(".", $v1, $v2, $v3); }
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }

    return (length($version) ? $version : undef);
}

#--------------------------------------------------------------------------------

=head3  get_default_attributes   

        Set these default values for attributes not on command line:

           InstallOSName                OS Name of management server ("Linux" or "AIX").
           InstallDistributionVersion   MS's operating system version.
           InstallDistributionName      MS's operating system distribution (Linux only)
           InstallPkgArchitecture       MS's architecture (Linux only).
                                             if MS's architecture=i?86:  set to i386..
           InstallCSMVersion            Version of csm.core installed on MS.
           ConsoleMethod                PowerMethod if PowerMethod=hmc.
           ConsoleServerName            Set to HWControlPoint if PowerMethod=hmc
                                             also set during -H and -C processing.
           ConsoleSerialDevice
           ConsolePortNum

        Arguments:
                none
        Returns:
               number of errors 
        Globals:
                $::ATTRS hash
        Error:
                error count
        Example:
                 NodeUtils->get_default_attributes;
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_default_attributes
{
    my ($errors) = 0;

    # Operating System Type (Linux or AIX). Use MS's InstallOSName by default
    if (!$::ATTRS{"InstallOSName"})
    {
        $::ATTRS{"InstallOSName"} = InstallUtils->get_OSName();
        NodeUtils->message('V', 'IMsgDEFAULT_ATTR_SET', "InstallOSName",
                           $::ATTRS{'InstallOSName'});
        if (!$::ATTRS{"InstallOSName"})
        {
            NodeUtils->message('W', 'EMsgCANT_GET_OSNAME');
            $errors++;
        }

    }

    # Operating System Version.  Use MS's Operating System Version
    if (!$::ATTRS{"InstallDistributionVersion"})
    {
        $::ATTRS{"InstallDistributionVersion"} =
          InstallUtils->get_DistributionVersion();
        NodeUtils->message('V', 'IMsgDEFAULT_ATTR_SET',
                           "InstallDistributionVersion",
                           $::ATTRS{'InstallDistributionVersion'});
        unless ($::ATTRS{"InstallDistributionVersion"})
        {
            NodeUtils->message('W', 'EMsgCANT_GET_DISTROVERSION');
            $errors++;
        }
    }

    # Operating System Distribution.  Use MS's Operating System Distribution.
    # Only for Linux.
    if (!$::ATTRS{"InstallDistributionName"}
        && ($::ATTRS{"InstallOSName"} eq "Linux"))
    {
        $::ATTRS{"InstallDistributionName"} =
          InstallUtils->get_DistributionName();
        NodeUtils->message('V', 'IMsgDEFAULT_ATTR_SET',
                           "InstallDistributionName",
                           $::ATTRS{'InstallDistributionName'});
        unless ($::ATTRS{"InstallDistributionName"})
        {
            NodeUtils->message('W', 'EMsgCANT_GET_DISTRONAME');
            $errors++;
        }
    }

    # Package Architecture.  Use MS's Architecture.
    # Only for Linux.
    if (!$::ATTRS{"InstallPkgArchitecture"}
        && ($::ATTRS{"InstallOSName"} eq "Linux"))
    {
        $::ATTRS{"InstallPkgArchitecture"} =
          InstallUtils->get_PkgArchitecture();

        # All x86 machine types map to i386 since all x86 rpms are stored in
        # the same directory.
        if ($::ATTRS{'InstallPkgArchitecture'} =~ /i.86/)    #SSS
        {
            $::ATTRS{'InstallPkgArchitecture'} = "i386";
        }

        NodeUtils->message('V', 'IMsgDEFAULT_ATTR_SET',
                           "InstallPkgArchitecture",
                           $::ATTRS{'InstallPkgArchitecture'});

        unless ($::ATTRS{"InstallPkgArchitecture"})
        {
            NodeUtils->message('W', 'EMsgCANT_GET_PKGARCH');
            $errors++;
        }
    }

    # CSM Version.  Use version of csm.core installed on MS by default for Linux
    if (   (!$::ATTRS{"InstallCSMVersion"})
        && ($::ATTRS{"InstallOSName"} eq "Linux"))
    {    # No default value for AIX nodes

        $::ATTRS{"InstallCSMVersion"} =
          InstallUtils->get_CSMVersion("csm.core");
        NodeUtils->message('V', 'IMsgDEFAULT_ATTR_SET', "InstallCSMVersion",
                           $::ATTRS{'InstallCSMVersion'});
        unless ($::ATTRS{"InstallCSMVersion"})
        {
            NodeUtils->message('W', 'EMsgCANT_GET_CSMVERSION');
            $errors++;
        }
    }

    # Console Serial Device.  For Linux, default to "ttyS0".
    if (   (!$::ATTRS{"ConsoleSerialDevice"})
        && ($::ATTRS{"InstallOSName"} eq "Linux"))
    {
        $::ATTRS{"ConsoleSerialDevice"} = "ttyS0";
    }

    # ConsoleMethod.  Set this to the PowerMethod if PowerMethod=hmc.
    if (!$::ATTRS{"ConsoleMethod"}
        and ($::ATTRS{"PowerMethod"} eq "hmc"))
    {
        $::ATTRS{"ConsoleMethod"} = $::ATTRS{"PowerMethod"};
    }

    # ConsoleServerName.  Set this to the HWControlPoint if PowerMethod=hmc.
    if (!$::ATTRS{"ConsoleServerName"}
        and ($::ATTRS{"PowerMethod"} eq "hmc"))
    {
        $::ATTRS{"ConsoleServerName"} = $::ATTRS{"HWControlPoint"};
    }

    #  If the PowerMethod is "csp" we can set some of the console attributes
    # ConsoleMethod.  Set this to the PowerMethod if PowerMethod=csp
    if (!$::ATTRS{"ConsoleMethod"} and ($::ATTRS{"PowerMethod"} eq "csp"))
    {
        $::ATTRS{"ConsoleMethod"} = $::ATTRS{"PowerMethod"};
    }

    # ConsoleServerName.  Set this to the HWControlPoint if PowerMethod=csp
    if (!$::ATTRS{"ConsoleServerName"} and ($::ATTRS{"PowerMethod"} eq "csp"))
    {
        $::ATTRS{"ConsoleServerName"} = $::ATTRS{"HWControlPoint"};
    }

    # ConsolePortNum. Set this to the HWControlNodeId if PowerMethod=csp
    if (!$::ATTRS{"ConsolePortNum"} and ($::ATTRS{"PowerMethod"} eq "csp"))
    {
        $::ATTRS{"ConsolePortNum"} = $::ATTRS{"HWControlNodeId"};
    }

    return ($errors);
}

#--------------------------------------------------------------------------------

=head3    get_DistributionName

        Linux only command
        
        Get the distribution name for Linux 

        Arguments:
                 $output
                 $rpm
                 $distro
        Returns:
                Linux distribution name as a string.
        Globals:
                $::PLTFRM
        Error:
                Exits with E2
        Example:
                $::ATTRS{'InstallDistributionName'} =
                        NodeUtils->get_DistributionName;
        Comments:
                returns nulls for AIX and exits on E2 for any
                other platform.

=cut

#--------------------------------------------------------------------------------

sub get_DistributionName
{
    my ($cmd, $output, $rpm, $distro);

    # IF LINUX
    if ($::PLTFRM eq "Linux")
    {
        $distro = (split ' ', (NodeUtils->distribution()))[0];

        #if (-f '/etc/redhat-release')
        #{
        # RedHat is the only Linux distro we support for now.
        #    $distro = "RedHat";
        #}
    }
    elsif ($::PLTFRM eq "AIX")
    {
        $distro = "";
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }

    return (length($distro) ? $distro : undef);
}

#--------------------------------------------------------------------------------

=head3    get_DistributionVersion

        Returns the Operating System version that is installed on the
        management server.

        Arguments:
                none
        Returns:
                OS Version as a string.
        Globals:
                $::PLTFRM
        Error:
                undef
        Example:
                my $DistVersion = 
                        NodeUtils->get_DistributionVersion();
        Comments:
                For AIX, the version is in the V.R.M form ( e.g. 1.2.0 ).
                For Linux, the form reported in the /etc/redhat-release file
                (V.R) is used ( e.g. 1.2 )

=cut

#--------------------------------------------------------------------------------

sub get_DistributionVersion
{
    my ($cmd, $output, $rpm, $version, $release, $v1, $v2, $v3, $rest);

    if ($::PLTFRM eq "Linux")
    {

        $version = (split ' ', (NodeUtils->distribution()))[1];

        #if (-f '/etc/redhat-release')
        #{
        #    my $s = NodeUtils->readFile('/etc/redhat-release');
        #    ($version) = $s =~ /\s(\d+\.\d+)\s/;
        #}
    }
    elsif ($::PLTFRM eq "AIX")
    {

        #$cmd = "$::OSLEVEL";
        $cmd    = "$::LSLPP -Lcq bos.rte | /usr/bin/cut -d: -f 3";
        $output = NodeUtils->runcmd($cmd);
        chomp($output);

        ($v1, $v2, $v3, $rest) = split(/\./, $output);
        $version = join(".", $v1, $v2, $v3);
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }

    return (length($version) ? $version : undef);
}

#--------------------------------------------------------------------------------

=head3    get_OSName

        Returns the OS Name i.e. Linux, AIX or undef.

        Arguments:
                none
        Returns:
                OS Name as a string.
        Globals:
                none
        Error:
                undef
        Example:
                $::ATTRS{'InstallOSName'}=NodeUtils->get_OSName;
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_OSName
{
    if (NodeUtils->isLinux() == 1)
    {
        return "Linux";
    }
    elsif (NodeUtils->isAIX() == 1)
    {
        return "AIX";
    }
    return undef;
}

#--------------------------------------------------------------------------------

=head3    get_PkgArchitecture

        Linux only routine.

        Returns the rpm package architure for the OS in $::PLTFRM
        i.e. i386 for linux

        Arguments:
                $output,
                $osarch
        Returns:
                none
        Globals:
                $::PLTFRM
        Error:
                messageFromCat E2
        Example:
                $::ATTRS{'InstallPkgArchitecture'} =
                        NodeUtils->get_PkgArchitecture;
        Comments:
                Works for Linux.  Returns null values $::PLTFRM
                is AIX, and exits with E2 for any other $::PLTFRM. 

=cut

#--------------------------------------------------------------------------------

sub get_PkgArchitecture
{
    my ($cmd, $output, $osarch);
    if ($::PLTFRM eq "Linux")
    {
        $cmd    = "$::UNAME -m";
        $output = NodeUtils->runcmd($cmd);
        chomp($output);

        $osarch = $output;

        return (length($osarch) ? $osarch : undef);
    }
    elsif ($::PLTFRM eq "AIX")
    {
        $osarch = "";
        return (length($osarch) ? $osarch : undef);
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }
}

#--------------------------------------------------------------------------------

=head3    get_pkgVersion

        AIX only routine.

        Returns the installp image version from Installp command which,
        looks into the .toc file.

        Arguments:
                $installpPackage
        Returns:
                AIX installp image version as a string
        Globals:
                $::PLTFRM
                $::INSTALLPCMD
        Error:
                messageFromCat E2
        Example:
                not used outside NodeUtils
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_pkgVersion
{
    my ($class, $pkg) = @_;
    my ($cmd, $output, $version);

    if ($::PLTFRM eq "Linux")
    {
        $version = "";
        return (length($version) ? $version : undef);
    }
    elsif ($::PLTFRM eq "AIX")
    {
        $cmd    = qq($::INSTALLPCMD -L -d . | grep $pkg 2>&1);
        $output = NodeUtils->runcmd($cmd);
        chomp($output);
        (undef, undef, $version, undef) = split(/:/, $output);
        return (length($version) ? $version : undef);
    }
    else
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgINVALID_OSTYPE');
    }

}

#--------------------------------------------------------------------------------

=head3    getSetupKRB5                                                       #

        Gets or sets up KRB5 for a Management Server Node. 

        Arguments:
               none
        Returns:
                1 on failure
        value of attribute on success
        Globals:
                none
        Error:
                none
        Example:
                 my $krb5setup = NetworkUtils->getSetupKRB5();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getSetupKRB5
{

    # set local scope because we only want classes on the mgmt svr
    $ENV{'CT_MANAGEMENT_SCOPE'} = 1;

    # todo: remove when lsrsrc-api converts to above
    $ENV{'CT_SESSION_SCOPE'} = 1;
    if (NodeUtils->isMgmtSvr())
    {    #only defined on managment server
        my $outref =
          NodeUtils->runrmccmd('lsrsrc-api', "-i",
                               "-s IBM.DmsCtrl::::SetupKRB5");
        return $$outref[0];
    }
    return 1;
}

#--------------------------------------------------------------------------------

=head3    listNodeAttrs


        Return attribute values for a given array of node names.

        Before calling this function, you can optionally call gatherNodeList()
        to build the array of node names from user input.

        You can also optionally call resolveAndUndup() separately, if you need
        access to the resolved list.

        Arguments:
           arrayref    A reference to the array containing the list of nodes.
                       If the list is empty and the WhereStr option is not
                       specified, all the nodes in the ManagedNode class 
                       will be selected.
           attrs       list of attributes that should be returned.
                       Multiple attribute names can be separate by spaces
                       and/or commas.
           opthashref  A reference to a hash with the following options:

                WhereStr:          A where string to use instead of a nodeList.
                IncludeAttrNames:  set to 1 if you want the attribute name to
                                   precede each attribute value.
                SkipResolve:       set to 1 if this function should not do name
                                   resolution on the list of nodes and remove
                                   duplicates.  If you set this to 1, you must
                                   also pass in Res2Unres below.
                Res2Unres:         reference to the hash returned by
                                   resolveAndUndup().
                ResourceClass:     resource class to get the node info from.
                                   Default is IBM.ManagedNode.  Make sure the
                                   environment variable CT_MANAGEMENT_SCOPE is
                                   set appropriately for the class being used
                                   (for IBM.ManagedNode it should be 1).
        Returns:
         Returns a reference to an array in which each line will contain
         the attributes for 1 node, separated by :|:

         Also $::LISTNODEATTRS_NUMNOTFOUND will be set to the number of nodes that
         were specified, but not found.
        Globals:
         $::LISTNODEATTRS_NUMNOTFOUND will be set to the number of nodes specified
        Error:
                none
        Example:
                none 
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub listNodeAttrs
{
    my ($class, $arrayref, $attrs, $opthashref) = @_;

    # Process the select argument
    if (length($attrs))
    {
        $attrs =~ s/[, ]+/::/g;
    }    # lsrsrc-api needs the attrs separated by ::
    else
    {
        $attrs = "'*b0x0020'";
    }    # this means return all public attributes

    # Set up where string
    my ($where, $whereattr, $ar2, $res2unres, $dontstripnameattr);

    if ($$opthashref{'ResourceClass'} eq 'IBM.Host')
    {
        $whereattr = 'NodeNameList';
    }
    elsif ($$opthashref{'ResourceClass'} eq 'IBM.DeviceHwCtrl')
    {
        $whereattr = 'Name';
    }

    my $numtobefound = 0;    # 0 means we do not know, i.e. a where string
    if (defined($$opthashref{'WhereStr'}))
    {
        $where = NodeUtils->quote($$opthashref{'WhereStr'});
    }
    elsif (defined($arrayref) && scalar(@$arrayref))
    {
        if ($$opthashref{'SkipResolve'})
        {
            $ar2 = $arrayref;
            if (!defined($$opthashref{'Res2Unres'}))
            {
                if (!$NodeUtils::NO_MESSAGES)
                {
                    NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET,
                                              'W', 'EMsgNO_RES2UNRES');
                }
                $NodeUtils::errno = 33;
                $res2unres        = {};
            }
            else { $res2unres = $$opthashref{'Res2Unres'}; }
        }
        else
        {
            ($ar2, $res2unres) = NodeUtils->resolveAndUndup($arrayref);
        }
        $where             = NodeUtils->buildWhereInList($ar2, $whereattr);
        $numtobefound      = scalar(@$ar2);
        $dontstripnameattr = $attrs =~ /(^|::)Name(::|$)/;
        if (!$dontstripnameattr) { $dontstripnameattr = $attrs =~ /\*(b|p)/; }
        if ($$opthashref{'ResourceClass'} eq 'IBM.Host')
        {
            $attrs = "NodeNameList::$attrs";
        }
        else
        {
            $attrs = "Name::$attrs";
        }    # prepend the Name attr so we can tell which ones were found
    }
    else { $where = ''; }    # this will pick up everything

    # Process other options and run lsrsrc-api cmd
    my $outputFormat = "-D ':|:'";
    my $longFormat   = 0;
    if ($$opthashref{'IncludeAttrNames'})
    {
        $outputFormat .= ' -n';
        $longFormat = 1;
    }
    my $resclass = $$opthashref{'ResourceClass'} || 'IBM.ManagedNode';
    my $numfound = 0;
    my $outref   =
      NodeUtils->runrmccmd(
                           'lsrsrc-api',
                           "$outputFormat -i",
                           "-s ${resclass}::${where}::$attrs"
                           );

    # runrmccmd will exit if the cmd fails
    $numfound = scalar(@$outref);
    my $somenotfound = ($numtobefound && $numfound < $numtobefound);

    # Strip the Name attr from the front and figure out which nodes were not found (if applicable)
    if ($numtobefound)
    {
	my $namefound = 0; #looking for Name attribute, 
	#lsrsrc-api only returns 1 value per attribute, even if attribute apears more than once in the string. 
	if($dontstripnameattr){ #locate the Name attribute in the string, so we can put it back in the right place
	    my @vals = split /::/, $attrs;
	    my $i =0;
	    shift @vals; #Name is the first one
	    foreach my $v (@vals){
		if($v eq "Name"){
		    $namefound = $i;
		    last;
		}
		$i++;
	    }
	}
	foreach my $l (@$outref)
        {
	    # Get the Name attribute and strip it from the beginning of the line
            my ($junk, $name, $rest);
            if ($longFormat) { ($junk, $name, $rest) = split(/:\|:/, $l, 3); }
            else { ($name, $rest) = split(/:\|:/, $l, 2); }
            if (!$dontstripnameattr) { $l = $rest; } #this strips the Name
	    elsif(($namefound != 0) && (!$longFormat)){ #found the Name attribute
		my @values = split /:\|:/, $rest;
		splice @values, $namefound, 0, $name;
		$l = join ":|:", @values;
	    }
	    # Remove this node from the hash so we do not try to get it again
            if ($somenotfound) { delete $$res2unres{$name}; }
        }
    }

    if ($somenotfound)    # some of the specified nodes were not found
    {

        # The only thing left in the hash are the nodes we did not find.  Build
        # the array of unresolved node names and try those
        my @a;
        foreach my $k (keys %$res2unres)
        {
            if ($k ne "" && $k ne $$res2unres{$k})
            {
                push @a, @{$$res2unres{$k}};
            }
        }
        if (scalar(@a))
        {
            $where = NodeUtils->buildWhereInList(\@a, $whereattr);
            $attrs =~ s/^Name:://;
            my $outref2 =
              NodeUtils->runrmccmd(
                                   'lsrsrc-api',
                                   "$outputFormat -i",
                                   "-s ${resclass}::${where}::$attrs"
                                   );
            $numfound += scalar(@$outref2);
            push @$outref, @$outref2;    # append this to the 1st
        }
        $::LISTNODEATTRS_NUMNOTFOUND = $numtobefound - $numfound;
    }
    else                                 # everything found
    {
        $::LISTNODEATTRS_NUMNOTFOUND = 0;
    }

    return $outref;
}

#--------------------------------------------------------------------------------

=head3    SetAllowRequest

        Make sure the management server can update the node information.

        Arguments:
                $ref_DestNodeHash
                $value
        Returns:
                0 - All was successful
                1 - An error occured.
        Error:
                $::NOK
        Example:
                # Turn on ability of a node to request itself managed.
                NodeUtils->SetAllowRequest(\%nodehash, '1');
        Comments:
                Value should be set to 3 by installnode and by updatenode if
                the Mode is not managed.   Otherwise it should be set to 2 by
                updatenode.  During updatenode exit, it should be set to 0. 

=cut

#--------------------------------------------------------------------------------

sub SetAllowRequest
{

    my ($class, $ref_DestNodeHash, $value) = @_;
    my %DestNodeHash = %$ref_DestNodeHash;
    if (!$value)
    {
        $value = "0 ";
    }
    if (keys %DestNodeHash)
    {

        # DestNodeHash is a hash containing attribute values for
        # each node that was provided on the command line.
        my ($cmd, $rc);

        # check each node on our list and set the AllowManageRequest
        # attribute if needed.
        my @nodelist = (keys %DestNodeHash);

        my $nodelist_file = InstallUtils->make_node_list_file(\@nodelist);
        $cmd = "$::CHNODE -f $nodelist_file AllowManageRequest=$value";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', "$cmd",
                                      $rc
                                      );
        }
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $nodelist_file);
        return $::OK;

    }
    else
    {
        return 1;    #a value and nodes must be specified.
    }
}

#--------------------------------------------------------------------------------

=head3    SetControlFlag

        Set the ControlFlag attribute.  Currently, this is used to
        determine whether the node is allowed to write to the status
        log in /csminstall/csm/status/<nodename>.

        Arguments:
                $ref_DestNodeHash
                $value
        Returns:
                $::OK
                1 on error
        Error:
                1 on error
        Example:
                # Turn on ability of a node to write to status file
                NodeUtils->SetControlFlag(\%nodehash, '1');
        Comments:
                $value should be set to 1 by installnode, and then  csmfirstboot
                will run an RMC action to set it back to 0 when the node install is
                complete and no more status messages need to be written to the MS.

=cut

#--------------------------------------------------------------------------------

sub SetControlFlag
{

    my ($class, $ref_DestNodeHash, $value) = @_;
    my %DestNodeHash = %$ref_DestNodeHash;
    if (!$value)
    {
        $value = "0 ";
    }
    if (keys %DestNodeHash)
    {

        # DestNodeHash is a hash containing attribute values for
        # each node that was provided on the command line.
        my ($cmd, $rc);
        my @nodelist = (keys %DestNodeHash);

        my $nodelist_file = InstallUtils->make_node_list_file(\@nodelist);
        $cmd = "$::CHNODE -f $nodelist_file ControlFlag=$value";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', "$cmd",
                                      $rc
                                      );
        }
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $nodelist_file);
        return $::OK;

    }
    else
    {
        return 1;    #a value and nodes must be specified.
    }
}

#--------------------------------------------------------------------------------

=head3    SetMode

        Set a node's Mode attribute to PreManaged, Installing or Managed.

        Arguments:
                $node,
                $mode
        Returns:
                Status code from chnode()
        Globals:
                $::CSMLITE
        Example:
                $rc = NodeUtils->SetMode($node, $mode);_
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub SetMode
{
    my ($class, $node, $mode) = @_;
    my ($cmd, $rc, $fstatus);

    my $CSMLITE = $::CSMLITE;
    if (    ($mode ne "PreManaged")
        and ($mode ne "Installing")
        and ($mode ne "Managed")
        and ($mode ne $CSMLITE)
        and ($mode ne "${CSMLITE}-Installing"))
    {
        NodeUtils->messageFromCat(
              'csmInstall.cat',
              $::MSGMAPPATH,
              'csminstall',
              'E1',
              'EMsgINVALID_MODE',
              $mode,
              "PreManaged, Installing, Managed, $CSMLITE, ${CSMLITE}-Installing"
              );
    }

    $cmd = "$::CHNODE $node Mode=$mode";
    $rc  = system($cmd) >> 8;
    if ($rc != 0)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCMD_FAILED_RC', $::CHNODE, $rc);
        $fstatus = $rc;
    }

    return $fstatus;
}

#--------------------------------------------------------------------------------

=head3    testvalidconsole

        Checks for the valid Console Method attributes. This subroutine 
        compares the given Console method against the list in the
        /opt/csm/bin/*_console Console methods.

        Arguments:
                ConsoleMethod attribute value as a string
        Returns:
                0 - valid console
                1 - not a valid console
                2 - error running ls on /opt/csm/bin
        Globals:
                none
        Error:
                1 or 2
        Example:
                 $retCode =
                    NodeUtils->testvalidconsole($::ATTRS{"ConsoleMethod"});
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub testvalidconsole
{
    my ($class, $my_console) = @_;
    my @temp_console = ();
    @::valid_console = ();
    my $console     = "";
    my $tmp_console = "";
    @temp_console = NodeUtils->runcmd("$::LS \/opt\/csm\/bin\/\*_console", -1);
    if ($::RUNCMD_RC != 0)
    {
        return 2;
    }
    foreach $tmp_console (@temp_console)
    {
        (undef, undef, undef, undef, $console) = split("/", $tmp_console);
        ($console, undef) = split("_", $console);
        push(@::valid_console, $console);
    }
    if (!grep(/^$my_console$/, @::valid_console))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

#--------------------------------------------------------------------------------

=head3    testvalidpowermethod

        Checks for the valid Power Method attributes.

        Arguments:
                $powerMethod as a string
        Returns:
                0 - valid power method
                1 - not valid
        Globals:
                none
        Error:
                1
        Example:
                $retCode =
                   NodeUtils->testvalidpowermethod($::ATTRS{"PowerMethod"});
        Comments:
                This subroutine  compares the given Power method against the one in
                the /opt/csm/lib/lib+<given Power Method>+_power.so. If this Method
                is not found then it checks against the value in  /opt/csm/bin/*_power
                for a power command shipped with csm. If not found there then it
                checks against the value in  /opt/local/*_power.

=cut

#--------------------------------------------------------------------------------

sub testvalidpowermethod
{
    my ($class, $my_powermethod) = @_;
    my @temp_powermethod = ();
    @::valid_powermethod = ();
    my $powermethod     = "";
    my $tmp_powermethod = "";
    my $exit_code       = 0;
    @temp_powermethod = ();
    @temp_powermethod =
      NodeUtils->runcmd("$::LS \/opt\/csm\/lib\/\*_power\.so", -1);

    if ($::RUNCMD_RC != 0)
    {
        $exit_code = 2;
    }
    else
    {
        foreach $tmp_powermethod (@temp_powermethod)
        {
            if (-z $tmp_powermethod)
            {
                next;
            }
            $powermethod = basename($tmp_powermethod);
            $powermethod =~ s/^lib(.*)_power.*$/$1/;
            push(@::valid_powermethod, $powermethod);
        }
        if (!grep(/^$my_powermethod$/, @::valid_powermethod))
        {
            $exit_code = 1;
        }
        else
        {
            $exit_code = 0;
        }
    }
    if (($exit_code == 1) || ($exit_code == 2))
    {
        @temp_powermethod = ();
        @temp_powermethod =
          NodeUtils->runcmd("$::LS \/opt\/csm\/bin\/\*_power", -1);
        if ($::RUNCMD_RC != 0)
        {

            #$exit_code=2;
        }
        else
        {
            foreach $tmp_powermethod (@temp_powermethod)
            {
                if (-z $tmp_powermethod)
                {
                    next;
                }
                $powermethod = basename($tmp_powermethod);
                $powermethod =~ s/(.*)_power.*$/$1/;
                push(@::valid_powermethod, $powermethod);
            }

            if (!grep(/^$my_powermethod$/, @::valid_powermethod))
            {
                $exit_code = 1;
            }
            else
            {
                $exit_code = 0;
            }
        }
    }
    if (($exit_code == 1) || ($exit_code == 2))
    {
        @temp_powermethod = ();
        @temp_powermethod =
          NodeUtils->runcmd("$::LS \/opt\/local\/\*_power", -1);
        if ($::RUNCMD_RC != 0)
        {

            #$exit_code=2;
        }
        else
        {
            foreach $tmp_powermethod (@temp_powermethod)
            {
                if (-z $tmp_powermethod)
                {
                    next;
                }
                $powermethod = basename($tmp_powermethod);
                $powermethod =~ s/(.*)_power.*$/$1/;
                push(@::valid_powermethod, $powermethod);
            }

            if (!grep(/^$my_powermethod$/, @::valid_powermethod))
            {
                $exit_code = 1;
            }
            else
            {
                $exit_code = 0;
            }
        }
    }
    return $exit_code;
}

#--------------------------------------------------------------------------------

=head3	verify_linux_attribute_definitions

	Linux only.

    	Check if all the attributes are there, if not defined then get the default
	from Management Server.  Does a fairly loose test of the values that the 
	attributes have been assigned and will generate an error if it finds
	an incorrect value.  


	Attributes tested are:

	.  InstallOSName
	.  InstallCSMVersion
	.  InstallDistributionName
	.  InstallDistributionVersion
	.  InstallPkgArchetecture
	
	Arguments:
        	none
	Returns:
		undef
	Globals:
		$::ATTRS
		$::PLTFRM
		@::VALID_DISTROS
		@::VALID_CSM_DISTROS
		@::DISTRO
	Error:
		Multiple E1 error messages
	Example:
		NodeUtils->verify_linux_attribute_definitions();
	Comments:
		rewritten for defect 10100

=cut

#--------------------------------------------------------------------------------

sub verify_linux_attribute_definitions
{

    #  Get defaults if the attributes aren't defined

    if (!($::ATTRS{'InstallOSName'}))
    {
        $::ATTRS{'InstallOSName'} = NodeUtils->get_OSName;
    }
    if (!($::ATTRS{'InstallCSMVersion'}))
    {
        $::ATTRS{'InstallCSMVersion'} = NodeUtils->get_CSMVersion("csm\.core");
    }
    if (!($::ATTRS{'InstallDistributionName'}))
    {
        $::ATTRS{'InstallDistributionName'} = NodeUtils->get_DistributionName;
    }
    if (!($::ATTRS{'InstallDistributionVersion'}))
    {
        $::ATTRS{'InstallDistributionVersion'} =
          NodeUtils->get_DistributionVersion;
    }
    if (!($::ATTRS{'InstallPkgArchitecture'}))
    {
        $::ATTRS{'InstallPkgArchitecture'} = ArchiveUtils->get_PkgArchitecture;
    }

    # AIX is not supported - get it out of the routine.
    if (($::ATTRS{'InstallOSName'} eq "AIX") || ($::PLTFRM eq "AIX"))
    {
        MessageUtils->message('E', 'EMsgCopyingAIXpkgs');
        exit 1;
    }

    # Test InstallOSName
    if ($::ATTRS{'InstallOSName'} ne "Linux")
    {
        MessageUtils->message("E2", 'EMsgINVALID_OSTYPE');
    }

    # Test platform
    if ($::PLTFRM ne "Linux")
    {
        MessageUtils->message("E2", 'EMsgINVALID_OSTYPE');
    }

    # Test InstallDistributionName / InstallDistributionVersion
    my $temp_distro =
        $::ATTRS{'InstallDistributionName'} . " "
      . $::ATTRS{'InstallDistributionVersion'};

    if (!grep(/^$temp_distro$/, @::VALID_DISTROS))
    {
        MessageUtils->message('W', 'EMsgUNSUPPORTED_DISTRO',
                              $temp_distro, join(', ', @::VALID_DISTROS));
    }
    else
    {
        $::DISTRO = $temp_distro;
        MessageUtils->message('V', 'IMsgDETECTED_DISTRO', $temp_distro);
    }

    # Test InstallPkgArchitecture
    if ($::ATTRS{'InstallPkgArchitecture'} =~ /i.86/)
    {
        $::ATTRS{'InstallPkgArchitecture'} = "i386";
    }
    elsif ($::ATTRS{'InstallPkgArchitecture'} eq "ppc64")
    {

        #  hip hip, hurrah!
    }elsif($::ATTRS{'InstallPkgArchitecture'} eq "x86_64"){
	#  hahehi 
    }else { MessageUtils->message('E1', 'EMsgNoArch'); }

    # Test InstallCSMVersion
    if (length($::ATTRS{'InstallCSMVersion'}) == 0)
    {
        MessageUtils->message('E2', 'EMsgNO_CORE_COPY');
    }
    if (!grep(/^$::ATTRS{'InstallCSMVersion'}$/, @::VALID_CSM_DISTROS))
    {
        MessageUtils->message(
                              'E5',
                              'EMsgUNSUPPORTED_CSM_DISTRO',
                              "CSM" . $::ATTRS{'InstallCSMVersion'},
                              join(', ', @::VALID_CSM_DISTROS)
                              );
    }
    else
    {
        MessageUtils->message(
                              'V',
                              'IMsgDETECTED_CSM_DISTRO',
                              "CSM" . $::ATTRS{'InstallCSMVersion'}
                              );
    }
}


#--------------------------------------------------------------------------------

=head2    Messaging 

           The NodeUtils messageing subroutines have been moved to their own package:

        MessageUtils.pm

    Please do not add messaging subroutines to NodeUtils.

=cut

#--------------------------------------------------------------------------------

=head3    getMessage
    

    MessageUtils->getMessage

=cut

sub getMessage { shift; return MessageUtils->getMessage(@_); }

#--------------------------------------------------------------------------------

=head3    getMessageFromCat
    

    MessageUtils->getMessageFromCat

=cut

sub getMessageFromCat { shift; return MessageUtils->getMessageFromCat(@_); }

#--------------------------------------------------------------------------------

=head3    getmsg 
    

    MessageUtils->getmsg

=cut

sub getmsg { shift; return MessageUtils->getmsg(@_); }

#--------------------------------------------------------------------------------

=head3    getmsgmap

    MessageUtils->getmsgmap

=cut

sub getmsgmap { shift; return MessageUtils->getmsgmap(@_); }

#--------------------------------------------------------------------------------

=head3    msg

    MessageUtils->msg

=cut

sub msg { shift; return MessageUtils->msg(@_); }

#--------------------------------------------------------------------------------

=head3    message

    MessageUtils->message

=cut

sub message { shift; return MessageUtils->message(@_); }

#--------------------------------------------------------------------------------

=head3    messageFromCat

    MessageUtils->messageFromCat

=cut

sub messageFromCat { shift; return MessageUtils->messageFromCat(@_); }

#--------------------------------------------------------------------------------

=head3    processNewlines

    MessageUtils->processNewlines

=cut

sub processNewlines { shift; return MessageUtils->processNewlines(@_); }

#--------------------------------------------------------------------------------

=head3    substituteValues

    MessageUtils->substituteValues

=cut

sub substituteValues { shift; return MessageUtils->substituteValues(@_); }

#--------------------------------------------------------------------------------

=head3    useTranslatedMsg

    MessageUtils->useTranslatedMsg

=cut

sub useTranslatedMsg { shift; return MessageUtils->useTranslatedMsg(@_); }

#--------------------------------------------------------------------------------

=head2    Run Command Tools

=head3    filterRmcApiOutput

    filter RMC Api Output

    Arguments:
        RMC command
        Output reference
    Returns:
        none
    Globals:
        none
    Error:
        none
    Example:
         NodeUtils->filterRmcApiOutput($cmd, $outref); 
    Comments:
        The error msgs from the RPM -api cmds are pretty messy.
        This routine cleans them up a little bit.

=cut

#--------------------------------------------------------------------------------

sub filterRmcApiOutput
{
    my ($class, $cmd, $outref) = @_;
    if ($::VERBOSE || !($cmd =~ m|^/usr/bin/\S+-api |))
    {
        return;
    }    # give as much info as possible, if verbose

    # Figure out the output delimiter
    my ($d) = $cmd =~ / -D\s+(\S+)/;
    if (length($d))
    {
        $d =~ s/^(\'|\")(.*)(\"|\')$/$2/;    # remove any surrounding quotes
        $d =~ s/([\|\^\*\+\?\.])/\\$1/g
          ; # escape any chars perl pattern matching would intepret as special chars
    }
    else
    {
        $d = '::';
    }    # this is the default output delimiter for the -api cmds
         #$$outref[0] =~ s/^ERROR:\|:.*:\|:.*:\|:.*:\|:.*:\|://;
         #print "d=$d.\n";
    $$outref[0] =~ s/^ERROR${d}.*${d}.*${d}.*${d}.*${d}//;
}

#--------------------------------------------------------------------------------

=head3    runcmd

    Run the given cmd and return the output in an array (already chopped).  Alternatively,
    if this function is used in a scalar context, the output is joined into a single string
    with the newlines separating the lines.  

    Arguments:
        command, exitcode and reference to output
    Returns:
        see below
    Globals:
        $::RUNCMD_RC
    Error:
        Normally, if there is an error running the cmd, it will display the error msg
        and exit with the cmds exit code, unless exitcode is given one of the
        following values:
             0:     display error msg, DO NOT exit on error, but set
                $::RUNCMD_RC to the exit code.
            -1:     DO NOT display error msg and DO NOT exit on error, but set
                $::RUNCMD_RC to the exit code.
            -2:    DO the default behavior (display error msg and exit with cmds
                exit code.
        number > 0:    Display error msg and exit with the given code
    Example:
        my $outref = NodeUtils->runcmd($cmd, -2, 1);     
    Comments:
        If refoutput is true, then the output will be returned as a reference to
        an array for efficiency.

=cut

#--------------------------------------------------------------------------------

sub runcmd
{
    my ($class, $cmd, $exitcode, $refoutput) = @_;
    $::RUNCMD_RC = 0;
    if (!($cmd =~ /2>&1$/)) { $cmd .= ' 2>&1'; }
    if (!$NodeUtils::NO_MESSAGES)
    {
        NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET, 'V', 'IMsgCMD',
                                  $cmd);
    }
    my $outref = [];
    @$outref = `$cmd`;
    if ($?)
    {
        $::RUNCMD_RC = $? >> 8;
        my $displayerror = 1;
        my $rc;
        if (defined($exitcode) && length($exitcode) && $exitcode != -2)
        {
            if ($exitcode > 0)
            {
                $rc = $exitcode;
            }    # if not zero, exit with specified code
            elsif ($exitcode <= 0)
            {
                $rc = '';    # if zero or negative, do not exit
                if ($exitcode < 0) { $displayerror = 0; }
            }
        }
        else
        {
            $rc = $::RUNCMD_RC;
        }    # if exitcode not specified, use cmd exit code
             #print "rc=$rc\n";
        if ($displayerror)
        {
            my $errmsg = '';
            if (NodeUtils->isLinux() && $::RUNCMD_RC == 139)
            {
                $errmsg = "Segmentation fault  $errmsg";
            }
            else
            {
                NodeUtils->filterRmcApiOutput($cmd, $outref)
                  ; # The error msgs from the -api cmds are pretty messy.  Clean them up a little.
                $errmsg = join('', @$outref);
                chomp $errmsg;
            }
            if (!$NodeUtils::NO_MESSAGES)
            {
                NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET, "E$rc",
                                 'EMsgCMD_FAILED', $::RUNCMD_RC, $cmd, $errmsg);
            }
            $NodeUtils::errno = 29;
        }

        #return undef;    # if rc was set msg() will exit, otherwise return output
    }
    if ($refoutput)
    {
        chomp(@$outref);
        return $outref;
    }
    elsif (wantarray)
    {
        chomp(@$outref);
        return @$outref;
    }
    else
    {
        my $line = join('', @$outref);
        chomp $line;
        return $line;
    }
}

#--------------------------------------------------------------------------------

=head3    run_cmd

        Run a system command

        Arguments:
               
            The first argument is a string containing the command to run.

            The second argument is the type of message that should be printed.
                Valid values for msgtype are:  E, W, I, etc.  (same as the msg
                    routine) If msgtype is "E" (the default), the command exits
                    the program with the return code of the command.

                The third argument specifies how the command will run.

        Returns:
                Return code from the shell executing the commmand.
        Globals:
                none
        Error:
            If msgtype is "E" (the default), the command exits the program
        with the return code of the command.

                If runtype is "show_errors" or not specified, stdout will be captured
                and displayed in a message as specified by msgtype.

                If runtype is "show_all", all output will go be sent to stdout or
                wherever the command sends it.  Any errors will be displayed as a
                message as specified by msgtype.

                If runtype is "ignore_errors", all output will go be sent to the
                screen or wherever the command sends it.  Any errors will be ignored.

        Example:
                 NodeUtils->run_cmd($cmd, "W", "ignore_errors");
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub run_cmd
{
    my ($class, $cmd, $msgtype, $runtype) = @_;
    my ($rc, @cmdout, $msgtypestr);

    $msgtype = "E"           if (!$msgtype);
    $runtype = "show_errors" if (!$runtype);

    NodeUtils->message('V', 'IMsgCMD', $cmd);
    if ($runtype eq "show_all")
    {
        $rc = system("$cmd") >> 8;
        if ($rc)
        {

            # Only exit with a return code if msgtype = "E" (Error)
            $msgtypestr = $msgtype;
            $msgtypestr = "$msgtype$rc" if ($msgtype eq "E");
            NodeUtils->message("$msgtypestr", 'EMsgCMD_FAILED_RC', $cmd, $rc);
        }
    }
    elsif ($runtype eq "show_errors")
    {
        @cmdout = `$cmd 2>&1`;
        chomp(@cmdout);    # take the newline off
        $rc = $? >> 8;

        if ($rc)
        {

            # Only exit with a return code if msgtype = "E" (Error)
            $msgtypestr = $msgtype;
            $msgtypestr = "$msgtype$rc" if ($msgtype eq "E");

            NodeUtils->message("$msgtypestr", 'EMsgCMD_FAILED',
                               $cmd, join('', @cmdout));
        }
    }
    elsif ($runtype eq "ignore_errors")
    {
        $rc = system("$cmd") >> 8;
    }
    else
    {
        NodeUtils->message('E1', 'EMsgRUN_CMD_INVALID', $runtype);
    }

    return $rc;
}

#--------------------------------------------------------------------------------

=head3    runrmccmd

    Runs an RMC commmand

    Arguments:
        $rmccmd, $resclass, $options, $select
    Returns:
        the output from  NodeUtils->runcmd($cmd, -2, 1)
        as a ref to the output array.
    Globals:
        none
    Error:
        none
    Example:
         my $outref =
            NodeUtils->runrmccmd('lsrsrc-api', "-i -D ':|:'", $where);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub runrmccmd
{

    #my ($class, $rmccmd, $resclass, $options, $select) = @_;
    my ($class, $rmccmd, $options, $select) = @_;
    my $cmd = "/usr/bin/$rmccmd $options $select";

    return NodeUtils->runcmd($cmd, -2, 1)
      ;    # returns a reference to the output array
}

#--------------------------------------------------------------------------------

=head2    Node & Group Support


=cut

#--------------------------------------------------------------------------------

=head3    add_cluster_nl

    Get hosts currently in CSM and adds to the node list.  
    Routine uses $main::lsnodes_opt as the flag to lsnodes command.

    This description doesn't make much sense.  Maybe someone will
    rewrite it.

    Arguments:
        none
    Returns:
        none
    Globals:
        $main::lsnodes_opt
    Error:
        Prints to STDERR.
    Example:
        not used
    Comments:
        not used??

=cut

#--------------------------------------------------------------------------------

sub add_cluster_nl
{

    my ($hostname, @hostnames);
    my $optcsmdir = "/opt/csm/bin";

    if (!-x "$optcsmdir/lsnode")
    {
        print STDERR
          "Cluster System Management (csm.server) lsnode command not installed\n";
        exit(-1);
    }

    # get the long hostname from CSM lsnode
    chop(@hostnames = `$optcsmdir/lsnode $::lsnodes_opt 2>/dev/null`);

    # user specified -a and lsnode failed then exit
    if ($? != 0)
    {
        print STDERR "Cluster System Management lsnodes command error\n";
        exit(-1);
    }

    foreach $hostname (@hostnames)
    {
        NodeUtils->add_nl($hostname);
    }
}

#--------------------------------------------------------------------------------

=head3    add_nl

    Add a host to the node list. Don't add a hostname if it is already there or
    if the is contained in another name which resolves to the same  host.

    Arguments:
        hostName
    Returns:
        none
    Globals:
        @main::nl;
    Error:
        Prints to STDERR.
    Example:
        none
    Comments:
        none

=cut

#-----------------------------------------------------------------------------

sub add_nl
{

    shift;    # get rid of the class
    my $host = shift;
    my ($hostname, @hostnames);
    my ($newname, $name, $aliases, $addtype, $length, @addrs);
    $host =~ s/\s//g;

    # Now loop through hosts and return if the host is found
    foreach $hostname (@::nl)
    {

        # before adding-  check to see if either hostnames are a shortname
        # for the same host
        if ($hostname =~ /^$host.*/ | $host =~ /^$hostname.*/)
        {

            # resolve hostname of new host to be added to list
            ($name, $aliases, $addtype, $length, @addrs) = gethostbyname($host);
            unless ($name)
            {
                print STDERR "Could not resolve hostname $host\n";
                return (1);
            }
            $newname = $name;

            # resolve hostname of existing node list host
            ($name, $aliases, $addtype, $length, @addrs) =
              gethostbyname($hostname);
            unless ($name)
            {
                print STDERR "Could not resolve hostname $host\n";
                return (1);
            }

            # If both names resolve to the same hostname, then do not add the host
            if ($name eq $newname)
            {
                return;
            }
        }
    }

    # Did not already have this host - add it to node list @::nl
    push(@::nl, $host);
}

#--------------------------------------------------------------------------------

=head3    buildWhereInList

    Build a "where" list

    Arguments:
        reference to an array of nodeNames
        array of where attributes
    Returns:
        where list
    Globals:
        none
    Error:
        none
    Example:
         $where = NodeUtils->buildWhereInList($ar2, $whereattr);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub buildWhereInList
{
    my ($class, $arrayref, $attrname) = @_;
    if (!defined($attrname) || !length($attrname)) { $attrname = 'Hostname'; }

    #todo: handle long cmd line
    my @newarray;
    foreach my $string (@$arrayref){
	my @vals = split ',| ', $string;
	push @newarray, @vals;
    }
    my $where = qq/"$attrname IN ('/ . join("','", @newarray) . q/')"/;

    #my $comma = '';
    #foreach my $a (@$arrayref)
    #  {
    #   my $hostname = NodeUtils->tryHost($a);
    #   $where .= "$comma'$hostname'";
    #   $comma = ',';
    #  }
    #$where .= ')';
    return $where;
}

#--------------------------------------------------------------------------------

=head3    check_duplicate_nodes

          Make sure the nodes in @::Nodes are not already defined as CSM Nodes.

        Arguments:
                none
        Returns:
                0 - no duplicate nodes
                2 - duplicate nodes found
        Globals:
                none
        Error:
                returns 2 on error
        Example:
                 my $retCode = NodeUtils->check_duplicate_nodes;
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub check_duplicate_nodes
{
    my ($returncode) = 0;
    my ($n, $m, $p);
    my ($duplicate_ManagedNodes);

    for $n (0 .. $#::Nodes)
    {
        for $m (0 .. $#::ManagedNodes)
        {
            if ($::Nodes[$n]{"hostname"} eq $::ManagedNodes[$m]{"Hostname"})
            {
                $duplicate_ManagedNodes .=
                  $::ManagedNodes[$m]{"Hostname"} . " ";
            }
        }
    }

    if ($duplicate_ManagedNodes)
    {
        NodeUtils->message('E', 'EMsgALREADY_DEFINED_MANAGEDNODES',
                           $duplicate_ManagedNodes);
        $returncode = 2;
    }

    return ($returncode);
}

#--------------------------------------------------------------------------------

=head3    expandExclusionRange

    Expand exclusion ranges that start with a minus.

    Arguments:
        $nodeList
        $list of expended group nodes
    Returns:
        array of nodeNames
    Globals:
        none
    Error:
        none
    Example:
        _
        if ($node =~ /^-/) {
            push @nodes, NodeUtils->expandExclusionRange($node, $groupExpansion);
        }    
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub expandExclusionRange
{
    my ($class, $node, $groupExpansion) = @_;

    #my (@groups, @nodes);
    $node =~ s/^-//;    # get rid of the leading minus
    my @nodes = NodeUtils->expandRanges($groupExpansion, $node);

    # Prepend a minus on each name.  These names will be excluded later.
    foreach my $n (@nodes) { $n =~ s/^/-/; }
    return @nodes;
}

#--------------------------------------------------------------------------------

=head3    expandGroupRange

     Expand group ranges such as:  g or g1-g3 or 1-3 or g1+2

    Arguments:
        Expand range values over a group.
    Returns:
        array of expended goup ranges.
    Globals:
        none
    Error:
        none
    Example:
        if ($node =~ /^-/) {
            push @nodes, NodeUtils->expandGroupRange($node, $groupExpansion);
        }
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub expandGroupRange
{
    my ($class, $group, $groupExpansion) = @_;
    my (@groups, @nodes);

    # First expand into multiple groups if it is a range
    $group =~ s/^\+//;
    @groups = NodeUtils->expandNodeRange($group);

    if ($groupExpansion)
    {

        # Now get memberlist for each group
        $NODEGROUPEXPMEM_WARNING = 0;
        my $outref = NodeUtils->listNodeGroupExpMem(@groups);
        $NODEGROUPEXPMEM_WARNING = 1;

        # If the name did not match a group, then assume it is a hostname
        if (scalar(@groups) == 1 && scalar(@$outref) == 0)
        {
            return "+$groups[0]";
        }
        foreach my $row (@$outref)
        {
            my ($name, $nodelist) = $row =~ /^(.+):\|:\{(.*)\}$/;

            #push @nodes, NodeUtils->expandRanges(split(/,/, $nodelist));
            push @nodes, split(/,/, $nodelist);
        }
        return @nodes;
    }
    else    # do not expand groups
    {

        # Put the plus sign back on the group names
        foreach my $g (@groups) { $g =~ s/^/\+/; }
        return @groups;
    }

}

#--------------------------------------------------------------------------------

=head3    expandNodeRange

    Expand node ranges such as :
        n1-n3 or
        1-3 or
        n1+2 or
        2 or
        n1.ibm.com-n3.ibm.com or
        n1.ibm.com+2.
    Arguments:
        node range string
    Returns:
        array of nodeNames representing the expansion
    Globals:
        none
    Error:
        none
    Example:
         @groups = NodeUtils->expandNodeRange($group);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub expandNodeRange
{
    my ($class, $node) = @_;
    my (@nodes, $fRoot, $fDomain, $fNum, $eRoot, $eNum, $eDomain);
    if ($node =~ /-/)    # a range
    {
        my ($front, $end) = split('-', $node, 2);

        # Get the roots of the front part of the range and the end.
        # If there is any problem in the form, assume it is not a range
        ($fRoot, $fNum, $fDomain) = $front =~ /^(.*?)(\d+)(\..+)?$/;
        ($eRoot, $eNum, $eDomain) = $end   =~ /^(.*?)(\d+)(\..+)?$/;

        #print "fRoot=$fRoot, fNum=$fNum, eRoot=$eRoot, eNum=$eNum\n";
        if (   !defined($fNum)
            || !defined($eNum)
            || $fNum >= $eNum
            || $eRoot   ne $fRoot
            || $eDomain ne $fDomain)
        {
            return $node;
        }
    }
    elsif ($node =~ /\+/)    # a base node name plus an increment
    {
        my ($front, $increment) = split(/\+/, $node, 2);
        ($fRoot, $fNum, $fDomain) = $front =~ /^(.*?)(\d+)(\..+)?$/;
        if (!defined($fNum) || !($increment =~ /^\d+$/)) { return $node; }
        if ($ENV{CSM_XCAT_COMPAT} == 1) { $eNum = $fNum + $increment - 1; }
        else { $eNum = $fNum + $increment; }
    }
    elsif ($node =~ /^\d+$/)    # an all numeric node name
    {
        return $ENV{CSM_NODE_PREFIX} . $node;
    }
    else { return $node; }      # no range syntax at all

    # Handle 5-8 and 5+8 cases
    if (!length($fRoot) && !length($fDomain))
    {
        $fRoot = $ENV{CSM_NODE_PREFIX};
        if (!defined($fRoot)) { return $node; }
    }

    my $prefix;
    foreach my $suffix ($fNum .. $eNum)
    {
        my $numOfZeros = (length($fNum) - length($suffix));
        my $prefix     = '0' x $numOfZeros;
        push @nodes, "$fRoot$prefix$suffix$fDomain";
    }

    return @nodes;
}

#--------------------------------------------------------------------------------

=head3    expandRanges

    Expands node and group entries if they use any of the node range syntax.

    EXAMPLES:
      node01-node05:  node01, node02, node03, node04, node05
      n8-n11:  n8, n9, n10, n11
      frame2n5-frame2n7:  frame2n5, frame2n6, frame2n7
      15-20:  n15, n16, n17, n18, n19, n20 (assuming CSM_NODE_PREFIX is set to n)
      n8+3:  n8, n9, n10
      8+3:  n8, n9, n10
      8:  n8
      +g1:  n1, n2, n3 (assuming g1 was a group containing n1, n2, n3)
      -n2:  exclude n2
      -n2-n4:  exclude n2, n3, n4
      -+g1:  exclude the members of g1

     SOME ADDITIONAL RULES:
      - no spaces in the entry
      - the roots of the 1st and last node names must match
      - a name that starts with plus, but is not a valid group will be interpreted as a node name (including the plus)
      - If the right format is not found, it just returns the whole entry as a
        node name.  This means that most hostnames with dashes in them will still be
        treated as a regular hostname.

     DIFFERENCES FROM XCAT NODE RANGES:
      - do not support non-numeric ranges based on definition order of nodes
      - file input with -f
      - regular expressions via dynamic nodegroups
      - suffix not supported in node ranges
      - groups specified with + operator or with -N
      - ranges not supported with hostnames that have dashes in them
      - n1+2 means n1,n2,n3 unless CSM_XCAT_COMPAT is 1, then n1+2 means n1,n2

    ENVIRONEMENT VARIABLES:
      CSM_NO_NODERANGES - disable expansion of node ranges
      CSM_NODE_PREFIX - text to prepend to ranges like 1-5
      CSM_XCAT_COMPAT - if set to 1, then n1+2 means n1,n2

=cut

#--------------------------------------------------------------------------------

sub expandRanges
{
    shift;    # get rid of class name
    my $groupExpansion = shift;

    # The rest of @_ are the node names
    if (!defined($NO_NODERANGES))
    {
        $NO_NODERANGES = defined($ENV{CSM_NO_NODERANGES});
    }
    if ($NO_NODERANGES) { return @_; }

    my @nodes;
    foreach my $node (@_)
    {
        if ($node =~ /^-/)
        {
            push @nodes,
              NodeUtils->expandExclusionRange($node, $groupExpansion);
        }
        elsif ($node =~ /^\+/)
        {
            push @nodes, NodeUtils->expandGroupRange($node, $groupExpansion);
        }
        elsif ($node =~ /-|\+/ || $node =~ /^\d+$/)
        {
            push @nodes, NodeUtils->expandNodeRange($node);
        }
        else { push @nodes, $node; }
    }

    return @nodes;
}

#--------------------------------------------------------------------------------

=head3    gatherNodeList

    Processes all the ways a user can specify nodes to our commands and creates an
    array with the whole list.  The list is checked for duplicates.  A reference to
    the array is returned.  This function will process -n, -N, and -f.  If nodes can
    be passed in as positional args, pass a reference to ARGV (\@ARGV) into this function.

    Arguments:
           arrayref -    reference to ARGV (\@ARGV).  NOTE: If you are going to pass an opthashref,
                you need to also pass an arrayref before it (the arrayref can reference
                an empty array - use []).

           opthashref -    a optional reference to a hash with the following keys:

                NodeFile -    1 or name of file containing node list.
                If 1, it will not look in a file at all.
                If undefined, this function will look in the file specified by $::opt_f.

                NodeGrp -    string containing node groups separated by commas or spaces.
                If undefined, it will look in $::opt_N.

    Returns:
        reference to an array of nodeNames.
    Globals:
        opt_ globals
    Error:
        $NodeUtils::errno = 30;
    Example:
         my $refnodes =
            NodeUtils->gatherNodeList(\@nodelist, \%opthashref);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub gatherNodeList
{
    my ($class, $arrayref, $opthashref) = @_;
    my $nodes = [];    # create a reference to an array
    if (defined($arrayref))
    {
        foreach my $e (@$arrayref)
        {
            push @$nodes, NodeUtils->expandRanges(1, split(/[, ]+/, $e));
        }
    }
    if (defined($::opt_n))
    {
        push @$nodes, NodeUtils->expandRanges(1, split(/[, ]+/, $::opt_n));
    }
    my $groups = $$opthashref{'NodeGrp'} ? $$opthashref{'NodeGrp'} : $::opt_N;
    if (defined($groups))    # they specified node groups
    {
        my $outref = NodeUtils->listNodeGroupExpMem(split(/[, ]+/, $groups));
        foreach my $row (@$outref)
        {
            my ($name, $nodelist) = $row =~ /^(.+):\|:\{(.*)\}$/;

            #            push @$nodes, NodeUtils->expandRanges(split(/,/, $nodelist));
            push @$nodes, split(/,/, $nodelist);
        }
    }
    if (!defined($$opthashref{'NodeFile'}) || $$opthashref{'NodeFile'} ne "1")
    {
        my $file =
          $$opthashref{'NodeFile'} ? $$opthashref{'NodeFile'} : $::opt_f;
        if (defined($file))    # read the node list from the file
        {
            if (open(NODELIST, $file))
            {
                while (<NODELIST>)
                {
                    chomp($_);
                    push @$nodes,
                      NodeUtils->expandRanges(1, split(/[, ]+/, $_));
                }
                close(NODELIST);
            }
            else
            {
                if (!$NodeUtils::NO_MESSAGES)
                {
                    NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET,
                                         'E', 'EMsgNODELIST_FILE', $file, "$!");
                }
                $NodeUtils::errno = 30;
            }
        }
    }
    return $nodes;
}

#--------------------------------------------------------------------------------

=head3    generate_node_range

          Generate the list of nodes to define.  If the starting IP address
          (or hostname) and the count are provided, generate all the IP addresses
          from the starting IP address up to the correct ending number.

        Arguments:
                none
        Returns:
               @Nodes  - an arrary of nodenames
        Globals:
                @::ClusterOptions
                @$::nodelist
        Error:
                E2 message if no nodes are available from @$::nodelist
        Example:
                 NodeUtils->generate_node_range;
        Comments:
                might be good to give more info on the globals

=cut

#--------------------------------------------------------------------------------

sub generate_node_range
{
    my (@Nodes);
    my $i = 0;
    my ($node, $hostname, $ipaddr, $shorthost);

    # Generate a range of IP addresses based on the starting_nodename
    # and the node_count
    if (    $::ClusterOptions{"starting_nodename"}
        and $::ClusterOptions{"node_count"})
    {

        # Set the first node to the starting nodename
        $node = $::ClusterOptions{"starting_nodename"};

        # Increment the IP Address up to the number in node_count
        while ($i < $::ClusterOptions{"node_count"})
        {

            # Get the IP Address and hostname for the node.
            # getHost can accept either an IP address or a hostname as its
            # input parameter.
            ($hostname, $ipaddr) = NodeUtils->getHost($node);
            ($shorthost = $hostname) =~ s/\..*$//;

            $Nodes[$i]{"name"}      = $shorthost;
            $Nodes[$i]{"shorthost"} = $shorthost;
            $Nodes[$i]{"hostname"}  = $hostname;
            $Nodes[$i]{"ipaddr"}    = $ipaddr;

            $node = InstallUtils->inc_ip($ipaddr);    # Get the next IP Address
            $i++;
        }
    }
    elsif (@$::nodelist)
    {
        $i = 0;
        foreach my $node (@$::nodelist)
        {
            ($hostname, $ipaddr) = NodeUtils->getHost($node);
            ($shorthost = $hostname) =~ s/\..*$//;

            $Nodes[$i]{"name"}      = $shorthost;
            $Nodes[$i]{"shorthost"} = $shorthost;
            $Nodes[$i]{"hostname"}  = $hostname;
            $Nodes[$i]{"ipaddr"}    = $ipaddr;

            $i++;
        }
    }
    else
    {

        #die "No nodes provided!\n";
        NodeUtils->message('E2', 'EMsgNoNodesProvided');
    }

    if ($::VERBOSE)
    {
        NodeUtils->message('V', 'IMsgNEW_NODES_TO_DEFINE');
        for $i (0 .. $#Nodes)
        {
            NodeUtils->message('I', 'IMsgShow_Output', $Nodes[$i]{"hostname"});
        }
    }

    return @Nodes;
}

#--------------------------------------------------------------------------------

=head3    get_target_nodes

        Get a list of target nodes from the command line 

        Arguments:
                (\@ARGV) either from @ARGV 
                $::opt_n ($node group string) 
                $::opt_N $file containing node list 1 -- skips the check for not
                        found nodes
        Returns:
                \@DestNode      = reference to list of all target nodes
                \@lsnode_info   = reference to a list of results from lsnode command
                                  (only for the nodes in @DestNode)
                \%DestNodeHash  = reference to a hash of hostnames and attributes
                                  (foreach node in @Destnode):
                                  $DestNodeHash{$hostname}{$attribute_name} = "attribute value"
                                  For the list of attributes see $lsnode_attr
        Globals:
                $::ALL          - Distribute to all nodes
                $::MANAGED      - Distribute to all nodes where Mode="Managed"
                $::PRE_MANAGED  - Distribute to all nodes where Mode="PreManaged"
        Error:
                None documented
        Example
                my ($ref_DestNode, $ref_lsnode_info, $ref_DestNodeHash) =
                        NodeUtils->get_target_nodes(\@ARGV, $::NODE_GRPS, $::FILE);
        Comments:
                Common method for getting node list from command line.

=cut

#--------------------------------------------------------------------------------

sub get_target_nodes
{
    my ($class, $ref_nodelist, $nodegrp_list, $file, $skipNFcheck) = @_;
    my @nodelist = @$ref_nodelist;
    my (
        @DestNode,   @DestGroup,   %DestKeyTemp,
        %all_groups, @lsnode_info, @empty_array
        );

    my @real_nodelist;    #split the nodes if there are commas
    foreach my $n (@nodelist)
    {
        if ($n =~ m/,/)
        {
            my @tmp = split ',', $n;
            foreach my $t (@tmp)
            {
                push @real_nodelist, $t;
            }
        }
        else
        {
            push @real_nodelist, $n;
        }
    }
    @nodelist = @real_nodelist;
    undef @real_nodelist;

    my $lsnode_attr =
      "Hostname,ManagementServer,InstallOSName,InstallCSMVersion,InstallDistributionVersion,InstallDistributionName,InstallPkgArchitecture,Mode,InstallAdapterMacaddr,InstallAdapterName,InstallAdapterType,InstallAdapterDuplex,InstallAdapterSpeed,InstallMethod,ConsoleSerialDevice,Status,InstallServer,InstallTemplate,PowerMethod,InstallDiskType,InstallDisk,PowerStatus,ConsoleSerialSpeed,InstallAdapterGateway";

    # These delimeters are used with the lsnode command.  A simple colon (:)
    # cannot be used since there are colons in InstallAdapterMacaddr.
    #my $delim = ':|:';        # Used on the lsnode command
    my $check_delim = ':\|:';    # Used when splitting the line apart

    if ($::ALL || $::MANAGED || $::PRE_MANAGED)
    {                            #distribute to all nodes of a certain set
        my $select_string;
        if ($::MANAGED)
        {
            $select_string = "Mode=\"Managed\"";
        }
        elsif ($::PRE_MANAGED)
        {
            $select_string = "Mode=\"PreManaged\"";
        }
        else
        {                        #just managednodes
            $select_string = "";
        }
        my %opthash = (WhereStr => $select_string);
        my $ref_lsnode_info =
          NodeUtils->listNodeAttrs(\@empty_array, $lsnode_attr, \%opthash);
        @lsnode_info = @$ref_lsnode_info;

        foreach my $line (@lsnode_info)
        {
            chomp $line;
            my $hostname = (split /$check_delim/, $line)[0];
            push @DestNode, $hostname;
        }
    }
    else
    {    #we are not distributing to all nodes of a certain mode
        my %opthashref = ();
        if ($file)
        {
            %opthashref = (NodeFile => $file, NodeGrp => $nodegrp_list);
        }
        else
        {
            %opthashref = (NodeFile => 1, NodeGrp => $nodegrp_list);
        }
        my $refnodes = NodeUtils->gatherNodeList(\@nodelist, \%opthashref);
        if (scalar @$refnodes)
        {
            my $ref_lsnode_info =
              NodeUtils->listNodeAttrs($refnodes, $lsnode_attr);
            @lsnode_info = @$ref_lsnode_info;
            if (!$skipNFcheck)
            {
                InstallUtils->checkForNotFound($refnodes);
            }

        }
        else
        {
            @lsnode_info = ();
        }
    }

    my %DestNodeHash;
    foreach my $line (@lsnode_info)
    {    #this only has node names in it from the cluster
        my @attributes = split /$check_delim/, $line;
        my $hostname = $attributes[0];
        chomp $line;
        my @attr_names = split ',', $lsnode_attr;
        my $index = 0;
        foreach my $attr (@attr_names)
        {
            $DestNodeHash{$hostname}{$attr} = $attributes[$index];
            $index++;
        }
    }

    if (@::VALID_INSTALLMETHODS)
    {
        my %meths;
        foreach my $method (@::VALID_INSTALLMETHODS)
        {
            $meths{$method} = 1;
        }
        my @methString = keys %meths;
        foreach my $target (keys %DestNodeHash)
        {
            if (!$meths{$DestNodeHash{$target}{'InstallMethod'}})
            {
                if (!($::ALL || $::MANAGED || $::PRE_MANAGED))
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                        'csminstall', 'E1', 'EMsgINVALID_INSTALL_METH', $target,
                        "@methString");
                }
                else
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                         'csminstall', 'W', 'EMsgINVALID_INSTALL_METH', $target,
                         "@methString");
                    delete $DestNodeHash{$target};
                }
            }
        }
    }

    my @tmpDestNode = keys %DestNodeHash;
    my @return_array = (\@tmpDestNode, \@lsnode_info, \%DestNodeHash);
    return @return_array;
}

#--------------------------------------------------------------------------------

=head3    listNodeGroupExpMem

    Return the expanded member list for each of the node group names passed in.

    Arguments:
        One or more node groups as parameters
    Returns:
        reference to an array:

        Each element of the array represents one (1) row and has the format:

                    nodegroupname:|:{node1,node2,node3}


    Globals:
        none
    Error:
        none
    Example:
         my $outref =
            NodeUtils->listNodeGroupExpMem(@groups);
    Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub listNodeGroupExpMem
{
    shift;    # get rid of the class arg - the rest of @_ are the group names
    my $where = '';
    if (scalar(@_))
    {

        # We do it this way instead of putting all the groups in one IN expression because
        # this way guarantees they will come back in the same order specified.
        foreach my $g (@_)
        {
            $where .= qq( -s IBM.NodeGroup::"Name='$g'"::Name::ExpMemberList);
        }
    }
    else { $where = '-s IBM.NodeGroup::::Name::ExpMemberList'; }

    # Get the data
    my $outref = NodeUtils->runrmccmd('lsrsrc-api', "-i -D ':|:'", $where);
    if ($::RUNCMD_RC)
    {
        $outref = [];
    }
    if (scalar(@_) && scalar(@$outref) < scalar(@_) && $NODEGROUPEXPMEM_WARNING)
    {
        if (scalar(@_) == 1)
        {
            if (!$NodeUtils::NO_MESSAGES)
            {
                NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET, 'W',
                                          'EMsgGROUP_NOT_FOUND', $_[0]);
            }
            $NodeUtils::errno = 31;
        }
        else
        {
            if (!$NodeUtils::NO_MESSAGES)
            {
                NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET, 'W',
                                    'EMsgSOME_GROUPS_NOT_FOUND', join(',', @_));
            }
            $NodeUtils::errno = 32;
        }
    }
    return $outref;
}

#--------------------------------------------------------------------------------

=head3    resolveAndUndup

    Take the reference to an array of node names and resolve each name to its
    primary hostname and then eliminate duplicates in the list.  Returns a reference
    to a new array.  This function is separate from gatherNodeList because it is
    rather expensive to do all the name resolutions, so this should only be called
    when necessary.  For example, if you are going to pass the node list to lsnode,
    lsnode will do this for you, so you do not need to call this.

    Arguments:
        reference to an array of nodeNames.
    Returns:
        Returns a reference to processed array. This function can also return a
        reference to a hash mapping each resolved name back to its original name.    
    Globals:
        none
    Error:
        none
    Example:
        _
    Comments:
        This function also processes exclusions (node names that start with minus),
        unless the CSM_NO_NODERANGES env var is set.

=cut

#--------------------------------------------------------------------------------

sub resolveAndUndup
{
    my ($class, $arrayref) = @_;
    if (!$NodeUtils::NO_MESSAGES)
    {
        NodeUtils->messageFromCat($MSGCAT, $MSGMAPPATH, $MSGSET, 'V',
                                  'IMsgRESOLVING');
    }
    my $hash    = {};
    my $exclude = {};

    #my @ar1;
    my $ar2 = [];
    if (!defined($NO_NODERANGES))
    {
        $NO_NODERANGES = defined($ENV{CSM_NO_NODERANGES});
    }

    # Go through the list once to find all the exlusions
    if (!$NO_NODERANGES)
    {
        foreach my $node (@$arrayref)
        {
            if ($node =~ /^-/)
            {
                my $n2 = substr($node, 1);
                my $hostname = NodeUtils->tryHost($n2);
                $$exclude{$hostname}++;
            }
        }
    }

    my $numnodes = scalar @$arrayref;
    if ($numnodes > 15)
    {    #if there are more than 15 nodes
        NodeUtils->cacheEtcHosts();    #cache /etc/hosts if used
    }

    # Now go through the list a 2nd time
    foreach my $node (@$arrayref)
    {
        if (!$NO_NODERANGES && $node =~ /^-/)
        {
            next;
        }    # we already put the exclusions in the exclude hash
        my $resolved;
        my $hostname = NodeUtils->tryHost($node, \$resolved);
        if (!defined($$exclude{$hostname}))
        {
            if (!$resolved)

              # Hosts that are not resolved successfully
              # are placed under an empty key
            {
                $hostname = "";
                push @$ar2, $node;
            }

            if (!defined($$hash{$hostname}))
            {
                $$hash{$hostname} = [$node];
                if ($resolved)
                {
                    push @$ar2, $hostname;
                }
            }
            else
            {
                push(@{$$hash{$hostname}}, $node);    # record duplicates
            }
        }
    }

    if (wantarray) { return ($ar2, $hash, $exclude); }
    else { return $ar2; }
}

#--------------------------------------------------------------------------------

=head3    subtractOrIntersect

     Does @$g1-@$g2 and returns the resulting array. The arrays passed in
    and the array returned are all references.  If $intersect is 1, then
    it finds the intersection of @$g1 and @$g2 instead. g1 and g2 are 
    groups of nodeNames.

    Arguments:
        $ref_group1 
        $ref_group2 
        $bool_intersect.
    Returns:
        ref_array - result of subtraction or intersection.
    Globals:
        none
    Error:
        none
    Example:
        not used
    Comments:
        not used ??

=cut

#--------------------------------------------------------------------------------

sub subtractOrIntersect
{
    my ($class, $g1, $g2, $intersect) = @_;
    if ($intersect) { $intersect = 1; }    # we need it exactly 0 or 1
    else { $intersect = 0; }

    # make a hash out of g2
    my %g2hash;
    @g2hash{@$g2} = (1) x scalar(@$g2);

    #foreach (@$g2) { $g2hash{$_}++; }

    # go through @g1 and only copy elements to the returned array that are not in
    # %g2hash
    my $out = [];

    # this cryptic line says: if the element of g1 is not in g2 and we are
    # doing a subtraction, then add it to the out arrary.  Or if the element
    # of g1 is in g2 and we are doing the intersection, then add it to out.
    foreach my $g (@$g1)
    {
        if (defined($g2hash{$g}) == $intersect) { push @$out, $g; }
    }
    return $out;
}

#--------------------------------------------------------------------------------

=head2    Networking - Moved to NetworkUtils

=cut

#--------------------------------------------------------------------------------

=head3  cacheEtcHosts
    

    NetworkUtils->cacheEtcHosts

=cut

sub cacheEtcHosts { shift; return NetworkUtils->cacheEtcHosts(@_); }

#--------------------------------------------------------------------------------

=head3  getHost
    

    NetworkUtils->getHost

=cut

sub getHost { shift; return NetworkUtils->getHost(@_); }

#--------------------------------------------------------------------------------

=head3  getRSCThostname
    

    NetworkUtils->getRSCThostname

=cut

sub getRSCThostname { shift; return NetworkUtils->getRSCThostname(@_); }

#--------------------------------------------------------------------------------

=head3  isIpaddr
    

    NetworkUtils->isIpaddr

=cut

sub isIpaddr { shift; return NetworkUtils->isIpaddr(@_); }

#--------------------------------------------------------------------------------

=head3  service
    

    NetworkUtils->service

=cut

sub service { shift; return NetworkUtils->service(@_); }

#--------------------------------------------------------------------------------

=head3  tryHost
    

    NetworkUtils->tryHost

=cut

sub tryHost { shift; return NetworkUtils->tryHost(@_); }

#--------------------------------------------------------------------------------

1;

des >k 0PB  7u       #q@#q@#q@                   ./opt/csm/pm/Rpm/RpmIndex.pm .pm                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
#
# @(#)66   1.1   src/csm/core/pm/Rpm/RpmIndex.pm.perl, setup, csm_rveg, rveg0414a 1/20/04 14:20:55
#
#####################################################################

package RpmIndex;

use strict;
use locale;    # honor locale for sorting, dates, etc.

use Fcntl qw(:flock);    # file and directory modules
use File::Find;          # used by copy to search $::opt_p
use FindBin qw($Bin);    # mkpath
use File::Path;
use File::Basename;
use File::Listing;
use Cwd;

use NodeUtils;
use MessageUtils;
use InstallUtils;        # our wrapper package - temporary

umask(0022);             # default file permission mask

# configure search paths

my ($csmroot, $MSGCAT, $MSGMAPPATH, $MSGSET);

BEGIN
{
    $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';
    $MSGCAT  = 'nodecmds.cat';

    if (defined $::MSGMAPPATH)
    {
        $MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
    }
    else { $MSGMAPPATH = "$csmroot/msgmaps"; }

    #$MSGSET = 'NodeUtils';
    $MSGSET = 'MessageUtils';
}

#--------------------------------------------------------------------------------

=head1    RpmIndex

=head2    Package Description

	This program module file, supports the RpmIndex data structures.
	The purpose of RpmIndex is to supply a global hash of key value
	pairs: the rpm package name is the key, and the base path
	to the rpm in the runtime environment is the value.

	For examle, the rpm, tftp-hpa-3.4.rpm when when used as a key to the
	hash will return the path of that rpm in the runtime environment .



	The RpmIndex Abstraction:

	This package implements the model of a runtime index of all rpm files
	available on the local system.  It is an "abstraction" to the extent
	that it exports a full set of operations on the runtime index - it
	implements the abstract data type RpmIndex. Data is at the center of
	the design but not available to the user.  Most of the operations in
	the package operatate on the unexported data structures. It is fair
	to say that the package emodies the ideas of "data hiding" and
	"data abstraction", two design principals popular with C, another
	proceedural language like perl.


	Supported Media:

	RpmIndex supports three types of media common to rpm packages:
	
	1. packages in the local filesystem (including NFS mounts)
		These are supported as normal key value pairs: the rpm
		name is the key and simple path string is the values 

	2. packages in ISO CD file format.
		Iso images are mountable files.  Rpm files
		in iso image files can be operated on like normal rpm files
		in the filesystem.  The RpmIndex routines  will mount and
		unmount the iso image during get and add operations. 

		A media value is supported in the Index which identifies
		these rpm files as "ISO".

	3. packages on CD ROMs. - to be implemented
		These are handled as /dev mounts, and the design
		assumed that the CD contents are either known by the
		caller, or that the CD contents need not be known to
		operate on them as in for example  a block copy of 
		a CD.

		A media value is supported in the Index which identifies
		these types of rpm files as "CDR".

	Filters:

	Filters should exist for most of the key attributes.  If a
	speific filter is missing from the package, use one of the 
	other filter routines (such as path_filter) as a template and
	add the missing filter to the package. Another tip: don't add
	filters until you need them.  For while it would be concptually
	interesting to have a complete implementation of the RpmIndex
	abastraction, filling this file with code that is never used
	will simply increase complexity (a bad thing).

	The filter routines are intended as a way of accessing two types of
	values: the value assoicated with a key, or the all of the values
	associated with the Index.  For example, passing a key to the
	path_filter will return the path associated with the key.  Passing
	the string "INDEX" to the path_filter will return an array of
	all of the unique directories in the index.  This model is altered
	in the media filter where the "INDEX" option is not available, but
	is replaced with "ISO" | "CDR" | "UNK".  A better design would
	eleminate this exception; make the change if the solution occurs
	to you.


	Scope of the Design:

	Not to labor the point, but while the RpmIndex is implemented as
	a global hash, accessing the hash should always be done using the
	routines in this package (in the spirit of data hiding). If you can't
	get the RpmIndex package to give you the  results needed,  this
	shoudld be considered an opportunity for you to make the package more
	robust by adding the unsupplied fucntionality - unless of course you
	are trying to get RpmIndex to return a tuna sandwich, an opeation
	which falls outside the scope of the design.


	The original intention in making this package is to attempt to
	make a perl.org style utility package, to see if thier approach
	would work in usfully encapulating CSM/install domain knowledge.
	This approach is atypical of the CSM/install back-end modules
	(at least at the time of writing), which have generally focused on
	sharing task-based subroutines that do some setup task.

	When adding to this package, please keep in mind that your intention
	should be to extend the completeness of the RpmIndex abstraction. Not
	to share a bit of rpm related code.  If that is what you need, use
	the xxxUtils.pm.perl modules in src/csm/core/pm.

=cut

#--------------------------------------------------------------------------------

=head2    File Scope Variables - no globals allowed.

	The file scope variables in this package should be considered hidden and
	 are not intended for export.

	Please don't add any global variables to the package.

	Please do not access these file scope variables directly - use the functions
	supplied with this package.

=cut

#--------------------------------------------------------------------------------

# variables with file scope - not exported

my %RpmIndex  = ();     # the rpm index hash
my $separator = ":";    # file separator from -p string

#my $rpm_suffix = ".msg";    # file separator from -p string
my $rpm_suffix = ".rpm";    # file separator from -p string

my $current_mount = 0;      # currently mounted directory

my $RpmIndexCount = 0;      # size of the index

my %index_product_hash = 0; # hash of products in the index

my %index_arch_hash = 0;    # hash of interesting archs

#--------------------------------------------------------------------------------

=head3    add

        Add an rpm and path to the RpmIndex.

	Does not allow duplicate keys - last assignment to a key wins.
        Media is either a mountable iso file or a cdrom (see comments).
	
        Arguments:
                $name		# rpm name
		$path		# rpm path
		$media		# path to mountable media
		$mtype		# media type
        Returns:
		$::OK	- no error checking as yet. 
        Error:
                none
        Example:
		RpmIndex->add( $rpm_name, $path );
		RpmIndex->add( $rpm_name, $path, $iso_path, "ISO"); # $path starts below $iso_path
        Comments:

		supported media_types:
			"ISO"	# iso image file
			"CDR"	# CDROM
			"UNK"	# unknown
		
=cut

#--------------------------------------------------------------------------------

sub add
{

    my ($class, $indexKey, $indexValue, $media, $mtype) = @_;

    # for duplicate keys, the last one wins.
    # indexKey is the full name of an rpm

    # decompose the rpm name
    # the hash is ordered by these values

    my ($arch, $product, $release, $version) = RpmIndex->split_key($indexKey);

    $RpmIndex{$arch}{$indexKey}{'Arch'}       = $arch;
    $RpmIndex{$arch}{$indexKey}{'Name'}       = $indexKey;
    $RpmIndex{$arch}{$indexKey}{'Media'}      = $media;
    $RpmIndex{$arch}{$indexKey}{'Media_Type'} = $mtype;
    $RpmIndex{$arch}{$indexKey}{'Path'}       = $indexValue;
    $RpmIndex{$arch}{$indexKey}{'Product'}    = $product;
    $RpmIndex{$arch}{$indexKey}{'Release'}    = $release;
    $RpmIndex{$arch}{$indexKey}{'Version'}    = $version;

    # increment the size counter
    $RpmIndexCount++;

    # add to the prod and arch hashes
    $index_product_hash{$product} = 1;
    $index_arch_hash{$arch}       = 1;

    return $::OK;
}

#--------------------------------------------------------------------------------

=head3  arch_get_set

	Returns array of architectures of interest. 

	Returns 
		none
        Arguments:
                $arch - name of a arch (i.e. i386) 
        Returns:
                $::OK or $::NOK
        Globals:
                none
        Error:
		none
        Example:
                 my $array_ref = RpmIndex->arch_get_set();
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub arch_get_set
{

    # get arch values from the hash
    return keys %index_arch_hash;
}

#--------------------------------------------------------------------------------

=head3  arch_unset

	Removes the parameter as an architecture of interest.  Any RpmIndex
	routines called after arch_unset($arch,...) will not be applied to
	elements of $arch architecture in the index.

	Multiple archs can be unset using this command multple times.

	Returns 
		none
        Arguments:
                $arch - name of a arch (i.e. "i386") 
        Returns:
		none
        Globals:
                none
        Error:
		none
        Example:
                 RpmIndex->arch_unset("i386");
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub arch_unset
{
    my ($class, $arch) = @_;

    # remove the hash
    if (!$arch) { %index_arch_hash = 0; }

    # remove $arch from the hash
    delete $index_arch_hash{$arch};
}

#--------------------------------------------------------------------------------

=head3  copy

	Copy one or more rpms to a location in the filesystem.

        Arguments:
		@rpm_names	# array of rpm file names ( ie RpmIndex keys )
		$dest_path	# copy the files here 
        Returns:
                $::OK if copied okay
        Globals:
                none
        Error:
		Exits if it can't a copy file or change its permissions
        Example:
                 my $rc = RpmIndex->copy ( @rpm_names, $dest_path };
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub copy
{

    my ($class, $ref_names, $dest) = @_;
    my @names = @$ref_names;

    #print "dest $dest \n";

    my (@iso_file_array, @norm_file_array);
    my $files;

    #foreach my $name (@names) { print "params: $name, $dest\n"; }

    # break out normal and iso_image rpm files

    foreach my $name (@names)
    {

        # test for file type
        if (RpmIndex->in_iso_image($name) == $::OK)
        {

            #print "pushing $name to iso_file_array\n";
            push @iso_file_array, $name;
        }
        else
        {

            # don't need keys, so add path to name

            # get a ref w/single elem: name
            my $path = &deref_elem(RpmIndex->path_filter($name));

            #print "name: $name\n";
            #print "path: $path \n";

            next if ($path == "1");
            my $full_name = join('/', $path, $name);

            #print "full_name: $full_name, path: $path \n";
            push @norm_file_array, $full_name;
        }
    }

    #print "dest $dest\n";

    # make the $dest directory
    mkpath($dest, $::VERBOSE, 0755);

    # handle normal filesystem rpm files
    $files = join(' ', @norm_file_array);

    NodeUtils->message("I", 'IMsgCOPYING', $files);

    #print "copy cmd: $::COPY $files $dest \n";
    NodeUtils->run_cmd("$::COPY $files $dest");

    # handle iso image rpm files

    $files = join(' ', @iso_file_array);

    if (scalar($files) > 0)    # do this if there are $files...
    {

        # Design issue: limit the number of iso mount operations
        my $mount_bool = $::NOK;

        # get a reference turn it into an array
        my $array_ref = RpmIndex->media_type_filter("ISO");
        next if ($array_ref == "1");

        # all Iso files in the Index
        my @media_in_index = @$array_ref;

        # go through media_in_index array
        # and copy every target rpm file found in each iso image file

        foreach my $image (@media_in_index)    # looks at each iso file
        {
            foreach my $file (@iso_file_array)    # look at each target rpm file
            {

                # filter returns media value for $file
                my $media = &dref_elem(RpmIndex->media_filter($file));
                next if ($media == scalar($::NOK));

                my @array = @$array_ref;
                my $media = pop @array;

                # assign filter output to media returned
                next if ($image ne $media);

                # found one of the targets in the iso file $image

                # test the mount
                if ($mount_bool == $::NOK)
                {

                    # nice if we could umount first but
                    $current_mount = ArchiveUtils->mount_iso_image($image);
                    $mount_bool    = $::OK;
                }

                # array ref w/ one elem
                my $array_ref = RpmIndex->path_filter($file);
                next if ($array_ref == "1");

                my @array = @$array_ref;
                my $path  = pop @array;

                NodeUtils->message("I", 'IMsgCOPYING', $file);
                NodeUtils->run_cmd("$::COPY $path/$file $dest");

            }
            if ($mount_bool == $::OK)
            {
                ArchiveUtils->unmount_iso_image($current_mount);
                $mount_bool == $::NOK;    # reset bool
            }

        }
    }

    # set the permissions on the copied files in $dest
    foreach my $name (@names)
    {
        NodeUtils->run_cmd("$::CHMOD +r $dest/$name");
    }

    return $::OK;
}

#--------------------------------------------------------------------------------

=head3	create

        Create an RpmIndex given a list of pathnames.

	This routine takes a list of : separated pathnames as a parameter and
	 generates an index of all rpm packages found in the directories
	(and subdirectories) in the list. If an ISO Image file is found
	in a directory, the ISO file is mounted and the rpms in the image
	are added to the index.  

	unmounted CD's are not currently searched for rpms for the index, though if
	the mount point of a CD is a member of the @base_dir_array, these rpms will
	be included in the index.

        Arguments:
                $base_dir_string - an string of base directories separated by : ,
		(i.e. -p list) this routine will search subdirectories of the base
		directories for rpm packages.
        Returns:
                count of rpms in the index.
        Error:
                none
        Example:
                RpmIndex->create ( $opt_p );
        Comments:
		Designed to accept the commandline string (opt_p) as it comes from	
		 the -p flag.

		Two so-called "wanted subroutines preceed the function
		both are used by File:find.
		

=cut

#--------------------------------------------------------------------------------

#	file scope vars, for passing between &iso_wanted() and &create().
my $current_iso    = ();    # currently mounted iso file
my @iso_file_array = ();    # all potiential iso files in index

#  the "wanted" routines used by find() in create() (see below).

sub iso_wanted
{

    # this routines processes one mounted iso_file at a time
    my $iso_file = @_;      # name of mounted file

    # find() sets these, each time (see create_wanted)
    my $dir  = $File::Find::dir;
    my $file = $_;
    my $path;               # hold corrected $dir

    next if (RpmIndex->is_rpm_file($file) == $::NOK);

    # $dir includes $current_mount
    # have to throw away $current_mount string
    ($path = $dir) =~ s:^$current_mount::;

    RpmIndex->add($file, $path, $current_iso, "ISO");
}

sub create_wanted
{

    # find() sets these, each time it examines something
    my $cur_dir   = $File::Find::dir;     # the directory path with "/"
    my $cur_file  = $_;                   # current file
    my $full_name = $File::Find::name;    # full filename

    if (RpmIndex->is_rpm_file($cur_file) == $::OK)
    {
        RpmIndex->add($cur_file, $cur_dir);
    }
    else
    {                                     # $cur_file may be an iso image

        # try to mount $full_name to $current_mount.
        # if a loop device is availble and $full_name
        # is an ISO image file, the mount should succeeed.

        # to be safe, umnount first
        ArchiveUtils->unmount_iso_image($current_mount);

        next if (ArchiveUtils->mount_iso_image($full_name) == $::NOK);

        # mount succeeded - put $full_name in iso list
        push @iso_file_array, $full_name;

        ArchiveUtils->unmount_iso_image($current_mount);
    }
}

sub create
{
    my ($class, $dir_list) = @_;
    my (@base_dir_array);

    # split the list into the @baseDir_array
    @base_dir_array = split($separator, $dir_list);

    # populate the RpmIndex with rpm filenames and paths
    # treats ISO image files like unmounted filesystems

    # find rpm in all directories in $dir_list
    find(\&create_wanted, @base_dir_array);

    # find rpms in iso mounts

    foreach my $iso_file (@iso_file_array)    # from &create_wanted()
    {

        # for safety - unmount the $current_mount
        ArchiveUtils->unmount_iso_image($current_mount);

        next if (ArchiveUtils->mount_iso_image($iso_file) == $::NOK);

        $current_iso = $iso_file;
        find(\&iso_wanted, $current_mount);

        ArchiveUtils->unmount_iso_image($current_mount);
        $current_iso = 0;
    }

    # RpmIndex is now a full index of all the
    #  rpms below the directories in $dir_list

    return RpmIndex->sizeof;
}

#--------------------------------------------------------------------------------

=head3  deref_elem

	Dereferences an array reference containing a single element
	
	Local to RpmIndex file, not exported

	Useful for woking with filter routines - probably a better approach out there.

	Arguments:
		$array_ref
	Returns:
		Returns a scalar of an array reference containing a single element.
	Globals:
		none
	Error:
		none
	Example:
 		my $path = &deref_elem( RpmIndex->path_filter($name) );
	Comments:

		# Not exported, but feel free to copy this somewhere in your file.

		sub deref_elem
		{
        		my ( $array_ref ) = @_; my ( $elem, $NOK ); $NOK = scalar ( $::NOK );
        		if ( $array_ref == $NOK ) { return $::NOK; }
		
        		# get a ref w/single elem
        		my @array = @$array_ref; my $elem= pop @array;
		
        		return $elem
		}

=cut

#--------------------------------------------------------------------------------

sub deref_elem
{
    my ($array_ref) = @_;
    my ($elem, $NOK);
    $NOK = scalar($::NOK);
    if ($array_ref == $NOK) { return $::NOK; }

    # get a ref w/single elem
    my @array = @$array_ref;
    my $elem  = pop @array;

    return $elem;
}

#--------------------------------------------------------------------------------

=head3	get

	Get an entry from the RpmIndex given a rpm name as key.

        Arguments:
		$rpm_name
        Returns:
    		$name		# rpm name - caller's param
		$path		# path to rpm
		$product	# rpm "short" name
		$version	# rpm version
		$release	# rpm release
		$media		# path mountable media 
		$mtype		# type of media
        Globals:
                none
        Error:
                none
        Example:
		my (	$name,
			$path,
			$product,	
			$version,	
			$release,
			$media
			$mtype  ) = RpmIndex->find ( $name );
        Comments:
		
		supported media types (mtype):
			"ISO" 	# iso image file
			"CDR"	# cdrom
			"UNK"	# unknonw

=cut

#--------------------------------------------------------------------------------

sub get
{
    my ($class, $indexKey) = @_;

    # split the key, in order to access index elems
    my ($arch, $product, $rel, $ver) = RpmIndex->split_key($indexKey);

    my $name    = $RpmIndex{$arch}{$indexKey}{'Name'};
    my $path    = $RpmIndex{$arch}{$indexKey}{'Path'};
    my $product = $RpmIndex{$arch}{$indexKey}{'Product'};
    my $version = $RpmIndex{$arch}{$indexKey}{'Version'};
    my $release = $RpmIndex{$arch}{$indexKey}{'Release'};
    my $media   = $RpmIndex{$arch}{$indexKey}{'Media'};
    my $mtype   = $RpmIndex{$arch}{$indexKey}{'Media_Type'};

    return ($name, $path, $product, $version, $release, $media, $mtype);

}

#--------------------------------------------------------------------------------

=head3  in_cdrom

	Determine if an rpm in the index is contained on a cdrom

        Arguments:
                $rpm_name 
        Returns:
                $::OK if rpm_name is on a known CD
		$::NOK if it is not
        Globals:
                none
        Error:
		none
        Example:
                 my $rc = RpmIndex->in_cdrom($rpm_name};
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub in_cdrom
{
    my ($class, $name) = @_;

    my ($indexKey, $indexValue, $product, $version, $release, $media, $mtype) =
      RpmIndex->get($name);

    if ($mtype eq "CDR") { return $::OK; }

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3  in_iso_image

	Determine if an rpm in the index is embedded in an ISO image file.

        Arguments:
                $rpm_name 
        Returns:
                $::OK if rpm_name is embedded in an ISO image file
		$::NOK if it is an rpm in a fileystem. 
        Globals:
                none
        Error:
		none
        Example:
                 if ( RpmIndex->in_iso_image($rpm_name} == $::OK) { ...; }
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub in_iso_image
{
    my ($class, $name) = @_;

    my ($indexKey, $indexValue, $product, $version, $release, $media, $mtype) =
      RpmIndex->get($name);

    if ($mtype eq "ISO") { return $::OK; }

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3  is_arch

	Returns $::OK or $::NOK depending on wether parameter is
	an arch in the index_arch_hash (if it exists). 

	Returns 
		$::OK if the parameter is an arch which has been previously set,
		or if no arch has been set.
		$::NOK otherwise
        Arguments:
                $arch - name of a arch (i.e. i386) 
        Returns:
                $::OK or $::NOK
        Globals:
                none
        Error:
		none
        Example:
                 RpmIndex->arch_set( $arch) );
                 if ( RpmIndex->is_arch($arch) == $::OK ) {...}
        Comments:
                Don't have to set the arch, in which case any parameter is valid

=cut

#--------------------------------------------------------------------------------

sub is_arch
{
    my ($class, $arch) = @_;

    foreach my $ar (keys %index_arch_hash)
    {
        if ($arch eq $ar) { return $::OK; }
    }

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3  is_product

	Returns $::OK or $::NOK depending on wether filename parameter is
	a the name of a product rpm in the hash. 

	Returns 
		$::OK if the parameter is a known product
		$::NOK otherwise
        Arguments:
                $product - name of a product rpm (i.e. tftp-hpa) 
        Returns:
                $::OK or $::NOK
        Globals:
                none
        Error:
		none
        Example:
                 if ( RpmIndex->is_product($filename) ) { #something }
        Comments:
                This is independent of arch - just relates to product name.

=cut

#--------------------------------------------------------------------------------

sub is_product
{
    my ($class, $product) = @_;
    my $retval = $::NOK;

    foreach my $prod (keys %index_product_hash)
    {
        if ($product eq $prod) { return $::OK; }
    }

    return $retval;
}

#--------------------------------------------------------------------------------

=head3  is_rpm_file

	Returns $::OK or $::NOK depending on wether filename parameter has
	a ".rpm" suffix.

	Returns 
		$::OK if the parameter is an rpm file
		$::NOK otherwise
        Arguments:
                $filename - the name of a file with or without path
        Returns:
                $::OK or $::NOK
        Globals:
                none
        Error:
		none
        Example:
                 if ( RpmIndex->is_rpm_file($filename) ) { #something }
        Comments:
                just checks the suffix, doesn't type the file

=cut

#--------------------------------------------------------------------------------

sub is_rpm_file
{
    my ($class, $filename) = @_;

    my ($base, $path, $type) = fileparse($filename, $rpm_suffix);

    #print "name: $filename, type: $type\n";

    if ($type eq $rpm_suffix) { return $::OK; }

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3  media_filter

	Filter the Index for media values, either for a key or for the Index itself.

        Passing in a key will return the media value assicated with the key.

	Passing a media type string will return an array of all media
	(mountable files) in the Index of that type.

        Arguments:
		$rpm_name | "ISO"  | "CDR" | "UNK"
        Returns:
                $array_ref	- return media value for rpm name as an array reference
			 	- return all media filenames of that type
				  the media are mountable $filenames (includes
				  path). "CDR" and "UNK" not yet implemented
		
        Globals:
                none
        Error:
		return $::NOK;
        Example:
                 my $ret_ref  = RpmIndex->media_filter($rpm_name};
                 my $ret_ref  = RpmIndex->media_filter("ISO"}; # all mountable iso media
        Comments:
		If you need to know what iso image files are stored in the index,
		this is the routine for you.

=cut

#--------------------------------------------------------------------------------

sub media_filter
{
    my ($class, $name) = @_;
    my @return_array;

    # handle an index key

    if (RpmIndex->is_rpm_file($name) == $::OK)
    {
        my ($indexKey, $indexValue, $product, $version, $release, $media,
            $mtype) = RpmIndex->get($name);

        # return $mtype in an array reference
        push @return_array, $mtype;
        return \@return_array;
    }

    # handle a media parameter

    if (   ($name eq "ISO")
        || ($name eq "CDR")
        || ($name eq "UNK"))
    {
        my %media_hash;
        my @return_array;

        foreach my $arch (keys %RpmIndex)
        {
            foreach my $name (keys %{$RpmIndex{$arch}})
            {
                my $mtype = $RpmIndex{$arch}{$name}{'Media_Type'};
                if ($mtype eq "ISO")
                {

                    # returns a mountable filename (including path).
                    my $media = $RpmIndex{$arch}{$name}{'Media'};

                    # need to store one entry per unique value
                    if ($media)
                    {
                        $media_hash{$media} = 1;
                    }
                }
                if ($mtype eq "CDR")
                {
                    print "support for media: $name is not implemented yet\n";
                    return $::NOK;
                }
                if ($mtype eq "UNK")
                {
                    print "support for media: $name is not implemented yet\n";
                    return $::NOK;
                }
            }
        }

        # turn hash into an array of unique elements, and return it.

        foreach my $media (keys %media_hash) { push @return_array, $media; }

        return \@return_array;
    }

    # bad param
    print "bad parameter passed in media_filter: $name  ";

    return $::NOK;

}

#--------------------------------------------------------------------------------

=head3  defs_filter

	Returns a hash of arrays of all indexKeys that match a wildcard string
	from a CSM "defs" file.  Most recent version of a product will be the 
	first element in each arrray in the hash.  The hash keys are $arch values.
	
	
        Arguments:
                $def_string   # e.g. "perl-libwww-perl-*.i?86.rpm"
        Returns:
                reference to a hash of arrays of index keys that 
		match.
        Globals:
                none
        Error:
                none
        Example:
		$hash_ref = RpmIndex->defs_filter( $defs_string );
        Comments:

    	Design:

    	. pop off the arch information from the parameter string
    	. get a substring from the parameter sring - up to the first "*"
    	. for each appropriate arch, search for substring in each indexKey 
    	. if a match is found  search for version substring ( "*-5*" )
    	. sort found keys in to an array;  add array to the return hash

=cut

#--------------------------------------------------------------------------------

sub defs_filter
{
    my ($class, $string) = @_;

    # x86 architectures
    my @x_arch =
      ("i286", "i386", "i486", "i586", "i686", "i786", "i886", "i986");
    my ($product, $version, $release, @arch_array);
    my %return_hash;

    # decompose the input parameter

    my @split_array = split(/\*/, $string);
    my $tail        = pop @split_array;
    my @tmp         = split(/\./, $tail);
    pop @tmp;
    my $arch = pop @tmp;

    # see if there are keys of $arch in index

    if ($arch eq "i?86")    # some x86 architecture
    {
        foreach my $arch (@x_arch)
        {
            if (RpmIndex->is_arch($arch) == $::OK) { push @arch_array, $arch; }
        }
    }
    else
    {                       # some other architecture
        if (is_arch($arch) == $::OK) { push @arch_array, $arch; }
        else { return $::NOK; }    # arch not in index
    }

    # product is substring like "perl-5*"
    my $product = shift @split_array;

    # version is substring like "*-5*"
    # release isn't supported
    my $cnt = scalar(@split_array);
    if ($cnt > 0)  { $version = shift @split_array; }
    if ($cnt == 2) { $release = shift @split_array; }

    # search for matching index keys
    foreach $arch (@arch_array)
    {
        my @return_array;    # reset array each itteration

        foreach my $key (keys %{$RpmIndex{$arch}})
        {
            if ($key =~ /^$product/)
            {
                if ($version eq "-" || $version eq "")
                {
                    push @return_array, $key;

                    #print "found $key\n";
                }
                else         # version value ( e.g. "*-5*" )
                {
                    my $hash_ref     = RpmIndex->version_filter($key);
                    my %version_hash = %$hash_ref;

                    my @version_array = @version_hash{$arch};
                    {
                        foreach my $key_version (@version_array)
                        {
                            my $product     = RpmIndex->product_filter($key);
                            my $version_key =
                              RpmIndex->version_filter($product);

                            if ($version_key =~ /^.*-$version/)
                            {

                                # test the release wildcards here
                                # if this functionality is needed

                                # this $key is a keeper for this $arch
                                push @return_array, $key;

                                #print "found $key\n";
                            }
                        }
                    }
                }
            }
        }

        # sort array - newest first
        my @t_array = sort @return_array;

        #print "returning the following\n";
        #foreach my $key (@t_array){ print "key: $key \n"; }

        @return_hash{$arch} = @t_array;
    }

    # return reference
    return \%return_hash;
}

#--------------------------------------------------------------------------------

=head3  path_filter

	Filter the Index for path values, for a key or for the Index itself.

        Passing in a key will return the path value assicated with the key.

	Passing the string "INDEX" will return an array of all paths
	in the Index.

        Arguments:
		$rpm_name | "INDEX"
        Returns:
                $path		- return path value for rpm name
		@all_paths	- return all paths the path in the Index.
		
        Globals:
                none
        Error:
		return $::NOK;
        Example:
                 my $array_ref = RpmIndex->path_filter($rpm_name}; # single elem
                 my $array_ref = RpmIndex->path_filter("INDEX"};   # returns all paths
        Comments:
		returns all the directories associated with the Index when used
		with the "INDEX" parameter.

=cut

#--------------------------------------------------------------------------------

sub path_filter
{
    my ($class, $name) = @_;
    my @return_array;

    # test parameters
    if (RpmIndex->is_rpm_file($name) == $::OK)
    {
        my ($indexKey, $indexValue, $product, $version, $release, $media,
            $mtype) = RpmIndex->get($name);

        # return $path in an array reference
        push @return_array, $indexValue;

        return \@return_array;
    }

    if ($name eq "INDEX")
    {
        my %path_hash;
        my @return_array;

        foreach my $arch (keys %RpmIndex)
        {
            foreach my $name (keys %{$RpmIndex{$arch}})
            {

                # returns a path.
                my $path = $RpmIndex{$arch}{$name}{'Path'};

                # need to store one entry per unique path
                if ($path) { $path_hash{$path} = 1; }
            }
        }

        # turn hash into an array and return it.
        foreach my $path (keys %path_hash) { push @return_array, $path; }

        # return reference
        return \@return_array;
    }

    # bad param
    print "bad parameter in path_filter\n";

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3  print

	Debug routine:  print the contents of the index stdout

	Arguments:
		none
	Returns:
		none
	Globals:
		none
	Error:
		none
	Example:
 		RpmIndex->print;
	Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub print
{
    my (%nameH, $arch);

    my $index_size = RpmIndex->sizeof;

    print "\n\nIndex size: $index_size\n\n";
    print "Attributes listed in alphabetical order:\n\n";

    foreach my $arch (keys %RpmIndex)
    {
        foreach my $name (keys %{$RpmIndex{$arch}})
        {
            print " $RpmIndex{$arch}{$name}{'Name'}: \n";

            print "		Arch:		$RpmIndex{$arch}{$name}{'Arch'} \n";
            print "		Media:		$RpmIndex{$arch}{$name}{'Media'} \n";
            print "		Media Type:	$RpmIndex{$arch}{$name}{'Media_Type'} \n";
            print "		Path:		$RpmIndex{$arch}{$name}{'Path'} \n";
            print "		Product:	$RpmIndex{$arch}{$name}{'Product'} \n";
            print "		Release:	$RpmIndex{$arch}{$name}{'Release'} \n";
            print "		Version:	$RpmIndex{$arch}{$name}{'Version'} \n";
            print "\n\n\n";
        }
    }
}

#--------------------------------------------------------------------------------

=head3  product_filter

	Filter the Index for product values, for a key or for the Index itself.

        Passing in a key will return the product value assicated with the key.

	Passing the string "INDEX" will return an array of all products
	in the Index.

        Arguments:
		$rpm_name | "INDEX"
        Returns:
                $product 	- return product value for rpm name
		@products	- return all product values in the Index
		
        Globals:
                none
        Error:
		return $::NOK;
        Example:
                 my $array_ref = RpmIndex->product_filter($rpm_name}; # single elem
                 my $array_ref = RpmIndex->product_filter("INDEX"};   # returns all products
        Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub product_filter
{
    my ($class, $name) = @_;
    my @return_array;

    # test parameters
    if (RpmIndex->is_rpm_file($name) == $::OK)
    {
        my ($indexKey, $indexValue, $product, $version, $release, $media,
            $mtype) = RpmIndex->get($name);

        # return $product in an array reference
        push @return_array, $product;

        return \@return_array;
    }

    if ($name eq "INDEX")
    {
        my %product_hash;
        my @return_array;

        foreach my $arch (keys %RpmIndex)
        {
            foreach my $name (keys %{$RpmIndex{$arch}})
            {

                # returns a product
                my $product = $RpmIndex{$arch}{$name}{'Product'};

                # need to store one entry per unique product
                if ($product) { $product_hash{$product} = 1; }
            }
        }

        # turn hash into an array and return it.
        foreach my $product (keys %product_hash)
        {
            push @return_array, $product;
        }

        # return reference
        return \@return_array;
    }

    # bad param
    print "bad parameter in product_filter\n";

    return $::NOK;
}

#--------------------------------------------------------------------------------

=head3  sizeof

	Returns the sizeof the Index 

	Arguments:
		none
	Returns:
		number of elements in the Index
	Globals:
		none
	Error:
		none
	Example:
 		my size = RpmIndex->sizeof;
	Comments:
		none

=cut

#--------------------------------------------------------------------------------

sub sizeof
{
    return $RpmIndexCount;
}

#--------------------------------------------------------------------------------

=head3  split_key

	Returns the parts of an Rpm name:  arch, product, release, version.
		
		$arch		- archetecture ie i386
		$product	- e.g. tkl or Java-JRE
		$release
		$version

        Arguments:
                $key	# the name of an rpm ( may be incomplete )
        Returns:
                ( $arch, $product, $release, $version )
        Globals:
                none
        Error:
                none
        Example:
 		my (	$arch,
			$product,
			$release,
			$version )	= RpmIndex->split_key ($rpm_name);
        Comments:
                retun values are ordered alphabetically (ie arch to version). 

=cut

#--------------------------------------------------------------------------------

sub split_key
{
    my ($class, $indexKey) = @_;

    if ($indexKey == "") { return; }    # empty param

    my @split_array = split(/-/, $indexKey);

    my $rel_rpm = pop @split_array;
    my $version = pop @split_array;

    # yuck
    my ($t3, $t2, $t1);
    $t3 = "-";
    $t1 = $indexKey;

    ($t2 = $t1) =~ s:$version.*$::;
    ($t1 = $t2) =~ s:$t3$::;

    my $product = $t1;

    # parse $rel_rpm
    my ($release, $arch, $rpm) = split(/\./, $rel_rpm);

    return ($arch, $product, $release, $version);

}

#--------------------------------------------------------------------------------

=head3  version_filter

	Filter the Index for versions of the rpms of a product.

	Passing in a key, will return the version value for that key in the index.

        Passing in a product value will return a referance to a hash of  arrays 
	of all versions of the product in the index - one array for each arch.

	The array contents will be organized in decending order: the product rpm
	with the highest version and release will be first in the array.


        Arguments:
		$product
        Returns:
		%$hash_ref	ref of a hash of arrays of $prod rpms in decending
				order of version and release.
        Globals:
                none
        Error:
		return $::NOK;
        Example:
                 my $hash_ref = RpmIndex->version_filter("tkl"};
        Comments:


=cut

#--------------------------------------------------------------------------------

sub version_filter
{
    my ($class, $name) = @_;
    my @return_array;

    # handle an index key

    if (RpmIndex->is_rpm_file($name) == $::OK)
    {
        my ($indexKey, $indexValue, $product, $version, $release, $media,
            $mtype) = RpmIndex->get($name);

        # return $path in an array reference
        push @return_array, $version;

        return \@return_array;
    }

    # handle a product string "tcl"

    if (RpmIndex->is_product($name) == $::NOK) { return $::NOK; }

    my %return_hash;

    foreach my $arch (keys %RpmIndex)
    {
        my @indexKey_array;
        foreach my $key (keys %{$RpmIndex{$arch}})
        {

            # create arrays of all versions of product by arch
            if ($name eq $RpmIndex{$arch}{$key}{'Product'})
            {
                my $indexKey = $RpmIndex{$arch}{$key}{'Name'};
                push @indexKey_array, $indexKey;
            }
        }

        # add sorted array to return_hash
        my @sorted = sort @indexKey_array;

        @return_hash{$arch} = @sorted;
    }

    # return the reference
    return \%return_hash;

}

1;    # leave this here
 k/ 0PB  7u     x ԄAԄAԄA             x     ./opt/csm/pm/ServerUtils.pm  .pm                             #!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2003,2004 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)32   1.27.1.1   src/csm/core/pm/ServerUtils.pm.perl, setup, csm_rveg, rvegs005a 8/3/04 22:13:12
#
#####################################################################

package ServerUtils;

use strict;

#            locale tells perl to honor locale for sorting, dates, etc.
#            More info about locale.pm and perl handling of locales can be found in
#            /usr/lib/perl5/5.6.0/locale.pm and the man page for perllocale.
use locale;
use Socket;

use Fcntl qw(:flock);
use File::Basename;
use File::Find;
use File::Path;    # Provides mkpath()

my $msgs;
my $distro;
my $useTranslatedMsg;
my %catHashes;
my $csmroot;
my ($MSGCAT, $MSGMAPPATH, $MSGSET);
my $NO_NODERANGES;
my $NODEGROUPEXPMEM_WARNING = 1;

# $NodeUtils::NO_MESSAGES;    # Set this to 1 if you do not want NodeUtils to
# print any error msgs

# $NodeUtils::errno;          # Will be set if an error occurs.  You must zero
# this out before calling a NodeUtils function,
# if you want to check it afterwards.

BEGIN
{

    #    This enables us to redirect where it looks for other CSM files during development
    $csmroot = $ENV{'CSM_ROOT'} ? $ENV{'CSM_ROOT'} : '/opt/csm';

    $MSGCAT = 'nodecmds.cat';
    if (defined $::MSGMAPPATH)
    {
        $MSGMAPPATH = $ENV{'CSM_ROOT'} ? "$csmroot/msgmaps" : $::MSGMAPPATH;
    }
    else
    {
        $MSGMAPPATH = "$csmroot/msgmaps";
    }
    $MSGSET = 'NodeUtils';
}

umask(0022);   #  This sets umask for all CSM files so that group and world only
               #  have read permissions.
               #  To change it, simply use the umask call in your script, after
               #  the "use ServerUtils;" line

#--------------------------------------------------------------------------------

=head1    ServerUtils

=head2    Package Description

This program module file, supports the CSM/install server-side dependencies.

If adding to this file, please take a moment to ensure that:

    1.  Your contrib has a readable pod header describing the purpose and use of
         your contrib.

    2. Your contrib is under the correct heading and is in alphabetical order
    under that heading.

    3. You test your contribution by running from the command line:  

       pod2html  --verbose --title=ServerUtils ServerUtils.pm.perl --outfile=ServerUtils.html
       
       and examining the ./ServerUtils.html file in a browser.


=cut

#--------------------------------------------------------------------------------

=head2    Package Dependancies

    use strict;
    use Fcntl qw(:flock);
    use File::Basename;
    use File::Find;
    use File::Path;    # Provides mkpath()

=cut

#--------------------------------------------------------------------------------

=head2    Misc Tools

=cut

#--------------------------------------------------------------------------------

=head3    close_delete_file

        Closes and deletes the file specified by the two input parameters.

        Arguments:
                $file handle
                $file name
        Returns:
                null
        Error:
                none
        Example:
                ServerUtils->close_delete_file($::NODE_LIST_FILE, $nodelist_file);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub close_delete_file
{
    my ($class, $file_handle, $file_name) = @_;
    close $file_handle;

    my $cmd = "$::RM -f $file_name";
    my $rc  = system($cmd) >> 8;
    if ($rc)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $cmd, $rc);
    }
}

#--------------------------------------------------------------------------------

=head3    copy_exceptions_rveg

        A subroutine to hold some file copy hacks for the vega release.

	The rotuine has the release name rveg attached to it, to motiveate those who
	come later to fix the underlying problem for the next release.

        Arguments:
		n/a
        Returns:
                null
        Error:
                none
        Example:
                n/a
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub copy_exceptions_rveg
{
    my (
        $distro_name,    # eg RedHat or SLES (case sensitive)
        $filename        # the name of the file to test.
    ) = @_;

    my $server = $::PLTFRM; # the managment server doing the install

    # This hack relates to an interoprability issue between AIX and Linux.
    # When AIX runs copycsmpkgs on a Linux Distro, it tries to copy a few too many files...

    if (   ($server eq "AIX") &&
        (  ($distro_name =~ /RedHat/)
        || ($distro_name =~ /SLES/)
        || ($distro_name =~ /SuSE/) )
        )
    {

        # just test against the filenames one at a time
        if ($filename eq "/opt/csm/csmbin/nodestatus.client")	{ return $::NOK; }
        if ($filename eq "/opt/csm/csmbin/setbootdisk")		{ return $::NOK; }
        if ($filename eq "/usr/lib/syslinux/pxelinux.0")	{ return $::NOK; }
    }

    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    get_lock

        get ownership of a non-blocking semiphore / file

        Arguments:
                $fileName
        Returns:
                2  if it couldn't open $fileName
                3  if it couldn't lock $fileName
        Error:
                messageFromCat E1
        Example:
                ServerUtils->get_lock("/tmp/updateisvr.sem");_
        Comments:
                get_lock() and release_lock() implement semiphore locking for csm comnands
                such as updatenode.perl.  The devleoper obtains a lock at the beginning
                of execution and hold it until the script completes. It is
                guaranteed that two or more instances of the script will NOT be able to 
                run concurrently.

                This is not a blocking lock.  If a script calls get_lock while another
                instance of the same script has not released the lock, the calling script
                will fail. If the script exits for any reason, the lock is released.

=cut

#--------------------------------------------------------------------------------

sub get_lock
{
    my ($class, $file) = @_;
    my $return_code = 0;
    my $program     = NodeUtils->programName();
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              "V", 'IMsgGet_Lock', $file, $program);
    if (!open(SEM, ">$file"))
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',      $::MSGMAPPATH,
                                  'csminstall',          "E1",
                                  'EMsgSEMAPHORE_ERROR', $file,
                                  "$? $!"
                                  );
    }
    if (!flock(SEM, LOCK_EX | LOCK_NB))
    {
        NodeUtils->messageFromCat(
                                  'csmInstall.cat', $::MSGMAPPATH,
                                  'csminstall',     "E1",
                                  'EMsgLOCK_ERROR', $program,
                                  $file,            "$? $!"
                                  );
    }
}

#--------------------------------------------------------------------------------

=head3    get_uniqu_arry_elemnts

         Returns the unique elements in an array

        Arguments:
                @array_to_examined
        Returns:
                @array_of_unique_ele
        Globals:
                none
        Error:
                undefined
        Example:
                 @::os_prereq =
                        ServerUtils->get_uniqu_arry_elemnts( @::os_prereq );
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_uniqu_arry_elemnts
{
    my ($class, @my_arry) = @_;
    my %my_hsh = ();
    my @uniq   = ();
    my $itm;
    foreach $itm (@my_arry)
    {
        $my_hsh{$itm}++;
    }
    @uniq = keys %my_hsh;
    return @uniq;
}

#--------------------------------------------------------------------------------

=head3    isAutoupdateInstalled

        Checks to see if the Autoupdate RPM is installed on a Management Server

        Arguments:
        nodeHash
        Returns:
                returns 1 if Autoupdate is installed
            0 otherwise
        Globals:
                none
        Error:
                none
        Example:
         none
        Comments:
                This make sense only on a managment server.

=cut

#--------------------------------------------------------------------------------

sub isAutoupdateInstalled
{
    my ($class, $destnodekey) = @_;
    my $exit = 1;    #assume it is installed
      #Autoupdate should be in /csminstall/Linux/<InstallDistributionName>/csm/<InstallCSMVersion>/packages/
      #EX: /csminstall/Linux/RedHat/csm/1.3.0/packages/autoupdate-4.0.1-1.noarch.rpm

    #determine possible directory structures
    my %directories = ();
    foreach my $node (keys %$destnodekey)
    {
        if ($$destnodekey{$node}{'InstallOSName'} eq "Linux")
        {
            my $distro  = $$destnodekey{$node}{'InstallDistributionName'};
            my $version = $$destnodekey{$node}{'InstallCSMVersion'};
            if ($version >= 1.3)
            {
                my $dir = "/csminstall/Linux/$distro/csm/$version/packages/";
                $directories{$dir} = 1;
            }
        }
    }

    #check if there is an autoupdate rpm in the directory
    foreach my $dir (keys %directories)
    {
        `/bin/ls $dir/autoupdate*.rpm 2>/dev/null`;
        my $rc = $? >> 8;
        if ($rc != 0)
        {    #autoupdate isn't there
            NodeUtils->messageFromCat(
                      'csmInstall.cat',                           $::MSGMAPPATH,
                      'csminstall',                               'E',
                      'EMsgNoAutoupdate',                         $dir,
                      "http://freshmeat.net/projects/autoupdate", $dir
                      );
            $exit = 0;
        }
    }
    return $exit;
}

#--------------------------------------------------------------------------------

=head3 release_lock

        Releases a non-blocking semiphore /  file

        Arguments:
                $fileName
        Returns:
                2  if it couldn't open $fileName
                3  if it couldn't lock $fileName
        Error:
                messageFromCat E1
        Example:
                ServerUtils->get_lock("/tmp/updateisvr.sem");_
        Comments:
                get_lock() and release_lock() implement semiphore locking for csm comnands
                such as updatenode.  The develeoper obtains a lock at the beginning
                of execution and hold it until the script completes. It is
                guaranteed that two or more instances of the script will NOT be able to 
                run concurrently.

                This is not a blocking lock.  If a script calls get_lock while another
                instance of the same script has posession of the lock, the calling script
                will fail. If a script exits for any reason, the lock will be released.

=cut

#--------------------------------------------------------------------------------

sub release_lock
{
    my ($class, $file) = @_;

    close(SEM);
    if (-e "$file")
    {
        system("/bin/rm -f $file");
    }
}

#--------------------------------------------------------------------------------

=head2    Cluster Layer

=cut

#--------------------------------------------------------------------------------

=head3    makeSyncHash

        Returns a hash of which directories to distribute to which Install Servers.
        Assigns a value to the global: %::INSTALL_SERVERS - this is an array of the 
        host names of all the install servers in the cluster.                                              

        Arguments:
                %DestNodeHash (where InstallServer is one of the attributes).
        Returns:
                Hash of directory name arrays by install server keys
        Globals:
                %::INSTALL_SERVERS
        Error:
                undefined
        Example:
                 my $sHash =
                   ServerUtils->makeSyncHash($DestNodeHash);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub makeSyncHash
{
    my ($class, $DestNodeHash) = @_;
    my $defDir = "/csmserver";
    my %sHash;
    my $ms_used = 0;
    %::INSTALL_SERVERS = ();
    my @install_servers = ();
    my $progname        = NodeUtils->programName();

    #hash of directory{replacement name}{installserver}
  NODE: foreach my $node (keys %$DestNodeHash)
    {
        my $InstallOSName           = $$DestNodeHash{$node}{'InstallOSName'};
        my $InstallDistributionName =
          $$DestNodeHash{$node}{'InstallDistributionName'};
        if ($$DestNodeHash{$node}{'InstallServer'})
        {
            if ($$DestNodeHash{$node}{'ManagementServer'} eq
                $$DestNodeHash{$node}{'Hostname'})
            {

                #this machine is a MS and a node
                $ms_used = 1;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'W', 'EMsgMSNoInstallServer', $node);
                next NODE;
            }
            my ($server, $rep_dir) = split ':',
              $$DestNodeHash{$node}{'InstallServer'};
            if ($server)
            {
                if ($server eq $$DestNodeHash{$node}{'ManagementServer'})
                {
                    $ms_used = 1;

                    #this node's install server is the same as the managment server
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                             'csminstall', 'I', 'IMsgMSisInstallServer', $node);
                    next NODE;
                }
                if ($progname =~ m/installnode/)
                {

                    #make sure a machine is not an install server of itself
                    my ($node_hostname, $node_ip) = NodeUtils->getHost($node);
                    my ($isvr_hostname, $isvr_ip) = NodeUtils->getHost($server);
                    if ($node_hostname eq $isvr_hostname)
                    {
                        $ms_used = 1;
                        NodeUtils->messageFromCat('csmInstall.cat',
                                               $::MSGMAPPATH, 'csminstall', 'W',
                                               'EMsgISVR_OF_ITSELF', $node);
                        next NODE;
                    }
                }
                my $dir = $defDir;
                if ($rep_dir)
                {

                    #todo: check to make sure this start with a /
                    $dir = $rep_dir;
                }

                #transfer /csminstall/csm/* to all nodes
                push @{$sHash{"/csminstall/csm/"}{$dir}}, $server;

                #%{$::INSTALL_SERVERS{$server}} = (); #hash of a hash
                push @install_servers, $$DestNodeHash{$node}{'InstallServer'};

                #find node attributes

                my $InstallDistributionVersion =
                  $$DestNodeHash{$node}{'InstallDistributionVersion'};

                #my $InstallPkgArchitecture = $DestNodeHash{$node}{'InstallPkgArchitecture'};
                if ($InstallOSName eq "Linux")
                {

                    #All Linux nodes: /csminstall/Linux/<InstallDistributionName>/csm/*
                    # /csminstall/Linux/<InstallDistributionName>/<InstallDistributionVersion>/*
                    push @{$sHash{
                            "/csminstall/Linux/$InstallDistributionName/csm/"}
                          {$dir}}, $server;
                    push @{
                        $sHash{
                            "/csminstall/Linux/$InstallDistributionName/$InstallDistributionVersion"
                          }{$dir}
                      },
                      $server;
                }
                elsif ($InstallOSName eq "AIX")
                {

                    #All AIX Nodes: /csminstall/AIX/csm/*
                    push @{$sHash{"/csminstall/AIX/csm/"}{$dir}}, $server;
                }
                else
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                 'csminstall', 'E1', 'EMsgUnsupportedOS', $node,
                                 $InstallOSName);
                }

            }
            else
            {

                #management server is a server
                $ms_used = 1;
            }
        }
        else
        {
            $ms_used = 1;
        }
    }
    if (!$ms_used)
    {
        $::MS_INSTALL_SERVER = 0;
    }

    #figure out if any of the install servers are also nodes
    foreach my $entry (@install_servers)
    {
        my ($server, $dir) = split ':', $entry;
        if (!$dir) { $dir = $::SERVER_DIRECTORY; }
        if (exists $$DestNodeHash{$server})
        {    #it is a node
            $::INSTALL_SERVERS{'isnode'}{$server}{'dir'} = $dir;
            $::INSTALL_SERVERS{'isnode'}{$server}{'OS'}  =
              $$DestNodeHash{$server}{'InstallOSName'};
            $::INSTALL_SERVERS{'isnode'}{$server}{'DISTRO'} =
              $$DestNodeHash{$server}{'InstallDistributionName'};
        }
        else
        {    #not a node
            my ($real_hostname, $ip) = NodeUtils->getHost($server);

            #print "REAL HOSTNAME = $real_hostname\n";
            $::INSTALL_SERVERS{'notnode'}{$real_hostname}{'dir'} = $dir;
        }
    }
    if (scalar @install_servers)
    {
        for (@install_servers) { s/:.*// }    #remove directory
        my $unreachable = InstallUtils->checkRSReachability(\@install_servers);
        if ($unreachable != 0)
        {
            if (scalar @$unreachable >= 1)
            {

                #there are unreachable InstallServers
                my $isvrs = join ",", @$unreachable;
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E1', 'EMsgISDown', $isvrs);
            }
        }
    }

    return (\%sHash);
}

#--------------------------------------------------------------------------------

=head3    syncServers

        Syncronize a cluster's Install Servers. 

        Arguments:
                 Reference to a nodeName Hash;
        Returns:
                0 on error
        Globals:
                %::INSTALL_SERVERS
        Error:
                0 - there are no install servers in the cluster.
        Example:
                 ServerUtils->syncServers(\%DestNodeHash);
        Comments:
                 The caller of this function must use CFM. 

=cut

#--------------------------------------------------------------------------------

sub syncServers
{

    #use CFM -- all commands that call this function need to use CFM

    my ($class, $DestNodeHash) = @_;
    if(defined $ENV{'CSM_SKIP_ISVR'} && $ENV{'CSM_SKIP_ISVR'} !=0){
      return 0;
    }
    my $sHash = InstallUtils->makeSyncHash($DestNodeHash);
    if (!keys %::INSTALL_SERVERS)
    {    #there are no install servers
        return 0;
    }
    my $distro = NodeUtils->get_DistributionName();

    #rsync is no longer used for SuSE and SLES
    #    if(($distro eq "SuSE") || ($distro eq "SLES")){

    #        CFM->rsyncIsvrs($sHash);
    #PROBLEM: the links are being made wrong:  RPMS -> /csminstall/Linux/SuSE/8.0/i386/SuSE/RPMS or wait,
    #    }
    #    else{ #use rdist
    my $distlocation = "/tmp/csm_servers";
    CFM->createGenDistfile($sHash, $distlocation);
    CFM->distGenDistfile($distlocation);

    #    }
}

#--------------------------------------------------------------------------------

=head2    Filesystem Layer

=cut

#--------------------------------------------------------------------------------

=head3 copyBinaries

        This function takes functionality from installms so that the commands
        updatenode, rmnode, and csmsetupnim can ensure that the latest binaries
        are located in the /csminstall/csm directory.

        This function does the following:
                1. create the /csminstall/csm directory if it doesn't exist 
                2. create the /csminstall/csm/script directories 
                3. copy the binaries into /csminstall/csm, including the defs and pkdefs
                   directory, if the timestamp of the files in /csminstall/csm are older
                   than those installed on the system.
                4. copies updateglibc._RedHat80Nodes for RedHat
                5. copies /tftpboot files for Linux 
                6. Copies hardware control ucode files on AIX to /csminstall/AIX/ucode  
        Arguments:
                none
        Returns:
                none
        Globals:
                $::PREINSTALLDIR
                $::POSTINSTALLDIR
                $::UPDATEDIR
                $::SCRIPTDATADIR"
        Error:
                none
        Example:
                ServerUtils->copyBinaries;
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub copyBinaries
{
    my (
        $class,
        $osname,            # eg Linux or AIX (case sensitive)
        $distro_name,       # eg RedHat or SuSE (case sensitive)
        $distro_version,    # eg 7.3 or 5.2
        $hw_arch,           # eg i386, ppc
        $csm_version,       # eg 1.3.0
    ) = @_;

    my $INSTALLDIR_CSM = "/csminstall/csm";

    #
    # Get information about the OS, distribution, and package
    #
    my %pkginfo;
    ($osname) and $pkginfo{'OSName'} = $osname;
    (!$osname)
      and $pkginfo{'OSName'} = InstallUtils->get_OSName;    #AIX/Linux

    ($distro_name) and $pkginfo{'DistributionName'} = $distro_name;
    (!$distro_name)
      and $pkginfo{'DistributionName'} = NodeUtils->get_DistributionName;

    ($distro_version) and $pkginfo{'DistributionVersion'} = $distro_version;
    (!$distro_version)
      and $pkginfo{'DistributionVersion'} = NodeUtils->get_DistributionVersion;

    ($hw_arch) and $pkginfo{'PkgArchitecture'} = $hw_arch;
    (!$hw_arch)
      and $pkginfo{'PkgArchitecture'} = InstallUtils->get_PkgArchitecture;

    if ($pkginfo{'PkgArchitecture'} =~ /i.86/)
    {
        $pkginfo{'PkgArchitecture'} = "i386";
    }

    ($csm_version) and $pkginfo{'CsmCoreVersion'} = $csm_version;
    (!$csm_version)
      and $pkginfo{'CsmCoreVersion'} =
      InstallUtils->get_CSMVersion("csm\.core");

    if (length($pkginfo{'CsmCoreVersion'}) == 0)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E2', 'EMsgNO_CORE');
    }

    #
    # Create the /csminstall/csm directory if it doesn't exist
    # NOTE: This function will not create any operating system specific
    #       directories, such as /csminstall/csm/AIX
    if (!-d "$INSTALLDIR_CSM")
    {
        mkpath($INSTALLDIR_CSM, $::VERBOSE, 0755);
    }

    # make the script sub-directories if they don't exist
    if (!-d "$::PREINSTALLDIR")
    {
        mkpath($::PREINSTALLDIR, $::VERBOSE, 0755);
    }
    if (!-d "$::POSTINSTALLDIR")
    {
        mkpath($::POSTINSTALLDIR, $::VERBOSE, 0755);
    }
    if (!-d "$::UPDATEDIR")
    {
        mkpath($::UPDATEDIR, $::VERBOSE, 0755);
    }
    if (!-d "$::SCRIPTDATADIR")
    {
        mkpath($::SCRIPTDATADIR, $::VERBOSE, 0755);
    }

    #
    # Store the pkgdefs into a hash
    #
    my %Svrpkgdefs =
      InstallUtils->get_pkgdefs(
                  $pkginfo{'OSName'},              $pkginfo{'DistributionName'},
                  $pkginfo{'DistributionVersion'}, $pkginfo{'PkgArchitecture'},
                  "MgmtServer",                    $pkginfo{'CsmCoreVersion'}
                  );

    #
    # Get the list of binaries to copy
    #
    my @csm_bin_file_csm      = (@{$Svrpkgdefs{csm_bin_copy_csm}});
    my @csm_bin_file_tftpboot = (@{$Svrpkgdefs{csm_bin_copy_tftpboot}});

    # Files to copy to /csminstall/csm
    foreach my $bin_file (@csm_bin_file_csm)
    {
        my @temper_val  = ();
        my $temper_file = ();
        @temper_val  = split(/\//, $bin_file);
        $temper_file = $temper_val[$#temper_val];
        $temper_file = $INSTALLDIR_CSM . "\/" . $temper_file;

        if (-e $temper_file)
        {
            my $exception =
              &copy_exceptions_rveg($distro_name, $temper_file);

            if ($exception == $::OK)
            {
                NodeUtils->runcmd("$::RM -rf $temper_file",                -2);
                NodeUtils->runcmd("$::COPY -pr $bin_file $INSTALLDIR_CSM", -2);
            }
        }
        else
        {
            my $exception =
              &copy_exceptions_rveg($distro_name, $bin_file);
            if ($exception == $::OK)
            {
                NodeUtils->runcmd("$::COPY -pr $bin_file $INSTALLDIR_CSM", -2);
            }
        }

    }

    #
    # copy the files in /opt/csm/install/sample_scripts to /csminstall/csm/scripts
    #
    NodeUtils->runcmd(
                    "$::COPY -p /opt/csm/install/sample_scripts/* $::SCRIPTDIR",
                    0);

    # Copy updateglibc scripts to /csminstall/csm/scripts if DistributionName is
    # RedHat
    #todo: only do copies of scripts with ._ if the nodegrp exists.
    #    if ( $pkginfo{'DistributionName'} eq "RedHat" )
    #    {
    #    NodeUtils->runcmd("$::COPY -p /opt/csm/install/scripts/installprereboot/updateglibc._RedHat80Nodes $::SCRIPTDIR/installprereboot/.", -2 );
    #    }

    if (( $pkginfo{'OSName'} eq "Linux" )
    && ( $::PLTFRM ne "AIX" ))
    {
        my $MS_Arch = `/bin/uname -m`;
        if (($MS_Arch =~ /ppc/) && ($pkginfo{'PkgArchitecture'} =~ /i.86/))
        {
            my $rpmdir = InstallUtils->getRPMSDir(
                        $osname,            # eg Linux or AIX (case sensitive)
                        $distro_name,       # eg RedHat or SuSE (case sensitive)
                        $distro_version,    # eg 7.3 or 5.2
                        $hw_arch,           # eg i386, ppc
                        );          #"Linux", $distname, $distvers, $arch);

            $::FIND = "/usr/bin/find";
            $::GREP = "/bin/grep";
            my $cmd;
            if ($distro_name =~ /RedHat/)
            {
                $cmd = "$::FIND $rpmdir/ -type f | $::GREP \'syslinux\'";
            }
            else
            {
                $cmd =
                  "$::FIND $::INSTALLDIR_CSMPKG -type f | $::GREP \'syslinux\'";
            }
            my $res = `$cmd`;
            chomp $res;

            if ($res ne "")
            {
                $res =
                  `rm -fr /tmp/dir4syslinux; mkdir -p /tmp/dir4syslinux; cd /tmp/dir4syslinux; $::RPM2CPIO $res | cpio -idu --quiet;`;
                my $cmd =
                  "$::FIND /tmp/dir4syslinux -type f | $::GREP \'pxelinux\.0\'";
                my $res = `$cmd`;
                chomp $res;
                @csm_bin_file_tftpboot = ($res);
            }
        }

        # Files to copy to /tftpboot
        foreach my $bin_file (@csm_bin_file_tftpboot)
        {
            NodeUtils->runcmd("$::COPY $bin_file /tftpboot", -2);
        }

        # after files are copied, change the permission:
        InstallUtils->secureFilePermissions('/tftpboot', '0110', '0440');


        #files needed for RMC thin client which is used by the nodes to
        # communicate to the MS during install
        my $HW_ARCH = $pkginfo{'PkgArchitecture'};
        my $MS_ARCH = ArchiveUtils->get_PkgArchitecture();


        if ($MS_ARCH =~ /i.86/)  { $MS_ARCH = "i386"; }
        if ($MS_ARCH =~ /ppc64/) { $MS_ARCH = "ppc"; }
        if ($HW_ARCH =~ /ppc64/) { $HW_ARCH = "ppc"; }
        if ($HW_ARCH =~ /x86_64/)
        {
            $HW_ARCH = "i386";
        }    #Use i386 RPMs for x86_64
        if ($MS_ARCH =~ /x86_64/)
        {
            $MS_ARCH = "i386";
        }    #Use i386 RPMs for x86_64

        #print "NODE_ARCH = $HW_ARCH, MS_ARCH = $MS_ARCH\n";
        my $extractdir = "/";
        if ($HW_ARCH ne $MS_ARCH)
        {

            # Extract all the files from the rsct.core and rsct.core.utils rpms
            # into $extractdir

            my $rsct_rpm_filename;
            my $cmd;
            $extractdir = "/tmp/dir4rsctrpm";
            mkpath($extractdir, $::VERBOSE, 0755);
            $cmd = "$::RM -rf $extractdir/*";
            NodeUtils->runcmd($cmd);

            foreach my $rpm ("rsct.core", "rsct.core.utils")
            {
                $rsct_rpm_filename =
                    $::PathVersionName{$HW_ARCH}{$rpm}{"Location"} . "/"
                  . $::PathVersionName{$HW_ARCH}{$rpm}{"Longname"}
                  . ".${HW_ARCH}.rpm";

                #print "RPM NAME = $rsct_rpm_filename\n";
                if (!-f $rsct_rpm_filename)
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                       'csminstall', "E1", "EMsgFILE_NOT_FOUND",
                                       $rsct_rpm_filename);
                }

                $cmd =
                  "cd $extractdir; $::RPM2CPIO $rsct_rpm_filename | cpio -idu --quiet;";
                NodeUtils->runcmd($cmd, 0);
            }
        }
        my @files = (
                     "/usr/sbin/rsct/lib/libct_mc.so",
                     "/usr/sbin/rsct/lib/libct_cu.so",
                     "/usr/sbin/rsct/lib/libct_tr.so",
                     "/usr/sbin/rsct/lib/libct_pmsg.so",
                     "/usr/sbin/rsct/lib/libct_sec.so",
                     "/usr/sbin/rsct/lib/libct_idm.so",
                     "/usr/sbin/rsct/lib/libct_ffdc.so",
                     "/usr/sbin/rsct/cfg/ctsec.cfg",
                     "/usr/sbin/rsct/bin/runact-api",
                     );

        my $targetdir = "/csminstall/csm/$HW_ARCH";
        mkpath($targetdir, $::VERBOSE, 0755);

        foreach my $file (@files)
        {
            $file = "$extractdir$file";
            if (!-f $file)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                       'csminstall', "E", "EMsgNO_CopyFile", $file, $targetdir);
            }
            else
            {
                NodeUtils->runcmd("$::COPY -p $file $targetdir", -2);
            }
        }
    }

    # Copies hardware control ucode files on AIX to /csminstall/AIX/ucode
    if ($pkginfo{'OSName'} eq "AIX")
    {
        if (!-e "/csminstall/AIX/ucode")
        {
            mkdir "/csminstall/AIX/ucode", 0077;
        }

        #NodeUtils->runcmd( "$::COPY -pr /opt/csm/install/ucode/ /csminstall/AIX/", -2);
    }

}

#--------------------------------------------------------------------------------

=head3 copy_csm_scripts

        This function copies customization scripts from /opt/csm/install/scripts/
        to /csminstall/csm/scripts.                                                            

        If the extension of the script matches a defined node group or there is
        no extension, then copy the script.

        If the $verify parameter is 1, this function checks the target dir if the
        scripts exist, if no, it will copy the scripts, otherwise, it will do
        nothing.  If the $verify parameter is 0,this function will always copy the
        scripts.

        Arguments:
                $verify  - either 1 or 0

        Returns:
                $::OK
                $::NOK
        Globals:
                $::NODEGRP
                $::PREINSTALLDIR
                $::POSTINSTALLDIR
                $::UPDATEDIR
        Error:
                csmInstall.cat 'E'_
        Example:
                ServerUtils->copy_csm_scripts(1);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub copy_csm_scripts
{

    my ($class, $verify) = @_;
    my $INSTALLPREREBOOT  = "/opt/csm/install/scripts/installprereboot";
    my $INSTALLPOSTREBOOT = "/opt/csm/install/scripts/installpostreboot";
    my $UPDATE            = "/opt/csm/install/scripts/update";

    my @groupname;
    my $targetdir;
    my $filename;
    my $basename;
    my $extension;
    my $junk;
    my $cmd;

    $cmd = "$::NODEGRP";
    @groupname = NodeUtils->runcmd($cmd, -1);
    if ($::RUNCMD_RC)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "E", 'EMsgCANT_RUN', $cmd, $::RUNCMD_RC);
        return $::NOK;
    }

    foreach my $dirname ($INSTALLPREREBOOT, $INSTALLPOSTREBOOT, $UPDATE)
    {
        if ($dirname eq $INSTALLPREREBOOT)
        {
            $targetdir = $::PREINSTALLDIR;
        }
        elsif ($dirname eq $INSTALLPOSTREBOOT)
        {
            $targetdir = $::POSTINSTALLDIR;
        }
        elsif ($dirname eq $UPDATE)
        {
            $targetdir = $::UPDATEDIR;
        }

        if (-d $dirname)
        {
            if (!-d $targetdir)
            {
                mkpath($targetdir, $::VERBOSE, 0755);
            }
            $cmd = "$::LS $dirname";
            my @filelist = NodeUtils->runcmd($cmd, -1);
            if ($::RUNCMD_RC)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                         'csminstall', "E", 'EMsgCANT_RUN', $cmd, $::RUNCMD_RC);
                return $::NOK;
            }
            foreach $filename (sort @filelist)
            {
                chomp $filename;
                if (-d "$dirname/$filename")
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                            'csminstall', "I", 'IMsgSkipSubDir',
                                            "$dirname/$filename");
                    next;
                }

                if (!-x "$dirname/$filename")
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                            'csminstall', "E", 'EMsgSkipScript',
                                            "$dirname/$filename");
                    next;
                }
                if (-e "$targetdir/$filename")
                {

                    $cmd =
                      "/usr/bin/diff $dirname/$filename $targetdir/$filename";
                    my $temp = NodeUtils->runcmd($cmd, -1);
                    if ($temp)
                    {
                        if ($::VERBOSE)
                        {
                            NodeUtils->message('W', 'IMsgScriptUpdate',
                                               $filename);
                        }
                    }
                }

                ($basename, $extension, $junk) = split(/\._/, $filename);
                if (defined($junk)) { next; }
                if (!defined($extension) || grep(/^$extension$/, @groupname))
                {
                    if (   (!$verify)
                        || (($verify) && (!-e "$targetdir/$filename")))
                    {
                        $cmd = "$::COPY -f $dirname/$filename $targetdir";
                        NodeUtils->runcmd($cmd, -2);
                    }
                }
            }

        }
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    create_directory_structure

       Creates the csminstall directory sturctuire on the Managment Server.

	Globls:

		Relies on $::PREREQS_ATTR variable for directory names

=cut

#--------------------------------------------------------------------------------

sub create_directory_structure
{

    NodeUtils->message('I', 'IMsgCreatingDirectories');
    mkpath($::INSTALLDIR_CSMVRBIN, $::VERBOSE, 0755);
    mkpath($::INSTALLDIR_CSMBIN,   $::VERBOSE, 0755);
    mkpath($::PREINSTALLDIR,       $::VERBOSE, 0755);
    mkpath($::POSTINSTALLDIR,      $::VERBOSE, 0755);
    mkpath($::UPDATEDIR,           $::VERBOSE, 0755);
    mkpath($::SCRIPTDATADIR,       $::VERBOSE, 0755);
    mkpath($::INSTALLDIR_CSMPKG,   $::VERBOSE, 0755);

    ArchiveUtils->createRPMSdir(
                                $::PREREQS_ATTR{'OSName'},
                                $::PREREQS_ATTR{'DistributionName'},
                                $::PREREQS_ATTR{'DistributionVersion'},
                                $::PREREQS_ATTR{'PkgArchitecture'}
                                );

    # we need the tftpboot directory.  But if it is a file then
    # we need the user to remove it:
    if (-f "/tftpboot")
    {
        NodeUtils->message('E2', 'EMsgNo_Directory', "\/tftpboot");
    }
    else
    {

        # now we can create the directory with the appropriate
        # permissions:
        mkpath("/tftpboot", $::VERBOSE, 0110);
    }
}

#--------------------------------------------------------------------------------

=head3    getBaseDir

        Get the base directory for the install
        attribute parameters

        Arguments:
                $InstallOSName
                $InstallDistributionName
                $InstallDistributionVersion
                $InstallPkgArchitectur
        Returns:
                approparite base directory for parameters
        Globals:
                none
        Error:
                undefined
        Example:
                $::DISTRO_TOP = ServerUtils->getBaseDir("Linux",
                                                        $::DISTRO_NAME,
                                                        $::DISTRO_VERSION,
                                                        $::ARCH);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getBaseDir
{
    my ($class, $os, $distributor, $version, $arch) = @_;
    if ($arch =~ /i.86/) { $arch = "i386"; }
    return "/csminstall/$os/$distributor/$version/$arch";
}

#--------------------------------------------------------------------------------

=head3    getInstallDir

        Returns the install directory path name for the Install Attribute
        parameters.

        Arguments:
                $InstallOSName
                $InstallDistributionName
                $InstallDistributionVersion
                $InstallPkgArchitectur
        Returns:
                Appropriate path name 
        Globals:
                none
        Error:
                undefined
        Example:
                unused
        Comments:
                unused??

=cut

#--------------------------------------------------------------------------------

sub getInstallDir
{
    my ($class, $os, $distributor, $version, $arch) = @_;
    if ($arch =~ /i.86/) { $arch = "i386"; }
    return "/csminstall/$os/$distributor/$version/$arch/install";
}

#--------------------------------------------------------------------------------

=head3    getUpdateDir

        Returns the update directory for the install
        attritbute parameters

        Arguments:
                $InstallOSName
                $InstallDistributionName
                $InstallDistributionVersion
                $InstallPkgArchitectur

        Returns:
                Appropriate path name of the attribute input
        Globals:
                none
        Error:
                undefined
        Example:
                my $updateDir =
                    ServerUtils->getUpdateDir($OS, $dist, $distver, $arch);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub getUpdateDir
{
    my ($class, $os, $distributor, $version, $arch) = @_;
    if ($arch =~ /i.86/) { $arch = "i386"; }
    return "/csminstall/$os/$distributor/$version/$arch/updates";
}

#--------------------------------------------------------------------------------

=head3    post_csm_copy

          Post copy function

        Arguments:
                None

        Returns:
                none
        Globals:
                $::PREREQS_ATTR
                $::ATTRS
                $::LCSEXT
                $::INSTALLDIR_CSMPKG
        Error:
                E2, EMsgINVALID_OSTYPE
        Example:
                    ServerUtils->post_csm_copy;
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub post_csm_copy
{
    if (   ($::PREREQS_ATTR{'OSName'} eq "Linux")
        || ($::ATTRS{'InstallOSName'} eq "Linux"))
    {

        # Link the packages directory to a location that addlcsext can use with its default -p
        if ($::LCSEXT eq "true")
        {
            my $cmd;
            if (!-d "/opt/csm/lcsext")
            {
                $cmd = "$::MKDIR /opt/csm/lcsext";
                NodeUtils->runcmd($cmd, 0);
            }
            else
            {
                $cmd = "$::RM /opt/csm/lcsext/packages";
                NodeUtils->runcmd($cmd, 0);
            }
            $cmd = "$::LN -sf $::INSTALLDIR_CSMPKG /opt/csm/lcsext/packages";
            NodeUtils->runcmd($cmd, 0);
        }
    }
    elsif ($::PREREQS_ATTR{'OSName'} eq "AIX") { }
    else { NodeUtils->message('E2', 'EMsgINVALID_OSTYPE'); }
}

#--------------------------------------------------------------------------------

=head3    returnSubdirectory

        Returns all the sub directories of the input parameter.

        Arguments:
                $directoryName
                $validDir - (optional) value of 1 if defined
        Returns:
                array of subdirectory names     
        Globals:
                $::PLTFRM
        Error:
                undefined
        Example:
                 push   @::PKGPATH,
                        (ServerUtils->returnSubdirectory($p));
        Comments:
                the $validDir parameter, when set to 1 checks if the 
                parent directory to the $directoryName parmeter is valid. 

=cut

#--------------------------------------------------------------------------------

sub returnSubdirectory
{
    my ($class, $dir, $valid_dir) = @_;
    my $file;
    my @subdirs       = ();
    my @returndirs    = ();
    my @valid_subdirs = ();    #these are ones whose children we can look at
    if ($::PLTFRM eq "AIX")
    {
        if ($dir =~ m/(installp.?\z)|(usr.?\z)|(RPMS.?\z)/)
        {                      #check to see if the parent is valid
            $valid_dir = 1;
        }
    }
    opendir(DIRECTORY, $dir) or return ();
    while ($file = readdir(DIRECTORY))
    {
        if ($file ne '.' and $file ne '..')
        {
            my $filename;
            if ($dir =~ /\/\z/)
            {                  #if it ends with a slash
                $filename = "$dir$file";
            }
            else
            {                  #no slash
                $filename = "$dir/$file";
            }
            if ((-d "$filename") && ($::PLTFRM eq "AIX"))
            {
                if (!$valid_dir)
                {              #the parent wasn't an valid directory
                    if (   ($file eq "installp")
                        || ($file eq "usr")
                        || ($file eq "RPMS"))
                    {
                        push @valid_subdirs, $filename;
                    }
                }
                else
                {    #a valid parent, so therefore its children are valid too
                    push @valid_subdirs, $filename;
                }

            }
        }
    }
    closedir(DIRECTORY);
    push @returndirs, @valid_subdirs;
    push @returndirs, @subdirs;
    foreach my $sub (@valid_subdirs)
    {                #these are valid children
        my @tmpdirs = InstallUtils->returnSubdirectory($sub, 1);
        push @returndirs, @tmpdirs;
    }
    return @returndirs;
}

#--------------------------------------------------------------------------------

=head2    File Layer

=cut

#--------------------------------------------------------------------------------

=head3    CreateRandomName

        Create a randome file name.

        Arguments:
                Prefix of name
        Returns:
                Prefix with 8 random letters appended
        Error:
                none
        Example:
                $file = ServerUtils->CreateRandomName($namePrefix);
        Comments:
                None

=cut

#--------------------------------------------------------------------------------

sub CreateRandomName
{

    my ($class, $name) = @_;

    my $nI;
    for ($nI = 0 ; $nI < 8 ; $nI++)
    {
        my $char = ('a' .. 'z', 'A' .. 'Z')[int(rand(52)) + 1];
        $name .= $char;
    }
    $name;
}

#--------------------------------------------------------------------------------

=head3    create_nodemap_file

        Create /csminstall/csm/config/nodemap file that contains a mapping
        of ManagedNode hostnames as defined in the CSM database, and node hostnames
        as returned by the hostname command. 

        Arguments:
                 $ref_nodeList
                 $ref_nodeInfo
                 $ref_DestNodeHash
        Returns:
                $::OK
                $::NOK
        Globals:
                $::NODE_LIST_FILE
        Error:
                $::NOK
        Example:
                if( ServerUtils->create_nodemap_file ( \@::NODELIST,
                                                        \@::LSNODE_INFO,
                                                        \%::NODEHASH) != 0){
                    blah;
                }
        Comments:
                File format -  csm_hostname<space>node_hostname    

=cut

#--------------------------------------------------------------------------------

sub create_nodemap_file
{
    my ($class, $ref_nodelist, $ref_nodeinfo, $ref_DestNodeHash) = @_;
    my @nodelist = @$ref_nodelist;
    my @nodeinfo = @$ref_nodeinfo;

    #  DestNodeHash is a hash containing attribute values for each node
    #    that was provided on the command line.
    my %DestNodeHash = %$ref_DestNodeHash;
    %main::dsh_failed = ();
    my ($cmd,          @dshout,  $rc);
    my ($csm_nodename, $csmnode, $hostname);
    my $csmcfgdir    = "/csminstall/csm/config";
    my $nodemap_file = "/csminstall/csm/config/nodemap";
    my $node;
    my $dshresult = "";

    #
    #  Check and/or create the /csminstall/csm/config directory
    #
    if (!-d $csmcfgdir)
    {
        $cmd = "$::MKDIR -m 755 -p $csmcfgdir";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       "E",
                                      'EMsgNO_CreateDir', $csmcfgdir
                                      );
            return ($::NOK);
        }
    }

    # Remove any old occurences of the nodemap file
    if (-f $nodemap_file)
    {
        $cmd = "$::RM $nodemap_file";
        $rc  = system("$cmd") >> 8;
        if ($rc != 0)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "E",
                                      'EMsgNO_RM',      "$nodemap_file"
                                      );

            # try to continue
        }
    }

    # open the map file
    unless (open(NODEMAP, ">$nodemap_file"))
    {

        # print error message
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',      $::MSGMAPPATH,
                                  'csminstall',          "E",
                                  'EMsgCANT_WRITE_FILE', "$nodemap_file"
                                  );
        return $::NOK;
    }
    my @AIX;
    my @Linux;
    my %found = ();
    my %dups  = ();

    # for each node in the node list
    foreach $node (keys %DestNodeHash)
    {

        # set the correct command based on the InstallOSName
        if (defined($DestNodeHash{$node}{'InstallOSName'}))
        {
            if ($DestNodeHash{$node}{'InstallOSName'} eq "AIX")
            {

                #$dshcmd = "$::DSH -n$node hostname";
                push @AIX, $node;
            }
            elsif ($DestNodeHash{$node}{'InstallOSName'} eq "Linux")
            {

                #$dshcmd = "$::DSH -n$node hostname -f";
                push @Linux, $node;
            }
        }
    }
    if (@Linux)
    {
        my $node_file =
          InstallUtils->make_node_list_file(\@Linux)
          ;    #put all dest nodes in tmp file
        $ENV{'DSH_LIST'} = $node_file;
        my $dshcmd    = "$::DSH hostname -f";
        my @dshresult = `$dshcmd`;
        $rc = $? >> 8;
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $node_file)
          ;    #delete node file
        if ($rc != 0)
        {

            # print error message
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', $dshcmd,
                                      $rc
                                      );

            #$main::dsh_failed{$node}=1; #take these out of target nodes
            #next;
        }
        foreach my $line (@dshresult)
        {
            my ($csmnode, $hostname) = split(" ", $line);
            $hostname =~ s/://g;
            $csmnode  =~ s/://g;
            if (defined($csmnode) && defined($hostname))
            {

                # make sure the format is consistent with the name that
                #     was used to create the configinfo file
                #$csm_nodename = NodeUtils->tryHost($csmnode);
                $found{$csmnode} = 1;
                $dups{$hostname}{$csmnode} = 1;

                # put the result in the nodemap file
                unless (print NODEMAP "$csmnode $hostname\n")
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_WRITEtoFILE',
                                      "$nodemap_file");
                }
            }
        }
    }
    if (@AIX)
    {
        my $node_file =
          InstallUtils->make_node_list_file(\@AIX)
          ;    #put all dest nodes in tmp file
        $ENV{'DSH_LIST'} = $node_file;
        my $dshcmd    = "$::DSH hostname";
        my @dshresult = `$dshcmd`;
        $rc = $? >> 8;
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $node_file)
          ;    #delete node file
        if ($rc != 0)
        {

            # print error message
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', $dshcmd,
                                      $rc
                                      );

            #$main::dsh_failed{$node}=1; #take these out of target nodes
            #next;
        }
        foreach my $line (@dshresult)
        {
            my ($csmnode, $hostname) = split(" ", $line);
            $hostname =~ s/://g;
            $csmnode  =~ s/://g;
            if (defined($csmnode) && defined($hostname))
            {

                # make sure the format is consistent with the name that
                #     was used to create the configinfo file
                #$csm_nodename = NodeUtils->tryHost($csmnode);
                $found{$csmnode} = 1;
                $dups{$hostname}{$csmnode} = 1;

                # put the result in the nodemap file
                unless (print NODEMAP "$csmnode $hostname\n")
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_WRITEtoFILE',
                                      "$nodemap_file");
                }
            }
        }
    }

    #foreach my $n (keys %DestNodeHash){
    #    if(!$found{$n}){
    #        $main::dsh_failed{$n}=1;
    #    }
    #    }
    foreach my $n (keys %dups)
    {    #get rid of any nodes that map to the same hostname
        if (scalar(keys %{$dups{$n}}) > 1)
        {
            my @dupNodes = keys %{$dups{$n}};
            my $dNstring = join ',', @dupNodes;
            my $hostname = $n;
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',  $::MSGMAPPATH,
                                      'csminstall',      'E',
                                      'EMsgHostnameMap', $hostname,
                                      $dNstring
                                      );
            foreach my $d (@dupNodes)
            {
                $main::dsh_failed{$d} = 1;
            }
        }
    }
    close(NODEMAP);
    if (!@AIX && !@Linux)
    {
        return $::NOK;
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    createSMSConfig

        Put SMS node group info into the file:
        /csminstall/csm/var/smsupdate.info

        Arguments:
                none
        Returns:
                reference to a hash of all groups
        Globals:
                none
        Error:
                NodeUtil message E
        Example:
                 #create the SMS nodegroup config file
                 ServerUtils->createSMSConfig();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub createSMSConfig
{
    my %all_groups = ();
    my %node_index;
    my @empty_array = ();
    if (-e "/csminstall")
    {
        if (!-e "/csminstall/csm")
        {
            mkdir "/csminstall/csm",        0077;
            mkdir "/csminstall/csm/config", 0077;
        }
    }
    my $ref_nodegrp = NodeUtils->listNodeGroupExpMem(@empty_array);
    foreach my $row (@$ref_nodegrp)
    {
        my ($groupname, $nodelist) = $row =~ /^(.+):\|:\{(.*)\}$/;
        my @nodes = split(/,/, $nodelist);
        foreach my $node (@nodes)
        {
            push @{$node_index{$node}},      $groupname;
            push @{$all_groups{$groupname}}, $node;

        }
    }
    system("$::MKDIR -p /csminstall/csm/config/");
    open(GROUPFILE, ">/csminstall/csm/config/sms.info")
      or NodeUtils->message('E', 'EMsgCANT_OpenFile',
                            "/csminstall/csm/config/sms.info",
                            "$? $!");
    foreach my $node (keys %node_index)
    {
        print GROUPFILE "$node: @{$node_index{$node}} \n";
    }
    close GROUPFILE;
    return \%all_groups;
}

#--------------------------------------------------------------------------------

=head3 get_script_list

        For a given directory get a list of scripts and associated list
        of nodes to run it on.

        Arguments:
                $directoryName
                 @nodeList
        Returns:
                $::OK
                $::NOK 
        Globals:
                @::scriptlist
                @{$::scriptnodes{$fname}}
                
        Error:
                $::NOK 
        Example:
                $rc = ServerUtils->get_script_list($dirname,@nodelist);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_script_list
{
    my ($junk, $dirname, @nlist) = @_;
    my %basename;
    my $target;
    my $filename;
    my @filelist;
    my $cmd;

    @::scriptlist = ();

    if (-d $dirname)
    {
        $cmd = "$::LS $dirname";
        @filelist = NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "E",
                                      'EMsgCANT_RUN',   $cmd,
                                      $::RUNCMD_RC
                                      );
            return $::NOK;
        }
    }
    else
    {

        # msg - Warning: The \'$dirname\' does not exist.
        #        Skipping to the next directory.
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "E", 'EMsgSkipDir', $dirname);
        return $::NOK;
    }

    # check each script name in this directory
    # - add the filename to the script list
    # - get the initial list of node to run the script on
    # - save the basename for each script
    foreach $filename (sort @filelist)
    {
        chomp $filename;

        #  make sure this is not a subdir
        if (-d "$dirname/$filename")
        {

            # error - Skipping subdirectory $dirname/$filename.
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "I",
                                      'IMsgSkipSubDir', "$dirname/$filename"
                                      );
            next;
        }

        # figure out what nodes to run the script on by
        #    deciphering the script name
        @{$::scriptnodes{$filename}} =
          InstallUtils->name2list($dirname, $filename, @nlist);
        if (${$::scriptnodes{$filename}}[0] eq $::NOK)
        {

            # msg - Skipping to the next script name.
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', "E", 'EMsgSkipScript');
            next;
        }
        push @::scriptlist, $filename;
        (@basename{$filename}, $target) = split(/\._/, $filename);
    }

    # now check each script that has no extension (target) and see
    #  if there are any scripts with the same basename that have targets
    # if there are - remove any nodes in the targeted script list from the
    #  list of nodes for the script with no extensions(target)
    # ex.  say script foo goes to all nodes and script foo._grpa goes
    # to node1 & node2.  In this case I need to remove node1 & node2
    # from the list of nodes for the script foo.

    foreach my $fname (sort @::scriptlist)
    {
        chomp $fname;

        # if the script name is the same as the basename then
        #   the list is all the nodes passed in on the command line.
        if ($fname eq @basename{$fname})
        {

            # check the rest of the scripts to see if any
            # have the same basename - if we find one then redo
            # the list for the basename-only script
            foreach my $file (@::scriptlist)
            {
                chomp $file;

                #  see if the basenames are the same
                if (@basename{$fname} eq @basename{$file})
                {

                    # don't remove itself
                    if ($file ne $fname)
                    {
                        my @tmplist = ();
                        foreach my $node (@{$::scriptnodes{$fname}})
                        {

                            # if the node is not in the list for $file
                            #  then add it to a temp list
                            if (!grep /^$node/, @{$::scriptnodes{$file}})
                            {
                                push @tmplist, $node;
                            }
                        }
                        @{$::scriptnodes{$fname}} = @tmplist;
                    }
                }
            }
        }
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    make_config_file

        Create configuration information files for each node provided
        in the nodelist reference argument.

        Arguments:
                 $ref_nodeList
                 $ref_nodeinfo
                 $ref_DestinationNodeHash
        Returns:
                $::OK
                $::NOK
        Globals:
                $::SETUP_REMOTE_SHELL
                $::NOSMS
        Error:
                $::NOK
        Example:
                if(ServerUtils->make_config_file( \@DestNode,
                                                   \@lsnode_info,
                                                   \%DestNodeHash) != 0) {
                    blah;
                }
        Comments:
                Requires $::REMOTE_SHELL and $::SETUP_REMOTE_SHELL to be set optionally,
                $::NOSMS can be set to instruct makenode to not perform software maintenance
                on Linux nodes

=cut

#--------------------------------------------------------------------------------

sub make_config_file
{

    my ($class, $ref_nl, $ref_nodeinfo, $ref_DestNodeHash) = @_;
    my @nl       = @$ref_nl;
    my @nodeinfo = @$ref_nodeinfo;

    #  DestNodeHash is a hash containing attribute values for each node
    #    that was provided on the command line.
    my %DestNodeHash = %$ref_DestNodeHash;

    my ($hname, $short, $rc);
    my $csmcfgdir = "/csminstall/csm/config";
    my $cmd;
    my $output;
    my $DirectorInstalled = 0;
    my ($host, $ipaddr, $shorthost);

    #
    #  Check and/or create the /csminstall/csm/config directory
    #
    if (!-d $csmcfgdir)
    {
        $cmd = "$::MKDIR -m 755 -p $csmcfgdir";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       "E",
                                      'EMsgNO_CreateDir', $csmcfgdir
                                      );
            return ($::NOK);
        }
    }

    # If this is a Linux management server, check if csm.director.agent
    # is installed.
    if (NodeUtils->isLinux() == 1)
    {
        $cmd = "$::RPMCMD -q csm.director.agent";
        $output = NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC == 0)
        {
            $DirectorInstalled = 1;
        }
    }

    # get the lists of user-provided cstomization script
    #   that we need to run on the nodes
    if (InstallUtils->make_script_lists(@nl))
    {

        # msg  -Could not get lists of customization scripts
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "E", 'EMsgNoCustScripts');

        # continue
    }

    #
    # create the config_info file
    #

    #  go through each node in the list
    #   (the keys are the hostnames as returned from tryHost() !!)
    foreach $hname (keys %DestNodeHash)
    {

        # remove the old config file if any
        if (-e "$csmcfgdir/$hname.config_info")
        {
            $cmd = "$::RM $csmcfgdir/$hname.config_info";
            $rc  = system("$cmd");
            if ($rc >> 8)
            {
                my $fn = "$csmcfgdir/$hname.config_info";
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                         'csminstall', "E", 'EMsgNO_RM', "$fn");

                # try to continue ??return $::NOK;
            }
        }

        # create the new file
        unless (open(CONFIG_OUT, ">$csmcfgdir/$hname.config_info"))
        {
            my $fn = "$csmcfgdir/$hname.config_info";
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',      $::MSGMAPPATH,
                                      'csminstall',          "E",
                                      'EMsgCANT_WRITE_FILE', "$fn"
                                      );
            return $::NOK;
        }

        # Add cluster-wide configuration information to the file
        if (defined($::REMOTE_SHELL))
        {
            print CONFIG_OUT "RemoteShell=$::REMOTE_SHELL\n";
        }
        if (defined($::SETUP_REMOTE_SHELL))
        {
            print CONFIG_OUT "SetupRemoteShell=$::SETUP_REMOTE_SHELL\n";
        }

        # add the node configuration information to the file
        if (defined($hname))
        {
            print CONFIG_OUT "Hostname=$hname\n";
        }
        if (defined($DestNodeHash{$hname}{'ManagementServer'}))
        {
            print CONFIG_OUT
              "ManagementServer=$DestNodeHash{$hname}{'ManagementServer'}\n";
            print CONFIG_OUT "ManagementServerIP="
              . NetworkUtils->validate_ip(
                                      $DestNodeHash{$hname}{'ManagementServer'})
              . "\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallOSName'}))
        {
            print CONFIG_OUT
              "InstallOSName=$DestNodeHash{$hname}{'InstallOSName'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallCSMVersion'}))
        {
            print CONFIG_OUT
              "InstallCSMVersion=$DestNodeHash{$hname}{'InstallCSMVersion'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallDistributionVersion'}))
        {
            print CONFIG_OUT
              "InstallDistributionVersion=$DestNodeHash{$hname}{'InstallDistributionVersion'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallDistributionName'}))
        {
            print CONFIG_OUT
              "InstallDistributionName=$DestNodeHash{$hname}{'InstallDistributionName'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallPkgArchitecture'}))
        {
            print CONFIG_OUT
              "InstallPkgArchitecture=$DestNodeHash{$hname}{'InstallPkgArchitecture'}\n";
        }
        if (defined($DestNodeHash{$hname}{'Mode'}))
        {
            print CONFIG_OUT "Mode=$DestNodeHash{$hname}{'Mode'}\n";
        }
        if (defined($DestNodeHash{$hname}{'ConsoleSerialDevice'}))
        {
            print CONFIG_OUT
              "ConsoleSerialDevice=$DestNodeHash{$hname}{'ConsoleSerialDevice'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallServer'})
            && ($DestNodeHash{$hname}{'InstallServer'} ne ""))
        {
            my $progname = NodeUtils->programName();
            if ($progname =~ m/installnode/)
            {

                #make sure a machine is not an install server of itself
                my ($node_hostname, $node_ip) = NodeUtils->getHost($hname);
                my ($server,        $rep_dir) = split ':',
                  $DestNodeHash{$hname}{'InstallServer'};
                my ($isvr_hostname, $isvr_ip) = NodeUtils->getHost($server);
                if ($node_hostname ne $isvr_hostname)
                {
                    print CONFIG_OUT
                      "InstallServer=$DestNodeHash{$hname}{'InstallServer'}\n";
                }
            }
            elsif ($DestNodeHash{$hname}{'InstallServer'} ne
                   $DestNodeHash{$hname}{'ManagementServer'})
            {

                #not using the ms as the install server
                print CONFIG_OUT
                  "InstallServer=$DestNodeHash{$hname}{'InstallServer'}\n";
            }
        }

        if (defined($DestNodeHash{$hname}{'PowerMethod'}))
        {
            print CONFIG_OUT
              "PowerMethod=$DestNodeHash{$hname}{'PowerMethod'}\n";
        }

        if (defined($DestNodeHash{$hname}{'InstallAdapterMacaddr'}))
        {
            print CONFIG_OUT
              "InstallAdapterMacaddr=$DestNodeHash{$hname}{'InstallAdapterMacaddr'}\n";
        }

        # Handle Linux-specific attributes.
        if ($DestNodeHash{$hname}{'InstallOSName'} eq "Linux")
        {

            # If csm.director.agent is installed on the management server,
            # then install it on the Linux nodes.
            print CONFIG_OUT "InstallDirector=$DirectorInstalled\n";

            # if $::NOSMS isn't set then perform software maintenance
            if (!$::NOSMS)
            {
                print CONFIG_OUT "SMS=1\n";
            }
        }

        if (defined($DestNodeHash{$hname}{'ConsoleSerialSpeed'}))
        {
            print CONFIG_OUT
              "ConsoleSerialSpeed=$DestNodeHash{$hname}{'ConsoleSerialSpeed'}\n";
        }

        if (defined($DestNodeHash{$hname}{'InstallMethod'}))
        {
            print CONFIG_OUT
              "InstallMethod=$DestNodeHash{$hname}{'InstallMethod'}\n";
        }

        # put in the SetupKRB5 attribute value
        if (!defined $::KRB5SETUP)
        {

            $::KRB5SETUP = InstallUtils->getSetupKRB5;
        }
        print CONFIG_OUT "SetupKRB5=$::KRB5SETUP\n";

        # put in what would be the KRB5 principal name for ManagementServer
        if (!defined $::MSNAME)
        {
            $::MSNAME = NodeUtils->getRSCThostname;
        }
        my $msnamelower = lc($::MSNAME);
        print CONFIG_OUT "CSMKRB5Principal=ctsrcmdp.$msnamelower";

        # put in what would be the KRB5 principal name for HA ManagementServer
        if (!defined $::HAMODE)
        {
            my $outref =
              NodeUtils->runrmccmd('lsrsrc-api', "-i",
                                   "-s IBM.DmsCtrl::::HAMode");
            $::HAMODE = $$outref[0];
        }
        if ($::HAMODE == 1)
        {    #on an active HAMS management server
            require HAMS;
            my $inactivems      = HAMS->getInactiveRSCTHostname(); # get HA name
            my $inactivemslower = lc($inactivems);
            print CONFIG_OUT ",ctsrcmdp.$inactivemslower\n";

        }
        else
        {
            print CONFIG_OUT "\n";
        }

        if (($::SETUP_REMOTE_SHELL == 1) && ($::REMOTE_SHELL =~ m/rsh/))
        {
            if (!defined $::HAMODE)
            {
                my $outref =
                  NodeUtils->runrmccmd('lsrsrc-api', "-i",
                                       "-s IBM.DmsCtrl::::HAMode");
                $::HAMODE = $$outref[0];
            }
            if ($::HAMODE == 1)
            {    #on an active HAMS management server
                    #get management server attribute for node on other ms
                require HAMS;
                my $other_ms = HAMS->getManagementServerAttr($hname);
                if ($other_ms)
                {
                    print CONFIG_OUT "InActiveMSAttr=$other_ms\n";
                }
            }
        }

        #
        # add the /etc/hosts info for the management server - just AIX for now
        #
        if ($DestNodeHash{$hname}{'InstallOSName'} eq "AIX")
        {
            ($host, $ipaddr) =
              NodeUtils->getHost($DestNodeHash{$hname}{'ManagementServer'});
            ($shorthost = $host) =~ s/\..*$//;
            print CONFIG_OUT "ETCHOSTSMS=$ipaddr $host $shorthost\n";
        }

        # add lists of scripts to run on the node
        if (defined(@{$::PREINSTSCRIPTS{$hname}}))
        {
            print CONFIG_OUT "PREINSTSCRIPTS=@{$::PREINSTSCRIPTS{$hname}}\n";
        }
        if (defined(@{$::POSTINSTSCRIPTS{$hname}}))
        {
            print CONFIG_OUT "POSTINSTSCRIPTS=@{$::POSTINSTSCRIPTS{$hname}}\n";
        }
        if (defined(@{$::UPDATESCRIPTS{$hname}}))
        {
            print CONFIG_OUT "UPDATESCRIPTS=@{$::UPDATESCRIPTS{$hname}}\n";
        }

        close(CONFIG_OUT);

        $cmd = "$::CHMOD 644 $csmcfgdir/$hname.config_info";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', $::CHMOD,
                                      $rc
                                      );

            # try to continue
        }

        #Add symbol link short_hostname.config_info to long_hostname.config_info
        my ($short_hname) = split('\.', $hname);

        # this symbolic link will be done only when the short name is not the
        # same as the long name
        if ($short_hname ne $hname)
        {
            $cmd =
              "cd $csmcfgdir; $::LN -fs $hname.config_info $short_hname.config_info";
            $rc = system("$cmd");
            if ($rc >> 8)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                            'csminstall', 'E', 'EMsgCMD_FAILED_RC', $::LN, $rc);
            }
        }

    }    # go do the next node

    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    make_node_list_file

        Makes a node list file.  

        Arguments:
                (\@list_of_nodes) - reference to an arrary of nodes.
        Returns:
                $file_name and sets the global var: $::NODE_LIST_FILE
        Globals:
                the ENV vars: DSH_LIST,  RPOWER_LIST,  RCONSOLE_LIST
        Error:
                None documented
        Example:
                ServerUtils->make_node_list_file(\@nodelist); 

        Comments:
                IMPORTANT:
          Make sure to cleanup afterwards with:

                         ServerUtils->close_delete_file($file_handle, $file_name)

=cut

#--------------------------------------------------------------------------------

sub make_node_list_file
{
    my ($class, $ref_node_list) = @_;
    my @node_list = @$ref_node_list;
    srand(time | $$);    #random number generator start

    my $file = "/tmp/csm_$$";
    while (-e $file)
    {
        $file = InstallUtils->CreateRandomName($file);
    }

    open($::NODE_LIST_FILE, ">$file")
      or
      NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                "E", 'EMsgCANT_WRITE_FILE', "$file");
    foreach my $node (@node_list)
    {
        print $::NODE_LIST_FILE "$node\n";
    }
    return $file;
}

#--------------------------------------------------------------------------------

=head3    make_script_lists

        Create lists of pre-install, post-install and update scrips
        for each node and put them in the following global hashes:

        %::PREINSTSCRIPTS - scripts get run from csmprereboot
                        during full install before the first reboot.
        %::POSTINSTSCRIPTS - scripts get run from csmfirstboot
                        after the first reboot of the system.
        %::UPDATESCRIPTS - scripts get run from updatenode.client
                        after a node has been updated.

        Arguments:
                @nodelist
        Returns:
                $::OK   - on success
                1       - on error
        Globals:
                %::PREINSTSCRIPTS
                %::POSTINSTSCRIPTS 
                %::UPDATESCRIPTS
        Example:
                if( ServerUtils->make_script_lists(@nodelist) ) { blah; }_
        Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub make_script_lists
{

    my ($junk, @nodel) = @_;   # the list of nodes passed in on the command line
    my $dirname;               #  directory to check for scripts
    my $script;                #  unique script name
    my $cmd;
    my $rc;

    @::scriptlist;             #  list of scripts found in a directory
    %::scriptnodes;            #  lists of nodes to run each script on

    # get the list of all nodes so we can check
    #       for valid node names later
    $cmd = "$::LSNODE";
    @::allnodes = NodeUtils->runcmd($cmd, -1);
    if ($::RUNCMD_RC)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $cmd, $::RUNCMD_RC);
        return $::NOK;
    }

    my @scriptdirlist;
    if ($::UPDATESCRIPTSONLY)
    {
        @scriptdirlist = ($::UPDATEDIR);
    }
    else
    {
        @scriptdirlist = ($::PREINSTALLDIR, $::POSTINSTALLDIR);
    }

    # check each subdirectory for user scripts
    foreach $dirname (@scriptdirlist)
    {

        $rc = InstallUtils->get_script_list($dirname, @nodel);

        if ($rc == $::NOK)
        {
            next;
        }

        # check each script name in this directory
        foreach $script (sort @::scriptlist)
        {
            chomp $script;

            # see if there are any nodes in the list
            if (@{$::scriptnodes{$script}}[0] eq $::NOK)
            {

                # msg - Skipping to the next script name.
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', "E", 'EMsgSkipScript');
                next;
            }

            # see if the script is executable
            if (!(-x "$dirname/$script"))
            {

                # msg - Script $script is not executable.
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                       'csminstall', "E", 'EMsgExecScript', "$dirname/$script");

                # msg - Skipping to the next script name.
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', "E", 'EMsgSkipScript');
                next;
            }

            #  add the file to the correct script list for the node
            foreach my $node (@{$::scriptnodes{$script}})
            {

                chomp $node;

                if ($dirname eq $::PREINSTALLDIR)
                {
                    push @{$::PREINSTSCRIPTS{$node}}, $script;

                }
                elsif ($dirname eq $::POSTINSTALLDIR)
                {
                    push @{$::POSTINSTSCRIPTS{$node}}, $script;

                }
                elsif ($dirname eq $::UPDATEDIR)
                {
                    push @{$::UPDATESCRIPTS{$node}}, $script;
                }
            }
        }
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    name2list

        Convert a script file name to a list of nodes that the
        script can be run on.

        Arguments:
                $dirname,
                $filename
                @nlist
        Returns:
                array of node names.
        Error:
                1 - An error occured.                                   #
        Globals:
                
                Requires @::allnodes be set by caller
        Example:
                @{$::scriptnodes{$filename}}=
                        ServerUtils->name2list($dirname,$filename,@nlist);_
        Comments:
                The file name format is <basename>._<node or group>.
                If there is just a basename then it applies to all nodes.
                If there is a node name then it just applies to that node.
                If there is a group name then it applies to the members of
                the group.


=cut

#--------------------------------------------------------------------------------

sub name2list
{
    my ($junk, $dirname, $filename, @nlist) = @_;
    my @nodelist = ();
    my ($base,  $name,   @glist);
    my ($short, $target, $cmd);
    my $junk2;

    chomp $filename;

    # the second part of the file name tells us
    #    what nodes to run it on
    # also check if additional target was used - error
    ($base, $target, $junk2) = split(/\._/, $filename);

    if (defined($junk2))
    {

        #  \'$filename\' is not a valid customization script name.
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',    $::MSGMAPPATH,
                                  'csminstall',        "E",
                                  'EMsgBadScriptName', "$dirname/$filename"
                                  );
        return $::NOK;
    }

    if (!defined($target))
    {

        # do on all nodes the calling
        #    command was asked to process
        return @nlist;

    }
    else
    {

        # see if the target is a valid node name
        my ($hostname, $ipaddr) = NodeUtils->tryHost($target);
        if (grep(/^$hostname/, @::allnodes))
        {

            # see if the target is one of the nodes
            #     specified on the command line
            if (grep(/^$hostname/, @nlist))
            {
                chomp(@nodelist = ($hostname));
            }
            return @nodelist;
        }

        # see if target is a valid group name
        $cmd = "$::NODEGRP -p $target";
        @glist = NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC)
        {

            # msg - An incorrect file name format was used for the script $filename. '$target' is neither a node name nor a group name.
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "E",
                                      'EMsgBadScript',  "$dirname/$filename",
                                      $target
                                      );
            return $::NOK;

        }
        else
        {

            foreach $name (@glist)
            {

                # we only need a node if it was specified
                #    on the command line
                if (grep(/^$name/, @nlist))
                {
                    push(@nodelist, $name);
                }
            }
            return @nodelist;
        }
    }
    return $::NOK;
}

#--------------------------------------------------------------------------------

=head2    PkgDefs Support

=cut

#--------------------------------------------------------------------------------

=head3    get_OSDefs

        Determine which definition files need to be loaded and
        load them.  Read the set of OSDefs variables into a hash
        and assigns them each to global variables.  Calls get_osdefs_files
        to read the files in /opt/csm/install/defs.  The correct file(s)
        are chosen based on the parameters passed in to get_OSDefs.

        If no parameters are provided, default values based on the current
        machine's configuration are filled in.

        Arguments:
                $argsProvided.
        Returns:
                Array of defintion file names
        Globals:
                none
        Error:
                undefined
        Example:
                my %osdefs =
                   ServerUtils->get_OSDefs();  # Get defs for this host
                print "CHMOD = $osdefs{'CHMOD'}\n";

                # You can also use a global variable:
                my %osdefs =
                   ServerUtils->get_OSDefs();  # Get for current machine
                print "CHMOD = $::CHMOD\n";
        Comments:
                The pathnames must be defined in CSMDefs.pm.

=cut

#--------------------------------------------------------------------------------

sub get_OSDefs
{
    my $class         = shift;
    my $args_provided = (@_);

    my (
        $osname,            # eg Linux or AIX (case sensitive)
        $distro_name,       # eg RedHat or SuSE (case sensitive)
        $distro_version,    # eg 7.3 or 5.2
        $hw_arch,           # eg i386, ppc
        $csm_version,       # eg 1.3.0
        $no_globals,        # Don't set global variables if set to 1
    ) = @_;

    # Default to setting global variables
    $no_globals = 0 if (!$no_globals);

    # Set defaults if no arguments were provided
    # Note below that some of these require command pathnames to be defined.
    # Therefore, the pathnames must be defined in CSMDefs.pm.
    if (!$args_provided)
    {
        $osname         = $::PLTFRM;
        $distro_name    = NodeUtils->get_DistributionName;     #requires no cmds
        $distro_version = NodeUtils->get_DistributionVersion;  #requires LSLPP
        $hw_arch = InstallUtils->get_PkgArchitecture;  #requires UNAME for Linux
        $csm_version =
          InstallUtils->get_CSMVersion("csm.core");   #requires RPMCMD and LSLPP
    }
    my $munge = join(
                     "|::|",
                     (
                      $osname,  $distro_name, $distro_version,
                      $hw_arch, $csm_version
                     )
                     );
    if ($::all_OSDefs{$munge})
    {
        ($::DEBUG) && print "Found $munge in OSDefs hash\n";
        return (%{$::all_OSDefs{$munge}});
    }

    InstallUtils->get_osdefs_files($osname, $distro_name, $distro_version,
                                   $hw_arch, $csm_version);

    # Assign each hash element to a global variable unless $no_globals is set
    unless ($no_globals)
    {
        foreach my $key (keys %::OSDefs)
        {
            my $value = $::OSDefs{$key};

            # Display the key and the value
            #print "$key : $value\n";

            # Assign each hash element to a global variable.
            # For example, the following has the effect of setting
            #    $::GREP = $value
            # In order for this to work, we need to temporarily turn off
            # strict type checking, until the end of this block.
            no strict 'refs';
            ${"main::$key"} = $value;
        }
    }

    # Store the attributes that were used to obtain this OSdefs
    $::OSDefs{OSDefs_osname}         = $osname;
    $::OSDefs{OSDefs_distro_name}    = $distro_name;
    $::OSDefs{OSDefs_distro_version} = $distro_version;
    $::OSDefs{OSDefs_hw_arch}        = $hw_arch;
    $::OSDefs{OSDefs_csm_version}    = $csm_version;

    # Make a local copy of OSDefs
    my %OSDefs = %::OSDefs;

    # Add it to all_pkgdefs
    $::all_OSDefs{$munge} = \%OSDefs;

    return %OSDefs;

}

#--------------------------------------------------------------------------------

=head3    get_osdefs_files

        Determine which definition files need to be loaded and load them.

        Arguments:
                $class,
                $osname,
                $distro_name,
                $distro_version,
                $hw_arch,
                $csm_version
        Returns:
                Array of defintion file names
        Globals:
                none
        Error:
                undefined
        Example:
                 ServerUtils->get_osdefs_files($osname,
                                                $distro_name,
                                                $distro_version,
                                                $hw_arch,
                                                $csm_version);
        Comments:
                Search order on Linux
                        Linux-RedHat7.3-i386.pm, Linux-RedHat7.3.pm,
                        Linux-RedHat.pm, Linux.pm
                Search order on AIX:
                        AIX-5.2.pm, AIX.pm

                Search for the files in either <pwd>/defs or $OSDEFS

=cut

#--------------------------------------------------------------------------------

sub get_osdefs_files
{
    my ($class, $osname, $distro_name, $distro_version, $hw_arch, $csm_version,)
      = @_;

    my $isAIX = ($osname eq "AIX");

    # Set these global variables to load the correct values from osdefs.
    $::csm_version = $csm_version;

    my $distro   = "${distro_name}${distro_version}";
    my $osdistro = "${osname}-${distro}";

    my @defsfiles;
    push(@defsfiles, "${osdistro}-${hw_arch}.pm") if (${hw_arch});
    push(@defsfiles, "${osdistro}.0-${hw_arch}.pm") if (${hw_arch} and $isAIX);
    push(@defsfiles, "${osdistro}.pm");
    push(@defsfiles, "${osdistro}.0.pm") if ($isAIX);
    push(@defsfiles, "${osname}-${distro_name}.pm") if (${distro_name});
    push(@defsfiles, "${osname}.pm");

    my $progdir = dirname($0);

    foreach my $file (@defsfiles)
    {
        foreach my $dir ("$progdir/defs", $::OSDEFS)
        {
            my $defsfile = "$dir/$file";
            ($::DEBUG)
              && NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                              'csminstall', 'V', 'IMsgChecking_For', $defsfile);
            if (-f $defsfile)
            {

                # Using "do" rather than "require" because require only loads
                # a file once.  We might need to load it again with a different
                # value for csm_version.
                #require "$defsfile";
                do "$defsfile";
                return $defsfile;
            }
        }
    }

    # If we get here, then there was nothing loaded.
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'E1', 'EMsgNoDefsFiles', $::OSDEFS);

    #die "Error:  No OS Definition files to load in $::OSDEFS\n";
}

#--------------------------------------------------------------------------------

=head3    get_pkgdefs

        Read the set of pkgdefs variables into a hash.

        Calls get_pkgdefs_files to read the files in
        /opt/csm/install/pkgdefs.  The correct file(s) are
        chosen based on the parameters passed in to get_pkgdefs.

        If no parameters are provided, default values based on the
        current machine's configuration are filled in.

        Arguments: - optional
                $osname,                # eg Linux or AIX (case sensitive)
                $distro_name,           # eg RedHat or SuSE (case sensitive)
                $distro_version,        # eg 7.3 or 5.2
                $hw_arch,               # eg i386, ppc
                $mgmt_type,             # Either MgmtServer or MgdNode
                $csm_version,   
        Returns:
                Hash of pkgdef values by pkgdef variable name
        Globals:
                $::all_pkgdefs
                $::pkgdefs
                $::mgmt_type
                $::csm_version
        Error:
                undefined
        Example:
                my %pkgdefs =
                        ServerUtils->get_pkgdefs();            # Get for current machine

                print "DISTRO_NAME = $pkgdefs{'DISTRO_NAME'}\n";        # string example

                print "opensrc_prereqs = " .                            # array example
                join(" ", @{$pkgdefs{'opensrc_prereqs'}}) ."\n";

        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_pkgdefs
{
    my $class         = shift;
    my $args_provided = (@_);

    my (
        $osname,            # eg Linux or AIX (case sensitive)
        $distro_name,       # eg RedHat or SuSE (case sensitive)
        $distro_version,    # eg 7.3 or 5.2
        $hw_arch,           # eg i386, ppc
        $mgmt_type,         # Either MgmtServer or MgdNode
        $csm_version,       # eg 1.3.0
    ) = @_;

    # Set defaults if no arguments were provided
    # Note below that some of these require command pathnames to be defined.
    # Therefore, the pathnames must be defined in CSMDefs.pm.
    if (!$args_provided)
    {
        $osname         = $::PLTFRM;
        $distro_name    = NodeUtils->get_DistributionName;     #requires no cmds
        $distro_version = NodeUtils->get_DistributionVersion;  #requires LSLPP
        $hw_arch = InstallUtils->get_PkgArchitecture;  #requires UNAME for Linux
        $mgmt_type   = "MgmtServer";
        $csm_version =
          InstallUtils->get_CSMVersion("csm.core");   #requires RPMCMD and LSLPP
    }

    my $munge = join(
                     "|::|",
                     (
                      $osname,  $distro_name, $distro_version,
                      $hw_arch, $mgmt_type,   $csm_version
                     )
                     );
    if ($::all_pkgdefs{$munge})
    {
        ($::DEBUG) && print "Found $munge in pkgdefs hash\n";
        return (%{$::all_pkgdefs{$munge}});
    }

    # Set these global variables to load the correct values from pkgdefs.
    $::mgmt_type   = $mgmt_type;
    $::csm_version = $csm_version;

    InstallUtils->get_pkgdefs_files($osname, $distro_name, $distro_version,
                                    $hw_arch, $mgmt_type, $csm_version);

    # Store the attributes that were used to obtain this pkgdefs
    $::pkgdefs{pkgdefs_osname}         = $osname;
    $::pkgdefs{pkgdefs_distro_name}    = $distro_name;
    $::pkgdefs{pkgdefs_distro_version} = $distro_version;
    $::pkgdefs{pkgdefs_hw_arch}        = $hw_arch;
    $::pkgdefs{pkgdefs_mgmt_type}      = $mgmt_type;
    $::pkgdefs{pkgdefs_csm_version}    = $csm_version;

    # Make a local copy of pkgdefs
    my %pkgdefs = %::pkgdefs;

    # Add it to all_pkgdefs
    $::all_pkgdefs{$munge} = \%pkgdefs;

    return %pkgdefs;
}

#--------------------------------------------------------------------------------

=head3    get_pkgdefs_files

        Determine which definition files need to be loaded and load them.

        Arguments:
                $osname,
                $distro_name,
                $distro_version,
                $hw_arch,
                $mgmt_type,
                $csm_version
        Returns:
                Array of defintion file names
        Globals:
                $::mgmt_type
                $::csm_version
        Error:
                csmInstallCat E1
        Example:
                 ServerUtils->get_pkgdefs_files($osname,
                                                $distro_name,
                                                $distro_version,
                                                $hw_arch,
                                                $csm_version);
        Comments:
                Search order on Linux
                        Linux-RedHat7.3-i386.pm, Linux-RedHat7.3.pm,
                        Linux-RedHat.pm, Linux.pm
                Search order on AIX:
                        AIX-5.2.pm, AIX.pm
                Search for the files in either <pwd>/pkgdefs or $PKGDEFS

=cut

#--------------------------------------------------------------------------------

sub get_pkgdefs_files
{
    my ($class, $osname, $distro_name, $distro_version, $hw_arch, $mgmt_type,
        $csm_version,)
      = @_;

    my $isAIX = ($osname eq "AIX");

    # Set these global variables to load the correct values from pkgdefs.
    $::mgmt_type   = $mgmt_type;
    $::csm_version = $csm_version;

    my $distro   = "${distro_name}${distro_version}";
    my $osdistro = "${osname}-${distro}";

    my @defsfiles;
    push(@defsfiles, "${osdistro}-${hw_arch}.pm") if (${hw_arch});
    push(@defsfiles, "${osdistro}.0-${hw_arch}.pm") if (${hw_arch} and $isAIX);
    push(@defsfiles, "${osdistro}.pm");
    push(@defsfiles, "${osdistro}.0.pm") if ($isAIX);
    push(@defsfiles, "${osname}-${distro_name}.pm") if (${distro_name});
    push(@defsfiles, "${osname}.pm");

    my $progdir = dirname($0);

    foreach my $file (@defsfiles)
    {
        foreach my $dir ("$progdir/pkgdefs", $::PKGDEFS)
        {
            my $defsfile = "$dir/$file";
            ($::DEBUG)
              && NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                              'csminstall', 'V', 'IMsgChecking_For', $defsfile);
            if (-f $defsfile)
            {

                # Using "do" rather than "require" because require only loads
                # a file once.  We might need to load it again with different
                # values for mgmt_type or csm_version.
                #require "$defsfile";
                do "$defsfile";
                return $defsfile;
            }
        }
    }

    # If we get here, then there was nothing loaded.
    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                              'E1', 'EMsgNoDefsFiles', $::PKGDEFS);
}

#--------------------------------------------------------------------------------

1;

k
 ----------------------

sub CreateRandomName
{

    my ($class, $name) = @_;

    my $nI;
    for ($nI = 0 ; $nI < 8 ; $nI++)
    {
        my $char = ('a' .. 'z', 'A' .. 'Z')[int(rand(52)) + 1];
        $name .= $char;
    }
    $name;
}

#--------------------------------------------------------------------------------

=head3    create_nodemap_file

        Create /csminstall/csm/config/nodemap file that contains a mapping
        of ManagedNode hostnames as defined in the CSM database, and node hostnames
        as returned by the hostname command. 

        Arguments:
                 $ref_nodeList
                 $ref_nodeInfo
                 $ref_DestNodeHash
        Returns:
                $::OK
                $::NOK
        Globals:
                $::NODE_LIST_FILE
        Error:
                $::NOK
        Example:
                if( ServerUtils->create_nodemap_file ( \@::NODELIST,
                                                        \@::LSNODE_INFO,
                                                        \%::NODEHASH) != 0){
                    blah;
                }
        Comments:
                File format -  csm_hostname<space>node_hostname    

=cut

#--------------------------------------------------------------------------------

sub create_nodemap_file
{
    my ($class, $ref_nodelist, $ref_nodeinfo, $ref_DestNodeHash) = @_;
    my @nodelist = @$ref_nodelist;
    my @nodeinfo = @$ref_nodeinfo;

    #  DestNodeHash is a hash containing attribute values for each node
    #    that was provided on the command line.
    my %DestNodeHash = %$ref_DestNodeHash;
    %main::dsh_failed = ();
    my ($cmd,          @dshout,  $rc);
    my ($csm_nodename, $csmnode, $hostname);
    my $csmcfgdir    = "/csminstall/csm/config";
    my $nodemap_file = "/csminstall/csm/config/nodemap";
    my $node;
    my $dshresult = "";

    #
    #  Check and/or create the /csminstall/csm/config directory
    #
    if (!-d $csmcfgdir)
    {
        $cmd = "$::MKDIR -m 755 -p $csmcfgdir";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       "E",
                                      'EMsgNO_CreateDir', $csmcfgdir
                                      );
            return ($::NOK);
        }
    }

    # Remove any old occurences of the nodemap file
    if (-f $nodemap_file)
    {
        $cmd = "$::RM $nodemap_file";
        $rc  = system("$cmd") >> 8;
        if ($rc != 0)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "E",
                                      'EMsgNO_RM',      "$nodemap_file"
                                      );

            # try to continue
        }
    }

    # open the map file
    unless (open(NODEMAP, ">$nodemap_file"))
    {

        # print error message
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',      $::MSGMAPPATH,
                                  'csminstall',          "E",
                                  'EMsgCANT_WRITE_FILE', "$nodemap_file"
                                  );
        return $::NOK;
    }
    my @AIX;
    my @Linux;
    my %found = ();
    my %dups  = ();

    # for each node in the node list
    foreach $node (keys %DestNodeHash)
    {

        # set the correct command based on the InstallOSName
        if (defined($DestNodeHash{$node}{'InstallOSName'}))
        {
            if ($DestNodeHash{$node}{'InstallOSName'} eq "AIX")
            {

                #$dshcmd = "$::DSH -n$node hostname";
                push @AIX, $node;
            }
            elsif ($DestNodeHash{$node}{'InstallOSName'} eq "Linux")
            {

                #$dshcmd = "$::DSH -n$node hostname -f";
                push @Linux, $node;
            }
        }
    }
    if (@Linux)
    {
        my $node_file =
          InstallUtils->make_node_list_file(\@Linux)
          ;    #put all dest nodes in tmp file
        $ENV{'DSH_LIST'} = $node_file;
        my $dshcmd    = "$::DSH hostname -f";
        my @dshresult = `$dshcmd`;
        $rc = $? >> 8;
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $node_file)
          ;    #delete node file
        if ($rc != 0)
        {

            # print error message
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', $dshcmd,
                                      $rc
                                      );

            #$main::dsh_failed{$node}=1; #take these out of target nodes
            #next;
        }
        foreach my $line (@dshresult)
        {
            my ($csmnode, $hostname) = split(" ", $line);
            $hostname =~ s/://g;
            $csmnode  =~ s/://g;
            if (defined($csmnode) && defined($hostname))
            {

                # make sure the format is consistent with the name that
                #     was used to create the configinfo file
                #$csm_nodename = NodeUtils->tryHost($csmnode);
                $found{$csmnode} = 1;
                $dups{$hostname}{$csmnode} = 1;

                # put the result in the nodemap file
                unless (print NODEMAP "$csmnode $hostname\n")
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_WRITEtoFILE',
                                      "$nodemap_file");
                }
            }
        }
    }
    if (@AIX)
    {
        my $node_file =
          InstallUtils->make_node_list_file(\@AIX)
          ;    #put all dest nodes in tmp file
        $ENV{'DSH_LIST'} = $node_file;
        my $dshcmd    = "$::DSH hostname";
        my @dshresult = `$dshcmd`;
        $rc = $? >> 8;
        InstallUtils->close_delete_file($::NODE_LIST_FILE, $node_file)
          ;    #delete node file
        if ($rc != 0)
        {

            # print error message
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', $dshcmd,
                                      $rc
                                      );

            #$main::dsh_failed{$node}=1; #take these out of target nodes
            #next;
        }
        foreach my $line (@dshresult)
        {
            my ($csmnode, $hostname) = split(" ", $line);
            $hostname =~ s/://g;
            $csmnode  =~ s/://g;
            if (defined($csmnode) && defined($hostname))
            {

                # make sure the format is consistent with the name that
                #     was used to create the configinfo file
                #$csm_nodename = NodeUtils->tryHost($csmnode);
                $found{$csmnode} = 1;
                $dups{$hostname}{$csmnode} = 1;

                # put the result in the nodemap file
                unless (print NODEMAP "$csmnode $hostname\n")
                {
                    NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', 'E', 'EMsgCANT_WRITEtoFILE',
                                      "$nodemap_file");
                }
            }
        }
    }

    #foreach my $n (keys %DestNodeHash){
    #    if(!$found{$n}){
    #        $main::dsh_failed{$n}=1;
    #    }
    #    }
    foreach my $n (keys %dups)
    {    #get rid of any nodes that map to the same hostname
        if (scalar(keys %{$dups{$n}}) > 1)
        {
            my @dupNodes = keys %{$dups{$n}};
            my $dNstring = join ',', @dupNodes;
            my $hostname = $n;
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',  $::MSGMAPPATH,
                                      'csminstall',      'E',
                                      'EMsgHostnameMap', $hostname,
                                      $dNstring
                                      );
            foreach my $d (@dupNodes)
            {
                $main::dsh_failed{$d} = 1;
            }
        }
    }
    close(NODEMAP);
    if (!@AIX && !@Linux)
    {
        return $::NOK;
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    createSMSConfig

        Put SMS node group info into the file:
        /csminstall/csm/var/smsupdate.info

        Arguments:
                none
        Returns:
                reference to a hash of all groups
        Globals:
                none
        Error:
                NodeUtil message E
        Example:
                 #create the SMS nodegroup config file
                 ServerUtils->createSMSConfig();
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub createSMSConfig
{
    my %all_groups = ();
    my %node_index;
    my @empty_array = ();
    if (-e "/csminstall")
    {
        if (!-e "/csminstall/csm")
        {
            mkdir "/csminstall/csm",        0077;
            mkdir "/csminstall/csm/config", 0077;
        }
    }
    my $ref_nodegrp = NodeUtils->listNodeGroupExpMem(@empty_array);
    foreach my $row (@$ref_nodegrp)
    {
        my ($groupname, $nodelist) = $row =~ /^(.+):\|:\{(.*)\}$/;
        my @nodes = split(/,/, $nodelist);
        foreach my $node (@nodes)
        {
            push @{$node_index{$node}},      $groupname;
            push @{$all_groups{$groupname}}, $node;

        }
    }
    system("$::MKDIR -p /csminstall/csm/config/");
    open(GROUPFILE, ">/csminstall/csm/config/sms.info")
      or NodeUtils->message('E', 'EMsgCANT_OpenFile',
                            "/csminstall/csm/config/sms.info",
                            "$? $!");
    foreach my $node (keys %node_index)
    {
        print GROUPFILE "$node: @{$node_index{$node}} \n";
    }
    close GROUPFILE;
    return \%all_groups;
}

#--------------------------------------------------------------------------------

=head3 get_script_list

        For a given directory get a list of scripts and associated list
        of nodes to run it on.

        Arguments:
                $directoryName
                 @nodeList
        Returns:
                $::OK
                $::NOK 
        Globals:
                @::scriptlist
                @{$::scriptnodes{$fname}}
                
        Error:
                $::NOK 
        Example:
                $rc = ServerUtils->get_script_list($dirname,@nodelist);
        Comments:
                none

=cut

#--------------------------------------------------------------------------------

sub get_script_list
{
    my ($junk, $dirname, @nlist) = @_;
    my %basename;
    my $target;
    my $filename;
    my @filelist;
    my $cmd;

    @::scriptlist = ();

    if (-d $dirname)
    {
        $cmd = "$::LS $dirname";
        @filelist = NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "E",
                                      'EMsgCANT_RUN',   $cmd,
                                      $::RUNCMD_RC
                                      );
            return $::NOK;
        }
    }
    else
    {

        # msg - Warning: The \'$dirname\' does not exist.
        #        Skipping to the next directory.
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "E", 'EMsgSkipDir', $dirname);
        return $::NOK;
    }

    # check each script name in this directory
    # - add the filename to the script list
    # - get the initial list of node to run the script on
    # - save the basename for each script
    foreach $filename (sort @filelist)
    {
        chomp $filename;

        #  make sure this is not a subdir
        if (-d "$dirname/$filename")
        {

            # error - Skipping subdirectory $dirname/$filename.
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "I",
                                      'IMsgSkipSubDir', "$dirname/$filename"
                                      );
            next;
        }

        # figure out what nodes to run the script on by
        #    deciphering the script name
        @{$::scriptnodes{$filename}} =
          InstallUtils->name2list($dirname, $filename, @nlist);
        if (${$::scriptnodes{$filename}}[0] eq $::NOK)
        {

            # msg - Skipping to the next script name.
            NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall', "E", 'EMsgSkipScript');
            next;
        }
        push @::scriptlist, $filename;
        (@basename{$filename}, $target) = split(/\._/, $filename);
    }

    # now check each script that has no extension (target) and see
    #  if there are any scripts with the same basename that have targets
    # if there are - remove any nodes in the targeted script list from the
    #  list of nodes for the script with no extensions(target)
    # ex.  say script foo goes to all nodes and script foo._grpa goes
    # to node1 & node2.  In this case I need to remove node1 & node2
    # from the list of nodes for the script foo.

    foreach my $fname (sort @::scriptlist)
    {
        chomp $fname;

        # if the script name is the same as the basename then
        #   the list is all the nodes passed in on the command line.
        if ($fname eq @basename{$fname})
        {

            # check the rest of the scripts to see if any
            # have the same basename - if we find one then redo
            # the list for the basename-only script
            foreach my $file (@::scriptlist)
            {
                chomp $file;

                #  see if the basenames are the same
                if (@basename{$fname} eq @basename{$file})
                {

                    # don't remove itself
                    if ($file ne $fname)
                    {
                        my @tmplist = ();
                        foreach my $node (@{$::scriptnodes{$fname}})
                        {

                            # if the node is not in the list for $file
                            #  then add it to a temp list
                            if (!grep /^$node/, @{$::scriptnodes{$file}})
                            {
                                push @tmplist, $node;
                            }
                        }
                        @{$::scriptnodes{$fname}} = @tmplist;
                    }
                }
            }
        }
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    make_config_file

        Create configuration information files for each node provided
        in the nodelist reference argument.

        Arguments:
                 $ref_nodeList
                 $ref_nodeinfo
                 $ref_DestinationNodeHash
        Returns:
                $::OK
                $::NOK
        Globals:
                $::SETUP_REMOTE_SHELL
                $::NOSMS
        Error:
                $::NOK
        Example:
                if(ServerUtils->make_config_file( \@DestNode,
                                                   \@lsnode_info,
                                                   \%DestNodeHash) != 0) {
                    blah;
                }
        Comments:
                Requires $::REMOTE_SHELL and $::SETUP_REMOTE_SHELL to be set optionally,
                $::NOSMS can be set to instruct makenode to not perform software maintenance
                on Linux nodes

=cut

#--------------------------------------------------------------------------------

sub make_config_file
{

    my ($class, $ref_nl, $ref_nodeinfo, $ref_DestNodeHash) = @_;
    my @nl       = @$ref_nl;
    my @nodeinfo = @$ref_nodeinfo;

    #  DestNodeHash is a hash containing attribute values for each node
    #    that was provided on the command line.
    my %DestNodeHash = %$ref_DestNodeHash;

    my ($hname, $short, $rc);
    my $csmcfgdir = "/csminstall/csm/config";
    my $cmd;
    my $output;
    my $DirectorInstalled = 0;
    my ($host, $ipaddr, $shorthost);

    #
    #  Check and/or create the /csminstall/csm/config directory
    #
    if (!-d $csmcfgdir)
    {
        $cmd = "$::MKDIR -m 755 -p $csmcfgdir";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',   $::MSGMAPPATH,
                                      'csminstall',       "E",
                                      'EMsgNO_CreateDir', $csmcfgdir
                                      );
            return ($::NOK);
        }
    }

    # If this is a Linux management server, check if csm.director.agent
    # is installed.
    if (NodeUtils->isLinux() == 1)
    {
        $cmd = "$::RPMCMD -q csm.director.agent";
        $output = NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC == 0)
        {
            $DirectorInstalled = 1;
        }
    }

    # get the lists of user-provided cstomization script
    #   that we need to run on the nodes
    if (InstallUtils->make_script_lists(@nl))
    {

        # msg  -Could not get lists of customization scripts
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  "E", 'EMsgNoCustScripts');

        # continue
    }

    #
    # create the config_info file
    #

    #  go through each node in the list
    #   (the keys are the hostnames as returned from tryHost() !!)
    foreach $hname (keys %DestNodeHash)
    {

        # remove the old config file if any
        if (-e "$csmcfgdir/$hname.config_info")
        {
            $cmd = "$::RM $csmcfgdir/$hname.config_info";
            $rc  = system("$cmd");
            if ($rc >> 8)
            {
                my $fn = "$csmcfgdir/$hname.config_info";
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                         'csminstall', "E", 'EMsgNO_RM', "$fn");

                # try to continue ??return $::NOK;
            }
        }

        # create the new file
        unless (open(CONFIG_OUT, ">$csmcfgdir/$hname.config_info"))
        {
            my $fn = "$csmcfgdir/$hname.config_info";
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',      $::MSGMAPPATH,
                                      'csminstall',          "E",
                                      'EMsgCANT_WRITE_FILE', "$fn"
                                      );
            return $::NOK;
        }

        # Add cluster-wide configuration information to the file
        if (defined($::REMOTE_SHELL))
        {
            print CONFIG_OUT "RemoteShell=$::REMOTE_SHELL\n";
        }
        if (defined($::SETUP_REMOTE_SHELL))
        {
            print CONFIG_OUT "SetupRemoteShell=$::SETUP_REMOTE_SHELL\n";
        }

        # add the node configuration information to the file
        if (defined($hname))
        {
            print CONFIG_OUT "Hostname=$hname\n";
        }
        if (defined($DestNodeHash{$hname}{'ManagementServer'}))
        {
            print CONFIG_OUT
              "ManagementServer=$DestNodeHash{$hname}{'ManagementServer'}\n";
            print CONFIG_OUT "ManagementServerIP="
              . NetworkUtils->validate_ip(
                                      $DestNodeHash{$hname}{'ManagementServer'})
              . "\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallOSName'}))
        {
            print CONFIG_OUT
              "InstallOSName=$DestNodeHash{$hname}{'InstallOSName'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallCSMVersion'}))
        {
            print CONFIG_OUT
              "InstallCSMVersion=$DestNodeHash{$hname}{'InstallCSMVersion'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallDistributionVersion'}))
        {
            print CONFIG_OUT
              "InstallDistributionVersion=$DestNodeHash{$hname}{'InstallDistributionVersion'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallDistributionName'}))
        {
            print CONFIG_OUT
              "InstallDistributionName=$DestNodeHash{$hname}{'InstallDistributionName'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallPkgArchitecture'}))
        {
            print CONFIG_OUT
              "InstallPkgArchitecture=$DestNodeHash{$hname}{'InstallPkgArchitecture'}\n";
        }
        if (defined($DestNodeHash{$hname}{'Mode'}))
        {
            print CONFIG_OUT "Mode=$DestNodeHash{$hname}{'Mode'}\n";
        }
        if (defined($DestNodeHash{$hname}{'ConsoleSerialDevice'}))
        {
            print CONFIG_OUT
              "ConsoleSerialDevice=$DestNodeHash{$hname}{'ConsoleSerialDevice'}\n";
        }
        if (defined($DestNodeHash{$hname}{'InstallServer'})
            && ($DestNodeHash{$hname}{'InstallServer'} ne ""))
        {
            my $progname = NodeUtils->programName();
            if ($progname =~ m/installnode/)
            {

                #make sure a machine is not an install server of itself
                my ($node_hostname, $node_ip) = NodeUtils->getHost($hname);
                my ($server,        $rep_dir) = split ':',
                  $DestNodeHash{$hname}{'InstallServer'};
                my ($isvr_hostname, $isvr_ip) = NodeUtils->getHost($server);
                if ($node_hostname ne $isvr_hostname)
                {
                    print CONFIG_OUT
                      "InstallServer=$DestNodeHash{$hname}{'InstallServer'}\n";
                }
            }
            elsif ($DestNodeHash{$hname}{'InstallServer'} ne
                   $DestNodeHash{$hname}{'ManagementServer'})
            {

                #not using the ms as the install server
                print CONFIG_OUT
                  "InstallServer=$DestNodeHash{$hname}{'InstallServer'}\n";
            }
        }

        if (defined($DestNodeHash{$hname}{'PowerMethod'}))
        {
            print CONFIG_OUT
              "PowerMethod=$DestNodeHash{$hname}{'PowerMethod'}\n";
        }

        if (defined($DestNodeHash{$hname}{'InstallAdapterMacaddr'}))
        {
            print CONFIG_OUT
              "InstallAdapterMacaddr=$DestNodeHash{$hname}{'InstallAdapterMacaddr'}\n";
        }

        # Handle Linux-specific attributes.
        if ($DestNodeHash{$hname}{'InstallOSName'} eq "Linux")
        {

            # If csm.director.agent is installed on the management server,
            # then install it on the Linux nodes.
            print CONFIG_OUT "InstallDirector=$DirectorInstalled\n";

            # if $::NOSMS isn't set then perform software maintenance
            if (!$::NOSMS)
            {
                print CONFIG_OUT "SMS=1\n";
            }
        }

        if (defined($DestNodeHash{$hname}{'ConsoleSerialSpeed'}))
        {
            print CONFIG_OUT
              "ConsoleSerialSpeed=$DestNodeHash{$hname}{'ConsoleSerialSpeed'}\n";
        }

        if (defined($DestNodeHash{$hname}{'InstallMethod'}))
        {
            print CONFIG_OUT
              "InstallMethod=$DestNodeHash{$hname}{'InstallMethod'}\n";
        }

        # put in the SetupKRB5 attribute value
        if (!defined $::KRB5SETUP)
        {

            $::KRB5SETUP = InstallUtils->getSetupKRB5;
        }
        print CONFIG_OUT "SetupKRB5=$::KRB5SETUP\n";

        # put in what would be the KRB5 principal name for ManagementServer
        if (!defined $::MSNAME)
        {
            $::MSNAME = NodeUtils->getRSCThostname;
        }
        my $msnamelower = lc($::MSNAME);
        print CONFIG_OUT "CSMKRB5Principal=ctsrcmdp.$msnamelower";

        # put in what would be the KRB5 principal name for HA ManagementServer
        if (!defined $::HAMODE)
        {
            my $outref =
              NodeUtils->runrmccmd('lsrsrc-api', "-i",
                                   "-s IBM.DmsCtrl::::HAMode");
            $::HAMODE = $$outref[0];
        }
        if ($::HAMODE == 1)
        {    #on an active HAMS management server
            require HAMS;
            my $inactivems      = HAMS->getInactiveRSCTHostname(); # get HA name
            my $inactivemslower = lc($inactivems);
            print CONFIG_OUT ",ctsrcmdp.$inactivemslower\n";

        }
        else
        {
            print CONFIG_OUT "\n";
        }

        if (($::SETUP_REMOTE_SHELL == 1) && ($::REMOTE_SHELL =~ m/rsh/))
        {
            if (!defined $::HAMODE)
            {
                my $outref =
                  NodeUtils->runrmccmd('lsrsrc-api', "-i",
                                       "-s IBM.DmsCtrl::::HAMode");
                $::HAMODE = $$outref[0];
            }
            if ($::HAMODE == 1)
            {    #on an active HAMS management server
                    #get management server attribute for node on other ms
                require HAMS;
                my $other_ms = HAMS->getManagementServerAttr($hname);
                if ($other_ms)
                {
                    print CONFIG_OUT "InActiveMSAttr=$other_ms\n";
                }
            }
        }

        #
        # add the /etc/hosts info for the management server - just AIX for now
        #
        if ($DestNodeHash{$hname}{'InstallOSName'} eq "AIX")
        {
            ($host, $ipaddr) =
              NodeUtils->getHost($DestNodeHash{$hname}{'ManagementServer'});
            ($shorthost = $host) =~ s/\..*$//;
            print CONFIG_OUT "ETCHOSTSMS=$ipaddr $host $shorthost\n";
        }

        # add lists of scripts to run on the node
        if (defined(@{$::PREINSTSCRIPTS{$hname}}))
        {
            print CONFIG_OUT "PREINSTSCRIPTS=@{$::PREINSTSCRIPTS{$hname}}\n";
        }
        if (defined(@{$::POSTINSTSCRIPTS{$hname}}))
        {
            print CONFIG_OUT "POSTINSTSCRIPTS=@{$::POSTINSTSCRIPTS{$hname}}\n";
        }
        if (defined(@{$::UPDATESCRIPTS{$hname}}))
        {
            print CONFIG_OUT "UPDATESCRIPTS=@{$::UPDATESCRIPTS{$hname}}\n";
        }

        close(CONFIG_OUT);

        $cmd = "$::CHMOD 644 $csmcfgdir/$hname.config_info";
        $rc  = system("$cmd");
        if ($rc >> 8)
        {
            NodeUtils->messageFromCat(
                                      'csmInstall.cat',    $::MSGMAPPATH,
                                      'csminstall',        'E',
                                      'EMsgCMD_FAILED_RC', $::CHMOD,
                                      $rc
                                      );

            # try to continue
        }

        #Add symbol link short_hostname.config_info to long_hostname.config_info
        my ($short_hname) = split('\.', $hname);

        # this symbolic link will be done only when the short name is not the
        # same as the long name
        if ($short_hname ne $hname)
        {
            $cmd =
              "cd $csmcfgdir; $::LN -fs $hname.config_info $short_hname.config_info";
            $rc = system("$cmd");
            if ($rc >> 8)
            {
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                            'csminstall', 'E', 'EMsgCMD_FAILED_RC', $::LN, $rc);
            }
        }

    }    # go do the next node

    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    make_node_list_file

        Makes a node list file.  

        Arguments:
                (\@list_of_nodes) - reference to an arrary of nodes.
        Returns:
                $file_name and sets the global var: $::NODE_LIST_FILE
        Globals:
                the ENV vars: DSH_LIST,  RPOWER_LIST,  RCONSOLE_LIST
        Error:
                None documented
        Example:
                ServerUtils->make_node_list_file(\@nodelist); 

        Comments:
                IMPORTANT:
          Make sure to cleanup afterwards with:

                         ServerUtils->close_delete_file($file_handle, $file_name)

=cut

#--------------------------------------------------------------------------------

sub make_node_list_file
{
    my ($class, $ref_node_list) = @_;
    my @node_list = @$ref_node_list;
    srand(time | $$);    #random number generator start

    my $file = "/tmp/csm_$$";
    while (-e $file)
    {
        $file = InstallUtils->CreateRandomName($file);
    }

    open($::NODE_LIST_FILE, ">$file")
      or
      NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                "E", 'EMsgCANT_WRITE_FILE', "$file");
    foreach my $node (@node_list)
    {
        print $::NODE_LIST_FILE "$node\n";
    }
    return $file;
}

#--------------------------------------------------------------------------------

=head3    make_script_lists

        Create lists of pre-install, post-install and update scrips
        for each node and put them in the following global hashes:

        %::PREINSTSCRIPTS - scripts get run from csmprereboot
                        during full install before the first reboot.
        %::POSTINSTSCRIPTS - scripts get run from csmfirstboot
                        after the first reboot of the system.
        %::UPDATESCRIPTS - scripts get run from updatenode.client
                        after a node has been updated.

        Arguments:
                @nodelist
        Returns:
                $::OK   - on success
                1       - on error
        Globals:
                %::PREINSTSCRIPTS
                %::POSTINSTSCRIPTS 
                %::UPDATESCRIPTS
        Example:
                if( ServerUtils->make_script_lists(@nodelist) ) { blah; }_
        Comments:
        none

=cut

#--------------------------------------------------------------------------------

sub make_script_lists
{

    my ($junk, @nodel) = @_;   # the list of nodes passed in on the command line
    my $dirname;               #  directory to check for scripts
    my $script;                #  unique script name
    my $cmd;
    my $rc;

    @::scriptlist;             #  list of scripts found in a directory
    %::scriptnodes;            #  lists of nodes to run each script on

    # get the list of all nodes so we can check
    #       for valid node names later
    $cmd = "$::LSNODE";
    @::allnodes = NodeUtils->runcmd($cmd, -1);
    if ($::RUNCMD_RC)
    {
        NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH, 'csminstall',
                                  'E', 'EMsgCANT_RUN', $cmd, $::RUNCMD_RC);
        return $::NOK;
    }

    my @scriptdirlist;
    if ($::UPDATESCRIPTSONLY)
    {
        @scriptdirlist = ($::UPDATEDIR);
    }
    else
    {
        @scriptdirlist = ($::PREINSTALLDIR, $::POSTINSTALLDIR);
    }

    # check each subdirectory for user scripts
    foreach $dirname (@scriptdirlist)
    {

        $rc = InstallUtils->get_script_list($dirname, @nodel);

        if ($rc == $::NOK)
        {
            next;
        }

        # check each script name in this directory
        foreach $script (sort @::scriptlist)
        {
            chomp $script;

            # see if there are any nodes in the list
            if (@{$::scriptnodes{$script}}[0] eq $::NOK)
            {

                # msg - Skipping to the next script name.
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', "E", 'EMsgSkipScript');
                next;
            }

            # see if the script is executable
            if (!(-x "$dirname/$script"))
            {

                # msg - Script $script is not executable.
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                       'csminstall', "E", 'EMsgExecScript', "$dirname/$script");

                # msg - Skipping to the next script name.
                NodeUtils->messageFromCat('csmInstall.cat', $::MSGMAPPATH,
                                          'csminstall', "E", 'EMsgSkipScript');
                next;
            }

            #  add the file to the correct script list for the node
            foreach my $node (@{$::scriptnodes{$script}})
            {

                chomp $node;

                if ($dirname eq $::PREINSTALLDIR)
                {
                    push @{$::PREINSTSCRIPTS{$node}}, $script;

                }
                elsif ($dirname eq $::POSTINSTALLDIR)
                {
                    push @{$::POSTINSTSCRIPTS{$node}}, $script;

                }
                elsif ($dirname eq $::UPDATEDIR)
                {
                    push @{$::UPDATESCRIPTS{$node}}, $script;
                }
            }
        }
    }
    return $::OK;
}

#--------------------------------------------------------------------------------

=head3    name2list

        Convert a script file name to a list of nodes that the
        script can be run on.

        Arguments:
                $dirname,
                $filename
                @nlist
        Returns:
                array of node names.
        Error:
                1 - An error occured.                                   #
        Globals:
                
                Requires @::allnodes be set by caller
        Example:
                @{$::scriptnodes{$filename}}=
                        ServerUtils->name2list($dirname,$filename,@nlist);_
        Comments:
                The file name format is <basename>._<node or group>.
                If there is just a basename then it applies to all nodes.
                If there is a node name then it just applies to that node.
                If there is a group name then it applies to the members of
                the group.


=cut

#--------------------------------------------------------------------------------

sub name2list
{
    my ($junk, $dirname, $filename, @nlist) = @_;
    my @nodelist = ();
    my ($base,  $name,   @glist);
    my ($short, $target, $cmd);
    my $junk2;

    chomp $filename;

    # the second part of the file name tells us
    #    what nodes to run it on
    # also check if additional target was used - error
    ($base, $target, $junk2) = split(/\._/, $filename);

    if (defined($junk2))
    {

        #  \'$filename\' is not a valid customization script name.
        NodeUtils->messageFromCat(
                                  'csmInstall.cat',    $::MSGMAPPATH,
                                  'csminstall',        "E",
                                  'EMsgBadScriptName', "$dirname/$filename"
                                  );
        return $::NOK;
    }

    if (!defined($target))
    {

        # do on all nodes the calling
        #    command was asked to process
        return @nlist;

    }
    else
    {

        # see if the target is a valid node name
        my ($hostname, $ipaddr) = NodeUtils->tryHost($target);
        if (grep(/^$hostname/, @::allnodes))
        {

            # see if the target is one of the nodes
            #     specified on the command line
            if (grep(/^$hostname/, @nlist))
            {
                chomp(@nodelist = ($hostname));
            }
            return @nodelist;
        }

        # see if target is a valid group name
        $cmd = "$::NODEGRP -p $target";
        @glist = NodeUtils->runcmd($cmd, -1);
        if ($::RUNCMD_RC)
        {

            # msg - An incorrect file name format was used for the script $filename. '$target' is neither a node name nor a group name.
            NodeUtils->messageFromCat(
                                      'csmInstall.cat', $::MSGMAPPATH,
                                      'csminstall',     "E",
                                      'EMsgBadScript',  "$dirname/$filename",
                                      $target
                                      );
            return $::NOK;

        }
        else
        {

            foreach $name (@glist)
            {

                # we only need a node if it was specified
                #    on the command line
                if (grep(/^$name/, @nlist))
                {
                    push(@nodelist, $name);
                }
            }
            return @nodelist;
        }
    }
    return $::NOK;
}

#--------------------------------------------------------------------------------

=head2    PkgDefs Support

=cut

#--------------------------------------------------------------------------------

=head3    get_OSDefs

        Determine which definition files need to be loaded and
        load them.  Read the set of OSDefs variables into a hash
        and assigns them each to global variables.  Calls get_osdefs_files
        to read the files in /opt/csm/install/defs.  The correct file(s)
        are chosen based on the parameters passed in to get_OSDefs.

        If no parameters are provided, default values based on the current
        machine's configuration are filled in.

        Arguments:
                $argsProvided.
        Returns:
                Array of defintion file names
        Globals:
                none
        Error:
                undefined
        Example:
                my %osdefs =
                   ServerUtils->get_OSDefs();  # Get defs for this host
                print "CHMOD = $osdefs{'CHMOD'}\n";

                # You can also use a global variable:
                my %osdefs =
                   ServerUtils->get_OSDefs();  # Get for current machine
                print "CHMOD = $::CHMOD\n";
        Comments:
                The pathnames must be defined in CSMDefs.pm.

=cut

#--------------------------------------------------------------------------------

sub get_OSDefs
{
    my $class         = shift;
    my $args_provided = (@_);

    my (
        $osname,            # eg Linux or AIX (case sensitive)
        $distro_name,       # eg RedHat or SuSE (case sensitive)
        $distro_version,    # eg 7.3 or 5.2
        $hw_arch,           # eg i386, ppc
        $csm_version,       # eg 1.3.0
        $no_globals,        # Don't set global variables if set to 1
    ) = @_;

    # Default to setting global variables
    $no_globals = 0 if (!$no_globals);

    # Set defaults if no arguments were provided
    # Note below that some of these require command pathnames to be defined.
    # Therefore, the pathnames must be defined in CSMDefs.pm.
    if (!$args_provided)
    {
        $osname         = $::PLTFRM;
        $distro_name    = NodeUtils->get_DistributionName;     #requires no cmds
        $distro_version = NodeUtils->get_DistributionVersion;  #requires LSLPP
        $hw_arch = InstallUtils->get_PkgArchitecture;  #requires UNAME for Linux
        $csm_version =
          InstallUtils->get_CSMVersion("csm.core");   #requires RPMCMD and LSLPP
    }
    my $munge = join(
                     "|::|",
                     (
                      $osname,  $distro_name, $distro_version,
                      $hw_arch, $csm_version
                     )
                     );
    if ($::all_OSDefs{$munge})
    {
        ($::DEBUG) && print "Found $munge in OSDefs hash\n";
        return (%{$::all_OSDefs{$munge}});
    }

    InstallUtils->get_osdefs_files($osname, $distro_name, $distro_version,
                                   $hw_arch, $csm_version);

    # Assign each hash element to a global variable unless $no_globals is set
    unless ($no_globals)
    {
        foreach my $key (keys %::OSDefs)
        {
            my $value = $::OSDefs{$key};

            # Display the key and the value
            #print "$key : $value\n";

            # Assign each hash element to a global variable.
            # For example, the following has the effect of setting
            #    $::GREP = $value
            # In order for this to work, we need to temporarily turn off
            # strict type checking, until the end of this block.
            no strict 'refs';
            ${"main::$key"} = $value;
        }
    }

    # Store the attributes that were used to obtain this OSdefs
    $::OSDefs{OSDefs_osname}         = $osname;
    $::OSDefs{OSDefs_distro_name}    = $distro_name;
    $::OSDefs{OSDefs_distro_version} = $distro_version;
    $::OSDefs{OSDefs_hw_arch}        = $hw_arch;
    $::OSDefs{OSDefs_csm_version}    = $csm_version;

    # Make a local copy of OSDefs
    my %OSDefs = %::OSDefs;

    # Add it to all_pkgdefs
    $::all_OSDefs{$munge} = \%OSDefs;

    return %OSDefs;

}

#--------------------------------------------------------------------------------

=head3    get_osdefs_files

        Determine which definition files need to be loaded and load them.

        Arguments:
                $class,
                $osname,
                $distro_name,
                $distro_version,
                $hw_arch,
                $csm_version
        Returns:
                Array of defintion file names
        Globals:
                none
        Error:
                undefined
        Example:
                 ServerUtils->get_osdefs_files($osname,
                                                $distro_name,
                                                $distro_version,
                                                $hw_arch,
                                                $csm_version);
        Comments:
                Search order on Linux
                        Linux-RedHat7.3-i386.pm, Linux-RedHat7.3.pm,
                        Linux-RedHat.pm, Linux.pm
                Search order on AIX:
                        AIX-5.2.pm, AIX.pm

                Search for the files in either <pwd>/defs or $OSDEFS

=cut

#--------------------------------------------------------------------------------

sub get_osdefs_files
{
    my ($class, $osname, $distro_name, $distro_version, $hw_arch, $csm_version,)
      = @_;

    my $isAIX = ($osname eq "AIX");

    # Set these global variables to load the correct values from osdefs.
    $::csm_version = $csm_version;

    my $distro   = "${distro_name}${distro_version}";
    my $osdistro = "${osname}-${distro}";

    my @defsfiles;
    push(@defsfiles, "${osdistro}-${hw_arch}.pm") if (${hw_arch});
    push(@defsfiles, "${osdistro}.0-${hw_arch}.pm") if (${hw_arch} and $isAIX);
    push(@defsfiles, "${osdistro}.pm");
    push(@defsfiles, "${osdistro}.0.pm") if ($isAIX);
    push(@defsfiles, "${osname}-${distro_name}.pm") if (${distro_name});
    push(@defsfiles, "${osname}.pm");

    my $progdir = dirname($0);

    foreach 