functions/New-DbaAgentOperator.ps1
function New-DbaAgentOperator { <# .SYNOPSIS Creates a new operator on an instance. .DESCRIPTION If the operator already exists on the destination, it will not be created unless -Force is used. .PARAMETER SqlInstance The target SQL Server instance or instances. You must have sysadmin access and server version must be SQL Server version 2000 or greater. .PARAMETER SqlCredential Login to the target instance using alternative credentials. Accepts PowerShell credentials (Get-Credential). Windows Authentication, SQL Server Authentication, Active Directory - Password, and Active Directory - Integrated are all supported. For MFA support, please use Connect-DbaInstance. .PARAMETER Operator Name of the operator in SQL Agent. .PARAMETER EmailAddress The email address the SQL Agent will use to email alerts to the operator. .PARAMETER NetSendAddress The net send address the SQL Agent will use for the operator to net send alerts. .PARAMETER PagerAddress The pager email address the SQL Agent will use to send alerts to the oeprator. .PARAMETER PagerDay Defines what days the pager portion of the operator will be used. The default is 'Everyday'. Valid parameters are 'EveryDay', 'Weekdays', 'Weekend', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', and 'Saturday'. .PARAMETER SaturdayStartTime This a string that takes the Saturday Pager Start Time. .PARAMETER SaturdayEndTime This a string that takes the Saturday Pager End Time. .PARAMETER SundayStartTime This a string that takes the Sunday Pager Start Time. .PARAMETER SundayEndTime This a string that takes the Sunday Pager End Time. .PARAMETER WeekdayStartTime This a string that takes the Weekdays Pager Start Time. .PARAMETER WeekdayEndTime This a string that takes the Weekdays Pager End Time. .PARAMETER IsFailsafeOperator If this switch is enabled, this operator will be your failsafe operator and replace the one that existed before. .PARAMETER FailsafeNotificationMethod Defines the notification method for the failsafe oeprator. Value must be NotifyMail or NotifyPager. The default is NotifyEmail. .PARAMETER WhatIf Shows what would happen if the command were to run. No actions are actually performed. .PARAMETER Confirm Prompts you for confirmation before executing any changing operations within the command. .PARAMETER Force If this switch is enabled, the Operator will be dropped and recreated on instance. .PARAMETER InputObject SMO Server Objects (pipeline input from Connect-DbaInstance) .PARAMETER EnableException By default, when something goes wrong we try to catch it, interpret it and give you a friendly warning message. This avoids overwhelming you with "sea of red" exceptions, but is inconvenient because it basically disables advanced scripting. Using this switch turns this "nice by default" feature off and enables you to catch exceptions with your own try/catch. .NOTES Tags: Agent, Operator Author: Tracy Boggiano (@TracyBoggiano), databasesuperhero.com Website: https://dbatools.io Copyright: (c) 2018 by dbatools, licensed under MIT License: MIT https://opensource.org/licenses/MIT .LINK https://dbatools.io/New-DbaAgentOperator .EXAMPLE PS:\> New-DbaAgentOperator -SqlInstance sql01 -Operator DBA -EmailAddress operator@operator.com -PagerDay Everyday -Force This sets a new operator named DBA with the above email address with default values to alerts everyday for all hours of the day. .EXAMPLE PS:\> New-DbaAgentOperator -SqlInstance sql01 -Operator DBA -EmailAddress operator@operator.com -NetSendAddress dbauser1 -PagerAddress dbauser1@pager.dbatools.io -PagerDay Everyday -SaturdayStartTime 070000 -SaturdayEndTime 180000 -SundayStartTime 080000 -SundayEndTime 170000 -WeekdayStartTime 060000 -WeekdayEndTime 190000 Creates a new operator named DBA on the sql01 instance with email address operator@operator.com, net send address of dbauser1, pager address of dbauser1@pager.dbatools.io, page day as every day, Saturday start time of 7am, Saturday end time of 6pm, Sunday start time of 8am, Sunday end time of 5pm, Weekday start time of 6am, and Weekday end time of 7pm. #> [CmdletBinding(DefaultParameterSetName = "Default", SupportsShouldProcess, ConfirmImpact = "Medium")] param ( [DbaInstanceParameter[]]$SqlInstance, [PSCredential]$SqlCredential, [parameter(Mandatory)] [string]$Operator, [string]$EmailAddress, [string]$NetSendAddress, [string]$PagerAddress, [ValidateSet('EveryDay', 'Weekdays', 'Weekend', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')] [string]$PagerDay, [string]$SaturdayStartTime, [string]$SaturdayEndTime, [string]$SundayStartTime, [string]$SundayEndTime, [string]$WeekdayStartTime, [string]$WeekdayEndTime, [switch]$IsFailsafeOperator = $false, [string]$FailsafeNotificationMethod = "NotifyEmail", [switch]$Force = $false, [parameter(ValueFromPipeline)] [Microsoft.SqlServer.Management.Smo.Server[]]$InputObject, [switch]$EnableException ) begin { if ($Force) { $ConfirmPreference = 'none' } } process { if ($null -eq $EmailAddress -and $null -eq $NetSendAddress -and $null -eq $PagerAddress) { Stop-Function -Message "You must specify either an EmailAddress, NetSendAddress, or a PagerAddress to be able to create an operator." return } [int]$Interval = 0 # Loop through the array foreach ($Item in $PagerDay) { switch ($Item) { "Sunday" { $Interval += 1 } "Monday" { $Interval += 2 } "Tuesday" { $Interval += 4 } "Wednesday" { $Interval += 8 } "Thursday" { $Interval += 16 } "Friday" { $Interval += 32 } "Saturday" { $Interval += 64 } "Weekdays" { $Interval = 62 } "Weekend" { $Interval = 65 } "EveryDay" { $Interval = 127 } 1 { $Interval += 1 } 2 { $Interval += 2 } 4 { $Interval += 4 } 8 { $Interval += 8 } 16 { $Interval += 16 } 32 { $Interval += 32 } 64 { $Interval += 64 } 62 { $Interval = 62 } 65 { $Interval = 65 } 127 { $Interval = 127 } default { $Interval = 0 } } } $RegexTime = '^(?:(?:([01]?\d|2[0-3]))?([0-5]?\d))?([0-5]?\d)$' if ($PagerDay -in ('Everyday', 'Saturday', 'Weekends')) { # Check the start time if (-not $SaturdayStartTime -and $Force) { $SaturdayStartTime = '000000' Write-Message -Message "Saturday Start time was not set. Force is being used. Setting it to $SaturdayStartTime" -Level Verbose } elseif (-not $SaturdayStartTime) { Stop-Function -Message "Please enter Saturday start time or use -Force to use defaults." return } elseif ($SaturdayStartTime -notmatch $RegexTime) { Stop-Function -Message "Start time $SaturdayStartTime needs to match between '000000' and '235959'" return } # Check the end time if (-not $SaturdayEndTime -and $Force) { $SaturdayEndTime = '235959' Write-Message -Message "Saturday End time was not set. Force is being used. Setting it to $SaturdayEndTime" -Level Verbose } elseif (-not $SaturdayEndTime) { Stop-Function -Message "Please enter a Saturday end time or use -Force to use defaults." return } elseif ($SaturdayEndTime -notmatch $RegexTime) { Stop-Function -Message "End time $SaturdayEndTime needs to match between '000000' and '235959'" return } } if ($PagerDay -in ('Everyday', 'Sunday', 'Weekends')) { # Check the start time if (-not $SundayStartTime -and $Force) { $SundayStartTime = '000000' Write-Message -Message "Sunday Start time was not set. Force is being used. Setting it to $SundayStartTime" -Level Verbose } elseif (-not $SundayStartTime) { Stop-Function -Message "Please enter a Sunday start time or use -Force to use defaults." return } elseif ($SundayStartTime -notmatch $RegexTime) { Stop-Function -Message "Start time $SundayStartTime needs to match between '000000' and '235959'" return } # Check the end time if (-not $SundayEndTime -and $Force) { $SundayEndTime = '235959' Write-Message -Message "Sunday End time was not set. Force is being used. Setting it to $SundayEndTime" -Level Verbose } elseif (-not $SundayEndTime) { Stop-Function -Message "Please enter a Sunday End Time or use -Force to use defaults." return } elseif ($SundayEndTime -notmatch $RegexTime) { Stop-Function -Message "Sunday End time $SundayEndTime needs to match between '000000' and '235959'" return } } if ($PagerDay -in ('Everyday', 'Weekdays', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')) { # Check the start time if (-not $WeekdayStartTime -and $Force) { $WeekdayStartTime = '000000' Write-Message -Message "Weekday Start time was not set. Force is being used. Setting it to $WeekdayStartTime" -Level Verbose } elseif (-not $WeekdayStartTime) { Stop-Function -Message "Please enter Weekday Start Time or use -Force to use defaults." return } elseif ($WeekdayStartTime -notmatch $RegexTime) { Stop-Function -Message "Weekday Start time $WeekdayStartTime needs to match between '000000' and '235959'" return } # Check the end time if (-not $WeekdayEndTime -and $Force) { $WeekdayEndTime = '235959' Write-Message -Message "Weekday End time was not set. Force is being used. Setting it to $WeekdayEndTime" -Level Verbose } elseif (-not $WeekdayEndTime) { Stop-Function -Message "Please enter a Weekday End Time or use -Force to use defaults." return } elseif ($WeekdayEndTime -notmatch $RegexTime) { Stop-Function -Message "Weekday End time $WeekdayEndTime needs to match between '000000' and '235959'" return } } if ($IsFailsafeOperator -and ($FailsafeNotificationMethod -notin ('NotifyMail', 'NotifyPager'))) { Stop-Function -Message "You must specify a notifiation method for the failsafe operator." return } #Format times if ($SaturdayStartTime) { $SaturdayStartTime = $SaturdayStartTime.Insert(4, ':').Insert(2, ':') } if ($SaturdayEndTime) { $SaturdayEndTime = $SaturdayEndTime.Insert(4, ':').Insert(2, ':') } if ($SundayStartTime) { $SundayStartTime = $SundayStartTime.Insert(4, ':').Insert(2, ':') } if ($SundayEndTime) { $SundayEndTime = $SundayEndTime.Insert(4, ':').Insert(2, ':') } if ($WeekdayStartTime) { $WeekdayStartTime = $WeekdayStartTime.Insert(4, ':').Insert(2, ':') } if ($WeekdayEndTime) { $WeekdayEndTime = $WeekdayEndTime.Insert(4, ':').Insert(2, ':') } foreach ($instance in $SqlInstance) { try { $InputObject += Connect-DbaInstance -SqlInstance $instance -SqlCredential $SqlCredential } catch { Stop-Function -Message "Failure" -Category ConnectionError -ErrorRecord $_ -Target $instance -Continue } } foreach ($server in $InputObject) { $failsafe = $server.JobServer.AlertSystem | Select-Object FailsafeOperator if ((Get-DbaAgentOperator -SqlInstance $server -Operator $Operator).Count -ne 0) { if ($force -eq $false) { if ($Pscmdlet.ShouldProcess($server, "Operator $operator exists at $server. Use -Force to drop and and create it.")) { Write-Message -Level Verbose -Message "Operator $operator exists at $server. Use -Force to drop and create." } continue } else { if ($failsafe.FailsafeOperator -eq $operator -and $IsFailsafeOperator) { Write-Message -Level Verbose -Message "$operator is the failsafe operator. Skipping drop." continue } if ($Pscmdlet.ShouldProcess($server, "Dropping operator $operator")) { try { Write-Message -Level Verbose -Message "Dropping Operator $operator" $server.JobServer.Operators[$operator].Drop() } catch { Stop-Function -Message "Issue dropping operator" -Category InvalidOperation -ErrorRecord $_ -Target $server -Continue } } } } if ($Pscmdlet.ShouldProcess($server, "Creating Operator $operator")) { try { $JobServer = $server.JobServer $operators = $JobServer.Operators $operators = New-Object Microsoft.SqlServer.Management.Smo.Agent.Operator( $JobServer, $Operator) if ($EmailAddress) { $operators.EmailAddress = $EmailAddress } if ($NetSendAddress) { $operators.NetSendAddress = $NetSendAddress } if ($PagerAddress) { $operators.PagerAddress = $PagerAddress } if ($Interval) { $operators.PagerDays = $Interval } if ($SaturdayStartTime) { $operators.SaturdayPagerStartTime = $SaturdayStartTime } if ($SaturdayEndTime) { $operators.SaturdayPagerEndTime = $SaturdayEndTime } if ($SundayStartTime) { $operators.SundayPagerStartTime = $SundayStartTime } if ($SundayEndTime) { $operators.SundayPagerEndTime = $SundayEndTime } if ($WeekdayStartTime) { $operators.WeekdayPagerStartTime = $WeekdayStartTime } if ($WeekdayEndTime) { $operators.WeekdayPagerEndTime = $WeekdayEndTime } $operators.Create() if ($IsFailsafeOperator) { $server.JobServer.AlertSystem.FailSafeOperator = $Operator $server.JobServer.AlertSystem.FailSafeOperator.NotificationMethod = $FailsafeNotificationMethod $server.JobServer.AlertSystem.Alter() } Write-Message -Level Verbose -Message "Creating Operator $operator" Get-DbaAgentOperator -SqlInstance $server -Operator $Operator } catch { Stop-Function -Message "Issue creating operator." -Category InvalidOperation -ErrorRecord $_ -Target $server } } } } } # SIG # Begin signature block # MIIZewYJKoZIhvcNAQcCoIIZbDCCGWgCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU08slk4dKasXpxlGYmgx0otQp # axagghSJMIIE/jCCA+agAwIBAgIQDUJK4L46iP9gQCHOFADw3TANBgkqhkiG9w0B # AQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD # VQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFz # c3VyZWQgSUQgVGltZXN0YW1waW5nIENBMB4XDTIxMDEwMTAwMDAwMFoXDTMxMDEw # NjAwMDAwMFowSDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMu # MSAwHgYDVQQDExdEaWdpQ2VydCBUaW1lc3RhbXAgMjAyMTCCASIwDQYJKoZIhvcN # AQEBBQADggEPADCCAQoCggEBAMLmYYRnxYr1DQikRcpja1HXOhFCvQp1dU2UtAxQ # tSYQ/h3Ib5FrDJbnGlxI70Tlv5thzRWRYlq4/2cLnGP9NmqB+in43Stwhd4CGPN4 # bbx9+cdtCT2+anaH6Yq9+IRdHnbJ5MZ2djpT0dHTWjaPxqPhLxs6t2HWc+xObTOK # fF1FLUuxUOZBOjdWhtyTI433UCXoZObd048vV7WHIOsOjizVI9r0TXhG4wODMSlK # XAwxikqMiMX3MFr5FK8VX2xDSQn9JiNT9o1j6BqrW7EdMMKbaYK02/xWVLwfoYer # vnpbCiAvSwnJlaeNsvrWY4tOpXIc7p96AXP4Gdb+DUmEvQECAwEAAaOCAbgwggG0 # MA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG # AQUFBwMIMEEGA1UdIAQ6MDgwNgYJYIZIAYb9bAcBMCkwJwYIKwYBBQUHAgEWG2h0 # dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAfBgNVHSMEGDAWgBT0tuEgHf4prtLk # YaWyoiWyyBc1bjAdBgNVHQ4EFgQUNkSGjqS6sGa+vCgtHUQ23eNqerwwcQYDVR0f # BGowaDAyoDCgLoYsaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJl # ZC10cy5jcmwwMqAwoC6GLGh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFz # c3VyZWQtdHMuY3JsMIGFBggrBgEFBQcBAQR5MHcwJAYIKwYBBQUHMAGGGGh0dHA6 # Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBPBggrBgEFBQcwAoZDaHR0cDovL2NhY2VydHMu # ZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3VyZWRJRFRpbWVzdGFtcGluZ0NB # LmNydDANBgkqhkiG9w0BAQsFAAOCAQEASBzctemaI7znGucgDo5nRv1CclF0CiNH # o6uS0iXEcFm+FKDlJ4GlTRQVGQd58NEEw4bZO73+RAJmTe1ppA/2uHDPYuj1UUp4 # eTZ6J7fz51Kfk6ftQ55757TdQSKJ+4eiRgNO/PT+t2R3Y18jUmmDgvoaU+2QzI2h # F3MN9PNlOXBL85zWenvaDLw9MtAby/Vh/HUIAHa8gQ74wOFcz8QRcucbZEnYIpp1 # FUL1LTI4gdr0YKK6tFL7XOBhJCVPst/JKahzQ1HavWPWH1ub9y4bTxMd90oNcX6X # t/Q/hOvB46NJofrOp79Wz7pZdmGJX36ntI5nePk2mOHLKNpbh6aKLzCCBRowggQC # oAMCAQICEAMFu4YhsKFjX7/erhIE520wDQYJKoZIhvcNAQELBQAwcjELMAkGA1UE # BhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2lj # ZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIENvZGUg # U2lnbmluZyBDQTAeFw0yMDA1MTIwMDAwMDBaFw0yMzA2MDgxMjAwMDBaMFcxCzAJ # BgNVBAYTAlVTMREwDwYDVQQIEwhWaXJnaW5pYTEPMA0GA1UEBxMGVmllbm5hMREw # DwYDVQQKEwhkYmF0b29sczERMA8GA1UEAxMIZGJhdG9vbHMwggEiMA0GCSqGSIb3 # DQEBAQUAA4IBDwAwggEKAoIBAQC8v2N7q+O/vggBtpjmteofFo140k73JXQ5sOD6 # QLzjgija+scoYPxTmFSImnqtjfZFWmucAWsDiMVVro/6yGjsXmJJUA7oD5BlMdAK # fuiq4558YBOjjc0Bp3NbY5ZGujdCmsw9lqHRAVil6P1ZpAv3D/TyVVq6AjDsJY+x # rRL9iMc8YpD5tiAj+SsRSuT5qwPuW83ByRHqkaJ5YDJ/R82ZKh69AFNXoJ3xCJR+ # P7+pa8tbdSgRf25w4ZfYPy9InEvsnIRVZMeDjjuGvqr0/Mar73UI79z0NYW80yN/ # 7VzlrvV8RnniHWY2ib9ehZligp5aEqdV2/XFVPV4SKaJs8R9AgMBAAGjggHFMIIB # wTAfBgNVHSMEGDAWgBRaxLl7KgqjpepxA8Bg+S32ZXUOWDAdBgNVHQ4EFgQU8MCg # +7YDgENO+wnX3d96scvjniIwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG # AQUFBwMDMHcGA1UdHwRwMG4wNaAzoDGGL2h0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNv # bS9zaGEyLWFzc3VyZWQtY3MtZzEuY3JsMDWgM6Axhi9odHRwOi8vY3JsNC5kaWdp # Y2VydC5jb20vc2hhMi1hc3N1cmVkLWNzLWcxLmNybDBMBgNVHSAERTBDMDcGCWCG # SAGG/WwDATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20v # Q1BTMAgGBmeBDAEEATCBhAYIKwYBBQUHAQEEeDB2MCQGCCsGAQUFBzABhhhodHRw # Oi8vb2NzcC5kaWdpY2VydC5jb20wTgYIKwYBBQUHMAKGQmh0dHA6Ly9jYWNlcnRz # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURDb2RlU2lnbmluZ0NB # LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCPzflwlQwf1jak # EqymPOc0nBxiY7F4FwcmL7IrTLhub6Pjg4ZYfiC79Akz5aNlqO+TJ0kqglkfnOsc # jfKQzzDwcZthLVZl83igzCLnWMo8Zk/D2d4ZLY9esFwqPNvuuVDrHvgh7H6DJ/zP # Vm5EOK0sljT0UQ6HQEwtouH5S8nrqCGZ8jKM/+DeJlm+rCAGGf7TV85uqsAn5JqD # En/bXE1AlyG1Q5YiXFGS5Sf0qS4Nisw7vRrZ6Qc4NwBty4cAYjzDPDixorWI8+FV # OUWKMdL7tV8i393/XykwsccCstBCp7VnSZN+4vgzjEJQql5uQfysjcW9rrb/qixp # csPTKYRHMIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0B # AQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk # IElEIFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQsw # CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu # ZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQg # Q29kZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA # +NOzHH8OEa9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ # 1DcZ17aq8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0 # sSgmuyRpwsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6s # cKKrzn/pfMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4Tz # rGdOtcT3jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg # 0A9kczyen6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIB # ADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUH # AQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYI # KwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz # c3VyZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0 # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaG # NGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RD # QS5jcmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0 # dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYE # FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6en # IZ3zbcgPMA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06 # GsTvMGHXfgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5j # DhNLrddfRHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgC # PC6Ro8AlEeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIy # sjaKJAL+L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4Gb # T8aTEAb8B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHvMIIFMTCC # BBmgAwIBAgIQCqEl1tYyG35B5AXaNpfCFTANBgkqhkiG9w0BAQsFADBlMQswCQYD # VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln # aWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew # HhcNMTYwMTA3MTIwMDAwWhcNMzEwMTA3MTIwMDAwWjByMQswCQYDVQQGEwJVUzEV # MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t # MTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgVGltZXN0YW1waW5n # IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvdAy7kvNj3/dqbqC # mcU5VChXtiNKxA4HRTNREH3Q+X1NaH7ntqD0jbOI5Je/YyGQmL8TvFfTw+F+CNZq # FAA49y4eO+7MpvYyWf5fZT/gm+vjRkcGGlV+Cyd+wKL1oODeIj8O/36V+/OjuiI+ # GKwR5PCZA207hXwJ0+5dyJoLVOOoCXFr4M8iEA91z3FyTgqt30A6XLdR4aF5FMZN # JCMwXbzsPGBqrC8HzP3w6kfZiFBe/WZuVmEnKYmEUeaC50ZQ/ZQqLKfkdT66mA+E # f58xFNat1fJky3seBdCEGXIX8RcG7z3N1k3vBkL9olMqT4UdxB08r8/arBD13ays # 6Vb/kwIDAQABo4IBzjCCAcowHQYDVR0OBBYEFPS24SAd/imu0uRhpbKiJbLIFzVu # MB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMBIGA1UdEwEB/wQIMAYB # Af8CAQAwDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHkGCCsG # AQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t # MEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl # cnRBc3N1cmVkSURSb290Q0EuY3J0MIGBBgNVHR8EejB4MDqgOKA2hjRodHRwOi8v # Y3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMDqg # OKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURS # b290Q0EuY3JsMFAGA1UdIARJMEcwOAYKYIZIAYb9bAACBDAqMCgGCCsGAQUFBwIB # FhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAsGCWCGSAGG/WwHATANBgkq # hkiG9w0BAQsFAAOCAQEAcZUS6VGHVmnN793afKpjerN4zwY3QITvS4S/ys8DAv3F # p8MOIEIsr3fzKx8MIVoqtwU0HWqumfgnoma/Capg33akOpMP+LLR2HwZYuhegiUe # xLoceywh4tZbLBQ1QwRostt1AuByx5jWPGTlH0gQGF+JOGFNYkYkh2OMkVIsrymJ # 5Xgf1gsUpYDXEkdws3XVk4WTfraSZ/tTYYmo9WuWwPRYaQ18yAGxuSh1t5ljhSKM # Ycp5lH5Z/IwP42+1ASa2bKXuh1Eh5Fhgm7oMLSttosR+u8QlK0cCCHxJrhO24XxC # QijGGFbPQTS2Zl22dHv1VjMiLyI2skuiSpXY9aaOUjGCBFwwggRYAgEBMIGGMHIx # CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 # dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJ # RCBDb2RlIFNpZ25pbmcgQ0ECEAMFu4YhsKFjX7/erhIE520wCQYFKw4DAhoFAKB4 # MBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQB # gjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkE # MRYEFMIt1+cg5Bx2zPkgAusB8zUVhxjEMA0GCSqGSIb3DQEBAQUABIIBAKBQZgmb # /YiMif+wmZY6B7bGw25tFfd+sPrLVb83rOjRa+XT9NynktKQK1xuW2EyYv8NFduR # ysuVZu4FbA38ivZZOfEnfyrH5KZJN/puOo+eYL78X+GLLUY4mirHlHTIJQN3Um2j # 5h7gGoq7ZyIln4TXoSS7jiy8vSSff7fcGLnzYvgPOAjYUn+jt68KbPSmkhkpS3/h # FMF8mG7WYI00RcaKbSrKgC7UwJx1zZN+CqkU46GeAKfslhHsx514uH/lQFZbnOeA # 4jRtrjMSs5y9QFgd19DY7Z2AYDGL+Fk6y4aQ9eegOq5xIv1zAQgo5LdcaqmP63TA # lI0kdPe20sAxwTahggIwMIICLAYJKoZIhvcNAQkGMYICHTCCAhkCAQEwgYYwcjEL # MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 # LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElE # IFRpbWVzdGFtcGluZyBDQQIQDUJK4L46iP9gQCHOFADw3TANBglghkgBZQMEAgEF # AKBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIy # MDIwNDA5NDc1MlowLwYJKoZIhvcNAQkEMSIEIDzz9yWyUisme1gyCQqauvt5HCPk # ZMMbWa7nfFfMouuTMA0GCSqGSIb3DQEBAQUABIIBAC9GMS1YCZM1+XQy6hE3Zyqi # vjGI76j+UrtyrmN+iTx6Cuf2QR4rCBhrYeTz2ovlAsk9AuuebKQjcaEg0u45lAW7 # Bb6KHJEAfhT6iaadf1Jvd4/xGN1XVQoD8EBA5kKEbOKmPuG0/QsykW25ayF/9ER0 # l0RfAHsctTd7wHSaCKT09NLH5SXXx2GR35XKmuNBcc5V0uZqA/6yqOo/tI7osHhF # 3/2j3mhkx9y/85wNWwfnnzbDdSdFyUPfnP8kU6J5BTQwJh+jVzpOQNfKvtqEva41 # mLm4XLzdtuNKR9nFyfIdgf5hW7RS5F5VKbQotKV8vQLcAAKknOisXWE4F8VXul4= # SIG # End signature block |