Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

488 lines
22 KiB

  1. <html>
  2. <head>
  3. <title>Remote Desktop Web Connection</title>
  4. <style type="text/css" media="screen">
  5. p { color:"#000000"; font-family: "Verdana, Arial, Helvetica"; font-size:"65%"}
  6. h1 { font-size: 100%; font-family: verdana, arial, helvetica; font-weight: bold;
  7. margin-top: 0em;}
  8. p.indent { margin-left: 3em; margin-top: .5em; line-height: 1.25em; margin-bottom: .2em; margin-right: 1em;}
  9. .button {
  10. FONT-FAMILY: Verdana, Helvetica, Arial, San-Serif;
  11. font-weight:normal;
  12. font-size:70%;
  13. color:#000000;
  14. background-color:#ffffff;
  15. border-color:#6699ff;
  16. margin-top:6pt;
  17. margin-left: .5em;
  18. }
  19. .topspace {margin-top: .08em; }
  20. </style>
  21. </head>
  22. <body bgcolor="#ffffff">
  23. <script language="vbscript">
  24. <!--
  25. const L_FullScreenWarn1_Text = "Your current security settings do not allow automatically switching to fullscreen mode."
  26. const L_FullScreenWarn2_Text = "You can use ctrl-alt-pause to toggle your remote desktop session to fullscreen mode"
  27. const L_FullScreenTitle_Text = "Remote Desktop Web Connection "
  28. const L_ErrMsg_Text = "Error connecting to remote computer: "
  29. const L_PlatformCheck_ErrorMessage = "The Remote Desktop Web connection ActiveX control can only run in the 32-bit version of Internet Explorer."
  30. ' error messages
  31. const L_RemoteDesktopCaption_ErrorMessage = "Remote Desktop Connection"
  32. const L_DisconnectedCaption_ErrorMessage = "Remote Desktop Disconnected"
  33. const L_ErrConnectCallFailed_ErrorMessage = "An error occurred when the client attempted to connect to the remote computer. Check your system memory and then try the connection again."
  34. const L_DisconnectRemoteByServer_ErrorMessage = "The remote computer has ended the connection."
  35. const L_LowMemory_ErrorMessage = "The local computer is low on memory. Close some programs, and then connect to the remote computer again."
  36. const L_SecurityErr_ErrorMessage = "Because of a security error, the client could not connect to the remote computer. Verify that you are logged on to the network, and then try connecting again."
  37. const L_BadServerName_ErrorMessage = "The specified remote computer could not be found. Verify that you have typed the correct computer name or IP address, and then try connecting again."
  38. const L_ConnectFailedProtocol_ErrorMessage = "Because of a protocol error, the client could not connect to the remote computer. Please try connecting to the remote computer again. If the client still fails to connect, contact your network administrator."
  39. const L_CannotLoopBackConnect_ErrorMessage = "The client could not connect. You cannot connect to the console from a console session of the same computer."
  40. const L_NetworkErr_ErrorMessage = "The connection was ended because of a network error. Please try connecting to the remote computer again."
  41. const L_InternalErr_ErrorMessage = "An internal error has occurred."
  42. const L_NotResponding_ErrorMessage = "The client could not connect to the remote computer. Remote connections might not be enabled or the computer might be too busy to accept new connections.It is also possible that network problems are preventing your connection.Please try connecting again later. If the problem continues to occur, contact your administrator."
  43. const L_VersionMismatch_ErrorMessage = "Client and server versions do not match. Please upgrade your client software and then try connecting again."
  44. const L_EncryptionError_ErrorMessage = "Because of an error in data encryption, this session will end. Please try connecting to the remote computer again."
  45. const L_ProtocolErr_ErrorMessage = "Because of a protocol error, this session will be disconnected. Please try connecting to the remote computer again."
  46. const L_IllegalServerName_ErrorMessage = "The specified computer name contains invalid characters. Please verify the name and try again."
  47. const L_ConnectionTimeout_ErrorMessage = "The remote connection has timed out. Please try connecting to the remote computer again."
  48. const L_DisconnectIdleTimeout_ErrorMessage = "The remote session was ended because the idle timeout limit was reached. This limit is set by the server administrator or by network policies."
  49. const L_DisconnectLogonTimeout_ErrorMessage ="The remote session ended because the total logon time limit was reached. This limit is set by the server administrator or by network policies."
  50. const L_ProtocolErrWITHCODE_ErrorMessage = "Client disconnected due to internal protocol error: "
  51. const L_LicensingTimeout_ErrorMessage = "A licensing error occurred while the client was attempting to connect (Licensing timed out).Please try connecting to the remote computer again."
  52. const L_LicensingNegotFailed_ErrorMessage = "The remote computer disconnected the session because of an error in the licensing protocol.Please try connecting to the remote computer again or contact your server administrator."
  53. const L_DisconnectRemoteByServerTool_ErrorMessage = "The remote session to the remote computer was ended by means of an administration tool.Your administrator might have ended your connection."
  54. const L_LogoffRemoteByServer_ErrorMessage = "The remote session was disconnected because your session was logged off at the remote computer.Your administrator or another user might have ended your connection."
  55. const L_DisconnectByOtherConnection_ErrorMessage = "The remote session was disconnected because another user has connected to the session."
  56. const L_ConnectionBroken_ErrorMessage = "The connection to the remote computer was broken. This may have been caused by a network error.Please try connecting to the remote computer again."
  57. const L_ServerOutOfMemory_ErrorMessage = "The connection was disconnected because the remote computer is low on memory."
  58. const L_LicenseInternal_ErrorMessage = "The remote session was disconnected because there was an internal error in the remote computer's licensing protocol."
  59. const L_NoLicenseServer_ErrorMessage = "The remote session was disconnected because there are no Terminal Server License Servers available to provide a license.Please contact the server administrator."
  60. const L_NoLicense_ErrorMessage = "The remote session was disconnected because there are no Terminal Server client access licenses available for this computer.Please contact the server administrator."
  61. const L_LicenseBadClientMsg_ErrorMessage = "The remote session was disconnected because the remote computer received an invalid licensing message from this computer."
  62. const L_LicenseHwidDoesntMatch_ErrorMessage = "The remote session was disconnected because the Terminal Server client access license stored on this computer has been modified."
  63. const L_BadClientLicense_ErrorMessage = "The remote session was disconnected because the Terminal Server client access license stored on this computer is in an invalid format."
  64. const L_LicenseCantFinishProtocol_ErrorMessage = "The remote session was disconnected because there were network problems during the licensing protocol.Please try connecting to the remote computer again."
  65. const L_LicenseClientEndedProtocol_ErrorMessage = "The remote session was disconnected because the client prematurely ended the licensing protocol."
  66. const L_LicenseBadClientEncryption_ErrorMessage = "The remote session was disconnected because a licensing message was incorrectly encrypted."
  67. const L_CantUpgradeLicense_ErrorMessage = "The remote session was disconnected because the local computer's client access license could not be upgraded or renewed.Please contact the server administrator."
  68. const L_LicenseNoRemoteConnections_ErrorMessage = "The remote session was disconnected because the remote computer is not licensed to accept remote connections.Please contact the server administrator."
  69. const L_DecompressionFailed_ErrorMessage = "The remote session was disconnected because of a decompression failure at the client side. Please try connecting to the remote computer again."
  70. const L_ServerDeniedConnection_ErrorMessage ="The client could not establish a connection to the remote computer.The most likely causes for this error are:1) Remote connections might not be enabled at the remote computer.2) The maximum number of connections was exceeded at the remote computer.3) A network error occurred while establishing the connection."
  71. const L_ControlLoadFailed_ErrorMessage= "Remote Desktop Web Connection ActiveX control could not be installed. A connection cannot be made without a working installed version of the control. Please contact the server administrator."
  72. const L_InvalidServerName_ErrorMessage = "An invalid server name was specified."
  73. sub window_onload()
  74. if not LCase(Navigator.CpuClass) = "x86" then
  75. msgbox L_PlatformCheck_ErrorMessage
  76. end if
  77. if not autoConnect() then
  78. Document.all.editServer.Focus
  79. end if
  80. end sub
  81. function autoConnect()
  82. Dim sServer
  83. Dim iFS, iAutoConnect
  84. sServer = getQS ("Server")
  85. iAutoConnect = getQS ("AutoConnect")
  86. iFS = getQS ("FS")
  87. if NOT IsNumeric ( iFS ) then
  88. iFS = 0
  89. else
  90. iFS = CInt ( iFS )
  91. end if
  92. if iAutoConnect <> 1 then
  93. autoConnect = false
  94. exit function
  95. else
  96. if iFS < 0 or iFS >= Document.all.comboResolution.options.length then
  97. iFS = 0
  98. end if
  99. if IsNull ( sServer ) or sServer = "" then
  100. sServer = window.location.hostname
  101. end if
  102. Document.all.comboResolution.selectedIndex = iFS
  103. Document.all.Server.value = sServer
  104. btnConnect ()
  105. autoConnect = true
  106. end if
  107. end function
  108. function getQS ( sKey )
  109. Dim iKeyPos, iDelimPos, iEndPos
  110. Dim sURL, sRetVal
  111. iKeyPos = iDelimPos = iEndPos = 0
  112. sURL = window.location.href
  113. if sKey = "" Or Len(sKey) < 1 then
  114. getQS = ""
  115. exit function
  116. end if
  117. iKeyPos = InStr ( 1, sURL, sKey )
  118. if iKeyPos = 0 then
  119. sRetVal = ""
  120. exit function
  121. end if
  122. iDelimPos = InStr ( iKeyPos, sURL, "=" )
  123. iEndPos = InStr ( iDelimPos, sURL, "&" )
  124. if iEndPos = 0 then
  125. sRetVal = Mid ( sURL, iDelimPos + 1 )
  126. else
  127. sRetVal = Mid ( sURL, iDelimPos + 1, iEndPos - iDelimPos - 1 )
  128. end if
  129. getQS = sRetVal
  130. end function
  131. sub checkClick
  132. if Document.all.Check1.Checked then
  133. Document.all.tableLogonInfo.style.display = ""
  134. Document.all.editUserName.Disabled = false
  135. Document.all.editDomain.Disabled = false
  136. else
  137. Document.all.tableLogonInfo.style.display = "none"
  138. Document.all.editUserName.Disabled = true
  139. Document.all.editDomain.Disabled = true
  140. end if
  141. end sub
  142. sub OnControlLoadError
  143. msgbox L_ControlLoadFailed_ErrorMessage,0,L_RemoteDesktopCaption_ErrorMessage
  144. end sub
  145. sub OnControlLoad
  146. set Control = Document.getElementById("MsRdpClient")
  147. if Not Control is Nothing then
  148. if Control.readyState = 4 then
  149. Document.all.connectButton.disabled = FALSE
  150. end if
  151. end if
  152. end sub
  153. sub BtnConnect
  154. Dim serverName
  155. 'server
  156. if not Document.all.Server.value = "" then
  157. serverName = Document.all.Server.value
  158. else
  159. serverName = Document.location.hostname
  160. end if
  161. serverName = trim(serverName)
  162. On Error Resume Next
  163. MsRdpClient.server = serverName
  164. If Err then
  165. msgbox L_InvalidServerName_ErrorMessage,0,L_RemoteDesktopCaption_ErrorMessage
  166. Err.Clear
  167. exit sub
  168. end if
  169. On Error Goto 0
  170. 'serverName name text
  171. Document.all.srvNameField.innerHtml = serverName
  172. 'Username/Domain
  173. if Document.all.CheckBoxAutoLogon.checked then
  174. MsRdpClient.UserName = Document.all.UserName.Value
  175. MsRdpClient.Domain = Document.all.Domain.Value
  176. end if
  177. 'Resolution
  178. MsRdpClient.FullScreen = FALSE
  179. select case document.all.comboResolution.value
  180. case "1"
  181. MsRdpClient.FullScreen = TRUE
  182. resWidth = screen.width
  183. resHeight = screen.height
  184. case "2"
  185. resWidth = "640"
  186. resHeight = "480"
  187. case "3"
  188. resWidth = "800"
  189. resHeight = "600"
  190. case "4"
  191. resWidth = "1024"
  192. resHeight = "768"
  193. case "5"
  194. resWidth = "1280"
  195. resHeight = "1024"
  196. case "6"
  197. resWidth = "1600"
  198. resHeight = "1200"
  199. end select
  200. MsRdpClient.DesktopWidth = resWidth
  201. MsRdpClient.DesktopHeight = resHeight
  202. MsRdpClient.Width = resWidth
  203. MsRdpClient.Height = resHeight
  204. 'Device redirection options
  205. MsRdpClient.AdvancedSettings2.RedirectDrives = FALSE
  206. MsRdpClient.AdvancedSettings2.RedirectPrinters = TRUE
  207. MsRdpClient.AdvancedSettings2.RedirectPorts = FALSE
  208. MsRdpClient.AdvancedSettings2.RedirectSmartCards = FALSE
  209. 'FullScreen title
  210. MsRdpClient.FullScreenTitle = L_FullScreenTitle_Text & "(" & serverName & ")"
  211. 'Display connect region
  212. Document.all.loginArea.style.display = "none"
  213. Document.all.connectArea.style.display = "block"
  214. 'Connect
  215. MsRdpClient.Connect
  216. end sub
  217. -->
  218. </script>
  219. <!--
  220. -->
  221. <!-- =========================LOGIN AREA ==========================
  222. -->
  223. <div id=loginArea>
  224. <font size="4">
  225. <img border="0" src="win2000l.gif" id=leftalign align="left" width="124" height="123" hspace="10"></font></font><font id=Tahoma1 face="Tahoma" size="1"><br>
  226. </font><font size="6" id=Tahoma2 face="Tahoma">
  227. <img border="0" src="win2000r.gif" hspace="0" vspace="7" width="145" height="45"></font><font id=Tahoma3 face="Tahoma" size="4"><br>
  228. </font><b>
  229. <font id=Tahoma4 face="Tahoma" size="4"><ID id=bigtitle>Remote Desktop Web Connection </ID></font></b><p>&nbsp;</p>
  230. <table border="0" width="640" cellspacing="0" cellpadding=0 style="margin-top: -1em;">
  231. <!-- Graphic bar row -->
  232. <tr>
  233. <td width="50%"></td>
  234. <td colspan=3 align="left" valign="middle">
  235. <img src="bluebarh.gif" alt="blue bar graphic" width="325" height="8"></td>
  236. </tr>
  237. <!-- Row 1 -->
  238. <tr>
  239. <!-- Column 1 spans 4 rows -->
  240. <td valign="top" width="50% "rowspan=4>
  241. <p class=indent><ID id=remotecomputername>Type the name of the remote computer you want to use, select the screen size for your connection, and then click <b>Connect</b>.</ID></p>
  242. <p class=indent><ID id=helpfultip1>When the connection page opens, you can add it to your Favorites for easy connection to the same computer.</ID></p>
  243. </td>
  244. <!-- Column 2 spans 4 rows-->
  245. <td rowspan=4 valign="top" align="left">
  246. <img src="bluebarv.gif" alt="blue bar graphic" border=0 width="8" height="330">
  247. </td>
  248. <!-- Column 3 -->
  249. <td id="ServerNameKeyWidth" style="width:10%;" valign="middle">
  250. <label id=ServerNameKey accessKey="S" for="editServer">
  251. <br><p align="right">&nbsp;<ID id=ServerName><u>S</u>erver:</ID></label></p>
  252. </td>
  253. <!-- Column 4 -->
  254. <td id="ServerKeyWidth" width="40%" valign="bottom">
  255. <br>&nbsp;&nbsp;<input type="text" name="Server" size="41" id="editServer">
  256. </td>
  257. </tr>
  258. <!-- Row 2 -->
  259. <tr>
  260. <!-- Column 3 -->
  261. <td valign="middle">
  262. <p align="right"><label id=sizeKey accessKey="Z" for="comboRes" class="sizespace"><ID id=size>Si<u>z</u>e:</ID></p></td>
  263. <!-- Column 4 -->
  264. <td valign="bottom">&nbsp;&nbsp;<select size="1" name="comboResolution" id=comboRes class="topspace">
  265. <option selected value="1"><ID id=option1>Full-screen</ID></option>
  266. <option value="2"><ID id=option2>640 by 480</ID></option>
  267. <option value="3"><ID id=option3>800 by 600</ID></option>
  268. <option value="4"><ID id=option4>1024 by 768</ID></option>
  269. <option value="5"><ID id=option5>1280 by 1024</ID></option>
  270. <option value="6"><ID id=option6>1600 by 1200</ID></option>
  271. </select> </label>
  272. </td>
  273. </tr>
  274. <!-- Row 3 -->
  275. <tr>
  276. <!-- Column 3 -->
  277. <td></td>
  278. <!-- Column 4 -->
  279. <td align="bottom">
  280. <p class=topspace>&nbsp;<input type="checkbox" name="CheckBoxAutoLogon" ID=Check1 value="OFF" onclick = "checkClick"><label for="Check1" ID=SendLogonKey accesskey="l"><ID id=logoninfo>Send <u>l</u>ogon information for this connection&nbsp;</ID></label><br>
  281. <span ID="tableLogonInfo" style="display: none">
  282. <p align="right" class=topspace>
  283. <br>
  284. <ID id=usernamelabel><u>U</u>ser&nbsp;name:</ID>
  285. <label id=UserNameKey accessKey="U" for="editUserName"><input type="text" name="UserName" id=editUserName size="25"></label><br>
  286. <ID id=domainlabel><u>D</u>omain:</ID>
  287. <label id=editDomainKey accessKey="D" for="editDomain">
  288. <input type="text" name="Domain" id=editDomain size="25"></label></p></span>
  289. <input type="submit" id=connectbutton value="Connect" disabled="TRUE" name="ButtonLogin" OnClick=BtnConnect class="button">
  290. </td>
  291. </tr>
  292. <!-- Row 4 -->
  293. <tr>
  294. <!-- Column 3 -->
  295. <td height="215">&nbsp;</td>
  296. <!-- Column 4 -->
  297. <td>&nbsp;</td>
  298. </tr>
  299. </table>
  300. </div>
  301. <!-- ================================= LOGIN FORM =================
  302. -->
  303. <!-- ================================= CONNECT ====================
  304. -->
  305. <div id=connectArea style="display: none">
  306. <center>
  307. <table>
  308. <tr>
  309. <OBJECT language="vbscript" ID="MsRdpClient"
  310. onerror="OnControlLoadError"
  311. onreadystatechange="OnControlLoad"
  312. CLASSID="CLSID:7584c670-2274-4efb-b00b-d6aaba6d3850"
  313. CODEBASE="msrdp.cab#version=%NTVERSIONSTRING%"
  314. WIDTH=<% resWidth = Request.QueryString("rW")
  315. if resWidth < 200 or resWidth > 1600 then
  316. resWidth = 800
  317. end if
  318. Response.Write resWidth %>
  319. HEIGHT=<% resHeight = Request.QueryString("rH")
  320. if resHeight < 200 or resHeight > 1200 then
  321. resHeight = 600
  322. end if
  323. Response.Write resHeight %>>
  324. </OBJECT>
  325. </tr>
  326. <tr>
  327. <br>
  328. <font size="1" color="#000000" id="srvfontname" face="Verdana, Arial, Helvetica">
  329. <div id=connectDisplay style="display:none">
  330. <ID id=loggedinsrv>Connected to </ID><i><span id="srvNameField"></span></i></font><br></div>
  331. </tr>
  332. <script language="VBScript">
  333. <!--
  334. sub ReturnToConnectPage()
  335. Window.Navigate("Default.htm")
  336. end sub
  337. sub MsRdpClient_OnConnected()
  338. Document.All.connectDisplay.style.display = "block"
  339. end sub
  340. sub MsRdpClient_OnDisconnected(disconnectCode)
  341. extendedDiscReason = MsRdpClient.ExtendedDisconnectReason
  342. majorDiscReason = disconnectCode And &hFF
  343. if (disconnectCode = &hB08 or majorDiscReason = 2 or majorDiscReason = 1) and not (extendedDiscReason = 5) then
  344. 'Switch back to login area
  345. ReturnToConnectPage
  346. exit sub
  347. end if
  348. errMsgText = L_DisconnectRemoteByServer_ErrorMessage
  349. if not extendedDiscReason = 0 then
  350. 'Use the extended disconnect code
  351. select case extendedDiscReason
  352. case 0 errMsgText = ""
  353. case 1 errMsgText = L_DisconnectRemoteByServerTool_ErrorMessage
  354. case 2 errMsgText = L_LogoffRemoteByServer_ErrorMessage
  355. case 3 errMsgText = L_DisconnectIdleTimeout_ErrorMessage
  356. case 4 errMsgText = L_DisconnectLogonTimeout_ErrorMessage
  357. case 5 errMsgText = L_DisconnectByOtherConnection_ErrorMessage
  358. case 6 errMsgText = L_ServerOutOfMemory_ErrorMessage
  359. case 7 errMsgText = L_ServerDeniedConnection_ErrorMessage
  360. case 256 errMsgText = L_LicenseInternal_ErrorMessage
  361. case 257 errMsgText = L_NoLicenseServer_ErrorMessage
  362. case 258 errMsgText = L_NoLicense_ErrorMessage
  363. case 259 errMsgText = L_LicenseBadClientMsg_ErrorMessage
  364. case 260 errMsgText = L_LicenseHwidDoesntMatch_ErrorMessage
  365. case 261 errMsgText = L_BadClientLicense_ErrorMessage
  366. case 262 errMsgText = L_LicenseCantFinishProtocol_ErrorMessage
  367. case 263 errMsgText = L_LicenseClientEndedProtocol_ErrorMessage
  368. case 264 errMsgText = L_LicenseBadClientEncryption_ErrorMessage
  369. case 265 errMsgText = L_CantUpgradeLicense_ErrorMessage
  370. case 266 errMsgText = L_LicenseNoRemoteConnections_ErrorMessage
  371. case else errMsgText = L_ErrMsg_Text
  372. end select
  373. if extendedDiscReason > 4096 then
  374. errMsgText = L_ProtocolErrWITHCODE_ErrorMessage & errMsgText
  375. end if
  376. else
  377. ' no extended error information, use the disconnect code
  378. select case disconnectCode
  379. case 0 errMsgText = L_ErrMsg_Text
  380. case 1 errMsgText = L_ErrMsg_Text
  381. case 2 errMsgText = L_ErrMsg_Text
  382. case 260 errMsgText = L_BadServerName_ErrorMessage
  383. case 262 errMsgText = L_LowMemory_ErrorMessage
  384. case 264 errMsgText = L_ConnectionTimeout_ErrorMessage
  385. case 516 errMsgText = L_NotResponding_ErrorMessage
  386. case 518 errMsgText = L_LowMemory_ErrorMessage
  387. case 520 errMsgText = L_BadServerName_ErrorMessage
  388. case 772 errMsgText = L_NetworkErr_ErrorMessage
  389. case 774 errMsgText = L_LowMemory_ErrorMessage
  390. case 776 errMsgText = L_BadServerName_ErrorMessage
  391. case 1028 errMsgText = L_NetworkErr_ErrorMessage
  392. case 1030 errMsgText = L_SecurityErr_ErrorMessage
  393. case 1032 errMsgText = L_IllegalServerName_ErrorMessage
  394. case 1286 errMsgText = L_EncryptionError_ErrorMessage
  395. case 1288 errMsgText = L_BadServerName_ErrorMessage
  396. case 1540 errMsgText = L_BadServerName_ErrorMessage
  397. case 1542 errMsgText = L_SecurityErr_ErrorMessage
  398. case 1544 errMsgText = L_LowMemory_ErrorMessage
  399. case 1796 errMsgText = L_NotResponding_ErrorMessage
  400. case 1798 errMsgText = L_SecurityErr_ErrorMessage
  401. case 1800 errMsgText = L_CannotLoopBackConnect_ErrorMessage
  402. case 2052 errMsgText = L_BadServerName_ErrorMessage
  403. case 2056 errMsgText = L_LicensingNegotFailed_ErrorMessage
  404. case 2310 errMsgText = L_SecurityErr_ErrorMessage
  405. case 2566 errMsgText = L_SecurityErr_ErrorMessage
  406. case 2822 errMsgText = L_EncryptionError_ErrorMessage
  407. case 3078 errMsgText = L_EncryptionError_ErrorMessage
  408. case 3080 errMsgText = L_DecompressionFailed_ErrorMessage
  409. case 3334 errMsgText = L_ProtocolErr_ErrorMessage
  410. case 10500 errMsgText = L_ProtocolErr_ErrorMessage
  411. case else errMsgText = L_InternalErr_ErrorMessage
  412. end select
  413. end if
  414. msgbox errMsgText,0,L_DisconnectedCaption_ErrorMessage
  415. ReturnToConnectPage
  416. end sub
  417. -->
  418. </script>
  419. </table>
  420. </center>
  421. </div>
  422. </body>
  423. </html>