Subversion Repositories DevTools

Rev

Rev 6267 | Rev 6548 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5670 dpurdie 1
<% @LANGUAGE = VBScript %>
5623 dpurdie 2
<%
3
'=====================================================
4
'
5
'  Build Status and Plan Information
6
'
7
'=====================================================
8
%>
9
<%
10
Option explicit
11
' Good idea to set when using redirect
12
Response.Expires = 0  ' always load the page, dont store
13
%>
14
<!--#include file="common/conf.asp"-->
15
<!--#include file="common/globals.asp"-->
16
<!--#include file="common/formating.asp"-->
17
<!--#include file="common/qstr.asp"-->
18
<!--#include file="common/common_subs.asp"-->
19
<!--#include file="common/_form_window_common.asp"-->
20
<!--#include file="_action_buttons.asp"-->
21
<!--#include file="class/classActionButtonControl.asp"-->
22
<!--#include file="common/daemon_instructions.asp"-->
6166 dpurdie 23
<!--#include file="common/common_daemon.asp"-->
6048 dpurdie 24
<% '------------ ACCESS CONTROL ------------------ %>
6181 dpurdie 25
<!--#include file="_access_control_login_optional.asp"-->
6070 dpurdie 26
<!--#include file="_access_control_general.asp"-->
6052 dpurdie 27
<!--#include file="_access_control_action_project.asp"-->
5623 dpurdie 28
<% '------------ Scripts -------------------------- %>
29
<%
30
'------------ Variable Definition -------------
31
Dim objSortHelper
32
Dim rsQry
33
Dim parRtagId
34
Dim query_string
35
Dim rcon_id
36
Dim rsQry2
37
'------------ Constants Declaration -----------
38
'------------ Variable Init -------------------
39
parRtagId = Request("rtag_id")
40
objPMod.PersistInQryString("rtag_id")
41
 
42
'----------------------------------------------
43
%>
44
<html>
45
   <head>
46
      <title>Release Manager</title>
47
      <link rel="shortcut icon" href="<%=FavIcon%>"/>
48
      <meta http-equiv="Pragma" content="no-cache">
49
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
50
      <link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
51
      <link rel="stylesheet" href="images/navigation.css" type="text/css">
52
      <script language="JavaScript" src="images/common.js"></script>
53
      <!--#include file="_jquery_includes.asp"-->
54
      <!-- TIPS -->
55
      <script type="text/javascript" src="scripts/json2.js"></script>
56
      <script language="JavaScript" src="images/tipster.js"></script>
57
      <script language="JavaScript" src="images/_help_tips.js"></script>
58
      <script language="JavaScript" type="text/JavaScript">
59
      formTips.tips.h_buildplan       = stdTip(300, 'Build Plan', 'The build plan is a guess as to the order in which packages will be built.' +
60
                                                                  '<p>It will be recalculated before each build.' + 
61
                                                                  '<p>The plan includes test builds, new builds and resultant ripples.' 
62
                                                                  );
5670 dpurdie 63
      formTips.tips.h_buildDuration    = stdTip(300, 'Planned Duration', 'The build duration (seconds) of the last build of this package - if known.' +
5635 dpurdie 64
                                                                  '<p>This is used as a guess as to the duration of the planned build.' 
65
                                                                  );
5670 dpurdie 66
      formTips.tips.h_buildEnd         = stdTip(300, 'Planned Completion', 'An educated guess as to the build completion time of the package.' +
67
                                                                  '<p>It is based on the start time of the current build and the durations of each preceeding builds.' + 
68
                                                                  '<p>If the duration of a build is not known then a time of 300 seconds will be assumed.' +
69
                                                                  ' It also assumes 20 seconds to plan the next build.'
70
                                                                  );
5623 dpurdie 71
      formTips.tips.h_lastchange       = stdTip(300, 'Last Change', 'This is an indication of the time since the daemon interogated the database.' +
72
                                                                  '<p>Short times will be shown as seconds. Longer times will be shown as a time within ' + 
73
                                                                  'the last 24 hours. Longer times will be shown as a date.' 
74
                                                                  );
75
 
76
      </script>
77
      <!-- DROPDOWN MENUS -->
78
      <!--#include file="_menu_def.asp"-->
79
      <script language="JavaScript1.2" src="images/popup_menu.js"></script>
80
   </head>
81
   <body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" >
82
      <!-- HEADER -->
83
      <!--#include file="_header.asp"-->
84
      <!-- BODY ---->
85
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
86
         <tr>
6175 dpurdie 87
            <td width="146px" class="panel_bg" valign="top"><%Call BuildMenuPane%></td>
5623 dpurdie 88
            <td width="100%" rowspan="2" align="center" valign="top" bgcolor="#EEEFEF">
89
               <table width="10" border="0" cellspacing="0" cellpadding="0">
90
                  <tr>
91
                     <td width="1%"></td>
92
                     <td width="100%">
93
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
94
                           <tr>
95
                              <td nowrap class="form_ttl"><p>&nbsp;</p>
96
                                 <p>DAEMON STATUS INFORMATION</p>
97
                              </td>
98
                              <td  valign="bottom" class="body_rowg">
99
                                Last Build: <%=GetLastBuildAge(parRtagId)%> [<%=GetModifiedSeqNo(parRtagId)%>]
100
                              </td>
101
                              <td align="right" valign="bottom">
102
                                <a class="txt_linked" href="<%=scriptName%>?rtag_id=<%=parRtagId%>" title="Refresh Page">[Refresh]</a></td>
103
                              </td>
104
                           </tr>
105
                        </table>
106
                     </td>
107
                     <td width="1%"></td>
108
                  </tr>
109
                  <tr>
110
                     <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
111
                     <td background="images/lbox_bg_blue.gif" class="lbox_ttl_w"><img src="images/h_trsp_dot.gif" width="600" height="15"></td>
112
                     <td align="right" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
113
                  </tr>
114
                  <tr>
115
                     <td bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
116
                     <td bgcolor="#FFFFFF" valign="top">
117
                        <!-- MESSAGE +++++++++++++++++++++++++++++++++++++++++++++++++++ -->
118
                        <!--#include file="messages/_msg_inline.asp"-->
119
                        <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
120
                        <br>
121
                        <table width="100%" border="0" cellspacing="2" cellpadding="0">
122
                           <%
6267 dpurdie 123
                           Dim bInactiveMachine : bInactiveMachine = false
124
                           Dim indefinitelyPaused : indefinitelyPaused = Indefinitely_Paused()
5623 dpurdie 125
                           ' Insert a warning into the page if the build daemons are indefintely paused.
6166 dpurdie 126
                           If indefinitelyPaused Then %>
5623 dpurdie 127
                              <tr>
128
                                 <span class='err_alert'>
129
                                    <font size='2'><b>WARNING: Build Daemons are all stopped - please contact an administrator</b></font>
130
                                 </span>
131
                              </tr>
132
                           <%End If
133
                           %>
134
                           <td width="9%" valign="top"></td>
135
                           <tr>
136
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Daemon Host</td>
137
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Machine Type</td>
138
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Mode</td>
139
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Run Level</td>
140
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Current Package</td>
141
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Last Change<%=Quick_Help("h_lastchange")%></td>
142
                              <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Control State</td>
143
                           </tr>
144
                           <%
145
                           ' Get the number of release configurations for this RTAG_ID, and iterate through them
6267 dpurdie 146
                           query_string = " select rc.rcon_id, display_name, gbe_value, daemon_mode, NVL(ACTIVE, 'U') as ACTIVE" &_
147
                                          " from release_config rc, gbe_machtype gm, build_machine_config bm"&_
5623 dpurdie 148
                                          "  where rc.rtag_id = "& parRtagId &_
149
                                          "    and gm.gbe_id = rc.gbe_id"&_
150
                                          "    and rc.bmcon_id=bm.bmcon_id(+)" &_
151
                                          "  order by bm.display_name, rc.rcon_id"
152
 
153
                           Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
154
 
155
                           Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
156
                              rcon_id = rsQry("rcon_id")
157
 
158
                              Dim pkgName
159
                              Dim pkgPvid
160
                              Dim currentRunLevel
161
                              Dim daemonState
162
                              Dim delta
163
                              Dim pkgId
6267 dpurdie 164
                              Dim bActive : bActive = rsQry("active")
6268 dpurdie 165
                              If bActive = "N" Then bInactiveMachine = true
5623 dpurdie 166
 
167
                              ' For this release configuration, get its entry from the run_level table. This table may not
168
                              ' have an entry so we must handle that outcome too.
169
                              query_string = " select rl.pause, rl.current_run_level, rl.current_pkg_id_being_built, "&_
170
                                             "        TRUNC (86400*(SYSDATE - rl.KEEP_ALIVE)) as delta" &_
171
                                             "   from run_level rl"&_
172
                                             "  where rl.rcon_id = "& rcon_id
173
 
174
                              Set rsQry2 = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
175
 
176
                              currentRunLevel = -1
177
                              pkgId = Null
178
                              pkgName = NULL
179
                              pkgPvid = NULL
180
                              daemonState = 0
181
                              delta = NULL
182
 
183
                              If (rsQry2.RecordCount > 0) Then
184
                                ' Get the run level from the run_level table
185
                                currentRunLevel = rsQry2("current_run_level")
186
                                pkgId = rsQry2("current_pkg_id_being_built")
187
 
188
                                daemonState = rsQry2("pause")
189
                                If IsNull(daemonState) Then daemonState = 0
190
                                If daemonState = "2" Then pkgId = Null
191
 
192
                                delta = rsQry2("delta")
6267 dpurdie 193
 
5623 dpurdie 194
                              End If
195
 
196
                              ' If we got an entry from the run_level table, try and use the pkg_id it contains, to obtain a
197
                              ' package name from the packages table
198
                              Dim rsQry3
199
                              If NOT IsNull(pkgId) Then
200
                                 query_string = " select pkg_name,rl.current_pv_id from run_level rl, packages pk"&_
201
                                                "  where rl.rcon_id = "& rcon_id &_
202
                                                "   and  rl.current_pkg_id_being_built = pk.pkg_id"
203
 
204
                                 Set rsQry3 = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )
205
                                 If (rsQry3.RecordCount > 0) Then
206
                                    pkgName = rsQry3("pkg_name")
207
                                    pkgPvid = rsQry3("current_pv_id")
208
                                 End If
209
                                 rsQry3.Close()
210
                                 Set rsQry3 = nothing
211
                              End If
212
 
213
                              ' --- Now render HTML for this release configuration ---
214
                              %>
215
                              <tr>
216
                                 <td colspan="7" background="images/bg_rep_line.gif"><img src="images/spacer.gif" width="1" height="1"></td>
217
                              </tr>
218
                              <tr>
219
                                 <td nowrap class="body_rowg"><%=rsQry("display_name")%></td>
220
                                 <td nowrap class="body_rowg"><%=rsQry("gbe_value")%></td>
221
                                 <td nowrap class="body_rowg"><%=Get_Daemon_Mode(rsQry("daemon_mode"))%></td>
6267 dpurdie 222
                                 <td nowrap class="body_rowg"><%=Get_Run_Level(currentRunLevel, indefinitelyPaused, daemonState, bActive)%></td>
223
                                 <td nowrap class="body_rowg"><%=Get_Package_Name(pkgName,parRtagId,pkgPvid, bActive)%></td>
5623 dpurdie 224
                                 <td nowrap class="body_rowg"><%=PrettyDelta(delta, daemonState,pkgName )%></td>
225
                                 <td nowrap class="body_rowg">
226
                                    <%
227
                                    If (rsQry2.RecordCount > 0) AND NOT indefinitelyPaused  Then
6166 dpurdie 228
                                       If canActionControlInProject("BuildControl") Then
6267 dpurdie 229
                                          If bActive = "U" Then
230
                                          ElseIf bActive = "N" Then
231
                                             Call Action_Buttons ( "Daemon Unavailable" )
232
                                          ElseIf daemonState = 0 Then
5623 dpurdie 233
                                             Call Action_Buttons ( "Daemon Pause" )
234
                                          ElseIf daemonState = 1 Then
235
                                             Call Action_Buttons ( "Daemon Resume" )
236
                                          ElseIf daemonState = 2 Then
237
                                             Call Action_Buttons ( "Daemon Start" )
238
                                          Else
239
                                             Call Action_Buttons ( "Daemon Resume" )
240
                                          End If
241
                                       Else
6267 dpurdie 242
                                          If bActive = "U" Then
243
                                          ElseIf bActive = "N" Then
244
                                             Call Action_Buttons ( "Daemon Unavailable" )
245
                                          ElseIf daemonState = 0 Then
5623 dpurdie 246
                                             Call Action_Buttons ( "Daemon Pause Disabled" )
247
                                          ElseIf daemonState = 1 Then
248
                                             Call Action_Buttons ( "Daemon Resume Disabled" )
249
                                          ElseIf daemonState = 2 Then
250
                                             Call Action_Buttons ( "Daemon Start Disabled" )
251
                                          Else
252
                                             Call Action_Buttons ( "Daemon Resume Disabled" )
253
                                          End If
254
                                       End If
255
                                    Else
256
                                       %>Unavailable<%
257
                                    End If
258
                                    %>
259
                                 </td>
260
                              </tr>
261
                              <%
262
                              rsQry2.Close()
263
                              Set rsQry2 = nothing
264
                              rsQry.MoveNext
265
                           Loop
266
                           %>
267
                           <tr>
6166 dpurdie 268
                             <td nowrap background="images/bg_table_col.gif" class="body_col" colspan=6>
6267 dpurdie 269
                             <%If CheckConfigErrors(parRtagId) OR bInactiveMachine Then%><span class="err_alert">&nbsp;Daemon configuration errors detected</span>
6166 dpurdie 270
                                <a class="txt_linked" href="release_config.asp?rtag_id=<%=parRtagId%>">
271
                                    <img src="images/i_link.gif" hspace="2" border="0" align="absmiddle" title="Goto Configuration">
272
                                </a>
273
                             <%End If%>
274
                             </td>
5623 dpurdie 275
                             <td valign="bottom" nowrap background="images/bg_table_col.gif" class="body_col">
276
                             <%
277
                               If (rsQry.RecordCount > 0) AND NOT indefinitelyPaused  Then
278
                                 If objAccessControl.UserLogedIn AND canActionControlInProject("BuildControl") Then
279
                                   Call Action_Buttons ( "Daemon Control All" )
280
                                 Else 
281
                                   Call Action_Buttons ( "Daemon Control All Disabled" )
282
                                 End If
283
                               Else
284
                                 %>&nbsp<%
285
                               End If
286
                             %>
287
                             </td>
288
                           </tr>
289
                           <%
290
                             rsQry.Close()
291
                             Set rsQry = nothing
292
                           %>
293
                        </table>
294
                     </td>
295
                     <td background="images/lbox_bgside_white.gif">&nbsp;</td>
296
                  </tr>
297
                  <tr>
298
                     <input type="hidden" name="action" value="true">
299
                     <%=objPMod.ComposeHiddenTags()%>
300
                     <td background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
301
                     <td background="images/lbox_bg_blue.gif"></td>
302
                     <td background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
303
                  </tr>
304
               </table>
305
 
306
               <!-- Planned Builds Display -->
5670 dpurdie 307
               <%
308
               Set rsQry = OraDatabase.DbCreateDynaset( "SELECT TRUNC (86400*(SYSDATE - rl.LAST_BUILD)) as delta, rl.LAST_BUILD as BuildStart, rl.current_pv_id, SYSDATE" &_
309
                                                        " FROM release_config rc,  run_level rl " &_
310
                                                        " WHERE rc.rtag_id   = " & parRtagId &_
311
                                                        " AND rc.daemon_mode = 'M' AND rl.rcon_id = rc.rcon_id", ORADYN_DEFAULT )
312
               Dim BuildStart
313
               Dim BuildDelta
314
               Dim BuildPvId
315
               Dim BuildNow
316
               If (rsQry.RecordCount > 0) Then
317
                    BuildStart = rsQry("BuildStart")
318
                    BuildDelta = rsQry("delta")
319
                    BuildPvId  = rsQry("current_pv_id")
320
                    BuildNow  = rsQry("SYSDATE")
321
               End If
322
               rsQry.Close()
323
               Set rsQry = nothing
324
               %>
5623 dpurdie 325
               <table width="10" border="0" cellspacing="0" cellpadding="0">
326
                  <tr>
327
                     <td width="1%"></td>
328
                     <td width="100%">
329
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
330
                           <tr>
331
                              <td nowrap class="form_ttl"><p>&nbsp;</p>
332
                                 <p>DAEMON BUILD PLAN<%=Quick_Help("h_buildplan")%></p>
333
                              </td>
5670 dpurdie 334
                              <td  valign="bottom" class="body_rowg">
335
                                Now: <%=DisplayShortDateTimeSecs(BuildNow)%>
336
                              </td>
5623 dpurdie 337
                              <td align="right" valign="bottom"></td>
338
                           </tr>
339
                        </table>
340
                     </td>
341
                     <td width="1%"></td>
342
                  </tr>
343
                  <tr>
344
                     <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
345
                     <td background="images/lbox_bg_blue.gif" class="lbox_ttl_w"><img src="images/h_trsp_dot.gif" width="600" height="15"></td>
346
                     <td align="right" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
347
                  </tr>
348
                  <tr>
349
                     <td bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" ></td>
350
                     <td bgcolor="#FFFFFF" valign="top">
351
                        <table width="100%" border="0" cellspacing="2" cellpadding="0">
352
                           <tr>
353
                              <td align="left" nowrap background="images/bg_table_col.gif" class="body_col">Package</td>
354
                              <td align="left" nowrap background="images/bg_table_col.gif" class="body_col">Version</td>
5635 dpurdie 355
                              <td align="left" nowrap background="images/bg_table_col.gif" class="body_col">Duration<%=Quick_Help("h_buildDuration")%></td>
5670 dpurdie 356
                              <td align="left" nowrap background="images/bg_table_col.gif" class="body_col">Build Completion<%=Quick_Help("h_buildEnd")%></td>
5623 dpurdie 357
                           </tr>
358
                           <%
5670 dpurdie 359
                           Dim PkgVersion, buildDuration, durationDisplay, durationText, completionText
5623 dpurdie 360
                           Set rsQry = OraDatabase.DbCreateDynaset( "SELECT p.PKG_NAME," &_
5635 dpurdie 361
                                                                    "  pv.PKG_VERSION, pv.BUILD_TIME," &_
5623 dpurdie 362
                                                                    "  bp.PV_ID" &_
363
                                                                    " FROM build_plan bp," &_
364
                                                                    "  packages p," &_
365
                                                                    "  package_versions pv" &_
366
                                                                    " WHERE bp.PV_ID = pv.pv_id" &_
367
                                                                    " AND RTAG_ID = " & parRtagId &_
368
                                                                    " AND pv.PKG_ID  = p.pkg_id" &_
369
                                                                    " ORDER BY build_order" , ORADYN_DEFAULT )
370
                           While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
5670 dpurdie 371
                               completionText = ""
372
                               buildDuration = rsQry("BUILD_TIME")
373
                               durationDisplay = buildDuration
374
 
375
                               ' If the current package build it taking longer than expected , then bump the build times
376
                               ' and allow another 30 seconds.
377
                               If BuildPvId = rsQry("PV_ID") Then
378
                                   completionText = "&nbsp;<"
379
                                   durationDisplay = durationDisplay & " ["& BuildDelta &"]"
380
                                   If BuildDelta > buildDuration Then
381
                                        buildDuration = BuildDelta + 30
382
                                        completionText = "&nbsp;+"
383
                                   End If
384
                               End If
385
 
386
                               ' If the duration is not known - guess at 300 sconds
387
                               durationText = ""
388
                               If ISNULL(buildDuration)  OR buildDuration = 0 Then
389
                                    buildDuration = 300
390
                                    durationText = "&nbsp;~"
391
                              End If
392
 
393
                              BuildStart = DateAdd("s", buildDuration, BuildStart)
5623 dpurdie 394
                              %>
395
                              <tr>
396
 
397
                                 <td align="left" valign="top" class="body_txt">
6268 dpurdie 398
                                    <%=Get_Package_Name(rsQry("PKG_NAME"), parRtagId, rsQry("PV_ID"), "Y")%>
5623 dpurdie 399
                                 </td>
400
                                 <td align="left" valign="top" class="body_txt">
401
                                    <%=rsQry("PKG_VERSION")%>
402
                                 </td>
5635 dpurdie 403
                                 <td align="left" valign="top" class="body_txt">
5670 dpurdie 404
                                    <%=durationDisplay%>
5635 dpurdie 405
                                 </td>
5670 dpurdie 406
                                 <td align="left" valign="top" class="body_txt">
407
                                    <%=DisplayShortDateTimeSecs(BuildStart) & durationText  & completionText%>
408
                                 </td>
5623 dpurdie 409
                              </tr>
410
                              <tr>
411
                                 <td colspan="6" background="images/bg_rep_line.gif"><img src="images/spacer.gif" width="1" height="1"></td>
412
                              </tr>
413
                              <%
5670 dpurdie 414
                              ' Allow for 20 seconds of planning between builds
415
                              BuildStart = DateAdd("s", 20, BuildStart)
5623 dpurdie 416
                              rsQry.MoveNext()
417
                           Wend
418
                           rsQry.Close()
419
                           Set rsQry = nothing
420
                           %>
421
                        </table>
422
                     </td>
423
                     <td background="images/lbox_bgside_white.gif">&nbsp;</td>
424
                  </tr>
425
                  <tr>
426
                     <td background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
427
                     <td background="images/lbox_bg_blue.gif"></td>
428
                     <td background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
429
                  </tr>
430
               </table>
431
 
432
            </td>
433
            <td width="1" valign="top"><img src="images/h_trsp_dot.gif" width="1" height="1"></td>
434
         </tr>
435
         <tr>
436
            <td valign="bottom" align="center" background="images/bg_home_orange.gif">
437
                <img src="images/img_gear.gif" width="86" height="99" vspace="20" hspace="30">
438
            </td>
439
            <td background="images/bg_lght_gray.gif" valign="top"><img src="images/h_trsp_dot.gif" width="1" height="350">
440
            </td>
441
         </tr>
442
      </table>
443
      <!-- FOOTER -->
444
      <!--#include file="_footer.asp"-->
445
   </body>
446
</html>