├── .gitattributes
├── LearnerKit.zip
├── EngagementPOEReport.zip
├── L50 - Secure AI Transformation.PPTX
├── Secure and Govern Microsoft 365 Copilot - L150.PPTX
├── Secure and govern Microsoft 365 Copilots + Agents with Microsoft Purview - L300.PPTX
├── CODE_OF_CONDUCT.md
├── .gitignore
├── IMPORANT-FY26-NEWS.md
├── LICENSE
├── SUPPORT.md
├── SECURITY.md
├── README.md
└── EngagementPOEReport.ps1
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.zip filter=lfs diff=lfs merge=lfs -text
2 | *.pptx filter=lfs diff=lfs merge=lfs -text
3 |
--------------------------------------------------------------------------------
/LearnerKit.zip:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:b5584859cb534ac775433d370d43722a106f82c4a1a738a31aecc9534c4f31fb
3 | size 761340952
4 |
--------------------------------------------------------------------------------
/EngagementPOEReport.zip:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:bfad719c8770b08ff64e7f4e42c16c48ed60b0b49040665945d99d740e6beaa4
3 | size 13967
4 |
--------------------------------------------------------------------------------
/L50 - Secure AI Transformation.PPTX:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:6506e2fe377d6c74598e01cbf8a94565496579283b5d110db2e5ebde01a26000
3 | size 297091249
4 |
--------------------------------------------------------------------------------
/Secure and Govern Microsoft 365 Copilot - L150.PPTX:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:b5648bbe1099a36406d6920c59f2e81fe5d69f853586b5af590e0fa251860a74
3 | size 45433685
4 |
--------------------------------------------------------------------------------
/Secure and govern Microsoft 365 Copilots + Agents with Microsoft Purview - L300.PPTX:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:61b50899f9f83e9fb47bbc3cac51ceeb5242ab17c0e50c63055738070e09551a
3 | size 237026713
4 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | Individual Function Test/test-get-dlpolicysummary.ps1
2 | Individual Function Test/test-get-dlppolicydetails.ps1
3 | Individual Function Test/test-get-dlppolicyruledetails.ps1
4 | Individual Function Test/test-new-POESummaryFile.ps1
5 | Individual Function Test/get-auditlogsummary.ps1
6 | Individual Function Test/CommandSwitch.ps1
7 | %1
8 | Individual Function Test/permissionscheck.ps1
9 | Individual Function Test/testauditlog.ps1
10 | Individual Function Test/testupload.ps1
11 | Individual Function Test/filelector.ps1
12 | Individual Function Test/test.ps1
13 | Individual Function Test/LicenseList
14 | Individual Function Test/Testsplistcode.ps1
15 | .vscode/settings.json
16 | Old/
--------------------------------------------------------------------------------
/IMPORANT-FY26-NEWS.md:
--------------------------------------------------------------------------------
1 | # **Important FY26 Update: POE Script No Longer Required for V8.0 Delivery**
2 |
3 | Dear Partners,
4 |
5 | We would like to inform you that, starting in FY26, the **POE script is no longer required** for the delivery of version 8.0 of the Data Security Envisioning Workshop. The script will **not be updated** moving forward.
6 |
7 | For your reference, the existing script will remain available in this location for **historical purposes** and to support partners who may still need to complete engagements based on the V7 or V7.1 versions of the Data Security Engagement.
8 |
9 | You can access the script here:
10 | [EngagementPOEReport.ps1](./EngagementPOEReport.ps1)
11 |
12 | Thank you for your continued partnership and understanding.
13 |
14 | For questions or feedback please visit:
15 | [https://aka.ms/SCIEngagementsFeedback](https://aka.ms/SCIEngagementsFeedback)
16 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
22 |
--------------------------------------------------------------------------------
/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Support
2 |
3 | ## How to file issues and get help
4 |
5 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing
6 | issues before filing new issues to avoid duplicates. For new issues, file your bug or
7 | feature request as a new Issue.
8 |
9 | For help and questions about using this project, please create an issue within the project or raise a support request through your existing MCI engagement if you are delivering an engagement.
10 |
11 | ## Microsoft Support Policy
12 |
13 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
14 |
15 | ## Data Security Engagement Disclaimer
16 |
17 | The information, results, and scoring provided through the toolkit are recommendations and provided for general informational purposes only. They do not constitute legal advice, certifications, or guarantees regarding regulatory compliance; it is up to each organization to evaluate the effectiveness of these recommendations in their respective regulatory environment prior to implementation. Organizations should consult with their own legal professionals to determine how standards or regulations apply to their organization and how to best ensure compliance.
18 |
19 | MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY. Microsoft disclaims any conditions, express or implied, or other terms that use of the Microsoft products or services will ensure the organization’s compliance with regulations or standards. This toolkit is provided “as-is.” Information and recommendations expressed in the toolkit may change without notice. The toolkit does not provide the user with any legal rights to any intellectual property in any Microsoft product or service. Use of the tool is for internal, reference purposes only; however, Microsoft partners may distribute the toolkit to their customers for such customers’ internal, reference purposes only. Any distribution of the toolkit by a Microsoft partner to its customers must include terms consistent with those set forth in this disclaimer.
20 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Project
2 |
3 | Scripts and Files to support the Compliance Partner Build Intent Engagements.
4 |
5 | ## EngagementPOEReport
6 |
7 | Use the Engagement POE Report as part of the Data Security Engagement. Please see the delivery guide on how to use the output as part of the Proof of execution. The most recent version is 3.25 (published January 2025). This most recent version aligns to Version 7 of the Data Security Engagement and includes reporting for the Data Security for AI module a
8 |
9 | **V3.5 Updates**
10 | Added report output for Data Security for AI module
11 |
12 | **V3.4 Updates**
13 | Updated formatting of date time outputs to force Invariant (universal) date time output to help expedite POE reviews for organizations providing POE's that do not default to English abbreviations for Months in MMM-dd-YYYY format.
14 |
15 | **V3.3 Updates**
16 | Updated the DLP and Content Search logic to only include items created in the last 90 to limit the amount of data returned in large environments while still capturing what was created during the engagement
17 | -Added a ZIP file containing current version of signed script.
18 |
19 | **V3.2 updates**
20 | Changed sort order on Content Search to put most recent searches on top.
21 | -Signed Script (the file should have 547 lines including trailing blank line after digital signature)
22 |
23 | **V3.0 updates**
24 | -Transition from Microsoft Graph Powershell to Exchange Online Powershell
25 | -Signed Script (the file should have 549 lines including trailing blank line after digital signature)
26 | -- A zip file version of the script is also available in the repository (EngagementPOEReport.zip)
27 |
28 | ### Current issues or limitations
29 |
30 | 1) Current version has only been tested against Commercial Office 365 tenants. If you need to connect to a GCC or Regional(China / Germany) Tenant, please update the powershell connection strings inside the code
31 |
32 | ## Contributing
33 |
34 | This project welcomes contributions and suggestions. Most contributions require you to agree to a
35 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
36 | the rights to use your contribution. For details, visit .
37 |
38 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide
39 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
40 | provided by the bot. You will only need to do this once across all repos using our CLA.
41 |
42 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
43 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
44 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
45 |
46 | ## Trademarks
47 |
48 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow
49 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
50 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
51 | Any use of third-party trademarks or logos are subject to those third-party's policies.
52 |
--------------------------------------------------------------------------------
/EngagementPOEReport.ps1:
--------------------------------------------------------------------------------
1 | # Copyright (c) Microsoft Corporation.
2 | # Licensed under the MIT license.
3 |
4 | ############################
5 | #Data Security Engagement - Engagment POE Report
6 | #Author: Jim Banach
7 | #Version 3.5 - January 2025
8 | ##################################
9 |
10 | #project variables
11 | param (
12 | [ValidateSet("All","POEReport")]
13 | [string]$reporttype='POEReport',
14 | [string]$reportpath=$env:LOCALAPPDATA
15 | )
16 | if ($null -eq $env:LOCALAPPDATA) {
17 | Write-Host "This script requires the LOCALAPPDATA environment variable to be set."
18 | # Ask the user for the path to a writable folder that can be used to store the output of the script
19 | $env:LOCALAPPDATA = Read-Host -Prompt "Please enter the path to a folder where the script can store its output and restart the script"
20 | $reportpath=$env:LOCALAPPDATA
21 | }
22 | $outputfile=(Join-path ($reportpath) ("DLPReport_"+$reporttype+"_" + [string](Get-Date -UFormat %Y%m%d%S) + ".html"))
23 | $poedate = $poedate = (Get-Date).AddDays(-100)
24 |
25 | ### Force date time to international for script only###
26 | $currentThread = [System.Threading.Thread]::CurrentThread
27 | $culture = [CultureInfo]::InvariantCulture.Clone()
28 | $currentThread.CurrentCulture = $culture
29 | $currentThread.CurrentUICulture = $culture
30 |
31 | ##CSS for HTML Output##
32 | $header = @"
33 |
98 | "@
99 |
100 | ##define functions##
101 | function get-dlpolicysummary{
102 | #our global variables
103 | $dlptable = @()
104 | $policies = Get-DlpCompliancePolicy | Where-Object {$_.WhenCreated -gt $poedate}
105 |
106 | foreach($policy in $policies){
107 | $dlphashtable=@{}
108 |
109 | if ($policy.ExchangeLocation.Count -ne 0){
110 | $exoenabled = "Yes"
111 | }
112 | else{
113 | $exoenabled = $null
114 | }
115 |
116 | if ($policy.SharePointLocation.Count -gt 0){
117 | $spoenabled = "Yes"
118 | }
119 | else{
120 | $spoenabled = $null
121 | }
122 |
123 | if ($policy.OneDriveLocation.Count -gt 0){
124 | $od4benabled = "Yes"
125 | }
126 | else{
127 | $od4benabled = $null
128 | }
129 |
130 | if ($policy.TeamsLocation.Count -gt 0){
131 | $teamsenabled = "Yes"
132 | }
133 | else{
134 | $teamsenabled = $null
135 | }
136 |
137 | if ($policy.EndpointDlpLocation.Count -gt 0){
138 | $endpointenabled = "Yes"
139 | }
140 | else{
141 | $endpointenabled = $null
142 | }
143 |
144 | if ($policy.ThirdPartyAppDlpLocation.Count -gt 0){
145 | $DFCAEnabled = "Yes"
146 | }
147 | else{
148 | $DFCAEnabled = $null
149 | }
150 |
151 | if ($policy.OnPremisesScannerDlpLocation.Count -gt 0){
152 | $OnPremEnabled ="Yes"
153 | }
154 | else{
155 | $OnPremEnabled = $null
156 | }
157 |
158 | #put all the values in a hash table
159 | $dlphashtable =[Ordered]@{
160 | PolicyName = $Policy.Name
161 | CreationDate = ($policy.WhenCreated).ToString("MMM-dd-yyyy HH:mm:ss")
162 | PolicyMode = $policy.Mode
163 | ExchangeOnline = $exoenabled
164 | SharePointOnline = $spoenabled
165 | OneDrive = $od4benabled
166 | Teams = $teamsenabled
167 | EndPoints = $endpointenabled
168 | DefenderforCA = $DFCAEnabled
169 | OnPremises = $OnPremEnabled
170 | }
171 | #create the new object
172 | $dlppolicyobject = [PSCustomObject]$dlphashtable
173 | $dlptable += $dlppolicyobject
174 |
175 | }
176 |
177 | return $dlptable
178 | }
179 |
180 | #prepare the envrionment
181 | if (get-installedmodule -Name ExchangeOnlineManagement -MinimumVersion 3.2.0 -ErrorAction SilentlyContinue) {
182 | Write-Host "Exchange Online Management v3.2.0 or better is Installed, Continuing with Script Execution"
183 | }
184 | else {
185 | $title = 'Exchange Online Powershell v3.2.0 or Better is Not Installed'
186 | $question = 'Do you want to install it now?'
187 | $choices = '&Yes', '&No'
188 |
189 | $decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
190 | if ($decision -eq 0) {
191 | Write-Host 'Your choice is Yes, installing module'
192 | Write-Host "This will take several minutes with no visible progress, please be patient" -foregroundcolor Yellow -backgroundcolor Magenta
193 | Uninstall-Module ExchangeOnlineManagement -Force -AllVersions -ErrorAction silentlycontinue
194 | Install-Module ExchangeOnlineManagement -SkipPublisherCheck -Force -Confirm:$false
195 | }
196 | else {
197 | Write-Host 'Please install the module manually to continue https://aka.ms/exov3-module'
198 | Exit
199 | }
200 | }
201 |
202 | Write-Host 'Connecting to Security & Compliance Center. Please logon in the new window' -ForegroundColor DarkYellow
203 | Connect-IPPSSession -ShowBanner:$false
204 |
205 | Write-Host 'Connecting to the Exchange Online, Please logon in the new window' -ForegroundColor DarkYellow
206 | Connect-ExchangeOnline -ShowBanner:$false
207 |
208 | #check to make sure the account has access to the availble cmdlets
209 | Write-Host 'Checking Permissions' -ForegroundColor DarkYellow
210 | if ((get-command get-dlpcompliancepolicy) -and (get-command Get-OrganizationConfig) -and (get-command get-accepteddomain) -and (get-command get-compliancesearch) ){
211 | Write-Host "`r`n`r`nConnected to Microsoft 365, Continuing with Script`r`n`r`n" -ForegroundColor Yellow
212 | }
213 | Else{
214 | Write-Host "`r`n`nAt least one needed cmdlet is missing, check account permissions described in the delivery guide and try again." -ForegroundColor Yellow
215 | Write-host "`r`nThe following cmdlets are required: `n Get-DlpCompliancePolicy `n Get-OrganizationConfig `n Get-AcceptedDomain `n Get-ComplianceSearch" -ForegroundColor Cyan
216 | Write-host "`r`nPlease assign the account the following privileges (or equivalent): `n Compliance Administrator (Purview) `n Compliance Management (ExchangeOnline)" -ForegroundColor Cyan
217 | Write-Host "`r`nDisconnecting Services" -ForegroundColor Yellow
218 | Disconnect-ExchangeOnline -Confirm:$false -ErrorAction:SilentlyContinue -InformationAction Ignore
219 | Exit
220 | }
221 |
222 | #######################
223 | #script activities
224 | #each section below performs one part of the script
225 | #section 1: collects all of the DLP Policies
226 | #section 2: we capture the current content searches, we first pull the name of all the searches, then for each
227 | # we capture the data again to identify which workloads are being scanned by a given content search.
228 | #section 3: we are creating a unified summary table for the top fo the report. This uses the chart created in
229 | # section 1 and the content search details from section 2
230 | #section 4: this is where we are constructing the report itself. It involves merging data from the prior two
231 | # sections and then using convertto-html to place it all into a report that can be provided to the
232 | # customer and submitted as part of the final Proof of Execution (POE) for the engagement
233 | #######################
234 |
235 | ### section 1 DLP Policies
236 | $dlppolicysummary = get-dlpolicysummary
237 |
238 | ### section 2, gather additional report details
239 | $comsearch = Get-ComplianceSearch -resultsize unlimited | Where-Object {$_.CreatedTime -gt $poedate}
240 | $searchoutput = foreach($s in $comsearch){Get-ComplianceSearch $s.name | Select-Object Name,ContentMatchQuery,@{Name='CreatedTime';Expression={$_.CreatedTime.ToString("MMM-dd-yyyy HH:mm:ss")}},@{Name='LastModifiedTime';Expression={$_.LastModifiedTime.ToString("MMM-dd-yyyy HH:mm:ss")}},@{Name='JobStartTime';Expression={$_.JobStartTime.ToString("MMM-dd-yyyy HH:mm:ss")}},CreatedBy,Status,*Location}
241 |
242 | ##new section to begin capturing IRM policy skip over if tenant does not have the IRM cmdlets loaded
243 | if (Get-Command -Name Get-InsiderRiskPolicy -ErrorAction SilentlyContinue) {
244 | $irmsearch = Get-InsiderRiskPolicy
245 | $irmpol = foreach($s in $irmsearch){$s | Select-Object Name,InsiderRiskScenario,createdby,@{Name='CreatedTime';Expression={$_.WhenCreated.ToString("MMM-dd-yyyy HH:mm:ss")}},@{Name='LastModifiedTime';Expression={$_.WhenChanged.ToString("MMM-dd-yyyy HH:mm:ss")}},Enabled}
246 | }
247 |
248 | ### section ,3 construct a unified summary table
249 | $dlpsummarychart = $dlppolicysummary
250 | $POEChart = [array]@()
251 |
252 | foreach ($item in $dlpsummarychart){
253 |
254 | #create the new output hashtable
255 | $itemtable=[ordered]@{
256 | DLPPolicyName = $item.PolicyName
257 | CreationDate = $item.CreationDate
258 | PolicyMode = $item.PolicyMode
259 | SITSUsed = $coveredsits.CountofSits
260 | ExchangeOnline = $item.ExchangeOnline
261 | OneDrive = $item.OneDrive
262 | SharePoint = $item.SharePointOnline
263 | Teams = $item.Teams
264 | Endpoints = $item.EndPoints
265 | DefenderforCA = $item.DefenderforCA
266 | OnPremises = $item.OnPremises
267 | }
268 |
269 | $summarychart = [PSCustomObject]$itemtable
270 | $POEChart += $summarychart
271 | }
272 |
273 | ###section 4, build our html file
274 | $tenantdetails = Get-OrganizationConfig
275 | $scriptrunner = Get-ConnectionInformation | Select-Object userprincipalname,tenantid | Get-Unique
276 | $domaindetails = Get-AcceptedDomain | Where-Object {$_.initialdomain -like "True"}
277 |
278 | $reportstamp = "Report Creation Date: $((Get-date).ToString("MMM-dd-yyyy HH:mm:ss"))
279 | Tenant Name: $($tenantdetails.DisplayName)
280 | Tenant ID: $($scriptrunner.TenantID)
281 | Tenant Domain: $($domaindetails.Name)
282 | Executed by: $($scriptrunner.userprincipalname)
"
283 |
284 | $reportintro = " Data Security Engagement: POE Report Details
285 | The following report shows a snapshot of the current status of Content Search and DLP Policy Configuration within the Microsoft 365 environment.
286 | Follow the guidance in the POE document for how to use these results as part of the POE Submission process.
"
287 |
288 | if($reporttype -match'POEReport'){
289 | $poehtml = ($poechart | Where-Object {$_.Exchangeonline -like "Yes*"} | Select-Object DLPPolicyName,CreationDate,PolicyMode,ExchangeOnline | ConvertTo-Html -PreContent "Exchange Module
$reportstamp DLP Policies:") -replace ("(\([0]\))","") -replace ("(s\d+\))","s)")
290 | $poehtml += ($searchoutput | Where-Object {$_.exchangelocation -notlike ""} | Select-Object Name,ContentMatchQuery,ExchangeLocation,CreatedTime,LastModifiedTime,JobStartTime,CreatedBy,Status | Sort-Object -Property CreatedTime) | ConvertTo-Html -PreContent "
Content Search Results:"
291 | $poehtml += ($searchoutput | Where-Object {$_.SharePointLocation -notlike ""} | Select-Object Name,ContentMatchQuery,SharePointLocation,CreatedTime,LastModifiedTime,JobStartTime,CreatedBy,Status | Sort-Object -Property CreatedTime) | ConvertTo-Html -PreContent "SharePoint Module
$reportstamp Content Search Results:"
292 | $poehtml += ($poechart | Where-Object {$_.Teams -like "Yes*"} | Select-Object DLPPolicyName,CreationDate,PolicyMode,Teams | Sort-Object -Property CreationDate | ConvertTo-Html -PreContent "Teams Module
$reportstamp DLP Policies:") -replace ("(\([0]\))","") -replace ("(s\d+\))","s)")
293 | $poehtml += ($poechart | Where-Object {$_.Endpoints -like "Yes*" -and ($_.DLPPolicyName -notlike "DSPM*" -and $_.DLPPolicyName -notlike "Microsoft AI*")} | Select-Object DLPPolicyName,CreationDate,PolicyMode,Endpoints | Sort-Object -Property CreationDate -Descending | ConvertTo-Html -PreContent "Endpoints Module
$reportstampDLP Policies:") -replace ("(\([0]\))","") -replace ("(s\d+\))","s)")
294 | $poehtml += ($poechart | Where-Object {$_.Endpoints -like "Yes*" -and ($_.DLPPolicyName -like "DSPM*" -or $_.DLPPolicyName -like "Microsoft AI*")} | Select-Object DLPPolicyName,CreationDate,PolicyMode,Endpoints | Sort-Object -Property CreationDate -Descending | ConvertTo-Html -PreContent "Data Security for AI Module
$reportstampDLP Policies:") -replace ("(\([0]\))","") -replace ("(s\d+\))","s)")
295 | if ($irmpol.count -gt 0){$poehtml += ($irmpol | Where-Object {$_.Name -like "DSPM*" -or $_.Name -like "Microsoft AI*"} | Select-Object Name,InsiderRiskScenario,createdby,CreatedTime,LastModifiedTime,Enabled | Sort-Object -Property WhenCreated) | ConvertTo-Html -PreContent "IRM Policies:"}
296 |
297 | Convertto-html -Head $header -Body "$reportintro $poehtml" | Out-File $outputfile
298 | }
299 |
300 | #display report in browser
301 | Write-Host "`nReport file available at:" $outputfile -ForegroundColor Yellow -BackgroundColor Blue
302 | Write-host "`n`r"
303 | # Use the appropriate command to open the file in the default browser
304 | if ($IsMacOS -eq $true){
305 | & open $outputfile
306 | }
307 | elseif ($IsLinux -eq $true){
308 | & xdg-open $outputfile
309 | }
310 | else{
311 | Start-Process $outputfile
312 | }
313 |
314 | #cleanup
315 | Write-Host "Disconnecting Services" -ForegroundColor Yellow
316 | Disconnect-ExchangeOnline -Confirm:$false -ErrorAction:SilentlyContinue -InformationAction Ignore
317 |
318 | <#
319 | .SYNOPSIS
320 | Creates a report of the configured DLP Policies in the Tenant
321 |
322 | .DESCRIPTION
323 | The Data Security Engagement POE Report is a PowerShell script based assessment that leverages the Microsoft Security and Compliance PowerShell and Microsoft Graph PowerShell to gather information about the current configuration of Data Loss Prevention (DLP) Policies and Content Searches within the tenant to support the submission of the Proof of Execution document for the data security engagmenet.
324 |
325 | .PARAMETER ReportType
326 | Specifies which products to display in the service summary:
327 | PoEReport (Default)- Builds the reports for submission of the Proof of Execution
328 |
329 | .PARAMETER ReportPath
330 | Specifics the location to save the report and temporary files.
331 | Default location is the local appdata folder for the logged on user on Windows PCs if not specified.
332 | MacOS and Linux clients will always prompt for the path
333 |
334 | .EXAMPLE
335 | PS> .\EngagementPOEReport.ps1
336 | Provides the default report output for all DLP Policy information in the customers tenant.
337 |
338 | .EXAMPLE
339 | PS> .\EngagementPOEReport.ps1 -reportpath c:\temp
340 | Saves the report output to the folder c:\temp
341 |
342 | .LINK
343 | Find the most recent version of the script here:
344 | https://github.com/microsoft/CompliancePartnerWorkshops
345 |
346 | #>
347 | # SIG # Begin signature block
348 | # MIIoLAYJKoZIhvcNAQcCoIIoHTCCKBkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
349 | # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
350 | # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAyncZpbc02Dhiz
351 | # 6o4R8ze17AViTNpvZwfUcOslSSUbgqCCDXYwggX0MIID3KADAgECAhMzAAAEBGx0
352 | # Bv9XKydyAAAAAAQEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
353 | # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
354 | # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
355 | # bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTE0WhcNMjUwOTExMjAxMTE0WjB0MQsw
356 | # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
357 | # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
358 | # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
359 | # AQC0KDfaY50MDqsEGdlIzDHBd6CqIMRQWW9Af1LHDDTuFjfDsvna0nEuDSYJmNyz
360 | # NB10jpbg0lhvkT1AzfX2TLITSXwS8D+mBzGCWMM/wTpciWBV/pbjSazbzoKvRrNo
361 | # DV/u9omOM2Eawyo5JJJdNkM2d8qzkQ0bRuRd4HarmGunSouyb9NY7egWN5E5lUc3
362 | # a2AROzAdHdYpObpCOdeAY2P5XqtJkk79aROpzw16wCjdSn8qMzCBzR7rvH2WVkvF
363 | # HLIxZQET1yhPb6lRmpgBQNnzidHV2Ocxjc8wNiIDzgbDkmlx54QPfw7RwQi8p1fy
364 | # 4byhBrTjv568x8NGv3gwb0RbAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
365 | # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU8huhNbETDU+ZWllL4DNMPCijEU4w
366 | # RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
367 | # MBQGA1UEBRMNMjMwMDEyKzUwMjkyMzAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
368 | # tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
369 | # b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
370 | # CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
371 | # Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
372 | # MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAIjmD9IpQVvfB1QehvpC
373 | # Ge7QeTQkKQ7j3bmDMjwSqFL4ri6ae9IFTdpywn5smmtSIyKYDn3/nHtaEn0X1NBj
374 | # L5oP0BjAy1sqxD+uy35B+V8wv5GrxhMDJP8l2QjLtH/UglSTIhLqyt8bUAqVfyfp
375 | # h4COMRvwwjTvChtCnUXXACuCXYHWalOoc0OU2oGN+mPJIJJxaNQc1sjBsMbGIWv3
376 | # cmgSHkCEmrMv7yaidpePt6V+yPMik+eXw3IfZ5eNOiNgL1rZzgSJfTnvUqiaEQ0X
377 | # dG1HbkDv9fv6CTq6m4Ty3IzLiwGSXYxRIXTxT4TYs5VxHy2uFjFXWVSL0J2ARTYL
378 | # E4Oyl1wXDF1PX4bxg1yDMfKPHcE1Ijic5lx1KdK1SkaEJdto4hd++05J9Bf9TAmi
379 | # u6EK6C9Oe5vRadroJCK26uCUI4zIjL/qG7mswW+qT0CW0gnR9JHkXCWNbo8ccMk1
380 | # sJatmRoSAifbgzaYbUz8+lv+IXy5GFuAmLnNbGjacB3IMGpa+lbFgih57/fIhamq
381 | # 5VhxgaEmn/UjWyr+cPiAFWuTVIpfsOjbEAww75wURNM1Imp9NJKye1O24EspEHmb
382 | # DmqCUcq7NqkOKIG4PVm3hDDED/WQpzJDkvu4FrIbvyTGVU01vKsg4UfcdiZ0fQ+/
383 | # V0hf8yrtq9CkB8iIuk5bBxuPMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
384 | # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
385 | # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
386 | # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
387 | # IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
388 | # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
389 | # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
390 | # Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
391 | # CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
392 | # a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
393 | # rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
394 | # OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
395 | # 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
396 | # sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
397 | # dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
398 | # A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
399 | # w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
400 | # Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
401 | # lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
402 | # ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
403 | # ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
404 | # VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
405 | # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
406 | # bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
407 | # AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
408 | # L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
409 | # HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
410 | # dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
411 | # AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
412 | # AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
413 | # C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
414 | # hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
415 | # I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
416 | # wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
417 | # STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
418 | # ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
419 | # J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
420 | # XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
421 | # 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
422 | # Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
423 | # /Xmfwb1tbWrJUnMTDXpQzTGCGgwwghoIAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
424 | # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
425 | # aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
426 | # Z25pbmcgUENBIDIwMTECEzMAAAQEbHQG/1crJ3IAAAAABAQwDQYJYIZIAWUDBAIB
427 | # BQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
428 | # MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIMtz0Schh/A85yi45nDfmLfX
429 | # SQa3SKhbuj36fAaNDqObMEQGCisGAQQBgjcCAQwxNjA0oBSAEgBNAGkAYwByAG8A
430 | # cwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkqhkiG9w0B
431 | # AQEFAASCAQCTNzwbjtbEgqqhNFOENY3mktvm+broL/aaKAYevNMDaH4V7SzMgHO0
432 | # GZfdunfsl1D4zatkC1g7gNHOdrrxqTiU6ufAtSz0GEHjY5S1nsbBLCn3iinYMk/V
433 | # NAVT4CuBN85huUo5vtUUV+91iVHXNW1SLvuSoAltTGRehNWEe4afrnqdtjyMMbfB
434 | # QAMEa1kUVfrv1EkWenOg2e87gcVDn95XcsJtEycTnb6UWl9vRNWSNJnEDop9+8Jq
435 | # S7/wScAapxW1Z0OGGIyrF4f2XQCviryjYXIpXuhjvwLYOH9DNH90x51jeDD6VdoM
436 | # 3OZeZin9lbP6ediRLsy0lqOzZbaBAQ1+oYIXlDCCF5AGCisGAQQBgjcDAwExgheA
437 | # MIIXfAYJKoZIhvcNAQcCoIIXbTCCF2kCAQMxDzANBglghkgBZQMEAgEFADCCAVIG
438 | # CyqGSIb3DQEJEAEEoIIBQQSCAT0wggE5AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZI
439 | # AWUDBAIBBQAEIPVxCn1TJVvaYZFbvzSdnRDWv2xqJQ7bvvjhjrHdLNcnAgZnaY/r
440 | # CAQYEzIwMjUwMTA4MDk1MDA2LjU1M1owBIACAfSggdGkgc4wgcsxCzAJBgNVBAYT
441 | # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
442 | # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB
443 | # bWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpFMDAy
444 | # LTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
445 | # ZaCCEeowggcgMIIFCKADAgECAhMzAAAB7gXTAjCymp2nAAEAAAHuMA0GCSqGSIb3
446 | # DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
447 | # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
448 | # BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTIwNjE4
449 | # NDU0NFoXDTI1MDMwNTE4NDU0NFowgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
450 | # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
451 | # Q29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlv
452 | # bnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpFMDAyLTA1RTAtRDk0NzElMCMG
453 | # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcN
454 | # AQEBBQADggIPADCCAgoCggIBAL7xvKXXooSJrzEpLi9UvtEQ45HsvNgItcS1aB6r
455 | # I5WWvO4TP4CgJri0EYRKNsdNcQJ4w7A/1M94popqV9NTldIaOkmGkbHn1/EwmhNh
456 | # Y/PMPQ7ZECXIGY4EGaIsNdENAkvVG24CO8KIu6VVB6I8jxXv4eFNHf3VNsLVt5LH
457 | # Bd90ompjWieMNrCoMkCa3CwD+CapeAfAX19lZzApK5eJkFNtTl9ybduGGVE3Dl3T
458 | # gt3XllbNWX9UOn+JF6sajYiz/RbCf9rd4Y50eu9/Aht+TqVWrBs1ATXU552fa69G
459 | # MpYTB6tcvvQ64Nny8vPGvLTIR29DyTL5V+ryZ8RdL3Ttjus38dhfpwKwLayjJcbc
460 | # 7AK0sDujT/6Qolm46sPkdStLPeR+qAOWZbLrvPxlk+OSIMLV1hbWM3vu3mJKXlan
461 | # UcoGnslTxGJEj69jaLVxvlfZESTDdas1b+Nuh9cSz23huB37JTyyAqf0y1WdDrmz
462 | # pAbvYz/JpRkbYcwjfW2b2aigfb288E72MMw4i7QvDNROQhZ+WB3+8RZ9M1w9YRCP
463 | # t+xa5KhW4ne4GrA2ZFKmZAPNJ8xojO7KzSm9XWMVaq2rDAJxpj9Zexv9rGTEH/MJ
464 | # N0dIFQnxObeLg8z2ySK6ddj5xKofnyNaSkdtssDc5+yzt74lsyMqZN1yOZKRvmg3
465 | # ypTXAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUEIjNPxrZ3CCevfvF37a/X9x2pggw
466 | # HwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKg
467 | # UIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0
468 | # JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAw
469 | # XjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
470 | # ZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQw
471 | # DAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8E
472 | # BAMCB4AwDQYJKoZIhvcNAQELBQADggIBAHdnIC9rYQo5ZJWkGdiTNfx/wZmNo6zn
473 | # vsX2jXgCeH2UrLq1LfjBeg9cTJCnW/WIjusnNlUbuulTOdrLaf1yx+fenrLuRiQe
474 | # q1K6AIaZOKIGTCEV9IHIo8jTwySWC8m8pNlvrvfIZ+kXA+NDBl4joQ+P84C2liRP
475 | # shReoySLUJEwkqB5jjBREJxwi6N1ZGShW/gner/zsoTSo9CYBH1+ow3GMjdkKVXE
476 | # DjCIze01WVFsX1KCk6eNWjc/8jmnwl3jWE1JULH/yPeoztotIq0PM4RQ2z5m2OHO
477 | # eZmBR3v8BYcOHAEd0vntMj2HueJmR85k5edxiwrEbiCvJOyFTobqwBilup0wT/7+
478 | # DW56vtUYgdS0urdbQCebyUB9L0+q2GyRm3ngkXbwId2wWr/tdUG0WXEv8qBxDKUk
479 | # 2eJr5qeLFQbrTJQO3cUwZIkjfjEb00ezPcGmpJa54a0mFDlk3QryO7S81WAX4O/T
480 | # myKs+DR+1Ip/0VUQKn3ejyiAXjyOHwJP8HfaXPUPpOu6TgTNzDsTU6G04x/sMeA8
481 | # xZ/pY51id/4dpInHtlNcImxbmg6QzSwuK3EGlKkZyPZiOc3OcKmwQ9lq3SH7p3u6
482 | # VFpZHlEcBTIUVD2NFrspZo0Z0QtOz6cdKViNh5CkrlBJeOKB0qUtA8GVf73M6gYA
483 | # mGhl+umOridAMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkq
484 | # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
485 | # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
486 | # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
487 | # IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQG
488 | # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
489 | # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
490 | # VGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
491 | # ggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+
492 | # F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU
493 | # 88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqY
494 | # O7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzp
495 | # cGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0Xn
496 | # Rm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1
497 | # zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZN
498 | # N3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLR
499 | # vWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTY
500 | # uVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUX
501 | # k8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB
502 | # 2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKR
503 | # PEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0g
504 | # BFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5t
505 | # aWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQM
506 | # MAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQE
507 | # AwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
508 | # W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
509 | # bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBa
510 | # BggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0
511 | # LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqG
512 | # SIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOX
513 | # PTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6c
514 | # qYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/z
515 | # jj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz
516 | # /AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyR
517 | # gNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdU
518 | # bZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo
519 | # 3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4K
520 | # u+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10Cga
521 | # iQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9
522 | # vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGC
523 | # A00wggI1AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
524 | # aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
525 | # cnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25z
526 | # MScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046RTAwMi0wNUUwLUQ5NDcxJTAjBgNV
527 | # BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMV
528 | # AIijptU29+UXFtRYINDdhgrLo76ToIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzAR
529 | # BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
530 | # Y3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
531 | # bXAgUENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDrKHzlMCIYDzIwMjUwMTA4MDQy
532 | # NjEzWhgPMjAyNTAxMDkwNDI2MTNaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAOso
533 | # fOUCAQAwBwIBAAICA/EwBwIBAAICEyYwCgIFAOspzmUCAQAwNgYKKwYBBAGEWQoE
534 | # AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkq
535 | # hkiG9w0BAQsFAAOCAQEAGwfASuGBzO6NQzco9b8eEaB/Rlg3QV7vfkL5g1f8FLYv
536 | # Jyyj7/gF6rog9nEtvkAu/8wFE5Mb0kvKWqfDIW8SDxLv3qByq2oxs4PkhHmQpbRV
537 | # qRGBFxv3TObEU22f2d6x/AzijQvMBMygRu5UzeTLrQQ4suS0XA+wWMCwWhk3MSPM
538 | # 88qxWJBCZ61K6u1y0wOM6BA2UJlgN43DvrXxpg6iLg2BelrPhx3WRXBuRqbikDM0
539 | # JJWftQtIm6cJLWZ5zJ8Ry0Md+5pl/Ta2tIxEU2YRkUh1EBhI4n/LVRLIWo3mQEOZ
540 | # GNARS/ivYkvyf4lfDMderCmpSPHBq5Gcl4yITcDasjGCBA0wggQJAgEBMIGTMHwx
541 | # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
542 | # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
543 | # Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB7gXTAjCymp2nAAEAAAHu
544 | # MA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQw
545 | # LwYJKoZIhvcNAQkEMSIEIFq7p88jPaqWXFLYkUpFdsDA7up+uFnjw4kbuje96P7e
546 | # MIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgT1B3FJWF+r5V1/4M+z7kQiQH
547 | # P2gJL85B+UeRVGF+MCEwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
548 | # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
549 | # IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
550 | # MjAxMAITMwAAAe4F0wIwspqdpwABAAAB7jAiBCBSxacbhmDQeHttry4fzluNNRxn
551 | # 8tzh+CJ9LDRq2Sd1wDANBgkqhkiG9w0BAQsFAASCAgArAbJMFD2zgHWInmnZXdBC
552 | # fs7fWiH5NiMQiKT3ZbSHLcQjG2o0h9tYsrGserTLN+bx/aslTMk4mntHMeijSxk+
553 | # skoCVxYS3JBGiEuWbvZn8RZlqlG3bIh8bv94cU4P7YJaQhwcMS+xk9G2zdl4XX26
554 | # N6VYpxyvWm1js6BDvBVIKgJg54Q0DFzn7mir6FNNrgf9Z+Zn8qTyZDLutFN2FKHQ
555 | # ho3ir5GXhERRTjfgRqeI5S//CsdQ7MoASPGs/o/edpcEXAwGlkSjjrLnbVCAN6Gw
556 | # 49RJp9g8VIjl2fbS2RSjjqLq/zh9Pi/gDi1IbNEmXsDrtSBqUIW/b/YnTvfJoSKx
557 | # lHGE/vLZlYRIqCdh95Pd0BjB0/oFgP1/JY6mfHp4qqtTiinc8S7hcTF12kqjVCeI
558 | # a9nPkWh7nxA5RxP0S0z1IDKbrNrTZg/4Wc46pIW45hiJJ2miPM10Yb38cwkUDakj
559 | # G4dFJuJMLhBMvoeWr3gSY3cPuNCRylSWld9V0NzuF/1A+2V8EmQ6HIch71aGYzsQ
560 | # qtO9dRCUStZjBe2/8/9+ApFOYMdRCP/w3kQIc0/A1UjX9SsNJFIZ2Iox3OEI04yc
561 | # y985SlBm3q/e6rZo3K07W/WMmp109n4c2B8JlTILKcgmGEP0cGPDHB/aY5IAGokh
562 | # IDHmF73x77u5TELzYyGZcg==
563 | # SIG # End signature block
564 |
--------------------------------------------------------------------------------