net472/custom/PsExt/Set-CsCallQueueModern.ps1
# ---------------------------------------------------------------------------------- # # Copyright Microsoft Corporation # 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. # See the License for the specific language governing permissions and # limitations under the License. # ---------------------------------------------------------------------------------- # Objective of this custom file: replacing the parameters' names. function Set-CsCallQueueModern { [CmdletBinding(PositionalBinding=$true)] param( [Parameter(Mandatory=$true, position=0)] [System.String] # The identity of the call queue to be updated. ${Identity}, [Parameter(Mandatory=$false)] [System.String] # The Name of the call queue to be updated. ${Name}, [Parameter(Mandatory=$false)] [System.Int16] # The AgentAlertTime parameter represents the time (in seconds) that a call can remain unanswered before it is automatically routed to the next agent. ${AgentAlertTime}, [Parameter(Mandatory=$false)] [bool] # The AllowOptOut parameter indicates whether or not agents can opt in or opt out from taking calls from a Call Queue. ${AllowOptOut}, [Parameter(Mandatory=$false)] [System.Guid[]] # The DistributionLists parameter lets you add all the members of the distribution lists to the Call Queue. This is a list of distribution list GUIDs. ${DistributionLists}, [Parameter(Mandatory=$false)] [bool] # The UseDefaultMusicOnHold parameter indicates that this Call Queue uses the default music on hold. ${UseDefaultMusicOnHold}, [Parameter(Mandatory=$false)] [System.String] # The WelcomeMusicAudioFileId parameter represents the audio file to play when callers are connected with the Call Queue. ${WelcomeMusicAudioFileId}, [Parameter(Mandatory=$false)] [System.String] # The MusicOnHoldAudioFileId parameter represents music to play when callers are placed on hold. ${MusicOnHoldAudioFileId}, [Parameter(Mandatory=$false)] [Microsoft.Rtc.Management.Hosted.HuntGroup.Models.OverflowAction] # The OverflowAction parameter designates the action to take if the overflow threshold is reached. ${OverflowAction}, [Parameter(Mandatory=$false)] [System.String] # The OverflowActionTarget parameter represents the target of the overflow action. ${OverflowActionTarget}, [Parameter(Mandatory=$false)] [System.Int16] # The OverflowThreshold parameter defines the number of calls that can be in the queue at any one time before the overflow action is triggered. ${OverflowThreshold}, [Parameter(Mandatory=$false)] [Microsoft.Rtc.Management.Hosted.HuntGroup.Models.TimeoutAction] # The TimeoutAction parameter defines the action to take if the timeout threshold is reached. ${TimeoutAction}, [Parameter(Mandatory=$false)] [System.String] # The TimeoutActionTarget represents the target of the timeout action. ${TimeoutActionTarget}, [Parameter(Mandatory=$false)] [System.Int16] # The TimeoutThreshold parameter defines the time (in seconds) that a call can be in the queue before that call times out. ${TimeoutThreshold}, [Parameter(Mandatory=$false)] [Microsoft.Rtc.Management.Hosted.HuntGroup.Models.RoutingMethod] # The RoutingMethod defines how agents will be called in a Call Queue. ${RoutingMethod}, [Parameter(Mandatory=$false)] [bool] # The PresenceBasedRouting parameter indicates whether or not presence based routing will be applied while call being routed to Call Queue agents. ${PresenceBasedRouting}, [Parameter(Mandatory=$false)] [bool] # The ConferenceMode parameter indicates whether or not Conference mode will be applied on calls for current call queue. ${ConferenceMode}, [Parameter(Mandatory=$false)] [System.Guid[]] # The Users parameter lets you add agents to the Call Queue. ${Users}, [Parameter(Mandatory=$false)] [System.String] # The LanguageId parameter indicates the language that is used to play shared voicemail prompts. ${LanguageId}, [Parameter(Mandatory=$false)] [System.String] # This parameter is reserved for Microsoft internal use only. ${LineUri}, [Parameter(Mandatory=$false)] [System.Guid[]] # The OboResourceAccountIds parameter lets you add resource account with phone number to the Call Queue. ${OboResourceAccountIds}, [Parameter(Mandatory=$false)] [System.String] # The OverflowSharedVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is to be played as a greeting to the caller when transferred to shared voicemail on overflow. ${OverflowSharedVoicemailTextToSpeechPrompt}, [Parameter(Mandatory=$false)] [System.String] # The OverflowSharedVoicemailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is to be played as a greeting to the caller when transferred to shared voicemail on overflow. ${OverflowSharedVoicemailAudioFilePrompt}, [Parameter(Mandatory=$false)] [bool] # The EnableOverflowSharedVoicemailTranscription parameter is used to turn on transcription for voicemails left by a caller on overflow. ${EnableOverflowSharedVoicemailTranscription}, [Parameter(Mandatory=$false)] [System.String] # The TimeoutSharedVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is to be played as a greeting to the caller when transferred to shared voicemail on timeout. ${TimeoutSharedVoicemailTextToSpeechPrompt}, [Parameter(Mandatory=$false)] [System.String] # The TimeoutSharedVoicemailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is to be played as a greeting to the caller when transferred to shared voicemail on timeout. ${TimeoutSharedVoicemailAudioFilePrompt}, [Parameter(Mandatory=$false)] [bool] # The EnableTimeoutSharedVoicemailTranscription parameter is used to turn on transcription for voicemails left by a caller on timeout. ${EnableTimeoutSharedVoicemailTranscription}, [Parameter(Mandatory=$false)] [System.String] # Id of the channel to connect a call queue to. ${ChannelId}, [Parameter(Mandatory=$false)] [System.Guid] # Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). ${ChannelUserObjectId} ) process { # Default ErrorAction to Stop if (!$PSBoundParameters.ContainsKey('ErrorAction')) { $PSBoundParameters.Add('ErrorAction', 'Stop') } # Get the existing CallQueue by Identity. $getParams = @{Identity = $Identity; FilterInvalidObos = $false} $getResult = Microsoft.Teams.ConfigAPI.Cmdlets.internal\Get-CsCallQueue @getParams -ErrorAction Stop # Convert the existing CallQueue DTO to domain model. $existingCallQueue= [Microsoft.Rtc.Management.Hosted.CallQueue.Models.CallQueue]::new() $existingCallQueue.ParseFrom($getResult.CallQueue) | Out-Null # Take the delta from the existing CallQueue and apply it to the param hasthable to form # an appropriate DTO model for the CallQueue PUT API. FYI, CallQueue PUT API is very much # different from its AA counterpart which accepts params/properties to be updated only. # Param hashtable modification begins. if ($PSBoundParameters.ContainsKey('LineUri')) { # Stick with the current TRPS cmdlet policy of silently ignoring the LineUri. Later, we # need to remove this param from TRPS and ConfigAPI based cmdlets. Public facing document # must be updated as well. $PSBoundParameters.Remove('LineUri') | Out-Null } if ([string]::IsNullOrWhiteSpace($Name)) { $PSBoundParameters.Add('Name', $existingCallQueue.Name) } if (!$PSBoundParameters.ContainsKey('AgentAlertTime')) { $PSBoundParameters.Add('AgentAlertTime', $existingCallQueue.AgentAlertTime) } if ([string]::IsNullOrWhiteSpace($LanguageId) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.LanguageId)) { $PSBoundParameters.Add('LanguageId', $existingCallQueue.LanguageId) } if (!$PSBoundParameters.ContainsKey('OverflowThreshold')) { $PSBoundParameters.Add('OverflowThreshold', $existingCallQueue.OverflowThreshold) } if (!$PSBoundParameters.ContainsKey('TimeoutThreshold')) { $PSBoundParameters.Add('TimeoutThreshold', $existingCallQueue.TimeoutThreshold) } if (!$PSBoundParameters.ContainsKey('RoutingMethod')) { $PSBoundParameters.Add('RoutingMethod', $existingCallQueue.RoutingMethod) } if (!$PSBoundParameters.ContainsKey('AllowOptOut') ) { $PSBoundParameters.Add('AllowOptOut', $existingCallQueue.AllowOptOut) } if (!$PSBoundParameters.ContainsKey('ConferenceMode')) { $PSBoundParameters.Add('ConferenceMode', $existingCallQueue.ConferenceMode) } if (!$PSBoundParameters.ContainsKey('PresenceBasedRouting')) { $PSBoundParameters.Add('PresenceAwareRouting', $existingCallQueue.PresenceBasedRouting) } else { $PSBoundParameters.Add('PresenceAwareRouting', $PresenceBasedRouting) $PSBoundParameters.Remove('PresenceBasedRouting') | Out-Null } if ([string]::IsNullOrWhiteSpace($ChannelId)) { if (![string]::IsNullOrWhiteSpace($existingCallQueue.ChannelId)) { $PSBoundParameters.Add('ThreadId', $existingCallQueue.ChannelId) } } else { $PSBoundParameters.Add('ThreadId', $ChannelId) $PSBoundParameters.Remove('ChannelId') | Out-Null } if ($null -eq $OboResourceAccountIds -or $OboResourceAccountIds.Length -eq 0) { if ($null -ne $existingCallQueue.OboResourceAccountIds -and $existingCallQueue.OboResourceAccountIds.Length -gt 0) { $PSBoundParameters.Add('OboResourceAccountIds', $existingCallQueue.OboResourceAccountIds) } } if (!$PSBoundParameters.ContainsKey('WelcomeMusicAudioFileId') -and ![string]::IsNullOrWhiteSpace($existingCallQueue.WelcomeMusicResourceId)) { $PSBoundParameters.Add('WelcomeMusicAudioFileId', $existingCallQueue.WelcomeMusicResourceId) } if (!$PSBoundParameters.ContainsKey('MusicOnHoldAudioFileId') -and !$PSBoundParameters.ContainsKey('UseDefaultMusicOnHold')) { # The already persiting values cannot be conflicting as those were validated by admin service. if (![string]::IsNullOrWhiteSpace($existingCallQueue.MusicOnHoldResourceId)) { $PSBoundParameters.Add('MusicOnHoldAudioFileId', $existingCallQueue.MusicOnHoldResourceId) } if ($null -ne $existingCallQueue.UseDefaultMusicOnHold) { $PSBoundParameters.Add('UseDefaultMusicOnHold', $existingCallQueue.UseDefaultMusicOnHold) } } elseif ($UseDefaultMusicOnHold -eq $false -and !$PSBoundParameters.ContainsKey('MusicOnHoldAudioFileId')) { if (![string]::IsNullOrWhiteSpace($existingCallQueue.MusicOnHoldResourceId)) { $PSBoundParameters.Add('MusicOnHoldAudioFileId', $existingCallQueue.MusicOnHoldResourceId) } } if ($null -eq $DistributionLists -or $DistributionLists.Length -eq 0) { if ($null -ne $existingCallQueue.DistributionLists -and $existingCallQueue.DistributionLists.Length -gt 0) { $PSBoundParameters.Add('DistributionLists', $existingCallQueue.DistributionLists) } } if ($null -eq $Users -or $Users.Length -eq 0) { if ($null -ne $existingCallQueue.Users -and $existingCallQueue.Users.Length -gt 0) { $PSBoundParameters.Add('Users', $existingCallQueue.Users) } } if ([string]::IsNullOrWhiteSpace($OverflowSharedVoicemailTextToSpeechPrompt) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.OverflowSharedVoicemailTextToSpeechPrompt)) { $PSBoundParameters.Add('OverflowSharedVoicemailTextToSpeechPrompt', $existingCallQueue.OverflowSharedVoicemailTextToSpeechPrompt) } if ([string]::IsNullOrWhiteSpace($OverflowSharedVoicemailAudioFilePrompt) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.OverflowSharedVoicemailAudioFilePrompt)) { $PSBoundParameters.Add('OverflowSharedVoicemailAudioFilePrompt', $existingCallQueue.OverflowSharedVoicemailAudioFilePrompt) } if (!$PSBoundParameters.ContainsKey('EnableOverflowSharedVoicemailTranscription')) { if ($existingCallQueue.EnableOverflowSharedVoicemailTranscription -ne $null) { $PSBoundParameters.Add('EnableOverflowSharedVoicemailTranscription', $existingCallQueue.EnableOverflowSharedVoicemailTranscription) } } if ([string]::IsNullOrWhiteSpace($OverflowActionTarget) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.OverflowActionTargetId)) { $PSBoundParameters.Add('OverflowActionTarget', $existingCallQueue.OverflowActionTargetId) } if (!$PSBoundParameters.ContainsKey('OverflowAction')) { $PSBoundParameters.Add('OverflowAction', $existingCallQueue.OverflowAction) } if ([string]::IsNullOrWhiteSpace($TimeoutSharedVoicemailTextToSpeechPrompt) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.TimeoutSharedVoicemailTextToSpeechPrompt) ) { $PSBoundParameters.Add('TimeoutSharedVoicemailTextToSpeechPrompt', $existingCallQueue.TimeoutSharedVoicemailTextToSpeechPrompt) } if ([string]::IsNullOrWhiteSpace($TimeoutSharedVoicemailAudioFilePrompt) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.TimeoutSharedVoicemailAudioFilePrompt)) { $PSBoundParameters.Add('TimeoutSharedVoicemailAudioFilePrompt', $existingCallQueue.TimeoutSharedVoicemailAudioFilePrompt) } if (!$PSBoundParameters.ContainsKey('EnableTimeoutSharedVoicemailTranscription')) { if ($existingCallQueue.EnableTimeoutSharedVoicemailTranscription -ne $null) { $PSBoundParameters.Add('EnableTimeoutSharedVoicemailTranscription', $existingCallQueue.EnableTimeoutSharedVoicemailTranscription) } } if ([string]::IsNullOrWhiteSpace($TimeoutActionTarget) -and ![string]::IsNullOrWhiteSpace($existingCallQueue.TimeoutActionTargetId)) { $PSBoundParameters.Add('TimeoutActionTarget', $existingCallQueue.TimeoutActionTargetId) } if (!$PSBoundParameters.ContainsKey('TimeoutAction')) { $PSBoundParameters.Add('TimeoutAction', $existingCallQueue.TimeoutAction) } # End of param hashtable modification # Update the CallQueue. $updateResult = Microsoft.Teams.ConfigAPI.Cmdlets.internal\Set-CsCallQueue @PSBoundParameters Write-AdminServiceDiagnostic($updateResult.Diagnostic) # Unfortunately, CallQueue PUT API does not return a CallQueue DTO model. We need to GET the CallQueue again # to print the updated model. $getResult = Microsoft.Teams.ConfigAPI.Cmdlets.internal\Get-CsCallQueue @getParams $updatedCallQueue = [Microsoft.Rtc.Management.Hosted.CallQueue.Models.CallQueue]::new() $updatedCallQueue.ParseFrom($getResult.CallQueue) } } # SIG # Begin signature block # MIIjcQYJKoZIhvcNAQcCoIIjYjCCI14CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAonuVn11qPlnxG # 2icDRBt2IXK9M5+AHNCen8Obe7t9dKCCDWgwggXmMIIDzqADAgECAhMzAAACGLZ6 # ZdUj8uhbAAAAAAIYMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjEwNDI5MTkxMjU0WhcNMjIwNDI4MTkxMjU0WjByMQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMRwwGgYDVQQDExNTa3lw # ZSBTb2Z0d2FyZSBTYXJsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA # 3Cx+JK+zOV8H12yaAdFOybBDc6EsSJeYcVlAaB6mltlnABTHMt5DSdVDXSZGZ2MG # jQdr558vEua3NAFNxjtJ1gJHiRx+dosIKWviKIN4x69ymBuDU0ijzdfRwuj1MwMH # lk9ngil2J4UuJrFhDIYCK5D/QJKRMn3TKS2fJJZ4WzMa5gIxZkB6NpIxJ4Bl+Who # P6E333Dcp7q9tR2nkA9ME9527gD67/P2lykJN0HfIWLaQO1bxq1E/+MZKjHjfSM4 # QUE3ulAl9zVvSPH1FlUoo9rXV8dYGEtf+ePZhzQk5XGJzcDMfY3w00/M6hKwpG5M # zcf5kODoGgMk/sf3ujc+lQIDAQABo4IBZzCCAWMwEwYDVR0lBAwwCgYIKwYBBQUH # AwMwHQYDVR0OBBYEFBjq9v90aOLYYKp2XlmF+n/eTQRoMEUGA1UdEQQ+MDykOjA4 # MR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDI1 # NCs0NjQ1NjEwHwYDVR0jBBgwFoAUSG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0f # BE0wSzBJoEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv # TWljQ29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMw # UQYIKwYBBQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2Vy # dHMvTWljQ29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNydDAMBgNVHRMBAf8EAjAA # MA0GCSqGSIb3DQEBCwUAA4ICAQAG/OCvMAqUJwFCSN8Xr6fesACAhesl3vFB+Kq8 # xD8MO2NoNorp0SqEvCwG7klpO6SDeCNiax1Aj6N94AJXeWZz9WZA08I4b6JT4PqD # 0Q1fKMEvOOAHeob2Ia/NMBZomI5YUwoATI7+C/kNdBF93iwqozYHotlZoyq9HT7n # OQdnlJ3lcrmpx8LfoAWvS5S6QPyFVIM6l1x/blqnOjttpxi4mABdtKLjwaDELx3h # 1Gl4SMNwfhdZFcZ3KVa4A8/KGDPEDukSyZKala4KG46GcFBaAL5VMjYcd0XLvTIr # pvIneQuTT/RvH982H4sJORPdqeAY1xF6flW8xXJyDBSezprcq6oaD331YQgM83dG # rSc1IJen0ekxlkk35yHUXH2A25Du3AUPkqaMWDhUc+aIv4ul6ILDL3Mg+j6s3lH5 # +zwEoYgFXYorMas4rrXixDaataP62AlDq4XBhqIDnxMDr/1lzWishD1QEZt2zdEJ # wjWWbDOIdAaY1ZDctdBDpGTDb457dSswuX5/52gV/x/FIx1W7aJQyZlgAU7ABhvM # 66K3o5NyCi7f9PuuuQ9Zv4uOvzsIvRxtKN9oiLHEEdX/PGFSoSJRoG5DQUKI54qq # L0yNl5BFxji6koDlDLzrpR05K7+4E+kRfhpTHswSYah1QWWh39bTDSbnEDlUSel7 # dsIGiTCCB3owggVioAMCAQICCmEOkNIAAAAAAAMwDQYJKoZIhvcNAQELBQAwgYgx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1p # Y3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTExMDcw # ODIwNTkwOVoXDTI2MDcwODIxMDkwOVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ # Q0EgMjAxMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t # 2G6qghBNNLrytlghn0IbKmvpWlCquAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnV # ARQxQtOJDXlkh36UYCRsr55JnOloXtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ2 # 6DJSJhIv56sIUM+zRLdd2MQuA3WraPPLbfM6XKEW9Ea64DhkrG5kNXimoGMPLdNA # k/jj3gcN1Vx5pUkp5w2+oBN3vpQ97/vjK1oQH01WKKJ6cuASOrdJXtjt7UORg9l7 # snuGG9k+sYxd6IlPhBryoS9Z5JA7La4zWMW3Pv4y07MDPbGyr5I4ftKdgCz1TlaR # ITUlwzluZH9TupwPrRkjhMv0ugOGjfdf8NBSv4yUh7zAIXQlXxgotswnKDglmDlK # Ns98sZKuHCOnqWbsYR9q4ShJnV+I4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43BdD1FG # d7P4AOG8rAKCX9vAFbO9G9RVS+c5oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/C # HFfbg43sTUkwp6uO3+xbn6/83bBm4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7Iv # hNdXnFy/dygo8e1twyiPLI9AN0/B4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+ # TzOE2rCIF96eTvSWsLxGoGyY0uDWiIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3 # FQEEAwIBADAdBgNVHQ4EFgQUSG5k5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGC # NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w # HwYDVR0jBBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2g # S4ZJaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWlj # Um9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYI # KwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWlj # Um9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNydDCBnwYDVR0gBIGXMIGUMIGRBgkr # BgEEAYI3LgMwgYMwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvZG9jcy9wcmltYXJ5Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBM # AGUAZwBhAGwAXwBwAG8AbABpAGMAeQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTAN # BgkqhkiG9w0BAQsFAAOCAgEAZ/KGpZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQ # wWVfLiw++MNy0W2D/r4/6ArKO79HqaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpL # HPM8QotS0LD9a+M+By4pm+Y9G6XUtR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJG # KsKKELukqQUMm+1o+mgulaAqPyprWEljHwlpblqYluSD9MCP80Yr3vw70L01724l # ruWvJ+3Q3fMOr5kol5hNDj0L8giJ1h/DMhji8MUtzluetEk5CsYKwsatruWy2dsV # iFFFWDgycScaf7H0J/jeLDogaZiyWYlobm+nt3TDQAUGpgEqKD6CPxNNZgvAs031 # 4Y9/HG8VfUWnduVAKmWjw11SYobDHWM2l4bf2vP48hahmifhzaWX0O5dY0HjWwec # hz4GdwbRBrF1HxS+YWG18NzGGwS+30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOXpQlL # SBCZgB/QACnFsZulP0V3HjXG0qKin3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs # 6jeZeRhL/9azI2h15q/6/IvrC4DqaTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4 # ETIheu9BCrE/+6jMpF3BoYibV3FWTkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16 # UM0xghVfMIIVWwIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu # Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv # cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDEx # AhMzAAACGLZ6ZdUj8uhbAAAAAAIYMA0GCWCGSAFlAwQCAQUAoIGmMBkGCSqGSIb3 # DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV # MC8GCSqGSIb3DQEJBDEiBCBiziBujUYKh0ZvZ7y7FCn4fktIxn3CLttJ2GBKqIHV # wjA6BgorBgEEAYI3AgEMMSwwKqAMgAoAUwBrAHkAcABloRqAGGh0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbTANBgkqhkiG9w0BAQEFAASCAQCZmzSz/pHtMX6RaEb3ToaS # 81ZKP0ictfepYCsqJs+9Bt7S0ZTPRNl/aJ2s0uFRAN7u8nYgF/IJ9mDQWSjZESIy # nf+Ygn3dXFp6vV1BSQSWiZnuQAMENCPsDpfiBuzfB4eE9hPKeiMymlz1iPvK2dLq # MhcC95fl+mYMkebZQWSWx8UzImtkxdDqodcAU+IaQftAfrHvkKsgfEZrnZo0+PGH # 9sSJ/laEAqUC3+kYvE69DAg01ibpORAv08AEpTcw2WYHVzQsISOXyZmIa+V/IPXR # qEEnLPEXpuXk5Npm8TjUqBKa40aKvCSnJfNJ5ZNS2SNyq5ZZ/hXx5bYgNkSiFAoU # oYIS8TCCEu0GCisGAQQBgjcDAwExghLdMIIS2QYJKoZIhvcNAQcCoIISyjCCEsYC # AQMxDzANBglghkgBZQMEAgEFADCCAVUGCyqGSIb3DQEJEAEEoIIBRASCAUAwggE8 # AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIHNHuMHiEvSV80Tfyvnt # ckI6d40MHki3tuZPCFIEstZFAgZh/CFccygYEzIwMjIwMjE4MDgzODU2LjY1OVow # BIACAfSggdSkgdEwgc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYw # JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4OTdBLUUzNTYtMTcwMTElMCMGA1UEAxMc # TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCDkQwggT1MIID3aADAgECAhMz # AAABYAcg8JJI2r7rAAAAAAFgMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVT # MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l # LVN0YW1wIFBDQSAyMDEwMB4XDTIxMDExNDE5MDIyMFoXDTIyMDQxMTE5MDIyMFow # gc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsT # IE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFs # ZXMgVFNTIEVTTjo4OTdBLUUzNTYtMTcwMTElMCMGA1UEAxMcTWljcm9zb2Z0IFRp # bWUtU3RhbXAgU2VydmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB # ALQxgBzQ8sbM8VIzPgmN9TWkWs2k8S1CZUyN58SLzLW3158rZZ/O4l68Gb4SkE/i # BUSk4yVesBKOVonbLL3nAwIXmsYhn5BR0RXPI9XLizzVqslUgHPzTPRtMtZu+jty # gCph5MfquBia/Sp0Hjj7lEDrNHR/C/1/xCaZyQpgIR7lARJIaRVh5y+WqbqmbUsF # IoF5UHwwzJFJpOXxYtA0uWuraKpdCUzAzh6wkKZgMkRrXP3E/w5cs4U7cYiYjZRG # lm3Gr+vJgkyTsKW3OBiTtkaW/ejtpW+S6pu/NezXFqAzwuSDjeIImOOeEavlA9O9 # VpCexo1z6VCpp0Eb3904uhMCAwEAAaOCARswggEXMB0GA1UdDgQWBBSnmx74t6gX # 4JrhdTIJdXzQ674fYzAfBgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVtVTBW # BgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny # bC9wcm9kdWN0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUH # AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp # L2NlcnRzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8EAjAA # MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQAVNJgImzoF # polQdU8nYdcX7ySlKEP359qg5Q/SFp7e4j5dA1V+ksvmKdZB1jhjsBs2ImNOItyN # Y2u2Nwja4JNxFf+2y/KTcP8GE97H8ogr9c+Vb1uHF7gtne3F8vnv0Cb79K4mbhi6 # S0QIhqPcI8c36UqePwKMLm32J+vO9wuKW2NK8v9bA5gQu92Aj6uf7AGAuNYHIh0i # Zok+bcuJpYPKKY1nvS2Ea1gzmF8J/irPY4MW8v4/gaekJosfkc6gboma4w1gFDGK # gKhv7tlT1+53uHGR2TS1qMYeNwGfGtjiTxQ1BlQEZibk7PFfCe+KRhTRTCRtzWnS # g3NEE0y2qLnUMIIGcTCCBFmgAwIBAgIKYQmBKgAAAAAAAjANBgkqhkiG9w0BAQsF # ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE # AxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcN # MTAwNzAxMjEzNjU1WhcNMjUwNzAxMjE0NjU1WjB8MQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt # cCBQQ0EgMjAxMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkdDbx3 # EYo6IOz8E5f1+n9plGt0VBDVpQoAgoX77XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEf # QRsalR3OCROOfGEwWbEwRA/xYIiEVEMM1024OAizQt2TrNZzMFcmgqNFDdDq9UeB # zb8kYDJYYEbyWEeGMoQedGFnkV+BVLHPk0ySwcSmXdFhE24oxhr5hoC732H8RsEn # HSRnEnIaIYqvS2SJUGKxXf13Hz3wV3WsvYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9 # buWayrGo8noqCjHw2k4GkbaICDXoeByw6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzA # yURdXhacAQVPIk0CAwEAAaOCAeYwggHiMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud # DgQWBBTVYzpcijGQ80N7fEYbxTNoWoVtVTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi # AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV # 9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js # Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx # MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2 # LTIzLmNydDCBoAYDVR0gAQH/BIGVMIGSMIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYB # BQUHAgEWMWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVm # YXVsdC5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AUABvAGwAaQBj # AHkAXwBTAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAAfm # iFEN4sbgmD+BcQM9naOhIW+z66bM9TG+zwXiqf76V20ZMLPCxWbJat/15/B4vceo # niXj+bzta1RXCCtRgkQS+7lTjMz0YBKKdsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDI # r79/xn/yN31aPxzymXlKkVIArzgPF/UveYFl2am1a+THzvbKegBvSzBEJCI8z+0D # pZaPWSm8tv0E4XCfMkon/VWvL/625Y4zu2JfmttXQOnxzplmkIz/amJ/3cVKC5Em # 4jnsGUpxY517IW3DnKOiPPp/fZZqkHimbdLhnPkd/DjYlPTGpQqWhqS9nhquBEKD # uLWAmyI4ILUl5WTs9/S/fmNZJQ96LjlXdqJxqgaKD4kWumGnEcua2A5HmoDF0M2n # 0O99g/DhO3EJ3110mCIIYdqwUB5vvfHhAN/nMQekkzr3ZUd46PioSKv33nJ+YWtv # d6mBy6cJrDm77MbL2IK0cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3g # My4SKfXAL1QnIffIrE7aKLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1 # mYovG8chr1m1rtxEPJdQcdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9Y # BS7vDaBQNdrvCScc1bN+NR4Iuto229Nfj950iEkSoYIC0jCCAjsCAQEwgfyhgdSk # gdEwgc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNV # BAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1U # aGFsZXMgVFNTIEVTTjo4OTdBLUUzNTYtMTcwMTElMCMGA1UEAxMcTWljcm9zb2Z0 # IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUA+zKSdHWLRNzIlyqH # VxXZgKnZ0KKggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu # Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv # cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN # BgkqhkiG9w0BAQUFAAIFAOW5vRowIhgPMjAyMjAyMTgxMDM3MTRaGA8yMDIyMDIx # OTEwMzcxNFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5bm9GgIBADAKAgEAAgIX # UAIB/zAHAgEAAgIRkTAKAgUA5bsOmgIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgor # BgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUA # A4GBABEFRNDBbmfVjcBfS6sCMf+v8MDbfk3wg3dPLTGZQPkVgFpziHt3teQKWDlj # w4yr16vvRfauY1KIy8iGwgt2cHaEWJAaUHcxL9nk85z9csIW4FcCFtzhv97pWUPj # fh8Me+Bn9tKQarWfU4GhAYJoiqQ6YcVaqMhtgX+dGIecyKVNMYIDDTCCAwkCAQEw # gZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE # AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAFgByDwkkjavusA # AAAAAWAwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B # CRABBDAvBgkqhkiG9w0BCQQxIgQgq7uv6cGSI0PbX3yzzu22PdwsZTJGl7rSh2JL # Y5KKcWQwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCACEqO9o3Mul1tFp68e # 6ivKfpXS/49cFwniXkj3qLBluTCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w # IFBDQSAyMDEwAhMzAAABYAcg8JJI2r7rAAAAAAFgMCIEIM0d46oRbfdHwx6M0nyo # PQzH3+oWXXOL9tflfbocIKe9MA0GCSqGSIb3DQEBCwUABIIBAD2KfzINU1kbwBAJ # Tjv6R88sG7LHgFxWdY7aqG8B12mEfS6jsg04Mz6U7YvVLeRalTMd8ttIW3UU5dW4 # 9r6OnYjf/8owctcFy7XNQ5qGaysVwgZLXMLeZR98pjD2PDMHgMAbeYTNesIsb5WZ # qgblawIoVOdiXjKO1edyymV/dp8pFiOjYBpjrHPW90gV3XPOO89SEDcNmcfTDjyQ # go45WT4645HLry4tlWQBtMjUDZq1AJK6g/NglHzlqixvCg10Ra0MtwUs66p21MzO # IqeIcns3m/0OsAKUAHamDQLXWl/zeGozp51lXN8D2RPfnGkocUE67LgHO6etMWmu # m81WsVM= # SIG # End signature block |