home *** CD-ROM | disk | FTP | other *** search
/ moodle.waes.ac.uk / moodle.waes.ac.uk.zip / moodle.waes.ac.uk / TMG / SP1-TMG-KB981324-AMD64-ENU.msp / PCW_CAB_SHFx2 / ChangeStorageServer.vbs < prev    next >
Text File  |  2010-06-15  |  25KB  |  561 lines

  1. '******************************************************************************
  2. '*
  3. '* Copyright (c) Microsoft Corporation. All rights reserved.
  4. '*
  5. '* Module Name:    ChangeStorageServer.vbs
  6. '*
  7. '* Abstract:       Enables an ISA Server 2004 Enterprise Edition administrator
  8. '*                 to change the Configuration Storage server when the current
  9. '*                 one is no longer accessible from the ISA Server computers.
  10. '*
  11. '******************************************************************************
  12.  
  13. '******************************************************************************
  14. ' Begin localization
  15. '******************************************************************************
  16. const L_Prefix_ErrorMessage                      = "ERROR: "
  17. const L_ConnectLocalStorage_ErrorMessage         = "Unable to connect to local storage"
  18. const L_CreateObject_ErrorMessage                = "Unable to create object "
  19. const L_GetArrayObject_ErrorMessage              = "Unable to get Array object"
  20. const L_GetServerObject_ErrorMessage             = "Unable to get Server object "
  21. const L_GetStorageServerObject_ErrorMessage      = "Unable to get Configuration Storage server object "
  22. const L_CannotSaveNewServer_ErrorMessage         = "Cannot save new server"
  23. const L_StopRemoteAccess_ErrorMessage            = "Cannot stop Remote Access Service"
  24. const L_StopFirewall_ErrorMessage                = "Cannot stop Firewall service"
  25. const L_StopJobScheduler_ErrorMessage            = "Cannot stop Job Scheduler service"
  26. const L_StopControl_ErrorMessage                 = "Cannot stop Control service"
  27. const L_StopManagedControl_ErrorMessage          = "Cannot stop Managed Control service" 
  28. const L_StartFirewall_ErrorMessage               = "Cannot start Firewall service"
  29. const L_StartJobScheduler_ErrorMessage           = "Cannot start Job Scheduler service"
  30. const L_StartControl_ErrorMessage                = "Cannot start Control service"
  31. const L_StartManagedControl_ErrorMessage         = "Cannot start Managed Control service"
  32. const L_WriteRegistry_ErrorMessage               = "Cannot write to registry"
  33. const L_ReadRegistry_ErrorMessage                = "Cannot read from registry"
  34.  
  35. const L_WarningPrefix_Text                       = "WARNING: "
  36. const L_StorageConnectivityWarning_Text          = "The new Configuration Storage server could not be accessed. Make sure that the server is running and that the server name was typed correctly."
  37.  
  38. const L_MustUseCscript_Text               = "This script should be executed from the command prompt using CSCRIPT.EXE." 
  39. const L_AuthWindows_Text                  = "Windows authentication"
  40. const L_AuthCertificate_Text              = "Certificate authentication"
  41. const L_WrongAuthType_Text                = "Wrong authentication type"
  42. const L_ChangingServer_Text               = "Changing Configuration Storage server to: "
  43. const L_ConnectLocal_Text                 = "Connecting to local storage"
  44. const L_CreatingObjects_Text              = "Creating ISA Admin objects"
  45. const L_StopRemoteAccess_Text             = "Stopping Remote Access service..."
  46. const L_StopFirewall_Text                 = "Stopping Firewall service..."
  47. const L_StopJobScheduler_Text             = "Stopping Job Scheduler service..."
  48. const L_StopControl_Text                  = "Stopping Control service..."
  49. const L_StopManagedControl_Text           = "Stopping Managed Control service..."
  50. const L_StartFirewall_Text                = "Starting Firewall service..."
  51. const L_StartJobScheduler_Text            = "Starting Job Scheduler service..."
  52. const L_StartControl_Text                 = "Starting Control service..."
  53. const L_StartManagedControl_Text          = "Starting Managed Control service..."
  54. const L_ServiceStopSuccess_Text           = "Service stopped successfully"
  55. const L_ServiceAlreadyStopped_Text        = "Service is already stopped"
  56. const L_ServiceStartSuccess_Text          = "Service started successfully"
  57. const L_ServiceAlreadyStarted_Text        = "Service is already started"
  58. const L_CurrentRegistryStorageServer_Text = "Current effective Configuration Storage server: "
  59. const L_CurrentStorageServer_Text         = "Current Configuration Storage server: "
  60. const L_CurrentAuthType_Text              = "Current Configuration Storage server authentication: "
  61. const L_ChangedServer_Text                = "Changed Configuration Storage server to: "
  62. const L_ScriptDone_Text                   = "Script done"
  63.  
  64. const L_Usage_Text                        = "Usage:"
  65. const L_UsageServer_Text                 = "New Configuration Storage server name"
  66. const L_UsageType_Text                   = "Authentication type, can be 'windows' or 'certificate'"
  67. const L_UsageServerParamName_Text            = "server"
  68. const L_UsageTypeParamName_Text              = "type"
  69.  
  70.  
  71.  
  72.  
  73. '******************************************************************************
  74. ' End localization
  75. '******************************************************************************
  76.  
  77.  
  78. '******************************************************************************
  79. ' Constants
  80. '******************************************************************************
  81.  
  82. ' Script type
  83. CONST CONST_CSCRIPT              = 2
  84.  
  85. ' enum: FpcConfigurationStorageServerConnectionType
  86. const AUTH_WINDOWS               = 0
  87. const AUTH_CERTIFICATE           = 1
  88.  
  89. ' Service status constants
  90. Const SERVICE_STOPPED            = 1
  91. Const SERVICE_START_PENDING      = 2
  92. Const SERVICE_STOP_PENDING       = 3
  93. Const SERVICE_RUNNING            = 4
  94. Const SERVICE_CONTINUE_PENDING   = 5
  95. Const SERVICE_PAUSE_PENDING      = 6
  96. Const SERVICE_PAUSED             = 7
  97. Const SERVICE_ERROR              = 8
  98.  
  99. const WAIT_FOR_SERVICE           = 1000
  100.  
  101. const REG_STORAGE_SERVER         = "HKLM\SOFTWARE\Microsoft\Fpc\ADAMStorageServer"
  102. const CONTROL_SERVICE            = "isactrl"
  103. const MANAGED_CONTROL_SERVICE    = "IsaManagedCtrl"
  104.  
  105. '******************************************************************************
  106. ' Begin main script
  107. '******************************************************************************
  108.  
  109. on error resume next
  110. Err.Clear
  111.  
  112. ' Verify the script is running using CScript
  113. If Instr(1, LCase(WScript.FullName), "cscript", vbTextCompare) = 0 Then    
  114.     WScript.echo L_MustUseCscript_Text 
  115.     WScript.Quit(EXIT_UNEXPECTED)              
  116. End If
  117.  
  118. 'Validate script arguments
  119. If Wscript.Arguments.Count = 0 Then
  120.    usage=true
  121. ElseIf Wscript.Arguments.Count <> 2 Or Wscript.Arguments(0) = "/?" Then
  122.    usage=true
  123. Else
  124.    usage=false
  125. End IF
  126.  
  127. ' Display usage
  128. If usage Then
  129.    Wscript.Echo L_Usage_Text
  130.    Wscript.Echo
  131.    Wscript.Echo "    " & Wscript.ScriptName & " <" & L_UsageServerParamName_Text & "> <" & L_UsageTypeParamName_Text & ">"
  132.    Wscript.Echo
  133.    Wscript.Echo "    " & L_UsageServerParamName_Text & "   " & L_UsageServer_Text
  134.    Wscript.Echo "    " & L_UsageTypeParamName_Text & "     " & L_UsageType_Text
  135.    Wscript.Quit(EXIT_UNEXPECTED)
  136. End If
  137.  
  138. ' First argument: server name
  139. NewServer=Wscript.Arguments(0)
  140.  
  141. ' Second argument: authentication type
  142. if Wscript.Arguments(1) = "windows" Then
  143.    NewServerAuthType=AUTH_WINDOWS
  144. ElseIf Wscript.Arguments(1) = "certificate" Then
  145.    NewServerAuthType=AUTH_CERTIFICATE
  146. Else
  147.    Wscript.Echo L_Prefix_ErrorMessage & L_WrongAuthType_Text
  148.    Wscript.Quit(EXIT_UNEXPECTED)
  149. End If
  150.  
  151. ' Strat doing what we're here for
  152. Trace L_ChangingServer_Text & NewServer
  153.  
  154. ' Create root object
  155. Trace L_CreatingObjects_Text
  156. Set objFpcRoot=CreateObject("FPC.Root")
  157. CheckError L_CreateObject_ErrorMessage & "FPC.Root"
  158.  
  159. ' Set VendorMode to be true in order to be able to save configuration in Local Storage Mode.
  160. objFpcRoot.VendorMode = true
  161.  
  162. 'Connect root to local storage
  163. Trace L_ConnectLocal_Text
  164. objFpcRoot.ConnectToLocalStorage
  165. CheckError L_ConnectLocalStorage_ErrorMessage
  166.  
  167. 'Create rest of the objects
  168. Set objFpcArray=objFpcRoot.GetContainingArray
  169. CheckError L_GetArrayObject_ErrorMessage
  170. Set objFpcServer=objFpcRoot.GetContainingServer
  171. CheckError L_GetServerObject_ErrorMessage
  172. Set objFpcStorageServer=objFpcArray.ConfigurationStorageServerConnection
  173. CheckError L_GetStorageServerObject_ErrorMessage
  174.  
  175. ' Stop services
  176. If objFpcServer.RemoteAccessServiceStatus Then
  177.     Trace L_StopRemoteAccess_Text
  178.     objFpcServer.StopRemoteAccessService
  179.     CheckError L_StopRemoteAccess_ErrorMessage
  180.     Trace L_ServiceStopSuccess_Text
  181. End If
  182.  
  183. If objFpcServer.FirewallServiceStatus Then
  184.       Trace L_StopFirewall_Text
  185.       objFpcServer.StopFirewallService
  186.       CheckError L_StopFirewall_ErrorMessage
  187.       Trace L_ServiceStopSuccess_Text
  188. End If
  189.  
  190. If objFpcServer.JobSchedulerServiceStatus Then
  191.       Trace L_StopJobScheduler_Text
  192.       objFpcServer.StopJobSchedulerService
  193.       CheckError L_StopJobScheduler_ErrorMessage
  194.       Trace L_ServiceStopSuccess_Text
  195. End If
  196.  
  197. ' Stop IsaManagedCtrl service
  198. Trace L_StopManagedControl_Text
  199. StopService(MANAGED_CONTROL_SERVICE)
  200. CheckError L_StopManagedControl_ErrorMessage
  201.  
  202.  
  203. ' Stop IsaCtrl service
  204. Trace L_StopControl_Text
  205. StopService(CONTROL_SERVICE)
  206. CheckError L_StopControl_ErrorMessage
  207.  
  208. ' Print the current configuration
  209. Trace L_CurrentStorageServer_Text & objFpcStorageServer.PrimaryConfigurationStorageServer
  210.  
  211. If objFpcStorageServer.ConfigurationStorageServerConnectionType = AUTH_WINDOWS Then
  212.    strAuthType=L_AuthWindows_Text
  213. Else
  214.    strAuthType=L_AuthCertificate_Text
  215. End If
  216. Trace L_CurrentAuthType_Text & strAuthType
  217.  
  218. ' Change the storage server in the local storage
  219. objFpcStorageServer.PrimaryConfigurationStorageServer=NewServer
  220. objFpcStorageServer.ConfigurationStorageServerConnectionType=NewServerAuthType
  221. objFpcStorageServer.Save
  222. CheckError L_CannotSaveNewServer_ErrorMessage
  223.  
  224. ' Change storage server in registry
  225. Set WshShell = WScript.CreateObject("WScript.Shell")
  226. Trace L_CurrentRegistryStorageServer_Text & WshShell.RegRead(REG_STORAGE_SERVER)
  227. CheckError L_ReadRegistry_ErrorMessage
  228. WshShell.RegWrite REG_STORAGE_SERVER, NewServer
  229. CheckError L_WriteRegistry_ErrorMessage
  230.  
  231. ' Finished
  232. Trace L_ChangedServer_Text & NewServer & "(" & strAuthType & ")"
  233.  
  234. ' Restart services
  235. Trace L_StartControl_Text
  236. StartService(CONTROL_SERVICE)
  237. CheckError L_StartControl_ErrorMessage
  238.  
  239. Trace L_StartFirewall_Text
  240. objFpcServer.StartFirewallService
  241. CheckError L_StartFirewall_ErrorMessage
  242. Trace L_ServiceStartSuccess_Text
  243.  
  244. Trace L_StartJobScheduler_Text
  245. objFpcServer.StartJobSchedulerService
  246. CheckError L_StartJobScheduler_ErrorMessage
  247. Trace L_ServiceStartSuccess_Text
  248.  
  249. ' Check if the new storage server is accisible and warn if it isn't
  250. CheckStorageConnectivity NewServer
  251.  
  252. Trace L_ScriptDone_Text
  253.  
  254. ' ****************************************
  255. ' StartService() subroutine
  256. ' Start a service
  257. ' ****************************************
  258. Sub StartService(strService)
  259.    on error goto 0
  260.  
  261.    Set objComputer = GetObject("WinNT://.,computer")
  262.    Set objService = objComputer.GetObject("Service", strService)
  263.  
  264.    If (objService.Status <> SERVICE_RUNNING) Then
  265.       objService.Start
  266.       Wscript.Sleep WAIT_FOR_SERVICE
  267.       While objService.Status <> SERVICE_RUNNING:
  268.          Wscript.Sleep WAIT_FOR_SERVICE
  269.       Wend
  270.       Trace L_ServiceStartSuccess_Text
  271.    Else
  272.       Trace L_ServiceAlreadyStarted_Text
  273.    End If
  274.  
  275. End Sub
  276.  
  277.  
  278. ' ****************************************
  279. ' StopService() subroutine
  280. ' Stop a service
  281. ' ****************************************
  282. Sub StopService(strService)
  283.    on error goto 0
  284.    Set objComputer = GetObject("WinNT://.,computer")
  285.    Set objService = objComputer.GetObject("Service", strService)
  286.  
  287.    If (objService.Status <> SERVICE_STOPPED) Then
  288.       objService.Stop
  289.       Do
  290.          Wscript.Sleep WAIT_FOR_SERVICE
  291.          on error resume next
  292.          Status = objService.Status
  293.          ErrorNum = Err.Number
  294.          on error goto 0
  295.       Loop Until ErrorNum = 0 AND Status = SERVICE_STOPPED
  296.       Trace L_ServiceStopSuccess_Text
  297.    Else
  298.       Trace L_ServiceAlreadyStopped_Text
  299.    End If
  300.  
  301. End Sub
  302.  
  303.  
  304. sub CheckStorageConnectivity(ServerName)
  305.    ISA_STORAGE_PORT_NUMBER = "2171"
  306.  
  307.    ConnectionString = "LDAP://" & ServerName & ":" & ISA_STORAGE_PORT_NUMBER & "/CN=Array-root,CN=FPC2"
  308.  
  309.    on error resume next
  310.    Err.Clear
  311.  
  312.    Set FpcArrayRoot = GetObject(ConnectionString)
  313.  
  314.    if Err.Number then
  315.       WScript.Echo L_WarningPrefix_Text & L_StorageConnectivityWarning_Text
  316.       Err.Clear
  317.    end if
  318.  
  319. end sub
  320.  
  321.  
  322. ' ****************************************
  323. ' Trace() subroutine
  324. ' outputs time and trace information
  325. ' ****************************************
  326. Sub Trace(strText)
  327.   WScript.Echo Now & " : " & strText
  328. End Sub
  329.  
  330.  
  331. ' ****************************************
  332. ' CheckError() subroutine
  333. ' Checks error code
  334. ' ****************************************
  335. Sub CheckError(strErrorText)
  336.  
  337.   if Err.Number then
  338.      WScript.Echo L_Prefix_ErrorMessage & strErrorText
  339.      WScript.Echo "       0x" & Hex(Err.Number) & " - " & Err.Description
  340.      WScript.Quit(EXIT_METHOD_FAIL)
  341.   end if
  342.  
  343. End Sub
  344.  
  345.  
  346. '' SIG '' Begin signature block
  347. '' SIG '' MIIbYAYJKoZIhvcNAQcCoIIbUTCCG00CAQExCzAJBgUr
  348. '' SIG '' DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
  349. '' SIG '' gjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIBAAIB
  350. '' SIG '' AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFPczaFWtBcIG
  351. '' SIG '' dLaPE06sWwPbgquYoIIV5zCCBIUwggNtoAMCAQICCmEF
  352. '' SIG '' 9x4AAAAAADIwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UE
  353. '' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
  354. '' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
  355. '' SIG '' b3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENv
  356. '' SIG '' ZGUgU2lnbmluZyBQQ0EwHhcNMDkwNzEzMjMwMDE4WhcN
  357. '' SIG '' MTAxMDEzMjMxMDE4WjCBgzELMAkGA1UEBhMCVVMxEzAR
  358. '' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
  359. '' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
  360. '' SIG '' bjENMAsGA1UECxMETU9QUjEeMBwGA1UEAxMVTWljcm9z
  361. '' SIG '' b2Z0IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEF
  362. '' SIG '' AAOCAQ8AMIIBCgKCAQEAtYypnJSEYRrMLiLEoJNkCd6F
  363. '' SIG '' obCQXfzJbGi18e/8jmv0+KBu11HeYKMnY9T237ZM0kUL
  364. '' SIG '' pz3Yb/7tpxhj0x/GgdS/BzeXQCt/519aNdmTT6vzKpLw
  365. '' SIG '' po2B7AUk3Nu4YWNTYQI1ONa49e57VKbJWDXp9BXv2gds
  366. '' SIG '' BS1NpLa6mzu4MTB+RbypoSU5DEOkRzuXnCBEcjfPUKBN
  367. '' SIG '' TfTDZdxE0Qg7ON0+xRdsRsetcyTAj4nB6uq6zWipEtZY
  368. '' SIG '' DFMWDP45A9aB8j5cV/N622bhBxjZGQMU9uZFmSpRTJDX
  369. '' SIG '' Wu+vtzsMKU1tIK4Ht5Iu6GnKnzBC58MyigsiSjLonAzG
  370. '' SIG '' UQMmAW2ScwIDAQABo4IBAjCB/zATBgNVHSUEDDAKBggr
  371. '' SIG '' BgEFBQcDAzAdBgNVHQ4EFgQUh4G33+76d/pZBWM3BArX
  372. '' SIG '' 6dqg4OAwDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaA
  373. '' SIG '' FFdFdBxdsPbIQwXgjFQtjzKn/kiWMEkGA1UdHwRCMEAw
  374. '' SIG '' PqA8oDqGOGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
  375. '' SIG '' a2kvY3JsL3Byb2R1Y3RzL0NvZGVTaWdQQ0EuY3JsME0G
  376. '' SIG '' CCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAoYxaHR0cDov
  377. '' SIG '' L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9Db2Rl
  378. '' SIG '' U2lnUENBLmNydDANBgkqhkiG9w0BAQUFAAOCAQEANiGE
  379. '' SIG '' 9Y+DIU2HqD+L58WkD0wwbll0mwuXdBapsfNwpK/CDDMk
  380. '' SIG '' 86BK+sHkIca22epcW5Fh9yJt/zH8F07XzUDjndLltNL6
  381. '' SIG '' jWwH2neayivuDVlHzwTCEGf66ulDO7fm0ZzZjiNgbhKb
  382. '' SIG '' w9l+XFcy3ZQN333FSJJNSHa3osBTlT78OqOTfPKFBMfG
  383. '' SIG '' hTiXNvgSkyIAmU55r5brWiCDrNBcWjCwAOJrOY8kido9
  384. '' SIG '' DKRGeWI2U2rXyc2SCPuH5VT1fFnFxHd9sMEsmMeXbEOn
  385. '' SIG '' +CD4g1RknmD44kqlZ9RJv1SIfVJE81HAJtHFfPCJ1hEJ
  386. '' SIG '' KMJFRYAdkCK9jqIFPjyzT73XOeCIkzCCBMowggOyoAMC
  387. '' SIG '' AQICCmED3PYAAAAAAAwwDQYJKoZIhvcNAQEFBQAwdzEL
  388. '' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
  389. '' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
  390. '' SIG '' c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9z
  391. '' SIG '' b2Z0IFRpbWUtU3RhbXAgUENBMB4XDTA4MDcyNTE5MTI1
  392. '' SIG '' MFoXDTExMDcyNTE5MjI1MFowgbMxCzAJBgNVBAYTAlVT
  393. '' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
  394. '' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
  395. '' SIG '' YXRpb24xDTALBgNVBAsTBE1PUFIxJzAlBgNVBAsTHm5D
  396. '' SIG '' aXBoZXIgRFNFIEVTTjoxNTlDLUEzRjctMjU3MDElMCMG
  397. '' SIG '' A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
  398. '' SIG '' ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
  399. '' SIG '' AMDtgRShXnfAW/R2iWL6rXxoFLT3vTXYE3laF8rZbFFF
  400. '' SIG '' YiZ6Lx/Y6sFuARf5w6YfZ9tRsCzeihft/yCtNOqY+6XW
  401. '' SIG '' KtLxRCcHWi06k/9WU7DI9fMD8knMFtD1AExY+Jv1ByWx
  402. '' SIG '' ZhfAvcjSUoWNwis4ssM2vvmH2vSOXUPXBr+ZBZ+kzv6r
  403. '' SIG '' jWFj5znF8xj22PwxNmlyWqIaTD7qhyVCndE+8ZfSGDKT
  404. '' SIG '' cFVTgR7jOw3ovoJ4beb6zZikb9vuZvSVyM01yZ67Ng2D
  405. '' SIG '' lpQmp5DgqTQ71cCePvDUR42GDIKkWDA6HHbjrZVmtLf9
  406. '' SIG '' CYoFYA+jD+KTllginJ0r26KUGJCVAr0GQJUCAwEAAaOC
  407. '' SIG '' ARkwggEVMB0GA1UdDgQWBBTS7Q0eJLs3qdggak0d0hbV
  408. '' SIG '' Lr6e6zAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7syuw
  409. '' SIG '' wzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vY3Js
  410. '' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
  411. '' SIG '' aWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsGAQUF
  412. '' SIG '' BwEBBEwwSjBIBggrBgEFBQcwAoY8aHR0cDovL3d3dy5t
  413. '' SIG '' aWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3NvZnRU
  414. '' SIG '' aW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUF
  415. '' SIG '' BwMIMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0BAQUF
  416. '' SIG '' AAOCAQEAnApVyMxEEzQM2GMndn0++jgyg1Od8gj5MvXF
  417. '' SIG '' bnChybFjaxmdCWfZneuKattgZunpUibzO8Zq08JSvqi5
  418. '' SIG '' 62qqeIzJFn2QlaDMIbOegb3NwYspvWIl7wlX54ZOKuyA
  419. '' SIG '' yrv8IRbEP05SGeYOsdjBwnmQZLRQcxA1Xl0Rwbi6qs9S
  420. '' SIG '' 9oCRAObvUUNG6dDolPYsJA2KxrIxiqN+NmykBUxnByq7
  421. '' SIG '' uxClpTAactAGIDskk1sV2TmT03MtGsTUbB6hCOz2Mbhr
  422. '' SIG '' S+zuXDMCFDKMfBEgLyADf/kMnbjTnl/WCPyBoJm4u1Vu
  423. '' SIG '' zUJLOk2MFCvKyBLTYm7qDQqdCaNm2XlPjhqi/8yYBDCC
  424. '' SIG '' BgcwggPvoAMCAQICCmEWaDQAAAAAABwwDQYJKoZIhvcN
  425. '' SIG '' AQEFBQAwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
  426. '' SIG '' CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMk
  427. '' SIG '' TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
  428. '' SIG '' aXR5MB4XDTA3MDQwMzEyNTMwOVoXDTIxMDQwMzEzMDMw
  429. '' SIG '' OVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
  430. '' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
  431. '' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMY
  432. '' SIG '' TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjANBgkq
  433. '' SIG '' hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/bSJIq
  434. '' SIG '' fGsuGeG94uPFmVEjUK3O3RhOJA/u0afRTK10MCAR6wfV
  435. '' SIG '' VJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY8InMH8sz
  436. '' SIG '' JIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v0LBC
  437. '' SIG '' BKL5pmyTZ9co3EZTsIbQ5ShGLieshk9VUgzkAyz7apCQ
  438. '' SIG '' MG6H81kwnfp+1pez6CGXfvjSE/MIt1NtUrRFkJ9IAEpH
  439. '' SIG '' ZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZodUAiF
  440. '' SIG '' ABAwRu233iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1HQ2x
  441. '' SIG '' /PebsgHOIktU//kFw8IgCwIDAQABo4IBqzCCAacwDwYD
  442. '' SIG '' VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJGcArt
  443. '' SIG '' QPt2+7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsGAQQB
  444. '' SIG '' gjcVAQQDAgEAMIGYBgNVHSMEgZAwgY2AFA6sgmBAVieX
  445. '' SIG '' 5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPyLGQB
  446. '' SIG '' GRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0
  447. '' SIG '' MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZp
  448. '' SIG '' Y2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcTLmUw
  449. '' SIG '' UAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNy
  450. '' SIG '' b3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvbWljcm9z
  451. '' SIG '' b2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgwRjBE
  452. '' SIG '' BggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQu
  453. '' SIG '' Y29tL3BraS9jZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5j
  454. '' SIG '' cnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcN
  455. '' SIG '' AQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGxLnRx
  456. '' SIG '' W20ME6vOvnuPuC7UEqKMbWK4VwLLTiATUJndekDiV7uv
  457. '' SIG '' WJoc4R0Bhqy7ePKL0Ow7Ae7ivo8KBciNSOLwUxXdT6uS
  458. '' SIG '' 5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH4nC8
  459. '' SIG '' GE6djmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy+cwx
  460. '' SIG '' SnYxPStyC8jqcD3/hQoT38IKYY7w17gX606Lf8U1K16j
  461. '' SIG '' v+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8uWZY
  462. '' SIG '' sy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76KbKTQG
  463. '' SIG '' dxpiyT0ebR+C8AvHLLvPQ7Pl+ex9teOkqHQ1uE7FcSMS
  464. '' SIG '' JnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGboQhJe
  465. '' SIG '' GsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m3pmd
  466. '' SIG '' yjpvvYEndAYR7nYhv5uCwSdUtrFqPYmhdmG0bqETpr+q
  467. '' SIG '' R/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2vWY+45CHl
  468. '' SIG '' tbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIvMqgI
  469. '' SIG '' bqBbjCW/oO+EyiHW6x5PyZruSeD3AWVviQt9yGnI5m7q
  470. '' SIG '' p5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJE6P9MIIGgTCC
  471. '' SIG '' BGmgAwIBAgIKYRUIJwAAAAAADDANBgkqhkiG9w0BAQUF
  472. '' SIG '' ADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZIm
  473. '' SIG '' iZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNy
  474. '' SIG '' b3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
  475. '' SIG '' HhcNMDYwMTI1MjMyMjMyWhcNMTcwMTI1MjMzMjMyWjB5
  476. '' SIG '' MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
  477. '' SIG '' bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
  478. '' SIG '' cm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNy
  479. '' SIG '' b3NvZnQgQ29kZSBTaWduaW5nIFBDQTCCASIwDQYJKoZI
  480. '' SIG '' hvcNAQEBBQADggEPADCCAQoCggEBAJ+N34U3jLEGVmY2
  481. '' SIG '' TtQK6zYjkR6vq41Y6cTPwZ86CiTExMResO4VFMX6Ppkz
  482. '' SIG '' axlpcvR8BV/lmSVE1zUZipDcKI6QDO/VkGGt3twYcC2D
  483. '' SIG '' yW+vhSz43bm5MP1xeByD/cipuYJnDXq4wQnCvBaXVz8c
  484. '' SIG '' mNNp1zCQkJCNMB/YJtSee4jZ4gntl0lF6wRSgXV7uLUi
  485. '' SIG '' uC5Wu9fPqU48CoOiqDrFrbYBDmrPIrQjH2zVJ+e3fsG0
  486. '' SIG '' 1TKteSUcQobinYX0V9obWS8tJpIpxbPXhaOeYFqU5nuc
  487. '' SIG '' e16CNEtt/9TuJ9Ci3NGQDM59DhV8iKw0x8BsmIRKyUR5
  488. '' SIG '' aCjfIoMNuIosSGHi/hECAwEAAaOCAiMwggIfMBAGCSsG
  489. '' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRXRXQcXbD2yEMF
  490. '' SIG '' 4IxULY8yp/5IljALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/
  491. '' SIG '' BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBQOrIJgQFYnl+Ul
  492. '' SIG '' E/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkW
  493. '' SIG '' A2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEt
  494. '' SIG '' MCsGA1UEAxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
  495. '' SIG '' dGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAG
  496. '' SIG '' A1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9z
  497. '' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jvc29m
  498. '' SIG '' dHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYI
  499. '' SIG '' KwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
  500. '' SIG '' bS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQuY3J0
  501. '' SIG '' MHYGA1UdIARvMG0wawYJKwYBBAGCNxUvMF4wXAYIKwYB
  502. '' SIG '' BQUHAgIwUB5OAEMAbwBwAHkAcgBpAGcAaAB0ACAAqQAg
  503. '' SIG '' ADIAMAAwADYAIABNAGkAYwByAG8AcwBvAGYAdAAgAEMA
  504. '' SIG '' bwByAHAAbwByAGEAdABpAG8AbgAuMBMGA1UdJQQMMAoG
  505. '' SIG '' CCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4ICAQAwvLAg
  506. '' SIG '' pGKgp+85JmE93KzGmdCGxC71gzJlXiI+m9aG+Oi2n8qL
  507. '' SIG '' 1jt1C6GRPkzdZHSMSfKIjBhnbP4VZka4OkZCl8iRN9Qk
  508. '' SIG '' sees0+pBFIN308lPBV+jFFK/lqQvPlZbEHXOU8POBVRp
  509. '' SIG '' tGXJJKUP4SW4GrlN5QK5UB5Ps5gMHZUC7iJZrSLLBXQL
  510. '' SIG '' BEV7BFng2A+z60z4YN3CeJ7Rup9r9/PufkQRQNK9uptL
  511. '' SIG '' FghupL5V5KY4EqNI9BxVeoog0X3+kduUjy/Ce2umZIVP
  512. '' SIG '' o+UsNCldC7/1xzgvxCDEVjH2ac6F+AqR7NDWrro4BQzr
  513. '' SIG '' bk9MnAMpqqL8GKApDA1cXFYjV9oclg3IJjbBRMvl4eZv
  514. '' SIG '' ieeP6Zi1c9N44+2jATx05V68bPYhiWcF7JedtbH9r6bp
  515. '' SIG '' cqXDNOEvn/n0ajniLQSCW/zQnK58nRH55rVTGXS6OUo5
  516. '' SIG '' 631Cs0o7Nz3CSnsnmOfiTpsbSlQ4aiM3vmq3SO7qQg1J
  517. '' SIG '' JJGOtwQul2/k50W7j039YNnXWcLYgNZgNHu3oZMg/oG4
  518. '' SIG '' qqVcCemKDb4oTX7X6A/tZXjRMV+5ZtvfQucLzAIHjd//
  519. '' SIG '' IAajRWW0szKNLpHiTbSpyfq8awQOsp/qn96kyQqW9I33
  520. '' SIG '' 2Jio8IUCCFmkIKYsCxryUgbtaeVkGBvgo6veynwUYUO4
  521. '' SIG '' ZfU2o1UTK2csTRswTDGCBOUwggThAgEBMIGHMHkxCzAJ
  522. '' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
  523. '' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
  524. '' SIG '' ZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29m
  525. '' SIG '' dCBDb2RlIFNpZ25pbmcgUENBAgphBfceAAAAAAAyMAkG
  526. '' SIG '' BSsOAwIaBQCgggERMBkGCSqGSIb3DQEJAzEMBgorBgEE
  527. '' SIG '' AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3
  528. '' SIG '' AgEVMCMGCSqGSIb3DQEJBDEWBBQfzmbrfb3naDa3vb9o
  529. '' SIG '' aZhTU8ws/DCBsAYKKwYBBAGCNwIBDDGBoTCBnqBwgG4A
  530. '' SIG '' RgBvAHIAZQBmAHIAbwBuAHQAIABUAGgAcgBlAGEAdAAg
  531. '' SIG '' AE0AYQBuAGEAZwBlAG0AZQBuAHQAIABHAGEAdABlAHcA
  532. '' SIG '' YQB5ACAALQAgAEsAQgAxADkAOAAxADQAMAA5ACAARQBu
  533. '' SIG '' AGcAbABpAHMAaKEqgChodHRwOi8vc3VwcG9ydC5taWNy
  534. '' SIG '' b3NvZnQuY29tP2tiaWQ9OTgxMzI0MA0GCSqGSIb3DQEB
  535. '' SIG '' AQUABIIBAE6fRAbJ39vDl99JctLIn2OeP5sP16MLU7MS
  536. '' SIG '' H3z/dn+oeeVLmaSGkxYS7k5qecYOVlyoyy9svmFD02pJ
  537. '' SIG '' oUwmSB16bysRaJP8dJHWYVOvh5LtR/4H84JdCEKHjXns
  538. '' SIG '' oISEz9SKuoNOYaPGFVxiydTPW6zeNvMFhGgN1WFbxKZI
  539. '' SIG '' U1oZD2X2K2ycDT1VNQ0/cvGz9IiJeg623nmslq+HRXd6
  540. '' SIG '' j2HMyokZLUG0HYr3XpvmIsUYwBPTeiEvxyctCbBwhTox
  541. '' SIG '' UiXu/505MrM4HX7dKumIf4IMidb6M7ZpJrARFeUFcHUA
  542. '' SIG '' tX4dGQUdfwq3dPaKVMiFKPoJ1RvJSzDewvoqUCseRouh
  543. '' SIG '' ggIdMIICGQYJKoZIhvcNAQkGMYICCjCCAgYCAQEwgYUw
  544. '' SIG '' dzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
  545. '' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
  546. '' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWlj
  547. '' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgUENBAgphA9z2AAAAAAAM
  548. '' SIG '' MAcGBSsOAwIaoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3
  549. '' SIG '' DQEHATAcBgkqhkiG9w0BCQUxDxcNMTAwNjE1MTgzNzQ5
  550. '' SIG '' WjAjBgkqhkiG9w0BCQQxFgQUne6qC6Kc2KxtoRxOFwxm
  551. '' SIG '' 1AveQ/MwDQYJKoZIhvcNAQEFBQAEggEADvzYgGVOR/fX
  552. '' SIG '' tOKxtcpA+mzzbd1VVdoAkB1NKmSu8BAL3HKeLJ4/tNqk
  553. '' SIG '' 7k+NKmaEzAsBKs7lNz0j4xKjbwo7IaEOGAvbHZLRSCJa
  554. '' SIG '' URu9tn7c7WNS1HJ3frnPMd4vr8M9EpvKdrhIwAOtnGoQ
  555. '' SIG '' qPvIEsSWy/C5T+JF5rSkRT3iNvC3Bvra07ecMXOHOrXb
  556. '' SIG '' XVF9nzoE9EHr6zEQFAQAlffe2ONJpmtnRL+SUb5uiLQJ
  557. '' SIG '' YzBxi447CxBgRoY4Afr8Pe4xG2++9bh+vplZKRuBI2z/
  558. '' SIG '' wGRc8U59njTh/29cXxSHOvvm10Q+vjTq1+ic8o6S2Uom
  559. '' SIG '' kPm6z6d9GPHW8IW4hzF/EQ==
  560. '' SIG '' End signature block
  561.