Install-DynaproApp.ps1
# Version 1.0.0.0 function Install-DynaproApp { <# .SYNOPSIS Expands all zip files in subfolders for this version to be able to access the AL files .DESCRIPTION Expands all zip files in subfolders for this version to be able to access the AL files .PARAMETER containerName Name of container .PARAMETER appName The name of the app .PARAMETER appRootFolder The root folder where the app is located. Default value is "$env:repos" .Parameter scope Specify Global or Tenant based on how you want to publish the package. Default is Global .Parameter base Install the Dynapro Base app .Parameter trade Install the Dynapro Trade app .Parameter dshp Install the Dynapro Shipping app .Parameter dpmf Install the Dynapro Manufacturing app .Parameter dpedi Install the Dynapro EDI app .Parameter apiV1 Install the Dynapro API app version 1 .Parameter apiV2 Install the Dynapro API app version 2 .EXAMPLE To Install Dynapro Base and Dynapro Trade Install-DynaproApp -base -trade .EXAMPLE Use full file name Install-DynaproApp -appName "Dynapro AS_Dynapro Base_1.1.0.0.app" .EXAMPLE Let the function choose the file with highest version Install-DynaproApp -appName "Dynapro AS_Dynapro Base_*.app" #> [CmdletBinding()] param( [string] $containerName = 'bcdev', [string] $appName, [string] $appRootFolder, [Parameter(Mandatory = $false)] [ValidateSet('Global', 'Tenant')] [string] $scope, [switch] $base, [switch] $trade, [switch] $dshp, [switch] $dpmf, [switch] $dpedi, [switch] $apiV1, [switch] $apiV2, [switch] $apiV2dpmf ) PROCESS { try { function Publish-DynaproAppInsideFunction { Param ( [string] $containerName, [string] $appFolderPath, [string] $appFileName, [string] $FileFilter, [Parameter(Mandatory = $false)] [ValidateSet('Global', 'Tenant')] [string] $scope ) if (!([string]::IsNullOrEmpty($scope))) { $scope = 'Tenant' } if (!([string]::IsNullOrEmpty($appFileName))) { $FileFilter = $appFileName } $appFileName = Get-ChildItem $appFolderPath -Filter $FileFilter | Sort-Object LastAccessTime -Descending | Select-Object -First 1 $FileFullPath = Join-Path $appFolderPath $appFileName try { Publish-BcContainerApp -appFile $FileFullPath -containerName $containerName -install -scope Global -skipVerification -sync -syncMode ForceSync -Verbose } catch [Exception] { "Install-DynaproApp :`n`n " + $_.Exception } } if ([string]::IsNullOrEmpty($appRootFolder)) { $appRootFolder = $env:repos } if ($base) { $appFolder = Join-Path $appRootFolder "\dbas\app\" $FileAppNameFilter = 'Dynapro AS_Dynapro Base_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($trade) { $appFolder = Join-Path $appRootFolder "\trade\app\" $FileAppNameFilter = 'Dynapro AS_Dynapro Trade_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($dshp) { $appFolder = Join-Path $appRootFolder "\dshp\app\" $FileAppNameFilter = 'Dynapro AS_Dynapro Shipping_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($dpmf) { $appFolder = Join-Path $appRootFolder "\dpmf\app\" $FileAppNameFilter = 'Dynapro AS_Dynapro Manufacturing_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($dpedi) { $appFolder = Join-Path $appRootFolder "\dpedi\app\" $FileAppNameFilter = 'Dynapro AS_Dynapro EDI_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($apiV1) { $appFolder = Join-Path $appRootFolder "\api\apiV1\" $FileAppNameFilter = 'Dynapro AS_Dynapro API V1_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($apiV2) { $appFolder = Join-Path $appRootFolder "\api\apiV2\" $FileAppNameFilter = 'Dynapro AS_Dynapro API V2_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } if ($apiV2dpmf) { $appFolder = Join-Path $appRootFolder "\api\apiV2dpmf\" $FileAppNameFilter = 'Dynapro API V2 Manufacturing_*.app' Publish-DynaproAppInsideFunction -containerName $containerName -appFolderPath $appFolder -appFileName $appName -FileFilter $FileAppNameFilter } } catch [Exception] { "Install-DynaproApp :`n`n " + $_.Exception } finally { # Clean up after Install-DynaproApp } } } Export-ModuleMember -Function Install-DynaproApp # SIG # Begin signature block # MIIx7QYJKoZIhvcNAQcCoIIx3jCCMdoCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC53ZNoYxy3O/Le # jDj7AtBeSS3CPNoDLebwhU7WukM2H6CCFrwwggNfMIICR6ADAgECAgsEAAAAAAEh # WFMIojANBgkqhkiG9w0BAQsFADBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3Qg # Q0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln # bjAeFw0wOTAzMTgxMDAwMDBaFw0yOTAzMTgxMDAwMDBaMEwxIDAeBgNVBAsTF0ds # b2JhbFNpZ24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYD # VQQDEwpHbG9iYWxTaWduMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA # zCV2kHkGeCIW9cCDtoTKKJ79BXYRxa2IcvxGAkPHsoqdBF8kyy5L4WCCRuFSqwyB # R3Bs3WTR6/Usow+CPQwrrpfXthSGEHm7OxOAd4wI4UnSamIvH176lmjfiSeVOJ8G # 1z7JyyZZDXPesMjpJg6DFcbvW4vSBGDKSaYo9mk79svIKJHlnYphVzesdBTcdOA6 # 7nIvLpz70Lu/9T0A4QYz6IIrrlOmOhZzjN1BDiA6wLSnoemyT5AuMmDpV8u5BJJo # aOU4JmB1sp93/5EU764gSfytQBVI0QIxYRleuJfvrXe3ZJp6v1/BE++bYvsNbOBU # aRapA9pu6YOTcXbGaYWCFwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T # AQH/BAUwAwEB/zAdBgNVHQ4EFgQUj/BLf6guRSSuTVD6Y5qL3uLdG7wwDQYJKoZI # hvcNAQELBQADggEBAEtA28BQqv7IDO/3llRFSbuWAAlBrLMThoYoBzPKa+Z0uboA # La6kCtP18fEPir9zZ0qDx0R7eOCvbmxvAymOMzlFw47kuVdsqvwSluxTxi3kJGy5 # lGP73FNoZ1Y+g7jPNSHDyWj+ztrCU6rMkIrp8F1GjJXdelgoGi8d3s0AN0GP7URt # 11Mol37zZwQeFdeKlrTT3kwnpEwbc3N29BeZwh96DuMtCK0KHCz/PKtVDg+Rfjbr # w1dJvuEuLXxgi8NBURMjnc73MmuUAaiZ5ywzHzo7JdKGQM47LIZ4yWEvFLru21Vv # 34TuBQlNvSjYcs7TYlBlHuuSl4Mx2bO1ykdYP18wggWiMIIEiqADAgECAhB4AxhC # RXCKQc9vAbjutKlUMA0GCSqGSIb3DQEBDAUAMEwxIDAeBgNVBAsTF0dsb2JhbFNp # Z24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpH # bG9iYWxTaWduMB4XDTIwMDcyODAwMDAwMFoXDTI5MDMxODAwMDAwMFowUzELMAkG # A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKTAnBgNVBAMTIEds # b2JhbFNpZ24gQ29kZSBTaWduaW5nIFJvb3QgUjQ1MIICIjANBgkqhkiG9w0BAQEF # AAOCAg8AMIICCgKCAgEAti3FMN166KuQPQNysDpLmRZhsuX/pWcdNxzlfuyTg6qE # 9aNDm5hFirhjV12bAIgEJen4aJJLgthLyUoD86h/ao+KYSe9oUTQ/fU/IsKjT5GN # swWyKIKRXftZiAULlwbCmPgspzMk7lA6QczwoLB7HU3SqFg4lunf+RuRu4sQLNLH # Qx2iCXShgK975jMKDFlrjrz0q1qXe3+uVfuE8ID+hEzX4rq9xHWhb71hEHREspgH # 4nSr/2jcbCY+6R/l4ASHrTDTDI0DfFW4FnBcJHggJetnZ4iruk40mGtwEd44ytS+ # ocCc4d8eAgHYO+FnQ4S2z/x0ty+Eo7+6CTc9Z2yxRVwZYatBg/WsHet3DUZHc86/ # vZWV7Z0riBD++ljop1fhs8+oWukHJZsSxJ6Acj2T3IyU3ztE5iaA/NLDA/CMDNJF # 1i7nj5ie5gTuQm5nfkIWcWLnBPlgxmShtpyBIU4rxm1olIbGmXRzZzF6kfLUjHlu # fKa7fkZvTcWFEivPmiJECKiFN84HYVcGFxIkwMQxc6GYNVdHfhA6RdktpFGQmKmg # BzfEZRqqHGsWd/enl+w/GTCZbzH76kCy59LE+snQ8FB2dFn6jW0XMr746X4D9OeH # dZrUSpEshQMTAitCgPKJajbPyEygzp74y42tFqfT3tWbGKfGkjrxgmPxLg4kZN8C # AwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD # AzAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQfAL9GgAr8eDm3pbRD2VZQu86W # OzAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpjmove4t0bvDB6BggrBgEFBQcBAQRu # MGwwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3Ry # MzA7BggrBgEFBQcwAoYvaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNl # cnQvcm9vdC1yMy5jcnQwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i # YWxzaWduLmNvbS9yb290LXIzLmNybDBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggr # BgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8w # DQYJKoZIhvcNAQEMBQADggEBAKz3zBWLMHmoHQsoiBkJ1xx//oa9e1ozbg1nDnti # 2eEYXLC9E10dI645UHY3qkT9XwEjWYZWTMytvGQTFDCkIKjgP+icctx+89gMI7qo # Lao89uyfhzEHZfU5p1GCdeHyL5f20eFlloNk/qEdUfu1JJv10ndpvIUsXPpYd9Gu # p7EL4tZ3u6m0NEqpbz308w2VXeb5ekWwJRcxLtv3D2jmgx+p9+XUnZiM02FLL8Mo # fnrekw60faAKbZLEtGY/fadY7qz37MMIAas4/AocqcWXsojICQIZ9lyaGvFNbDDU # swarAGBIDXirzxetkpNiIHd1bL3IMrTcTevZ38GQlim9wX8wgga/MIIEp6ADAgEC # AhEAgU5CF6Epf+1azNQX+JGtdTANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJC # RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEpMCcGA1UEAxMgR2xvYmFsU2ln # biBDb2RlIFNpZ25pbmcgUm9vdCBSNDUwHhcNMjQwNjE5MDMyNTExWhcNMzgwNzI4 # MDAwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z # YTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBHQ0MgUjQ1IENvZGVTaWduaW5nIENBIDIw # MjAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDWQk3540/GI/RsHYGm # MPdIPc/Q5Y3lICKWB0Q1XQbPDx1wYOYmVPpTI2ACqF8CAveOyW49qXgFvY71Txkk # mXzPERabH3tr0qN7aGV3q9ixLD/TcgYyXFusUGcsJU1WBjb8wWJMfX2GFpWaXVS6 # UNCwf6JEGenWbmw+E8KfEdRfNFtRaDFjCvhb0N66WV8xr4loOEA+COhTZ05jtiGO # 792NhUFVnhy8N9yVoMRxpx8bpUluCiBZfomjWBWXACVp397CalBlTlP7a6GfGB6K # Dl9UXr3gW8/yDATS3gihECb3svN6LsKOlsE/zqXa9FkojDdloTGWC46kdncVSYRm # giXnQwp3UrGZUUL/obLdnNLcGNnBhqlAHUGXYoa8qP+ix2MXBv1mejaUASCJeB+Q # 9HupUk5qT1QGKoCvnsdQQvplCuMB9LFurA6o44EZqDjIngMohqR0p0eVfnJaKnsV # ahzEaeawvkAZmcvSfVVOIpwQ4KFbw7MueovE3vFLH4woeTBFf2wTtj0s/y1Kiirs # KA8tytScmIpKbVo2LC/fusviQUoIdxiIrTVhlBLzpHLr7jaep1EnkTz3ohrM/Ifl # l+FRh2npIsyDwLcPRWwH4UNP1IxKzs9jsbWkEHr5DQwosGs0/iFoJ2/s+PomhFt1 # Qs2JJnlZnWurY3FikCUNCCDx/wIDAQABo4IBhjCCAYIwDgYDVR0PAQH/BAQDAgGG # MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0O # BBYEFNqzjcAkkKNrd9MMoFndIWdkdgt4MB8GA1UdIwQYMBaAFB8Av0aACvx4Obel # tEPZVlC7zpY7MIGTBggrBgEFBQcBAQSBhjCBgzA5BggrBgEFBQcwAYYtaHR0cDov # L29jc3AuZ2xvYmFsc2lnbi5jb20vY29kZXNpZ25pbmdyb290cjQ1MEYGCCsGAQUF # BzAChjpodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9jb2Rlc2ln # bmluZ3Jvb3RyNDUuY3J0MEEGA1UdHwQ6MDgwNqA0oDKGMGh0dHA6Ly9jcmwuZ2xv # YmFsc2lnbi5jb20vY29kZXNpZ25pbmdyb290cjQ1LmNybDAuBgNVHSAEJzAlMAgG # BmeBDAEEATALBgkrBgEEAaAyATIwDAYKKwYBBAGgMgoEAjANBgkqhkiG9w0BAQsF # AAOCAgEAMhDkvBelgxBAndOp/SfPRXKpxR9LM1lvLDIxeXGE1jZn1at0/NTyBjpu # tdbL8UKDlr193pUsGu1q40EcpsiJMcJZbIm8KiMDWVBHSf1vUw4qKMxIVO/zIxhb # kjZOvKNj1MP7AA+A0SDCyuWWuvCaW6qkJXoZ2/rbe1NP+baj2WPVdV8BpSjbthgp # FGV5nNu064iYFFNQYDEMZrNR427JKSZk8BTRc3jEhI0+FKWSWat5QUbqNM+BdkY6 # kXgZc77+BvXXwYQ5oHBMCjUAXtgqMCQfMne24Xzfs0ZB4fptjePjC58vQNmlOg1k # yb6M0RrJZSA64gD6TnohN0FwmZ1QH5l7dZB0c01FpU5Yf912apBYiWaTZKP+VPdN # quvlIO5114iyHQw8vKGSoFbkR/xnD+p4Kd+Po8fZ4zF4pwsplGscJ10hJ4fio+/I # QJAuXBcoJdMBRBergNp8lKhbI/wgnpuRoZD/sw3lckQsRxXz1JFyJvnyBeMBZ/dp # td4Ftv4okIx/oSk7tyzaZCJplsT001cNKoXGu2horIvxUktkbqq4t+xNFBz6qBQ4 # zuwl6+Ri3TX5uHsHXRtDZwIIaz2/JSODgZZzB+7+WFo8N9qg21/SnDpGkpzEJhwJ # MNol5A4dkHPUHodOaYSBkc1lfuc1+oOAatM0HUaneAimeDIlZnowggbsMIIE1KAD # AgECAgw2nw7cp6+OSBEHtLQwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCQkUx # GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNVBAMTJkdsb2JhbFNpZ24g # R0NDIFI0NSBDb2RlU2lnbmluZyBDQSAyMDIwMB4XDTI0MDgyNzEzNDcyOVoXDTI3 # MDgyODEzNDcyOVowWjELMAkGA1UEBhMCTk8xETAPBgNVBAgTCEFrZXJzaHVzMQ4w # DAYDVQQHEwVBc2tlcjETMBEGA1UEChMKRFlOQVBSTyBBUzETMBEGA1UEAxMKRFlO # QVBSTyBBUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKoaZQGUHy7H # bm2tnE2xVpmHgZTH9MOW+8hR1J74U1/g89Av+fjRijGi+H9pwJd1fuPkoZRrCTrI # yGai6d7HJHciyPZEqWbc2uhDTOM7tY938fZVUSdLHw///Chq6c6xp1K+AvbKwfCt # sOQXjnSEb/Hncx+hGJYyoLgMmJ6/hPSwsXfkIRf0+gg2r1Z/y1ulasXVjog/GSv7 # TrvmfK+9o5DTD/Wd4TdLNV+nQmDEcYHPHODYXnYVlCJ7F3BMDcluzcwC2kL6udnQ # hybp5cN5JGmuwtGackrI+rb6HP0bQ63tZm7+z5DWv92QXidEaTH8zogwRc9yAirG # AdUzIEk6PPx/+ZdR7+EVa3vQLHjH4owtjjCyONt6JKyJ3mpiY48RkJ/xyQDw9vNu # hMx0I+4kER0/qOU0BN0KkdErQvox8kU20mGFoKZdNFBz0YNlhbaiQAwxv/HWNYXC # EynPdRX4q4NAfpsM3yJIRyEgAf5vTRMVONPmRtosY2l7v3lCRbJ+IRlz0zmV4hSw # Wa+0O+5EyapmcsPCy90ia9hNPTiLziniViN0qSCtAbFFUROpipKGN+IMQA7RJ6UL # TEfFcphPELxaSruxN3EHxTeu59TafVdRucrIyFjvdwyTThqe+/SJC7cxzZPrJWUD # IVHksJpDKBm1OUAOzv2SGTa37twSHGrHAgMBAAGjggGxMIIBrTAOBgNVHQ8BAf8E # BAMCB4AwgZsGCCsGAQUFBwEBBIGOMIGLMEoGCCsGAQUFBzAChj5odHRwOi8vc2Vj # dXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc2djY3I0NWNvZGVzaWduY2EyMDIw # LmNydDA9BggrBgEFBQcwAYYxaHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vZ3Nn # Y2NyNDVjb2Rlc2lnbmNhMjAyMDBWBgNVHSAETzBNMEEGCSsGAQQBoDIBMjA0MDIG # CCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5 # LzAIBgZngQwBBAEwCQYDVR0TBAIwADBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8v # Y3JsLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjQ1Y29kZXNpZ25jYTIwMjAuY3JsMBMG # A1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaAFNqzjcAkkKNrd9MMoFndIWdk # dgt4MB0GA1UdDgQWBBTZQpJHpM67VSenVd2tOVfaZsvwZDANBgkqhkiG9w0BAQsF # AAOCAgEAYPMNPx2sFGEHEOUnPkR0gHNXTb32ClH2wa5w5Mo2L0SWeYwfIiP3kC/C # P1riV9c8IWit5plVsqsivR3FybBSvX7Jz4xrTSPZmAXimbecgrxYaKxG/lNESB2q # 8mngyjdJVq2HUJLlhlZFi/aewJkwsRb3cLPn85NTW8tu5QnF2ftFlbeiBLtIzy7d # cnQbdjq1y8teL6jV1388IcVZATdg5KkKECyqqwKMNvuv94xjT0Dk85ib+3poMDVB # YrnsPEhv7QetogYA4QStrgH+M2FBlRO4vRnKz/j/HSHPxqzWvA3Ev6LdJOrZfof6 # jGALFcPlkbdzaBUYPSRa8hLEZElMU6cMihiREfsAwCNbWWx6Fousjj5Nz8rNLnvx # rrdE28LCYOO1FSSSKSroT+McsI6rMJx07dGwKOSqLda0nsE912Fogkc0PLLtzfWR # WLWF7+m5clPZgZEFrkq+91tDNf6GPCy5ea7ay97cBvrjjMz8aZZYNh6zVN/aegSz # Cxrd/FRpGROPteaKmUvr8cqbkhp2BIgIMMt6gjKpDrA4xb5wTCZdNwAzBusaci9P # OdVo7U6iHJibW+zX5BzI6axfNPUbB4aIHC8YtaKbFuIVO9IRqhRs2tqAMuwy1JR2 # lp7BViciCUbSiPsQMDoXwMSd6cWjYVjhh1TtzGgdxiyB78o9smcxghqHMIIagwIB # ATBpMFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8w # LQYDVQQDEyZHbG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcgQ0EgMjAyMAIM # Np8O3KevjkgRB7S0MA0GCWCGSAFlAwQCAQUAoIGSMBkGCSqGSIb3DQEJAzEMBgor # BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCYGCisGAQQB # gjcCAQwxGDAWoAKAAKEQgA53d3cuZHluYXByby5ubzAvBgkqhkiG9w0BCQQxIgQg # KM7mmoYBCY9aoWWdF2ye18A8a4otQNv2Gc+doQiaC60wDQYJKoZIhvcNAQEBBQAE # ggIAf6cmcRw+RPJjKZ7W1ARg/EQIk4ooZeLc5frBdoOYMClA0JmOaQMNLo1XYvXz # lFkDSB5U/i7EOHpm8YlFS3JqzYxbVaLTID/nZ+utepDl78cdBQ/7dSXptA5Elo7n # tIGquVHJAbJx59cXug5+AhbcG0etC7ceKjN0YyO3uZWUVpN7pfKbqj1w5acmATMy # fSyqXjBEY60nfrnvNLtudEn1eiHDYAqljSV0tUElbG1nYoplIzx8uTB28X7w2ajp # Pm+oyK86Hhj+/dD9U+82FAcqNmT8turgv+VBeoQ/gOJxOTUg9WZL7Mb5vYz5dj5T # vLFrcimTTDPQtdh5lfpyeYiIS0VAY9OA+DE9urQcunPGdu1zIAaDpMmhGhBtCslZ # NLDg5IVxW9vFf9OYTh/JdzOpZp7LWaJQZe1opfEPulQkfI+dUyJ+dDfFfsEWRrk9 # mpvX+G9qVi4ydUmVQNR6ER35jAw2TjXN5UBhBiiN6kaoSqwOXNEx6AwM9n+Gtp0U # +Oh9aarYfNO9TMUIPDlfo31eg3o2dMIQQNlKSDBLzEnABSLk1YyLaR1AR+OY44pU # UY0Rcrm87LxxJvDT4Nagd1XxFX2PAprKTSqXANWI1xCZaQp5TLodvx/RAJRk0bMI # w2ZvhCU8SFr9747z8DkOg60tXRNICcsrEszbpYpwc0Q+qtKhghdaMIIXVgYKKwYB # BAGCNwMDATGCF0YwghdCBgkqhkiG9w0BBwKgghczMIIXLwIBAzEPMA0GCWCGSAFl # AwQCAgUAMIGHBgsqhkiG9w0BCRABBKB4BHYwdAIBAQYJYIZIAYb9bAcBMEEwDQYJ # YIZIAWUDBAICBQAEMIpS3E8B8Os/5EjsvESTlF+vJ2USIz5FvTMHM/NJZDblGRBU # qmu7fbP1mDg1e5xDQAIQNmmJ1vzaQNaKvrT2kiPqOhgPMjAyNTAxMDIxMTE0MTla # oIITAzCCBrwwggSkoAMCAQICEAuuZrxaun+Vh8b56QTjMwQwDQYJKoZIhvcNAQEL # BQAwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYD # VQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFt # cGluZyBDQTAeFw0yNDA5MjYwMDAwMDBaFw0zNTExMjUyMzU5NTlaMEIxCzAJBgNV # BAYTAlVTMREwDwYDVQQKEwhEaWdpQ2VydDEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt # ZXN0YW1wIDIwMjQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+anOf # 9pUhq5Ywultt5lmjtej9kR8YxIg7apnjpcH9CjAgQxK+CMR0Rne/i+utMeV5bUlY # YSuuM4vQngvQepVHVzNLO9RDnEXvPghCaft0djvKKO+hDu6ObS7rJcXa/UKvNmin # KQPTv/1+kBPgHGlP28mgmoCw/xi6FG9+Un1h4eN6zh926SxMe6We2r1Z6VFZj75M # U/HNmtsgtFjKfITLutLWUdAoWle+jYZ49+wxGE1/UXjWfISDmHuI5e/6+NfQrxGF # SKx+rDdNMsePW6FLrphfYtk/FLihp/feun0eV+pIF496OVh4R1TvjQYpAztJpVIf # dNsEvxHofBf1BWkadc+Up0Th8EifkEEWdX4rA/FE1Q0rqViTbLVZIqi6viEk3RIy # Sho1XyHLIAOJfXG5PEppc3XYeBH7xa6VTZ3rOHNeiYnY+V4j1XbJ+Z9dI8ZhqcaD # HOoj5KGg4YuiYx3eYm33aebsyF6eD9MF5IDbPgjvwmnAalNEeJPvIeoGJXaeBQjI # K13SlnzODdLtuThALhGtyconcVuPI8AaiCaiJnfdzUcb3dWnqUnjXkRFwLtsVAxF # vGqsxUA2Jq/WTjbnNjIUzIs3ITVC6VBKAOlb2u29Vwgfta8b2ypi6n2PzP0nVeps # Fk8nlcuWfyZLzBaZ0MucEdeBiXL+nUOGhCjl+QIDAQABo4IBizCCAYcwDgYDVR0P # AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw # IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW # 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSfVywDdw4oFZBmpWNe7k+SH3ag # WzBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln # aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ # BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl # cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v # RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 # MA0GCSqGSIb3DQEBCwUAA4ICAQA9rR4fdplb4ziEEkfZQ5H2EdubTggd0ShPz9Pc # e4FLJl6reNKLkZd5Y/vEIqFWKt4oKcKz7wZmXa5VgW9B76k9NJxUl4JlKwyjUkKh # k3aYx7D8vi2mpU1tKlY71AYXB8wTLrQeh83pXnWwwsxc1Mt+FWqz57yFq6laICtK # jPICYYf/qgxACHTvypGHrC8k1TqCeHk6u4I/VBQC9VK7iSpU5wlWjNlHlFFv/M93 # 748YTeoXU/fFa9hWJQkuzG2+B7+bMDvmgF8VlJt1qQcl7YFUMYgZU1WM6nyw23vT # 6QSgwX5Pq2m0xQ2V6FJHu8z4LXe/371k5QrN9FQBhLLISZi2yemW0P8ZZfx4zvSW # zVXpAb9k4Hpvpi6bUe8iK6WonUSV6yPlMwerwJZP/Gtbu3CKldMnn+LmmRTkTXpF # IEB06nXZrDwhCGED+8RsWQSIXZpuG4WLFQOhtloDRWGoCwwc6ZpPddOFkM2LlTbM # cqFSzm4cd0boGhBq7vkqI1uHRz6Fq1IX7TaRQuR+0BGOzISkcqwXu7nMpFu3mgrl # gbAW+BzikRVQ3K2YHcGkiKjA4gi4OA/kz1YCsdhIBHXqBzR0/Zd2QwQ/l4Gxftt/ # 8wY3grcc/nS//TVkej9nmUYu83BDtccHHXKibMs/yXHhDXNkoPIdynhVAku7aRZO # wqw6pDCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL # BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE # CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS # b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE # BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy # dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw # DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep # l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt # +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r # 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh # gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA # csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH # IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS # lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 # z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y # 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID # fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT # drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G # A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd # ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH # AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp # Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv # bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 # dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js # MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF # AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN # qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V # c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods # kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk # HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H # hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN # T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z # OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX # mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ # E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF # D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD # AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT # AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy # dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y # MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD # VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf # BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB # BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn # PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f # qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O # 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ # Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F # fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm # qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre # Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch # srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U # DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM # dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb # AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd # ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO # BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw # Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f # BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz # dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM # BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt # pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy # XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS # TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc # AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 # h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggOGMIIDggIBATB3MGMxCzAJBgNVBAYT # AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg # VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAuuZrxa # un+Vh8b56QTjMwQwDQYJYIZIAWUDBAICBQCggeEwGgYJKoZIhvcNAQkDMQ0GCyqG # SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNTAxMDIxMTE0MTlaMCsGCyqGSIb3 # DQEJEAIMMRwwGjAYMBYEFNvThe5i29I+e+T2cUhQhyTVhltFMDcGCyqGSIb3DQEJ # EAIvMSgwJjAkMCIEIHZ2n6jyYy8fQws6IzCu1lZ1/tdz2wXWZbkFk5hDj5rbMD8G # CSqGSIb3DQEJBDEyBDDO3p+YImIhdZcqQdqJt83wgJn/mN+BN7R8kLewNhw3nzyL # VlC7qsFvZeYpbhVpxsAwDQYJKoZIhvcNAQEBBQAEggIAoViI9HBK8vu0mEfSvOcO # Dhq/neiHJV1sJQCh8bJdhDHy9YG6OHfJ4g/cPK8HAtSl//5nrdW5+AJ5M1LQES4t # OPVPCzIMD38EmuqYlZqrOe3LXvb9lky89Zpb22au22bsqMfrEIwL0ltqfv8EhkMe # nBn8WPa6g0gtOhJ6F28G2rj/kNgCfp5K1EPTWUs8VkIuztqxc1v9c3jG3JJ7yh+m # 7TMAgnId1PxR1etNYbuFHCA/jmnbUR1SEidvsodil9REtslXYZKk5nU3Ww/NNqJ0 # xxD0CIY25LzkGa5PkjlFTQyNorfYS41NOTmAOph+REbUbaYaR6dkYZlrQysuK6sK # mb1k7gzS4M6oA/fRjAa6ZmIxTCRJkUi8yAe3h71NzfNIWcqKdkOtijRKIRwIhjCy # CqJbOHF9bsmHTgFvuIcz9j5odwofoGby+wisWq96HcphX1DetLvRFWUWcpL3Jq7E # 2n7M7KAxzA4AqXb6Xzyahsi7WOI6NyP4or1cOILyYtkFrSOrDcpqp3y8zU24c0pM # Ui+dkYg+3NeCQA7mMs72y7AABRC7Jo8ZF+ORDvjS4HBCG9m6ELkkwWFshiaF+sKA # tQv6S3PAfyLDyQV0+WeEefeiEGjL60fL/TMeEzMN5g3NPpSr7HDe7C8lyOvyh4kA # egVjmonMTIL4S+ebYrnSiu4= # SIG # End signature block |