Skip to content

Commit 2ca9efe

Browse files
committed
feat: add recurse parameter to Set-FolderIcon
resolves #30
1 parent 3d7d16f commit 2ca9efe

File tree

3 files changed

+460
-0
lines changed

3 files changed

+460
-0
lines changed

src/Set-FolderIcon/README.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Set-FolderIcon
2+
3+
> This function sets a folder icon on specified folder.
4+
5+
[![PowerShell Gallery Version](https://img.shields.io/powershellgallery/v/Set-FolderIcon?include_prereleases)](https://www.powershellgallery.com/packages/Set-FolderIcon/)
6+
7+
## Contents
8+
9+
[TOC]
10+
11+
## Tags
12+
13+
Windows Utility Directories Configure Personalization Tool
14+
15+
## Release Notes
16+
17+
### Version 1.0.2
18+
19+
- Added Script Certificate Signature
20+
21+
### Version 1.0.1
22+
23+
- Added a check to see if the desktop.ini file already exists in the target directory.
24+
If it does, it will throw a warning and not overwrite the file.
25+
26+
- Added LICENSEURI, PROJECTURI, and RELEASENOTES to the PSScriptInfo block.
27+
28+
### Version 1.0.0
29+
30+
- Initial Release
31+
32+
## Notes
33+
34+
- A Script to set the icon for a provided folder.
35+
- Will create two files in the destination path, both set as hidden system files: DESKTOP.ini and FOLDER.ICO.
36+
37+
## Parameters
38+
39+
### -Icon
40+
41+
```powershell
42+
.PARAMETER Icon
43+
Path to the icon (*.ico) file to use.
44+
```
45+
46+
### -Path
47+
48+
```powershell
49+
.PARAMETER Path
50+
Path to the folder to add the icon to.
51+
```
52+
53+
### -Recurse
54+
55+
```powershell
56+
.PARAMETER Recurse
57+
[Boolean] Recurse sub-directories?
58+
```
59+
60+
## Examples
61+
62+
```powershell
63+
# Changes the default folder icon to the custom one I donwloaded from Google Images.
64+
Set-FolderIcon -Icon "C:\Users\Mark\Downloads\Radvisual-Holographic-Folder.ico" -Path "C:\Users\Mark"
65+
```
66+
67+
```powershell
68+
# Changes the default folder icon to custom one for a UNC Path.
69+
Set-FolderIcon -Icon "C:\Users\Mark\Downloads\wii_folder.ico" -Path "\\FAMILY\Media\Wii"
70+
```
71+
72+
```powershell
73+
# Changes the default folder icon to custom one for all folders in specified folder and that folder itself.
74+
Set-FolderIcon -Icon "C:\Users\Mark\Downloads\Radvisual-Holographic-Folder.ico" -Path "C:\Test" -Recurse
75+
```
76+

src/Set-FolderIcon/Set-FolderIcon.ps1

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
2+
<#PSScriptInfo
3+
4+
.VERSION 1.0.2
5+
6+
.GUID b4bc8c7c-92fc-46cb-9f61-3e2118597165
7+
8+
.AUTHOR Jimmy Briggs
9+
10+
.COMPANYNAME jimbrig
11+
12+
.COPYRIGHT Jimmy Briggs | 2023
13+
14+
.TAGS Windows Utility Directories Configure Personalization Tool
15+
16+
.LICENSEURI https://github.com/jimbrig/PSScripts/blob/main/LICENSE
17+
18+
.PROJECTURI https://github.com/jimbrig/PSScripts/src/Set-FolderIcon/
19+
20+
.ICONURI
21+
22+
.EXTERNALMODULEDEPENDENCIES
23+
24+
.REQUIREDSCRIPTS
25+
26+
.EXTERNALSCRIPTDEPENDENCIES
27+
28+
.RELEASENOTES
29+
**Version 1.1.0**
30+
31+
- Implemented "Recurse" parameter to allow for setting the folder icon on all sub-directories within the specified
32+
directory. Per Issue #30 (https://github.com/jimbrig/PSScripts/issues/30)
33+
34+
**Version 1.0.2**
35+
36+
- Added Script Certificate Signature
37+
38+
**Version 1.0.1**
39+
40+
- Added a check to see if the desktop.ini file already exists in the target directory.
41+
If it does, it will throw a warning and not overwrite the file.
42+
43+
- Added LICENSEURI, PROJECTURI, and RELEASENOTES to the PSScriptInfo block.
44+
45+
.PRIVATEDATA
46+
47+
#>
48+
49+
<#
50+
51+
.SYNOPSIS
52+
This function sets a folder icon on specified folder.
53+
.DESCRIPTION
54+
A Script to set the icon for a provided folder.
55+
Will create two files in the destination path, both set as hidden system files: DESKTOP.ini and FOLDER.ICO.
56+
.PARAMETER Icon
57+
Path to the icon (*.ico) file to use.
58+
.PARAMETER Path
59+
Path to the folder to add the icon to.
60+
.PARAMETER Recurse
61+
If specified, the function will set the folder icon for all subdirectories within the specified directory.
62+
.EXAMPLE
63+
Set-FolderIcon -Icon "C:\Users\Mark\Downloads\Radvisual-Holographic-Folder.ico" -Path "C:\Users\Mark"
64+
65+
# Changes the default folder icon to the custom one I downloaded from Google Images.
66+
.EXAMPLE
67+
Set-FolderIcon -Icon "C:\Users\Mark\Downloads\wii_folder.ico" -Path "\\FAMILY\Media\Wii"
68+
69+
# Changes the default folder icon to custom one for a UNC Path.
70+
.EXAMPLE
71+
Set-FolderIcon -Icon "C:\Users\Mark\Downloads\Radvisual-Holographic-Folder.ico" -Path "C:\Test" -Recurse
72+
73+
# Changes the default folder icon to custom one for all folders in the specified folder and that folder itself.
74+
#>
75+
[CmdletBinding()]
76+
Param(
77+
[Parameter(Mandatory = $True, Position = 0)]
78+
[string[]]$Icon,
79+
80+
[Parameter(Mandatory = $True, Position = 1)]
81+
[string]$Path,
82+
83+
[Parameter(Mandatory = $False)]
84+
[switch]$Recurse
85+
)
86+
87+
88+
89+
Process {
90+
91+
# Set the folder icon for the main directory
92+
$TargetDirectory = Convert-Path $Path
93+
Set-FolderIcon -TargetDirectory $TargetDirectory -IconPath $Icon
94+
95+
# Recurse into subdirectories if the -Recurse flag is provided
96+
If ($Recurse) {
97+
$SubDirectories = Get-ChildItem -Path $TargetDirectory -Directory -Recurse
98+
ForEach ($SubDirectory in $SubDirectories) {
99+
Set-FolderIcon -TargetDirectory $SubDirectory.FullName -IconPath $Icon
100+
}
101+
}
102+
103+
}
104+
105+
End {
106+
107+
Write-Host "Folder Icon Set Successfully."
108+
109+
}
110+
111+
Begin {
112+
113+
# Define a Function to Set Individual Folder Icon
114+
Function Set-FolderIcon {
115+
Param (
116+
[string]$TargetDirectory,
117+
[string]$IconPath
118+
)
119+
120+
$DesktopIni = "[.ShellClassInfo]`n" + "IconResource=$IconPath`n"
121+
122+
If (Test-Path "$($TargetDirectory)\desktop.ini") {
123+
Write-Warning -Message "desktop.ini already found within $TargetDirectory."
124+
} else {
125+
Add-Content "$($TargetDirectory)\desktop.ini" -Value $DesktopIni
126+
(Get-Item "$($TargetDirectory)\desktop.ini" -Force).Attributes = 'Hidden, System, Archive'
127+
(Get-Item $TargetDirectory -Force).Attributes = 'ReadOnly, Directory'
128+
}
129+
}
130+
131+
# Validations
132+
If (!(Test-Path $Icon)) {
133+
throw "[Error] Specified Icon Path not found: $Icon"
134+
}
135+
136+
If (!(Test-Path $Path)) {
137+
throw "[Error] Specified Directory Path not found: $Path"
138+
}
139+
140+
}
141+
142+
143+
# SIG # Begin signature block
144+
# MIIbsQYJKoZIhvcNAQcCoIIbojCCG54CAQExDzANBglghkgBZQMEAgEFADB5Bgor
145+
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
146+
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAEA0oLm1eVGPMn
147+
# 6W563z7e+3hzgqHjyCMpu3T8Qy0VSKCCFgcwggL8MIIB5KADAgECAhBvRxLIstso
148+
# kkFFgS0muvCbMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNVBAMMC0ppbUJyaWdEZXZ0
149+
# MB4XDTIzMDMxMDIzMjY1NVoXDTI0MDMxMDIzNDY1NVowFjEUMBIGA1UEAwwLSmlt
150+
# QnJpZ0RldnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHDgwOjMvc
151+
# sURWKCDgflsMLhNRIA5yWwkkwCSRTb2jPZTniUkPGgdJy8XQRXoecakq9Cw5QS2x
152+
# UeCwVw+om9b4TeHdcZP237tLwJzMVf38xEfE7pE4jZHqcWd4owLtuD9oB//1nkiy
153+
# FqiVBVgsOyRy4YJmwvhtbmA5ZWW1WHkNOgnh4ZPEBdLIIwsZlQT8B5aTHZQCj2YX
154+
# NgUeroPJH0WgVajI4FDvN3usL8m3uh0UvE82nBgkJ5dkuVxHB2U3G4FN6nVb7N2y
155+
# 4urqwBG/L8R04vI/IYYSEj2wxZb1swF5BJ22opDauWFdFQ7sN4qpElNMb6teAG7M
156+
# qW6FK+eSLrJ1AgMBAAGjRjBEMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
157+
# BgEFBQcDAzAdBgNVHQ4EFgQUacXlY5TOFBx5jUTmblh9+x5NcSUwDQYJKoZIhvcN
158+
# AQELBQADggEBALbBLxYxORHVIHbZELfnX89QPM3+uKs0/SVWD7tiSa2HRPBDPSo1
159+
# xFC2k/FzkzXaNXatKj1+4S/W/2tbOv7AM9a8t5luZeRZcRrfhaM+MHlN31ATBDMB
160+
# ENMFt3iA70ToY5yRdVBaBsoA0FVvdmaIK/NsfwfU0hqz891w5bgYV4JFju832e19
161+
# yoDqTXWmQUaAxFDQhL8I08y/cWTSxicRNdfEmn9ySV+QBrd76CV4F49nWWK9gcvP
162+
# Ja2cOHxWb1EWW2yBC54aVOKidI+CzlYBYYeZZpRtkTseirvxoMt34b8iajKKqPlr
163+
# VPNjRcQxLgfT841f49girM/UA4gtKgXBexYwggWNMIIEdaADAgECAhAOmxiO+dAt
164+
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
165+
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
166+
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
167+
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
168+
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
169+
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
170+
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
171+
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
172+
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
173+
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
174+
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
175+
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
176+
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
177+
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
178+
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
179+
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
180+
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
181+
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
182+
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
183+
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
184+
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
185+
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
186+
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
187+
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
188+
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
189+
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
190+
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
191+
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
192+
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
193+
# twGpn1eqXijiuZQwggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqG
194+
# SIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
195+
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
196+
# dXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMx
197+
# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy
198+
# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg
199+
# Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXH
200+
# JQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMf
201+
# UBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w
202+
# 1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRk
203+
# tFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYb
204+
# qMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUm
205+
# cJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP6
206+
# 5x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzK
207+
# QtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo
208+
# 80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjB
209+
# Jgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXche
210+
# MBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB
211+
# /wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU
212+
# 7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoG
213+
# CCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29j
214+
# c3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdp
215+
# Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDig
216+
# NqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
217+
# dEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZI
218+
# hvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd
219+
# 4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiC
220+
# qBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl
221+
# /Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeC
222+
# RK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYT
223+
# gAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/
224+
# a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37
225+
# xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmL
226+
# NriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0
227+
# YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJ
228+
# RyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIG
229+
# wDCCBKigAwIBAgIQDE1pckuU+jwqSj0pB4A9WjANBgkqhkiG9w0BAQsFADBjMQsw
230+
# CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRp
231+
# Z2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENB
232+
# MB4XDTIyMDkyMTAwMDAwMFoXDTMzMTEyMTIzNTk1OVowRjELMAkGA1UEBhMCVVMx
233+
# ETAPBgNVBAoTCERpZ2lDZXJ0MSQwIgYDVQQDExtEaWdpQ2VydCBUaW1lc3RhbXAg
234+
# MjAyMiAtIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDP7KUmOsap
235+
# 8mu7jcENmtuh6BSFdDMaJqzQHFUeHjZtvJJVDGH0nQl3PRWWCC9rZKT9BoMW15GS
236+
# OBwxApb7crGXOlWvM+xhiummKNuQY1y9iVPgOi2Mh0KuJqTku3h4uXoW4VbGwLpk
237+
# U7sqFudQSLuIaQyIxvG+4C99O7HKU41Agx7ny3JJKB5MgB6FVueF7fJhvKo6B332
238+
# q27lZt3iXPUv7Y3UTZWEaOOAy2p50dIQkUYp6z4m8rSMzUy5Zsi7qlA4DeWMlF0Z
239+
# Wr/1e0BubxaompyVR4aFeT4MXmaMGgokvpyq0py2909ueMQoP6McD1AGN7oI2TWm
240+
# tR7aeFgdOej4TJEQln5N4d3CraV++C0bH+wrRhijGfY59/XBT3EuiQMRoku7mL/6
241+
# T+R7Nu8GRORV/zbq5Xwx5/PCUsTmFntafqUlc9vAapkhLWPlWfVNL5AfJ7fSqxTl
242+
# OGaHUQhr+1NDOdBk+lbP4PQK5hRtZHi7mP2Uw3Mh8y/CLiDXgazT8QfU4b3ZXUtu
243+
# MZQpi+ZBpGWUwFjl5S4pkKa3YWT62SBsGFFguqaBDwklU/G/O+mrBw5qBzliGcnW
244+
# hX8T2Y15z2LF7OF7ucxnEweawXjtxojIsG4yeccLWYONxu71LHx7jstkifGxxLjn
245+
# U15fVdJ9GSlZA076XepFcxyEftfO4tQ6dwIDAQABo4IBizCCAYcwDgYDVR0PAQH/
246+
# BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwIAYD
247+
# VR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW2W1N
248+
# hS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBRiit7QYfyPMRTtlwvNPSqUFN9SnDBa
249+
# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNl
250+
# cnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQBggr
251+
# BgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu
252+
# Y29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln
253+
# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0MA0G
254+
# CSqGSIb3DQEBCwUAA4ICAQBVqioa80bzeFc3MPx140/WhSPx/PmVOZsl5vdyipjD
255+
# d9Rk/BX7NsJJUSx4iGNVCUY5APxp1MqbKfujP8DJAJsTHbCYidx48s18hc1Tna9i
256+
# 4mFmoxQqRYdKmEIrUPwbtZ4IMAn65C3XCYl5+QnmiM59G7hqopvBU2AJ6KO4ndet
257+
# Hxy47JhB8PYOgPvk/9+dEKfrALpfSo8aOlK06r8JSRU1NlmaD1TSsht/fl4JrXZU
258+
# inRtytIFZyt26/+YsiaVOBmIRBTlClmia+ciPkQh0j8cwJvtfEiy2JIMkU88ZpSv
259+
# XQJT657inuTTH4YBZJwAwuladHUNPeF5iL8cAZfJGSOA1zZaX5YWsWMMxkZAO85d
260+
# NdRZPkOaGK7DycvD+5sTX2q1x+DzBcNZ3ydiK95ByVO5/zQQZ/YmMph7/lxClIGU
261+
# gp2sCovGSxVK05iQRWAzgOAj3vgDpPZFR+XOuANCR+hBNnF3rf2i6Jd0Ti7aHh2M
262+
# WsgemtXC8MYiqE+bvdgcmlHEL5r2X6cnl7qWLoVXwGDneFZ/au/ClZpLEQLIgpzJ
263+
# GgV8unG1TnqZbPTontRamMifv427GFxD9dAq6OJi7ngE273R+1sKqHB+8JeEeOMI
264+
# A11HLGOoJTiXAdI/Otrl5fbmm9x+LMz/F0xNAKLY1gEOuIvu5uByVYksJxlh9ncB
265+
# jDGCBQAwggT8AgEBMCowFjEUMBIGA1UEAwwLSmltQnJpZ0RldnQCEG9HEsiy2yiS
266+
# QUWBLSa68JswDQYJYIZIAWUDBAIBBQCggYQwGAYKKwYBBAGCNwIBDDEKMAigAoAA
267+
# oQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4w
268+
# DAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgW4Uz9HiV2IGPnO6cKCSRLF45
269+
# JjggXdQOa1ue/DostGgwDQYJKoZIhvcNAQEBBQAEggEADDCB62UjsxulOz4CxU+I
270+
# NQxf9wEO15PpKx4PyY6tgkB9n20RRJpNtXYSCJh7UGzi3sFC59enxoVSIWbabQRP
271+
# Y5TkN6115069l38poK+NqSIDmi1zj/LXkvARaGIi9/u0pJGcmBSwWilv28GjLvkm
272+
# 0fF+L+VqQ/Fh0c9GiGwCWI5L5a3o2mD1vVTuTGB4y8nuPMsICo1bpDPm6OiKNMKZ
273+
# Zc9B89plGGJ98vHR1i0brfTf0eLfpBtIUtVzwMeNEKmT1dh0lP6hiTddAXFM1R1o
274+
# BH+yCVq2VVV6Z9jiaBejT4y8YU2IORzOmF0QwVYRc6/h3UIKNJHBJ/LIShPyXQ2d
275+
# oqGCAyAwggMcBgkqhkiG9w0BCQYxggMNMIIDCQIBATB3MGMxCzAJBgNVBAYTAlVT
276+
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1
277+
# c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAxNaXJLlPo8
278+
# Kko9KQeAPVowDQYJYIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcN
279+
# AQcBMBwGCSqGSIb3DQEJBTEPFw0yMzAzMTMwMDI3MDZaMC8GCSqGSIb3DQEJBDEi
280+
# BCBzb9CDgoFEZpb7B6fbNABb7u3XF00195TkAEZbXhLm3zANBgkqhkiG9w0BAQEF
281+
# AASCAgBN/KQfa9+O/Q2WybCw7awudx8O/AgZpb3nIR1/XYh8nWqvkxxltwjUjp+R
282+
# tKd9iOGEZwnFgQM4748p3qwb5DA720MRhl1xZPHLI2lXvf1PWAGpB7tlAiJVaPRC
283+
# zejFo/e4sX/OKbSljCzGG4xhv5omvZ5yrFza3m8mErUda7gUMY9bQJ83GZBy8csm
284+
# qknYtr8wfxlTtarak3J0TUDUbNRq/l+kyub+hfsGA+htP/L6eZxOxqqL4Jj8YDOt
285+
# iMbAigBRihGmq8k1t2mbCqTooZFWb9hLhhdKX54pQOErhCyN9URQCK8jhjjmZFPO
286+
# DqcYYnDBhXsndEA1Tym3/OtH2Y74JF352L57ac2seqwXDdt36TYImrx6tSiuzF/8
287+
# lb5T6NzigM0U3uAhgQC3K7HOI4c8G4bLHgY0L91BI+HwqUf+ma0kN4mz/mpW8Q02
288+
# eqjoIQ8CdmjA+bKdTCyLSXzu+Dbe5sFqO+UXVFtG0RNjOOy+WkDiaeSQNjShCo2Y
289+
# tJTZt7lUvVPsfO7aTLw0P7stv/zHE5W90RD/L1BiXFkCd9MF2k1Z/FjPMAm8KMrC
290+
# papfKW7vpdy+a/jTeBgAmM1/r5rXkTk57zx6KroARhsWp2QtIuB6AswSzumuIkbo
291+
# KDttLbXv+ClR4N6oKfw/WJQgnXGMDCK8/BtX0RD4mCfClUjkqw==
292+
# SIG # End signature block

0 commit comments

Comments
 (0)