Sin descripción
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

common.ps1 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. # Get the project item for the scripts folder
  2. try {
  3. $scriptsFolderProjectItem = $project.ProjectItems.Item("Scripts")
  4. $projectScriptsFolderPath = $scriptsFolderProjectItem.FileNames(1)
  5. }
  6. catch {
  7. # No Scripts folder
  8. Write-Host "No scripts folder found"
  9. }
  10. $packageScriptsFolder = Join-Path $installPath Content\Scripts\Office
  11. Write-Host "packageScriptsFolder" + $packageScriptsFolder
  12. $officeVersionFolder = $packageScriptsFolder | Get-ChildItem | where {$_.PsIsContainer} | Split-Path -Leaf
  13. Write-Host "officeVersionFolder: " + $officeVersionFolder
  14. # $officeVersionFolder -match "(\d+)"
  15. $officeVersion = $officeVersionFolder | Select-String -Pattern "(\d+)"
  16. Write-Host "officeVersion" + $officeVersion
  17. $officeBetaRegEx = "[Oo][Ff][Ff][Ii][Cc][Ee]/[Oo][Ff][Ff][Ii][Cc][Ee]\.[Jj][Ss]"
  18. $officeintellisensefile = "_officeintellisense.js"
  19. $officeLocalRegEx = "[Oo][Ff][Ff][Ii][Cc][Ee]/((\d+\.)(\d+))/[Oo][Ff][Ff][Ii][Cc][Ee]\.[Jj][Ss]"
  20. $officeCDNRegEx = "[Hh][Tt][Tt][Pp][Ss]://[Aa][Pp][Pp][Ss][Ff][Oo][Rr][Oo][Ff][Ff][Ii][Cc][Ee]\.[Mm][Ii][Cc][Rr][Oo][Ss][Oo][Ff][Tt]\.[Cc][Oo][Mm]/[Ll][Ii][Bb]/(\d+\.)(\d+)/[Hh][Oo][Ss][Tt][Ee][Dd]/[Oo][Ff][Ff][Ii][Cc][Ee]\.[Jj][Ss]"
  21. $outlook15LocalRegEx = "[Oo][Ff][Ff][Ii][Cc][Ee]/((\d+\.)(\d+))/[Oo][Uu][Tt][Ll][Oo][Oo][Kk]-15\.[Dd][Ee][Bb][Uu][Gg]\.[Jj][Ss]"
  22. $outlook15CDNRegEx = "[Hh][Tt][Tt][Pp][Ss]://[Aa][Pp][Pp][Ss][Ff][Oo][Rr][Oo][Ff][Ff][Ii][Cc][Ee]\.[Mm][Ii][Cc][Rr][Oo][Ss][Oo][Ff][Tt]\.[Cc][Oo][Mm]/[Ll][Ii][Bb]/(\d+\.)(\d+)/[Hh][Oo][Ss][Tt][Ee][Dd]/[Oo][Uu][Tt][Ll][Oo][Oo][Kk]-15\.[Dd][Ee][Bb][Uu][Gg]\.[Jj][Ss]"
  23. $outlookLocalRegEx = "[Oo][Ff][Ff][Ii][Cc][Ee]/((\d+\.)(\d+))/[Oo][Uu][Tt][Ll][Oo][Oo][Kk]-[Ww][Ii][Nn]32\.[Dd][Ee][Bb][Uu][Gg]\.[Jj][Ss]"
  24. $outlookCDNRegEx = "[Hh][Tt][Tt][Pp][Ss]://[Aa][Pp][Pp][Ss][Ff][Oo][Rr][Oo][Ff][Ff][Ii][Cc][Ee]\.[Mm][Ii][Cc][Rr][Oo][Ss][Oo][Ff][Tt]\.[Cc][Oo][Mm]/[Ll][Ii][Bb]/(\d+\.)(\d+)/[Hh][Oo][Ss][Tt][Ee][Dd]/[Oo][Uu][Tt][Ll][Oo][Oo][Kk]-[Ww][Ii][Nn]32\.[Dd][Ee][Bb][Uu][Gg]\.[Jj][Ss]"
  25. $newOfficeLocalPath = "office/$officeVersion/office.js"
  26. $newOutlookLocalPath = "office/$officeVersion/outlook-win32.debug.js"
  27. $newOutlookCDNPath = "https://appsforoffice.microsoft.com/lib/$officeVersion/hosted/outlook-win32.debug.js"
  28. $newOfficeCDNPath = "https://appsforoffice.microsoft.com/lib/$officeVersion/hosted/office.js"
  29. $officeCommentRegEx = "/\* Required to correctly initalize Office.js for intellisense \*/"
  30. $onlineCommentRegEx = "/\* Use online copy of Office.js for intellisense \*/"
  31. $offlineCommentRegEx = "/\* Use offline copy of Office.js for intellisense \*/"
  32. $officeComment = "/* Required to correctly initalize Office.js for intellisense */"
  33. $onlineComment = "/* Use online copy of Office.js for intellisense */"
  34. $offlineComment = "/* Use offline copy of Office.js for intellisense */"
  35. function AddOrUpdate-Reference($scriptsFolderProjectItem, $regExPattern, $newFullPath , $commentOut) {
  36. try {
  37. $referencesFileProjectItem = $scriptsFolderProjectItem.ProjectItems.Item("_references.js")
  38. }
  39. catch {
  40. # _references.js file not found
  41. return
  42. }
  43. if ($referencesFileProjectItem -eq $null) {
  44. # _references.js file not found
  45. return
  46. }
  47. $referencesFilePath = $referencesFileProjectItem.FileNames(1)
  48. $referencesTempFilePath = Join-Path $env:TEMP "_references.tmp.js"
  49. $addCondition = Select-String $referencesFilePath -pattern $regExPattern -quiet
  50. #Write-Host "Add condition check $addCondition"
  51. if ($addCondition -eq $false) {
  52. #Write-Host "No existing reference found"
  53. # File has no existing matching reference line
  54. # Add the full reference line to the beginning of the file
  55. if ($regExPattern -eq $officeintellisensefile) {
  56. $officeComment | Add-Content $referencesTempFilePath -Encoding UTF8
  57. #Write-Host "Add Comment for intellisense"
  58. }
  59. elseif ($regExPattern -eq $outlookLocalRegEx) {
  60. $offlineComment | Add-Content $referencesTempFilePath -Encoding UTF8
  61. #Write-Host "Add comment for Local Office.js reference"
  62. }
  63. elseif ($regExPattern -eq $outlookCDNRegEx) {
  64. $onlineComment | Add-Content $referencesTempFilePath -Encoding UTF8
  65. #Write-Host "Add comment for CDN reference"
  66. }
  67. if ($commentOut -eq "True"){
  68. "// /// <reference path=""$newFullPath"" />" | Add-Content $referencesTempFilePath -Encoding UTF8
  69. #Write-Host "Add Comment to $newFullPath"
  70. }
  71. else {
  72. "/// <reference path=""$newFullPath"" />" | Add-Content $referencesTempFilePath -Encoding UTF8
  73. #Write-Host "Add Reference to $newFullPath"
  74. }
  75. Get-Content $referencesFilePath | Add-Content $referencesTempFilePath
  76. }
  77. else {
  78. #Write-Host "Existing reference found"
  79. # Loop through file and replace old file name with new file name
  80. Get-Content $referencesFilePath | ForEach-Object { $_ -replace $regExPattern, $newFullPath } > $referencesTempFilePath
  81. }
  82. # Copy over the new _references.js file
  83. Copy-Item $referencesTempFilePath $referencesFilePath -Force
  84. Remove-Item $referencesTempFilePath -Force
  85. }
  86. function Remove-Reference($scriptsFolderProjectItem , $regExPattern) {
  87. try {
  88. $referencesFileProjectItem = $scriptsFolderProjectItem.ProjectItems.Item("_references.js")
  89. }
  90. catch {
  91. # _references.js file not found
  92. return
  93. }
  94. if ($referencesFileProjectItem -eq $null) {
  95. return
  96. }
  97. $referencesFilePath = $referencesFileProjectItem.FileNames(1)
  98. $referencesTempFilePath = Join-Path $env:TEMP "_references.tmp.js"
  99. $removeCondition = Select-String $referencesFilePath -pattern $regExPattern -quiet
  100. #Write-Host "Remove condition check $removeCondition"
  101. if ($removeCondition -eq $True) {
  102. #Write-Host "Removing Reference $regExPattern"
  103. # Delete the line referencing the file
  104. Get-Content $referencesFilePath | ForEach-Object { if (-not ($_ -match $regExPattern)) { $_ } } > $referencesTempFilePath
  105. # Copy over the new _references.js file
  106. Copy-Item $referencesTempFilePath $referencesFilePath -Force
  107. Remove-Item $referencesTempFilePath -Force
  108. }
  109. }
  110. # SIG # Begin signature block
  111. # MIIkGwYJKoZIhvcNAQcCoIIkDDCCJAgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
  112. # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
  113. # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCATO9USWLW8EGEl
  114. # NLiZGw2NjSWBVkG0L+NDYD/tKzPmAaCCDZIwggYQMIID+KADAgECAhMzAAAAOI0j
  115. # bRYnoybgAAAAAAA4MA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
  116. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  117. # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
  118. # bmcgUENBIDIwMTEwHhcNMTQxMDAxMTgxMTE2WhcNMTYwMTAxMTgxMTE2WjCBgzEL
  119. # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
  120. # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsGA1UECxMETU9Q
  121. # UjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0B
  122. # AQEFAAOCAQ8AMIIBCgKCAQEAwt7Wz+K3fxFl/7NjqfNyufEk61+kHLJEWetvnPtw
  123. # 22VpmquQMV7/3itkEfXtbOkAIYLDkMyCGaPjmWNlir3T1fsgo+AZf7iNPGr+yBKN
  124. # 5dM5701OPoaWTBGxEYSbJ5iIOy3UfRjzBeCtSwQ+Q3UZ5kbEjJ3bidgkh770Rye/
  125. # bY3ceLnDZaFvN+q8caadrI6PjYiRfqg3JdmBJKmI9GNG6rsgyQEv2I4M2dnt4Db7
  126. # ZGhN/EIvkSCpCJooSkeo8P7Zsnr92Og4AbyBRas66Boq3TmDPwfb2OGP/DksNp4B
  127. # n+9od8h4bz74IP+WGhC+8arQYZ6omoS/Pq6vygpZ5Y2LBQIDAQABo4IBfzCCAXsw
  128. # HwYDVR0lBBgwFgYIKwYBBQUHAwMGCisGAQQBgjdMCAEwHQYDVR0OBBYEFMbxyhgS
  129. # CySlRfWC5HUl0C8w12JzMFEGA1UdEQRKMEikRjBEMQ0wCwYDVQQLEwRNT1BSMTMw
  130. # MQYDVQQFEyozMTY0MitjMjJjOTkzNi1iM2M3LTQyNzEtYTRiZC1mZTAzZmE3MmMz
  131. # ZjAwHwYDVR0jBBgwFoAUSG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0fBE0wSzBJ
  132. # oEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljQ29k
  133. # U2lnUENBMjAxMV8yMDExLTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMwUQYIKwYB
  134. # BQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
  135. # Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqG
  136. # SIb3DQEBCwUAA4ICAQCecm6ourY1Go2EsDqVN+I0zXvsz1Pk7qvGGDEWM3tPIv6T
  137. # dVZHTXRrmYdcLnSIcKVGb7ScG5hZEk00vtDcdbNdDDPW2AX2NRt+iUjB5YmlLTo3
  138. # J0ce7mjTaFpGoqyF+//Q6OjVYFXnRGtNz73epdy71XqL0+NIx0Z7dZhz+cPI7IgQ
  139. # C/cqLRN4Eo/+a6iYXhxJzjqmNJZi2+7m4wzZG2PH+hhh7LkACKvkzHwSpbamvWVg
  140. # Dh0zWTjfFuEyXH7QexIHgbR+uKld20T/ZkyeQCapTP5OiT+W0WzF2K7LJmbhv2Xj
  141. # 97tj+qhtKSodJ8pOJ8q28Uzq5qdtCrCRLsOEfXKAsfg+DmDZzLsbgJBPixGIXncI
  142. # u+OKq39vCT4rrGfBR+2yqF16PLAF9WCK1UbwVlzypyuwLhEWr+KR0t8orebVlT/4
  143. # uPVr/wLnudvNvP2zQMBxrkadjG7k9gVd7O4AJ4PIRnvmwjrh7xy796E3RuWGq5eu
  144. # dXp27p5LOwbKH6hcrI0VOSHmveHCd5mh9yTx2TgeTAv57v+RbbSKSheIKGPYUGNc
  145. # 56r7VYvEQYM3A0ABcGOfuLD5aEdfonKLCVMOP7uNQqATOUvCQYMvMPhbJvgfuS1O
  146. # eQy77Hpdnzdq2Uitdp0v6b5sNlga1ZL87N/zsV4yFKkTE/Upk/XJOBbXNedrODCC
  147. # B3owggVioAMCAQICCmEOkNIAAAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNV
  148. # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
  149. # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29m
  150. # dCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTExMDcwODIwNTkw
  151. # OVoXDTI2MDcwODIxMDkwOVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
  152. # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
  153. # b3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAx
  154. # MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6qghBN
  155. # NLrytlghn0IbKmvpWlCquAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnVARQxQtOJ
  156. # DXlkh36UYCRsr55JnOloXtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv
  157. # 56sIUM+zRLdd2MQuA3WraPPLbfM6XKEW9Ea64DhkrG5kNXimoGMPLdNAk/jj3gcN
  158. # 1Vx5pUkp5w2+oBN3vpQ97/vjK1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+
  159. # sYxd6IlPhBryoS9Z5JA7La4zWMW3Pv4y07MDPbGyr5I4ftKdgCz1TlaRITUlwzlu
  160. # ZH9TupwPrRkjhMv0ugOGjfdf8NBSv4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKu
  161. # HCOnqWbsYR9q4ShJnV+I4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43BdD1FGd7P4AOG8
  162. # rAKCX9vAFbO9G9RVS+c5oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/CHFfbg43s
  163. # TUkwp6uO3+xbn6/83bBm4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7IvhNdXnFy/
  164. # dygo8e1twyiPLI9AN0/B4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+TzOE2rCI
  165. # F96eTvSWsLxGoGyY0uDWiIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEEAwIB
  166. # ADAdBgNVHQ4EFgQUSG5k5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGCNxQCBAwe
  167. # CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
  168. # BBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0
  169. # cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2Vy
  170. # QXV0MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUH
  171. # MAKGQmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2Vy
  172. # QXV0MjAxMV8yMDExXzAzXzIyLmNydDCBnwYDVR0gBIGXMIGUMIGRBgkrBgEEAYI3
  173. # LgMwgYMwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lv
  174. # cHMvZG9jcy9wcmltYXJ5Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBh
  175. # AGwAXwBwAG8AbABpAGMAeQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG
  176. # 9w0BAQsFAAOCAgEAZ/KGpZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVfLiw+
  177. # +MNy0W2D/r4/6ArKO79HqaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpLHPM8QotS
  178. # 0LD9a+M+By4pm+Y9G6XUtR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELuk
  179. # qQUMm+1o+mgulaAqPyprWEljHwlpblqYluSD9MCP80Yr3vw70L01724lruWvJ+3Q
  180. # 3fMOr5kol5hNDj0L8giJ1h/DMhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgy
  181. # cScaf7H0J/jeLDogaZiyWYlobm+nt3TDQAUGpgEqKD6CPxNNZgvAs0314Y9/HG8V
  182. # fUWnduVAKmWjw11SYobDHWM2l4bf2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbR
  183. # BrF1HxS+YWG18NzGGwS+30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOXpQlLSBCZgB/Q
  184. # ACnFsZulP0V3HjXG0qKin3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL
  185. # /9azI2h15q/6/IvrC4DqaTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4ETIheu9B
  186. # CrE/+6jMpF3BoYibV3FWTkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16UM0xghXf
  187. # MIIV2wIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
  188. # MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
  189. # MSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAA
  190. # OI0jbRYnoybgAAAAAAA4MA0GCWCGSAFlAwQCAQUAoIHKMBkGCSqGSIb3DQEJAzEM
  191. # BgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqG
  192. # SIb3DQEJBDEiBCAAjoN50utyXHZkcE8hc7selB46Am7buIpZ8prY77Fu5TBeBgor
  193. # BgEEAYI3AgEMMVAwTqAWgBQAQwBvAG0AbQBvAG4ALgBwAHMAMaE0gDJodHRwOi8v
  194. # d3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9NaWNyb3NvZnQuT2ZmaWNlLmpzLzANBgkq
  195. # hkiG9w0BAQEFAASCAQCMm5V7sGqSZC9B6MoHpcu37lIc6LR/Hb842wcN/7zW6GCO
  196. # Eku2RyQGJvnCKTJG4sLXzRT1IvGUmIhIgebhUwUpXGxgCNxW2UQXyV12CQUNoXMm
  197. # kd9xmy18kPMTjvMwPgak2E5iFe2Zee5ogeLLdcsy8iEs/gF0WBrS15Hr3KQx7y92
  198. # VNPUSBesbmwLz/jbiEI9L3hTA6rOZBT3qI/0dk+45xxPBipmpUz8lBfp2RaZjV1q
  199. # +EsGeqTO/IpOQMrQ+QRQUfu39YmsK627A2N8cM1fKNX6duBmMZiB2y64PGqJRWD5
  200. # r1IlFXvbN68sFBjaezGleJgUfp4aP8LqnPEx2VpAoYITTTCCE0kGCisGAQQBgjcD
  201. # AwExghM5MIITNQYJKoZIhvcNAQcCoIITJjCCEyICAQMxDzANBglghkgBZQMEAgEF
  202. # ADCCAT0GCyqGSIb3DQEJEAEEoIIBLASCASgwggEkAgEBBgorBgEEAYRZCgMBMDEw
  203. # DQYJYIZIAWUDBAIBBQAEIFXs+vv5+Q173zGvoi0+n0mjbbIQeo+KKL//DXvPr0gT
  204. # AgZVW05VMbkYEzIwMTUwNTI3MDE0OTUxLjA5N1owBwIBAYACAfSggbmkgbYwgbMx
  205. # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
  206. # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1P
  207. # UFIxJzAlBgNVBAsTHm5DaXBoZXIgRFNFIEVTTjpGNTI4LTM3NzctOEE3NjElMCMG
  208. # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCDtAwggZxMIIEWaAD
  209. # AgECAgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzET
  210. # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
  211. # TWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBD
  212. # ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3
  213. # MDEyMTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
  214. # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
  215. # JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjANBgkq
  216. # hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcRijog7PwTl/X6f2mUa3RUENWl
  217. # CgCChfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg
  218. # iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50YWeR
  219. # X4FUsc+TTJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/Xcf
  220. # PfBXday9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajyeioKMfDaTgaRtogI
  221. # Neh4HLDpmc085y9Euqf03GS9pAHBIAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB
  222. # 5jCCAeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyKMZDzQ3t8RhvF
  223. # M2hahW1VMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
  224. # BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
  225. # MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
  226. # Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
  227. # BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
  228. # a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E
  229. # gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5t
  230. # aWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcC
  231. # AjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUA
  232. # bgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Pr
  233. # psz1Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcIK1GCRBL7uVOM
  234. # zPRgEop2zEBAQZvcXBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCv
  235. # OA8X9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8ySif9Va8v
  236. # /rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoLkSbiOewZSnFjnXshbcOco6I8+n99
  237. # lmqQeKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+Y1kl
  238. # D3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ732D8OE7cQnfXXSYIghh2rBQ
  239. # Hm+98eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30
  240. # uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp9cAvVCch98isTtoouLGp
  241. # 25ayp0Kiyc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HS
  242. # xVXjad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA12u8JJxzVs341Hgi6
  243. # 2jbb01+P3nSISRIwggTaMIIDwqADAgECAhMzAAAAU8oCK/B0cFZsAAAAAABTMA0G
  244. # CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
  245. # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
  246. # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTE1
  247. # MDMyMDE3MzIyNloXDTE2MDYyMDE3MzIyNlowgbMxCzAJBgNVBAYTAlVTMRMwEQYD
  248. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  249. # b3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxJzAlBgNVBAsTHm5DaXBo
  250. # ZXIgRFNFIEVTTjpGNTI4LTM3NzctOEE3NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRp
  251. # bWUtU3RhbXAgU2VydmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
  252. # AM54iPxu7jL0i6DtCPc+aXff2CrpQBDWGw2doNox0B4YXL7jx4/bMMNKBNrGJE4k
  253. # tuU/FnOoC4rYgVWX4R9YEI1GkxHn32gOwHSsHQI6OViRLZI25y74/uh3CTpEmPRV
  254. # +3kVDBGRuXhkwU4mGCaS+6Ph+FnvY5ax2NnjtqHIOxS7GEtjMvucBA9OjR6twB/l
  255. # wc0s6lIK/qjEGLIo0JRPuAkE25oy55RZbEtcNz0p0+64izbFpe2QPkN4ltCtRzRF
  256. # kN5oRopH3qmCb8n0P8DLxZdSA9NHzi4S6kq/xhwzCuV81N2ACXmpYpEiNFQUgwNt
  257. # l+ej7NP8nkjwl+gIGjoYNT8CAwEAAaOCARswggEXMB0GA1UdDgQWBBQ/eyp4u9cj
  258. # NRGndQ5ohPUqiAKp1TAfBgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVtVTBW
  259. # BgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
  260. # bC9wcm9kdWN0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUH
  261. # AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
  262. # L2NlcnRzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8EAjAA
  263. # MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQCEAHONgXDn
  264. # RSyPHAYbnO3615WFo65xQrSizlGqG2WVAwSrpEZvnoYMaXAqLfXVvG57F+Rp1d6g
  265. # 90g1Qzsd4f06JNMKMhYJZOch39hAVeZm5x5s2yhrOhej5b1e1sE2D7seUA6CgcJl
  266. # DJEbDePqXEbxiTKDgmTAyn4t9lxQr3LRgUFpZqO42BHDevk8SyZolzAF0k4rtA3h
  267. # 5jDSlbnR85SivAF2Rf16O3vgKShEjDxYfl1/YhxA9UTQO4nJTTxxD1LRCyg02cdc
  268. # g7aJpBTaeXyJipAiMev8rhaVdbgKpEpO0Ua3LCXwiyqYwdPHJiACJFBVr0RU4shh
  269. # e4ejpmp69LE3oYIDeTCCAmECAQEwgeOhgbmkgbYwgbMxCzAJBgNVBAYTAlVTMRMw
  270. # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
  271. # aWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxJzAlBgNVBAsTHm5D
  272. # aXBoZXIgRFNFIEVTTjpGNTI4LTM3NzctOEE3NjElMCMGA1UEAxMcTWljcm9zb2Z0
  273. # IFRpbWUtU3RhbXAgU2VydmljZaIlCgEBMAkGBSsOAwIaBQADFQDVhi+Wt0SXrds5
  274. # ZjSm4BKLexiVg6CBwjCBv6SBvDCBuTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
  275. # c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
  276. # b3Jwb3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBOVFMg
  277. # RVNOOjU3RjYtQzFFMC01NTRDMSswKQYDVQQDEyJNaWNyb3NvZnQgVGltZSBTb3Vy
  278. # Y2UgTWFzdGVyIENsb2NrMA0GCSqGSIb3DQEBBQUAAgUA2Q+MiDAiGA8yMDE1MDUy
  279. # NzAwMjEyOFoYDzIwMTUwNTI4MDAyMTI4WjB3MD0GCisGAQQBhFkKBAExLzAtMAoC
  280. # BQDZD4yIAgEAMAoCAQACAhEqAgH/MAcCAQACAhlcMAoCBQDZEN4IAgEAMDYGCisG
  281. # AQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwGgCjAIAgEAAgMW42ChCjAIAgEAAgMH
  282. # oSAwDQYJKoZIhvcNAQEFBQADggEBAHd9LbIPaTjFe6lzYAkRUnYKeGLWYFq/uhu0
  283. # w1u359Eqel/CxdESmBDtF9oI16W5kWleYlRp0mznb+buCTNM2QYRnM4ZY/X19TNT
  284. # BjhamUhTpZjmYQ8NwmaP97u4NmQqQUPT5BMuV2cX064An9mZ/dYqw9cEhP80CTcn
  285. # rcpc7yXCbRfa7sTjOyBQrIHeCXX+F4dnvuh0kKTHIB7cpoOIBDCwV8eEnBRew+3L
  286. # jbUekCoc0Yhr02cpYRr6/SGgkFrWIemYuOkGhjqYVve1mykp0yu4Q9qaUbqnwBvY
  287. # sFx1FKXNOwZZsdAvguHM0pm+OKGxkt5D0s3gmGfcBYCdq86/ccsxggL1MIIC8QIB
  288. # ATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
  289. # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
  290. # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAFPKAivwdHBW
  291. # bAAAAAAAUzANBglghkgBZQMEAgEFAKCCATIwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3
  292. # DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCDmAVqG5JpShyf01FVcYchOi7wbjTkWvjGL
  293. # 9A8CrAn1DDCB4gYLKoZIhvcNAQkQAgwxgdIwgc8wgcwwgbEEFNWGL5a3RJet2zlm
  294. # NKbgEot7GJWDMIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
  295. # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
  296. # b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC
  297. # EzMAAABTygIr8HRwVmwAAAAAAFMwFgQUtZ+dNr2pmS85u5MhY6q8T3bzK+cwDQYJ
  298. # KoZIhvcNAQELBQAEggEAm560VAcJB99g+FqBgkUeRvL7U7/bF/usF+vGpQF2Ncws
  299. # 9JIR/m2j0kfMZugBCUld5SwHFvGHS2qKHPkg1EGlXDeOc0EFmgjwjHMkkUiyNDE2
  300. # bmjDj584EDkAwJqJFkgCjJzYx+ZojxoxbtRXIdSo2gDdMN3gj6cF/5mMvCCRp+8T
  301. # xafjfk9l1nQin4zr4vcD8ckKd9oNwtavU6L4JXjan/LYp3RisrPzBOpXmt5CVZaa
  302. # r+e7lhg94omjsR0qp2BwqY0YJUHRWwkyJ5iTdFnpg3Rf/btc0Pr20xmBeBUA7E+z
  303. # cseHY9hQGzMaDi906E9db5ul/pVHp8/et/UijJItSQ==
  304. # SIG # End signature block