' Windows Installer utility to generate a transform from two databases
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates use of Database.GenerateTransform and MsiDatabaseGenerateTransform
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3

If Wscript.Arguments.Count < 2 Then
	Wscript.Echo "Windows Installer database tranform generation utility" &_
		vbNewLine & " 1st argument is the path to the original installer database" &_
		vbNewLine & " 2nd argument is the path to the updated installer database" &_
		vbNewLine & " 3rd argument is the path to the transform file to generate" &_
		vbNewLine & " If the 3rd argument is omitted, the databases are only compared" &_
		vbNewLine &_
		vbNewLine & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Connect to Windows Installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open databases and generate transform
Dim database1 : Set database1 = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeReadOnly) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(Wscript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim transform:transform = ""  'Simply compare if no output transform file supplied
If Wscript.Arguments.Count >= 3 Then transform = Wscript.Arguments(2)
Dim different:different = Database2.GenerateTransform(Database1, transform) : CheckError
If Not different Then Wscript.Echo "Databases are identical" Else If transform = Empty Then Wscript.Echo "Databases are different"

Sub CheckError
	Dim message, errRec
	If Err = 0 Then Exit Sub
	message = Err.Source & " " & Hex(Err) & ": " & Err.Description
	If Not installer Is Nothing Then
		Set errRec = installer.LastErrorRecord
		If Not errRec Is Nothing Then message = message & vbNewLine & errRec.FormatText
	End If
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIImSwYJKoZIhvcNAQcCoIImPDCCJjgCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' LEOvI1OL4Ms+i8VD+9Lv0JnljZ8+Z42whrFijf9Ua/Cg
'' SIG '' gguBMIIFCTCCA/GgAwIBAgITMwAABXwzcc9L673fygAA
'' SIG '' AAAFfDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTI0MDQyNDIwMjA0NloX
'' SIG '' DTI1MDQxOTIwMjA0NlowfzELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEpMCcGA1UEAxMgTWljcm9zb2Z0IFdpbmRvd3MgS2l0
'' SIG '' cyBQdWJsaXNoZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
'' SIG '' DwAwggEKAoIBAQDuXrTpeGqa9J5HOOYHUPYdqaUaLkRs
'' SIG '' zxXXZ8vW6hKNpSbkHFsB1K8mlscbD29EryD2l9f3JRnx
'' SIG '' qDEzY5dGhp8MvGO1FhuJURH5Zkpt2Dce8B05RAw9gVVI
'' SIG '' 6ODjSZFbra/wKR3b+NNOabK9eB99SCzUBmv6Kh/bYdeR
'' SIG '' oh5yjYPJIL2FEBOh1jtUq6d7zlgXdI+ajekWsLULwtwy
'' SIG '' Y5xTx9CuCzqKxFyRZTkdZTfBVJXPlUuFFyI39wp2b0KW
'' SIG '' Bg8vuIux8i9GAzTZOTsmlbd+808Y8/Mxt7z2j10IEBx3
'' SIG '' wdScRCXgOYH0b4kDbARgYA/JXZlWrEKbIomQcfjFgl3k
'' SIG '' qJs9AgMBAAGjggF9MIIBeTAfBgNVHSUEGDAWBgorBgEE
'' SIG '' AYI3CgMUBggrBgEFBQcDAzAdBgNVHQ4EFgQUjr/0Zy+p
'' SIG '' LzaM7/6H0aEaoBark5swVAYDVR0RBE0wS6RJMEcxLTAr
'' SIG '' BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv
'' SIG '' bnMgTGltaXRlZDEWMBQGA1UEBRMNMjI5OTAzKzUwMjIz
'' SIG '' NDAfBgNVHSMEGDAWgBTm/F97uyIAWORyTrX0IXQjMubv
'' SIG '' rDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWND
'' SIG '' b2RTaWdQQ0FfMjAxMC0wNy0wNi5jcmwwWgYIKwYBBQUH
'' SIG '' AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BD
'' SIG '' QV8yMDEwLTA3LTA2LmNydDAMBgNVHRMBAf8EAjAAMA0G
'' SIG '' CSqGSIb3DQEBCwUAA4IBAQC3ldMZx+mZuf+EY2cLU0CN
'' SIG '' baZL8/85vD6tWvmuwfpBlQMgcrofbyDfuveWw4HqOJht
'' SIG '' 1/UcW3dHuG/UQEzHGFPlL8ZwWonopyWGWyzELA2YQwXq
'' SIG '' RAwlFFbxLwQrAWY1QQw+X0R6mt2+3EpWd0HRusSrExZn
'' SIG '' dUxI3u0OY4KJ1ZMNeddkKR6o4BRmh8hTYhr2edYFfkYX
'' SIG '' MuhoSzCXZqexUhCgIMWuP3XiFDIuteaRlcKfuq2eV+y3
'' SIG '' bXadRbJu0TPbmsY1f4ms+an/4RSS271XGbR5R4zMKWRP
'' SIG '' hbfdU1W1R88jAf4+ziOfF0ZfLHKt25fw/X1d4xbx4Cwx
'' SIG '' o3XDRA6EyM7YMIIGcDCCBFigAwIBAgIKYQxSTAAAAAAA
'' SIG '' AzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2Vy
'' SIG '' dGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzA2
'' SIG '' MjA0MDE3WhcNMjUwNzA2MjA1MDE3WjB+MQswCQYDVQQG
'' SIG '' EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
'' SIG '' BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
'' SIG '' cnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29k
'' SIG '' ZSBTaWduaW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0B
'' SIG '' AQEFAAOCAQ8AMIIBCgKCAQEA6Q5kUHlntcTj/QkATJ6U
'' SIG '' rPdWaOpE2M/FWE+ppXZ8bUW60zmStKQe+fllguQX0o/9
'' SIG '' RJwI6GWTzixVhL99COMuK6hBKxi3oktuSUxrFQfe0dLC
'' SIG '' iR5xlM21f0u0rwjYzIjWaxeUOpPOJj/s5v40mFfVHV1J
'' SIG '' 9rIqLtWFu1k/+JC0K4N0yiuzO0bj8EZJwRdmVMkcvR3E
'' SIG '' VWJXcvhnuSUgNN5dpqWVXqsogM3Vsp7lA7Vj07IUyMHI
'' SIG '' iiYKWX8H7P8O7YASNUwSpr5SW/Wm2uCLC0h31oVH1RC5
'' SIG '' xuiq7otqLQVcYMa0KlucIxxfReMaFB5vN8sZM4BqiU2j
'' SIG '' amZjeJPVMM+VHwIDAQABo4IB4zCCAd8wEAYJKwYBBAGC
'' SIG '' NxUBBAMCAQAwHQYDVR0OBBYEFOb8X3u7IgBY5HJOtfQh
'' SIG '' dCMy5u+sMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB
'' SIG '' MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MIGdBgNVHSAEgZUwgZIwgY8GCSsG
'' SIG '' AQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3
'' SIG '' dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZh
'' SIG '' dWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBh
'' SIG '' AGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUA
'' SIG '' bgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAGnTvV08p
'' SIG '' e8QWhXi4UNMi/AmdrIKX+DT/KiyXlRLl5L/Pv5PI4zSp
'' SIG '' 24G43B4AvtI1b6/lf3mVd+UC1PHr2M1OHhthosJaIxrw
'' SIG '' jKhiUUVnCOM/PB6T+DCFF8g5QKbXDrMhKeWloWmMIpPM
'' SIG '' dJjnoUdD8lOswA8waX/+0iUgbW9h098H1dlyACxphnY9
'' SIG '' UdumOUjJN2FtB91TGcun1mHCv+KDqw/ga5uV1n0oUbCJ
'' SIG '' SlGkmmzItx9KGg5pqdfcwX7RSXCqtq27ckdjF/qm1qKm
'' SIG '' huyoEESbY7ayaYkGx0aGehg/6MUdIdV7+QIjLcVBy78d
'' SIG '' TMgW77Gcf/wiS0mKbhXjpn92W9FTeZGFndXS2z1zNfM8
'' SIG '' rlSyUkdqwKoTldKOEdqZZ14yjPs3hdHcdYWch8ZaV4XC
'' SIG '' v90Nj4ybLeu07s8n07VeafqkFgQBpyRnc89NT7beBVaX
'' SIG '' evfpUk30dwVPhcbYC/GO7UIJ0Q124yNWeCImNr7KsYxu
'' SIG '' qh3khdpHM2KPpMmRM19xHkCvmGXJIuhCISWKHC1g2TeJ
'' SIG '' QYkqFg/XYTyUaGBS79ZHmaCAQO4VgXc+nOBTGBpQHTiV
'' SIG '' mx5mMxMnORd4hzbOTsNfsvU9R1O24OXbC2E9KteSLM43
'' SIG '' Wj5AQjGkHxAIwlacvyRdUQKdannSF9PawZSOB3slcUSr
'' SIG '' Bmrm1MbfI5qWdcUxghoiMIIaHgIBATCBlTB+MQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
'' SIG '' Q29kZSBTaWduaW5nIFBDQSAyMDEwAhMzAAAFfDNxz0vr
'' SIG '' vd/KAAAAAAV8MA0GCWCGSAFlAwQCAQUAoIHGMBkGCSqG
'' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
'' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEi
'' SIG '' BCCA3zro2lLseLGO2M/3aSmOZAVhoekEC6Ojv4plXA2W
'' SIG '' hzBaBgorBgEEAYI3AgEMMUwwSqAkgCIATQBpAGMAcgBv
'' SIG '' AHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqG
'' SIG '' SIb3DQEBAQUABIIBABDdkd2kXvJ5M+1O/ltA5iFAglrT
'' SIG '' xj3DK0G1Wc7rgxw5TZCly7Tn599CziJKAn49gMRLQA3f
'' SIG '' 8i/qauP3VpPbIyIwQ7QvEYRM9kh/DvQuQeA/WXPENLr2
'' SIG '' d8C+dDcmX7//OnrXF0RQ+K1DC4zoGJc7+ivibH74frN/
'' SIG '' qasQ4CagIGZmPoULqmKA0BgwJfa6ZsPfokyiP1zujEwM
'' SIG '' 9MDc0qYAl9HpzFPdIFJiVJnRv6AOBpAE0714mTqTAGi6
'' SIG '' dVywZZ90HFCNoUwO87BmeN+3Q6tglSxva0I5y7kt22+q
'' SIG '' /vyAh8Wrchw4XojY1fpt7wwepVAYHF4MYXnTq9EjP5Jg
'' SIG '' BpJDBoOhgheUMIIXkAYKKwYBBAGCNwMDATGCF4Awghd8
'' SIG '' BgkqhkiG9w0BBwKgghdtMIIXaQIBAzEPMA0GCWCGSAFl
'' SIG '' AwQCAQUAMIIBUgYLKoZIhvcNAQkQAQSgggFBBIIBPTCC
'' SIG '' ATkCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF
'' SIG '' AAQgRPt7Q9Ce1aa3/6wFS7Wyruev7vI8lACGgB3/Sc2u
'' SIG '' 3tYCBme3qdn+2BgTMjAyNTAzMTIxMTE1MDIuMjU5WjAE
'' SIG '' gAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEl
'' SIG '' MCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0
'' SIG '' aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdG
'' SIG '' MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg
'' SIG '' VGltZS1TdGFtcCBTZXJ2aWNloIIR6jCCByAwggUIoAMC
'' SIG '' AQICEzMAAAIG17xROJgj7CwAAQAAAgYwDQYJKoZIhvcN
'' SIG '' AQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
'' SIG '' HhcNMjUwMTMwMTk0MjUwWhcNMjYwNDIyMTk0MjUwWjCB
'' SIG '' yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
'' SIG '' cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UE
'' SIG '' CxMeblNoaWVsZCBUU1MgRVNOOjdGMDAtMDVFMC1EOTQ3
'' SIG '' MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
'' SIG '' ZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
'' SIG '' CgKCAgEA6USFmyDN0Za9/e3Ix2mMfOZeyPmVVhjAgQjP
'' SIG '' ddQaVOviBlgqpLKoKnn2RRIyszVQ2AvWHICEwM9u+jRo
'' SIG '' LxApuGXzb/xT8HGkg8+8Ww27DqMW8EKB1DUa6Psebm2Y
'' SIG '' U+liXlPexdOvrw4wMP2Ldb1joEU6pj/3Ta/aKiGxOaAi
'' SIG '' 2HR98CP56GJrCVXO/eup/ge1ABgFlNrHty8/sXcZzbDV
'' SIG '' +AkesyDFSU0nsz/9kkzXMSU7vZNrJe/78zocSYQkN/K3
'' SIG '' WhKKoRh6165lZBIUr/ktNAzCXNTiF8an28D4zKhFaeyt
'' SIG '' 5JnMwpG7ptQTiCdsLgwGyriXpabXjWY/0ufDUkMOpIX7
'' SIG '' iQJbqhyt4oJEvzrsePakz/q1Pj0Hjbg/hrawqKRbnEZm
'' SIG '' p0L8SEhjaMZwat1Hg06qYZumiOxjB7RQ+gzoyZZZR9YF
'' SIG '' Vlz08or3/uLTfE5jusiIAeLj9NGx/Y5/3cssUo8T0Npx
'' SIG '' r2bYLap76t4d00Y0Z5HPntVwdbmrQ2tc1HEu694qHU6c
'' SIG '' gE3toYJFV95uA4UcyOgOEien2yTPYrCx/ABinMporCs2
'' SIG '' LqQHhUkyddCRBWujIx0GGKIaAhe+0dAgsDDY7xOF3yx7
'' SIG '' vqij2PBkH7GXYoEPXJVAIsnRZlbetYcraMWT+y5l284w
'' SIG '' 9FXnMs2aC+BKrtV7MwbLpQK+S3disHMCAwEAAaOCAUkw
'' SIG '' ggFFMB0GA1UdDgQWBBTtMLCynQxqU/e3MdyMpsqP0gZu
'' SIG '' EjAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnp
'' SIG '' cjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl
'' SIG '' MjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmww
'' SIG '' bAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
'' SIG '' L01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAy
'' SIG '' MDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB
'' SIG '' /wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDAN
'' SIG '' BgkqhkiG9w0BAQsFAAOCAgEAdtxmTn3vU4U1Lw9vYuLe
'' SIG '' pQ6cSYaVUTJnvlG8mYQRQmYaBk7Yw3aYQAK1NkOtVmIN
'' SIG '' 2FXJdkXSZuT1G2dmwO+85PqrS8Qvt3TcVbE3HbcTw0kl
'' SIG '' oMAR8U4+qQpqAzV6JQGLFqbx0BQhw6hHwIgcV9XZml24
'' SIG '' kz9XdF3374EenbIVHKmh/5hX4w2QMS1NbOh3FYArwUCZ
'' SIG '' Se8RBuYxSnbamqSlnG1B8E1al0BmyJR1QpTSd8qlumd1
'' SIG '' CR/whXGIi1f3uvLq05hrYmcRkmG+EgUjwK0602HhzpUC
'' SIG '' I/+5aFVpn1l9suABlfw/jM8mTMrxcOFci9FYKvehM0Cs
'' SIG '' rXolXgWlRI8UCqNwHD1C0ReFM8/fD9rQjOV2xWd0KI/T
'' SIG '' y4N64BV69KCRIX4dralK4UyXdd/ouP33pPc1onKLIZcF
'' SIG '' 4BbtNNmVgVcwEhBbqhA+PKsrpWf9oxiQXLWvhXZNpaD9
'' SIG '' it6Eo+D0EHtTM81WTudgFzuNjB5YZt0h6N/0YUPiNQND
'' SIG '' cvvbgHoZEB+i68ZK1Tb2RuH9DwCjG6lHFxu8c5yidMdB
'' SIG '' 2K+WslhmxymUXDm1Pv9+GaS/Ta1znnVQ15kndspSkpf7
'' SIG '' 74tUMDSalyZf/oCZEBHraphwFBUJBbXpovDFF0BtsP0Q
'' SIG '' x118FgIxPqiA2S0P5OM9mdterVmkekQyhxpMHgqA7ULc
'' SIG '' 5B0wggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAA
'' SIG '' AAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBD
'' SIG '' ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5
'' SIG '' MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0B
'' SIG '' AQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5
'' SIG '' vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/
'' SIG '' XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9
'' SIG '' alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3X
'' SIG '' D9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62A
'' SIG '' W36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTj
'' SIG '' kY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP
'' SIG '' 3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxP
'' SIG '' LOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9z
'' SIG '' fUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuq
'' SIG '' fjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY
'' SIG '' 7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG
'' SIG '' 4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28M
'' SIG '' yTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb
'' SIG '' 0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReT
'' SIG '' wDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3Pmri
'' SIG '' Lq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMB
'' SIG '' AAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUp
'' SIG '' zxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtT
'' SIG '' NRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBB
'' SIG '' MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29m
'' SIG '' dC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQC
'' SIG '' BAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
'' SIG '' EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxi
'' SIG '' aNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0
'' SIG '' cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJv
'' SIG '' ZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3Js
'' SIG '' MFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9N
'' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZI
'' SIG '' hvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/yp
'' SIG '' b+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27
'' SIG '' DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYA
'' SIG '' A7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0j
'' SIG '' VOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCg
'' SIG '' vxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn
'' SIG '' 8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb
'' SIG '' 30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0
'' SIG '' /fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkct
'' SIG '' wRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmR
'' SIG '' aw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d
'' SIG '' 0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+
'' SIG '' k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQ
'' SIG '' KBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdC
'' SIG '' PSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6
'' SIG '' CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYID
'' SIG '' TTCCAjUCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh
'' SIG '' IE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNT
'' SIG '' IEVTTjo3RjAwLTA1RTAtRDk0NzElMCMGA1UEAxMcTWlj
'' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG
'' SIG '' BSsOAwIaAxUABGtH9dfFxzP1TXaigbOEF8TZzfeggYMw
'' SIG '' gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
'' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
'' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
'' SIG '' Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN
'' SIG '' BgkqhkiG9w0BAQsFAAIFAOt73DAwIhgPMjAyNTAzMTIx
'' SIG '' MDEwNTZaGA8yMDI1MDMxMzEwMTA1NlowdDA6BgorBgEE
'' SIG '' AYRZCgQBMSwwKjAKAgUA63vcMAIBADAHAgEAAgICkjAH
'' SIG '' AgEAAgIS7DAKAgUA630tsAIBADA2BgorBgEEAYRZCgQC
'' SIG '' MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQow
'' SIG '' CAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQCSAWEk
'' SIG '' DCgJO1lO1InnlgGylOUyuf1TpdsQ0mCusfQfU+J2anjo
'' SIG '' Xb7OMpX42pxfue5qmivKSNMfGfwktcoqrM5VM8E2JBl/
'' SIG '' ZOGZLnHAFxu7Pvvti95DSaQBkb/P4Erbo3jz0GofrfRQ
'' SIG '' LIlr9Wp2EzOU7hi0zdhcEAorHW/8Ai6ZTcB+veVLIWj2
'' SIG '' oLBisYTiUh0x3lDynzvyGeFsqRT+pXnNQnFTtsKOXfQA
'' SIG '' tsWmiy7cv/PYPlfXceI5gAJbuQLnkSJBa4S68PP1aLWF
'' SIG '' ZaF7UbAYufvyz6YNfxDzKWdJuY02hhIy9k6/m5gWnJ0h
'' SIG '' 6GV0qfNSFUZZNwUGcwilSUtacXBzMYIEDTCCBAkCAQEw
'' SIG '' gZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
'' SIG '' TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMA
'' SIG '' AAIG17xROJgj7CwAAQAAAgYwDQYJYIZIAWUDBAIBBQCg
'' SIG '' ggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAv
'' SIG '' BgkqhkiG9w0BCQQxIgQgchzrw01sJie/nyKqt2qCfygk
'' SIG '' DD61W2E3em0FI8TUn98wgfoGCyqGSIb3DQEJEAIvMYHq
'' SIG '' MIHnMIHkMIG9BCDg6PWUiJGenVbSk/hP7mcdlgMuyolz
'' SIG '' OUdSSDoTSX9L0jCBmDCBgKR+MHwxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0
'' SIG '' YW1wIFBDQSAyMDEwAhMzAAACBte8UTiYI+wsAAEAAAIG
'' SIG '' MCIEIKK1rh0a7DpdMfAOY03o3qd9ekDvV3I9LPwuy5g4
'' SIG '' UfXvMA0GCSqGSIb3DQEBCwUABIICAHBtXa2EPIFCAMcc
'' SIG '' /vBuRU20jf/i5QZ5L8nWb3TlHmwIO+MUx0VBfz7yEpXE
'' SIG '' soerMUtYPvvVXBR/UganFqGDtJzB4n1hkO4uk9X8XAbH
'' SIG '' 0E3H9o/Ef+JK6gdD5CxC90yLNdQ63VCpbx99rzR8AWgr
'' SIG '' o/87Auxl9nWEvKDJL7OjY8ZWmTx+iTkfk4ThrsuuglU4
'' SIG '' 8guEPVQmEWSr40NrQx+tkVl0FMeIhYwWXVgekQ/uiIpL
'' SIG '' DDacmoM5OtGBCvAoEyKq5qOP75LAdTbutY2h6gPpaMGg
'' SIG '' jhVkxpj/QJJBtTg1Clm/IQXfjJ6BHcprtKu8n2532oQz
'' SIG '' OAgMAPqmAL+E4FXPVNpogMgZzxwT5GjlF/go8osycGLq
'' SIG '' NtfwuQhKYWqlzErV39ifuHvHv4LTN2Tsj3OGIQc1Xclh
'' SIG '' OuDJUcRQPQCmtSLupEkj4l7Ln3KLQqASd9qNSgBgz4Tf
'' SIG '' GxODZfPyx0nP86X90PifgJWBrCOWdOJ625ETbQ+PGrww
'' SIG '' SgMaqRXNJXHsZjJRA81UNKWSkuVFUmwCf6J8BMOsbZ0Z
'' SIG '' R2R9p5kaBnSjbMvOSx2JdmqoafNoz2hz7xc9ZhAeNSKx
'' SIG '' kf0Lc5jvtIjFb+Wl56r2Yu5T/es57YaVLRTjilg74d9w
'' SIG '' Y73hnp+zWQc+G0yR/bYlOTeb5ga0xUO147ldd9o92aLO
'' SIG '' a+M2dd6K
'' SIG '' End signature block
