Handler/Handler.ps1
#region Copyright & License # Copyright © 2012 - 2020 François Chabot # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.u # See the License for the specific language governing permissions and # limitations under the License. #endregion Set-StrictMode -Version Latest enum Direction { Receive Send } <# .SYNOPSIS Asserts the existence of a Microsoft BizTalk Server Adapter Handler. .DESCRIPTION This command will throw if the Microsoft BizTalk Server Adapter Handler does not exist and will silently complete otherwise. .PARAMETER Adapter The adapter name of the Microsoft BizTalk Server Adapter Handler. .PARAMETER Host The host name of the Microsoft BizTalk Server Host Handler. .PARAMETER Direction The direction of the Microsoft BizTalk Server Adapter Handler. .EXAMPLE PS> Assert-BizTalkHandler -Adapter FILE -Host BizTalkServerApplication -Direction Send .NOTES © 2020 be.stateless. #> function Assert-BizTalkHandler { [CmdletBinding()] [OutputType([void])] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Adapter, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Host, [Parameter(Mandatory = $true)] [Direction] $Direction ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState if (-not(Test-BizTalkHandler @PSBoundParameters)) { throw "Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host does not exist." } Write-Verbose "Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host exists." } <# .SYNOPSIS Gets information Microsoft BizTalk Server Adapter Handlers. .DESCRIPTION Gets information Microsoft BizTalk Server Adapter Handlers. .PARAMETER Adapter The adapter name of the Microsoft BizTalk Server Adapter Handlers. .PARAMETER Host The host name of the Microsoft BizTalk Server Host Handlers. .PARAMETER Direction The direction of the Microsoft BizTalk Server Adapter Handlers. .OUTPUTS Returns information about Microsoft BizTalk Server Adapter Handlers. .EXAMPLE PS> Get-BizTalkHandler -Adapter FILE .EXAMPLE PS> Get-BizTalkHandler -Host BiztAlkServerIsolatedHost .EXAMPLE PS> Get-BizTalkHandler -Direction Send .EXAMPLE PS> Get-BizTalkHandler -Adapter FILE -Host BizTalkServerApplication -Direction Send .NOTES © 2020 be.stateless. #> function Get-BizTalkHandler { [CmdletBinding()] [OutputType([PSCustomObject[]])] param( [Parameter(Mandatory = $false)] [AllowEmptyString()] [AllowNull()] [string[]] $Adapter = @([string]::Empty), [Parameter(Mandatory = $false)] [AllowEmptyString()] [AllowNull()] [string[]] $Host = @([string]::Empty), [Parameter(Mandatory = $false)] [Direction[]] $Direction = @([Direction]::Receive, [Direction]::Send) ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState foreach ($d in $Direction) { $className = Get-HandlerCimClassName -Direction $d foreach ($a in $Adapter) { foreach ($h in $Host) { $filter = if (![string]::IsNullOrWhiteSpace($a) -and ![string]::IsNullOrWhiteSpace($h)) { "AdapterName='$a' and HostName='$h'" } elseif (![string]::IsNullOrWhiteSpace($a)) { "AdapterName='$a'" } elseif (![string]::IsNullOrWhiteSpace($h)) { "HostName='$h'" } Get-CimInstance -ErrorAction Stop -Namespace root/MicrosoftBizTalkServer -ClassName $className -Filter $filter | Add-Member -NotePropertyName Direction -NotePropertyValue $d -PassThru } } } } <# .SYNOPSIS Creates a Microsoft BizTalk Server Adapter Handler. .DESCRIPTION Creates a Microsoft BizTalk Server Adapter Handler. .PARAMETER Adapter The adapter name of the Microsoft BizTalk Server Adapter Handler. .PARAMETER Host The host name of the Microsoft BizTalk Server Host Handler. .PARAMETER Direction The direction of the Microsoft BizTalk Server Adapter Handler. .PARAMETER Default Whether the Microsoft BizTalk Server Adapter Handler to be created will be the default Adapter Handler. .EXAMPLE PS> New-BizTalkHandler -Adapter FILE -Host BizTalkServerApplication -Direction Receive .LINK https://docs.microsoft.com/en-us/biztalk/core/technical-reference/creating-an-ftp-receive-handler-using-wmi .NOTES © 2020 be.stateless. #> function New-BizTalkHandler { [CmdletBinding(SupportsShouldProcess = $true)] [OutputType([void])] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Adapter, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Host, [Parameter(Mandatory = $true)] [Direction] $Direction, # TODO refactor $Default as a Dynamic param which is only availble when $Direction = Send [Parameter(Mandatory = $false)] [switch] $Default ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState if (Test-BizTalkHandler -Adapter $Adapter -Host $Host -Direction $Direction) { Write-Information "`t Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host has already been created." } elseif ($PsCmdlet.ShouldProcess("Microsoft BizTalk Server Group", "Creating $Direction '$Adapter' handler for '$Host' host")) { Write-Information "`t Creating Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host..." $className = Get-HandlerCimClassName -Direction $Direction $properties = @{ AdapterName = $Adapter ; HostName = $Host } if ($Direction -eq 'Send' -and $Default.IsPresent) { $properties.IsDefault = [bool]$Default } New-CimInstance -ErrorAction Stop -Namespace root/MicrosoftBizTalkServer -ClassName $className -Property $properties | Out-Null Write-Information "`t Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host has been created." } } <# .SYNOPSIS Removes a Microsoft BizTalk Server Adapter Handler. .DESCRIPTION Removes a Microsoft BizTalk Server Adapter Handler. .PARAMETER Adapter The adapter name of the Microsoft BizTalk Server Adapter Handler. .PARAMETER Host The host name of the Microsoft BizTalk Server Host Handler. .PARAMETER Direction The direction of the Microsoft BizTalk Server Adapter Handler. .EXAMPLE PS> Remove-BizTalkHandler -Adapter FILE -Host BizTalkServerApplication -Direction Receive .NOTES © 2020 be.stateless. #> function Remove-BizTalkHandler { [CmdletBinding(SupportsShouldProcess = $true)] [OutputType([void])] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Adapter, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Host, [Parameter(Mandatory = $true)] [Direction] $Direction ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState if (-not(Test-BizTalkHandler -Adapter $Adapter -Host $Host -Direction $Direction)) { Write-Information "`t Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host has already been removed." } elseif ($PsCmdlet.ShouldProcess("Microsoft BizTalk Server Group", "Removing $Direction '$Adapter' handler for '$Host' host")) { Write-Information "`t Removing Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host..." $className = Get-HandlerCimClassName -Direction $Direction # TODO will fail if try to remove default send handler $instance = Get-CimInstance -ErrorAction Stop -Namespace root/MicrosoftBizTalkServer -ClassName $className -Filter "AdapterName='$Adapter' and HostName='$Host'" Remove-CimInstance -ErrorAction Stop -InputObject $instance Write-Information "`t Microsoft BizTalk Server $Direction '$Adapter' handler for '$Host' host has been removed." } } <# .SYNOPSIS Returns whether a Microsoft BizTalk Server Adapter Handler exists. .DESCRIPTION This command will return $true if the Microsoft BizTalk Server Adapter Handler exists; $false otherwise. .PARAMETER Adapter The adapter name of the Microsoft BizTalk Server Adapter Handler. .PARAMETER Host The host name of the Microsoft BizTalk Server Host Handler. .PARAMETER Direction The direction of the Microsoft BizTalk Server Adapter Handler. .OUTPUTS $true if the Microsoft BizTalk Server handler exists; $false otherwise. .EXAMPLE PS> Test-BizTalkHandler -Adapter FILE -Host BizTalkServerApplication -Direction Send .NOTES © 2020 be.stateless. #> function Test-BizTalkHandler { [CmdletBinding()] [OutputType([bool])] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Adapter, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Host, [Parameter(Mandatory = $true)] [Direction] $Direction ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState $className = Get-HandlerCimClassName -Direction $Direction [bool] (Get-CimInstance -ErrorAction Stop -Namespace root/MicrosoftBizTalkServer -ClassName $className -Filter "AdapterName='$Adapter' and HostName='$Host'") } function Get-HandlerCimClassName { [CmdletBinding()] [OutputType([string])] param( [Parameter(Mandatory = $true)] [Direction] $Direction ) if ($direction -eq [Direction]::Receive) { 'MSBTS_ReceiveHandler' } else { 'MSBTS_SendHandler2' } } # SIG # Begin signature block # MIITugYJKoZIhvcNAQcCoIITqzCCE6cCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU/8a/1hmf+lwHCteAhzP95gP+ # zauggg46MIID7jCCA1egAwIBAgIQfpPr+3zGTlnqS5p31Ab8OzANBgkqhkiG9w0B # AQUFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIG # A1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhh # d3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg # Q0EwHhcNMTIxMjIxMDAwMDAwWhcNMjAxMjMwMjM1OTU5WjBeMQswCQYDVQQGEwJV # UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xMDAuBgNVBAMTJ1N5bWFu # dGVjIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0EgLSBHMjCCASIwDQYJKoZIhvcN # AQEBBQADggEPADCCAQoCggEBALGss0lUS5ccEgrYJXmRIlcqb9y4JsRDc2vCvy5Q # WvsUwnaOQwElQ7Sh4kX06Ld7w3TMIte0lAAC903tv7S3RCRrzV9FO9FEzkMScxeC # i2m0K8uZHqxyGyZNcR+xMd37UWECU6aq9UksBXhFpS+JzueZ5/6M4lc/PcaS3Er4 # ezPkeQr78HWIQZz/xQNRmarXbJ+TaYdlKYOFwmAUxMjJOxTawIHwHw103pIiq8r3 # +3R8J+b3Sht/p8OeLa6K6qbmqicWfWH3mHERvOJQoUvlXfrlDqcsn6plINPYlujI # fKVOSET/GeJEB5IL12iEgF1qeGRFzWBGflTBE3zFefHJwXECAwEAAaOB+jCB9zAd # BgNVHQ4EFgQUX5r1blzMzHSa1N197z/b7EyALt0wMgYIKwYBBQUHAQEEJjAkMCIG # CCsGAQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMBIGA1UdEwEB/wQIMAYB # Af8CAQAwPwYDVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NybC50aGF3dGUuY29tL1Ro # YXd0ZVRpbWVzdGFtcGluZ0NBLmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAOBgNV # HQ8BAf8EBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0y # MDQ4LTEwDQYJKoZIhvcNAQEFBQADgYEAAwmbj3nvf1kwqu9otfrjCR27T4IGXTdf # plKfFo3qHJIJRG71betYfDDo+WmNI3MLEm9Hqa45EfgqsZuwGsOO61mWAK3ODE2y # 0DGmCFwqevzieh1XTKhlGOl5QGIllm7HxzdqgyEIjkHq3dlXPx13SYcqFgZepjhq # IhKjURmDfrYwggSjMIIDi6ADAgECAhAOz/Q4yP6/NW4E2GqYGxpQMA0GCSqGSIb3 # DQEBBQUAMF4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3Jh # dGlvbjEwMC4GA1UEAxMnU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNlcyBD # QSAtIEcyMB4XDTEyMTAxODAwMDAwMFoXDTIwMTIyOTIzNTk1OVowYjELMAkGA1UE # BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMTQwMgYDVQQDEytT # eW1hbnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIFNpZ25lciAtIEc0MIIBIjAN # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomMLOUS4uyOnREm7Dv+h8GEKU5Ow # mNutLA9KxW7/hjxTVQ8VzgQ/K/2plpbZvmF5C1vJTIZ25eBDSyKV7sIrQ8Gf2Gi0 # jkBP7oU4uRHFI/JkWPAVMm9OV6GuiKQC1yoezUvh3WPVF4kyW7BemVqonShQDhfu # ltthO0VRHc8SVguSR/yrrvZmPUescHLnkudfzRC5xINklBm9JYDh6NIipdC6Anqh # d5NbZcPuF3S8QYYq3AhMjJKMkS2ed0QfaNaodHfbDlsyi1aLM73ZY8hJnTrFxeoz # C9Lxoxv0i77Zs1eLO94Ep3oisiSuLsdwxb5OgyYI+wu9qU+ZCOEQKHKqzQIDAQAB # o4IBVzCCAVMwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO # BgNVHQ8BAf8EBAMCB4AwcwYIKwYBBQUHAQEEZzBlMCoGCCsGAQUFBzABhh5odHRw # Oi8vdHMtb2NzcC53cy5zeW1hbnRlYy5jb20wNwYIKwYBBQUHMAKGK2h0dHA6Ly90 # cy1haWEud3Muc3ltYW50ZWMuY29tL3Rzcy1jYS1nMi5jZXIwPAYDVR0fBDUwMzAx # oC+gLYYraHR0cDovL3RzLWNybC53cy5zeW1hbnRlYy5jb20vdHNzLWNhLWcyLmNy # bDAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMjAdBgNV # HQ4EFgQURsZpow5KFB7VTNpSYxc/Xja8DeYwHwYDVR0jBBgwFoAUX5r1blzMzHSa # 1N197z/b7EyALt0wDQYJKoZIhvcNAQEFBQADggEBAHg7tJEqAEzwj2IwN3ijhCcH # bxiy3iXcoNSUA6qGTiWfmkADHN3O43nLIWgG2rYytG2/9CwmYzPkSWRtDebDZw73 # BaQ1bHyJFsbpst+y6d0gxnEPzZV03LZc3r03H0N45ni1zSgEIKOq8UvEiCmRDoDR # EfzdXHZuT14ORUZBbg2w6jiasTraCXEQ/Bx5tIB7rGn0/Zy2DBYr8X9bCT2bW+IW # yhOBbQAuOA2oKY8s4bL0WqkBrxWcLC9JG9siu8P+eJRRw4axgohd8D20UaF5Mysu # e7ncIAkTcetqGVvP6KUwVyyJST+5z3/Jvz4iaGNTmr1pdKzFHTx/kuDDvBzYBHUw # ggWdMIIDUaADAgECAhAoE4COAwM7nkDtQn+T+DmdMEEGCSqGSIb3DQEBCjA0oA8w # DQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWUDBAIBBQCiAwIB # IDAmMSQwIgYDVQQDDBtpY3JhZnRzb2Z0d2FyZUBzdGF0ZWxlc3MuYmUwHhcNMjAw # NjIzMTE0MzU2WhcNMjEwNjIzMTIwMzU2WjAmMSQwIgYDVQQDDBtpY3JhZnRzb2Z0 # d2FyZUBzdGF0ZWxlc3MuYmUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC # AQCZBxvQbCUEcEcEln280zwR7A3tP6eGxZVTRYGhacjDpQBP31HD3HlFx85BTaHG # oqZHWT6IjoH6p12lMLdUtIKED+aHU/ikIMOxl7JH/Sef+v8N7OEN7zHmNySNHzwp # JFyAOiHSQuOB+tOgOnH0S8FzBeY0koPAEha7lIG+TTht5Thc7s4eMGiDSQxofEJl # z0dxZ93MF58/59tXO7p/WPVaASpmf2yvUwva6UdF27br7nrEar1FkYm9fJjWZj4r # maoFwRP7VtXalmcGszcZz+GWa9OTCsLRkYEAstlZmqqktWsMJjl6gc/DYLSQDgnM # rhDWjbXyz7Bdu4NyNhEhmoFLAjx+LNH/gNL7p0SN9reTOzbP8yuQk6SEnTq2IxJG # vnm1fUNHw3BUt2I2pli+zjM/Zk1Ewwjy4UKOQ/9afWF8Gv4ZI+WB0urZMWKyFjam # Pk7VaUT+0LP4HRguE9Z19tUSnyQHd8YGxV/u7DhJMr/AMDUxhEgeKS3D4r2C11/R # 4hH11hf0IzCgM3ZM0srq+cJYyvNYV7kQ5Tf+iWNQGTJBPzfxrkDrAy5wZ67sLCN2 # KDKW3tQtpOCUvs5EjJpFvOSW3F37WhpDbWSOXh5/RkPaBYuPtvCtlH4pYJ+ZocWh # mVVEo0+1Jy7I6eKU8YZnpPtI27BXFJcVG1un5xB5rhTHFQIDAQABo18wXTAOBgNV # HQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwFwYDVR0RBBAwDoIMc3Rh # dGVsZXNzLmJlMB0GA1UdDgQWBBSriwKgTYio3gri7A26JuOp3nI01DBBBgkqhkiG # 9w0BAQowNKAPMA0GCWCGSAFlAwQCAQUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFl # AwQCAQUAogMCASADggIBAFH3xqYukA0oWVzuY+WRpXhm1La5OZsnp06rPJYonbJO # a/tT3Krw90Qf2Y8mXFi8bI2DGoeihwq/VJ2OBiHbtIzykOex9TY2kRHor/ewgLLo # 6uH2+EL5TXwGn3dagsR7OiVoFwXRyjf+j4drM6+z/bMEU40UcyR5/3/cGKmbSx33 # m14ejne8spWIduNKagbFiy8kmJghMHhl6jrGBQCbBxSkvVOjrYtvdE8IMsplDmHw # ivTuedxXgcur7SoXf4b1jQhccm/pByv9dNMujQnzvsdGpLftYlyAXz7adtluo701 # W+nXgDidOql4MWbN7ANTfeGJm/O4scGP/86AuAZn2Uk/EK7S1XF8VZkg0eDVgene # UxoDDTRDe1v++FzmQToqXsWdedROy7iP69ShoUxaFh7OjKf2bisP7E1EhOtss9l1 # YBm9U4nx6GazBGF+IxnWenBuuTspTVROyYxLs8dERZLJQzbxaUwV/aK63xOVj8xX # 9p1QavYamoFaHGnkNGB+XW5qYqbbAWUKtrf+RF5WVCAL8Fuh3Yk6Ala3zMJs7icn # H58ljAz1EbvSH9Oa6rM/y4KGwe0pyCzZi1eZKbXYllqRdjgh+Uicjul10MSz1Q5+ # xZcOyqm+YVBlvCAZ414Sw+TcV2bUzMO1L08FcyTiMYZc3MSxVSDB/jbYe4NZ5f/i # MYIE6jCCBOYCAQEwOjAmMSQwIgYDVQQDDBtpY3JhZnRzb2Z0d2FyZUBzdGF0ZWxl # c3MuYmUCECgTgI4DAzueQO1Cf5P4OZ0wCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcC # AQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYB # BAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFKhxefAH9+Ju # Ll0AZOlu+pXtDnCdMA0GCSqGSIb3DQEBAQUABIICAD9SvJAdN/mwQcxX3w2RFuTq # peeTYg2yiVn4ukUKF7G1sM2sF7Wqg7dsshv+v+PqH3tky8uajHJEAVpxSBArO7Me # qi6o5MbKeRYa5htawsPXvYMHo8KLu+Q/VD6NngplDGYnsyNe3gGQBQpmjNOOj6yM # IuOBPDEvuW/feyftxcNm9wQBGsJcWYqgPZUynU7GJeNPsUgbXl9LReBcYaEypB1H # aepYtFFAeCmTsKrWiqOBoDvhQK/SXATPmtXRKz6fxAlpAJ0R3wwhKtMmqrpJtdiP # P3SbhSAOWe302KJNLDNzfviN0p2CPNB/uL6OWbidY0o7zbkAHO++7NZHTm0L6hl1 # WV88ie7eoDqOiShC/T1TuXk72xoUU/4FJLG5hylZElWijh1N1LfEFsr4iHiVl/47 # keDp206XkghvvoNeqxFTP3N4rs9fzcJ07+5nmmqSTbWHfq9XZCdrMRXqnLM2LoDU # F6UOOj/7WIvt9qa6CoEmYo7ly2O5Friegvh+2zbPV22EaIt6m2yQfyNzwrssoB5H # 1N7nt3RHyYQ9WfNSz/9S6f6I3A4mpQyJnaMUz51rdDjeKqka7NeCIVRgJUXVpSA7 # QsPTHdMMYvFl6xJXQzu5J05YB6LwPnUXDT6EBOU1bIZdFH+6qljQLE+vY2PZtJmF # Bjv6EDGggKoWys2NxhDWoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0AgEBMHIw # XjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMTAw # LgYDVQQDEydTeW1hbnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0gRzIC # EA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkq # hkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIwMDkzMDE0MTMyNFowIwYJKoZIhvcN # AQkEMRYEFIX/y6A3IQ0hzr9GW6I/svXw7cMpMA0GCSqGSIb3DQEBAQUABIIBAEL3 # +jYhgsiT8ATChZ0Jss67vmJ2PC8uVIdCcbxEi4gP1UQr+bgdr3PLIrfM+A5yWTcN # kjHEl1gXeRJis1AL56anUqjqNilC+zuGmpp+Q+7INkkpwE3pMJS+rGGbbhAb7JB9 # uxhUSYgsNyEtZq7YgOORMpms48jFb2G3126CzlDAQktxaMBKKjL2rxpjAbncurMz # Q5rdIolo2VywC0ZfNrj/mbSszrr1SnoCx7sJd7depzsrrfGGLbZ8zq68LuafORDk # ECCZfVkeZUJ2MEYWkj0llvYYTn/to6ZzntR+9Y27BAs1Jc6eCPX5i47X2fwBaRLG # FAwmulA5PWnK+k2WAF0= # SIG # End signature block |