InlineMailAttachments.psm1

#requires -Version 2.0

function Send-InlineMailMessage
{
    <#
    .Synopsis
       PowerShell version of the Send-MailMessage cmdlet with support for displaying attachments inline.
    .DESCRIPTION
       PowerShell version of the Send-MailMessage cmdlet with support for displaying attachments inline. Also adds a -Port parameter, which did not exist in the Send-MailMessage cmdlet until PowerShell 3.0.
    .PARAMETER InlineAttachments
       Hashtable of ContentID to FilePath mappings. The files referenced by the hashtables values will be attached to the email, and may be displayed inline in the HTML body by using URIs of "cid:ContentID".
    .EXAMPLE
        In this example, the two ContentIDs are "image1" and "image2". Those two attachments (test.jpg and test2.png) can be displayed inline.
        The rest of the parameters to this function are used the same way they would be used in PowerShell 3.0's Send-MailMessage cmdlet (and in PowerShell 2.0's version as well, except for the -Port parameter.)
        To keep the code readable, splatting is used to send the parameters to the function via a hashtable.
 
        $images = @{
            image1 = 'c:\temp\test.jpg'
            image2 = 'C:\temp\test2.png'
        }
   
        $body = '<html>
                   <body>
                     <img src="cid:image1"><br>
                     <img src="cid:image2">
                   </body>
                 </html>'
   
        $params = @{
            InlineAttachments = $images
            Attachments = 'C:\temp\attachment1.txt', 'C:\temp\attachment2.txt'
            Body = $body
            BodyAsHtml = $true
            Subject = 'Test email'
            From = 'username@gmail.com'
            To = 'recipient@domain.com'
            Cc = 'recipient2@domain.com', 'recipient3@domain.com'
            SmtpServer = 'smtp.gmail.com'
            Port = 587
            Credential = (Get-Credential)
            UseSsl = $true
        }
  
        Send-InlineMailMessage @params
    .INPUTS
       String.
 
       The -Attachments parameter accepts pipeline input, as it does in the built-in Send-MailMessage cmdlet.
    .OUTPUTS
       None. This command does not generate pipeline output.
    .NOTES
        Refer to the Send-MailMessage cmdlet's
    .LINK
        Send-MailMessage
    #>


    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline=$true)]
        [Alias('PsPath')]
        [ValidateNotNullOrEmpty()]
        [string[]]
        ${Attachments},

        [ValidateNotNullOrEmpty()]
        [Collections.HashTable]
        ${InlineAttachments},
        
        [ValidateNotNullOrEmpty()]
        [Net.Mail.MailAddress[]]
        ${Bcc},
    
        [Parameter(Position=2)]
        [ValidateNotNullOrEmpty()]
        [string]
        ${Body},
        
        [Alias('BAH')]
        [switch]
        ${BodyAsHtml},
    
        [ValidateNotNullOrEmpty()]
        [Net.Mail.MailAddress[]]
        ${Cc},
    
        [Alias('DNO')]
        [ValidateNotNullOrEmpty()]
        [Net.Mail.DeliveryNotificationOptions]
        ${DeliveryNotificationOption},
    
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Net.Mail.MailAddress]
        ${From},
    
        [Parameter(Position = 3)]
        [Alias('ComputerName')]
        [string]
        ${SmtpServer},
    
        [ValidateNotNullOrEmpty()]
        [Net.Mail.MailPriority]
        ${Priority},
        
        [Parameter(Mandatory=$true, Position=1)]
        [Alias('sub')]
        [ValidateNotNullOrEmpty()]
        [string]
        ${Subject},
    
        [Parameter(Mandatory=$true, Position=0)]
        [Net.Mail.MailAddress[]]
        ${To},
    
        [ValidateNotNullOrEmpty()]
        [Management.Automation.PSCredential]
        ${Credential},
    
        [switch]
        ${UseSsl},
    
        [ValidateRange(0, 2147483647)]
        [int]
        ${Port} = 25
    )
    
    begin
    {
        if ([string]::IsNullOrEmpty($SmtpServer))
        {
            if ($null -eq $PSEmailServer)
            {
                $errorRecord = New-Object System.Management.Automation.ErrorRecord(
                    (New-Object System.InvalidOperationException('The email cannot be sent because no SMTP server was specified. You must specify an SMTP server by using either the SmtpServer parameter or the $PSEmailServer variable.')),
                    $null,
                    [System.Management.Automation.ErrorCategory]::InvalidArgument,
                    $null
                )

                $PSCmdlet.ThrowTerminatingError($errorRecord)
            }
            else
            {
                $_smtpServer = [System.Convert]::ToString($PSEmailServer, [System.Globalization.CultureInfo]::InvariantCulture)
            }
        }
        else
        {
            $_smtpServer = $SmtpServer
        }

        try
        {
            $_smtpClient = New-Object Net.Mail.SmtpClient
        
            $_smtpClient.Host      = $_smtpServer
            $_smtpClient.Port      = $Port
            $_smtpClient.EnableSsl = $UseSsl

            if ($null -ne $Credential)
            {
                # In PowerShell 2.0, assigning the results of GetNetworkCredential() to the SMTP client sometimes fails (with gmail, in testing), but
                # building a new NetworkCredential object containing only the UserName and Password works okay.

                $_tempCred = $Credential.GetNetworkCredential()
                $_smtpClient.Credentials = New-Object Net.NetworkCredential($Credential.UserName, $_tempCred.Password)
            }
            else
            {
                $_smtpClient.UseDefaultCredentials = $true
            }

            $_message = New-Object Net.Mail.MailMessage
        
            $_message.From    = $From
            $_message.Subject = $Subject
            
            if ($BodyAsHtml)
            {
                $_bodyPart = [Net.Mail.AlternateView]::CreateAlternateViewFromString($Body, 'text/html')
            }
            else
            {
                $_bodyPart = [Net.Mail.AlternateView]::CreateAlternateViewFromString($Body, 'text/plain')
            }   

            $_message.AlternateViews.Add($_bodyPart)

            if ($PSBoundParameters.ContainsKey('DeliveryNotificationOption')) { $_message.DeliveryNotificationOptions = $DeliveryNotificationOption }
            if ($PSBoundParameters.ContainsKey('Priority')) { $_message.Priority = $Priority }

            foreach ($_address in $To)
            {
                if (-not $_message.To.Contains($_address)) { $_message.To.Add($_address) }
            }

            if ($null -ne $Cc)
            {
                foreach ($_address in $Cc)
                {
                    if (-not $_message.CC.Contains($_address)) { $_message.CC.Add($_address) }
                }
            }

            if ($null -ne $Bcc)
            {
                foreach ($_address in $Bcc)
                {
                    if (-not $_message.Bcc.Contains($_address)) { $_message.Bcc.Add($_address) }
                }
            }
        }
        catch
        {
            $_message.Dispose()
            throw
        }

        if ($PSBoundParameters.ContainsKey('InlineAttachments'))
        {
            foreach ($_entry in $InlineAttachments.GetEnumerator())
            {
                $_file = $_entry.Value.ToString()
                
                if ([string]::IsNullOrEmpty($_file))
                {
                    $_message.Dispose()
                    throw "Send-MailMessage: Values in the InlineAttachments table cannot be null."
                }

                try
                {
                    $_contentType = FileNameToContentType -FileName $_file
                    $_attachment = New-Object Net.Mail.LinkedResource($_file, $_contentType)
                    $_attachment.ContentId = $_entry.Key

                    $_bodyPart.LinkedResources.Add($_attachment)
                }
                catch
                {
                    $_message.Dispose()
                    throw
                }
            }
        }
    }

    process
    {
        if ($null -ne $Attachments)
        {
            foreach ($_file in $Attachments)
            {
                try
                {
                    $_contentType = FileNameToContentType -FileName $_file
                    $_message.Attachments.Add((New-Object Net.Mail.Attachment($_file, $_contentType)))
                }
                catch
                {
                    $_message.Dispose()
                    throw
                }
            }
        }
    }
    
    end
    {
        try
        {
            $_smtpClient.Send($_message)
        }
        catch
        {
            throw
        }
        finally
        {
            $_message.Dispose()
        }
    }

} # function Send-InlineMailMessage

function FileNameToContentType
{
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]
        $FileName
    )

    $mimeMappings = @{
        '.323' = 'text/h323'
        '.aaf' = 'application/octet-stream'
        '.aca' = 'application/octet-stream'
        '.accdb' = 'application/msaccess'
        '.accde' = 'application/msaccess'
        '.accdt' = 'application/msaccess'
        '.acx' = 'application/internet-property-stream'
        '.afm' = 'application/octet-stream'
        '.ai' = 'application/postscript'
        '.aif' = 'audio/x-aiff'
        '.aifc' = 'audio/aiff'
        '.aiff' = 'audio/aiff'
        '.application' = 'application/x-ms-application'
        '.art' = 'image/x-jg'
        '.asd' = 'application/octet-stream'
        '.asf' = 'video/x-ms-asf'
        '.asi' = 'application/octet-stream'
        '.asm' = 'text/plain'
        '.asr' = 'video/x-ms-asf'
        '.asx' = 'video/x-ms-asf'
        '.atom' = 'application/atom+xml'
        '.au' = 'audio/basic'
        '.avi' = 'video/x-msvideo'
        '.axs' = 'application/olescript'
        '.bas' = 'text/plain'
        '.bcpio' = 'application/x-bcpio'
        '.bin' = 'application/octet-stream'
        '.bmp' = 'image/bmp'
        '.c' = 'text/plain'
        '.cab' = 'application/octet-stream'
        '.calx' = 'application/vnd.ms-office.calx'
        '.cat' = 'application/vnd.ms-pki.seccat'
        '.cdf' = 'application/x-cdf'
        '.chm' = 'application/octet-stream'
        '.class' = 'application/x-java-applet'
        '.clp' = 'application/x-msclip'
        '.cmx' = 'image/x-cmx'
        '.cnf' = 'text/plain'
        '.cod' = 'image/cis-cod'
        '.cpio' = 'application/x-cpio'
        '.cpp' = 'text/plain'
        '.crd' = 'application/x-mscardfile'
        '.crl' = 'application/pkix-crl'
        '.crt' = 'application/x-x509-ca-cert'
        '.csh' = 'application/x-csh'
        '.css' = 'text/css'
        '.csv' = 'application/octet-stream'
        '.cur' = 'application/octet-stream'
        '.dcr' = 'application/x-director'
        '.deploy' = 'application/octet-stream'
        '.der' = 'application/x-x509-ca-cert'
        '.dib' = 'image/bmp'
        '.dir' = 'application/x-director'
        '.disco' = 'text/xml'
        '.dll' = 'application/x-msdownload'
        '.dll.config' = 'text/xml'
        '.dlm' = 'text/dlm'
        '.doc' = 'application/msword'
        '.docm' = 'application/vnd.ms-word.document.macroEnabled.12'
        '.docx' = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
        '.dot' = 'application/msword'
        '.dotm' = 'application/vnd.ms-word.template.macroEnabled.12'
        '.dotx' = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'
        '.dsp' = 'application/octet-stream'
        '.dtd' = 'text/xml'
        '.dvi' = 'application/x-dvi'
        '.dwf' = 'drawing/x-dwf'
        '.dwp' = 'application/octet-stream'
        '.dxr' = 'application/x-director'
        '.eml' = 'message/rfc822'
        '.emz' = 'application/octet-stream'
        '.eot' = 'application/octet-stream'
        '.eps' = 'application/postscript'
        '.etx' = 'text/x-setext'
        '.evy' = 'application/envoy'
        '.exe' = 'application/octet-stream'
        '.exe.config' = 'text/xml'
        '.fdf' = 'application/vnd.fdf'
        '.fif' = 'application/fractals'
        '.fla' = 'application/octet-stream'
        '.flr' = 'x-world/x-vrml'
        '.flv' = 'video/x-flv'
        '.gif' = 'image/gif'
        '.gtar' = 'application/x-gtar'
        '.gz' = 'application/x-gzip'
        '.h' = 'text/plain'
        '.hdf' = 'application/x-hdf'
        '.hdml' = 'text/x-hdml'
        '.hhc' = 'application/x-oleobject'
        '.hhk' = 'application/octet-stream'
        '.hhp' = 'application/octet-stream'
        '.hlp' = 'application/winhlp'
        '.hqx' = 'application/mac-binhex40'
        '.hta' = 'application/hta'
        '.htc' = 'text/x-component'
        '.htm' = 'text/html'
        '.html' = 'text/html'
        '.htt' = 'text/webviewhtml'
        '.hxt' = 'text/html'
        '.ico' = 'image/x-icon'
        '.ics' = 'application/octet-stream'
        '.ief' = 'image/ief'
        '.iii' = 'application/x-iphone'
        '.inf' = 'application/octet-stream'
        '.ins' = 'application/x-internet-signup'
        '.isp' = 'application/x-internet-signup'
        '.IVF' = 'video/x-ivf'
        '.jar' = 'application/java-archive'
        '.java' = 'application/octet-stream'
        '.jck' = 'application/liquidmotion'
        '.jcz' = 'application/liquidmotion'
        '.jfif' = 'image/pjpeg'
        '.jpb' = 'application/octet-stream'
        '.jpe' = 'image/jpeg'
        '.jpeg' = 'image/jpeg'
        '.jpg' = 'image/jpeg'
        '.js' = 'application/x-javascript'
        '.jsx' = 'text/jscript'
        '.latex' = 'application/x-latex'
        '.lit' = 'application/x-ms-reader'
        '.lpk' = 'application/octet-stream'
        '.lsf' = 'video/x-la-asf'
        '.lsx' = 'video/x-la-asf'
        '.lzh' = 'application/octet-stream'
        '.m13' = 'application/x-msmediaview'
        '.m14' = 'application/x-msmediaview'
        '.m1v' = 'video/mpeg'
        '.m3u' = 'audio/x-mpegurl'
        '.man' = 'application/x-troff-man'
        '.manifest' = 'application/x-ms-manifest'
        '.map' = 'text/plain'
        '.mdb' = 'application/x-msaccess'
        '.mdp' = 'application/octet-stream'
        '.me' = 'application/x-troff-me'
        '.mht' = 'message/rfc822'
        '.mhtml' = 'message/rfc822'
        '.mid' = 'audio/mid'
        '.midi' = 'audio/mid'
        '.mix' = 'application/octet-stream'
        '.mmf' = 'application/x-smaf'
        '.mno' = 'text/xml'
        '.mny' = 'application/x-msmoney'
        '.mov' = 'video/quicktime'
        '.movie' = 'video/x-sgi-movie'
        '.mp2' = 'video/mpeg'
        '.mp3' = 'audio/mpeg'
        '.mpa' = 'video/mpeg'
        '.mpe' = 'video/mpeg'
        '.mpeg' = 'video/mpeg'
        '.mpg' = 'video/mpeg'
        '.mpp' = 'application/vnd.ms-project'
        '.mpv2' = 'video/mpeg'
        '.ms' = 'application/x-troff-ms'
        '.msi' = 'application/octet-stream'
        '.mso' = 'application/octet-stream'
        '.mvb' = 'application/x-msmediaview'
        '.mvc' = 'application/x-miva-compiled'
        '.nc' = 'application/x-netcdf'
        '.nsc' = 'video/x-ms-asf'
        '.nws' = 'message/rfc822'
        '.ocx' = 'application/octet-stream'
        '.oda' = 'application/oda'
        '.odc' = 'text/x-ms-odc'
        '.ods' = 'application/oleobject'
        '.one' = 'application/onenote'
        '.onea' = 'application/onenote'
        '.onetoc' = 'application/onenote'
        '.onetoc2' = 'application/onenote'
        '.onetmp' = 'application/onenote'
        '.onepkg' = 'application/onenote'
        '.osdx' = 'application/opensearchdescription+xml'
        '.p10' = 'application/pkcs10'
        '.p12' = 'application/x-pkcs12'
        '.p7b' = 'application/x-pkcs7-certificates'
        '.p7c' = 'application/pkcs7-mime'
        '.p7m' = 'application/pkcs7-mime'
        '.p7r' = 'application/x-pkcs7-certreqresp'
        '.p7s' = 'application/pkcs7-signature'
        '.pbm' = 'image/x-portable-bitmap'
        '.pcx' = 'application/octet-stream'
        '.pcz' = 'application/octet-stream'
        '.pdf' = 'application/pdf'
        '.pfb' = 'application/octet-stream'
        '.pfm' = 'application/octet-stream'
        '.pfx' = 'application/x-pkcs12'
        '.pgm' = 'image/x-portable-graymap'
        '.pko' = 'application/vnd.ms-pki.pko'
        '.pma' = 'application/x-perfmon'
        '.pmc' = 'application/x-perfmon'
        '.pml' = 'application/x-perfmon'
        '.pmr' = 'application/x-perfmon'
        '.pmw' = 'application/x-perfmon'
        '.png' = 'image/png'
        '.pnm' = 'image/x-portable-anymap'
        '.pnz' = 'image/png'
        '.pot' = 'application/vnd.ms-powerpoint'
        '.potm' = 'application/vnd.ms-powerpoint.template.macroEnabled.12'
        '.potx' = 'application/vnd.openxmlformats-officedocument.presentationml.template'
        '.ppam' = 'application/vnd.ms-powerpoint.addin.macroEnabled.12'
        '.ppm' = 'image/x-portable-pixmap'
        '.pps' = 'application/vnd.ms-powerpoint'
        '.ppsm' = 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'
        '.ppsx' = 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'
        '.ppt' = 'application/vnd.ms-powerpoint'
        '.pptm' = 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'
        '.pptx' = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
        '.prf' = 'application/pics-rules'
        '.prm' = 'application/octet-stream'
        '.prx' = 'application/octet-stream'
        '.ps' = 'application/postscript'
        '.psd' = 'application/octet-stream'
        '.psm' = 'application/octet-stream'
        '.psp' = 'application/octet-stream'
        '.pub' = 'application/x-mspublisher'
        '.qt' = 'video/quicktime'
        '.qtl' = 'application/x-quicktimeplayer'
        '.qxd' = 'application/octet-stream'
        '.ra' = 'audio/x-pn-realaudio'
        '.ram' = 'audio/x-pn-realaudio'
        '.rar' = 'application/octet-stream'
        '.ras' = 'image/x-cmu-raster'
        '.rf' = 'image/vnd.rn-realflash'
        '.rgb' = 'image/x-rgb'
        '.rm' = 'application/vnd.rn-realmedia'
        '.rmi' = 'audio/mid'
        '.roff' = 'application/x-troff'
        '.rpm' = 'audio/x-pn-realaudio-plugin'
        '.rtf' = 'application/rtf'
        '.rtx' = 'text/richtext'
        '.scd' = 'application/x-msschedule'
        '.sct' = 'text/scriptlet'
        '.sea' = 'application/octet-stream'
        '.setpay' = 'application/set-payment-initiation'
        '.setreg' = 'application/set-registration-initiation'
        '.sgml' = 'text/sgml'
        '.sh' = 'application/x-sh'
        '.shar' = 'application/x-shar'
        '.sit' = 'application/x-stuffit'
        '.sldm' = 'application/vnd.ms-powerpoint.slide.macroEnabled.12'
        '.sldx' = 'application/vnd.openxmlformats-officedocument.presentationml.slide'
        '.smd' = 'audio/x-smd'
        '.smi' = 'application/octet-stream'
        '.smx' = 'audio/x-smd'
        '.smz' = 'audio/x-smd'
        '.snd' = 'audio/basic'
        '.snp' = 'application/octet-stream'
        '.spc' = 'application/x-pkcs7-certificates'
        '.spl' = 'application/futuresplash'
        '.src' = 'application/x-wais-source'
        '.ssm' = 'application/streamingmedia'
        '.sst' = 'application/vnd.ms-pki.certstore'
        '.stl' = 'application/vnd.ms-pki.stl'
        '.sv4cpio' = 'application/x-sv4cpio'
        '.sv4crc' = 'application/x-sv4crc'
        '.swf' = 'application/x-shockwave-flash'
        '.t' = 'application/x-troff'
        '.tar' = 'application/x-tar'
        '.tcl' = 'application/x-tcl'
        '.tex' = 'application/x-tex'
        '.texi' = 'application/x-texinfo'
        '.texinfo' = 'application/x-texinfo'
        '.tgz' = 'application/x-compressed'
        '.thmx' = 'application/vnd.ms-officetheme'
        '.thn' = 'application/octet-stream'
        '.tif' = 'image/tiff'
        '.tiff' = 'image/tiff'
        '.toc' = 'application/octet-stream'
        '.tr' = 'application/x-troff'
        '.trm' = 'application/x-msterminal'
        '.tsv' = 'text/tab-separated-values'
        '.ttf' = 'application/octet-stream'
        '.txt' = 'text/plain'
        '.u32' = 'application/octet-stream'
        '.uls' = 'text/iuls'
        '.ustar' = 'application/x-ustar'
        '.vbs' = 'text/vbscript'
        '.vcf' = 'text/x-vcard'
        '.vcs' = 'text/plain'
        '.vdx' = 'application/vnd.ms-visio.viewer'
        '.vml' = 'text/xml'
        '.vsd' = 'application/vnd.visio'
        '.vss' = 'application/vnd.visio'
        '.vst' = 'application/vnd.visio'
        '.vsto' = 'application/x-ms-vsto'
        '.vsw' = 'application/vnd.visio'
        '.vsx' = 'application/vnd.visio'
        '.vtx' = 'application/vnd.visio'
        '.wav' = 'audio/wav'
        '.wax' = 'audio/x-ms-wax'
        '.wbmp' = 'image/vnd.wap.wbmp'
        '.wcm' = 'application/vnd.ms-works'
        '.wdb' = 'application/vnd.ms-works'
        '.wks' = 'application/vnd.ms-works'
        '.wm' = 'video/x-ms-wm'
        '.wma' = 'audio/x-ms-wma'
        '.wmd' = 'application/x-ms-wmd'
        '.wmf' = 'application/x-msmetafile'
        '.wml' = 'text/vnd.wap.wml'
        '.wmlc' = 'application/vnd.wap.wmlc'
        '.wmls' = 'text/vnd.wap.wmlscript'
        '.wmlsc' = 'application/vnd.wap.wmlscriptc'
        '.wmp' = 'video/x-ms-wmp'
        '.wmv' = 'video/x-ms-wmv'
        '.wmx' = 'video/x-ms-wmx'
        '.wmz' = 'application/x-ms-wmz'
        '.wps' = 'application/vnd.ms-works'
        '.wri' = 'application/x-mswrite'
        '.wrl' = 'x-world/x-vrml'
        '.wrz' = 'x-world/x-vrml'
        '.wsdl' = 'text/xml'
        '.wvx' = 'video/x-ms-wvx'
        '.x' = 'application/directx'
        '.xaf' = 'x-world/x-vrml'
        '.xaml' = 'application/xaml+xml'
        '.xap' = 'application/x-silverlight-app'
        '.xbap' = 'application/x-ms-xbap'
        '.xbm' = 'image/x-xbitmap'
        '.xdr' = 'text/plain'
        '.xla' = 'application/vnd.ms-excel'
        '.xlam' = 'application/vnd.ms-excel.addin.macroEnabled.12'
        '.xlc' = 'application/vnd.ms-excel'
        '.xlm' = 'application/vnd.ms-excel'
        '.xls' = 'application/vnd.ms-excel'
        '.xlsb' = 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'
        '.xlsm' = 'application/vnd.ms-excel.sheet.macroEnabled.12'
        '.xlsx' = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        '.xlt' = 'application/vnd.ms-excel'
        '.xltm' = 'application/vnd.ms-excel.template.macroEnabled.12'
        '.xltx' = 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'
        '.xlw' = 'application/vnd.ms-excel'
        '.xml' = 'text/xml'
        '.xof' = 'x-world/x-vrml'
        '.xpm' = 'image/x-xpixmap'
        '.xps' = 'application/vnd.ms-xpsdocument'
        '.xsd' = 'text/xml'
        '.xsf' = 'text/xml'
        '.xsl' = 'text/xml'
        '.xslt' = 'text/xml'
        '.xsn' = 'application/octet-stream'
        '.xtp' = 'application/octet-stream'
        '.xwd' = 'image/x-xwindowdump'
        '.z' = 'application/x-compress'
        '.zip' = 'application/x-zip-compressed'
    }

    $extension = [System.IO.Path]::GetExtension($FileName)
    $contentType = $mimeMappings[$extension]

    if ([string]::IsNullOrEmpty($contentType))
    {
        return New-Object System.Net.Mime.ContentType
    }
    else
    {
        return New-Object System.Net.Mime.ContentType($contentType)
    }

} # function FileNameToContentType

Export-ModuleMember -Function Send-InlineMailMessage
# SIG # Begin signature block
# MIIhfgYJKoZIhvcNAQcCoIIhbzCCIWsCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUoz1/01kR+lQc9rn32pRokwzh
# pyGgghywMIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0B
# AQUFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
# IElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg
# Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg
# +XESpa7cJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lT
# XDGEKvYPmDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5
# a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g
# 0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1
# roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
# GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G
# A1UdDgQWBBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLL
# gjEtUYunpyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3
# cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmr
# EthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+
# fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5Q
# Z7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu
# 838fYxAe+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw
# 8jCCBQswggPzoAMCAQICEAOiV15N2F/TLPzy+oVrWjMwDQYJKoZIhvcNAQEFBQAw
# bzELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ
# d3d3LmRpZ2ljZXJ0LmNvbTEuMCwGA1UEAxMlRGlnaUNlcnQgQXNzdXJlZCBJRCBD
# b2RlIFNpZ25pbmcgQ0EtMTAeFw0xNDA1MDUwMDAwMDBaFw0xNTA1MTMxMjAwMDBa
# MGExCzAJBgNVBAYTAkNBMQswCQYDVQQIEwJPTjERMA8GA1UEBxMIQnJhbXB0b24x
# GDAWBgNVBAoTD0RhdmlkIExlZSBXeWF0dDEYMBYGA1UEAxMPRGF2aWQgTGVlIFd5
# YXR0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcX51YAyViQE16mg
# +IVQCQ0O8QC/wXBzTMPirnoGK9TThmxQIYgtcekZ5Xa/dWpW0xKKjaS6dRwYYXET
# pzozoMWZbFDVrgKaqtuZNu9TD6rqK/QKf4iL/eikr0NIUL4CoSEQDeGLXDw7ntzZ
# XKM86RuPw6MlDapfFQQFIMjsT7YaoqQNTOxhbiFoHVHqP7xL3JTS7TApa/RnNYyl
# O7SQ7TSNsekiXGwUNxPqt6UGuOP0nyR+GtNiBcPfeUi+XaqjjBmpqgDbkEIMLDuf
# fDO54VKvDLl8D2TxTFOcKZv61IcToOs+8z1sWTpMWI2MBuLhRR3A6iIhvilTYRBI
# iX5FZQIDAQABo4IBrzCCAaswHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WP
# NTIwHQYDVR0OBBYEFDS4+PmyUp+SmK2GR+NCMiLd+DpvMA4GA1UdDwEB/wQEAwIH
# gDATBgNVHSUEDDAKBggrBgEFBQcDAzBtBgNVHR8EZjBkMDCgLqAshipodHRwOi8v
# Y3JsMy5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy1nMS5jcmwwMKAuoCyGKmh0dHA6
# Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLWcxLmNybDBCBgNVHSAEOzA5
# MDcGCWCGSAGG/WwDATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2Vy
# dC5jb20vQ1BTMIGCBggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9v
# Y3NwLmRpZ2ljZXJ0LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGln
# aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAM
# BgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQBbzAp8wys0A5LcuENslW0E
# oz7rc0A8h+XgjJWdJOFRohE1mZRFpdkVxM0SRqw7IzlSFtTMCsVVPNwU6O7y9rCY
# x5agx3CJBkJVDR/Y7DcOQTmmHy1zpcrKAgTznZuKUQZLpoYz/bA+Uh+bvXB9woCA
# IRbchos1oxC+7/gjuxBMKh4NM+9NIvWs6qpnH5JeBidQDQXp3flPkla+MKrPTL/T
# /amgna5E+9WHWnXbMFCpZ5n1bI1OvgNVZlYC/JTa4fjPEk8d16jYVP4GlRz/QUYI
# y6IAGc/z6xpkdtpXWVCbW0dCd5ybfUYTaeCJumGpS/HSJ7JcTZj694QDOKNvhfrm
# MIIGajCCBVKgAwIBAgIQA5/t7ct5W43tMgyJGfA2iTANBgkqhkiG9w0BAQUFADBi
# MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
# d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBBc3N1cmVkIElEIENB
# LTEwHhcNMTMwNTIxMDAwMDAwWhcNMTQwNjA0MDAwMDAwWjBHMQswCQYDVQQGEwJV
# UzERMA8GA1UEChMIRGlnaUNlcnQxJTAjBgNVBAMTHERpZ2lDZXJ0IFRpbWVzdGFt
# cCBSZXNwb25kZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6aUqB
# TW+lFBaqis1nvku/xmmPWBzgeegenVgmmNpc1Hyj+dsrjBI2w/z5ZAaxu8KomAoX
# DeGV60C065ZtmL+mj3nPvIqSe22cGAZR2KUYUzIBJxlh6IRB38bw6Mr+d61f2J57
# jGBvhVxGvWvnD4DO5wPDfDHPt2VVxvvgmQjkc1r7l9rQTL60tsYPfyaSqbj8OO60
# 5DqkSNBM6qlGJ1vPkhGTnBan/tKtHyLFHqzBce+8StsBCUTfmBwtZ7qoigMzyVG1
# 9wJNCaRN/oBexddFw30IqgEzzDPYTzAW5P8iMi7rfjvw+R4y65Ul0vL+bVSEutXl
# 1NHdG6+9WXuUhTABAgMBAAGjggM1MIIDMTAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0T
# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDCCAb8GA1UdIASCAbYwggGy
# MIIBoQYJYIZIAYb9bAcBMIIBkjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGln
# aWNlcnQuY29tL0NQUzCCAWQGCCsGAQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMA
# ZQAgAG8AZgAgAHQAaABpAHMAIABDAGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8A
# bgBzAHQAaQB0AHUAdABlAHMAIABhAGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAA
# dABoAGUAIABEAGkAZwBpAEMAZQByAHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAA
# dABoAGUAIABSAGUAbAB5AGkAbgBnACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0A
# ZQBuAHQAIAB3AGgAaQBjAGgAIABsAGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQA
# eQAgAGEAbgBkACAAYQByAGUAIABpAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgA
# ZQByAGUAaQBuACAAYgB5ACAAcgBlAGYAZQByAGUAbgBjAGUALjALBglghkgBhv1s
# AxUwHwYDVR0jBBgwFoAUFQASKxOYspkH7R7for5XDStnAs0wHQYDVR0OBBYEFGMv
# yd95knu1I8q74aTuM37j4p36MH0GA1UdHwR2MHQwOKA2oDSGMmh0dHA6Ly9jcmwz
# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENBLTEuY3JsMDigNqA0hjJo
# dHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURDQS0xLmNy
# bDB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
# ZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
# L0RpZ2lDZXJ0QXNzdXJlZElEQ0EtMS5jcnQwDQYJKoZIhvcNAQEFBQADggEBAKt0
# vUAATHYVJVc90xwD/31FyEUSZucoZWDY3zuz+g3BrDOP9IG5YfGd+5hV195HQ7qA
# PfFIzD9nMFYfzvTQTIS9h6SexeEPqAZd0C9uXtwZ6PCH6uBOrz1sII5zb37Whxjg
# htOa/J7qjHLpQQ+4cbU4LPgpstUcop0b7F8quNw3IOHLu/DQbGyls8ufSvZU4yY0
# PS64wSsct/bDPf7RLR5Q9JTI+P3uc9tJtRv09f+lkME5FBvY7XEbapj7+kCaRKkp
# DlVeeLi3pIPDcAHwZkDlrnk04StNA6Et5ttUYhjt1QmLoqrWDMhPGr6ZJXhpmYnU
# WYne34jw02dedKWdpkQwggajMIIFi6ADAgECAhAPqEkGFdcAoL4hdv3F7G29MA0G
# CSqGSIb3DQEBBQUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ
# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0
# IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMTAyMTExMjAwMDBaFw0yNjAyMTAxMjAw
# MDBaMG8xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV
# BAsTEHd3dy5kaWdpY2VydC5jb20xLjAsBgNVBAMTJURpZ2lDZXJ0IEFzc3VyZWQg
# SUQgQ29kZSBTaWduaW5nIENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
# AoIBAQCcfPmgjwrKiUtTmjzsGSJ/DMv3SETQPyJumk/6zt/G0ySR/6hSk+dy+PFG
# hpTFqxf0eH/Ler6QJhx8Uy/lg+e7agUozKAXEUsYIPO3vfLcy7iGQEUfT/k5mNM7
# 629ppFwBLrFm6aa43Abero1i/kQngqkDw/7mJguTSXHlOG1O/oBcZ3e11W9mZJRr
# u4hJaNjR9H4hwebFHsnglrgJlflLnq7MMb1qWkKnxAVHfWAr2aFdvftWk+8b/HL5
# 3z4y/d0qLDJG2l5jvNC4y0wQNfxQX6xDRHz+hERQtIwqPXQM9HqLckvgVrUTtmPp
# P05JI+cGFvAlqwH4KEHmx9RkO12rAgMBAAGjggNDMIIDPzAOBgNVHQ8BAf8EBAMC
# AYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMwggHDBgNVHSAEggG6MIIBtjCCAbIGCGCG
# SAGG/WwDMIIBpDA6BggrBgEFBQcCARYuaHR0cDovL3d3dy5kaWdpY2VydC5jb20v
# c3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsGAQUFBwICMIIBVh6CAVIAQQBu
# AHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABDAGUAcgB0AGkAZgBpAGMAYQB0
# AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABhAGMAYwBlAHAAdABhAG4AYwBl
# ACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQByAHQAIABDAFAALwBDAFAAUwAg
# AGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBnACAAUABhAHIAdAB5ACAAQQBn
# AHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABsAGkAbQBpAHQAIABsAGkAYQBi
# AGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABpAG4AYwBvAHIAcABvAHIAYQB0
# AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBlAGYAZQByAGUAbgBjAGUALjAS
# BgNVHRMBAf8ECDAGAQH/AgEAMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYY
# aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2Fj
# ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MIGB
# BgNVHR8EejB4MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNl
# cnRBc3N1cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2Vy
# dC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMB0GA1UdDgQWBBR7aM4p
# qsAXvkl64eU/1qf3RY81MjAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823I
# DzANBgkqhkiG9w0BAQUFAAOCAQEAe3IdZP+IyDrBt+nnqcSHu9uUkteQWTP6K4fe
# qFuAJT8Tj5uDG3xDxOaM3zk+wxXssNo7ISV7JMFyXbhHkYETRvqcP2pRON60Jcvw
# q9/FKAFUeRBGJNE4DyahYZBNur0o5j/xxKqb9to1U0/J8j3TbNwj7aqgTWcJ8zqA
# PTz7NkyQ53ak3fI6v1Y1L6JMZejg1NrRx8iRai0jTzc7GZQY1NWcEDzVsRwZ/4/I
# a5ue+K6cmZZ40c2cURVbQiZyWo0KSiOSQOiG3iLCkzrUm2im3yl/Brk8Dr2fxIac
# gkdCcTKGCZlyCXlLnXFp9UH/fzl3ZPGEjb6LHrJ9aKOlkLEM/zCCBs0wggW1oAMC
# AQICEAb9+QOWA63qAArrPye7uhswDQYJKoZIhvcNAQEFBQAwZTELMAkGA1UEBhMC
# VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0
# LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTA2
# MTExMDAwMDAwMFoXDTIxMTExMDAwMDAwMFowYjELMAkGA1UEBhMCVVMxFTATBgNV
# BAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8G
# A1UEAxMYRGlnaUNlcnQgQXNzdXJlZCBJRCBDQS0xMIIBIjANBgkqhkiG9w0BAQEF
# AAOCAQ8AMIIBCgKCAQEA6IItmfnKwkKVpYBzQHDSnlZUXKnE0kEGj8kz/E1FkVyB
# n+0snPgWWd+etSQVwpi5tHdJ3InECtqvy15r7a2wcTHrzzpADEZNk+yLejYIA6sM
# NP4YSYL+x8cxSIB8HqIPkg5QycaH6zY/2DDD/6b3+6LNb3Mj/qxWBZDwMiEWicZw
# iPkFl32jx0PdAug7Pe2xQaPtP77blUjE7h6z8rwMK5nQxl0SQoHhg26Ccz8mSxSQ
# rllmCsSNvtLOBq6thG9IhJtPQLnxTPKvmPv2zkBdXPao8S+v7Iki8msYZbHBc63X
# 8djPHgp0XEK4aH631XcKJ1Z8D2KkPzIUYJX9BwSiCQIDAQABo4IDejCCA3YwDgYD
# VR0PAQH/BAQDAgGGMDsGA1UdJQQ0MDIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
# BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCDCCAdIGA1UdIASCAckwggHFMIIBtAYK
# YIZIAYb9bAABBDCCAaQwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cuZGlnaWNlcnQu
# Y29tL3NzbC1jcHMtcmVwb3NpdG9yeS5odG0wggFkBggrBgEFBQcCAjCCAVYeggFS
# AEEAbgB5ACAAdQBzAGUAIABvAGYAIAB0AGgAaQBzACAAQwBlAHIAdABpAGYAaQBj
# AGEAdABlACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQBjAGMAZQBwAHQAYQBu
# AGMAZQAgAG8AZgAgAHQAaABlACAARABpAGcAaQBDAGUAcgB0ACAAQwBQAC8AQwBQ
# AFMAIABhAG4AZAAgAHQAaABlACAAUgBlAGwAeQBpAG4AZwAgAFAAYQByAHQAeQAg
# AEEAZwByAGUAZQBtAGUAbgB0ACAAdwBoAGkAYwBoACAAbABpAG0AaQB0ACAAbABp
# AGEAYgBpAGwAaQB0AHkAIABhAG4AZAAgAGEAcgBlACAAaQBuAGMAbwByAHAAbwBy
# AGEAdABlAGQAIABoAGUAcgBlAGkAbgAgAGIAeQAgAHIAZQBmAGUAcgBlAG4AYwBl
# AC4wCwYJYIZIAYb9bAMVMBIGA1UdEwEB/wQIMAYBAf8CAQAweQYIKwYBBQUHAQEE
# bTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYB
# BQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3Vy
# ZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmwzLmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0
# dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5j
# cmwwHQYDVR0OBBYEFBUAEisTmLKZB+0e36K+Vw0rZwLNMB8GA1UdIwQYMBaAFEXr
# oq/0ksuCMS1Ri6enIZ3zbcgPMA0GCSqGSIb3DQEBBQUAA4IBAQBGUD7Jtygkpzgd
# tlspr1LPUukxR6tWXHvVDQtBs+/sdR90OPKyXGGinJXDUOSCuSPRujqGcq04eKx1
# XRcXNHJHhZRW0eu7NoR3zCSl8wQZVann4+erYs37iy2QwsDStZS9Xk+xBdIOPRqp
# FFumhjFiqKgz5Js5p8T1zh14dpQlc+Qqq8+cdkvtX8JLFuRLcEwAiR78xXm8TBJX
# /l/hHrwCXaj++wc4Tw3GXZG5D2dFzdaD7eeSDY2xaYxP+1ngIw/Sqq4AfO6cQg7P
# kdcntxbuD8O9fAqg7iwIVYUiuOsYGk38KiGtSTGDR5V3cdyxG0tLHBCcdxTBnU8v
# WpUIKRAmMYIEODCCBDQCAQEwgYMwbzELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERp
# Z2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEuMCwGA1UEAxMl
# RGlnaUNlcnQgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EtMQIQA6JXXk3YX9Ms
# /PL6hWtaMzAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZ
# BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYB
# BAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUho58ryrtRd5Z3aczjdJadRyfXYYwDQYJ
# KoZIhvcNAQEBBQAEggEAbtjRJd8A7HxgajFECqjBToHsDKEKcZWpU7Pob2BSpRPS
# 7LNJPLvOpMmsbMIgNTkPqzjm9Skw3PXvo/ZVHPtqJZMWOPX1tO6Hze9p1/B7wkL7
# ziPPJkP+06t43An6iL3xKPQbrxYO9BEVZfVikbvqtr4p+w0CXi/03RlgF/oakoeb
# 3JjxHu50cZvjST+cFAXTB6FYCeyJ1xNq7tAxqk3S7QxSNw+93PHvfbVPq1qOLwEj
# jR3DRTNPWsGp8Hchd9fmjJn1tfayjCHKYYnovDOXbDHRtRCUA/qL6AysbwUUhZHH
# Q8gVeAoUZhQUiTQ6KIpLGDAJUePN9EDVD52M+D1zJ6GCAg8wggILBgkqhkiG9w0B
# CQYxggH8MIIB+AIBATB2MGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IEFzc3VyZWQgSUQgQ0EtMQIQA5/t7ct5W43tMgyJGfA2iTAJBgUrDgMCGgUA
# oF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTQw
# NTA4MTczMjM4WjAjBgkqhkiG9w0BCQQxFgQURDyVbKCOWqFC3EwxF+w1j0zp7Mow
# DQYJKoZIhvcNAQEBBQAEggEAqDzBetYly7qsn7cXqht8IkDbk83sgm2KoPXDQK6L
# Oydctou9P9ktk9szCPwAXkxB+t2gZAAoItrPWVKzd1+wdG5pWYza+3HOnmIrBShr
# bycQhUlhX4S4RryMKoQ3X3CT1fHM+LfI6Qonas5F1EVafHKMVjrkpYjQCXGTN8PK
# vNtjaM+PCFWw0ImglcWIWB/cACLlItep2ou5G7/q1762vgurhY8O5UPwBo1CZ6Se
# U28g09maQIWCYSCr/Ta9AnczbNvSwb2D7HZu4U9Tj5Cj8Rum5lwX5PBfAbPUys/P
# Zz6U8tGpwpQpxxSxdZKwo30tBASoaQIAKYwycjmGa65n7w==
# SIG # End signature block