' Windows Installer database utility to merge data from another database              
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the use of the Database.Merge method and MsiDatabaseMerge API
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3
Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Const TristateTrue = -1

Dim argCount:argCount = Wscript.Arguments.Count
Dim iArg:iArg = 0
If (argCount < 2) Then
	Wscript.Echo "Windows Installer database merge utility" &_
		vbNewLine & " 1st argument is the path to MSI database (installer package)" &_
		vbNewLine & " 2nd argument is the path to database containing data to merge" &_
		vbNewLine & " 3rd argument is the optional table to contain the merge errors" &_
		vbNewLine & " If 3rd argument is not present, the table _MergeErrors is used" &_
		vbNewLine & "  and that table will be dropped after displaying its contents." &_
		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 merge data
Dim database1 : Set database1 = installer.OpenDatabase(WScript.Arguments(0), msiOpenDatabaseModeTransact) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(WScript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim errorTable : errorTable = "_MergeErrors"
If argCount >= 3 Then errorTable = WScript.Arguments(2)
Dim hasConflicts:hasConflicts = database1.Merge(database2, errorTable) 'Old code returns void value, new returns boolean
If hasConflicts <> True Then hasConflicts = CheckError 'Temp for old Merge function that returns void
If hasConflicts <> 0 Then
	Dim message, line, view, record
	Set view = database1.OpenView("Select * FROM `" & errorTable & "`") : CheckError
	view.Execute
	Do
		Set record = view.Fetch
		If record Is Nothing Then Exit Do
		line = record.StringData(1) & " table has " & record.IntegerData(2) & " conflicts"
		If message = Empty Then message = line Else message = message & vbNewLine & line
	Loop
	Set view = Nothing
	Wscript.Echo message
End If
If argCount < 3 And hasConflicts Then database1.OpenView("DROP TABLE `" & errorTable & "`").Execute : CheckError
database1.Commit : CheckError
Quit 0

Function CheckError
	Dim message, errRec
	CheckError = 0
	If Err = 0 Then Exit Function
	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 : CheckError = errRec.IntegerData(1)
	End If
	If CheckError = 2268 Then Err.Clear : Exit Function
	Wscript.Echo message
	Wscript.Quit 2
End Function

'' SIG '' Begin signature block
'' SIG '' MIIpjQYJKoZIhvcNAQcCoIIpfjCCKXoCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' QXX+BeRpnj5/3w9MZiLTEbzssoFPyxBqr0/6QcQWjb+g
'' SIG '' gg3lMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' SIG '' AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
'' SIG '' ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
'' SIG '' VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
'' SIG '' cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
'' SIG '' 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
'' SIG '' hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
'' SIG '' B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
'' SIG '' UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
'' SIG '' 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
'' SIG '' xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
'' SIG '' YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
'' SIG '' 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
'' SIG '' uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
'' SIG '' 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
'' SIG '' 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
'' SIG '' K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
'' SIG '' O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
'' SIG '' LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
'' SIG '' yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
'' SIG '' 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
'' SIG '' AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
'' SIG '' gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
'' SIG '' X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
'' SIG '' nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
'' SIG '' +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
'' SIG '' /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
'' SIG '' ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
'' SIG '' iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
'' SIG '' RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
'' SIG '' khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
'' SIG '' /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
'' SIG '' FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
'' SIG '' MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
'' SIG '' mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
'' SIG '' cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
'' SIG '' nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
'' SIG '' iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
'' SIG '' kFS+KpYAm5VE9r5kKZZVdzCCByAwggUIoAMCAQICEzMA
'' SIG '' AACG53GUuU3/CfsAAAAAAIYwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjQ1M1oXDTI2MDUwNjE4MjQ1M1owdDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEApH31lbdTfYCtnKM6hm0dcBgl
'' SIG '' L0fUQXvAsjycUQQnTbg9O0ONzUD4l9K0pCaMmLq88Z3P
'' SIG '' NgSZpNFCnR+AfdvW8SZCtaYwDflp/SXnWyEzAGiD9Vps
'' SIG '' OtEgtB7OsFynkTPZ6jk25AYadsClcZA0KaZ36mUTjJ+h
'' SIG '' LS3IBH6U1EJPyB8WiG8amw50S2N9S1Gq3qEZVH9LbizX
'' SIG '' +NmQIFA8hLVTo64uaXuAFcj7Kz7iIRBy18yq6Z7qqyup
'' SIG '' 0n04LK+2+38C+Mandd64RtQ0t9CyuiXwgFcOxz2w/+5v
'' SIG '' 0UDoafmTD4ZWWXy1r56rve3Jqd49/jSkRc2AhelN1Tbr
'' SIG '' XTjfwIS5+DTdPks+jJunosQXEgEbmMFdSutr1M8k4itu
'' SIG '' di0IO10qsFA3HQk167vtm7fWh/JKLEFoA6/Itl3PY8mV
'' SIG '' I4xMDJVCs8bp6s+7UPNDs00gIM9spFtKNegk0xFePz2/
'' SIG '' 4S1hZT4V6YfoycfjJIU9/Mq939rj8FQrj/XjGUrhGnym
'' SIG '' XPkzl9RrK9gRSMMXT/CAiUx+zKb8AL+Bte7KPOMTRhr0
'' SIG '' au06UvS8urm1CeNPe9PSZ6LON3Q+315xOV5kaCC7xQ1A
'' SIG '' qN7Z7fWbIZ8e8HwLIPvKYVxznemImIExu+97NRxj7zJc
'' SIG '' GQk/hzxV+1uc4iHTUAttop9+/6q0O8HSoOFDJmSGOMMC
'' SIG '' AwEAAaOCAb4wggG6MA4GA1UdDwEB/wQEAwIHgDAfBgNV
'' SIG '' HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
'' SIG '' HRMBAf8EAjAAMB0GA1UdDgQWBBRQoxo91TqmkNu2C06l
'' SIG '' TspQcpQogDBUBgNVHREETTBLpEkwRzEtMCsGA1UECxMk
'' SIG '' TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
'' SIG '' dGVkMRYwFAYDVQQFEw0yMzA4NjUrNTA0NTkxMB8GA1Ud
'' SIG '' IwQYMBaAFB6C3w7XjLPXAjSDDtqrrWW5r7jsMGoGA1Ud
'' SIG '' HwRjMGEwX6BdoFuGWWh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFdpbmRv
'' SIG '' d3MlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjQu
'' SIG '' Y3JsMHcGCCsGAQUFBwEBBGswaTBnBggrBgEFBQcwAoZb
'' SIG '' aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
'' SIG '' ZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwQ29kZSUy
'' SIG '' MFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNydDANBgkqhkiG
'' SIG '' 9w0BAQwFAAOCAgEADDlkX+NgsTjRleN8tgJD0V5k5QWc
'' SIG '' rczHYC/AGulvcPtVDcT/LErOmJQvQA6k5XoaoQ1SmY08
'' SIG '' 0Y/+xDcfi877vrnOLFb2H0W+IjWMLI+/fM6KBdNPEQDl
'' SIG '' bydWc+IZy9d5pMlvT3tzgNFpvNuBZZ4YK1dTdzh4o9PU
'' SIG '' tMeMV7+ARlSy+TlcZIh/PpCqrigKbzw6HXPmQ386HBMC
'' SIG '' tDkQAbNdkVw7qHjxEvFwUWf1lAjfwT5Xu2RjIGHHz1kP
'' SIG '' qkRJ+uBnCx77n3SuZmJkJSp2swNgiM78HU8j8H6k0wXl
'' SIG '' JNDJB7YmX3BPfMV1WJTvSdwO6uiu8MUrg6xBoXlcEaBG
'' SIG '' 4WDny6ecTfXBNdSy12ywxdo/DAwU42P7IoB/ZREiCPPb
'' SIG '' wEJoTcds9/+rb6LtNe3sd6RVW9qhImtzjL//uj291F2x
'' SIG '' X9BGLIT405GCAoaWEoGenLSmWcewujxXM7UaJ/iSrMg2
'' SIG '' wI45ozVdFQfeMF8+YXtFVeE6uzVELOUoHwqmasaFxi7k
'' SIG '' 2F/YH6dbTErbCam/8mD6ZijOO+iqSlbLcKM/r8GPpcHz
'' SIG '' 4XEYacSb411dLbeMee04Tv03LU3VeUs7mhPLbTn1Fsyw
'' SIG '' m3L3iidxf+nAXTupyDI+FvH6eEtsbuOQ06Fni29+futP
'' SIG '' H6f8q1SycPjF8LaKe6g8Jvuqm/zGEKMvE5PF76IxghsA
'' SIG '' MIIa/AIBATB2MF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMDAuBgNVBAMT
'' SIG '' J01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
'' SIG '' Q0EgMjAyNAITMwAAAIbncZS5Tf8J+wAAAAAAhjANBglg
'' SIG '' hkgBZQMEAgEFAKCBqDAZBgkqhkiG9w0BCQMxDAYKKwYB
'' SIG '' BAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgfWTawCFEjkRs
'' SIG '' 0Gg97AK61YDxU0xqytxYlV2TblYKw88wWgYKKwYBBAGC
'' SIG '' NwIBDDFMMEqgJIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAA
'' SIG '' VwBpAG4AZABvAHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vd2luZG93czANBgkqhkiG9w0BAQEFAASC
'' SIG '' AgAYlkHOVR2haJDfwCzlvDnihou1S2YIAyArNkxECk7N
'' SIG '' RccF6yoEhturAF6r3IMvxN1JKkngPXZ+ExLIvNeJpqeH
'' SIG '' KQOWCPceQ3VeMw78WsYQKB8dbyg3wBsEGTT4q+oRcvlm
'' SIG '' zX52QMeTBnVQeDQTTW8Lmhon/d5CQfOnYdcIfKcKirRA
'' SIG '' 5B0F33T2Kz/ZSA4YlvV1bGXJXaB8lBuO5GbnpVBOnLvn
'' SIG '' Cvls2BVVl9TvRN5BHKbENNQ9kaDK84kTLB3wv+yJ2jCe
'' SIG '' 2YaOHE0aa1U3Pj6sBPr9jYBxn0EvkSXI0OrDxsOH/Gya
'' SIG '' dVH2UXBSr8k0z8tTbvxzdG1BNJJg6MvRV46am71zJVoS
'' SIG '' 7eGAaZ95Wn+KdyfDHP6+FnwUvskUjfK5hM3mn2RAqfYA
'' SIG '' POfMmlKyLu2bBfc49GNiNLBI93WdZhXn+XavPjVxxncv
'' SIG '' ZrKgY5meh29ppiLXhuQbCUY6fYM9+7P5xMFp8LgoZono
'' SIG '' kd93FMkLBszsueZpp9b5Cv3thwEB4pTUSqBje/l5mxUk
'' SIG '' ug+n2b96xhLNjt7kGqXzsmVTVkHYolaBtjKlkIpnlqG5
'' SIG '' /dsxfqhVxi06RUREb5vha+/W5qzkwNGsqjLCaFdxblK7
'' SIG '' gZ1VRVGq4GOf741QEtK5jM1Mc1qRo63S3Gv9DNV60vZn
'' SIG '' nNWpLvskiLsf7Y8v7TFDoNJVsqGCF7AwghesBgorBgEE
'' SIG '' AYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kwgheF
'' SIG '' AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0B
'' SIG '' CRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAx
'' SIG '' MA0GCWCGSAFlAwQCAQUABCBwSm1qjJ+sRMxCzF0wDery
'' SIG '' 8V8Rv8ipUe+wPNzXi0ecowIGaXN6WFYyGBMyMDI2MDEy
'' SIG '' NzAyMTY0OC40NzNaMASAAgH0oIHZpIHWMIHTMQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
'' SIG '' SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNV
'' SIG '' BAsTHm5TaGllbGQgVFNTIEVTTjozMjFBLTA1RTAtRDk0
'' SIG '' NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
'' SIG '' U2VydmljZaCCEf4wggcoMIIFEKADAgECAhMzAAACGqmg
'' SIG '' HQagD0OqAAEAAAIaMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
'' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
'' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
'' SIG '' ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4
'' SIG '' NDgyOFoXDTI2MTExMzE4NDgyOFowgdMxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
'' SIG '' YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMe
'' SIG '' blNoaWVsZCBUU1MgRVNOOjMyMUEtMDVFMC1EOTQ3MSUw
'' SIG '' IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
'' SIG '' aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
'' SIG '' AgEAmYEAwSTz79q2V3ZWzQ5Ev7RKgadQtMBy7+V3XQ8R
'' SIG '' 0NL8R9mupxcqJQ/KPeZGJTER+9Qq/t7HOQfBbDy6e0Te
'' SIG '' pvBFV/RY3w+LOPMKn0Uoh2/8IvdSbJ8qAWRVoz2S9VrJ
'' SIG '' zZpB8/f5rQcRETgX/t8N66D2JlEXv4fZQB7XzcJMXr1p
'' SIG '' uhuXbOt9RYEyN1Q3Z7YjRkhfBsRc+SD/C9F4iwZqfQgo
'' SIG '' 82GG4wguIhjJU7+XMfrv4vxAFNVg3mn1PoMWGZWio+e1
'' SIG '' 4+PGYPVLKlad+0IhdHK5AgPyXKkqAhEZpYhYYVEItHOO
'' SIG '' vqrwukxVAJXMvWA3GatWkRZn33WDJVtghCW6XPLi1cDK
'' SIG '' iGE5UcXZSV4OjQIUB8vp2LUMRXud5I49FIBcE9nT00z8
'' SIG '' A+EekrPM+OAk07aDfwZbdmZ56j7ub5fNDLf8yIb8QxZ8
'' SIG '' Mr4RwWy/czBuV5rkWQQ+msjJ5AKtYZxJdnaZehUgUNAr
'' SIG '' U/u36SH1eXKMQGRXr/xeKFGI8vvv5Jl1knZ8UqEQr9Px
'' SIG '' Dbis7OXp2WSMK5lLGdYVH8VownYF3sbOiRkx5Q5GaEyT
'' SIG '' ehOQp2SfdbsJZlg0SXmHphGnoW1/gQ/5P6BgSq4PAWIZ
'' SIG '' aDJj6AvLLCdbURgR5apNQQed2zYUgUbjACA/TomA8Ll7
'' SIG '' Arrv2oZGiUO5Vdi4xxtA3BRTQTUCAwEAAaOCAUkwggFF
'' SIG '' MB0GA1UdDgQWBBTwqyIJ3QMoPasDcGdGovbaY8IlNjAf
'' SIG '' BgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBf
'' SIG '' BgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBU
'' SIG '' aW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYI
'' SIG '' KwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8v
'' SIG '' d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
'' SIG '' Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEw
'' SIG '' KDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM
'' SIG '' MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkq
'' SIG '' hkiG9w0BAQsFAAOCAgEA1a72WFq7B6bJT3VOJ21nnToP
'' SIG '' J9O/q51bw1bhPfQy67uy+f8x8akipzNL2k5b6mtxuPbZ
'' SIG '' GpBqpBKguDwQmxVpX8cGmafeo3wGr4a8Yk6Sy09tEh/N
'' SIG '' wwlsyq7BRrJNn6bGOB8iG4OTy+pmMUh7FejNPRgvgeo/
'' SIG '' OPytm4NNrMMg98UVlrZxGNOYsifpRJFg5jE/Yu6lqFa1
'' SIG '' lTm9cHuPYxWa2oEwC0sEAsTFb69iKpN0sO19xBZCr0h5
'' SIG '' ClU9Pgo6ekiJb7QJoDzrDoPQHwbNA87Cto7TLuphj0m9
'' SIG '' l/I70gLjEq53SHjuURzwpmNxdm18Qg+rlkaMC6Y2KukO
'' SIG '' fJ7oCSu9vcNGQM+inl9gsNgirZ6yJk9VsXEsoTtoR7fM
'' SIG '' NU6Py6ufJQGMTmq6ZCq2eIGOXWMBb79ZF6tiKTa4qami
'' SIG '' 3US0mTY41J129XmAglVy+ujSZkHu2lHJDRHs7FjnIXZV
'' SIG '' UE5pl6yUIl23jG50fRTLQcStdwY/LvJUgEHCIzjvlLTq
'' SIG '' Lt6JVR5bcs5aN4Dh0YPG95B9iDMZrq4rli5SnGNWev5L
'' SIG '' LsDY1fbrK6uVpD+psvSLsNpht27QcHRsYdAMALXM+HNs
'' SIG '' z2LZ8xiOfwt6rOsVWXoiHV86/TeMy5TZFUl7qB59INoM
'' SIG '' SJgDRladVXeT9fwOuirFIoqgjKGk3vO2bELrYMN0QVww
'' SIG '' ggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAV
'' SIG '' MA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0
'' SIG '' aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAx
'' SIG '' ODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
'' SIG '' LVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7V
'' SIG '' gtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/H
'' SIG '' ZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKD
'' SIG '' RLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gm
'' SIG '' U3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36M
'' SIG '' EBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+y
'' SIG '' OSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoF
'' SIG '' VZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJi
'' SIG '' ss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGa
'' SIG '' RnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuqfjbs
'' SIG '' Nkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afo
'' SIG '' mXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9
'' SIG '' ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZk
'' SIG '' i1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y
'' SIG '' 1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV
'' SIG '' 2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0C
'' SIG '' AwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEw
'' SIG '' IwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/
'' SIG '' LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnp
'' SIG '' cjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8G
'' SIG '' CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYD
'' SIG '' VR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAwe
'' SIG '' CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB
'' SIG '' /wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9
'' SIG '' lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
'' SIG '' L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj
'' SIG '' dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoG
'' SIG '' CCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov
'' SIG '' L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
'' SIG '' b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcN
'' SIG '' AQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pc
'' SIG '' FLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHk
'' SIG '' wo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AF
'' SIG '' vonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4
'' SIG '' U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2
'' SIG '' EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8Atq
'' SIG '' gcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mj
'' SIG '' dAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZM
'' SIG '' cm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQE
'' SIG '' cb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2f
'' SIG '' pCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBM
'' SIG '' drVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L
'' SIG '' +DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJ
'' SIG '' C4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU
'' SIG '' 5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/
'' SIG '' 2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCC
'' SIG '' AkECAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBP
'' SIG '' cGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGll
'' SIG '' bGQgVFNTIEVTTjozMjFBLTA1RTAtRDk0NzElMCMGA1UE
'' SIG '' AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIj
'' SIG '' CgEBMAcGBSsOAwIaAxUA8YrutmKpSrubCaAYsU4pt1Ft
'' SIG '' 8DaggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMDANBgkqhkiG9w0BAQsFAAIFAO0ileswIhgPMjAy
'' SIG '' NjAxMjcwMTM5NTVaGA8yMDI2MDEyODAxMzk1NVowdzA9
'' SIG '' BgorBgEEAYRZCgQBMS8wLTAKAgUA7SKV6wIBADAKAgEA
'' SIG '' AgIgaQIB/zAHAgEAAgITszAKAgUA7SPnawIBADA2Bgor
'' SIG '' BgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIB
'' SIG '' AAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUA
'' SIG '' A4IBAQAd0LZUShRwS/5pQNHa72xhRbZ2Am5GfM/iXRCd
'' SIG '' 06klsJ5L+HHABPsFqoDTx07IAmaKVmkcwwvk4tB/XGtc
'' SIG '' H15E2ww/bwv1DJzrCuh66IC/O/3lvibzbD0AVe6qEyD9
'' SIG '' tg/B27y9r+7RhHV07s3FkYkQgDAeKk1QmQCN6fop8q4D
'' SIG '' ZOGNc36/Pk9QKf8ONB0os4B9vqmreOyJDTW2vkjdY8Bi
'' SIG '' nkSZsiFP7WhSDDCNTkvrutXyi3N8L2voe3ajxf+M+F4d
'' SIG '' uufgGy9C9v0veyKFqyJMcDKIleifb+9aiWw2j0eDG9/o
'' SIG '' 32yRgPGqN9IaBV85nNbAnS76vNZtdaM6PH/a6JmwMYIE
'' SIG '' DTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
'' SIG '' MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
'' SIG '' IDIwMTACEzMAAAIaqaAdBqAPQ6oAAQAAAhowDQYJYIZI
'' SIG '' AWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG
'' SIG '' 9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgQP8JOqvaTIDL
'' SIG '' 4CR5wJUATQU3TJBcFWS0goZTv8b8mU4wgfoGCyqGSIb3
'' SIG '' DQEJEAIvMYHqMIHnMIHkMIG9BCCdeiHHrbtpKcwB20do
'' SIG '' VU89WHIOH8S7w37uaHcDmemK+zCBmDCBgKR+MHwxCzAJ
'' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
'' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
'' SIG '' ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACGqmgHQag
'' SIG '' D0OqAAEAAAIaMCIEIHLJVJnrIuuz/z1Xdx2Or+pTsvmV
'' SIG '' +EV0/Am2b/ODQKh9MA0GCSqGSIb3DQEBCwUABIICAGes
'' SIG '' CwZPxuO3Oj6CJ20e1/htdP3bzyS/LtSkXxfeaj/A/pCk
'' SIG '' tBVLwJkfC1YEf4eo4Vw2Kye0gjSYW3u//0KbzsbTif3i
'' SIG '' C+SuPJKrwB6qEb6/9ZITkKSTCOH7LKpZnWHW/5QiG4BL
'' SIG '' DQGX2RgYdQZ6pf5rKSL3+3vNDTBwFQf/zGIMBJsbcpa8
'' SIG '' FX8E/rbbkWOXgvI+rA9NXeb3OffVK9gdQ/Gqk5q4NkCL
'' SIG '' JC3pKhKWm62snooSdsOcIAUfb3o5k5QzjCvtRGDzCfMM
'' SIG '' DN9x2+TC77Eel4ptD5Ayg9eJMdyWBKO3oWvdb2SiM5v+
'' SIG '' MeGSHJvVifbVvJrOI2ctXPwlpDgfrbW6xpGqBGM8q/4x
'' SIG '' ZyhOA3n3jxrcYQSkcA07ki+lUp7Q10ta/SHvwCBopdlV
'' SIG '' CvA6nXVDxh6zjMWTkW4O5RrqmmohkSMqRBbprqhrcJwW
'' SIG '' 0sxMRNnFwE6UUBQO1GWCrdOzeBaQHCGMlhITPrzDNq/8
'' SIG '' IFjar+7OqCmAt/1LGCAvt62W0kOKNNkleGOwq2waMunl
'' SIG '' luphqqWxQqjUP//Ra+sollMWllJPJGyFoboU9dLMyDhK
'' SIG '' cRMBegVwLuooau0S8qT5MWsBI9mQeEKIZVCRoAyrRyeh
'' SIG '' K6FsItUzSeuuGWS2/5xDZBtaWq9jhcZjDE41lRh/MxyY
'' SIG '' WslR9g2XwBr9FFgTLB79
'' SIG '' End signature block
