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.

752 lines
26 KiB

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation. All rights reserved.
  4. '
  5. ' Abstract:
  6. ' prnqctl.vbs - printer control script for WMI on Whistler
  7. ' used to pause, resume and purge a printer
  8. ' also used to print a test page on a printer
  9. '
  10. ' Usage:
  11. ' prnqctl [-zmex?] [-s server] [-p printer] [-u user name] [-w password]
  12. '
  13. ' Examples:
  14. ' prnqctl -m -s server -p printer
  15. ' prnqctl -x -s server -p printer
  16. ' prnqctl -e -b printer
  17. '----------------------------------------------------------------------
  18. option explicit
  19. '
  20. ' Debugging trace flags, to enable debug output trace message
  21. ' change gDebugFlag to true.
  22. '
  23. const kDebugTrace = 1
  24. const kDebugError = 2
  25. dim gDebugFlag
  26. gDebugFlag = false
  27. '
  28. ' Operation action values.
  29. '
  30. const kActionUnknown = 0
  31. const kActionPause = 1
  32. const kActionResume = 2
  33. const kActionPurge = 3
  34. const kActionTestPage = 4
  35. const kErrorSuccess = 0
  36. const KErrorFailure = 1
  37. const kNameSpace = "root\cimv2"
  38. '
  39. ' Generic strings
  40. '
  41. const L_Empty_Text = ""
  42. const L_Space_Text = " "
  43. const L_Error_Text = "Error"
  44. const L_Success_Text = "Success"
  45. const L_Failed_Text = "Failed"
  46. const L_Hex_Text = "0x"
  47. const L_Printer_Text = "Printer"
  48. const L_Operation_Text = "Operation"
  49. const L_Provider_Text = "Provider"
  50. const L_Description_Text = "Description"
  51. const L_Debug_Text = "Debug:"
  52. '
  53. ' General usage messages
  54. '
  55. const L_Help_Help_General01_Text = "Usage: prnqctl [-zmex?] [-s server][-p printer][-u user name][-w password]"
  56. const L_Help_Help_General02_Text = "Arguments:"
  57. const L_Help_Help_General03_Text = "-e - print test page"
  58. const L_Help_Help_General04_Text = "-m - resume the printer"
  59. const L_Help_Help_General05_Text = "-p - printer name"
  60. const L_Help_Help_General06_Text = "-s - server name"
  61. const L_Help_Help_General07_Text = "-u - user name"
  62. const L_Help_Help_General08_Text = "-w - password"
  63. const L_Help_Help_General09_Text = "-x - purge the printer (cancel all jobs)"
  64. const L_Help_Help_General10_Text = "-z - pause the printer"
  65. const L_Help_Help_General11_Text = "-? - display command usage"
  66. const L_Help_Help_General12_Text = "Examples:"
  67. const L_Help_Help_General13_Text = "prnqctl -e -s server -p printer"
  68. const L_Help_Help_General14_Text = "prnqctl -m -p printer"
  69. const L_Help_Help_General15_Text = "prnqctl -x -p printer"
  70. '
  71. ' Messages to be displayed if the scripting host is not cscript
  72. '
  73. const L_Help_Help_Host01_Text = "Please run this script using CScript."
  74. const L_Help_Help_Host02_Text = "This can be achieved by"
  75. const L_Help_Help_Host03_Text = "1. Using ""CScript script.vbs arguments"" or"
  76. const L_Help_Help_Host04_Text = "2. Changing the default Windows Scripting Host to CScript"
  77. const L_Help_Help_Host05_Text = " using ""CScript //H:CScript //S"" and running the script "
  78. const L_Help_Help_Host06_Text = " ""script.vbs arguments""."
  79. '
  80. ' General error messages
  81. '
  82. const L_Text_Error_General01_Text = "The scripting host could not be determined."
  83. const L_Text_Error_General02_Text = "Unable to parse command line."
  84. const L_Text_Error_General03_Text = "Unable to get printer instance."
  85. const L_Text_Error_General04_Text = "Win32 error code"
  86. const L_Text_Error_General05_Text = "Unable to get SWbemLocator object"
  87. const L_Text_Error_General06_Text = "Unable to connect to WMI service"
  88. '
  89. ' Action strings
  90. '
  91. const L_Text_Action_General01_Text = "Pause"
  92. const L_Text_Action_General02_Text = "Resume"
  93. const L_Text_Action_General03_Text = "Purge"
  94. const L_Text_Action_General04_Text = "Print Test Page"
  95. '
  96. ' Debug messages
  97. '
  98. const L_Text_Dbg_Msg01_Text = "In function ExecPrinter"
  99. const L_Text_Dbg_Msg02_Text = "Server name"
  100. const L_Text_Dbg_Msg03_Text = "Printer name"
  101. const L_Text_Dbg_Msg04_Text = "In function ParseCommandLine"
  102. main
  103. '
  104. ' Main execution starts here
  105. '
  106. sub main
  107. dim iAction
  108. dim iRetval
  109. dim strServer
  110. dim strPrinter
  111. dim strUser
  112. dim strPassword
  113. '
  114. ' Abort if the host is not cscript
  115. '
  116. if not IsHostCscript() then
  117. call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _
  118. L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _
  119. L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)
  120. wscript.quit
  121. end if
  122. '
  123. ' Get command line parameters
  124. '
  125. iRetval = ParseCommandLine(iAction, strServer, strPrinter, strUser, strPassword)
  126. if iRetval = kErrorSuccess then
  127. select case iAction
  128. case kActionPause
  129. iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General01_Text)
  130. case kActionResume
  131. iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General02_Text)
  132. case kActionPurge
  133. iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General03_Text)
  134. case kActionTestPage
  135. iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General04_Text)
  136. case kActionUnknown
  137. Usage(true)
  138. exit sub
  139. case else
  140. Usage(true)
  141. exit sub
  142. end select
  143. end if
  144. end sub
  145. '
  146. ' Pause/Resume/Purge printer and print test page
  147. '
  148. function ExecPrinter(strServer, strPrinter, strUser, strPassword, strCommand)
  149. on error resume next
  150. DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text
  151. DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text & L_Space_Text & strServer
  152. DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text & L_Space_Text & strPrinter
  153. dim oPrinter
  154. dim oService
  155. dim iRetval
  156. dim uResult
  157. iRetval = kErrorFailure
  158. if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
  159. set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")
  160. else
  161. ExecPrinter = kErrorFailure
  162. exit function
  163. end if
  164. '
  165. ' Check if getting a printer instance succeeded
  166. '
  167. if Err.Number = kErrorSuccess then
  168. select case strCommand
  169. case L_Text_Action_General01_Text
  170. uResult = oPrinter.Pause()
  171. case L_Text_Action_General02_Text
  172. uResult = oPrinter.Resume()
  173. case L_Text_Action_General03_Text
  174. uResult = oPrinter.CancelAllJobs()
  175. case L_Text_Action_General04_Text
  176. uResult = oPrinter.PrintTestPage()
  177. case else
  178. Usage(true)
  179. end select
  180. '
  181. ' Err set by WMI
  182. '
  183. if Err.Number = kErrorSuccess then
  184. '
  185. ' uResult set by printer methods
  186. '
  187. if uResult = kErrorSuccess then
  188. wscript.echo L_Success_Text & L_Space_Text & strCommand & L_Space_Text _
  189. & L_Printer_Text & L_Space_Text & strPrinter
  190. iRetval = kErrorSuccess
  191. else
  192. wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text _
  193. & L_Text_Error_General04_Text & L_Space_Text & uResult
  194. end if
  195. else
  196. wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text & L_Error_Text _
  197. & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
  198. end if
  199. else
  200. wscript.echo L_Text_Error_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _
  201. & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
  202. '
  203. ' Try getting extended error information
  204. '
  205. call LastError()
  206. end if
  207. ExecPrinter = iRetval
  208. end function
  209. '
  210. ' Debug display helper function
  211. '
  212. sub DebugPrint(uFlags, strString)
  213. if gDebugFlag = true then
  214. if uFlags = kDebugTrace then
  215. wscript.echo L_Debug_Text & L_Space_Text & strString
  216. end if
  217. if uFlags = kDebugError then
  218. if Err <> 0 then
  219. wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _
  220. & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
  221. & L_Space_Text & Err.Description
  222. end if
  223. end if
  224. end if
  225. end sub
  226. '
  227. ' Parse the command line into its components
  228. '
  229. function ParseCommandLine(iAction, strServer, strPrinter, strUser, strPassword)
  230. on error resume next
  231. DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text
  232. dim oArgs
  233. dim iIndex
  234. iAction = kActionUnknown
  235. iIndex = 0
  236. set oArgs = wscript.Arguments
  237. while iIndex < oArgs.Count
  238. select case oArgs(iIndex)
  239. case "-z"
  240. iAction = kActionPause
  241. case "-m"
  242. iAction = kActionResume
  243. case "-x"
  244. iAction = kActionPurge
  245. case "-e"
  246. iAction = kActionTestPage
  247. case "-p"
  248. iIndex = iIndex + 1
  249. strPrinter = oArgs(iIndex)
  250. case "-s"
  251. iIndex = iIndex + 1
  252. strServer = RemoveBackslashes(oArgs(iIndex))
  253. case "-u"
  254. iIndex = iIndex + 1
  255. strUser = oArgs(iIndex)
  256. case "-w"
  257. iIndex = iIndex + 1
  258. strPassword = oArgs(iIndex)
  259. case "-?"
  260. Usage(true)
  261. exit function
  262. case else
  263. Usage(true)
  264. exit function
  265. end select
  266. iIndex = iIndex + 1
  267. wend
  268. if Err.Number = kErrorSuccess then
  269. ParseCommandLine = kErrorSuccess
  270. else
  271. wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _
  272. & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description
  273. ParseCommandLine = kErrorFailure
  274. end if
  275. end function
  276. '
  277. ' Display command usage.
  278. '
  279. sub Usage(bExit)
  280. wscript.echo L_Help_Help_General01_Text
  281. wscript.echo L_Empty_Text
  282. wscript.echo L_Help_Help_General02_Text
  283. wscript.echo L_Help_Help_General03_Text
  284. wscript.echo L_Help_Help_General04_Text
  285. wscript.echo L_Help_Help_General05_Text
  286. wscript.echo L_Help_Help_General06_Text
  287. wscript.echo L_Help_Help_General07_Text
  288. wscript.echo L_Help_Help_General08_Text
  289. wscript.echo L_Help_Help_General09_Text
  290. wscript.echo L_Help_Help_General10_Text
  291. wscript.echo L_Help_Help_General11_Text
  292. wscript.echo L_Empty_Text
  293. wscript.echo L_Help_Help_General12_Text
  294. wscript.echo L_Help_Help_General13_Text
  295. wscript.echo L_Help_Help_General14_Text
  296. wscript.echo L_Help_Help_General15_Text
  297. if bExit then
  298. wscript.quit(1)
  299. end if
  300. end sub
  301. '
  302. ' Determines which program is being used to run this script.
  303. ' Returns true if the script host is cscript.exe
  304. '
  305. function IsHostCscript()
  306. on error resume next
  307. dim strFullName
  308. dim strCommand
  309. dim i, j
  310. dim bReturn
  311. bReturn = false
  312. strFullName = WScript.FullName
  313. i = InStr(1, strFullName, ".exe", 1)
  314. if i <> 0 then
  315. j = InStrRev(strFullName, "\", i, 1)
  316. if j <> 0 then
  317. strCommand = Mid(strFullName, j+1, i-j-1)
  318. if LCase(strCommand) = "cscript" then
  319. bReturn = true
  320. end if
  321. end if
  322. end if
  323. if Err <> 0 then
  324. wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
  325. & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
  326. end if
  327. IsHostCscript = bReturn
  328. end function
  329. '
  330. ' Retrieves extended information about the last error that occurred
  331. ' during a WBEM operation. The methods that set an SWbemLastError
  332. ' object are GetObject, PutInstance, DeleteInstance
  333. '
  334. sub LastError()
  335. on error resume next
  336. dim oError
  337. set oError = CreateObject("WbemScripting.SWbemLastError")
  338. if Err = kErrorSuccess then
  339. wscript.echo L_Operation_Text & L_Space_Text & oError.Operation
  340. wscript.echo L_Provider_Text & L_Space_Text & oError.ProviderName
  341. wscript.echo L_Description_Text & L_Space_Text & oError.Description
  342. wscript.echo L_Text_Error_General04_Text & L_Space_Text & oError.StatusCode
  343. end if
  344. end sub
  345. '
  346. ' Connects to the WMI service on a server. oService is returned as a service
  347. ' object (SWbemServices)
  348. '
  349. function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)
  350. on error resume next
  351. dim oLocator
  352. dim bResult
  353. oService = null
  354. bResult = false
  355. set oLocator = CreateObject("WbemScripting.SWbemLocator")
  356. if Err = kErrorSuccess then
  357. set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)
  358. if Err = kErrorSuccess then
  359. bResult = true
  360. oService.Security_.impersonationlevel = 3
  361. Err.Clear
  362. else
  363. wscript.echo L_Text_Error_General06_Text & L_Space_Text & L_Error_Text _
  364. & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
  365. & Err.Description
  366. end if
  367. else
  368. wscript.echo L_Text_Error_General05_Text & L_Space_Text & L_Error_Text _
  369. & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
  370. & Err.Description
  371. end if
  372. WmiConnect = bResult
  373. end function
  374. '
  375. ' Remove leading "\\" from server name
  376. '
  377. function RemoveBackslashes(strServer)
  378. dim strRet
  379. strRet = strServer
  380. if Left(strServer, 2) = "\\" and Len(strServer) > 2 then
  381. strRet = Mid(strServer, 3)
  382. end if
  383. RemoveBackslashes = strRet
  384. end function
  385. '' SIG '' Begin signature block
  386. '' SIG '' MIIZMAYJKoZIhvcNAQcCoIIZITCCGR0CAQExDjAMBggq
  387. '' SIG '' hkiG9w0CBQUAMGYGCisGAQQBgjcCAQSgWDBWMDIGCisG
  388. '' SIG '' AQQBgjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIB
  389. '' SIG '' AAIBAAIBAAIBAAIBADAgMAwGCCqGSIb3DQIFBQAEEAVK
  390. '' SIG '' mi1f5zhhbqCkKkeOxxOgghQ4MIICvDCCAiUCEEoZ0jiM
  391. '' SIG '' glkcpV1zXxVd3KMwDQYJKoZIhvcNAQEEBQAwgZ4xHzAd
  392. '' SIG '' BgNVBAoTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxFzAV
  393. '' SIG '' BgNVBAsTDlZlcmlTaWduLCBJbmMuMSwwKgYDVQQLEyNW
  394. '' SIG '' ZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2UgUm9v
  395. '' SIG '' dDE0MDIGA1UECxMrTk8gTElBQklMSVRZIEFDQ0VQVEVE
  396. '' SIG '' LCAoYyk5NyBWZXJpU2lnbiwgSW5jLjAeFw05NzA1MTIw
  397. '' SIG '' MDAwMDBaFw0wNDAxMDcyMzU5NTlaMIGeMR8wHQYDVQQK
  398. '' SIG '' ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMRcwFQYDVQQL
  399. '' SIG '' Ew5WZXJpU2lnbiwgSW5jLjEsMCoGA1UECxMjVmVyaVNp
  400. '' SIG '' Z24gVGltZSBTdGFtcGluZyBTZXJ2aWNlIFJvb3QxNDAy
  401. '' SIG '' BgNVBAsTK05PIExJQUJJTElUWSBBQ0NFUFRFRCwgKGMp
  402. '' SIG '' OTcgVmVyaVNpZ24sIEluYy4wgZ8wDQYJKoZIhvcNAQEB
  403. '' SIG '' BQADgY0AMIGJAoGBANMuIPBofCwtLoEcsQaypwu3EQ1X
  404. '' SIG '' 2lPYdePJMyqy1PYJWzTz6ZD+CQzQ2xtauc3n9oixncCH
  405. '' SIG '' Jet9WBBzanjLcRX9xlj2KatYXpYE/S1iEViBHMpxlNUi
  406. '' SIG '' WC/VzBQFhDa6lKq0TUrp7jsirVaZfiGcbIbASkeXarSm
  407. '' SIG '' NtX8CS3TtDmbAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEA
  408. '' SIG '' YVUOPnvHkhJ+ERCOIszUsxMrW+hE5At4nqR+86cHch7i
  409. '' SIG '' We/MhOOJlEzbTmHvs6T7Rj1QNAufcFb2jip/F87lY795
  410. '' SIG '' aQdzLrCVKIr17aqp0l3NCsoQCY/Os68olsR5KYSS3P+6
  411. '' SIG '' Z0JIppAQ5L9h+JxT5ZPRcz/4/Z1PhKxV0f0RY2MwggQC
  412. '' SIG '' MIIDa6ADAgECAhAIem1cb2KTT7rE/UPhFBidMA0GCSqG
  413. '' SIG '' SIb3DQEBBAUAMIGeMR8wHQYDVQQKExZWZXJpU2lnbiBU
  414. '' SIG '' cnVzdCBOZXR3b3JrMRcwFQYDVQQLEw5WZXJpU2lnbiwg
  415. '' SIG '' SW5jLjEsMCoGA1UECxMjVmVyaVNpZ24gVGltZSBTdGFt
  416. '' SIG '' cGluZyBTZXJ2aWNlIFJvb3QxNDAyBgNVBAsTK05PIExJ
  417. '' SIG '' QUJJTElUWSBBQ0NFUFRFRCwgKGMpOTcgVmVyaVNpZ24s
  418. '' SIG '' IEluYy4wHhcNMDEwMjI4MDAwMDAwWhcNMDQwMTA2MjM1
  419. '' SIG '' OTU5WjCBoDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4x
  420. '' SIG '' HzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx
  421. '' SIG '' OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
  422. '' SIG '' L3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAxMScwJQYD
  423. '' SIG '' VQQDEx5WZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZp
  424. '' SIG '' Y2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  425. '' SIG '' AQDAemGH67KnA2MbKxph3oC3FR2gi5A9uyeShBQ564XO
  426. '' SIG '' KZIGZkikA0+N6E+n8K9e0S8Zx5HxtZ57kSHO6f/jTvD8
  427. '' SIG '' r5VYuGMt5o72KRjNcI5Qw+2Wu0DbviXoQlXW9oXyBueL
  428. '' SIG '' mRwx8wMP1EycJCrcGxuPgvOw76dN4xSn4I/Wx2jCYVip
  429. '' SIG '' ctT4MEhP2S9vYyDZicqCe8JLvCjFgWjn5oJArEY6oPk/
  430. '' SIG '' Ns1Mu1RCWnple/6E5MdHVKy5PeyAxxr3xDOBgckqlft/
  431. '' SIG '' XjqHkBTbzC518u9r5j2pYL5CAapPqluoPyIxnxIV+XOh
  432. '' SIG '' HoKLBCvqRgJMbY8fUC6VSyp4BoR0PZGPLEcxAgMBAAGj
  433. '' SIG '' gbgwgbUwQAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAB
  434. '' SIG '' hiRodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9z
  435. '' SIG '' dGF0dXMwCQYDVR0TBAIwADBEBgNVHSAEPTA7MDkGC2CG
  436. '' SIG '' SAGG+EUBBwEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
  437. '' SIG '' d3d3LnZlcmlzaWduLmNvbS9ycGEwEwYDVR0lBAwwCgYI
  438. '' SIG '' KwYBBQUHAwgwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEB
  439. '' SIG '' BAUAA4GBAC3zT2NgLBja9SQPUrMM67O8Z4XCI+2PRg3P
  440. '' SIG '' Gk2+83x6IDAyGGiLkrsymfCTuDsVBid7PgIGAKQhkoQT
  441. '' SIG '' CsWY5UBXxQUl6K+vEWqp5TvL6SP2lCldQFXzpVOdyDY6
  442. '' SIG '' OWUIc3OkMtKvrL/HBTz/RezD6Nok0c5jrgmn++Ib4/1B
  443. '' SIG '' CmqWMIIEEjCCAvqgAwIBAgIPAMEAizw8iBHRPvZj7N9A
  444. '' SIG '' MA0GCSqGSIb3DQEBBAUAMHAxKzApBgNVBAsTIkNvcHly
  445. '' SIG '' aWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc
  446. '' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G
  447. '' SIG '' A1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5MB4X
  448. '' SIG '' DTk3MDExMDA3MDAwMFoXDTIwMTIzMTA3MDAwMFowcDEr
  449. '' SIG '' MCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jv
  450. '' SIG '' c29mdCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENv
  451. '' SIG '' cnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9v
  452. '' SIG '' dCBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IB
  453. '' SIG '' DwAwggEKAoIBAQCpAr3BcOY78k4bKJ+XeF4w6qKpjSVf
  454. '' SIG '' +P6VTKO3/p2iID58UaKboo9gMmvRQmR57qx2yVTa8uuc
  455. '' SIG '' hhyPn4Rms8VremIj1h083g8BkuiWxL8tZpqaaCaZ0Dos
  456. '' SIG '' vwy1WCbBRucKPjiWLKkoOajsSYNC44QPu5psVWGsgnyh
  457. '' SIG '' YC13TOmZtGQ7mlAcMQgkFJ+p55ErGOY9mGMUYFgFZZ8d
  458. '' SIG '' N1KH96fvlALGG9O/VUWziYC/OuxUlE6u/ad6bXROrxjM
  459. '' SIG '' lgkoIQBXkGBpN7tLEgc8Vv9b+6RmCgim0oFWV++2O14W
  460. '' SIG '' gXcE2va+roCV/rDNf9anGnJcPMq88AijIjCzBoXJsyB3
  461. '' SIG '' E4XfAgMBAAGjgagwgaUwgaIGA1UdAQSBmjCBl4AQW9Bw
  462. '' SIG '' 72lyniNRfhSyTY7/y6FyMHAxKzApBgNVBAsTIkNvcHly
  463. '' SIG '' aWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc
  464. '' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G
  465. '' SIG '' A1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5gg8A
  466. '' SIG '' wQCLPDyIEdE+9mPs30AwDQYJKoZIhvcNAQEEBQADggEB
  467. '' SIG '' AJXoC8CN85cYNe24ASTYdxHzXGAyn54Lyz4FkYiPyTrm
  468. '' SIG '' IfLwV5MstaBHyGLv/NfMOztaqTZUaf4kbT/JzKreBXzd
  469. '' SIG '' MY09nxBwarv+Ek8YacD80EPjEVogT+pie6+qGcgrNyUt
  470. '' SIG '' vmWhEoolD2Oj91Qc+SHJ1hXzUqxuQzIH/YIX+OVnbA1R
  471. '' SIG '' 9r3xUse958Qw/CAxCYgdlSkaTdUdAqXxgOADtFv0sd3I
  472. '' SIG '' V+5lScdSVLa0AygS/5DW8AiPfriXxas3LOR65Kh343ag
  473. '' SIG '' ANBqP8HSNorgQRKoNWobats14dQcBOSoRQTIWjM4bk0c
  474. '' SIG '' DWK3CqKM09VUP0bNHFWmcNsSOoeTdZ+n0qAwggSLMIID
  475. '' SIG '' c6ADAgECAgphBiqNAAAAAAALMA0GCSqGSIb3DQEBBQUA
  476. '' SIG '' MIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
  477. '' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
  478. '' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJD
  479. '' SIG '' b3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAu
  480. '' SIG '' MSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5n
  481. '' SIG '' IFBDQTAeFw0wMTAzMjkyMTI3MjZaFw0wMjA1MjkyMTM3
  482. '' SIG '' MjZaMIGhMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
  483. '' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
  484. '' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQL
  485. '' SIG '' EyJDb3B5cmlnaHQgKGMpIDIwMDEgTWljcm9zb2Z0IENv
  486. '' SIG '' cnAuMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRp
  487. '' SIG '' b24wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAI4W
  488. '' SIG '' b9oX0+NFlbKs0+XPMT0dxIe7TkgF+YtWqSuHY8hE2jDJ
  489. '' SIG '' FLzreBq6xOricgBMRmab3mJGbp73RLrous/C1fU7lke4
  490. '' SIG '' UV7Rd2cie1MqLeoij3xO/wK1GzOg6pXrGLp2+WHSAAuU
  491. '' SIG '' YDQ7SYYss9mOky4ta/3jVaq4qm7gcPSiYAYvAgMBAAGj
  492. '' SIG '' ggFAMIIBPDAOBgNVHQ8BAf8EBAMCBsAwEwYDVR0lBAww
  493. '' SIG '' CgYIKwYBBQUHAwMwHQYDVR0OBBYEFO+QQN5P4BuzRdgH
  494. '' SIG '' A3uZ+XUZZjUaMIGpBgNVHSMEgaEwgZ6AFClcuRu2zTPu
  495. '' SIG '' u55Zffflyi7EDTQooXSkcjBwMSswKQYDVQQLEyJDb3B5
  496. '' SIG '' cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4w
  497. '' SIG '' HAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
  498. '' SIG '' BgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIQ
  499. '' SIG '' aguZT8AA3qoR1NhAmqi+5jBKBgNVHR8EQzBBMD+gPaA7
  500. '' SIG '' hjlodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
  501. '' SIG '' bC9wcm9kdWN0cy9Db2RlU2lnblBDQS5jcmwwDQYJKoZI
  502. '' SIG '' hvcNAQEFBQADggEBAARnzM/dcU1Hwo6DaRJrol+WJgfo
  503. '' SIG '' j9jTnlrbJ2kdHfQ8VShT3REkJ5KuWVZA6cRNnezbq36U
  504. '' SIG '' mz0gLDXyJ07AyDm3ZWPRNWbaU71BfllKpFK39f3IvaF7
  505. '' SIG '' BriY2Jju0Qs0dWYN3EGPw7CShFfBQnqFxpET21St3n5B
  506. '' SIG '' 3CCv6RvJwjIxxY3py/qDS8FYkzLE1+PNeqvffQicxoU7
  507. '' SIG '' 6EGBOLF4Gbw4981rws6qTJAdg8bmAYloqueP6AdQKjLd
  508. '' SIG '' 18+9zHrZOg//skSKV8gaN2QHF317cktGBqEoWyNXHmr9
  509. '' SIG '' kSIzQNF1SxIBbgYhhDZvqCoMfz6uNSv2t30LCBPlV/NL
  510. '' SIG '' rY8gv7gwggTJMIIDsaADAgECAhBqC5lPwADeqhHU2ECa
  511. '' SIG '' qL7mMA0GCSqGSIb3DQEBBAUAMHAxKzApBgNVBAsTIkNv
  512. '' SIG '' cHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4x
  513. '' SIG '' HjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEh
  514. '' SIG '' MB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5
  515. '' SIG '' MB4XDTAwMTIxMDA4MDAwMFoXDTA1MTExMjA4MDAwMFow
  516. '' SIG '' gaYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
  517. '' SIG '' dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
  518. '' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAsTIkNv
  519. '' SIG '' cHlyaWdodCAoYykgMjAwMCBNaWNyb3NvZnQgQ29ycC4x
  520. '' SIG '' IzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcg
  521. '' SIG '' UENBMIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKC
  522. '' SIG '' AQEAooQVU9gLMA40lf86G8LzL3ttNyNN89KM5f2v/cUC
  523. '' SIG '' NB8kx+Wh3FTsfgJ0R6vbMlgWFFEpOPF+srSMOke1OU5u
  524. '' SIG '' VMIxDDpt+83Ny1CcG66n2NlKJj+1xcuPluJJ8m3Y6ZY+
  525. '' SIG '' 3gXP8KZVN60vYM2AYUKhSVRKDxi3S9mTmTBaR3VktNO7
  526. '' SIG '' 3barDJ1PuHM7GDqqtIeMsIiwTU8fThG1M4DfDTpkb0TH
  527. '' SIG '' NL1Kk5u8ph35BSNOYCmPzCryhJqZrajbCnB71jRBkKW3
  528. '' SIG '' ZsdcGx2jMw6bVAMaP5iQuMznPQR0QxyP9znms6xIemsq
  529. '' SIG '' DmIBYTl2bv0+mAdLFPEBRv0VAOBH2k/kBeSAJQIBA6OC
  530. '' SIG '' ASgwggEkMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIGiBgNV
  531. '' SIG '' HQEEgZowgZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSsw
  532. '' SIG '' KQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9z
  533. '' SIG '' b2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29y
  534. '' SIG '' cG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290
  535. '' SIG '' IEF1dGhvcml0eYIPAMEAizw8iBHRPvZj7N9AMBAGCSsG
  536. '' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQpXLkbts0z7rue
  537. '' SIG '' WX335couxA00KDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi
  538. '' SIG '' AEMAQTALBgNVHQ8EBAMCAUYwDwYDVR0TAQH/BAUwAwEB
  539. '' SIG '' /zANBgkqhkiG9w0BAQQFAAOCAQEARVjimkF//J2/SHd3
  540. '' SIG '' rozZ5hnFV7QavbS5XwKhRWo5Wfm5J5wtTZ78ouQ4ijhk
  541. '' SIG '' IkLfuS8qz7fWBsrrKr/gGoV821EIPfQi09TAbYiBFURf
  542. '' SIG '' ZINkxKmULIrbkDdKD7fo1GGPdnbh2SX/JISVjQRWVJSh
  543. '' SIG '' HDo+grzupYeMHIxLeV+1SfpeMmk6H1StdU3fZOcwPNtk
  544. '' SIG '' SUT7+8QcQnHmoD1F7msAn6xCvboRs1bk+9WiKoHYH06i
  545. '' SIG '' Vb4nj3Cmomwb/1SKgryBS6ahsWZ6qRenywbAR+ums+kx
  546. '' SIG '' FVM9KgS//3NI3IsnQ/xj6O4kh1u+NtHoMfUy2V7feXq6
  547. '' SIG '' MKxphkr7jBG/G41UWTGCBGIwggReAgEBMIG1MIGmMQsw
  548. '' SIG '' CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
  549. '' SIG '' MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
  550. '' SIG '' b2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJDb3B5cmln
  551. '' SIG '' aHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAuMSMwIQYD
  552. '' SIG '' VQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQIK
  553. '' SIG '' YQYqjQAAAAAACzAMBggqhkiG9w0CBQUAoIGwMBkGCSqG
  554. '' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
  555. '' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMB8GCSqGSIb3DQEJBDES
  556. '' SIG '' BBDk+J9KG9mtR7f3zrlDrtUOMFQGCisGAQQBgjcCAQwx
  557. '' SIG '' RjBEoCaAJABXAE0ASQAgAHAAcgBpAG4AdABlAHIAIABz
  558. '' SIG '' AGMAcgBpAHAAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29m
  559. '' SIG '' dC5jb20wDQYJKoZIhvcNAQEBBQAEgYAIdNx52NyTWjs4
  560. '' SIG '' VMIz8fBO2GnhNXv+MNVhBEC+sRiP8us2lJFOBpqD+G//
  561. '' SIG '' 8gx/UI8XgraZeaCaJvWJ6yQ6axCZrO3b5hDDnd0XyJb8
  562. '' SIG '' rZOHFXOXgGzaO202pATVN55kIJShqMCaNArf1MZ6vZie
  563. '' SIG '' vua3tzZzMCX4NutZcYwsxixQPaGCAkwwggJIBgkqhkiG
  564. '' SIG '' 9w0BCQYxggI5MIICNQIBATCBszCBnjEfMB0GA1UEChMW
  565. '' SIG '' VmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UECxMO
  566. '' SIG '' VmVyaVNpZ24sIEluYy4xLDAqBgNVBAsTI1ZlcmlTaWdu
  567. '' SIG '' IFRpbWUgU3RhbXBpbmcgU2VydmljZSBSb290MTQwMgYD
  568. '' SIG '' VQQLEytOTyBMSUFCSUxJVFkgQUNDRVBURUQsIChjKTk3
  569. '' SIG '' IFZlcmlTaWduLCBJbmMuAhAIem1cb2KTT7rE/UPhFBid
  570. '' SIG '' MAwGCCqGSIb3DQIFBQCgWTAYBgkqhkiG9w0BCQMxCwYJ
  571. '' SIG '' KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMTEyMDcy
  572. '' SIG '' MDIzMTdaMB8GCSqGSIb3DQEJBDESBBDkDoOezCP9AjDb
  573. '' SIG '' z0ZhqiRWMA0GCSqGSIb3DQEBAQUABIIBAGpvhYduh6HS
  574. '' SIG '' 14fEvXKjj3ObmF7H84ElZfG1guqaH5yzQasIrtQcj7sH
  575. '' SIG '' hBYGb/L7jsaVD/NKgH/ZkW0sUdbyIkv6vkOLnsKBs8cq
  576. '' SIG '' 2GGQvFV8jYdXJUEqo+XD/2ehC1Wj+b6+YQxyMCITN42F
  577. '' SIG '' +YfRBATzgfTwwDmmJ/KFQgDA3ZfMl38didaABKr7zhEo
  578. '' SIG '' pA37ZJzI7q85n0AtUlULBBlAxmDasfxhAO4or3vHETZ/
  579. '' SIG '' dHk9q3VH8q+CWiH55QMXKnJ1SrlEIUooLRcKWsw42IEj
  580. '' SIG '' d2Ean54V5izi/1NTVTUmFj5n74Q1kHJ7I6d7lek6+Bpu
  581. '' SIG '' gTtFXkMh6KswounLzxH2x3M=
  582. '' SIG '' End signature block