Last active
November 27, 2023 23:05
-
-
Save rhymeswithmogul/ef1d4ecbf5242eabb1032e8ba26804cc to your computer and use it in GitHub Desktop.
A script to get mailbox sizes and print them beautifully.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
Get-MailboxSizes.ps1 | |
Copyright (C) 2022-2023 Colin Cogle. | |
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public | |
License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later | |
version. | |
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied | |
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more | |
details. | |
You should have received a copy of the GNU Affero General Public License along with this program. If not, see | |
<https://www.gnu.org/licenses/>. | |
#> | |
<#PSScriptInfo | |
.VERSION 1.2.1 | |
.GUID 69843657-4a27-4370-b522-e5c23c2501a4 | |
.AUTHOR Colin Cogle | |
.COPYRIGHT (c) 2022-2023 Colin Cogle, Endsight. All Rights Reserved. | |
.TAGS Exchange, ExchangeOnline, mailbox, archive, size, limits, reporting | |
.LICENSEURI https://www.gnu.org/licenses/agpl-3.0.en.html | |
.PROJECTURI https://gist.github.com/rhymeswithmogul/ef1d4ecbf5242eabb1032e8ba26804cc | |
.EXTERNALMODULEDEPENDENCIES ExchangeOnlineManagement | |
.RELEASENOTES Re-licensed under GPLv3. | |
#> | |
<# | |
.SYNOPSIS | |
Reports on a tenant's mailbox sizes. | |
.DESCRIPTION | |
This script will report on a client's mailbox and archive sizes, showing you capacities and current sizes. Data will be pulled from the currently-active Exchange Online connection. | |
.NOTES | |
You must be connected to Exchange Online before you can run this script. Please run Connect-ExchangeOnline first. | |
.PARAMETER Identity | |
One or more mailbox identities. These can be in any format accepted by Get-Mailbox. | |
.PARAMETER IncludeDiscoveryMailboxes | |
By default, discovery mailboxes will be ignored, to prevent polluting the output. To include them, you must explicitly specify this parameter. | |
.PARAMETER AsPlainText | |
By default, output will be colored if a mailbox is approaching capacity. To disable this, specify this switch. You might need to do this if you're exporting data in a way that does not handle ANSI colors (i.e., Termbin, a file). | |
.PARAMETER WarningColorThreshold | |
If a mailbox is more than 80% full, its usage will appear in yellow in the output. To override this, specify a number between 0 and 100. If -AsPlainText is specified, this will have no effect. | |
.PARAMETER ErrorColorThreshold | |
If a mailbox is more than 75% full, its usage will appear in red in the output. To override this, specify a number between 0 and 100. If -AsPlainText is specified, this will have no effect. | |
.EXAMPLE | |
PS C:\> Get-Mailbox | .\Get-MailboxSizes.ps1 | |
Return all mailboxes in the organization, and size information for each one. | |
.EXAMPLE | |
PS C:\> Get-EXOMailbox | .\Get-MailboxSizes.ps1 | Format-Table -AutoSize | |
Same as above, but formats it as a table. | |
.EXAMPLE | |
PS C:\> Get-Mailbox | .\Get-MailboxSizes.ps1 -WarningColorThreshold 50 | |
Show mailboxes, but color anything more than 50% full in yellow. | |
.EXAMPLE | |
PS C:\> Get-ExoMailbox -ResultSize Unlimited | .\Get-MailboxSizes.ps1 | Sort -Descending MailboxSizeRaw | Format-Table -AutoSize | |
How the author like to run this. | |
.EXAMPLE | |
PS C:\> Get-ExoMailbox | .\Get-MailboxSizes.ps1 | Export-CSV "MyReport.csv" | |
One example of how to pipe data into a CSV file. Once you do that, you can open that CSV file in a spreadsheet app and sort it however you'd like. When not outputting to the screen, all properties will be visible by default. | |
.INPUTS | |
Zero or more PSObjects. Ideally, this would be the output of Get-Mailbox or Get-EXOMailbox. | |
.OUTPUTS | |
Zero or more PSCustomObjects showing mailbox data. This can be sorted with Format-Table or any other cmdlet like it. | |
.LINK | |
Connect-ExchangeOnline | |
.LINK | |
Get-ExOMailbox | |
.LINK | |
Get-ExOMailboxStatistics | |
#> | |
#Requires -Version 7.2 | |
#Requires -Modules @{ModuleName='ExchangeOnlineManagement'; ModuleVersion='2.0.3'} | |
[CmdletBinding(DefaultParameterSetName='PrettyColors')] | |
[OutputType([PSCustomObject[]])] | |
Param( | |
[Parameter(Mandatory, Position=0, ValueFromPipeline, ValueFromPipelineByPropertyName)] | |
[Alias('Name', 'EmailAddress', 'UserPrincipalName', 'MailboxGuid', 'InputObject')] | |
[Object[]] $Identity, | |
[Switch] $IncludeDiscoveryMailboxes, | |
[Parameter(ParameterSetName='AsPlainText')] | |
[Switch] $AsPlainText, | |
[Parameter(ParameterSetName='PrettyColors')] | |
[ValidateRange(0,100)] | |
[Int] $WarningColorThreshold = 80, | |
[Parameter(ParameterSetName='PrettyColors')] | |
[ValidateRange(0,100)] | |
[Int] $ErrorColorThreshold = 95 | |
) | |
Begin { | |
$Activity = 'Checking mailbox and archive sizes' | |
Write-Progress -Activity $Activity -CurrentOperation 'Getting ready' -Status 'Initializing' -PercentComplete -1 | |
$UsersToCheck = @() | |
$ReturnValue = @() | |
$Red = $PSStyle.Foreground.Red | |
$Yellow = $PSStyle.Foreground.Yellow | |
$NormalColor = $PSStyle.Reset | |
# This will be used later. | |
$DefaultDisplayPropertySet = [Management.Automation.PSMemberInfo[]]@( | |
[Management.Automation.PSPropertySet]::new( | |
'DefaultDisplayPropertySet', | |
[String[]]@('User','Email','Mailbox Size','Mailbox Capacity','Mailbox Usage','Archive Size','Archive Capacity','Archive Usage') | |
) | |
) | |
} | |
Process { | |
$NameAndEmail = "$($Input.DisplayName) <$($Input.PrimarySmtpAddress)>" | |
Write-Progress -Activity $Activity -CurrentOperation 'Getting ready' -Status "Reading items from pipeline ($($UsersToCheck.Count) found)" -PercentComplete -1 | |
If ($Input.RecipientTypeDetails -eq 'DiscoveryMailbox' -and -not $IncludeDiscoveryMailboxes) | |
{ | |
Write-Debug "Skipping a discovery mailbox: $NameAndEmail" | |
} | |
Else | |
{ | |
Write-Debug "Found item #$($UsersToCheck.Count + 1): $NameAndEmail" | |
$UsersToCheck += $Input | |
} | |
} | |
End { | |
$progressCurrent = 0 | |
$progressMax = $UsersToCheck.Count * 2 | |
ForEach ($user in $UsersToCheck) | |
{ | |
$CurrentStatus = "Checking mailbox size for $user" | |
Write-Verbose $CurrentStatus | |
Write-Progress -Activity $Activity -Status $CurrentStatus -CurrentOperation "Checking users' mailboxes" -PercentComplete (100 * $progressCurrent / $progressMax) | |
# Surprisingly (or I guess, unsurprisingly, being Microsoft), the replacement for Get-Mailbox, Get-ExoMailbox, | |
# returns fewer properties than its replacement -- namely, ProhibitSendQuota is missing. | |
Get-Mailbox -Identity ($user.Guid) -ResultSize Unlimited -ErrorAction Continue | ForEach-Object { | |
$Mailbox = $_ | |
$Name = $_.DisplayName | |
Write-Verbose "Found $($_.DisplayName) <$($_.PrimarySmtpAddress)> (GUID=$($_.Guid))" | |
#region Check mailbox size | |
$MailboxStats = (Get-EXOMailboxStatistics $_.Guid) | |
$BoxSize = $MailboxStats.TotalItemSize.ToString().Split('(')[0] | |
$BoxSizeRaw = [UInt64]($MailboxStats.TotalItemSize.ToString().Split('(')[1].Split(' ')[0].Replace(',','')) | |
$BoxMaxSize = $Mailbox.ProhibitSendQuota.ToString().Split('(')[0] | |
$BoxMaxSizeRaw = [UInt64]($Mailbox.ProhibitSendQuota.ToString().Split('(')[1].Split(' ')[0].Replace(',','')) | |
If ($BoxMaxSizeRaw -eq 0) { | |
# this should never happen, but sometimes it does. | |
$BoxUsage = 0 | |
} Else { | |
$BoxUsage = [Math]::Round($BoxSizeRaw / $BoxMaxSizeRaw * 100, 1) | |
} | |
If (-Not $AsPlainText) { | |
If ($BoxSizeRaw -ge ($BoxMaxSizeRaw * ($ErrorColorThreshold / 100))) { | |
$Name = "$Red$Name$Reset" | |
$BoxUsage = "$Red$BoxUsage%$NormalColor" | |
$BoxSize = "$Red$BoxSize$NormalColor" | |
} | |
ElseIf ($BoxSizeRaw -ge ($BoxMaxSizeRaw * ($WarningColorThreshold / 100))) { | |
$Name = "$Yellow$Name$Reset" | |
$BoxUsage = "$Yellow$BoxUsage%$Reset" | |
$BoxSize = "$Yellow$BoxSize$Reset" | |
} | |
Else { | |
$BoxUsage = "$BoxUsage%" | |
} | |
} | |
Else { | |
$BoxUsage = "$BoxUsage%" | |
} | |
$progressCurrent++ | |
#endregion | |
#region Check archive size (if it exists) | |
$Archive = (Get-Mailbox $user.Guid -Archive -ErrorAction SilentlyContinue) | |
If ($null -ne $Archive) { | |
$CurrentStatus = "Checking archive mailbox for $user" | |
Write-Verbose $CurrentStatus | |
Write-Progress -Activity $Activity -Status $CurrentStatus -CurrentOperation "Checking users' mailboxes" -PercentComplete (100 * $progressCurrent / $progressMax) | |
$ArchiveStats = (Get-EXOMailboxStatistics -Identity $_.Guid -Archive) | |
If ($null -eq $ArchiveStats) { | |
Write-Warning "Archive mailbox information for $user could not be retrieved." | |
} | |
Else | |
{ | |
$ArcSize = $ArchiveStats.TotalItemSize.ToString().Split('(')[0] | |
$ArcSizeRaw = [UInt64]($ArchiveStats.TotalItemSize.ToString().Split('(')[1].Split(' ')[0].Replace(',','')) | |
$ArcMaxSize = $Archive.ProhibitSendQuota.ToString().Split('(')[0] | |
$ArcMaxSizeRaw = [UInt64]($Archive.ProhibitSendQuota.ToString().Split('(')[1].Split(' ')[0].Replace(',','')) | |
If ($ArcMaxSizeRaw -eq 0) { | |
# this should never happen, but sometimes it does. | |
$ArcUsage = 0 | |
} Else { | |
$ArcUsage = [Math]::Round($ArcSizeRaw / $ArcMaxSizeRaw * 100, 1) | |
} | |
If (-Not $AsPlainText) { | |
If ($ArcSizeRaw -ge ($ArcMaxSizeRaw * ($ErrorColorThreshold / 100))) { | |
$Name = "$Red$Name$Reset" | |
$ArcUsage = "$Red$ArcUsage%$Reset" | |
$ArcSize = "$Red$ArcSize$Reset" | |
} | |
ElseIf ($ArcSizeRaw -ge ($ArcMaxSizeRaw * ($WarningColorThreshold / 100))) { | |
$Name = "$Yellow$Name$Reset" | |
$ArcUsage = "$Yellow$ArcUsage%$Reset" | |
$ArcSize = "$Yellow$ArcSize$Reset" | |
} | |
Else { | |
$ArcUsage = "$ArcUsage%" | |
} | |
} | |
Else { | |
$ArcUsage = "$ArcUsage%" | |
} | |
} | |
} | |
$progressCurrent++ | |
#endregion | |
#region Create object to hold this user's results. | |
If (-Not $BoxMaxSizeRaw -or $BoxMaxSizeRaw -eq 0) { | |
$BoxMaxSizeRaw = 1 | |
} | |
If (-Not $ArcMaxSizeRaw -or $ArcMaxSizeRaw -eq 0) { | |
$ArcMaxSizeRaw = 1 | |
} | |
$UserInfo = [PSCustomObject]@{ | |
'User' = $Name | |
'Email' = $_.PrimarySmtpAddress | |
'Mailbox Size' = $BoxSize | |
'Mailbox Capacity' = $BoxMaxSize | |
'Mailbox Usage' = $BoxUsage | |
'MailboxSizeBytes' = $BoxSizeRaw | |
'MailboxCapacityBytes' = $BoxMaxSizeRaw | |
'MailboxUsageRaw' = $BoxSizeRaw / $BoxMaxSizeRaw | |
'Archive Size' = $ArcSize | |
'Archive Capacity' = $ArcMaxSize | |
'Archive Usage' = ($Archive ? $ArcUsage : '') | |
'ArchiveSizeBytes' = $ArcSizeRaw | |
'ArchiveCapacityBytes' = $ArcMaxSizeRaw | |
'ArchiveUsageRaw' = $ArcSizeRaw / $ArcMaxSizeRaw | |
} | |
# Hide some properties by default. | |
$UserInfo | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $DefaultDisplayPropertySet | |
$ReturnValue += $UserInfo | |
#endregion | |
# Variables are not cleared in between Process runs. | |
Remove-Variable -Name 'ArcSize','ArcMaxSize','ArcUsage','ArcSizeRaw','ArcMaxSizeRaw','BoxSize','BoxMaxSize','BoxUsage','BoxSizeRaw','BoxMaxSizeRaw' -ErrorAction Ignore | |
} | |
} | |
Write-Progress -Activity $Activity -Completed | |
$ReturnValue | |
} | |
# SIG # Begin signature block | |
# MIIo5wYJKoZIhvcNAQcCoIIo2DCCKNQCAQExDzANBglghkgBZQMEAgEFADB5Bgor | |
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG | |
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC7hhU5b90gAD+h | |
# vSXvtYxqRFnI8YiPNtUf0/99DTFNzaCCI60wggR+MIIC5qADAgECAhEApna5vdQ8 | |
# txEq0UQhUxLsMzANBgkqhkiG9w0BAQwFADBBMQswCQYDVQQGEwJVUzEQMA4GA1UE | |
# ChMHQ2VydGVyYTEgMB4GA1UEAxMXQ2VydGVyYSBDb2RlIFNpZ25pbmcgQ0EwHhcN | |
# MjIxMTI1MDAwMDAwWhcNMjUxMTI0MjM1OTU5WjBPMQswCQYDVQQGEwJVUzEUMBIG | |
# A1UECAwLQ29ubmVjdGljdXQxFDASBgNVBAoMC0NvbGluIENvZ2xlMRQwEgYDVQQD | |
# DAtDb2xpbiBDb2dsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIS0nGDy1zQpFKyt | |
# Jcg1PiDfvpNR79NCbfgewfNj/SLANVb3XbggjeibCl1fcefKLnXFv0DXHIKjYg0e | |
# hcFMbUQ1hqpwnnWQji1DcLeshAMdvWmTguYmtL6P4ik/BQDUuaOCAY8wggGLMB8G | |
# A1UdIwQYMBaAFP7HyA+eaTU9w8t0+WyaszQGqVwJMB0GA1UdDgQWBBSO8z1ie4Xj | |
# RAjUjX9ctrNH9aglYzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADATBgNV | |
# HSUEDDAKBggrBgEFBQcDAzBJBgNVHSAEQjBAMDQGCysGAQQBsjEBAgJlMCUwIwYI | |
# KwYBBQUHAgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEATBIBgNV | |
# HR8EQTA/MD2gO6A5hjdodHRwOi8vQ2VydGVyYS5jcmwuc2VjdGlnby5jb20vQ2Vy | |
# dGVyYUNvZGVTaWduaW5nQ0EuY3JsMIGABggrBgEFBQcBAQR0MHIwQwYIKwYBBQUH | |
# MAKGN2h0dHA6Ly9DZXJ0ZXJhLmNydC5zZWN0aWdvLmNvbS9DZXJ0ZXJhQ29kZVNp | |
# Z25pbmdDQS5jcnQwKwYIKwYBBQUHMAGGH2h0dHA6Ly9DZXJ0ZXJhLm9jc3Auc2Vj | |
# dGlnby5jb20wDQYJKoZIhvcNAQEMBQADggGBAAslTgxzcZ0FYetE3IOghFsEtGV+ | |
# yEM03ZrGFRGt7/DmHe4MK15XUsORJzN60eyNzxchQhV1S90jqQflkl6ImuvdaRve | |
# 586ZhYtW4tl2+2YbM26jwVqB9tT06W1SHb03+Vb29jjRbp5r+w3lEXxzGC660MFk | |
# 1L8kRQcqKjt0izVeVm6qKfNVQyak5xWpeX8n8NVaCqVWfijWlLDr8Ydeg9XeJy4H | |
# c9OweQ7+seRJzr/MgHQ0SFuXaRrbk0v5UmyoH83LZt/qo+XnrU+XeX870UVxucTl | |
# AitkDB6t/dvmetmXQGE5stJMyIK5jgtMqQ/q/GIrTFYMmcAsXxNQh8uv+jFa0HhF | |
# PZVhhdRbximJQUPyKb7IMuAzwdw1jrTcAF1FbkLlHXdu7dohbSfsN8ZA5Cr397wN | |
# n7UBs939mMBb4ZR+nBPFhibj5RISssbICi8z3LNb6CNuayOn3PtG/NRcf5T8iFyW | |
# /XbipYDJcxuQKwP8HWmlVIfQooRP6HR+Doee+DCCBY0wggR1oAMCAQICEA6bGI75 | |
# 0C3n79tQ4ghAGFowDQYJKoZIhvcNAQEMBQAwZTELMAkGA1UEBhMCVVMxFTATBgNV | |
# BAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEkMCIG | |
# A1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTIyMDgwMTAwMDAw | |
# MFoXDTMxMTEwOTIzNTk1OVowYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lD | |
# ZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGln | |
# aUNlcnQgVHJ1c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC | |
# CgKCAgEAv+aQc2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLhKac9WKt2ms2uexuE | |
# DcQwH/MbpDgW61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+vp+pVxZZVXKvaJNw | |
# wrK6dZlqczKU0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMpLc7sXk7Ik/ghYZs0 | |
# 6wXGXuxbGrzryc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+nMNlW7sp7XeOtyU9e | |
# 5TXnMcvak17cjo+A2raRmECQecN4x7axxLVqGDgDEI3Y1DekLgV9iPWCPhCRcKtV | |
# gkEy19sEcypukQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmkwuapoGfdpCe8oU85 | |
# tRFYF/ckXEaPZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0yt5LHucOY67m1O+S | |
# kjqePdwA5EUlibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP9yGyshG3u3/y1Yxw | |
# LEFgqrFjGESVGnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHhD5QMIR2yVCkliWzl | |
# DlJRR3S+Jqy2QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnffEx1P2PsIV/EIFFr | |
# b7GrhotPwtZFX50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId5RsCAwEAAaOCATow | |
# ggE2MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOzX44LScV1kTN8uZz/nupiu | |
# HA9PMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA4GA1UdDwEB/wQE | |
# AwIBhjB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRp | |
# Z2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGlnaWNlcnQu | |
# Y29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDBFBgNVHR8EPjA8MDqgOKA2 | |
# hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290 | |
# Q0EuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQwFAAOCAQEAcKC/ | |
# Q1xV5zhfoKN0Gz22Ftf3v1cHvZqsoYcs7IVeqRq7IviHGmlUIu2kiHdtvRoU9BNK | |
# ei8ttzjv9P+Aufih9/Jy3iS8UgPITtAq3votVs/59PesMHqai7Je1M/RQ0SbQyHr | |
# lnKhSLSZy51PpwYDE3cnRNTnf+hZqPC/Lwum6fI0POz3A8eHqNJMQBk1RmppVLC4 | |
# oVaO7KTVPeix3P0c2PR3WlxUjG/voVA9/HYJaISfb8rbII01YBwCA8sgsKxYoA5A | |
# Y8WYIsGyWfVVa88nq2x2zm8jLfR+cWojayL/ErhULSd+2DrZ8LaHlv1b0VysGMNN | |
# n3O3AamfV6peKOK5lDCCBd4wggPGoAMCAQICEAH9bTD8o8pRqBu8ZA41Ay0wDQYJ | |
# KoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5 | |
# MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO | |
# ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0 | |
# aG9yaXR5MB4XDTEwMDIwMTAwMDAwMFoXDTM4MDExODIzNTk1OVowgYgxCzAJBgNV | |
# BAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0 | |
# eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VS | |
# VHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B | |
# AQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sIs9CsVw127c0n00ytUINh4qogTQkt | |
# ZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NCtnbyqTsrkfji | |
# b9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQfjtTkUcYRZ0YI | |
# UcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM8Ny8nkz+rwWW | |
# NR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hmAUTnAU5GU5sz | |
# YPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiVZ4vuPVb+DNBp | |
# DxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9N6frXTpsNVzb | |
# QdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sFqV4Wg8y4Z+Lo | |
# E53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9HE0XvMnsQybQ | |
# v0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ+gQek9QmRkpQ | |
# gbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyXHAc/DVL17e8v | |
# gg8CAwEAAaNCMEAwHQYDVR0OBBYEFFN5v1qqK0rPVIDh2JvAnfKyA2bLMA4GA1Ud | |
# DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQBc | |
# 1HwNz/cBfUGZZQxzxVKfy/jPmQZ/G9pDFZ+eAlVXlhTxUjwnh5Qo7R86ATeidvxT | |
# UMCEm8ZrTrqMIU+ijlVikfNpFdi8iOPEqgv976jpS1UqBiBtVXgpGe5fMFxLJBFV | |
# /ySabl4qK+4LTZ9/9wE4lBSVQwcJ+2Cp7hyrEoygml6nmGpZbYs/CPvI0UWvGBVk | |
# kBIPcyguxeIkTvxY7PD0Rf4is+svjtLZRWEFwZdvqHZyj4uMNq+/DQXOcY3mpm8f | |
# bKZxYsXY0INyDPFnEYkMnBNMcjTfvNVx36px3eG5bIw8El1l2r1XErZDa//l3k1m | |
# EVHPma7sF7bocZGM3kn+3TVxohUnlBzPYeMmu2+jZyUhXebdHQsuaBs7gq/sg2eF | |
# 1JhRdLG5mYCJ/394GVx5SmAukkCuTDcqLMnHYsgOXfc2W8rgJSUBtN0aB5x3AD/Q | |
# 3NXsPdT6uz/MhdZvf6kt37kC9/WXmrU12sNnsIdKqSieI47/XCdr4bBP8wfuAC7U | |
# WYfLUkGV6vRH1+5kQVV8jVkCld1incK57loodISlm7eQxwwH3/WJNnQy1ijBsLAL | |
# 4JxMwxzW/ONptUdGgS+igqvTY0RwxI3/LTO6rY97tXCIrj4Zz0Ao2PzIkLtdmSL1 | |
# UuZYxR+IMUPuiB3Xxo48Q2odpxjefT0W8WL5ypCo/TCCBjwwggQkoAMCAQICECFm | |
# 8IpR6/yrzI9EMJGpSw4wDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMw | |
# EQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UE | |
# ChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNB | |
# IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIyMDkwNzAwMDAwMFoXDTMyMDkw | |
# NjIzNTk1OVowQTELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0NlcnRlcmExIDAeBgNV | |
# BAMTF0NlcnRlcmEgQ29kZSBTaWduaW5nIENBMIIBojANBgkqhkiG9w0BAQEFAAOC | |
# AY8AMIIBigKCAYEAvp9xPhzayPelQMu7ycbIP8Kls73mzciRa7hO+f06rZl7Xw4F | |
# DKuA1Cu7nen1GFCPuqRvCqEizDiO4/WnM4nQcfVFkfpXfZf24qUztHzq5qsxlwpK | |
# W/Dkksj+I9A15W1dFbmToYswFElXzmKHSnZXoYMz+R4ZSwmnVB/XsvUPaAFi2dCr | |
# KN54pMcsBweUOKFunKWkji/MMnnPJGebOF1fLeDgyEHQvYuzlVfOWU3xjMiZYfqY | |
# gi8jo28qa0IYR17SdFZIgUWRlKhJnNKwyXfY8kElpfpeSbjM20jLch1+UhPXwTU/ | |
# 5yHwXvUCSW4idXEihxbcleNXbeO8wfwfNHn2of4Y1w4mShxHFhDu/kPmzDIkpPct | |
# AmDyJfJfcL1E+aRFqGYhJwCOiMNQE9dfDkYL11Rtue3zmcpkqKbH6P6EI3UQSG1t | |
# H0OqY65xpSadXS/yGoXqOOEQpDf/U3trlyqroxhUhm0dN82CBqSXqMa23scYns1O | |
# 3u2kSPPHIEULOVq5AgMBAAGjggFmMIIBYjAfBgNVHSMEGDAWgBRTeb9aqitKz1SA | |
# 4dibwJ3ysgNmyzAdBgNVHQ4EFgQU/sfID55pNT3Dy3T5bJqzNAapXAkwDgYDVR0P | |
# AQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUH | |
# AwMwIgYDVR0gBBswGTANBgsrBgEEAbIxAQICZTAIBgZngQwBBAEwUAYDVR0fBEkw | |
# RzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNl | |
# cnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHEGCCsGAQUFBwEBBGUwYzA6BggrBgEF | |
# BQcwAoYuaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUFBQUNB | |
# LmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkq | |
# hkiG9w0BAQwFAAOCAgEAe11w9/hMUEgtubZdffaBE4vbRYL0hunnc2Yaup6rzig/ | |
# GjVOaTA7gdoChGhuxDE0AoYMF1znfLBSuNrU6B8tO/ikxFprLayPz9IUmbhEd/Ry | |
# VbMimZiC7z74OfjIVx86Y279nJ0VmX6lgHvwc8QcAVMN00Qse97OD9EeWMuY+hB7 | |
# 1mKUp6pTipoqKJD4+hs2fOxjXew9OBYu6wjlgK6kbuBo+R2T7EuYyyfWubg9Cpwg | |
# dzRSpWmRO5DMG+u0FojEtP8MITbtJ1bLOWZ0JVvGKDWqNLVBvxHE8DwaAx3IrlZ8 | |
# 1lxLO3zEL/mpUnC6cdQlVkq3G7qdWfIdkaNhNAv3hu0tH3t8bLoXYDB6Kyp5hdGZ | |
# 1XAO7H4b7MVW1amciuBXys6/VvfWmR/9Wh1rjWuYtP+y94oLg1gEisa7+Qid2qy/ | |
# WSKC7cjpzwmg+6BGb2oEAO56pZToRc5a8vE9XcMPMO6hxI+MGbpqioQ/Nwa+94Ep | |
# D2aGUkmqX3gP6kUBbvS4Pys0jLgKxlyZDfwJb+4CWQOoZaiZoLAr/Y9+9j2YkeQD | |
# rt1A2zEDgOHRLlXYQDPuVNSu014pt8yAMY1OnHQSrTKwBZ2Y5H8AOw1yyIsMQISq | |
# OcPiepvzMAwSMJtTedvFq51+kuBHgltH2AdDlPfT13i3CAqn3LcFhehUZU4VIPsw | |
# ggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIx | |
# CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 | |
# dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH | |
# NDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVT | |
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1 | |
# c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqG | |
# SIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbS | |
# g9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9 | |
# /UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXn | |
# HwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0 | |
# VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4f | |
# sbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6AaRyBD40Nj | |
# gHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0 | |
# QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvv | |
# mz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T | |
# /jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk | |
# 42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp6103a50g5r | |
# mQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E | |
# FgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5n | |
# P+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcG | |
# CCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu | |
# Y29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln | |
# aUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8v | |
# Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNV | |
# HSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIB | |
# AH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxp | |
# wc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIl | |
# zpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQ | |
# cAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfe | |
# Kuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+j | |
# Sbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJsh | |
# IUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6 | |
# OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDw | |
# N7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR | |
# 81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2 | |
# VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIGwjCCBKqgAwIBAgIQ | |
# BUSv85SdCDmmv9s/X+VhFjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzEX | |
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0 | |
# ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTIzMDcxNDAw | |
# MDAwMFoXDTM0MTAxMzIzNTk1OVowSDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRp | |
# Z2lDZXJ0LCBJbmMuMSAwHgYDVQQDExdEaWdpQ2VydCBUaW1lc3RhbXAgMjAyMzCC | |
# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKNTRYcdg45brD5UsyPgz5/X | |
# 5dLnXaEOCdwvSKOXejsqnGfcYhVYwamTEafNqrJq3RApih5iY2nTWJw1cb86l+uU | |
# UI8cIOrHmjsvlmbjaedp/lvD1isgHMGXlLSlUIHyz8sHpjBoyoNC2vx/CSSUpIIa | |
# 2mq62DvKXd4ZGIX7ReoNYWyd/nFexAaaPPDFLnkPG2ZS48jWPl/aQ9OE9dDH9kgt | |
# XkV1lnX+3RChG4PBuOZSlbVH13gpOWvgeFmX40QrStWVzu8IF+qCZE3/I+PKhu60 | |
# pCFkcOvV5aDaY7Mu6QXuqvYk9R28mxyyt1/f8O52fTGZZUdVnUokL6wrl76f5P17 | |
# cz4y7lI0+9S769SgLDSb495uZBkHNwGRDxy1Uc2qTGaDiGhiu7xBG3gZbeTZD+BY | |
# QfvYsSzhUa+0rRUGFOpiCBPTaR58ZE2dD9/O0V6MqqtQFcmzyrzXxDtoRKOlO0L9 | |
# c33u3Qr/eTQQfqZcClhMAD6FaXXHg2TWdc2PEnZWpST618RrIbroHzSYLzrqawGw | |
# 9/sqhux7UjipmAmhcbJsca8+uG+W1eEQE/5hRwqM/vC2x9XH3mwk8L9CgsqgcT2c | |
# kpMEtGlwJw1Pt7U20clfCKRwo+wK8REuZODLIivK8SgTIUlRfgZm0zu++uuRONhR | |
# B8qUt+JQofM604qDy0B7AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYD | |
# VR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgG | |
# BmeBDAEEAjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxq | |
# II+eyG8wHQYDVR0OBBYEFKW27xPn783QZKHVVqllMaPe1eNJMFoGA1UdHwRTMFEw | |
# T6BNoEuGSWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH | |
# NFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGD | |
# MIGAMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYB | |
# BQUHMAKGTGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0 | |
# ZWRHNFJTQTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQEL | |
# BQADggIBAIEa1t6gqbWYF7xwjU+KPGic2CX/yyzkzepdIpLsjCICqbjPgKjZ5+PF | |
# 7SaCinEvGN1Ott5s1+FgnCvt7T1IjrhrunxdvcJhN2hJd6PrkKoS1yeF844ektrC | |
# QDifXcigLiV4JZ0qBXqEKZi2V3mP2yZWK7Dzp703DNiYdk9WuVLCtp04qYHnbUFc | |
# jGnRuSvExnvPnPp44pMadqJpddNQ5EQSviANnqlE0PjlSXcIWiHFtM+YlRpUurm8 | |
# wWkZus8W8oM3NG6wQSbd3lqXTzON1I13fXVFoaVYJmoDRd7ZULVQjK9WvUzF4UbF | |
# KNOt50MAcN7MmJ4ZiQPq1JE3701S88lgIcRWR+3aEUuMMsOI5ljitts++V+wQtaP | |
# 4xeR0arAVeOGv6wnLEHQmjNKqDbUuXKWfpd5OEhfysLcPTLfddY2Z1qJ+Panx+VP | |
# NTwAvb6cKmx5AdzaROY63jg7B145WPR8czFVoIARyxQMfq68/qTreWWqaNYiyjvr | |
# moI1VygWy2nyMpqy0tg6uLFGhmu6F/3Ed2wVbK6rr3M66ElGt9V/zLY4wNjsHPW2 | |
# obhDLN9OTH0eaHDAdwrUAuBcYLso/zjlUlrWrBciI0707NMX+1Br/wd3H3GXREHJ | |
# uEbTbDJ8WC9nR2XlG3O2mflrLAZG70Ee8PBf4NvZrZCARK+AEEGKMYIEkDCCBIwC | |
# AQEwVjBBMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHQ2VydGVyYTEgMB4GA1UEAxMX | |
# Q2VydGVyYSBDb2RlIFNpZ25pbmcgQ0ECEQCmdrm91Dy3ESrRRCFTEuwzMA0GCWCG | |
# SAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcN | |
# AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUw | |
# LwYJKoZIhvcNAQkEMSIEIPHt1py/BjbvCnfxZKoS0+TqoXpoUhJIfzQx150T+yXU | |
# MAsGByqGSM49AgEFAARoMGYCMQCgiqv22qY6dc0tDTBVSXVW/2N0ksJq/zrBCD9c | |
# mn8EohT12iktkW4BGPtRZ6hJCAECMQCWE9kEFargAXoWBDlQPXOWlbsWo8tmUsTL | |
# zvwhXSj3rvFP4RUN2vYIkeMjqrn33IChggMgMIIDHAYJKoZIhvcNAQkGMYIDDTCC | |
# AwkCAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4x | |
# OzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGlt | |
# ZVN0YW1waW5nIENBAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoGkw | |
# GAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjMxMTI3 | |
# MjMwNTE2WjAvBgkqhkiG9w0BCQQxIgQgBQLaVNt4fj45cHVu58KLUobCaZR1iwh9 | |
# JPJCbIhMX1cwDQYJKoZIhvcNAQEBBQAEggIAO5Zqh+YoR4IZ4W17c6cbv3jalOQy | |
# 2Kn1uz6fLaXFYAXEO56DqKleFTWUIWcTZGuuCrUC2v3I1cso54SvNznirnKRDs23 | |
# hT4hI1PxAXes6FtI9X+d7EGVfOamJuacMPMkX7OM2yNV+kt2bL75sga1PRiT2+X3 | |
# PzrIueKCDCof9A21t2bbih17xfMmqbGgVOg/ds4cRHIoDb6qi2epnhHnp7mNaXqf | |
# LQT/ieFXbae0IqbAkIyX+QsCAnTqJBC2ZaxqVHqBPtd/LEp24ReOF7rUcRyonqbE | |
# ZmjB35FytikQC8yKJPne3jQnqXG7zpBCsEj1zKk+BmM9W9eIINcJsC2wfw1MhTfd | |
# kw161Qa1ZoGtQ2JbOF6Gs504bdMVJ0s8OTkS7SbtH/LNoJmSyXIN4yLMWHFcgL9m | |
# ABU8hpQ8J32Xay70g7ioZFRRSTi6zfjWkj61UIduDdmvKomYHcRNnSP39IyJuX6y | |
# VUvVUSB5d+oUZbH32Bn18vCBmfZci/D5bJO8twJQOzUvgJZnHkXCNhGqY1csUbWO | |
# vJcUKDOxalmHdiQr51xxs3dCjY+dQUGPZOyG0K1t19FkFjWxyufhCgERlX8PZjST | |
# Dga3km550Ur8NaxzSsCZSNIDYirZrhMAMx8T4IxXWG/7vvCWILc4BpBC8ZG2Ja/k | |
# VRVxq6We3RXdZ38= | |
# SIG # End signature block |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment