Files

590 lines
22 KiB
Plaintext

'On Error Resume Next
Dim FSO, sSPFile, PercentageComplete, sProgressValue
Dim SPPercentage, LPPercentage, Drivepath, RootPath
Dim printersCaptured
Dim printersRestored
Dim networkSharesCaptured
Dim networkSharesRestored
Dim OldPCName
Dim scanStateExitCode
Dim loadStateExitCode
Dim USMTTaskname
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
USMTTaskname = "Run USMT"
FindPath()
On Error Resume Next
MBToTransfer(DrivePath & "\USMTcapture.prg")
SPPercentComplete(DrivePath & "\USMTcapture.prg")
LPPercentComplete(DrivePath & "\Loadstateprogress.log")
'LPPercentComplete(DrivePath & "\Loadstateprogress.prg")
printersCaptured = GetPrinetrsCount()
networkSharesCaptured = GetNetworkShareCount()
'printersRestored = GetPrinetrsCount(DrivePath & "\PrintersRestored.xml")
'networkSharesRestored = GetNetworkShareCount(DrivePath & "\PrintersRestored.xml")
GetOldPCComputerName(RootPath & "\OldPCName.txt")
GetRestoreProcessExitCode()
GetScanProcessExitCode(DrivePath & "\OSDSetupWizardOldPC.log")
WriteTSVariables()
'||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'Functions & Subroutines
'||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Function MBToTransfer(sSPFile)
Dim oFile, strContents, arrWords
Dim strWord, sTrim
Set oFile = FSO.OpenTextFile(sSPFile, ForReading)
strContents = oFile.ReadAll
oFile.Close
arrWords = Split(strContents, vbCr)
For Each strWord in arrWords
If InStr(strWord, "totalSizeInMBToTransfer") Then
'Wscript.echo strWord
sTrim = instrrev(strWord, "," )
'Wscript.echo sTrim
sProgressValue = Right(strWord,Len(strWord) -sTrim)
'Wscript.echo sProgressValue
End IF
Next
End Function
Function SPPercentComplete(sFile)
Dim oFile, strContents, arrWords
Set oFile = FSO.OpenTextFile(sFile, ForReading)
strContents = oFile.ReadAll
oFile.Close
arrWords = Split(strContents, vbCr)
dim arrCount 'as int
arrCount = Ubound(arrWords) -1
dim strSeq ' as string
strSeq = "totalPercentageCompleted"
dim i ' as int
' loop thru backwards to find sequence
for i = arrCount to 0 step -1
dim pos ' as int
pos = Instr( arrWords(i), strSeq )
if pos > 0 then
' ex: 15 Jan 2011, 20:46:21 -08:00, 00:04:48, totalPercentageCompleted, 48
dim tmpResult ' as string
tmpResult = Right ( arrWords(i), pos -1)
PercentageComplete = Right (tmpResult, 3)
SPPercentage = PercentageComplete
'Wscript.echo SPPercentage
exit for
end if
Next
End Function
Function LPPercentComplete(sFile)
Dim oFile, strContents, arrWords
Set oFile = FSO.OpenTextFile(sFile, ForReading)
' check if file exists
if FSO.FileExists(sFile) = False Then
Set PathEnv = CreateObject("Microsoft.SMS.TSEnvironment")
PathEnv("OSDLoadStateLogExists") = "False"
Exit Function
End If
strContents = oFile.ReadAll
oFile.Close
arrWords = Split(strContents, vbCr)
dim arrCount 'as int
arrCount = Ubound(arrWords) -1
dim strSeq ' as string
strSeq = "totalPercentageCompleted"
dim i ' as int
' loop thru backwards to find sequence
for i = arrCount to 0 step -1
dim pos ' as int
pos = Instr( arrWords(i), strSeq )
if pos > 0 then
' ex: 15 Jan 2011, 20:46:21 -08:00, 00:04:48, totalPercentageCompleted, 48
dim tmpResult ' as string
tmpResult = Right ( arrWords(i), pos -1)
PercentageComplete = Right (tmpResult, 3)
LPPercentage = PercentageComplete
'Wscript.echo LPPercentage
exit for
end if
Next
End Function
Function GetPrinetrsCount()
Dim objXMLDoc, Root, NodeList
Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
objXMLDoc.async = False
Dim sFile
sFile = DrivePath & "\PrinterList.xml"
' check if file exists
if FSO.FileExists(sFile) = False Then
sFile = RootPath & "\PrinterList.xml"
if FSO.FileExists(sFile) = False Then
Set PathEnv = CreateObject("Microsoft.SMS.TSEnvironment")
PathEnv("OSDGetPrintersLogExists") = "False"
Exit Function
End If
End If
If objXMLDoc.load(sFile) Then
Set Root = objXMLDoc.documentElement
Set NodeList = Root.getElementsByTagName("Printer")
' wscript.echo NodeList.length
GetPrinetrsCount = NodeList.length
Else
wscript.echo "Failed to load"
End If
Set objXMLDoc = Nothing
End Function
Function GetNetworkShareCount()
Dim objXMLDoc, Root, NodeList
Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
objXMLDoc.async = False
Dim sFile
sFile = DrivePath & "\PrinterList.xml"
' check if file exists
if FSO.FileExists(sFile) = False Then
sFile = RootPath & "\PrinterList.xml"
if FSO.FileExists(sFile) = False Then
Set PathEnv = CreateObject("Microsoft.SMS.TSEnvironment")
PathEnv("OSDGetPrintersLogExists") = "False"
Exit Function
End If
End If
If objXMLDoc.load(sFile) Then
Set Root = objXMLDoc.documentElement
Set NodeList = Root.getElementsByTagName("NetworkShare")
' wscript.echo NodeList.length
GetNetworkShareCount = NodeList.length
Else
wscript.echo "Failed to load"
End If
Set objXMLDoc = Nothing
End Function
Function GetOldPCComputerName(sFile)
Dim oFile, strContents, arrWords
Set oFile = FSO.OpenTextFile(sFile, ForReading)
'strContents = oFile.ReadAll
OldPCName = oFile.ReadLine
oFile.Close
End Function
Function GetRestoreProcessExitCode()
Dim smsFile
Dim oFile, strContents, arrLines, eachLine
Dim strWord, sTrim
Dim oFolder
Dim logFileName
''For each file that starts witj smsts*.log
Dim foundExitCode
foundExitCode = False
set oFolder = FSO.GetFolder(DrivePath)
For Each smsFile In oFolder.Files
If (foundExitCode = False) Then ' Skip if exit code already found
If ( UCase (Left (smsFile.Name, 5)) = "SMSTS" ) Then ' read only smsts files
logFileName = DrivePath & "\" & smsFile.Name
'smsFile = DrivePath & "\SMSTS.log"
Set oFile = FSO.OpenTextFile(logFileName, ForReading)
strContents = oFile.ReadAll
oFile.Close
arrLines = Split(strContents, vbCr)
For Each eachLine in arrLines
If (foundExitCode = False) Then
' <![LOG[LoadState return code: 0]LOG]!><time="21:05:56.124+480" date="02-19-2011" component="InstallSoftware" context="" type="1" thread="2776" file="runcommandline.cpp:34">
If InStr(eachLine, "LoadState return code:") Then
foundExitCode = True
sColon = instr(eachLine, ":" )
sTrim = instr(eachLine, "]" )
loadStateExitCode = Mid(eachLine,sColon+1 , sTrim-1-sColon )
' Wscript.echo loadStateExitCode
End If
End If
Next
End If
End If
Next
If (foundExitCode = False) Then
loadStateExitCode = 0
End If
End Function
Function GetScanProcessExitCode(smsFile)
Dim oFile, strContents, arrLines, eachLine
Dim strWord, sTrim
Dim foundExitCode
Set oFile = FSO.OpenTextFile(smsFile, ForReading,,true)
foundExitCode = False
strContents = oFile.ReadAll
oFile.Close
Dim sANSIFileName
Dim oANSIFile
sANSIFileName = DrivePath & "\OSDRefreshWizardANSI.log"
'OpenTextFile(destination, forwriting, createnew, open as Ascii)
Set oANSIFile = FSO.OpenTextFile(sANSIFileName, 2, True, False)
oANSIFile.Write strContents
oANSIFile.Close
Set oANSIFile = Nothing
Set oANSIFile = FSO.OpenTextFile(sANSIFileName, 1, , False)
strContents = oANSIFile.ReadAll
oANSIFile.Close
Set oANSIFile = Nothing
If FSO.FileExists(sANSIFileName) Then
FSO.DeleteFile sANSIFileName
' Wscript.echo "File deleted"
End If
arrLines = Split(strContents, vbCr)
For Each eachLine in arrLines
If (InStr(eachLine, USMTTaskname) > 0) Then
If (InStr(eachLine, "exit code =")) Then
foundExitCode = True
sTrim = instr(eachLine, "exit code =" )
' USMT log line from Wizard log:
' 18:18:58.906 02-15-2011 1 TaskManager Finished running task 'Run USMT'. Status = 'Error', exit code =26, task return code = 0
scanStateExitCode = Trim( Mid (eachLine, sTrim+11, Instr(sTrim,eachLine,",")-(sTrim+11) ) )
'Wscript.echo "Scan process Exit code :" & scanStateExitCode
End IF
End IF
Next
' If (foundExitCode = False) Then
' scanStateExitCode = 0
' End If
End Function
Sub WriteTSVariables()
dim Env
dim UserStateLocal
dim UserStateNetwork
dim UserStateUSB
dim osd:
set Env = CreateObject("Microsoft.SMS.TSEnvironment")
' Set a variable in the Operating System Deployment environment.
Env("OSDDataMigrationToTransfer") = sProgressValue
Env("OSDDataMigrationScanned") = SPPercentage
'If loadstateExitCode is '0' then set loadtstate percentage to 100
'as loadstate.exe is not logging 100% in its Loadprogress log eventhough it completed succesfully
If (loadStateExitCode = 0 ) Then
LPPercentage = "100"
End IF
Env("OSDDataMigrationRestored") = LPPercentage
Env("OSDNumberOfPrintersCaptured") = printersCaptured
Env("OSDNumberOfNetworkSharesCaptured") = networkSharesCaptured
' Env("OSDNumberOfPrintersRestored") = printersRestored
' Env("OSDNumberOfNetworkSharesRestored") = networkSharesRestored
Env("OSDOldComputerName") = OldPCName
'OSDDataSourceDrive
If ( Env("OSDHardLinks") = "TRUE") Then
Env("OSDDataTransferType") = "Local"
ElseIf Env("SMSConnectNetworkFolderPath") <> "" Then
Env("OSDDataTransferType") = "Network"
ElseIf Env("OSDDataSourceDrive") <> "" Then
Env ("OSDDataTransferType") = "USB"
Else
Env ("OSDDataTransferType") = "False"
End If
Env("OSDCaptureProcessExitCode") = scanStateExitCode
Env("OSDRestoreProcessExitCode") = loadStateExitCode
End Sub
Sub FindPath()
Dim PathEnv
Set PathEnv = CreateObject("Microsoft.SMS.TSEnvironment")
' You can query the environment to get an existing USB path variable.
'DrivePath = PathEnv("OSDStateStorePath") & "\" & PathEnv("OSDDataSourceDirectory")
'LogsPath = PathEnv("_SMSTSLogPath")
DrivePath = PathEnv("OSDStateStorePath") & "\SCCMLogs"
RootPath = PathEnv("OSDStateStorePath")
'wscript.echo DrivePath
End Sub
'' SIG '' Begin signature block
'' SIG '' MIIaWgYJKoZIhvcNAQcCoIIaSzCCGkcCAQExCzAJBgUr
'' SIG '' DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
'' SIG '' gjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIBAAIB
'' SIG '' AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFFaxvnpuW8HZ
'' SIG '' 8tA6Jsv8VrUFbpHgoIIVNjCCBKkwggORoAMCAQICEzMA
'' SIG '' AACIWQ48UR/iamcAAQAAAIgwDQYJKoZIhvcNAQEFBQAw
'' SIG '' eTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWlj
'' SIG '' cm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EwHhcNMTIwNzI2
'' SIG '' MjA1MDQxWhcNMTMxMDI2MjA1MDQxWjCBgzELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjENMAsGA1UECxMETU9QUjEeMBwGA1UE
'' SIG '' AxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMIIBIjANBgkq
'' SIG '' hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3R00II8h6ea
'' SIG '' 1I6yBEKAlyUu5EHOk2M2XxPytHiYgMYofsyKE+89N4w7
'' SIG '' CaDYFMVcXtipHX8BwbOYG1B37P7qfEXPf+EhDsWEyp8P
'' SIG '' a7MJOLd0xFcevvBIqHla3w6bHJqovMhStQxpj4TOcVV7
'' SIG '' /wkgv0B3NyEwdFuV33fLoOXBchIGPfLIVWyvwftqFifI
'' SIG '' 9bNh49nOGw8e9OTNTDRsPkcR5wIrXxR6BAf11z2L22d9
'' SIG '' Vz41622NAUCNGoeW4g93TIm6OJz7jgKR2yIP5dA2qbg3
'' SIG '' RdAq/JaNwWBxM6WIsfbCBDCHW8PXL7J5EdiLZWKiihFm
'' SIG '' XX5/BXpzih96heXNKBDRPQIDAQABo4IBHTCCARkwEwYD
'' SIG '' VR0lBAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYEFCZbPltd
'' SIG '' ll/i93eIf15FU1ioLlu4MA4GA1UdDwEB/wQEAwIHgDAf
'' SIG '' BgNVHSMEGDAWgBTLEejK0rQWWAHJNy4zFha5TJoKHzBW
'' SIG '' BgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RT
'' SIG '' aWdQQ0FfMDgtMzEtMjAxMC5jcmwwWgYIKwYBBQUHAQEE
'' SIG '' TjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8w
'' SIG '' OC0zMS0yMDEwLmNydDANBgkqhkiG9w0BAQUFAAOCAQEA
'' SIG '' D95ASYiR0TE3o0Q4abJqK9SR+2iFrli7HgyPVvqZ18qX
'' SIG '' J0zohY55aSzkvZY/5XBml5UwZSmtxsqs9Q95qGe/afQP
'' SIG '' l+MKD7/ulnYpsiLQM8b/i0mtrrL9vyXq7ydQwOsZ+Bpk
'' SIG '' aqDhF1mv8c/sgaiJ6LHSFAbjam10UmTalpQqXGlrH+0F
'' SIG '' mRrc6GWqiBsVlRrTpFGW/VWV+GONnxQMsZ5/SgT/w2at
'' SIG '' Cq+upN5j+vDqw7Oy64fbxTittnPSeGTq7CFbazvWRCL0
'' SIG '' gVKlK0MpiwyhKnGCQsurG37Upaet9973RprOQznoKlPt
'' SIG '' z0Dkd4hCv0cW4KU2au+nGo06PTME9iUgIzCCBLowggOi
'' SIG '' oAMCAQICCmECkkoAAAAAACAwDQYJKoZIhvcNAQEFBQAw
'' SIG '' dzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWlj
'' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgUENBMB4XDTEyMDEwOTIy
'' SIG '' MjU1OVoXDTEzMDQwOTIyMjU1OVowgbMxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xDTALBgNVBAsTBE1PUFIxJzAlBgNVBAsT
'' SIG '' Hm5DaXBoZXIgRFNFIEVTTjpCOEVDLTMwQTQtNzE0NDEl
'' SIG '' MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
'' SIG '' dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
'' SIG '' ggEBAM1jw/eitUfZ+TmUU6xrj6Z5OCH00W49FTgWwXMs
'' SIG '' mY/74Dxb4aJMi7Kri7TySse5k1DRJvWHU7B6dfNHDxcr
'' SIG '' Zyxk62DnSozgi17EVmk3OioEXRcByL+pt9PJq6ORqIHj
'' SIG '' Py232OTEeAB5Oc/9x2TiIxJ4ngx2J0mPmqwOdOMGVVVJ
'' SIG '' yO2hfHBFYX6ycRYe4cFBudLSMulSJPM2UATX3W88SdUL
'' SIG '' 1HZA/GVlE36VUTrV/7iap1drSxXlN1gf3AANxa7q34FH
'' SIG '' +fBSrubPWqzgFEqmcZSA+v2wIzBg6YNgrA4kHv8R8uel
'' SIG '' VWKV7p9/ninWzUsKdoPwQwTfBkkg8lNaRLBRejkCAwEA
'' SIG '' AaOCAQkwggEFMB0GA1UdDgQWBBTNGaxhTZRnK/avlHVZ
'' SIG '' 2/BYAIOhOjAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7
'' SIG '' syuwwzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
'' SIG '' Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
'' SIG '' cy9NaWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsG
'' SIG '' AQUFBwEBBEwwSjBIBggrBgEFBQcwAoY8aHR0cDovL3d3
'' SIG '' dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3Nv
'' SIG '' ZnRUaW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsG
'' SIG '' AQUFBwMIMA0GCSqGSIb3DQEBBQUAA4IBAQBRHNbfNh3c
'' SIG '' gLwCp8aZ3xbIkAZpFZoyufNkENKK82IpG3mPymCps13E
'' SIG '' 5BYtNYxEm/H0XGGkQa6ai7pQ0Wp5arNijJ1NUVALqY7U
'' SIG '' v6IQwEfVTnVSiR4/lmqPLkAUBnLuP3BZkl2F7YOZ+oKE
'' SIG '' nuQDASETqyfWzHFJ5dod/288CU7VjWboDMl/7jEUAjdf
'' SIG '' e2nsiT5FfyVE5x8a1sUaw0rk4fGEmOdP+amYpxhG7IRs
'' SIG '' 7KkDCv18elIdnGukqA+YkqSSeFwreON9ssfZtnB931tz
'' SIG '' U7+q1GZQS/DJO5WF5cFKZZ0lWFC7IFSReTobB1xqVyiv
'' SIG '' Mcef58Md7kf9J9d/z3TcZcU/MIIFvDCCA6SgAwIBAgIK
'' SIG '' YTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYK
'' SIG '' CZImiZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJ
'' SIG '' bWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9v
'' SIG '' dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx
'' SIG '' MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQG
'' SIG '' EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
'' SIG '' BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
'' SIG '' cnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29k
'' SIG '' ZSBTaWduaW5nIFBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
'' SIG '' ggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBCmXZTbD4b
'' SIG '' 1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1
'' SIG '' VwqJyq4gSfTwaKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNE
'' SIG '' f9eB2/O98jakyVxF3K+tPeAoaJcap6Vyc1bxF5Tk/TWU
'' SIG '' cqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2
'' SIG '' L1TdFDBZ+NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049
'' SIG '' oDI9kM2hOAaFXE5WgigqBTK3S9dPY+fSLWLxRT3nrAgA
'' SIG '' 9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzB
'' SIG '' rAlfA9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMB
'' SIG '' Af8wHQYDVR0OBBYEFMsR6MrStBZYAck3LjMWFrlMmgof
'' SIG '' MAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB
'' SIG '' MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+m
'' SIG '' PLzYLTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAf
'' SIG '' BgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnkpDBQ
'' SIG '' BgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9taWNyb3Nv
'' SIG '' ZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQG
'' SIG '' CCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpL2NlcnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNy
'' SIG '' dDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+fyZGr+tvQLEy
'' SIG '' tWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAh
'' SIG '' Xaw9L0y6oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6Wc
'' SIG '' IC36C1DEVs0t40rSvHDnqA2iA6VW4LiKS1fylUKc8fPv
'' SIG '' 7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WR
'' SIG '' Tsgb0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZE
'' SIG '' olHN+emjWFbdmwJFRC9f9Nqu1IIybvyklRPk62nnqaIs
'' SIG '' vsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ
'' SIG '' NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxP
'' SIG '' bQ4TTj18KUicctHzbMrB7HCjV5JXfZSNoBtIA1r3z6Nn
'' SIG '' CnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDordEN5k
'' SIG '' 9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7
'' SIG '' B2BHZWBATrBC7E7ts3Z52Ao0CW0cgDEf4g5U3eWh++VH
'' SIG '' EK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jshrg1cnPCi
'' SIG '' roZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONx
'' SIG '' PdcAfmJH0c6IybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3
'' SIG '' UAjWwz0wggYHMIID76ADAgECAgphFmg0AAAAAAAcMA0G
'' SIG '' CSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNj
'' SIG '' b20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTAr
'' SIG '' BgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRl
'' SIG '' IEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0
'' SIG '' MDMxMzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
'' SIG '' EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
'' SIG '' HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
'' SIG '' BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCC
'' SIG '' ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+h
'' SIG '' bLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn0Uyt
'' SIG '' dDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4E
'' SIG '' mPCJzB/LMySHnfL0Zxws/HvniB3q506jocEjU8qN+kXP
'' SIG '' CdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4nrIZPVVIM
'' SIG '' 5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0
'' SIG '' RZCfSABKR2YRJylmqJfk0waBSqL5hKcRRxQJgp+E7VV4
'' SIG '' /gGaHVAIhQAQMEbtt94jRrvELVSfrx54QTF3zJvfO4OT
'' SIG '' oWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAasw
'' SIG '' ggGnMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0
'' SIG '' +NlSRnAK7UD7dvuzK7DDNbMPMAsGA1UdDwQEAwIBhjAQ
'' SIG '' BgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQO
'' SIG '' rIJgQFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmS
'' SIG '' JomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1p
'' SIG '' Y3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxz
'' SIG '' WPQHEy5lMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9j
'' SIG '' cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
'' SIG '' L21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcB
'' SIG '' AQRIMEYwRAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWlj
'' SIG '' cm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9v
'' SIG '' dENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0G
'' SIG '' CSqGSIb3DQEBBQUAA4ICAQAQl4rDXANENt3ptK132855
'' SIG '' UU0BsS50cVttDBOrzr57j7gu1BKijG1iuFcCy04gE1CZ
'' SIG '' 3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji
'' SIG '' 8FMV3U+rkuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZ
'' SIG '' Lg33B+JwvBhOnY5rCnKVuKE5nGctxVEO6mJcPxaYiyA/
'' SIG '' 4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tO
'' SIG '' i3/FNSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLa
'' SIG '' FJj1PLlmWLMtL+f5hYbMUVbonXCUbKw5TNT2eb+qGHpi
'' SIG '' Ke+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0
'' SIG '' NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCe
'' SIG '' FTBm6EISXhrIniIh0EPpK+m79EjMLNTYMoBMJipIJF9a
'' SIG '' 6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2JoXZh
'' SIG '' tG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0t
'' SIG '' r1mPuOQh5bWwymO0eFQF1EEuUKyUsKV4q7OglnUa2ZKH
'' SIG '' E3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng9wFlb4kL
'' SIG '' fchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj
'' SIG '' /TGCBJAwggSMAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25p
'' SIG '' bmcgUENBAhMzAAAAiFkOPFEf4mpnAAEAAACIMAkGBSsO
'' SIG '' AwIaBQCggbIwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcC
'' SIG '' AQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUw
'' SIG '' IwYJKoZIhvcNAQkEMRYEFDCb68aYvJXTJk85te1S+jtL
'' SIG '' p6R3MFIGCisGAQQBgjcCAQwxRDBCoCSAIgBNAEQAVAAg
'' SIG '' AFUARABJAHYAMwAgAFQAbwBvAGwAawBpAHShGoAYaHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEB
'' SIG '' AQUABIIBAC2wt4LWetaiN5s5taPNIuONv/wy/ALEOHOl
'' SIG '' WeuIpfFOvB0FroigolElIoXt5yS0/HURqddV2/XaRGtp
'' SIG '' 4ArfLvig8dH4f45GqZGqJY47yLZ8DcbTM6a/rRY8mULM
'' SIG '' lIkoga+kyGIYCKzakA8BhjQhnUMEKxij2XcIjR9O94Je
'' SIG '' EcsdwrVMpawBQGBABytnryDRPfMx5Yma0k7QTZKHLpsh
'' SIG '' WZTE2vZsQcXpv1HgROTdu6q5vmvUrBQNe15WagmJcRyB
'' SIG '' 3H4S18KXgwrX+GtXwnS1DFBpr1/KQy64jirPGxxZUgLv
'' SIG '' jRkyw8WJzcmr2hto/b0tlSJM8RdTV4QkIXa4zKpaO8Ch
'' SIG '' ggIfMIICGwYJKoZIhvcNAQkGMYICDDCCAggCAQEwgYUw
'' SIG '' dzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWlj
'' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgUENBAgphApJKAAAAAAAg
'' SIG '' MAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZI
'' SIG '' hvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xMjA4MzAxOTU3
'' SIG '' MDJaMCMGCSqGSIb3DQEJBDEWBBQSsdjxpnzU2D5eVlFt
'' SIG '' THUnRymRgzANBgkqhkiG9w0BAQUFAASCAQBm0kyC9w3a
'' SIG '' ZP0pl4LoFNeXiaLocsnzlxwVi5kAPrz02kJhezNjxWsM
'' SIG '' oLKvnVYGnEFPNE2yPI7XPDJCfTjqSzyBCFs1AkhPnA0v
'' SIG '' 9Pl3TGn8aR7thx2sAvD9kNtEr1lmWtqlK8ZnAPPmRIXk
'' SIG '' czEIyns4hkA1+CMTnbP1h2VKE/ZkoOx05mmQ6bOyQaEL
'' SIG '' WXMc31LPXPND2k43gQ7WMg5jheUQgKj7sjpIzEt52jOc
'' SIG '' x6eGHOGZc58h0ORRLxRbz3K7bnWt3SrN06O97n0G0sWy
'' SIG '' fiShI4SClvWn7WRqBqKIWisJctT6T9Y7pHFQx0d2G2qs
'' SIG '' nttbeH2riP6tcsV6pD631Sbd
'' SIG '' End signature block