diff --git a/CMPivot/CMPivot.msi b/CMPivot/CMPivot.msi
new file mode 100644
index 0000000..f115327
Binary files /dev/null and b/CMPivot/CMPivot.msi differ
diff --git a/CMTrace.exe b/CMTrace.exe
new file mode 100644
index 0000000..d0abb2b
Binary files /dev/null and b/CMTrace.exe differ
diff --git a/CMUpdateReset/CMUpdateReset.exe b/CMUpdateReset/CMUpdateReset.exe
new file mode 100644
index 0000000..f932f71
Binary files /dev/null and b/CMUpdateReset/CMUpdateReset.exe differ
diff --git a/ClientTools/CliSpy.exe b/ClientTools/CliSpy.exe
new file mode 100644
index 0000000..11e9a38
Binary files /dev/null and b/ClientTools/CliSpy.exe differ
diff --git a/ClientTools/DeploymentMonitoringTool.exe b/ClientTools/DeploymentMonitoringTool.exe
new file mode 100644
index 0000000..0f22859
Binary files /dev/null and b/ClientTools/DeploymentMonitoringTool.exe differ
diff --git a/ClientTools/Microsoft.Diagnostics.Tracing.EventSource.dll b/ClientTools/Microsoft.Diagnostics.Tracing.EventSource.dll
new file mode 100644
index 0000000..c390180
Binary files /dev/null and b/ClientTools/Microsoft.Diagnostics.Tracing.EventSource.dll differ
diff --git a/ClientTools/PolicySpy.exe b/ClientTools/PolicySpy.exe
new file mode 100644
index 0000000..f2018dd
Binary files /dev/null and b/ClientTools/PolicySpy.exe differ
diff --git a/ClientTools/PowerVwr.exe b/ClientTools/PowerVwr.exe
new file mode 100644
index 0000000..9a305d9
Binary files /dev/null and b/ClientTools/PowerVwr.exe differ
diff --git a/ClientTools/SendSchedule.exe b/ClientTools/SendSchedule.exe
new file mode 100644
index 0000000..c9e9d3e
Binary files /dev/null and b/ClientTools/SendSchedule.exe differ
diff --git a/ClientTools/SendScheduleMessages.xml b/ClientTools/SendScheduleMessages.xml
new file mode 100644
index 0000000..a34a7fa
--- /dev/null
+++ b/ClientTools/SendScheduleMessages.xml
@@ -0,0 +1,298 @@
+
+
+
+
+
+ HARDWARE_INV_ACTION_ID
+ Hardware Inventory
+
+
+
+
+ SOFTWARE_INV_ACTION_ID
+ Software Inventory
+
+
+
+
+ DISCOVERY_INV_ACTION_ID
+ Discovery Inventory
+
+
+
+
+ FILE_COLLECTION_ACTION_ID
+ File Collection
+
+
+
+
+ IDMIF_COLLECTION_ACTION_ID
+ IDMIF Collection
+
+
+
+
+ CLIENT_MACHINE_AUTH_ACTION_ID
+ Client Machine Authentication
+
+
+
+
+ POLICYAGENT_REQUEST_MACHINE_ASSIGNMENTS_ID
+ Request Machine Assignments
+
+
+
+
+ POLICYAGENT_EVALUATE_MACHINE_POLICIES_ID
+ Evaluate Machine Policies
+
+
+
+
+ LS_SCHEDULEDCLEANUP_REFRESH_DEFAULT_MP_TASK_ID
+ Refresh Default MP Task
+
+
+
+
+ LS_SCHEDULEDCLEANUP_REFRESH_LOCATIONS_TASK_ID
+ LS (Location Service) Refresh Locations Task
+
+
+
+
+ LS_SCHEDULEDCLEANUP_TIMEOUT_REFRESH_TASK_ID
+ LS (Location Service) Timeout Refresh Task
+
+
+
+
+ POLICYAGENT_REQUEST_USER_ASSIGNMENTS_ID
+ Policy Agent Request Assignment (User)
+
+
+
+
+ POLICYAGENT_EVALUATE_USER_POLICIES_ID
+ Policy Agent Evaluate Assignment (User)
+
+
+
+
+ SWMTR_USER_REPORT_GENERATION_ID
+ Software Metering Generating Usage Report
+
+
+
+
+ SOURCE_UPDATE_MESSAGE_ID
+ Source Update Message
+
+
+
+
+ Schedule for clearing proxy settings cache
+ Clearing proxy settings cache
+
+
+
+
+ [Machine Policy schedules] PolicyAgent_Cleanup
+ Machine Policy Agent Cleanup
+
+
+
+
+ [User Policy schedules] PolicyAgent_Cleanup
+ User Policy Agent Cleanup
+
+
+
+
+ [Machine Policy schedules] PolicyAgent_RequestAssignments
+ Policy Agent Validate Machine Policy / Assignment
+
+
+
+
+ [User Policy schedules] PolicyAgent_RequestAssignments
+ Policy Agent Validate User Policy / Assignment
+
+
+
+
+ Schedule for retrying/refreshing certificates in AD on MP
+ Retrying/Refreshing certificates in AD on MP
+
+
+
+
+ PDP_STATUS_REPORTING_SCHEDULE_ID
+ Peer DP Status reporting
+
+
+
+
+ PDP_PENDING_PACKAGE_CHECK_SCHEDULE_ID
+ Peer DP Pending package check schedule
+
+
+
+
+ SUM_UPDATES_INSTALL_SCHEDULE_ID
+ SUM Updates install schedule
+
+
+
+
+ NAP_ACTION_ID
+ NAP action
+
+
+
+
+ HARDWARE_INV_POLICY_ACTION_ID
+ Hardware Inventory Collection Cycle
+
+
+
+
+ SOFTWARE_INV_POLICY_ACTION_ID
+ Software Inventory Collection Cycle
+
+
+
+
+ DISCOVERY_INV_POLICY_ACTION_ID
+ Discovery Data Collection Cycle
+
+
+
+
+ FILE_COLLECTION_POLICY_ACTION_ID
+ File Collection Cycle
+
+
+
+
+ IDMIF_COLLECTION_POLICY_ACTION_ID
+ IDMIF Collection Cycle
+
+
+
+
+ METRING_POLICY_ACTION_ID
+ Software Metering Usage Report Cycle
+
+
+
+
+ SOURCE_UPDATE_POLICY_ACTION_ID
+ Windows Installer Source List Update Cycle
+
+
+
+
+ SOFTWARE_UPDATES_POLICY_ACTION_ID
+ Software Updates Assignments Evaluation Cycle
+
+
+
+
+ PDP_MAINTENANCE_POLICY_ACTION_ID
+ Branch Distribution Point Maintenance Task
+
+
+
+
+ DCM_POLICY_ACTION_ID
+ DCM policy
+
+
+
+
+ STATE_SYSTEM_POLICY_BULKSEND_ACTION_ID
+ Send Unsent State Message
+
+
+
+
+ STATE_SYSTEM_POLICY_CACHECLEANOUT_ACTION_ID
+ State System policy cache cleanout
+
+
+
+
+ UPDATE_SOURCE_POLICY_ACTION_ID
+ Scan by Update Source
+
+
+
+
+ UPDATE_STORE_POLICY_ACTION_ID
+ Update Store Policy
+
+
+
+
+ STATE_SYSTEM_POLICY_BULKSEND_HIGH_ACTION_ID
+ State system policy bulk send high
+
+
+
+
+ STATE_SYSTEM_POLICY_BULKSEND_LOW_ACTION_ID
+ State system policy bulk send low
+
+
+
+
+ AMT_STATUS_CHECK_POLICY_ACTION_ID
+ AMT Status Check Policy
+
+
+
+
+ APPMAN_POLICY_ACTION_ID
+ Application manager policy action
+
+
+
+
+ APPMAN_USER_POLICY_ACTION_ID
+ Application manager user policy action
+
+
+
+
+ APPMAN_GLOBAL_EVALUATION_ACTION_ID
+ Application manager global evaluation action
+
+
+
+
+ PWRMGMT_START_SUMMARIZER_ID
+ Power management start summarizer
+
+
+
+
+ EP_DEPLOYMENT_REEVALUATE_ID
+ Endpoint deployment reevaluate
+
+
+
+
+ EP_AMPOLICY_REEVALUATE_ID
+ Endpoint AM policy reevaluate
+
+
+
+
+ EXTERNAL_EVENT_DETECTION_ID
+ External event detection
+
+
+
\ No newline at end of file
diff --git a/ConfigMgrADMTemplates/ConfigMgrAssignment.adm b/ConfigMgrADMTemplates/ConfigMgrAssignment.adm
new file mode 100644
index 0000000..320b909
Binary files /dev/null and b/ConfigMgrADMTemplates/ConfigMgrAssignment.adm differ
diff --git a/ConfigMgrADMTemplates/ConfigMgrInstallation.adm b/ConfigMgrADMTemplates/ConfigMgrInstallation.adm
new file mode 100644
index 0000000..9dc41c2
Binary files /dev/null and b/ConfigMgrADMTemplates/ConfigMgrInstallation.adm differ
diff --git a/ContentLibraryCleanup/ContentLibraryCleanup.exe b/ContentLibraryCleanup/ContentLibraryCleanup.exe
new file mode 100644
index 0000000..543aaa2
Binary files /dev/null and b/ContentLibraryCleanup/ContentLibraryCleanup.exe differ
diff --git a/DesktopAnalyticsLogsCollector/DesktopAnalyticsLogsCollector.ps1 b/DesktopAnalyticsLogsCollector/DesktopAnalyticsLogsCollector.ps1
new file mode 100644
index 0000000..ddc9955
--- /dev/null
+++ b/DesktopAnalyticsLogsCollector/DesktopAnalyticsLogsCollector.ps1
@@ -0,0 +1,1258 @@
+<# M365 Analytics Log Collector #>
+#Requires -RunAsAdministrator
+#----------------------------------------------------------------------------------------------------------
+#
+# Parameter Declarations
+#
+#----------------------------------------------------------------------------------------------------------
+
+Param(
+# File share to store logs, the maximum length is 130 since the script would create sub folders and files
+[Parameter(Position=1)]
+[string]$LogPath,
+
+# LogMode == 0 log to console only
+# LogMode == 1 log to file and console
+# LogMode == 2 log to file only
+[Parameter(Position=2)]
+[Int16]$LogMode = 1,
+
+# CollectNetTrace == 0 to disable collect Net Trace, otherwise enable collect Net Trace.
+[Parameter(Position=3)]
+[Int16]$CollectNetTrace = 0,
+
+# CollectUTCTrace == 0 to disable collect UTC Trace, otherwise enable collect UTC Trace.
+[Parameter(Position=4)]
+[Int16]$CollectUTCTrace = 0
+)
+
+#----------------------------------------------------------------------------------------------------------
+#
+# Startup
+#
+#----------------------------------------------------------------------------------------------------------
+
+# Make sure we are running x64 PS on 64-bit OS. If not then start a x64 process of PowerShell
+$powerShellHome = $PSHOME.ToLower()
+if ([System.Environment]::Is64BitOperatingSystem -eq $true)
+{
+ if ([System.Environment]::Is64BitProcess -eq $false)
+ {
+ Write-Verbose "Launching x64 PowerShell"
+ $powerShellHome = $powerShellHome.Replace('syswow64','sysnative')
+ &"$powerShellHome\powershell.exe" -ExecutionPolicy AllSigned -NonInteractive -NoProfile $myInvocation.Line
+ exit $lastexistcode
+ }
+}
+
+#----------------------------------------------------------------------------------------------------------
+#
+# Parameter Intialization and Validation
+#
+#----------------------------------------------------------------------------------------------------------
+
+# Parameter: $LogPath
+if([String]::IsNullOrEmpty($LogPath) -or [String]::IsNullOrWhiteSpace($LogPath))
+{
+ # Set to default value
+ $LogPath = "$Env:SystemDrive\M365AnalyticsLogs"
+}
+else
+{
+ Write-Verbose "Validating path length no more than 130: $LogPath"
+ $LogPath = $LogPath.Trim().TrimEnd('\')
+ if($LogPath.Length -gt 130)
+ {
+ throw "Failed to validate the length of the given path: $LogPath"
+ }
+
+ # Validate parameter: $LogPath
+ Write-Verbose "Validating path format: $LogPath"
+ $validateResult = $false
+
+ if((Test-Path $LogPath -IsValid) -eq $true)
+ {
+ $testSplitArray = $LogPath.Split(':')
+
+ if($testSplitArray.Count -eq 1)
+ {
+ $validateResult = $true
+ }
+ elseif($testSplitArray.Count -eq 2)
+ {
+ $targetDrv = Get-PSDrive -Name $testSplitArray[0]
+
+ if($targetDrv -ne $null)
+ {
+ $fileDrv = Get-PSProvider -PSProvider FileSystem
+
+ if($fileDrv -ne $null)
+ {
+ if($fileDrv.Drives.Contains($targetDrv) -eq $true)
+ {
+ $validateResult = $true
+ }
+ }
+ }
+ }
+ }
+
+ if($validateResult -eq $false)
+ {
+ throw "Failed to validate the format of the given path: $LogPath"
+ }
+}
+
+Write-Verbose "Output Path = $LogPath"
+
+# Parameter: $LogMode
+Write-Verbose "Validating log mode(0|1|2): $LogMode"
+
+if(($LogMode -ne 0) -and ($LogMode -ne 1) -and ($LogMode -ne 2))
+{
+ throw "Failed to validate the given log mode: $LogMode"
+}
+
+Write-Verbose "Log Mode = $LogMode"
+
+# Parameter: $CollectNetTrace
+if($CollectNetTrace -eq 0)
+{
+ Write-Verbose "Collect Net Trace = No"
+}
+else
+{
+ Write-Verbose "Collect Net Trace = Yes"
+}
+
+# Parameter: $CollectUTCTrace
+if($CollectUTCTrace -eq 0)
+{
+ Write-Verbose "Collect UTC Trace = No"
+}
+else
+{
+ Write-Verbose "Collect UTC Trace = Yes"
+}
+
+
+#----------------------------------------------------------------------------------------------------------
+#
+# Global Variables
+#
+#----------------------------------------------------------------------------------------------------------
+
+# Temporary file to store providers
+$global:tempProviderFile = [System.IO.Path]::GetTempFileName()
+
+# Providers info
+$global:providersText = @"
+{43ac453b-97cd-4b51-4376-db7c9bb963ac} 0 255
+{56DC463B-97E8-4B59-E836-AB7C9BB96301} 0 255
+"@
+
+# Script folder root
+$global:scriptRoot = Split-Path -Path $MyInvocation.MyCommand.Path
+
+# Set the exit code to the first exception exit code
+$global:errorCode = [string]::Empty;
+
+# Total error count while running the script
+[int]$global:errorCount = 0;
+
+# OS version
+$global:osVersion = (Get-WmiObject Win32_OperatingSystem).Version
+
+# OS name
+$global:operatingSystemName = (Get-WmiObject Win32_OperatingSystem).Name
+
+# OS Architecture
+$global:osArchitecture = $ENV:Processor_Architecture
+
+# Global utc trace name
+$global:timeStart=Get-Date
+$global:timeStartString=$global:timeStart.ToString("yy_MM_dd_HH_mm_ss")
+$global:utcTraceName = "utctrace" + $global:timeStartString
+
+#----------------------------------------------------------------------------------------------------------------
+#
+# Main
+#
+#----------------------------------------------------------------------------------------------------------------
+
+$main = {
+ Try
+ {
+ # Initialize provider file
+ InitializeProviderFile
+
+ # Quit if System variable WINDIR is not set
+ Try
+ {
+ $global:windir=[System.Environment]::ExpandEnvironmentVariables("%WINDIR%")
+ }
+ Catch
+ {
+ $exceptionDetails = "Exception: " + $_.Exception.Message + "HResult: " + $_.Exception.HResult
+ Write-Error "Failure finding system variable WINDIR. $exceptionDetails Error 23"
+ [System.Environment]::Exit(23)
+ }
+
+ # Get Sqm Machine Id
+ Get-SqmID
+
+ # Get ConfigMgr Client Version
+ Get-CmClientVersion
+
+ # Create the log file if logMode requires logging to file.
+ CreateLogFile
+
+ Log "Starting M365AnalyticsLogsCollector"
+ Log "UTC DateTime: $global:utcDate"
+ Log "OS: $global:osVersion"
+ Log "Architecture: $global:osArchitecture"
+ Log "Machine Sqm Id: $global:sClientId"
+ Log "Configuration Manager Client Version: $global:smsClientVersion"
+
+ # Sets VerboseMode to enable appraiser logging value to the registry
+ SetAppraiserVerboseMode
+
+ # Sets RequestAllAppraiserVersions key
+ if($global:osBuildNumber -lt 10240)
+ {
+ SetRequestAllAppraiserVersions
+ }
+
+ if($CollectNetTrace -ne 0)
+ {
+ # Start Netsh trace
+ StartNetworkTrace
+ }
+
+ if($CollectUTCTrace -ne 0)
+ {
+ #Start UTC trace
+ StartUTCTrace
+ }
+
+ # restart Diagtrack service
+ RestartDiagtrack
+
+ # Run Connectivity Tool
+ RunConnectivityDiagnosis
+
+ # Run Census
+ RunCensus
+
+ if($CollectNetTrace -ne 0)
+ {
+ # Stop Netsh trace
+ StopNetworkTrace
+ }
+
+ if($CollectUTCTrace -ne 0)
+ {
+ # Stop UTC trace
+ StopUTCTrace
+ }
+
+ # Run Appraiser
+ RunAppraiser
+
+ # Collect the logs
+ Try
+ {
+ Log "Running diagnose_internal to collect logs"
+ DiagnoseInternal $global:logFolder
+ }
+ Catch
+ {
+ Log "diagnose_internal failed with unexpected exception" "Error" "37" "diagnose_internal" $_.Exception.HResult $_.Exception.Message
+ }
+
+ # Collect M365AHandler logs
+ CollectM365AHandlerLog
+
+ if($global:errorCount -eq 0)
+ {
+ Log "Script finished successfully"
+ Exit(0)
+ }
+ }
+ Catch
+ {
+ Log "Unexpected error occured while executing the script" "Error" "1" "UnExpectedException" $_.Exception.HResult $_.Exception.Message
+ Log "Script failed" "Failure" "1" "ScriptEnd"
+ [System.Environment]::Exit(1)
+ }
+ Finally
+ {
+ # Disable appriaser verbose mode after running the appriaser
+ DisableAppraiserVerboseMode
+
+ # Restart Diagtrack service
+ RestartDiagtrack
+
+ # Cleanup temporary file
+ Remove-Item -Path $global:tempProviderFile
+ }
+}
+
+#----------------------------------------------------------------------------------------------------------
+#
+# Function Definitions
+#
+#----------------------------------------------------------------------------------------------------------
+
+function InitializeProviderFile
+{
+ $global:providersText | Out-File $global:tempProviderFile -Append -Encoding ascii
+}
+
+function DiagnoseInternal($diaLogPath)
+{
+ if ((test-path $diaLogPath) -eq $false)
+ {
+ New-Item -ItemType Directory -Path $diaLogPath -Force | Out-Null
+ }
+
+ Get-WmiObject -Query 'select * from win32_quickfixengineering' | sort hotfixid | Out-File "$diaLogPath\installedKBs.txt" -Force
+
+ ROBOCOPY "$env:windir\appcompat" "$diaLogPath\appcompat" *.* /E /XF *.hve* /R:1 | Out-Null
+
+ regedit /e "$diaLogPath\RegAppCompatFlags.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags"
+ regedit /e "$diaLogPath\RegCensus.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Census"
+ regedit /e "$diaLogPath\RegSQM.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient"
+ regedit /e "$diaLogPath\RegDiagTrack.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Diagnostics\DiagTrack"
+ regedit /e "$diaLogPath\RegPoliciesDataCollection.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection"
+ regedit /e "$diaLogPath\RegDataCollection.txt" "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
+}
+
+function Get-SqmID
+{
+ Try
+ {
+ $sqmID = (Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\SQMClient -Name MachineId).MachineId
+ $global:sClientId = "s:" + $sqmID.Substring(1).Replace("}", "")
+ }
+ Catch
+ {
+ $hexHresult = "{0:X}" -f $_.Exception.HResult
+ $exceptionMessage = $_.Exception.Message
+ Write-Error "Get-SqmID failed with unexpected exception.`nException: $exceptionMessage HResult: 0x$hexHresult"
+ [System.Environment]::Exit(38)
+ }
+}
+
+function Get-CmClientVersion
+{
+ try {
+ $propertyPath = "HKLM:\SOFTWARE\Microsoft\SMS\Mobile Client"
+ $propertyName = "SmsClientVersion"
+ if (Test-Path -Path $propertyPath)
+ {
+ $property = Get-ItemProperty -Path $propertyPath -Name $propertyName -ErrorAction SilentlyContinue
+ if ($null -eq $property)
+ {
+ Log "Get-CmClientVersion: Could not find registry value $propertyName at path $propertyPath" "Warning"
+ }
+ else {
+ $global:smsClientVersion = $property.SmsClientVersion
+ }
+ }
+ else
+ {
+ Log "Get-CmClientVersion: Could not find registry key $propertyPath" "Warning"
+ }
+ }
+ catch {
+ Log "Get-CmClientVersion: Error getting $propertyName registry value at path $propertyPath" "Warning" $null "Get-CmClientVersion" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function CreateLogFile
+{
+ Write-Verbose "Creating output folder"
+ $timeStart=Get-Date
+ $timeStartString=$timeStart.ToString("yy_MM_dd_HH_mm_ss")
+ $logFolderName = "M365AnalyticsLogs_" + $timeStartString
+ $global:logFolder = $logPath +"\"+$logFolderName
+
+ Try
+ {
+ $outputFolder = New-Item $global:logFolder -type directory
+ Write-Host "Output folder created successfully: $outputFolder"
+ }
+ Catch
+ {
+ $hexHresult = "{0:X}" -f $_.Exception.HResult
+ $exceptionMessage = $_.Exception.Message
+ Write-Error "Could not create output folder at the given logPath: $LogPath`nException: $exceptionMessage HResult: 0x$hexHresult"
+ [System.Environment]::Exit(28)
+ }
+
+ if($LogMode -ne 0)
+ {
+ Write-Verbose "Creating Log File"
+ $fileName = $logFolderName+".txt"
+ $global:logFile=$global:logFolder+"\"+$fileName
+
+ Try
+ {
+ New-Item $global:logFile -type file | Out-Null
+ Write-Verbose "Log File created successfully: $global:logFile"
+ }
+ Catch
+ {
+ $hexHresult = "{0:X}" -f $_.Exception.HResult
+ $exceptionMessage = $_.Exception.Message
+ Write-Error "Could not create log file at the given logPath: $LogPath`nException: $exceptionMessage HResult: 0x$hexHresult"
+ [System.Environment]::Exit(28)
+ }
+ }
+}
+
+function StartNetworkTrace
+{
+ Try
+ {
+ Log "Start: StartNetworkTrace"
+ netsh trace start capture=yes scenario=InternetClient provider=Microsoft-Windows-CAPI2 traceFile="$global:logFolder\nettrace.etl" | Out-Null
+ Log "Passed: StartNetworkTrace"
+ }
+ Catch
+ {
+ Log "StartNetworkTrace failed with an unexpected exception." "Error" "2001" "StartNetworkTrace" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function StartUTCTrace
+{
+ Try
+ {
+ Log "Start: StartUTCTrace"
+
+ $logmanFolder = $null
+ if($global:osArchitecture.contains("64"))
+ {
+ $logmanFolder = "$global:windir\system32\"
+ }
+ else
+ {
+ $logmanFolder = "$global:windir\system32\"
+ }
+
+ & logman start $global:utcTraceName -pf "$global:tempProviderFile" -bs 32768 -nb 128 -ets -o "$global:logFolder\DAUTCtrace.etl" | Out-Null
+
+ Log "Passed: StartUTCTrace"
+ }
+ Catch
+ {
+ Log "StartUTCTrace failed with an unexpected exception." "Error" "2003" "StartUTCTrace" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function StopNetworkTrace
+{
+ Try
+ {
+ Log "Start: StopNetworkTrace"
+ netsh trace stop | Out-Null
+ Log "Passed: StopNetworkTrace"
+ }
+ Catch
+ {
+ Log "StopNetworkTrace failed with an unexpected exception." "Error" "2002" "StopNetworkTrace" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function StopUTCTrace
+{
+ Try
+ {
+ Log "Start: StopUTCTrace"
+
+ $logmanFolder = $null
+ if($global:osArchitecture.contains("64"))
+ {
+ $logmanFolder = "$global:windir\system32\"
+ }
+ else
+ {
+ $logmanFolder = "$global:windir\system32\"
+ }
+
+ & logman.exe stop $global:utcTraceName -ets | Out-Null
+
+ Log "Passed: StopUTCTrace"
+ Log "Collect DownloadedSettings to log folder"
+ & takeown -f "$Env:ProgramData\Microsoft\Diagnosis\DownloadedSettings\*" | Out-Null
+ & icacls "$Env:ProgramData\Microsoft\Diagnosis\DownloadedSettings\*" /grant administrators:f | Out-Null
+ New-Item $global:logFolder\DownloadedSettings -type directory | Out-Null
+ Copy-Item "$Env:ProgramData\Microsoft\Diagnosis\DownloadedSettings\*" -Destination $global:logFolder\DownloadedSettings | Out-Null
+ }
+ Catch
+ {
+ Log "StopUTCTrace failed with an unexpected exception." "Error" "2004" "StopUTCTrace" $_.Exception.HResult $_.Exception.Message
+ }
+
+}
+
+function RestartDiagtrack
+{
+ Log "Start: RestartDiagtrack"
+ Try
+ {
+ & Net stop diagtrack | Out-Null
+ & Reg add hklm\software\microsoft\windows\currentversion\diagnostics\diagtrack\testhooks /v ResetEventStore /t REG_DWORD /d 1 /f | Out-Null
+ & Net start diagtrack | Out-Null
+ & Reg delete hklm\software\microsoft\windows\currentversion\diagnostics\diagtrack\testhooks /v ResetEventStore /f | Out-Null
+ Log "Passed: RestartDiagtrack"
+ }
+ Catch
+ {
+ Log "RestartDiagtrack failed to execute - script will continue." "Warning" $null "RestartDiagtrack" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+}
+
+function RunConnectivityDiagnosis
+{
+ Log "Start: RunConnectivityDiagnosis"
+ Try
+ {
+ $propertyPath = "HKLM:\SOFTWARE\Microsoft\CCM\Logging\@Global"
+ if(Test-Path -Path $propertyPath)
+ {
+ if ((Get-ItemProperty -Path $propertyPath -Name LogDirectory -ErrorAction SilentlyContinue) -eq $null)
+ {
+ Log "Could not find registry key LogDirectory at path HKLM:\SOFTWARE\Microsoft\CCM\Logging\@Global"
+ }
+ else
+ {
+ Try
+ {
+ $logDirectoryKeyM365 = Get-ItemProperty -Path $propertyPath -Name LogDirectory
+ $logDirectoryM365 = $logDirectoryKeyM365.LogDirectory
+ $connectivitydiagnosis = $logDirectoryM365.ToString().Replace("Logs", "settingsplugins\connectivitydiagnosis.exe")
+
+ if((Test-Path -Path $connectivitydiagnosis) -eq $False)
+ {
+ $connectivitydiagnosis = $logDirectoryM365.ToString().Replace("Logs", "connectivitydiagnosis.exe")
+ }
+
+ #Log $connectivitydiagnosis
+ #Log $logDirectoryM365
+ $currentDirectory = $global:scriptRoot
+ & cd $global:logFolder
+ & timeout 5 | Out-Null
+ & $connectivitydiagnosis -verbose > ConnectivityDiagnosis.txt
+ & timeout 5 | Out-Null
+ & cd $currentDirectory
+ Log "Passed: RunConnectivityDiagnosis"
+ }
+ Catch
+ {
+ Log "Error running RunConnectivityDiagnosis" "Warning" $null "RunConnectivityDiagnosis" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ }
+ }
+ Catch
+ {
+ Log "Error running RunConnectivityDiagnosis" "Warning" $null "RunConnectivityDiagnosis" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function SetAppraiserVerboseMode
+{
+ Log "Start: SetAppraiserVerboseMode"
+ Try
+ {
+ $vAppraiserPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Appraiser"
+ Log "Enabling Appraiser logs for debugging by setting VerboseMode property to 1 at the registry key path: $vAppraiserPath"
+ if ((Get-ItemProperty -Path $vAppraiserPath -Name VerboseMode -ErrorAction SilentlyContinue) -eq $null)
+ {
+ Try
+ {
+ New-ItemProperty -Path $vAppraiserPath -Name VerboseMode -PropertyType DWord -Value 1 | Out-Null
+ }
+ Catch
+ {
+ Log "SetAppraiserVerboseMode failed to write the VerboseMode property at registry key $vAppraiserPath. This is not fatal, script will continue." "Warning" $null "SetAppraiserVerboseMode" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ else
+ {
+ Log "Appraiser verbose mode is already enabled"
+ }
+
+ Log "Enabling Appraiser logs for debugging by setting TestHooksEnabled property to 1 at the registry key path: $vAppraiserPath"
+ if ((Get-ItemProperty -Path $vAppraiserPath -Name TestHooksEnabled -ErrorAction SilentlyContinue) -eq $null)
+ {
+ Try
+ {
+ New-ItemProperty -Path $vAppraiserPath -Name TestHooksEnabled -PropertyType DWord -Value 1 | Out-Null
+ }
+ Catch
+ {
+ Log "SetAppraiserVerboseMode failed to write the TestHooksEnabled property at registry key $vAppraiserPath. This is not fatal, script will continue." "Warning" $null "SetAppraiserVerboseMode" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ else
+ {
+ Log "Appraiser TestHooksEnabled property is already set"
+ }
+
+ Log "Passed: SetAppraiserVerboseMode"
+ }
+ Catch
+ {
+ Log "SetAppraiserVerboseMode failed with unexpected exception. This is not fatal, script will continue." "Warning" $null "SetAppraiserVerboseMode" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function DisableAppraiserVerboseMode
+{
+ Log "Start: DisableAppraiserVerboseMode"
+ Try
+ {
+ $vAppraiserPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Appraiser"
+ if ((Get-ItemProperty -Path $vAppraiserPath -Name VerboseMode -ErrorAction SilentlyContinue) -ne $null)
+ {
+ Try
+ {
+ Remove-ItemProperty -Path $vAppraiserPath -Name VerboseMode
+ }
+ Catch
+ {
+ Log "DisableAppraiserVerboseMode failed deleting VerboseMode property at registry key path: $vAppraiserPath. This is not fatal, script will continue." "Warning" $null "DisableAppraiserVerboseMode" $_.Exception.HResult $_.Exception.Message
+ }
+ }
+ else
+ {
+ Log "Appraiser VerboseMode key already deleted"
+ }
+
+ Log "Passed: DisableAppraiserVerboseMode"
+ }
+ Catch
+ {
+ Log "DisableAppraiserVerboseMode failed with unexpected exception. This is not fatal, script will continue." "Warning" $null "DisableAppraiserVerboseMode" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function SetRequestAllAppraiserVersions
+{
+ Log "Start: SetRequestAllAppraiserVersions"
+ Try
+ {
+ $propertyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection"
+ $propertyGPOPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
+ if(Test-Path -Path $propertyPath)
+ {
+ if ((Get-ItemProperty -Path $propertyPath -Name RequestAllAppraiserVersions -ErrorAction SilentlyContinue) -eq $null)
+ {
+ Try
+ {
+ New-ItemProperty -Path $propertyPath -Name RequestAllAppraiserVersions -PropertyType DWord -Value 1 | Out-Null
+ }
+ Catch
+ {
+ Log "SetRequestAllAppraiserVersions failed setting RequestAllAppraiserVersions property at registry key path: $propertyPath" "Error" "20" "SetRequestAllAppraiserVersions" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ else
+ {
+ Try
+ {
+ Set-ItemProperty -Path $propertyPath -Name RequestAllAppraiserVersions -Value 1
+ }
+ Catch
+ {
+ Log "SetRequestAllAppraiserVersions failed setting RequestAllAppraiserVersions property at registry key path: $propertyPath" "Error" "20" "SetRequestAllAppraiserVersions" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ }
+
+ if(Test-Path -Path $propertyGPOPath)
+ {
+ if ((Get-ItemProperty -Path $propertyGPOPath -Name RequestAllAppraiserVersions -ErrorAction SilentlyContinue) -eq $null)
+ {
+ Try
+ {
+ New-ItemProperty -Path $propertyGPOPath -Name RequestAllAppraiserVersions -PropertyType DWord -Value 1 | Out-Null
+ }
+ Catch
+ {
+ Log "SetRequestAllAppraiserVersions failed setting RequestAllAppraiserVersions property at registry key path: $propertyGPOPath" "Error" "20" "SetRequestAllAppraiserVersions" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ else
+ {
+ Try
+ {
+ Set-ItemProperty -Path $propertyPath -Name RequestAllAppraiserVersions -Value 1
+ }
+ Catch
+ {
+ Log "SetRequestAllAppraiserVersions failed setting RequestAllAppraiserVersions property at registry key path: $propertyGPOPath" "Error" "20" "SetRequestAllAppraiserVersions" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ }
+
+ Log "Passed: SetRequestAllAppraiserVersions"
+ }
+ Catch
+ {
+ Log "SetRequestAllAppraiserVersions failed with unexpected exception." "Error" "21" "SetRequestAllAppraiserVersions" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function RunAppraiser
+{
+ Try
+ {
+ Log "Start: RunAppraiser"
+ Log "Attempting to run inventory...This may take a few minutes to complete, please do not cancel the script."
+
+ do
+ {
+ CompatTelRunner.exe -m:appraiser.dll -f:DoScheduledTelemetryRun ent | out-null
+ $appraiserLastExitCode = $LASTEXITCODE
+ $appraiserLastExitCodeHex = "{0:X}" -f $appraiserLastExitCode
+
+ if($appraiserLastExitCode -eq 0x80070021)
+ {
+ Log "RunAppraiser needs to run CompatTelRunner.exe, but it is already running. Waiting for 60 seconds before retry."
+ Start-Sleep -Seconds 60
+ }
+ else
+ {
+ break
+ }
+
+ $NoOfAppraiserRetries = $NoOfAppraiserRetries - 1
+
+ }While($NoOfAppraiserRetries -gt 0)
+
+ if ($appraiserLastExitCode -ne 0x0)
+ {
+ if ($appraiserLastExitCode -lt 0x0)
+ {
+ Log "RunAppraiser failed. CompatTelRunner.exe exited with last error code: 0x$appraiserLastExitCodeHex." "Error" "33" "RunAppraiser" "0x$appraiserLastExitCodeHex" "CompatTelRunner.exe returned with an error code."
+ }
+ else
+ {
+ Log "RunAppraiser succeeded with a return code: 0x$appraiserLastExitCodeHex."
+ }
+ }
+ else
+ {
+ Log "Passed: RunAppraiser"
+ }
+ }
+ Catch
+ {
+ Log "RunAppraiser failed with unexpected exception." "Error" "22" "RunAppraiser" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function RunCensus
+{
+ Log "Start: RunCensus"
+ Try
+ {
+ $censusRunRegKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Census"
+
+ if($(Test-Path $censusRunRegKey) -eq $false)
+ {
+ New-Item -Path $censusRunRegKey -ItemType Key | Out-Null
+ }
+
+ # Turn Census FullSync mode on
+ Log "Setting property: FullSync to value 1 at registry key path $censusRunRegKey to turn on Census FullSync mode"
+ if ((Get-ItemProperty -Path $censusRunRegKey -Name FullSync -ErrorAction SilentlyContinue) -eq $null)
+ {
+ New-ItemProperty -Path $censusRunRegKey -Name FullSync -PropertyType DWord -Value 1 | Out-Null
+ }
+ else
+ {
+ Set-ItemProperty -Path $censusRunRegKey -Name FullSync -Value 1
+ }
+
+
+ # Run Census and validate the run
+ # Census invocation commands are different for Windows 10 and Downlevel
+ [int] $runCounterBefore = (Get-ItemProperty -Path $censusRunRegKey).RunCounter
+
+ if($runCounterBefore -eq $null)
+ {
+ New-ItemProperty -Path $censusRunRegKey -Name RunCounter -PropertyType DWord -Value 0 | Out-Null
+ }
+
+ if($global:operatingSystemName.ToLower().Contains("windows 10"))
+ {
+ $censusExe = "$global:windir\system32\devicecensus.exe"
+ if(Test-Path -Path $censusExe)
+ {
+ Log "Running $censusExe"
+ & $censusExe | Out-Null
+ }
+ else
+ {
+ Log "$censusExe path not found" "Error" "52" "RunCensus"
+ return
+ }
+ }
+ else
+ {
+ CompatTelRunner.exe -m:generaltel.dll -f:DoCensusRun | Out-Null
+ }
+
+ [int] $runCounterAfter = (Get-ItemProperty -Path $censusRunRegKey).RunCounter
+ $returnCode = (Get-ItemProperty -Path $censusRunRegKey).ReturnCode
+ $startTime = Get-Date (Get-ItemProperty -Path $censusRunRegKey).StartTime
+ $endTime = Get-Date (Get-ItemProperty -Path $censusRunRegKey).EndTime
+
+ if($returnCode -eq 0)
+ {
+ if($runCounterAfter -gt $runCounterBefore -and $endTime -gt $startTime)
+ {
+ Log "Passed: RunCensus"
+ }
+ else
+ {
+ Log "Census did not run correctly. Registray data at $censusRunRegKey are: RunCounter Before trying to run Census:$runCounterBefore, RunCounter after trying to run Census:$runCounterAfter, ReturnCode:$returnCode, UTC StartTime:$startTime, UTC EndTime:$endTime" "Warning" $null "RunCensus"
+ }
+ }
+ else
+ {
+ Log "Census returned a non zero ReturnCode:$returnCode" "Warning" $null "RunCensus"
+ }
+
+ # Turn Census FullSync mode off
+ Log "Resetting property: FullSync to value 0 at registry key path $censusRunRegKey to turn off Census FullSync mode"
+ Set-ItemProperty -Path $censusRunRegKey -Name FullSync -Value 0
+
+ }
+ Catch
+ {
+ Log "RunCensus failed with unexpected exception" "Error" "51" "RunCensus" $_.Exception.HResult $_.Exception.Message
+ }
+}
+
+function CollectM365AHandlerLog
+{
+ Log "Start: CollectM365AHandlerLog"
+ Try
+ {
+ $propertyPath = "HKLM:\SOFTWARE\Microsoft\CCM\Logging\@Global"
+ if(Test-Path -Path $propertyPath)
+ {
+ if ((Get-ItemProperty -Path $propertyPath -Name LogDirectory -ErrorAction SilentlyContinue) -eq $null)
+ {
+ Log "Could not find registry key LogDirectory at path HKLM:\SOFTWARE\Microsoft\CCM\Logging\@Global"
+ }
+ else
+ {
+ Try
+ {
+ $logDirectoryKeyM365 = Get-ItemProperty -Path $propertyPath -Name LogDirectory
+ $logDirectoryM365 = $logDirectoryKeyM365.LogDirectory
+ Copy-Item "$logDirectoryM365\M365AHandler.log" -Destination $global:logFolder | Out-Null
+ Log "Passed: CollectM365AHandlerLog"
+ }
+ Catch
+ {
+ Log "Error getting logs at registry key LogDirectory at path HKLM:\SOFTWARE\Microsoft\CCM\Logging\@Global" "Warning" $null "CollectM365AHandlerLog" $_.Exception.HResult $_.Exception.Message
+ return
+ }
+ }
+ }
+ }
+ Catch
+ {
+ Log "Error getting logs at registry key LogDirectory at path HKLM:\SOFTWARE\Microsoft\CCM\Logging\@Global" "Warning" $null "CollectM365AHandlerLog" $_.Exception.HResult $_.Exception.Message
+ }
+
+}
+
+function Log($logMessage, $logLevel, $errorCode, $operation, $exceptionHresult, $exceptionMessage)
+{
+ $global:logDate = Get-Date -Format s
+ $global:utcDate = ((Get-Date).ToUniversalTime()).ToString("yyyy-MM-ddTHH:mm:ssZ")
+ $logMessageForAppInsights = $logMessage
+
+ if(($logLevel -eq $null) -or ($logLevel -eq [string]::Empty))
+ {
+ $logLevel = "Info"
+ }
+
+ if($logLevel -eq "Error")
+ {
+ # check and update the errorCode (the script will exit with the first errorCode)
+ if(($errorCode -ne $null) -and ($errorCode -ne [string]::Empty))
+ {
+ if(($global:errorCode -eq $null) -or ($global:errorCode -eq [string]::Empty))
+ {
+ $global:errorCode = $errorCode
+ }
+
+ $logMessage = "ErrorCode " + $errorCode + " : " + $logMessage
+ }
+
+ if($exceptionHresult -ne $null)
+ {
+ $logMessage = $logMessage + " HResult: " + $exceptionHresult
+ }
+
+ if($exceptionMessage -ne $null)
+ {
+ $logMessage = $logMessage + " ExceptionMessage: " + $exceptionMessage
+ }
+
+ $global:errorCount++
+ }
+ elseif($logLevel -eq "Exception")
+ {
+ if($exceptionHresult -ne $null)
+ {
+ $logMessage = $logMessage + " HResult: " + $exceptionHresult
+ }
+
+ if($exceptionMessage -ne $null)
+ {
+ $logMessage = $logMessage + " ExceptionMessage: " + $exceptionMessage
+ }
+ }
+ elseif($logLevel -eq "Warning")
+ {
+ if($exceptionHresult -ne $null)
+ {
+ $logMessage = $logMessage + " HResult: " + $exceptionHresult
+ }
+
+ if($exceptionMessage -ne $null)
+ {
+ $logMessage = $logMessage + " ExceptionMessage: " + $exceptionMessage
+ }
+ }
+
+ if ($LogMode -eq 0)
+ {
+ Try
+ {
+ WriteLogToConsole $logLevel $logMessage
+ }
+ Catch
+ {
+ # Error when logging to console
+ $exceptionDetails = "Exception: " + $_.Exception.Message + "HResult: " + $_.Exception.HResult
+ $message = "Error when logging to consloe."
+ Write-Error "$message`n$exceptionDetails"
+ SendEventToAppInsights "logging" $message "Failure" $global:utcDate "2" $_.Exception.HResult $_.Exception.Message
+ [System.Environment]::Exit(2)
+ }
+ }
+ elseif ($LogMode -eq 1)
+ {
+ Try
+ {
+ WriteLogToConsole $logLevel $logMessage
+ Add-Content $global:logFile "$global:logDate : $logLevel : $logMessage"
+ }
+ Catch
+ {
+ # Error when logging to console and file
+ $exceptionDetails = "Exception: " + $_.Exception.Message + "HResult: " + $_.Exception.HResult
+ $message = "Error when logging to consloe and file."
+ Write-Error "$message`n$exceptionDetails"
+ SendEventToAppInsights "logging" $message "Failure" $global:utcDate "3" $_.Exception.HResult $_.Exception.Message
+ [System.Environment]::Exit(3)
+ }
+ }
+ elseif ($LogMode -eq 2)
+ {
+ Try
+ {
+ Add-Content $global:logFile "$global:logDate : $logLevel : $logMessage"
+ }
+ Catch
+ {
+ # Error when logging to file
+ $exceptionDetails = "Exception: " + $_.Exception.Message + "HResult: " + $_.Exception.HResult
+ $message = "Error when logging to file."
+ Write-Error "$message`n$exceptionDetails"
+ SendEventToAppInsights "logging" $message "Failure" $global:utcDate "4" $_.Exception.HResult $_.Exception.Message
+ [System.Environment]::Exit(4)
+ }
+ }
+ else
+ {
+ Try
+ {
+ WriteLogToConsole $logLevel $logMessage
+ Add-Content $global:logFile "$global:logDate : $logLevel : $logMessage"
+ }
+ Catch
+ {
+ # Error when logging to console and file
+ $exceptionDetails = "Exception: " + $_.Exception.Message + "HResult: " + $_.Exception.HResult
+ $message = "Error when logging to consloe and file."
+ Write-Error "$message`n$exceptionDetails"
+ SendEventToAppInsights "logging" $message "Failure" $global:utcDate "5" $_.Exception.HResult $_.Exception.Message
+ [System.Environment]::Exit(5)
+ }
+ }
+}
+
+function WriteLogToConsole($logLevel, $logMessage)
+{
+ switch ($logLevel)
+ {
+ "Error"
+ {
+ Write-Error "$global:logDate : $logMessage"; Break
+ }
+ "Exception"
+ {
+ Write-Error "$global:logDate : $logMessage"; Break
+ }
+ "Warning"
+ {
+ Write-Warning "$global:logDate : $logMessage"; Break
+ }
+ default
+ {
+ Write-Host "$global:logDate : $logMessage"; Break
+ }
+ }
+}
+
+# Calling the main function
+&$main
+
+# SIG # Begin signature block
+# MIIoAgYJKoZIhvcNAQcCoIIn8zCCJ+8CAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBIE+lkqmSnrxsW
+# 2upP9cl3n3z3Xa6n76xQ00V6M5n8n6CCDYUwggYDMIID66ADAgECAhMzAAADri01
+# UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG
+# yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899
+# QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82
+# 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV
+# M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd
+# WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w
+# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW
+# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
+# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
+# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
+# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
+# AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W
+# 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY
+# 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV
+# APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37
+# ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57
+# xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t
+# Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i
+# 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk
+# 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK
+# 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO
+# zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK
+# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
+# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
+# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
+# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
+# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
+# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
+# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
+# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
+# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
+# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
+# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
+# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
+# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
+# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
+# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
+# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
+# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
+# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
+# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
+# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
+# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
+# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
+# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
+# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
+# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
+# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
+# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
+# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
+# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
+# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
+# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
+# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
+# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
+# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
+# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGdMwghnPAgEBMIGVMH4x
+# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
+# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
+# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA
+# A64wDQYJYIZIAWUDBAIBBQCggd4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
+# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIMK3
+# faqKQD4G7qVdjnlYCcOT7ptJNIWBvSzhUCNnblNkMHIGCisGAQQBgjcCAQwxZDBi
+# oESAQgBEAGUAcwBrAHQAbwBwAEEAbgBhAGwAeQB0AGkAYwBzAEwAbwBnAHMAQwBv
+# AGwAbABlAGMAdABvAHIALgBwAHMAMaEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20wDQYJKoZIhvcNAQEBBQAEggEAzypMT9O9UC3+hJ4aqyj63LA4eG1yjOHc/Y2J
+# OtqortoqXycVSI8rjfLYH9xu84U77YschS9f5nPEGfXhgf2dcMNbpva0ANbOMytn
+# rMKEhWgz8WZeWhiKOskP6rRil365jjrEzaw3xXQIsvoaEys5+WzKd/pVMTX3HMms
+# vDemXn/JPnXLQGPovGw8md8AtyM+Zo53pvVpu6ZJf7czXQpRXeLz12QIE9m+uY78
+# 1RfJFg2R2kn1zkAedPPsVL5szITAY8t8oUjZyEd71xTw22rkD6ak0rgcgPiBNTC9
+# hINCJHV0pdcQs3wt4X02Mc1+X7au7GDhBuQy3HLAPNFzrOjeDqGCFy0wghcpBgor
+# BgEEAYI3AwMBMYIXGTCCFxUGCSqGSIb3DQEHAqCCFwYwghcCAgEDMQ8wDQYJYIZI
+# AWUDBAIBBQAwggFZBgsqhkiG9w0BCRABBKCCAUgEggFEMIIBQAIBAQYKKwYBBAGE
+# WQoDATAxMA0GCWCGSAFlAwQCAQUABCChl/7qbI6omZ+csG323sGjozGE77HHxLRe
+# Xw+WY9dnOAIGZjOhcVduGBMyMDI0MDUwMjIwNTU1Mi40NTVaMASAAgH0oIHYpIHV
+# MIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
+# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQL
+# EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsT
+# HVRoYWxlcyBUU1MgRVNOOjJBRDQtNEI5Mi1GQTAxMSUwIwYDVQQDExxNaWNyb3Nv
+# ZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIRfDCCBycwggUPoAMCAQICEzMAAAHenkie
+# lp8oRD0AAQAAAd4wDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
+# UENBIDIwMTAwHhcNMjMxMDEyMTkwNzEyWhcNMjUwMTEwMTkwNzEyWjCB0jELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9z
+# b2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMg
+# VFNTIEVTTjoyQUQ0LTRCOTItRkEwMTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
+# U3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALSB
+# 9ByF9UIDhA6xFrOniw/xsDl8sSi9rOCOXSSO4VMQjnNGAo5VHx0iijMEMH9LY2SU
+# IBkVQS0Ml6kR+TagkUPbaEpwjhQ1mprhRgJT/jlSnic42VDAo0en4JI6xnXoAoWo
+# KySY8/ROIKdpphgI7OJb4XHk1P3sX2pNZ32LDY1ktchK1/hWyPlblaXAHRu0E3yn
+# vwrS8/bcorANO6DjuysyS9zUmr+w3H3AEvSgs2ReuLj2pkBcfW1UPCFudLd7IPZ2
+# RC4odQcEPnY12jypYPnS6yZAs0pLpq0KRFUyB1x6x6OU73sudiHON16mE0l6LLT9
+# OmGo0S94Bxg3N/3aE6fUbnVoemVc7FkFLum8KkZcbQ7cOHSAWGJxdCvo5OtUtRdS
+# qf85FklCXIIkg4sm7nM9TktUVfO0kp6kx7mysgD0Qrxx6/5oaqnwOTWLNzK+BCi1
+# G7nUD1pteuXvQp8fE1KpTjnG/1OJeehwKNNPjGt98V0BmogZTe3SxBkOeOQyLA++
+# 5Hyg/L68pe+DrZoZPXJaGU/iBiFmL+ul/Oi3d83zLAHlHQmH/VGNBfRwP+ixvqhy
+# k/EebwuXVJY+rTyfbRfuh9n0AaMhhNxxg6tGKyZS4EAEiDxrF9mAZEy8e8rf6dlK
+# IX5d3aQLo9fDda1ZTOw+XAcAvj2/N3DLVGZlHnHlAgMBAAGjggFJMIIBRTAdBgNV
+# HQ4EFgQUazAmbxseaapgdxzK8Os+naPQEsgwHwYDVR0jBBgwFoAUn6cVXQBeYl2D
+# 9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3Nv
+# ZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUy
+# MDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDov
+# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1l
+# LVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUB
+# Af8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQAD
+# ggIBAOKUwHsXDacGOvUIgs5HDgPs0LZ1qyHS6C6wfKlLaD36tZfbWt1x+GMiazSu
+# y+GsxiVHzkhMW+FqK8gruLQWN/sOCX+fGUgT9LT21cRIpcZj4/ZFIvwtkBcsCz1X
+# EUsXYOSJUPitY7E8bbldmmhYZ29p+XQpIcsG/q+YjkqBW9mw0ru1MfxMTQs9MTDi
+# D28gAVGrPA3NykiSChvdqS7VX+/LcEz9Ubzto/w28WA8HOCHqBTbDRHmiP7MIj+S
+# QmI9VIayYsIGRjvelmNa0OvbU9CJSz/NfMEgf2NHMZUYW8KqWEjIjPfHIKxWlNMY
+# huWfWRSHZCKyIANA0aJL4soHQtzzZ2MnNfjYY851wHYjGgwUj/hlLRgQO5S30Zx7
+# 8GqBKfylp25aOWJ/qPhC+DXM2gXajIXbl+jpGcVANwtFFujCJRdZbeH1R+Q41Fjg
+# Bg4m3OTFDGot5DSuVkQgjku7pOVPtldE46QlDg/2WhPpTQxXH64sP1GfkAwUtt6r
+# rZM/PCwRG6girYmnTRLLsicBhoYLh+EEFjVviXAGTk6pnu8jx/4WPWu0jsz7yFzg
+# 82/FMqCk9wK3LvyLAyDHN+FxbHAxtgwad7oLQPM0WGERdB1umPCIiYsSf/j79EqH
+# doNwQYROVm+ZX10RX3n6bRmAnskeNhi0wnVaeVogLMdGD+nqMIIHcTCCBVmgAwIB
+# AgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UE
+# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
+# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0
+# IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1
+# WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCC
+# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O
+# 1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZn
+# hUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t
+# 1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxq
+# D89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmP
+# frVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSW
+# rAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv
+# 231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zb
+# r17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYcten
+# IPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQc
+# xWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17a
+# j54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQAB
+# MCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQU
+# n6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEw
+# QTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9E
+# b2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQB
+# gjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/
+# MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJ
+# oEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p
+# Y1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYB
+# BQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
+# Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3h
+# LB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x
+# 5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74p
+# y27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1A
+# oL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbC
+# HcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB
+# 9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNt
+# yo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3
+# rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcV
+# v7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A24
+# 5oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lw
+# Y1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtgwggJBAgEBMIIBAKGB2KSB1TCB
+# 0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
+# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMk
+# TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1U
+# aGFsZXMgVFNTIEVTTjoyQUQ0LTRCOTItRkEwMTElMCMGA1UEAxMcTWljcm9zb2Z0
+# IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAaKBSisy4y86pl8Xy
+# 22CJZExE2vOggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN
+# BgkqhkiG9w0BAQUFAAIFAOneH+MwIhgPMjAyNDA1MDIyMjIxMjNaGA8yMDI0MDUw
+# MzIyMjEyM1oweDA+BgorBgEEAYRZCgQBMTAwLjAKAgUA6d4f4wIBADALAgEAAgMB
+# HHgCAf8wBwIBAAICE/YwCgIFAOnfcWMCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYK
+# KwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUF
+# AAOBgQChqUVzyjSvZsd79JUJddw2P0vHrT2Azx/D5Nh33MUFAU0AUMRWx6pqbyHD
+# 7Gf0OYljwMdX8TLfsorsODpvMVFyLQQhANBQMzScn6JVYUyJWGlXEFf3zEVmoXzf
+# Y3wtQnrDdUVaeg9NoY9ttFqPtJamKUBRZnfPO8xtfvRBgfm8rjGCBA0wggQJAgEB
+# MIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
+# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
+# BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB3p5InpafKEQ9
+# AAEAAAHeMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN
+# AQkQAQQwLwYJKoZIhvcNAQkEMSIEIEOH7oT0feHVIo2VpC5Q0ldGCYZmSyaDyjpn
+# TKCg8LKyMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgjj4jnw3BXhAQSQJ/
+# 5gtzIK0+cP1Ns/NS2A+OB3N+HXswgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG
+# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
+# cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
+# cCBQQ0EgMjAxMAITMwAAAd6eSJ6WnyhEPQABAAAB3jAiBCCqlMZRRFgGINs4+HhX
+# dMQi8+rUCVp+3udHqe8NfDTWAjANBgkqhkiG9w0BAQsFAASCAgBGwl1+0uDZseka
+# q/ceaXwJ8/fp/4Er6cxJrm7/+0ENEAkRzho/tajjVen5+RftqjYY7tdjWw01s1xw
+# MEOik/nqqzCtEBqMZrGS1p67cnJBpUVpONW+inXHh7CPnOrZTQ/4olXp1UVWFczR
+# rs3cFyOgrtRTL1a7/EprXVFjRWXRY+dHGho/5+C46g5rp4HR2h8ucIABrbrQ880H
+# PC73+Nr7g30XgKkRkD2eUH/McZICsfi+7ONLvDMJQyUsZML6MwQtSm2jjWNe4gIw
+# 2xy1RgfaJV5w0ve9hx1MU+WcjxX7Z3M1IaG+XGxf+4FpNBczzd0BY0dY5iOSCuqp
+# aEDuu3DIZ9bLyN8VoFaI98plJkbba9J/nRnSRSTxbg6UoUQTiMBRLhfrEVbfGVw4
+# u1ABt1mFaBX70UXhLZYYQxHG1GQnm6MSLklihtZu57yxY/VhyfH8Z3hRfAfxbyen
+# HpCS5AmKJpHiRSeTC2bDlfaWGOFXwcAufxXvgu+EWNgukuXKLwtT8blZv/VxuXUs
+# eq+YToI4oHcU9+hlFQ3+9pVH+xlppa8HJcIeqhY0WA9wMvIh4eIa97iAusIsiRh4
+# xeeqxdppBFpIzQhRkK14sLggRZeJs7ayVQWTRbFyA5ZAxa9H+eJ3UA7WknMwh7g1
+# vEFP+/1yvj66y7dD3Mv1nYRkpHizHQ==
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/AdminUI.SmsTraceListener.dll b/ExtendMigrateToAzure/AdminUI.SmsTraceListener.dll
new file mode 100644
index 0000000..5b7c032
Binary files /dev/null and b/ExtendMigrateToAzure/AdminUI.SmsTraceListener.dll differ
diff --git a/ExtendMigrateToAzure/ExtendMigrateToAzure.exe b/ExtendMigrateToAzure/ExtendMigrateToAzure.exe
new file mode 100644
index 0000000..4011198
Binary files /dev/null and b/ExtendMigrateToAzure/ExtendMigrateToAzure.exe differ
diff --git a/ExtendMigrateToAzure/ExtendMigrateToAzure.exe.config b/ExtendMigrateToAzure/ExtendMigrateToAzure.exe.config
new file mode 100644
index 0000000..c7de67b
--- /dev/null
+++ b/ExtendMigrateToAzure/ExtendMigrateToAzure.exe.config
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ExtendMigrateToAzure/Hyak.Common.dll b/ExtendMigrateToAzure/Hyak.Common.dll
new file mode 100644
index 0000000..1974439
Binary files /dev/null and b/ExtendMigrateToAzure/Hyak.Common.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Azure.Common.dll b/ExtendMigrateToAzure/Microsoft.Azure.Common.dll
new file mode 100644
index 0000000..e4768a0
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Azure.Common.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Azure.ResourceManager.dll b/ExtendMigrateToAzure/Microsoft.Azure.ResourceManager.dll
new file mode 100644
index 0000000..fe2a6ca
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Azure.ResourceManager.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.ConfigurationManagement.Feedback.Common.dll b/ExtendMigrateToAzure/Microsoft.ConfigurationManagement.Feedback.Common.dll
new file mode 100644
index 0000000..e67d32d
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.ConfigurationManagement.Feedback.Common.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.ConfigurationManagement.ManagementProvider.dll b/ExtendMigrateToAzure/Microsoft.ConfigurationManagement.ManagementProvider.dll
new file mode 100644
index 0000000..c36476b
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.ConfigurationManagement.ManagementProvider.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.ConfigurationManager.AzureManagement.dll b/ExtendMigrateToAzure/Microsoft.ConfigurationManager.AzureManagement.dll
new file mode 100644
index 0000000..e0342ed
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.ConfigurationManager.AzureManagement.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.ConfigurationManager.CommonUI.dll b/ExtendMigrateToAzure/Microsoft.ConfigurationManager.CommonUI.dll
new file mode 100644
index 0000000..9618701
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.ConfigurationManager.CommonUI.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.ConfigurationManager.ManagedBase.dll b/ExtendMigrateToAzure/Microsoft.ConfigurationManager.ManagedBase.dll
new file mode 100644
index 0000000..bda298d
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.ConfigurationManager.ManagedBase.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.EnterpriseManagement.UI.Controls.dll b/ExtendMigrateToAzure/Microsoft.EnterpriseManagement.UI.Controls.dll
new file mode 100644
index 0000000..e0c16c9
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.EnterpriseManagement.UI.Controls.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Identity.Client.Extensions.Msal.dll b/ExtendMigrateToAzure/Microsoft.Identity.Client.Extensions.Msal.dll
new file mode 100644
index 0000000..661af6d
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Identity.Client.Extensions.Msal.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Identity.Client.dll b/ExtendMigrateToAzure/Microsoft.Identity.Client.dll
new file mode 100644
index 0000000..07e8186
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Identity.Client.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Threading.Tasks.Extensions.Desktop.dll b/ExtendMigrateToAzure/Microsoft.Threading.Tasks.Extensions.Desktop.dll
new file mode 100644
index 0000000..1288a17
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Threading.Tasks.Extensions.Desktop.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Threading.Tasks.Extensions.dll b/ExtendMigrateToAzure/Microsoft.Threading.Tasks.Extensions.dll
new file mode 100644
index 0000000..4d862e1
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Threading.Tasks.Extensions.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.Threading.Tasks.dll b/ExtendMigrateToAzure/Microsoft.Threading.Tasks.dll
new file mode 100644
index 0000000..8438577
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.Threading.Tasks.dll differ
diff --git a/ExtendMigrateToAzure/Microsoft.WindowsAzure.Storage.dll b/ExtendMigrateToAzure/Microsoft.WindowsAzure.Storage.dll
new file mode 100644
index 0000000..d25230b
Binary files /dev/null and b/ExtendMigrateToAzure/Microsoft.WindowsAzure.Storage.dll differ
diff --git a/ExtendMigrateToAzure/Newtonsoft.Json.dll b/ExtendMigrateToAzure/Newtonsoft.Json.dll
new file mode 100644
index 0000000..31c2f52
Binary files /dev/null and b/ExtendMigrateToAzure/Newtonsoft.Json.dll differ
diff --git a/ExtendMigrateToAzure/System.Management.Automation.dll b/ExtendMigrateToAzure/System.Management.Automation.dll
new file mode 100644
index 0000000..109753c
Binary files /dev/null and b/ExtendMigrateToAzure/System.Management.Automation.dll differ
diff --git a/ExtendMigrateToAzure/System.ValueTuple.dll b/ExtendMigrateToAzure/System.ValueTuple.dll
new file mode 100644
index 0000000..4ce28fd
Binary files /dev/null and b/ExtendMigrateToAzure/System.ValueTuple.dll differ
diff --git a/ExtendMigrateToAzure/Template/CreateExtension.json b/ExtendMigrateToAzure/Template/CreateExtension.json
new file mode 100644
index 0000000..b8f9d69
--- /dev/null
+++ b/ExtendMigrateToAzure/Template/CreateExtension.json
@@ -0,0 +1,108 @@
+{
+ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "machineName": {
+ "defaultValue": "",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 15,
+ "metadata": {
+ "description": "The name of the virtual machine. "
+ }
+ },
+ "deployname": {
+ "type": "string"
+ },
+ "existingStorageUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "The storage Url. Example is like https://{storageaccountname}.blob.core.windows.net/{containername}/{blobname}. "
+ }
+ },
+ "existingSASKey": {
+ "type": "securestring",
+ "metadata": {
+ "description": "The sasToken required to access existingStorageUrl. It requires read and write permissions to save some temp data. "
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Location for all resources."
+ }
+ },
+ "RoleType": {
+ "type": "string",
+ "defaultValue": "Passive",
+ "allowedValues": [
+ "DP",
+ "MP",
+ "SUP"
+ ],
+ "metadata": {
+ "description": "Role type of VM."
+ }
+ }
+ },
+ "variables": {
+ "Quotes": "\""
+ },
+ "resources": [
+ {
+ "condition": "[equals(parameters('RoleType'),'MP')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-MP',parameters('deployname'))]",
+ "location": "[parameters('location')]",
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "MPConfigurationExist.ps1\\MPconfigurationExist"
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'DP')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-DP',parameters('deployname'))]",
+ "location": "[parameters('location')]",
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "DPConfigurationExist.ps1\\DPconfigurationExist"
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'SUP')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-SUP',parameters('deployname'))]",
+ "location": "[parameters('location')]",
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "SUPConfigurationExist.ps1\\SUPconfigurationExist"
+ }
+ }
+ }
+ ],
+ "outputs": {
+
+ }
+}
diff --git a/ExtendMigrateToAzure/Template/CreateExtension.parameters.json b/ExtendMigrateToAzure/Template/CreateExtension.parameters.json
new file mode 100644
index 0000000..96a6c3e
--- /dev/null
+++ b/ExtendMigrateToAzure/Template/CreateExtension.parameters.json
@@ -0,0 +1,20 @@
+"parameters": {
+ "machineName": {
+ "value": "__MachineName__"
+ },
+ "existingStorageUrl": {
+ "value": "__StorageContainer__"
+ },
+ "existingSASKey": {
+ "value": "__sasKey__"
+ },
+ "location": {
+ "value": "__Location__"
+ },
+ "deployname": {
+ "value": "__FolderName__"
+ },
+ "RoleType": {
+ "value": "__RoleType__"
+ }
+}
diff --git a/ExtendMigrateToAzure/Template/WindowsVirtualMachine.json b/ExtendMigrateToAzure/Template/WindowsVirtualMachine.json
new file mode 100644
index 0000000..959db9b
--- /dev/null
+++ b/ExtendMigrateToAzure/Template/WindowsVirtualMachine.json
@@ -0,0 +1,395 @@
+{
+ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "machineName": {
+ "defaultValue": "",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 15,
+ "metadata": {
+ "description": "The name of the virtual machine. "
+ }
+ },
+ "adminUsername": {
+ "type": "string"
+ },
+ "adminPassword": {
+ "type": "securestring"
+ },
+ "diskType": {
+ "type": "string"
+ },
+ "exsitingVnetName": {
+ "type": "string",
+ "metadata": {
+ "description": "Existing VNET that contains the domain controller"
+ }
+ },
+ "vmSize": {
+ "type": "string"
+ },
+ "existingSubnetName": {
+ "defaultValue": "Subnet-1",
+ "type": "string",
+ "metadata": {
+ "description": "Existing subnet that contains the domain controller."
+ }
+ },
+ "existingPrimaryName": {
+ "type": "string",
+ "metadata": {
+ "description": "Computer name for the primary site server. "
+ }
+ },
+ "existingDomainFQDN": {
+ "type": "string",
+ "metadata": {
+ "description": "DomainName on the AD domain. "
+ }
+ },
+ "existingDomainAdminUsername": {
+ "type": "string",
+ "metadata": {
+ "description": "Username of the account on the AD domain. "
+ }
+ },
+ "existingDomainAdminPassword": {
+ "type": "securestring",
+ "metadata": {
+ "description": "Password of the account on the AD domain"
+ }
+ },
+ "existingStorageUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "The storage Url. Example is like https://{storageaccountname}.blob.core.windows.net/{containername}/{blobname}. "
+ }
+ },
+ "existingSASKey": {
+ "type": "securestring",
+ "metadata": {
+ "description": "The sasToken required to access existingStorageUrl. It requires read and write permissions to save some temp data. "
+ }
+ },
+ "existingVnetResourcegroup": {
+ "type": "string",
+ "metadata": {
+ "description": "Existing azure virtual network resource group. "
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Location for all resources."
+ }
+ },
+ "RoleType": {
+ "type": "string",
+ "defaultValue": "Passive",
+ "allowedValues": [
+ "Passive",
+ "DP",
+ "MP",
+ "SUP",
+ "General"
+ ],
+ "metadata": {
+ "description": "Role type of VM."
+ }
+ }
+ },
+ "variables": {
+ "Quotes": "\"",
+ "vnetId": "[resourceId(parameters('existingVnetResourcegroup'), 'Microsoft.Network/virtualNetworks', parameters('exsitingVnetName'))]",
+ "networkSettings": {
+ "subnetRef": "[concat(variables('vnetId'), '/subnets/',parameters('existingSubnetName'))]",
+ "privateIPAllocationMethod": "Dynamic",
+ "privateIPAddressVersion": "IPv4"
+ },
+ "securityGroupRule": {
+ "name": "default-allow-rdp",
+ "priority": 1000,
+ "sourceAddressPrefix": "*",
+ "protocol": "Tcp",
+ "destinationPortRange": "3389",
+ "access": "Allow",
+ "direction": "Inbound",
+ "sourcePortRange": "*",
+ "destinationAddressPrefix": "*"
+ }
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Compute/virtualMachines",
+ "apiVersion": "2018-06-01",
+ "name": "[parameters('machineName')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Network/networkInterfaces/', toLower(parameters('machineName')), '-ni')]"
+ ],
+ "properties": {
+ "osProfile": {
+ "computerName": "[parameters('machineName')]",
+ "adminUsername": "[parameters('adminUsername')]",
+ "adminPassword": "[parameters('adminPassword')]",
+ "windowsConfiguration": {
+ "provisionVmAgent": "true"
+ }
+ },
+ "hardwareProfile": {
+ "vmSize": "[parameters('vmSize')]"
+ },
+ "storageProfile": {
+ "imageReference": {
+ "publisher": "MicrosoftWindowsServer",
+ "offer": "WindowsServer",
+ "sku": "2019-Datacenter",
+ "version": "latest"
+ },
+ "osDisk": {
+ "osType": "Windows",
+ "name": "[concat(parameters('machineName'),'-OsDisk')]",
+ "createOption": "FromImage",
+ "caching": "ReadWrite",
+ "managedDisk": {
+ "storageAccountType": "[parameters('diskType')]"
+ },
+ "diskSizeGB": 150
+ },
+ "dataDisks": []
+ },
+ "networkProfile": {
+ "networkInterfaces": [
+ {
+ "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(toLower(parameters('machineName')), '-ni'))]"
+ }
+ ]
+ },
+ "diagnosticsProfile": {
+ "bootDiagnostics": {
+ "enabled": false
+ }
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'Passive')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-Passive')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Compute/virtualMachines/',parameters('machineName'))]"
+ ],
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "PassiveConfiguration.ps1\\Passiveconfiguration",
+ "Properties": {
+ "DomainName": "[parameters('existingDomainFQDN')]",
+ "AdminCreds": {
+ "UserName": "[parameters('existingDomainAdminUsername')]",
+ "Password": "PrivateSettingsRef:DomainAdminPassword"
+ },
+ "Primaryname": "[parameters('existingPrimaryName')]"
+ }
+ },
+ "protectedSettings": {
+ "Items": {
+ "DomainAdminPassword": "[parameters('existingDomainAdminPassword')]"
+ }
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'MP')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-MP')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Compute/virtualMachines/',parameters('machineName'))]"
+ ],
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "MPConfiguration.ps1\\MPconfiguration",
+ "Properties": {
+ "DomainName": "[parameters('existingDomainFQDN')]",
+ "AdminCreds": {
+ "UserName": "[parameters('existingDomainAdminUsername')]",
+ "Password": "PrivateSettingsRef:DomainAdminPassword"
+ },
+ "PrimaryName": "[parameters('existingPrimaryName')]"
+ }
+ },
+ "protectedSettings": {
+ "Items": {
+ "DomainAdminPassword": "[parameters('existingDomainAdminPassword')]"
+ }
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'DP')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-DP')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Compute/virtualMachines/',parameters('machineName'))]"
+ ],
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "DPConfiguration.ps1\\DPconfiguration",
+ "Properties": {
+ "DomainName": "[parameters('existingDomainFQDN')]",
+ "AdminCreds": {
+ "UserName": "[parameters('existingDomainAdminUsername')]",
+ "Password": "PrivateSettingsRef:DomainAdminPassword"
+ },
+ "Primaryname": "[parameters('existingPrimaryName')]"
+ }
+ },
+ "protectedSettings": {
+ "Items": {
+ "DomainAdminPassword": "[parameters('existingDomainAdminPassword')]"
+ }
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'SUP')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-SUP')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Compute/virtualMachines/',parameters('machineName'))]"
+ ],
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "SUPConfiguration.ps1\\SUPconfiguration",
+ "Properties": {
+ "DomainName": "[parameters('existingDomainFQDN')]",
+ "AdminCreds": {
+ "UserName": "[parameters('existingDomainAdminUsername')]",
+ "Password": "PrivateSettingsRef:DomainAdminPassword"
+ },
+ "Primaryname": "[parameters('existingPrimaryName')]"
+ }
+ },
+ "protectedSettings": {
+ "Items": {
+ "DomainAdminPassword": "[parameters('existingDomainAdminPassword')]"
+ }
+ }
+ }
+ },
+ {
+ "condition": "[equals(parameters('RoleType'),'General')]",
+ "type": "Microsoft.Compute/virtualMachines/extensions",
+ "apiVersion": "2018-06-01",
+ "name": "[concat(parameters('machineName'),'/WorkFlow-General')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Compute/virtualMachines/',parameters('machineName'))]"
+ ],
+ "properties": {
+ "publisher": "Microsoft.Powershell",
+ "type": "DSC",
+ "typeHandlerVersion": "2.21",
+ "autoUpgradeMinorVersion": true,
+ "settings": {
+ "modulesUrl": "[Uri(parameters('existingStorageUrl'),concat('scripts/DSCConfiguration.zip',parameters('existingSASKey')))]",
+ "configurationFunction": "GeneralConfiguration.ps1\\Generalconfiguration",
+ "Properties": {
+ "DomainName": "[parameters('existingDomainFQDN')]",
+ "AdminCreds": {
+ "UserName": "[parameters('existingDomainAdminUsername')]",
+ "Password": "PrivateSettingsRef:DomainAdminPassword"
+ },
+ "Primaryname": "[parameters('existingPrimaryName')]"
+ }
+ },
+ "protectedSettings": {
+ "Items": {
+ "DomainAdminPassword": "[parameters('existingDomainAdminPassword')]"
+ }
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Network/networkInterfaces",
+ "apiVersion": "2018-08-01",
+ "name": "[concat(toLower(parameters('machineName')), '-ni')]",
+ "location": "[parameters('location')]",
+ "dependsOn": [
+ "[concat('Microsoft.Network/networkSecurityGroups/', parameters('machineName'), '-nsg')]"
+ ],
+ "properties": {
+ "ipConfigurations": [
+ {
+ "name": "ipconfig1",
+ "properties": {
+ "subnet": {
+ "id": "[variables('networkSettings').subnetRef]"
+ },
+ "privateIPAllocationMethod": "[variables('networkSettings').privateIPAllocationMethod]",
+ "privateIPAddressVersion": "[variables('networkSettings').privateIPAddressVersion]"
+ }
+ }
+ ],
+ "networkSecurityGroup": {
+ "id": "[resourceId(resourceGroup().name, 'Microsoft.Network/networkSecurityGroups', concat(parameters('machineName'), '-nsg'))]"
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Network/networkSecurityGroups",
+ "apiVersion": "2018-08-01",
+ "name": "[concat(parameters('machineName'), '-nsg')]",
+ "location": "[parameters('location')]",
+ "properties": {
+ "securityRules": [
+ {
+ "name": "[variables('securityGroupRule').name]",
+ "properties": {
+ "priority": "[variables('securityGroupRule').priority]",
+ "sourceAddressPrefix": "[variables('securityGroupRule').sourceAddressPrefix]",
+ "protocol": "[variables('securityGroupRule').protocol]",
+ "destinationPortRange": "[variables('securityGroupRule').destinationPortRange]",
+ "access": "[variables('securityGroupRule').access]",
+ "direction": "[variables('securityGroupRule').direction]",
+ "sourcePortRange": "[variables('securityGroupRule').sourcePortRange]",
+ "destinationAddressPrefix": "[variables('securityGroupRule').destinationAddressPrefix]"
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "outputs": {
+
+ }
+}
diff --git a/ExtendMigrateToAzure/Template/WindowsVirtualMachine.parameters.json b/ExtendMigrateToAzure/Template/WindowsVirtualMachine.parameters.json
new file mode 100644
index 0000000..b1eabd1
--- /dev/null
+++ b/ExtendMigrateToAzure/Template/WindowsVirtualMachine.parameters.json
@@ -0,0 +1,60 @@
+"parameters": {
+ "machineName": {
+ "value": "__MachineName__"
+ },
+ "adminUsername": {
+ "value": "__AdminUsername__"
+ },
+ "adminPassword": {
+ "reference": {
+ "KeyVault": {
+ "id": "__AdminVaultID__"
+ },
+ "secretName": "__AdminSecureName__"
+ }
+ },
+ "diskType": {
+ "value": "Premium_LRS"
+ },
+ "exsitingVnetName": {
+ "value": "__VirtualNetwork__"
+ },
+ "existingVnetResourcegroup": {
+ "value": "__VirtualNetworkResourceGroup__"
+ },
+ "vmSize": {
+ "value": "__VMSize__"
+ },
+ "existingSubnetName": {
+ "value": "__SubNet__"
+ },
+ "existingPrimaryName": {
+ "value": "__PrimaryName__"
+ },
+ "existingDomainFQDN": {
+ "value": "__DomainName__"
+ },
+ "existingDomainAdminUsername": {
+ "value": "__DomainUser__"
+ },
+ "existingDomainAdminPassword": {
+ "reference": {
+ "KeyVault": {
+ "id": "__DomainVaultID__"
+ },
+ "secretName": "__DomainSecureName__"
+ }
+ },
+ "existingStorageUrl": {
+ "value": "__StorageContainer__"
+ },
+ "existingSASKey": {
+ "value": "__sasKey__"
+ },
+ "location": {
+ "value": "__Location__"
+ },
+ "RoleType": {
+ "value": "__RoleType__"
+ }
+}
diff --git a/ExtendMigrateToAzure/postscripts/AddDP.ps1 b/ExtendMigrateToAzure/postscripts/AddDP.ps1
new file mode 100644
index 0000000..67cde19
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddDP.ps1
@@ -0,0 +1,282 @@
+
+$LogList = @()
+$LogList += "Start running add distribution point script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+
+if(!$SystemServer)
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server."
+}
+
+if((get-cmdistributionpoint -SiteSystemServerName $MachineName).count -eq 1)
+{
+ $LogList += "$MachineName is already a Distribution Point."
+ $LogList += 1
+ return $LogList
+}
+else
+{
+ $SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $Date = [DateTime]::Now.AddYears(30)
+ $LogList += "Adding distribution point on $MachineName ..."
+ $LogList += Add-CMDistributionPoint -InputObject $SystemServer -CertificateExpirationTimeUtc $Date
+ $LogList += "Finished adding distribution point on $MachineName ..."
+
+
+ if((get-cmdistributionpoint -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+# SIG # Begin signature block
+# MIIn4QYJKoZIhvcNAQcCoIIn0jCCJ84CAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCNu7zXOpsNWcfS
+# d4SaGj3wAjATvE3KwAvi1uvRC++40aCCDXYwggX0MIID3KADAgECAhMzAAADrzBA
+# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
+# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
+# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
+# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
+# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
+# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
+# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
+# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
+# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
+# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
+# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
+# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
+# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
+# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
+# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
+# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
+# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGcEwghm9AgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
+# BQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIB7C1PCGIegnemn6gD1SFzAj
+# SVPITm9aHySFVGmzHcMgMGAGCisGAQQBgjcCAQwxUjBQoDKAMABFAHgAdABlAG4A
+# ZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBlAHgAZaEagBhodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAxsHHK3YEkyaA1E/T
+# YIdVaS5rGzS7hIwI5lWVMF+hnF86ahjDrvxyZn3PkTnby9z3xQbmNRL8/wDhoD0R
+# iYGP5i/uCkzBouhaBZDFTGi+VhtcVK7xUDdasDlEJ+z98lH2xpVVIRJLeim/SAW9
+# rYIHr6f9amOjlxXhVh48XPI+CKDFc1/YL2au8UctPtuYf8KTfwOUyTkp8nsq2Wey
+# 7L6+EhMdYmIVSKdxqtTSlJ//+k3mdxkNR5FP40VTeUCYIjjEi2rZzeYZvx6KVFzZ
+# pEqAuYIvxZmD/0tnXLYiM7oobDDoG7LNwXGPk19C4KN/fezj8YReBolMoED1Y1le
+# 75B/qKGCFy0wghcpBgorBgEEAYI3AwMBMYIXGTCCFxUGCSqGSIb3DQEHAqCCFwYw
+# ghcCAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsqhkiG9w0BCRABBKCCAUgEggFE
+# MIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCCwgwS5buPUmU1e
+# n7zG4x2tQvtsWGWssEK2Uy8q9nFpwgIGZjOhcWg+GBMyMDI0MDUwMjIwNTgwOS45
+# MjZaMASAAgH0oIHYpIHVMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
+# bWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjJBRDQtNEI5Mi1GQTAxMSUw
+# IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIRfDCCBycwggUP
+# oAMCAQICEzMAAAHenkielp8oRD0AAQAAAd4wDQYJKoZIhvcNAQELBQAwfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEyMTkwNzEyWhcNMjUwMTEw
+# MTkwNzEyWjCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
+# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt
+# MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw
+# JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjoyQUQ0LTRCOTItRkEwMTElMCMGA1UEAxMc
+# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBALSB9ByF9UIDhA6xFrOniw/xsDl8sSi9rOCOXSSO4VMQjnNG
+# Ao5VHx0iijMEMH9LY2SUIBkVQS0Ml6kR+TagkUPbaEpwjhQ1mprhRgJT/jlSnic4
+# 2VDAo0en4JI6xnXoAoWoKySY8/ROIKdpphgI7OJb4XHk1P3sX2pNZ32LDY1ktchK
+# 1/hWyPlblaXAHRu0E3ynvwrS8/bcorANO6DjuysyS9zUmr+w3H3AEvSgs2ReuLj2
+# pkBcfW1UPCFudLd7IPZ2RC4odQcEPnY12jypYPnS6yZAs0pLpq0KRFUyB1x6x6OU
+# 73sudiHON16mE0l6LLT9OmGo0S94Bxg3N/3aE6fUbnVoemVc7FkFLum8KkZcbQ7c
+# OHSAWGJxdCvo5OtUtRdSqf85FklCXIIkg4sm7nM9TktUVfO0kp6kx7mysgD0Qrxx
+# 6/5oaqnwOTWLNzK+BCi1G7nUD1pteuXvQp8fE1KpTjnG/1OJeehwKNNPjGt98V0B
+# mogZTe3SxBkOeOQyLA++5Hyg/L68pe+DrZoZPXJaGU/iBiFmL+ul/Oi3d83zLAHl
+# HQmH/VGNBfRwP+ixvqhyk/EebwuXVJY+rTyfbRfuh9n0AaMhhNxxg6tGKyZS4EAE
+# iDxrF9mAZEy8e8rf6dlKIX5d3aQLo9fDda1ZTOw+XAcAvj2/N3DLVGZlHnHlAgMB
+# AAGjggFJMIIBRTAdBgNVHQ4EFgQUazAmbxseaapgdxzK8Os+naPQEsgwHwYDVR0j
+# BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
+# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggr
+# BgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
+# aWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
+# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
+# DQYJKoZIhvcNAQELBQADggIBAOKUwHsXDacGOvUIgs5HDgPs0LZ1qyHS6C6wfKlL
+# aD36tZfbWt1x+GMiazSuy+GsxiVHzkhMW+FqK8gruLQWN/sOCX+fGUgT9LT21cRI
+# pcZj4/ZFIvwtkBcsCz1XEUsXYOSJUPitY7E8bbldmmhYZ29p+XQpIcsG/q+YjkqB
+# W9mw0ru1MfxMTQs9MTDiD28gAVGrPA3NykiSChvdqS7VX+/LcEz9Ubzto/w28WA8
+# HOCHqBTbDRHmiP7MIj+SQmI9VIayYsIGRjvelmNa0OvbU9CJSz/NfMEgf2NHMZUY
+# W8KqWEjIjPfHIKxWlNMYhuWfWRSHZCKyIANA0aJL4soHQtzzZ2MnNfjYY851wHYj
+# GgwUj/hlLRgQO5S30Zx78GqBKfylp25aOWJ/qPhC+DXM2gXajIXbl+jpGcVANwtF
+# FujCJRdZbeH1R+Q41FjgBg4m3OTFDGot5DSuVkQgjku7pOVPtldE46QlDg/2WhPp
+# TQxXH64sP1GfkAwUtt6rrZM/PCwRG6girYmnTRLLsicBhoYLh+EEFjVviXAGTk6p
+# nu8jx/4WPWu0jsz7yFzg82/FMqCk9wK3LvyLAyDHN+FxbHAxtgwad7oLQPM0WGER
+# dB1umPCIiYsSf/j79EqHdoNwQYROVm+ZX10RX3n6bRmAnskeNhi0wnVaeVogLMdG
+# D+nqMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0B
+# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
+# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw
+# HhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOTh
+# pkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xP
+# x2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
+# 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
+# gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYt
+# cI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXA
+# hjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0S
+# idb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSC
+# D/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
+# c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
+# 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
+# N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkr
+# BgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q
+# /y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
+# BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
+# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsG
+# AQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
+# BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
+# MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
+# Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
+# BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+# a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
+# CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnX
+# wnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOw
+# Bb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
+# ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
+# 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+
+# ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgs
+# sU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6
+# OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p
+# /cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
+# TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
+# cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtgwggJB
+# AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
+# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
+# dGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
+# dGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjoyQUQ0LTRCOTItRkEwMTElMCMG
+# A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa
+# AxUAaKBSisy4y86pl8Xy22CJZExE2vOggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOneH+MwIhgPMjAyNDA1MDIy
+# MjIxMjNaGA8yMDI0MDUwMzIyMjEyM1oweDA+BgorBgEEAYRZCgQBMTAwLjAKAgUA
+# 6d4f4wIBADALAgEAAgMBHHgCAf8wBwIBAAICE/YwCgIFAOnfcWMCAQAwNgYKKwYB
+# BAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGG
+# oDANBgkqhkiG9w0BAQUFAAOBgQChqUVzyjSvZsd79JUJddw2P0vHrT2Azx/D5Nh3
+# 3MUFAU0AUMRWx6pqbyHD7Gf0OYljwMdX8TLfsorsODpvMVFyLQQhANBQMzScn6JV
+# YUyJWGlXEFf3zEVmoXzfY3wtQnrDdUVaeg9NoY9ttFqPtJamKUBRZnfPO8xtfvRB
+# gfm8rjGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
+# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
+# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
+# AhMzAAAB3p5InpafKEQ9AAEAAAHeMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG
+# 9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIPwY1dgN5VvcvTqV
+# 5plQyevnS1e+fgC1iSBzw5dUCuhTMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCB
+# vQQgjj4jnw3BXhAQSQJ/5gtzIK0+cP1Ns/NS2A+OB3N+HXswgZgwgYCkfjB8MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
+# b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAd6eSJ6WnyhEPQABAAAB3jAi
+# BCCqlMZRRFgGINs4+HhXdMQi8+rUCVp+3udHqe8NfDTWAjANBgkqhkiG9w0BAQsF
+# AASCAgBcMhgTYN26v6I3JV7eJs/o66WmKPuFe1TK+vbymc5SXRQfupknTCo/PSAK
+# vcjYzEnjCDaUP4Qt/xdn6rEVKyhgMXqabsWYEHuE9my+4+FwEYLGiuo95B9TemkI
+# cZX+KLC8zDpuscI72lWIDt1057lP+LZ6PY1VSk+F7w0vA60CekwN3XlGT7Ba+IQN
+# XInDLnTgYIy2xCRn6t3S+mMWR79sMZ0ONo2kQmGn/JgpaWsnQ4+Nll5Hmr4SWLXi
+# 4Co/1ntTqxzP4o1KuYXnzIbH7WGYcucy/+n3vo+AZqfBGPsitw0ScQepvNx4fJ8/
+# inyhKqLhpE/TgJlOncBBiDuQeXCwZ8yx/QW9j9r7fjadg1NMszxSIcArlwL9DWRb
+# KPR/KlckJmH2RyfYw3aK/gEEASIP9B+XV/EYrHDOqMH0+L5zqpmc4mFKvXhRtm9f
+# mFSv6d0h4CTOsuDi+KngVmgLFoDzVy5zMmJsPocRIJ+hTKkmpHDOvRWlRYndgMXV
+# oBuZMmSJqQPNg4TPq5PqMnxFX7gMjedeQwR0pxS27jIsIw0XMUf99gKMf4+lPqGN
+# 9n+RupRcvUkL5JcovhwKNc3ywwwYxxc+r7+h7UOB089+6UPKa4RFrgJWGd0p30XU
+# XbOINxoKRalc52ksWLsJcZVpygvOxA41ytTTUnUnsRmYs16bDg==
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddDPHTTPS.ps1 b/ExtendMigrateToAzure/postscripts/AddDPHTTPS.ps1
new file mode 100644
index 0000000..84a7703
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddDPHTTPS.ps1
@@ -0,0 +1,289 @@
+
+#ClientCommunication:__HTTPSORNOT__
+#ClientConnectionType:__ClientConnectionType__
+
+$LogList = @()
+$LogList += "Start running add distribution point (HTTPS) script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$Communication = "__HTTPSORNOT__"
+$ClientConnectionType = "__ClientConnectionType__"
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+
+if(!$SystemServer)
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server."
+}
+
+if((get-cmdistributionpoint -SiteSystemServerName $MachineName).count -eq 1)
+{
+ $LogList += "$MachineName is already a Distribution Point."
+ $LogList += 1
+ return $LogList
+}
+else
+{
+ $SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $Date = [DateTime]::Now.AddYears(30)
+ $Date = [DateTime]::Now.AddYears(30)
+ $LogList += "Adding distribution point on $MachineName ..."
+ $LogList += Add-CMDistributionPoint -InputObject $SystemServer -CertificateExpirationTimeUtc $Date
+ $LogList += Set-CMDistributionPoint -SiteSystemServerName $MachineName -ClientCommunicationType $Communication -ClientConnectionType $ClientConnectionType
+ $LogList += "Finished adding distribution point on $MachineName ..."
+
+
+ if((get-cmdistributionpoint -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+# SIG # Begin signature block
+# MIIn4QYJKoZIhvcNAQcCoIIn0jCCJ84CAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC4Gje702+lN5Fh
+# /qA4BxVde4fI/mlnB6ByjHBEkPbVaKCCDXYwggX0MIID3KADAgECAhMzAAADrzBA
+# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
+# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
+# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
+# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
+# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
+# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
+# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
+# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
+# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
+# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
+# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
+# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
+# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
+# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
+# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
+# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
+# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGcEwghm9AgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
+# BQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINkqFDyuVu0yU1IG2uh806Cg
+# w60aknbPtwQDniR88xIEMGAGCisGAQQBgjcCAQwxUjBQoDKAMABFAHgAdABlAG4A
+# ZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBlAHgAZaEagBhodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAQAgdlWNNkZs5lUb9
+# UACCowE+4KpvVwAqsNK8I3TW0i9Cig54s++KtnrQmCv+hviKumTl3ZO+e8ttqVn+
+# djFaLgJP7POblkqFO/RssZzGaNfIBvO9nMgADVI0c2I0QGASTDrs5DSdze8WMHax
+# HqjGtUjgAmCqs5pzJGm9Dzcdtue4PqWRAUbiLqOkQYJAcRG5Bd4XZoMEPhexPsvI
+# 8/wTSehsDco5qNChVPBVMHlGt0XdhET0QDwwPIrzd965k8yZJb6KuDX8Twij+LBU
+# VEmPFsnt8iaF6hNAjzdUFkvtHjhLwvozZgthmvToJw9clEYcxieng4I9/cSTLmUB
+# 5VSfXKGCFy0wghcpBgorBgEEAYI3AwMBMYIXGTCCFxUGCSqGSIb3DQEHAqCCFwYw
+# ghcCAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsqhkiG9w0BCRABBKCCAUgEggFE
+# MIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCDfuMFanQiVZsOP
+# gsa3scnTk3Xv+dB7ZS26tuwjN9xRoQIGZjOqeGCYGBMyMDI0MDUwMjIwNTgwOS41
+# ODdaMASAAgH0oIHYpIHVMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
+# bWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjg2REYtNEJCQy05MzM1MSUw
+# IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIRfDCCBycwggUP
+# oAMCAQICEzMAAAHdXVcdldStqhsAAQAAAd0wDQYJKoZIhvcNAQELBQAwfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEyMTkwNzA5WhcNMjUwMTEw
+# MTkwNzA5WjCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
+# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt
+# MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw
+# JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4NkRGLTRCQkMtOTMzNTElMCMGA1UEAxMc
+# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBAKhOA5RE6i53nHURH4lnfKLp+9JvipuTtctairCxMUSrPSy5
+# CWK2DtriQP+T52HXbN2g7AktQ1pQZbTDGFzK6d03vYYNrCPuJK+PRsP2FPVDjBXy
+# 5mrLRFzIHHLaiAaobE5vFJuoxZ0ZWdKMCs8acjhHUmfaY+79/CR7uN+B4+xjJqwv
+# dpU/mp0mAq3earyH+AKmv6lkrQN8zgrcbCgHwsqvvqT6lEFqYpi7uKn7MAYbSeLe
+# 0pMdatV5EW6NVnXMYOTRKuGPfyfBKdShualLo88kG7qa2mbA5l77+X06JAesMkoy
+# Yr4/9CgDFjHUpcHSODujlFBKMi168zRdLerdpW0bBX9EDux2zBMMaEK8NyxawCEu
+# Aq7++7ktFAbl3hUKtuzYC1FUZuUl2Bq6U17S4CKsqR3itLT9qNcb2pAJ4jrIDdll
+# 5Tgoqef5gpv+YcvBM834bXFNwytd3ujDD24P9Dd8xfVJvumjsBQQkK5T/qy3HrQJ
+# 8ud1nHSvtFVi5Sa/ubGuYEpS8gF6GDWN5/KbveFkdsoTVIPo8pkWhjPs0Q7nA5+u
+# BxQB4zljEjKz5WW7BA4wpmFm24fhBmRjV4Nbp+n78cgAjvDSfTlA6DYBcv2kx1JH
+# 2dIhaRnSeOXePT6hMF0Il598LMu0rw35ViUWcAQkUNUTxRnqGFxz5w+ZusMDAgMB
+# AAGjggFJMIIBRTAdBgNVHQ4EFgQUbqL1toyPUdpFyyHSDKWj0I4lw/EwHwYDVR0j
+# BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
+# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggr
+# BgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
+# aWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
+# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
+# DQYJKoZIhvcNAQELBQADggIBAC5U2bINLgXIHWbMcqVuf9jkUT/K8zyLBvu5h8Jr
+# qYR2z/eaO2yo1Ooc9Shyvxbe9GZDu7kkUzxSyJ1IZksZZw6FDq6yZNT3PEjAEnRE
+# pRBL8S+mbXg+O4VLS0LSmb8XIZiLsaqZ0fDEcv3HeA+/y/qKnCQWkXghpaEMwGMQ
+# zRkhGwcGdXr1zGpQ7HTxvfu57xFxZX1MkKnWFENJ6urd+4teUgXj0ngIOx//l3XM
+# K3Ht8T2+zvGJNAF+5/5qBk7nr079zICbFXvxtidNN5eoXdW+9rAIkS+UGD19AZdB
+# rtt6dZ+OdAquBiDkYQ5kVfUMKS31yHQOGgmFxuCOzTpWHalrqpdIllsy8KNsj5U9
+# sONiWAd9PNlyEHHbQZDmi9/BNlOYyTt0YehLbDovmZUNazk79Od/A917mqCdTqrE
+# xwBGUPbMP+/vdYUqaJspupBnUtjOf/76DAhVy8e/e6zR98PkplmliO2brL3Q3rD6
+# +ZCVdrGM9Rm6hUDBBkvYh+YjmGdcQ5HB6WT9Rec8+qDHmbhLhX4Zdaard5/OXeLb
+# gx2f7L4QQQj3KgqjqDOWInVhNE1gYtTWLHe4882d/k7Lui0K1g8EZrKD7maOrsJL
+# KPKlegceJ9FCqY1sDUKUhRa0EHUW+ZkKLlohKrS7FwjdrINWkPBgbQznCjdE2m47
+# QjTbMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0B
+# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
+# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw
+# HhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOTh
+# pkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xP
+# x2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
+# 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
+# gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYt
+# cI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXA
+# hjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0S
+# idb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSC
+# D/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
+# c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
+# 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
+# N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkr
+# BgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q
+# /y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
+# BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
+# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsG
+# AQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
+# BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
+# MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
+# Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
+# BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+# a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
+# CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnX
+# wnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOw
+# Bb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
+# ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
+# 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+
+# ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgs
+# sU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6
+# OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p
+# /cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
+# TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
+# cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtgwggJB
+# AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
+# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
+# dGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
+# dGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4NkRGLTRCQkMtOTMzNTElMCMG
+# A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa
+# AxUANiNHGWXbNaDPxnyiDbEOciSjFhCggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOneKPAwIhgPMjAyNDA1MDIy
+# MzAwMDBaGA8yMDI0MDUwMzIzMDAwMFoweDA+BgorBgEEAYRZCgQBMTAwLjAKAgUA
+# 6d4o8AIBADALAgEAAgMChb4CAf8wBwIBAAICEW0wCgIFAOnfenACAQAwNgYKKwYB
+# BAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGG
+# oDANBgkqhkiG9w0BAQUFAAOBgQAWrWoEheXdsNh6F10GV75SmZSzO+e6KlIJAz4a
+# 9gNkA/iIWl2FkI71JTedkFnajtOt61x8eAgXtyTi2A2CRZcZna8aeU8Cut9WP1aQ
+# j2Bqoxfu64NcU/HJFqOQ5oLCzel2bH+U8hLDGsm0ZwaILlhRMaIy66vpbtQdyXm0
+# byFhTDGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
+# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
+# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
+# AhMzAAAB3V1XHZXUraobAAEAAAHdMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG
+# 9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEILvlmdRXhBkJXZJL
+# 2qPw5GQtdqTqMK3w9LZh3Upda7XSMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCB
+# vQQgYf8OLZplrE94mZx7R9FZN+1AjdNpUcWPkYjjesAxY2YwgZgwgYCkfjB8MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
+# b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAd1dVx2V1K2qGwABAAAB3TAi
+# BCA/lBI100BkxEB55UhYNh+4YF70NoCY+GK2hItManwfXjANBgkqhkiG9w0BAQsF
+# AASCAgCKbDM4ZEmMLmqiPd+s8fS1HienNsQqbRZihXX4UH1PGEaARdruOVcMtoEM
+# Dlip4SmsfBYFgxhim2cs4zmJiQX0YINJrC+/ATZKSQayN2N2ju4cfNrxpsIZTQr9
+# yUrE7u2ClF8IN29UMAknFEckNu6pqpRZPnGxJvZc4hfQqU+kLezgrRtUaa4rDV44
+# 0B4ONXJL4uDpM/1BkOoE699QkYAnNroKCgaP4SzHiJ3h1Dg/MUdlNQCA/9A8X/T4
+# WtsDRXyDvDnsl/8zXCpZXxXRca7oEraoXt/hyo2MAghjLiNiHxFzDkNmd1y4nkEf
+# GDd9zZy3vvHIDGTDDz898cDSRyWtZSRKrm8qxJsdupkEmVNXK+LVzCJEY3Eww4jN
+# wNHvVhWAAKgUtIG8QMveGS5E3uJjAe4uD5afcwjaqpzA+NeBsmmr0v8FXcl3D2lW
+# L1FygSH1MBhN5RLuI8qa1yRECA/jKIcUm4qKofVuMqQczbEF3QJ8xkLzZXvaE2QI
+# 7A150kDl79tIocFdeiIcoq6xJHwXefIM9zZJPg8PesLwfdZ8jwk3H1jKtkEZju9n
+# 5IRFtTd//sFQoRPQMyn9Z/376HNF5PsQs0M66r1tSfYooxz1lOwX2zLfTDGqVDY4
+# X8z/IvUjEByYjOtp4dyPBJZEJ1WeLlbJmx/dOkNpLUbt1l1q6Q==
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddEmptySiteServer.ps1 b/ExtendMigrateToAzure/postscripts/AddEmptySiteServer.ps1
new file mode 100644
index 0000000..bd32e95
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddEmptySiteServer.ps1
@@ -0,0 +1,268 @@
+
+$LogList = @()
+$LogList += "Start runnng add site server script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+if(!(Get-CMSiteSystemServer -SiteSystemServerName $MachineName))
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+
+
+ if((Get-CMSiteSystemServer -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server , skip running this script."
+ $LogList += 1
+ return $LogList
+}
+
+# SIG # Begin signature block
+# MIIn6wYJKoZIhvcNAQcCoIIn3DCCJ9gCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA1zu8mJJuylrTN
+# 2VB1pf0T8HXVMXJLp0WvyEAlFo15+6CCDYUwggYDMIID66ADAgECAhMzAAADri01
+# UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG
+# yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899
+# QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82
+# 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV
+# M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd
+# WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w
+# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW
+# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
+# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
+# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
+# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
+# AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W
+# 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY
+# 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV
+# APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37
+# ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57
+# xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t
+# Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i
+# 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk
+# 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK
+# 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO
+# zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK
+# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
+# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
+# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
+# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
+# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
+# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
+# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
+# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
+# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
+# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
+# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
+# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
+# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
+# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
+# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
+# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
+# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
+# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
+# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
+# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
+# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
+# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
+# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
+# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
+# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
+# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
+# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
+# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
+# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
+# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
+# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
+# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
+# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
+# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
+# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGbwwghm4AgEBMIGVMH4x
+# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
+# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
+# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA
+# A64wDQYJYIZIAWUDBAIBBQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
+# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIPd
+# 0o2GyQDNlhJ3uIS8EaD9QgU7M8R7CiOOXwxC6MQDMGAGCisGAQQBgjcCAQwxUjBQ
+# oDKAMABFAHgAdABlAG4AZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBl
+# AHgAZaEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAE
+# ggEA6iJCYRgWxznRTa+CrZluZpUTU9ib7zvOUdiRQePPjxp9WqnnO7UIky8UO60U
+# SDXRTavAnaH6Bpfr4hPwXJ+RGV/AFXMbEfn35WJGtX0X1kJ4jVnIN2o3Z5n9NLaP
+# QyXqO1/Q3ZyKIh3kGjPhaMwImCPPw55o7gf5mnQTf5femFu01UMm2fJdEw7sjl5O
+# SSDV4SH5HHh7VthzJ8YK72Rssu3+kUnj+URtACvxq47mIynBoFToGSlIWEpKKN3V
+# u3lccjD8nNEPSsUsppFs0DzN1K1N42Rw7GQhKaWHYVws1DAt4+n80taERK4kOcwA
+# 5GJAxftt9zSE62Fg5ia5Xy4TtqGCFygwghckBgorBgEEAYI3AwMBMYIXFDCCFxAG
+# CSqGSIb3DQEHAqCCFwEwghb9AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsqhkiG
+# 9w0BCRABBKCCAUgEggFEMIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQC
+# AQUABCCnI9bK/pLOF3rDNH3d+9Rv5tNb2pxl5PfBhxVunPXr5AIGZjOoiKMnGBMy
+# MDI0MDUwMjIwNTgwNi40MDRaMASAAgH0oIHYpIHVMIHSMQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu
+# ZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjA4
+# NDItNEJFNi1DMjlBMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
+# aWNloIIRdzCCBycwggUPoAMCAQICEzMAAAHajtXJWgDREbEAAQAAAdowDQYJKoZI
+# hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
+# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
+# MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEy
+# MTkwNjU5WhcNMjUwMTEwMTkwNjU5WjCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
+# dCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0
+# aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjowODQyLTRCRTYt
+# QzI5QTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIw
+# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJOQBgh2tVFR1j8jQA4NDf8bcVrX
+# SN080CNKPSQo7S57sCnPU0FKF47w2L6qHtwm4EnClF2cruXFp/l7PpMQg25E7X8x
+# Dmvxr8BBE6iASAPCfrTebuvAsZWcJYhy7prgCuBf7OidXpgsW1y8p6Vs7sD2aup/
+# 0uveYxeXlKtsPjMCplHkk0ba+HgLho0J68Kdji3DM2K59wHy9xrtsYK+X9erbDGZ
+# 2mmX3765aS5Q7/ugDxMVgzyj80yJn6ULnknD9i4kUQxVhqV1dc/DF6UBeuzfukkM
+# ed7trzUEZMRyla7qhvwUeQlgzCQhpZjz+zsQgpXlPczvGd0iqr7lACwfVGog5plI
+# zdExvt1TA8Jmef819aTKwH1IVEIwYLA6uvS8kRdA6RxvMcb//ulNjIuGceyykMAX
+# EynVrLG9VvK4rfrCsGL3j30Lmidug+owrcCjQagYmrGk1hBykXilo9YB8Qyy5Q1K
+# hGuH65V3zFy8a0kwbKBRs8VR4HtoPYw9z1DdcJfZBO2dhzX3yAMipCGm6Smvmvav
+# RsXhy805jiApDyN+s0/b7os2z8iRWGJk6M9uuT2493gFV/9JLGg5YJJCJXI+yxkO
+# /OXnZJsuGt0+zWLdHS4XIXBG17oPu5KsFfRTHREloR2dI6GwaaxIyDySHYOtvIyd
+# la7u4lfnfCjY/qKTAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUoXyNyVE9ZhOVizEU
+# VwhNgL8PX0UwHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f
+# BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv
+# TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsG
+# AQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAx
+# MCgxKS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO
+# BgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBALmDVdTtuI0jAEt41O2O
+# M8CU237TGMyhrGr7FzKCEFaXxtoqk/IObQriq1caHVh2vyuQ24nz3TdOBv7rcs/q
+# nPjOxnXFLyZPeaWLsNuARVmUViyVYXjXYB5DwzaWZgScY8GKL7yGjyWrh78WJUgh
+# 7rE1+5VD5h0/6rs9dBRqAzI9fhZz7spsjt8vnx50WExbBSSH7rfabHendpeqbTmW
+# /RfcaT+GFIsT+g2ej7wRKIq/QhnsoF8mpFNPHV1q/WK/rF/ChovkhJMDvlqtETWi
+# 97GolOSKamZC9bYgcPKfz28ed25WJy10VtQ9P5+C/2dOfDaz1RmeOb27Kbegha0S
+# fPcriTfORVvqPDSa3n9N7dhTY7+49I8evoad9hdZ8CfIOPftwt3xTX2RhMZJCVoF
+# labHcvfb84raFM6cz5EYk+x1aVEiXtgK6R0xn1wjMXHf0AWlSjqRkzvSnRKzFsZw
+# El74VahlKVhI+Ci9RT9+6Gc0xWzJ7zQIUFE3Jiix5+7KL8ArHfBY9UFLz4snboJ7
+# Qip3IADbkU4ZL0iQ8j8Ixra7aSYfToUefmct3dM69ff4Eeh2Kh9NsKiiph589Ap/
+# xS1jESlrfjL/g/ZboaS5d9a2fA598mubDvLD5x5PP37700vm/Y+PIhmp2fTvuS2s
+# ndeZBmyTqcUNHRNmCk+njV3nMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAA
+# AAAAFTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
+# b3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUg
+# QXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8
+# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
+# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
+# aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2
+# AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpS
+# g0S3po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2r
+# rPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k
+# 45GPsjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSu
+# eik3rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09
+# /SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR
+# 6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxC
+# aC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaD
+# IV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMUR
+# HXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMB
+# AAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQq
+# p1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ
+# 6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB
+# MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP
+# 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWlj
+# cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2
+# LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu
+# bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
+# Y3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2
+# Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03d
+# mLq2HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1Tk
+# eFN1JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kp
+# icO8F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKp
+# W99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrY
+# UP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QB
+# jloZkWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkB
+# RH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0V
+# iY1w/ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq
+# 0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1V
+# M1izoXBm8qGCAtMwggI8AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzAR
+# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
+# Y3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQg
+# T3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjowODQy
+# LTRCRTYtQzI5QTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
+# ZaIjCgEBMAcGBSsOAwIaAxUAQqIfIYljHUbNoY0/wjhXRn/sSA2ggYMwgYCkfjB8
+# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
+# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
+# aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOne
+# JwEwIhgPMjAyNDA1MDIyMjUxNDVaGA8yMDI0MDUwMzIyNTE0NVowczA5BgorBgEE
+# AYRZCgQBMSswKTAKAgUA6d4nAQIBADAGAgEAAgEBMAcCAQACAhF8MAoCBQDp33iB
+# AgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSCh
+# CjAIAgEAAgMBhqAwDQYJKoZIhvcNAQEFBQADgYEAlP7F7476ERx/Koai3iTLGxIE
+# LfX2VyNk4jCOuPZBXtPM43X5gNvcZ/LCoM9GubinKzDRwnrDaZMd4UgRErlEgo9J
+# 3IbfpJ9aWd/6ogsHQiBIx+l5P7leoUdJEXE4oou2j5WAsIsE5x2t10Ivqjftbew0
+# 2vV9jrMTwCXC5rZ43z4xggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEG
+# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
+# cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
+# cCBQQ0EgMjAxMAITMwAAAdqO1claANERsQABAAAB2jANBglghkgBZQMEAgEFAKCC
+# AUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCDu
+# hMMZ58R5rorc3GfntcE4XqWmQ0PAsp8jPhI2woQOgzCB+gYLKoZIhvcNAQkQAi8x
+# geowgecwgeQwgb0EICKlo2liwO+epN73kOPULT3TbQjmWOJutb+d0gI7GD3GMIGY
+# MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
+# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHajtXJWgDR
+# EbEAAQAAAdowIgQgmlMqiaLTb5oLMJOwPthPz45EzH0UVQd3ZScbOaPhzaUwDQYJ
+# KoZIhvcNAQELBQAEggIAJfoIrXjVn5FXyrQeJWrLv3sOKCgQ382p8sdq8zbfZkRW
+# 7iU8Nxaq7TEuRoOzDRHLQukEp04HuxmmM71ZX7XrTPhs2lmBhNF/qatgs6bDaI4D
+# /rVra7s0Oho4y35oSo+TbLR4ziGd1+SmDCDGCX0YnmuKq3+ugebWure3RNhdIoJq
+# p4mRKYlyfbLquJGAM+YmxOaVYdZ0xS3anCfn71bMKiNo7gyOkzc/HDAqTZS2bm6V
+# NcWTQr8O5QvvDqyTCq3O39r9aVeBR+hvhgD28axjo+FcEa+U74VgeJKIMO8nFrs0
+# sG6ts467z/GRwQpr7Drh9qXMwR/g0GbvpWVIod+xC6qVm+67RZpMGTxIGoFJqKDo
+# R3gxlNjoGQktN/OqmbE+1le+HAaWyXmlW1ExoHlCx2N4R39a7fGgehbSh5Sa9iQQ
+# bwVjpJpcFrxvhnZzpSpCSAlFQHygvo65qVilx74noaiEYEvtlrWhm2hTf1oXVxL+
+# mxAZEpXSA6e3kBqq9bkVQza5gUFOocfC3hVlP0a8IBTIoTSfEBrTtCQQMaj55Dq0
+# gVe1HJG1oSsXNwelX1WbSe47YBSPNe/T3p0zxy1GBgxvsHmb5DVkvDIjpqkZR9EM
+# VuXrb2U/2dBdNd27KLL3edKoHpymsgQIy1wiXQFerb7HbO+mzcTQYLxhQvh/zP8=
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddMP.ps1 b/ExtendMigrateToAzure/postscripts/AddMP.ps1
new file mode 100644
index 0000000..fb4a565
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddMP.ps1
@@ -0,0 +1,281 @@
+
+$LogList = @()
+$LogList += "Start running add management point script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+
+if(!$SystemServer)
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server."
+}
+
+if((Get-CMManagementPoint -SiteSystemServerName $MachineName).count -eq 1)
+{
+ $LogList += "$MachineName is already a Management Point."
+ $LogList += 1
+ return $LogList
+}
+else
+{
+ $SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Adding management point on $MachineName ..."
+ $LogList += Add-CMManagementPoint -InputObject $SystemServer -CommunicationType Http
+ $LogList += "Finished adding management point on $MachineName ..."
+
+ if((Get-CMManagementPoint -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+
+# SIG # Begin signature block
+# MIIn3AYJKoZIhvcNAQcCoIInzTCCJ8kCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCagjnjMFJf8jsP
+# Ni8CcZhN5R2J02481POPn4RpnhJFZKCCDXYwggX0MIID3KADAgECAhMzAAADrzBA
+# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
+# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
+# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
+# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
+# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
+# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
+# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
+# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
+# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
+# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
+# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
+# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
+# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
+# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
+# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
+# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
+# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGbwwghm4AgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
+# BQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIEXFqYV5XPzd6R/W5myPo0Ba
+# P2RsR2vh8zn5QaK8d7LVMGAGCisGAQQBgjcCAQwxUjBQoDKAMABFAHgAdABlAG4A
+# ZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBlAHgAZaEagBhodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAboSoqf+rGQ/KwqPg
+# o5gpqFxNOtuZjC32nuFCNkwMAJLF0DMmqfhCW8cJ71Rb5VoWjn1S7MaNdRCmB/ol
+# +f5anm6OdfdPxaTSRKaMLMCVa0bONoRlci2aujcTDe8cM2lyoz6Ysk5JdSQmUW/u
+# 0Tq+u+e3Lp01ris7JQ47psBnJNz13ENNieJnmy+XuMxVVCAZy9UAaFME7UlFEPni
+# 2btQnZMaFGDb5Rp614J0b+L3yoKksoFQCYFD7tE28s374oj5SPQXfDdNCXwOwpUP
+# B/l+DTFNU2QLDJCG08yL6potA2hk7ESh6qRdJ1IVH1lM7YXQx8nMqICQOL1BHqYT
+# n9JPb6GCFygwghckBgorBgEEAYI3AwMBMYIXFDCCFxAGCSqGSIb3DQEHAqCCFwEw
+# ghb9AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsqhkiG9w0BCRABBKCCAUgEggFE
+# MIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCChWfjjzobJVlbt
+# /N1dEQeXRtVdITdudMFy5Rshru9bjwIGZjOpymoMGBMyMDI0MDUwMjIwNTgwOC45
+# MjVaMASAAgH0oIHYpIHVMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
+# bWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjE3OUUtNEJCMC04MjQ2MSUw
+# IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIRdzCCBycwggUP
+# oAMCAQICEzMAAAHg1PwfExUffl0AAQAAAeAwDQYJKoZIhvcNAQELBQAwfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEyMTkwNzE5WhcNMjUwMTEw
+# MTkwNzE5WjCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
+# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt
+# MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw
+# JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjoxNzlFLTRCQjAtODI0NjElMCMGA1UEAxMc
+# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBAKyHnPOhxbvRATnGjb/6fuBhh3ZLzotAxAgdLaZ/zkRFUdeS
+# KzyNt3tqorMK7GDvcXdKs+qIMUbvenlH+w53ssPa6rYP760ZuFrABrfserf0kFay
+# NXVzwT7jarJOEjnFMBp+yi+uwQ2TnJuxczceG5FDHrII6sF6F879lP6ydY0BBZkZ
+# 9t39e/svNRieA5gUnv/YcM/bIMY/QYmd9F0B+ebFYi+PH4AkXahNkFgK85OIaRrD
+# GvhnxOa/5zGL7Oiii7+J9/QHkdJGlfnRfbQ3QXM/5/umBOKG4JoFY1niZ5RVH5PT
+# 0+uCjwcqhTbnvUtfK+N+yB2b9rEZvp2Tv4ZwYzEd9A9VsYMuZiCSbaFMk77LwVbk
+# lpnw4aHWJXJkEYmJvxRbcThE8FQyOoVkSuKc5OWZ2+WM/j50oblA0tCU53AauvUO
+# ZRoQBh89nHK+m5pOXKXdYMJ+ceuLYF8h5y/cXLQMOmqLJz5l7MLqGwU0zHV+MEO8
+# L1Fo2zEEQ4iL4BX8YknKXonHGQacSCaLZot2kyJVRsFSxn0PlPvHVp0YdsCMzdei
+# w9jAZ7K9s1WxsZGEBrK/obipX6uxjEpyUA9mbVPljlb3R4MWI0E2xI/NM6F4Ac8C
+# eax3YWLT+aWCZeqiIMLxyyWZg+i1KY8ZEzMeNTKCEI5wF1wxqr6T1/MQo+8tAgMB
+# AAGjggFJMIIBRTAdBgNVHQ4EFgQUcF4XP26dV+8SusoA1XXQ2TDSmdIwHwYDVR0j
+# BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
+# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggr
+# BgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
+# aWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
+# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
+# DQYJKoZIhvcNAQELBQADggIBAMATzg6R/A0ldO7MqGxD1VJji5yVA1hHb0Hc0Yjt
+# v7WkxQ8iwfflulX5Us64tD3+3NT1JkphWzaAWf2wKdAw35RxtQG1iON3HEZ0X23n
+# de4Kg/Wfbx5rEHkZ9bzKnR/2N5A16+w/1pbwJzdfRcnJT3cLyawr/kYjMWd63OP0
+# Glq70ua4WUE/Po5pU7rQRbWEoQozY24hAqOcwuRcm6Cb0JBeTOCeRBntEKgjKep4
+# pRaQt7b9vusT97WeJcfaVosmmPtsZsawgnpIjbBa55tHfuk0vDkZtbIXjU4mr5dn
+# s9dnanBdBS2PY3N3hIfCPEOszquwHLkfkFZ/9bxw8/eRJldtoukHo16afE/AqP/s
+# mmGJh5ZR0pmgW6QcX+61rdi5kDJTzCFaoMyYzUS0SEbyrDZ/p2KOuKAYNngljiOl
+# llct0uJVz2agfczGjjsKi2AS1WaXvOhgZNmGw42SFB1qaloa8Kaux9Q2HHLE8gee
+# /5rgOnx9zSbfVUc7IcRNodq6R7v+Rz+P6XKtOgyCqW/+rhPmp/n7Fq2BGTRkcy//
+# hmS32p6qyglr2K4OoJDJXxFs6lwc8D86qlUeGjUyo7hVy5VvyA+y0mGnEAuA85ts
+# OcUPlzwWF5sv+B5fz35OW3X4Spk5SiNulnLFRPM5XCsSHqvcbC8R3qwj2w1evPhZ
+# xDuNMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0B
+# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
+# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw
+# HhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOTh
+# pkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xP
+# x2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
+# 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
+# gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYt
+# cI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXA
+# hjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0S
+# idb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSC
+# D/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
+# c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
+# 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
+# N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkr
+# BgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q
+# /y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
+# BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
+# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsG
+# AQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
+# BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
+# MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
+# Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
+# BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+# a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
+# CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnX
+# wnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOw
+# Bb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
+# ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
+# 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+
+# ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgs
+# sU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6
+# OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p
+# /cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
+# TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
+# cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtMwggI8
+# AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
+# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
+# dGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
+# dGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjoxNzlFLTRCQjAtODI0NjElMCMG
+# A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa
+# AxUAbfPR1fBX6HxYfyPx8zYzJU5fIQyggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOneKEIwIhgPMjAyNDA1MDIy
+# MjU3MDZaGA8yMDI0MDUwMzIyNTcwNlowczA5BgorBgEEAYRZCgQBMSswKTAKAgUA
+# 6d4oQgIBADAGAgEAAgECMAcCAQACAhGaMAoCBQDp33nCAgEAMDYGCisGAQQBhFkK
+# BAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJ
+# KoZIhvcNAQEFBQADgYEAl7oE6xsRC+tKSaM+AOP/8WG8b7+wNMv5TeQRWHXDYUMt
+# wcVy6UPZJX2SYYXsTu2wC1ufEusy8tyZP7riGeNi2+RBmPuz935+Yg/czioe26sR
+# togcFjKufQMd3/LXtXB//uc9ujbht5n5KToz8RD3X156hxlXOeQVw7dnGPHD8/Ax
+# ggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
+# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
+# aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAA
+# AeDU/B8TFR9+XQABAAAB4DANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkD
+# MQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCD35YvWZ+jkCMdZ6ldt0Liw
+# lMXt56wgCrjvs7mhxYJR9TCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIOPu
+# Ur/yOeVtOM+9zvsMIJJvhNkClj2cmbnCGwr/aQrBMIGYMIGApH4wfDELMAkGA1UE
+# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
+# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
+# IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHg1PwfExUffl0AAQAAAeAwIgQgzXkB
+# yXtxfH6F+xGCgYG9VWKAxj4m3diicLlVPw8kxoQwDQYJKoZIhvcNAQELBQAEggIA
+# HgLsWiCDwk5eNg9POJk328IbGYjMJh+PorOe0rWR99h0W0pYpHeG+KBGAtWIGYJd
+# X7C4vL9Y50va9TLZz3ODl2vNDluE+R0R+lvDLATwRvVSOnkQop74/PipijHiodpZ
+# eWJp236TCoOrL9yB89gfjc3CTYDINmDr3syBthbkZ3W8E6FNVPspOadCn4dwlpF6
+# HgYV1t4lpvxqlzkBryUvqETAKVoKPAw/hSzZlrCr8k09Iuzhuvv6pkwz9oKaacS7
+# lm02sRVzgrNIBpK6Z2Csd18HzoVlfpMifYruPyDpKQx1ygV1l5uIjGNXLAp+BCcx
+# DBYEnaBkK93t0n1OFmYbny8CfXSArWdq7PPChOU0F+Fqui1tk1rDE27SASJxPwYi
+# PSyL+OmW3eXTfT4RZdpM+H7X32yULF5kbLzK4MIYCvzlrqsDpydXeqDoELkA/DWP
+# X4qoMSz8SYDOMGIUqZhzGoHP0lCJZLp9NCf/DldjFqYHubW2fkyQDQUAGeAgN5w8
+# 3QNe3lFcgoPcii1ChCj1WaG1A/jGtb2uWnwxXT9cvJtGjMh4POXJWGgLmKBoflV4
+# x3dv8QvXAScwUFMm+GGJVDIzwsom7j3DPN1zYEeIUNSRQlYF2TSErR0yH8UL5OiM
+# 3dbPu+sUtc9rX7LWH72wwYS5Bb+J+/ZqxYaCB8PTegE=
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddMPHTTPS.ps1 b/ExtendMigrateToAzure/postscripts/AddMPHTTPS.ps1
new file mode 100644
index 0000000..6e8d27c
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddMPHTTPS.ps1
@@ -0,0 +1,286 @@
+
+#ClientCommunication:__HTTPSORNOT__
+#ClientConnectionType:__ClientConnectionType__
+
+$LogList = @()
+$LogList += "Start running add management point (HTTPS) script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$Communication = "__HTTPSORNOT__"
+$ClientConnectionType = "__ClientConnectionType__"
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+
+if(!$SystemServer)
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server."
+}
+
+if((Get-CMManagementPoint -SiteSystemServerName $MachineName).count -eq 1)
+{
+ $LogList += "$MachineName is already a Management Point."
+ $LogList += 1
+ return $LogList
+}
+else
+{
+ $SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Adding management point on $MachineName ..."
+ $LogList += Add-CMManagementPoint -InputObject $SystemServer -CommunicationType $Communication -ClientConnectionType $ClientConnectionType
+ $LogList += "Finished adding management point on $MachineName ..."
+
+ if((Get-CMManagementPoint -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+
+# SIG # Begin signature block
+# MIIn3wYJKoZIhvcNAQcCoIIn0DCCJ8wCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBwOZe3OlmWKN45
+# PgYjBnXedqr8HwtOZTbqlwSgFwX5HaCCDXYwggX0MIID3KADAgECAhMzAAADrzBA
+# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
+# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
+# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
+# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
+# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
+# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
+# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
+# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
+# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
+# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
+# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
+# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
+# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
+# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
+# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
+# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
+# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGb8wghm7AgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
+# BQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIJ7nIBGEB8kpKYm/WQVsNRuy
+# tWm1gxcJuQcGSdPIEA79MGAGCisGAQQBgjcCAQwxUjBQoDKAMABFAHgAdABlAG4A
+# ZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBlAHgAZaEagBhodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAamNcWCqirVx4chmc
+# OItiP+wn1jbo0Z/TOY3aqX2crdogwC4Vp/86mgWop2R0UdV0nk6CiteqgBzH8NQm
+# cqeq3hagPI8MEownzOYDUGbXQsPWDCC7kpUkiICjpzWvVeHgi8wXf/rK4sT2Zmet
+# j6SZKKKrWfzviFnApLF/oAfbJlFYspJYWbXlccb+/Pxd/yLiShKh2/aZypmIA0pn
+# oZT3CLhKVWDlVx5pKQgkjtDziNF2FPzTxS2Hlhkc1Jj7khn89Owqa/EDK0t3FiVE
+# 7owJTevj7HTtkYmD/tz8v7k3X++ls0ae6YIuqIwjfRk0ZxoaX/TYs4wHT2Ts2vft
+# aFjllaGCFyswghcnBgorBgEEAYI3AwMBMYIXFzCCFxMGCSqGSIb3DQEHAqCCFwQw
+# ghcAAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsqhkiG9w0BCRABBKCCAUgEggFE
+# MIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCDr0ary4OBw7VOc
+# 66nuOMCUQ+Ur3Nt2eteO/h+UPLndFQIGZjOr8DoMGBMyMDI0MDUwMjIwNTgwOS44
+# NzlaMASAAgH0oIHYpIHVMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
+# bWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOkQwODItNEJGRC1FRUJBMSUw
+# IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIRejCCBycwggUP
+# oAMCAQICEzMAAAHcweCMwl9YXo4AAQAAAdwwDQYJKoZIhvcNAQELBQAwfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEyMTkwNzA2WhcNMjUwMTEw
+# MTkwNzA2WjCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
+# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt
+# MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw
+# JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpEMDgyLTRCRkQtRUVCQTElMCMGA1UEAxMc
+# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBAIvIsyA1sjg9kSKJzelrUWF5ShqYWL83amn3SE5JyIVPUC7F
+# 6qTcLphhHZ9idf21f0RaGrU8EHydF8NxPMR2KVNiAtCGPJa8kV1CGvn3beGB2m2l
+# tmqJanG71mAywrkKATYniwKLPQLJ00EkXw5TSwfmJXbdgQLFlHyfA5Kg+pUsJXzq
+# umkIvEr0DXPvptAGqkdFLKwo4BTlEgnvzeTfXukzX8vQtTALfVJuTUgRU7zoP/RF
+# Wt3WagahZ6UloI0FC8XlBQDVDX5JeMEsx7jgJDdEnK44Y8gHuEWRDq+SG9Xo0GIO
+# jiuTWD5uv3vlEmIAyR/7rSFvcLnwAqMdqcy/iqQPMlDOcd0AbniP8ia1BQEUnfZT
+# 3UxyK9rLB/SRiKPyHDlg8oWwXyiv3+bGB6dmdM61ur6nUtfDf51lPcKhK4Vo83pO
+# E1/niWlVnEHQV9NJ5/DbUSqW2RqTUa2O2KuvsyRGMEgjGJA12/SqrRqlvE2fiN5Z
+# mZVtqSPWaIasx7a0GB+fdTw+geRn6Mo2S6+/bZEwS/0IJ5gcKGinNbfyQ1xrvWXP
+# tXzKOfjkh75iRuXourGVPRqkmz5UYz+R5ybMJWj+mfcGqz2hXV8iZnCZDBrrnZiv
+# nErCMh5Flfg8496pT0phjUTH2GChHIvE4SDSk2hwWP/uHB9gEs8p/9Pe/mt9AgMB
+# AAGjggFJMIIBRTAdBgNVHQ4EFgQU6HPSBd0OfEX3uNWsdkSraUGe3dswHwYDVR0j
+# BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
+# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggr
+# BgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
+# aWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
+# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
+# DQYJKoZIhvcNAQELBQADggIBANnrb8Ewr8eX/H1sKt3rnwTDx4AqgHbkMNQo+kUG
+# wCINXS3y1GUcdqsK/R1g6Tf7tNx1q0NpKk1JTupUJfHdExKtkuhHA+82lT7yISp/
+# Y74dqJ03RCT4Q+8ooQXTMzxiewfErVLt8WefebncST0i6ypKv87pCYkxM24bbqbM
+# /V+M5VBppCUs7R+cETiz/zEA1AbZL/viXtHmryA0CGd+Pt9c+adsYfm7qe5UMnS0
+# f/YJmEEMkEqGXCzyLK+dh+UsFi0d4lkdcE+Zq5JNjIHesX1wztGVAtvX0DYDZdN2
+# WZ1kk+hOMblUV/L8n1YWzhP/5XQnYl03AfXErn+1Eatylifzd3ChJ1xuGG76YbWg
+# iRXnDvCiwDqvUJevVRY1qy4y4vlVKaShtbdfgPyGeeJ/YcSBONOc0DNTWbjMbL50
+# qeIEC0lHSpL2rRYNVu3hsHzG8n5u5CQajPwx9PzpsZIeFTNHyVF6kujI4Vo9NvO/
+# zF8Ot44IMj4M7UX9Za4QwGf5B71x57OjaX53gxT4vzoHvEBXF9qCmHRgXBLbRomJ
+# fDn60alzv7dpCVQIuQ062nyIZKnsXxzuKFb0TjXWw6OFpG1bsjXpOo5DMHkysrib
+# xHor4Yz5dZjVyHANyKo0bSrAlVeihcaG5F74SZT8FtyHAW6IgLc5w/3D+R1obDhK
+# Z21WMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0B
+# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
+# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw
+# HhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOTh
+# pkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xP
+# x2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
+# 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
+# gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYt
+# cI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXA
+# hjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0S
+# idb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSC
+# D/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
+# c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
+# 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
+# N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkr
+# BgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q
+# /y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
+# BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
+# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsG
+# AQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
+# BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
+# MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
+# Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
+# BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+# a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
+# CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnX
+# wnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOw
+# Bb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
+# ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
+# 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+
+# ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgs
+# sU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6
+# OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p
+# /cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
+# TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
+# cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtYwggI/
+# AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
+# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
+# dGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
+# dGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpEMDgyLTRCRkQtRUVCQTElMCMG
+# A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa
+# AxUAHDn/cz+3yRkIUCJfSbL3djnQEqaggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOneKmgwIhgPMjAyNDA1MDIy
+# MzA2MTZaGA8yMDI0MDUwMzIzMDYxNlowdjA8BgorBgEEAYRZCgQBMS4wLDAKAgUA
+# 6d4qaAIBADAJAgEAAgEEAgH/MAcCAQACAhFIMAoCBQDp33voAgEAMDYGCisGAQQB
+# hFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAw
+# DQYJKoZIhvcNAQEFBQADgYEAiubm29f2iT06hWs6k5a7wm+FGMIWHUNtdUtXYfLU
+# kWX5T6b2NCPrtjW36ZJ2DzWHtvQhwv28aLrIBKIRl6xWTegDr+dP9jiNdeENFh7b
+# Bpw+de/rqZ7mGSYahh55B6abM0qWJEL3TP2YsRYroObe+TzG0lVf5GNGpujUYlhZ
+# GgkxggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAIT
+# MwAAAdzB4IzCX1hejgABAAAB3DANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcN
+# AQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCDxHpWzpU5mJSk/I1fm
+# EIFiXQF5XzhS4vDTp48t9QP7ADCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0E
+# IFOnF4pq2UQ/jLypnOO5YvQ67QirEQsOFfZMvKXEgg03MIGYMIGApH4wfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHcweCMwl9YXo4AAQAAAdwwIgQg
+# UVHBIVYOFnQ1cv4Qc63cwpMd10yTxbVYUkHgZLg03b0wDQYJKoZIhvcNAQELBQAE
+# ggIAOjCSjqgA5CRpSZetqrtvJzOMYqacu0f75IA4XDkEzugXmhk764+cOR2VlK5m
+# GfG2KWQd8aKKZWeStObODXXI9d87D/NPFkSgbqWvO5bCX5hltw030ZwsaV/7jG2Q
+# L+z0+DURyx7x/DQYssoEcMqtYXwvCUgX7GhO1jk+ZT2irF+8GopqQ8bHNgYiJqYk
+# aGpau+Ma+H/KFq+TavTgrpoDAFOCxEPwpXf+DHpAS+yFh3O4ZUsx5brwEL0sQa4/
+# 6/QNHJ4MoeN9OXsNaJAYV4GMhwstwTLcQIkJGS/BEKorGDRX6R4jjN7xtVvRZ9QI
+# rAD1O4t7bdIF4LZm6mYaWIscZ0RM1nPKar7jFVLDWDv1NJy3o3RviBH70m1SUM5j
+# AA4f6+f9UTeIgsh4Hv34mQkrELk/A4YLR4VrOH/ivQyWEe0OuYA7k+NvZMrsdor+
+# 8AvswFcuNXeQctKrY5Jtfb5TGswcINd2w/QwNVe48CU1SUgAeBeN8OpfI+aEZZC0
+# QUVnYzlZjOmd4UHBp8iGXTYQ+x8foWoMdRlSueQC8FXSrRLw1YoLYhOPJx7WcL+7
+# WKUG7GYLyfrlQztO0REUgofh3W2Me8mu6sYEvBVkOcugdsvzqhDZXmH36OwVJHGR
+# fDhjz25g9puC77G6EkPRMJWO3xvi1cPot0X03jf3tn9xZ+Y=
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddPassiveSite.ps1 b/ExtendMigrateToAzure/postscripts/AddPassiveSite.ps1
new file mode 100644
index 0000000..29be5a9
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddPassiveSite.ps1
@@ -0,0 +1,293 @@
+
+$LogList = @()
+$LogList += "Start running add passive site script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+
+Import-Module "$uiInstallPath\bin\ConfigurationManager.psd1"
+
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$NALPath = "[""Display=\\$($MachineName)\""]MSWNET:[""SMS_SITE=$($SiteCode)""]\\$($MachineName)\"
+
+#Add primary site server to administrators
+$idx = $MachineName.IndexOf(".")
+$psname = $MachineName.SubString(0, $idx) +"$"
+$domainname = $MachineName.SubString($idx + 1)
+$dname = $env:userdomain
+$AdminGroupName = (Get-WmiObject -Class Win32_Group -Filter 'LocalAccount = True AND SID = "S-1-5-32-544"').Name
+$GroupObj = [ADSI]"WinNT://$env:COMPUTERNAME/$AdminGroupName"
+if($GroupObj.IsMember("WinNT://$dname/$psname") -eq $false)
+{
+ $GroupObj.Add("WinNT://$dname/$psname") | out-null
+}
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$ActiveSiteServer = Get-CMSiteRole -RoleName "SMS Site Server" -SiteCode $SiteCode
+
+if($ActiveSiteServer.Count -ne 1)
+{
+ # there is passive site server already
+ $LogList += "$MachineName is already a passive site server , skip running this script."
+ $LogList += 1
+ return $LogList
+}
+
+$LogList += "Creating cm site system server..."
+# Create SMS Site system
+New-CMSiteSystemServer -SiteSystemServerName $MachineName -SiteCode $SiteCode -FdmOperation $True
+
+$LogList += "Finished creating cm site system server."
+
+$LogList += "Creating passive site server role on $MachineName ..."
+# Create passive site server role
+Add-CMPassiveSite -SiteCode $SiteCode -SiteSystemServerName $MachineName -InstallDirectory "C:\sms" -SourceFilePathOption CopySourceFileFromActiveSite
+
+$LogList += "Finished Creating passive site server role on $MachineName ..."
+
+$query = "SELECT * FROM SMS_SCI_SysResUse WHERE SiteCode = '$SiteCode' AND RoleName = 'SMS Site Server'"
+if((Invoke-CMWmiQuery -Query $query | ?{$_.SiteSystemStatus -eq 0}).count -eq 1)
+{
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+}
+else
+{
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+}
+# SIG # Begin signature block
+# MIIoSwYJKoZIhvcNAQcCoIIoPDCCKDgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAEIrBii5ilmJSD
+# IobZYUuBmVJuBEOXmkIOrnFsP9wyI6CCDXYwggX0MIID3KADAgECAhMzAAADrzBA
+# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
+# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
+# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
+# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
+# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
+# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
+# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
+# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
+# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
+# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
+# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
+# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
+# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
+# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
+# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
+# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
+# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGiswghonAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
+# BQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIa5Skku2agyNtUs5jPD7zbY
+# OJqD2uT2KcqQaEhrxbMSMGAGCisGAQQBgjcCAQwxUjBQoDKAMABFAHgAdABlAG4A
+# ZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBlAHgAZaEagBhodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEABSKgzkk0m7zyT3aT
+# 2Ol+kBA2u4vX43s/Tx6De9IGMyGSFkQl8+EKG9Ic/I+5M60qZdi46gUp1QTXfv1u
+# 6uzZP3SgCEaCT/Gcb4pjkeqULgypdBeya/bwFCjBGZVPjkQAZ9foHpfR2JNwWdQ/
+# M+SM6XvGcLOO6vCm/yxmf1t9cbt/hVuR8Ioyq9W6k2ECOjgKM3lK+6qApK9id0I0
+# hYzNWeW4buX/vxOm/hdxDd1xDWZCvUV8PFz58OGOzR5GF1co9DJuYUXxlPMI1vcm
+# 2vPzf/9Matx5m8Y2eD0CSYB+v2e47J7wc5u6OoXKmek6zyT0ZwaFtC7N/lbZsKLD
+# HkEdD6GCF5cwgheTBgorBgEEAYI3AwMBMYIXgzCCF38GCSqGSIb3DQEHAqCCF3Aw
+# ghdsAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9
+# MIIBOQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCAT3OEAdBdkIswx
+# w4gz8PBeZgmKbkAZzMwViHdeT4XMqwIGZjK+tVKNGBMyMDI0MDUwMjIwNTgwNi4w
+# MDZaMASAAgH0oIHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
+# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+# cmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScw
+# JQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNVBAMT
+# HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WgghHtMIIHIDCCBQigAwIBAgIT
+# MwAAAevgGGy1tu847QABAAAB6zANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJV
+# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
+# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
+# ZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMzEyMDYxODQ1MzRaFw0yNTAzMDUxODQ1MzRa
+# MIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
+# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL
+# ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxk
+# IFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1l
+# LVN0YW1wIFNlcnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDB
+# FWgh2lbgV3eJp01oqiaFBuYbNc7hSKmktvJ15NrB/DBboUow8WPOTPxbn7gcmIOG
+# mwJkd+TyFx7KOnzrxnoB3huvv91fZuUugIsKTnAvg2BU/nfN7Zzn9Kk1mpuJ27S6
+# xUDH4odFiX51ICcKl6EG4cxKgcDAinihT8xroJWVATL7p8bbfnwsc1pihZmcvIuY
+# Gnb1TY9tnpdChWr9EARuCo3TiRGjM2Lp4piT2lD5hnd3VaGTepNqyakpkCGV0+cK
+# 8Vu/HkIZdvy+z5EL3ojTdFLL5vJ9IAogWf3XAu3d7SpFaaoeix0e1q55AD94ZwDP
+# +izqLadsBR3tzjq2RfrCNL+Tmi/jalRto/J6bh4fPhHETnDC78T1yfXUQdGtmJ/u
+# tI/ANxi7HV8gAPzid9TYjMPbYqG8y5xz+gI/SFyj+aKtHHWmKzEXPttXzAcexJ1E
+# H7wbuiVk3sErPK9MLg1Xb6hM5HIWA0jEAZhKEyd5hH2XMibzakbp2s2EJQWasQc4
+# DMaF1EsQ1CzgClDYIYG6rUhudfI7k8L9KKCEufRbK5ldRYNAqddr/ySJfuZv3PS3
+# +vtD6X6q1H4UOmjDKdjoW3qs7JRMZmH9fkFkMzb6YSzr6eX1LoYm3PrO1Jea43SY
+# zlB3Tz84OvuVSV7NcidVtNqiZeWWpVjfavR+Jj/JOQIDAQABo4IBSTCCAUUwHQYD
+# VR0OBBYEFHSeBazWVcxu4qT9O5jT2B+qAerhMB8GA1UdIwQYMBaAFJ+nFV0AXmJd
+# g/Tl0mWnG1M1GelyMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9z
+# b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
+# MjAyMDEwKDEpLmNybDBsBggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6
+# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGlt
+# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0l
+# AQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA
+# A4ICAQCDdN8voPd8C+VWZP3+W87c/QbdbWK0sOt9Z4kEOWng7Kmh+WD2LnPJTJKI
+# EaxniOct9wMgJ8yQywR8WHgDOvbwqdqsLUaM4NrertI6FI9rhjheaKxNNnBZzHZL
+# DwlkL9vCEDe9Rc0dGSVd5Bg3CWknV3uvVau14F55ESTWIBNaQS9Cpo2Opz3cRgAY
+# VfaLFGbArNcRvSWvSUbeI2IDqRxC4xBbRiNQ+1qHXDCPn0hGsXfL+ynDZncCfszN
+# rlgZT24XghvTzYMHcXioLVYo/2Hkyow6dI7uULJbKxLX8wHhsiwriXIDCnjLVsG0
+# E5bR82QgcseEhxbU2d1RVHcQtkUE7W9zxZqZ6/jPmaojZgXQO33XjxOHYYVa/BXc
+# Iuu8SMzPjjAAbujwTawpazLBv997LRB0ZObNckJYyQQpETSflN36jW+z7R/nGyJq
+# RZ3HtZ1lXW1f6zECAeP+9dy6nmcCrVcOqbQHX7Zr8WPcghHJAADlm5ExPh5xi1tN
+# Rk+i6F2a9SpTeQnZXP50w+JoTxISQq7vBij2nitAsSLaVeMqoPi+NXlTUNZ2Ndtb
+# Fr6Iir9ZK9ufaz3FxfvDZo365vLOozmQOe/Z+pu4vY5zPmtNiVIcQnFy7JZOiZVD
+# I5bIdwQRai2quHKJ6ltUdsi3HjNnieuE72fT4eWhxtmnN5HYCDCCB3EwggVZoAMC
+# AQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNV
+# BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
+# HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29m
+# dCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIy
+# NVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
+# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
+# b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
+# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9
+# DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2
+# Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N
+# 7dcP2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXc
+# ag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJ
+# j361VI/c+gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjk
+# lqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37Zy
+# L9t9X4C626p+Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M
+# 269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLX
+# pyDwwvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLU
+# HMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode
+# 2o+eFnJpxq57t7c+auIurQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEA
+# ATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYE
+# FJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEB
+# MEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
+# RG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEE
+# AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+# /zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEug
+# SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
+# aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsG
+# AQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jv
+# b0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt
+# 4SwfZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsP
+# MeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++
+# Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9
+# QKC/GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2
+# wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aR
+# AfbOxnT99kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5z
+# bcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nx
+# t67I6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3
+# Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+AN
+# uOaMmdbhIurwJ0I9JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/Z
+# cGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNQMIICOAIBATCB+aGB0aSBzjCB
+# yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
+# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMc
+# TWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBU
+# U1MgRVNOOkEwMDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T
+# dGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQCABol1u1wwwYgUtUowMnqYvbul
+# 3qCBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
+# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
+# JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3
+# DQEBCwUAAgUA6d3l5zAiGA8yMDI0MDUwMjEwMTM1OVoYDzIwMjQwNTAzMTAxMzU5
+# WjB3MD0GCisGAQQBhFkKBAExLzAtMAoCBQDp3eXnAgEAMAoCAQACAhbTAgH/MAcC
+# AQACAhN7MAoCBQDp3zdnAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkK
+# AwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAIIC
+# EvxdwRQjcNmb61aKj9zC8C9BSs1bDd6lb1wVMfIaMXmwH/2eC5YAbSeR0JPWLE18
+# eBpmEDOLkqe0Ndz4MKZ0M2YIusmysNMpKAWYGuUdORORF49O0WDo82hip+5aDs+T
+# dChyaIfzL+VWs3A3KgJuWJcX7dDrhEXHdduV8lfBHr9WeCXNfbOQA8jWLB77xcQm
+# lfn9rcMy3vVQy4oCiiTP1l5MQZPvdWliftOSXIA1lkS1mN0/Qy5kqfiC7v7VCTT/
+# ErHaccwhWuUSQLV8NOzqhVU96DTRmYWRKplReXd+dQrPCd4cvt5lP4L3WAleouuI
+# 5shN7lH9FDb19Wun+7UxggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEG
+# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
+# cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
+# cCBQQ0EgMjAxMAITMwAAAevgGGy1tu847QABAAAB6zANBglghkgBZQMEAgEFAKCC
+# AUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCDg
+# ia2fxymvh8+FQNhLsF51iZEFHE5QptZP9SOV9rUIqjCB+gYLKoZIhvcNAQkQAi8x
+# geowgecwgeQwgb0EIM63a75faQPhf8SBDTtk2DSUgIbdizXsz76h1JdhLCz4MIGY
+# MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
+# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHr4Bhstbbv
+# OO0AAQAAAeswIgQgd7N7LfdMdkVHirHNFdiwGnHRp9pVLZqGxQpoeLqwOx8wDQYJ
+# KoZIhvcNAQELBQAEggIABXp0lUKY2JJOUExYqEUFpCFqXosCQON0pYskCL8xeqmS
+# SpxP8/inC2ztvOoWVKZeg9gd78Q+SIzkF2Vwhf9uf3tXYQs9obz+GulRlg2HHeGk
+# mq94ULp5COWplIx5gajh2R1WS7whLroT5HJCsL8Pj29MKca5L2WyWk5VBBD/NGmZ
+# dWrsOfSBDyE1k24QUgoFRAd6GF4vFxgJ5hrskf/g8V/JNHi3APCnJ138plzYi12G
+# tVw2cqmr2YPXqKTZnNwrb3yuMpgzRkwwhMqXcrDk7cUFdlTwSj3IozoDQfhFmvmx
+# nxEXj6TPK+HFjCTq7392BX6H1T+LyQ6qjgbBF2rHvBvl/cX9hIBGzDyCLNNm1nC/
+# 5spXb9Klbt/Cwwd2oEKx8Lb22wOVhCnB2ChOUMYfAMoq+yWkBJXqiUD+d0HVivgB
+# 2VxNXp+JogXtQ4O55Z21C/i0Xk5ctwRsKnVz2A2GuofEcr6HXMJmW1IrrzPuJ4/u
+# 1s66RSlR1hiX8UqFDvqMikng+SSq4Hi0NXNbXAC+jwDRrxuf07HXtOP8wt2esaDk
+# 5SiM6m+CqWz6YX/cA3/7NYcE6VWyTWFCEbLHCp5OsceYlaOfeYFAZPW3ol2dpWMx
+# G0sxnbEvbT6+wnGkYRv/K7QMTnfTTKyGpzwl6gBKlbmdIDNBJSJB9JulCgnxVHM=
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddSUP.ps1 b/ExtendMigrateToAzure/postscripts/AddSUP.ps1
new file mode 100644
index 0000000..83a85eb
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddSUP.ps1
@@ -0,0 +1,283 @@
+
+$LogList = @()
+$LogList += "Start running add software update point script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+
+if(!$SystemServer)
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server."
+}
+
+if((Get-CMSoftwareUpdatePoint -SiteSystemServerName $MachineName).count -eq 1)
+{
+ $LogList += "$MachineName is already a Software Update Point."
+ $LogList += 1
+ return $LogList
+}
+else
+{
+ $SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Adding cm software update point on $MachineName ..."
+ $LogList += Add-CMSoftwareUpdatePoint -InputObject $SystemServer -WsusIisPort 8530 -WsusIisSslPort 8531
+ $LogList += "Finished adding cm software update point on $MachineName ..."
+
+ if((Get-CMSoftwareUpdatePoint -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+# SIG # Begin signature block
+# MIIoWQYJKoZIhvcNAQcCoIIoSjCCKEYCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAwcFNnF2nB1vNp
+# bAekZjZB667FxboAEpt7F4XnRc39XaCCDYUwggYDMIID66ADAgECAhMzAAADri01
+# UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG
+# yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899
+# QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82
+# 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV
+# M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd
+# WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w
+# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW
+# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
+# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
+# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
+# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
+# AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W
+# 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY
+# 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV
+# APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37
+# ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57
+# xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t
+# Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i
+# 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk
+# 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK
+# 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO
+# zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK
+# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
+# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
+# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
+# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
+# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
+# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
+# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
+# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
+# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
+# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
+# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
+# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
+# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
+# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
+# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
+# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
+# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
+# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
+# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
+# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
+# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
+# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
+# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
+# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
+# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
+# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
+# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
+# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
+# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
+# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
+# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
+# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
+# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
+# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
+# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGiowghomAgEBMIGVMH4x
+# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
+# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
+# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA
+# A64wDQYJYIZIAWUDBAIBBQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
+# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIHQR
+# Stq/0gv7LHfV89lSQM1WjydWDhoe9iadz2py03pCMGAGCisGAQQBgjcCAQwxUjBQ
+# oDKAMABFAHgAdABlAG4AZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBl
+# AHgAZaEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAE
+# ggEAAsH2XOebmJVQJ6gV29KRSRPoeK4/J7ECU/qIh7SYI0YtceQcEKql9Seyl/7u
+# 21L+XaXehmtLcfLzZRlz5a2EOXxZ5aOi8RTAOl8AKfmhmcVMCWX/QELdsI28kt7D
+# CSv0YbRfspmgGGHtBAUqqbYlvBbBfbTo3JuoJ9Aoqd0vo6ytxjF7292nP9biLttv
+# RfR8FKtCUecwWwleUzD0Dnw+lGtrkhtgHYqtgMERikoIh1Z9J30JDPxd8w+IzQez
+# GPhpt/iolw0/eJw+M2BYNeLvjP9KbbEmIprxCQdwIxSbp+GsrrbGafCvRQKK0iRi
+# pTdpT7SW9rqCQArcUr5OLjeDfqGCF5YwgheSBgorBgEEAYI3AwMBMYIXgjCCF34G
+# CSqGSIb3DQEHAqCCF28wghdrAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFRBgsqhkiG
+# 9w0BCRABBKCCAUAEggE8MIIBOAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQC
+# AQUABCB3Aa1TOgtxoBCYTP4s4atljAIQ2clPHC1Z+BJ5nSRaMwIGZjK+tVKpGBIy
+# MDI0MDUwMjIwNTgxMS41M1owBIACAfSggdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh
+# IE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBMDAwLTA1RTAt
+# RDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEe0w
+# ggcgMIIFCKADAgECAhMzAAAB6+AYbLW27zjtAAEAAAHrMA0GCSqGSIb3DQEBCwUA
+# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
+# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT
+# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTIwNjE4NDUzNFoX
+# DTI1MDMwNTE4NDUzNFowgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
+# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
+# YXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAl
+# BgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBMDAwLTA1RTAtRDk0NzElMCMGA1UEAxMc
+# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBAMEVaCHaVuBXd4mnTWiqJoUG5hs1zuFIqaS28nXk2sH8MFuh
+# SjDxY85M/FufuByYg4abAmR35PIXHso6fOvGegHeG6+/3V9m5S6AiwpOcC+DYFT+
+# d83tnOf0qTWam4nbtLrFQMfih0WJfnUgJwqXoQbhzEqBwMCKeKFPzGuglZUBMvun
+# xtt+fCxzWmKFmZy8i5gadvVNj22el0KFav0QBG4KjdOJEaMzYunimJPaUPmGd3dV
+# oZN6k2rJqSmQIZXT5wrxW78eQhl2/L7PkQveiNN0Usvm8n0gCiBZ/dcC7d3tKkVp
+# qh6LHR7WrnkAP3hnAM/6LOotp2wFHe3OOrZF+sI0v5OaL+NqVG2j8npuHh8+EcRO
+# cMLvxPXJ9dRB0a2Yn+60j8A3GLsdXyAA/OJ31NiMw9tiobzLnHP6Aj9IXKP5oq0c
+# daYrMRc+21fMBx7EnUQfvBu6JWTewSs8r0wuDVdvqEzkchYDSMQBmEoTJ3mEfZcy
+# JvNqRunazYQlBZqxBzgMxoXUSxDULOAKUNghgbqtSG518juTwv0ooIS59FsrmV1F
+# g0Cp12v/JIl+5m/c9Lf6+0PpfqrUfhQ6aMMp2OhbeqzslExmYf1+QWQzNvphLOvp
+# 5fUuhibc+s7Ul5rjdJjOUHdPPzg6+5VJXs1yJ1W02qJl5ZalWN9q9H4mP8k5AgMB
+# AAGjggFJMIIBRTAdBgNVHQ4EFgQUdJ4FrNZVzG7ipP07mNPYH6oB6uEwHwYDVR0j
+# BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
+# ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggr
+# BgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
+# aWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
+# AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
+# DQYJKoZIhvcNAQELBQADggIBAIN03y+g93wL5VZk/f5bztz9Bt1tYrSw631niQQ5
+# aeDsqaH5YPYuc8lMkogRrGeI5y33AyAnzJDLBHxYeAM69vCp2qwtRozg2t6u0joU
+# j2uGOF5orE02cFnMdksPCWQv28IQN71FzR0ZJV3kGDcJaSdXe69Vq7XgXnkRJNYg
+# E1pBL0KmjY6nPdxGABhV9osUZsCs1xG9Ja9JRt4jYgOpHELjEFtGI1D7WodcMI+f
+# SEaxd8v7KcNmdwJ+zM2uWBlPbheCG9PNgwdxeKgtVij/YeTKjDp0ju5QslsrEtfz
+# AeGyLCuJcgMKeMtWwbQTltHzZCByx4SHFtTZ3VFUdxC2RQTtb3PFmpnr+M+ZqiNm
+# BdA7fdePE4dhhVr8Fdwi67xIzM+OMABu6PBNrClrMsG/33stEHRk5s1yQljJBCkR
+# NJ+U3fqNb7PtH+cbImpFnce1nWVdbV/rMQIB4/713LqeZwKtVw6ptAdftmvxY9yC
+# EckAAOWbkTE+HnGLW01GT6LoXZr1KlN5Cdlc/nTD4mhPEhJCru8GKPaeK0CxItpV
+# 4yqg+L41eVNQ1nY121sWvoiKv1kr259rPcXF+8Nmjfrm8s6jOZA579n6m7i9jnM+
+# a02JUhxCcXLslk6JlUMjlsh3BBFqLaq4conqW1R2yLceM2eJ64TvZ9Ph5aHG2ac3
+# kdgIMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0B
+# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG
+# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw
+# HhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
+# dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOTh
+# pkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xP
+# x2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
+# 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
+# gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYt
+# cI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXA
+# hjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0S
+# idb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSC
+# D/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
+# c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
+# 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
+# N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkr
+# BgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q
+# /y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
+# BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
+# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsG
+# AQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
+# BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjE
+# MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv
+# Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
+# BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+# a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
+# CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnX
+# wnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOw
+# Bb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
+# ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
+# 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+
+# ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgs
+# sU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6
+# OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p
+# /cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
+# TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
+# cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCA1AwggI4
+# AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
+# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
+# aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYD
+# VQQLEx5uU2hpZWxkIFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1p
+# Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMVAIAGiXW7
+# XDDBiBS1SjAyepi9u6XeoIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
+# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
+# IDIwMTAwDQYJKoZIhvcNAQELBQACBQDp3eXnMCIYDzIwMjQwNTAyMTAxMzU5WhgP
+# MjAyNDA1MDMxMDEzNTlaMHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAOnd5ecCAQAw
+# CgIBAAICFtMCAf8wBwIBAAICE3swCgIFAOnfN2cCAQAwNgYKKwYBBAGEWQoEAjEo
+# MCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG
+# 9w0BAQsFAAOCAQEAggIS/F3BFCNw2ZvrVoqP3MLwL0FKzVsN3qVvXBUx8hoxebAf
+# /Z4LlgBtJ5HQk9YsTXx4GmYQM4uSp7Q13PgwpnQzZgi6ybKw0ykoBZga5R05E5EX
+# j07RYOjzaGKn7loOz5N0KHJoh/Mv5VazcDcqAm5Ylxft0OuERcd125XyV8Eev1Z4
+# Jc19s5ADyNYsHvvFxCaV+f2twzLe9VDLigKKJM/WXkxBk+91aWJ+05JcgDWWRLWY
+# 3T9DLmSp+ILu/tUJNP8SsdpxzCFa5RJAtXw07OqFVT3oNNGZhZEqmVF5d351Cs8J
+# 3hy+3mU/gvdYCV6i64jmyE3uUf0UNvX1a6f7tTGCBA0wggQJAgEBMIGTMHwxCzAJ
+# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
+# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
+# c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB6+AYbLW27zjtAAEAAAHrMA0G
+# CWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJ
+# KoZIhvcNAQkEMSIEIGcPcUhmHJBONXZvJSJrqbjyBegRLHgkXIJryOeirEjUMIH6
+# BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgzrdrvl9pA+F/xIENO2TYNJSAht2L
+# NezPvqHUl2EsLPgwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
+# aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
+# cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
+# MAITMwAAAevgGGy1tu847QABAAAB6zAiBCB3s3st90x2RUeKsc0V2LAacdGn2lUt
+# mobFCmh4urA7HzANBgkqhkiG9w0BAQsFAASCAgCkrNCee8+q+c3PUrhHPcfmu8D7
+# 0WksVyRH6SWecfE1pvcRpVeHUAwGJYZrUZIH8GaCNqCpFgFIZk50/i08AFJ/cjZq
+# 3kFs7KbMLQjoV40QdxBOb62rkHtBWqLdKoOl85O5ty83a+L5uKx64p2irOHzpeeA
+# MUeKOLWGZxXzbVdEI3mwT8hT73QWqKtS75BXSm85xM5z8/nYMUZT6sKMMa6VcxQ4
+# j3MjtHZKsBxN8DdUI9frc+iMUbmW4G9Lsf2N/gbm4v1Nlhn0MEkFI4D3XBoDPrwi
+# 0RPchjx8sr2aM5FXwNEktE/Re7MZLDdcrfgLyllrbMn/HksiLxz0g+v8qD/fIVP7
+# aCvwMhAq7+OW/WxA3OKZI5Fxk0I98EryoPvyRY7EgJfjU2QEZTM+EzSUYnvWzRML
+# xf5SmrfJFGXqUtxHviiYNaYUVm1wHVUjvcG8tg8DOvjWLdtbxAFUQ1Oeekn8+IOc
+# kUSiIkscbVTd/l4RPByhwTQtsteNSETmcsXfoF3kC1n+Go6vRhWyfNhciWR2211D
+# +O9YHrIVS8rHLZtm5bUEO1oDLmSGzQyOmAtY/RW1mArZUgii6QayNU7RBeyWNK3Q
+# +cW1bQfKj6ZZcWf0aRMRSn3v0FCsa88taLBcUd23p+mQ4X+domb0ptjL7YvukWtU
+# VoxcKEiwAjuAQV4iWQ==
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/postscripts/AddSUPHTTPS.ps1 b/ExtendMigrateToAzure/postscripts/AddSUPHTTPS.ps1
new file mode 100644
index 0000000..705cfcc
--- /dev/null
+++ b/ExtendMigrateToAzure/postscripts/AddSUPHTTPS.ps1
@@ -0,0 +1,282 @@
+
+$LogList = @()
+$LogList += "Start running add software update point (HTTPS) script."
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\ConfigMgr10\Setup")
+$uiInstallPath = $subKey.GetValue("UI Installation Directory")
+$modulePath = $uiInstallPath+"bin\ConfigurationManager.psd1"
+Import-Module $modulePath
+$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
+$subKey = $key.OpenSubKey("SOFTWARE\Microsoft\SMS\Identification")
+$SiteCode = $subKey.GetValue("Site Code")
+$MachineName = "__MachineFQDN__"
+$ProviderMachineName = "__ProviderMachineName__"
+$WsusSsl =__WsusSsl__
+$initParams = @{}
+
+# Connect to the site's drive if it is not already present
+$LogList += "Setting PS Drive..."
+while((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null)
+{
+ $LogList += "Get drive failed ,retry in 10s. Please wait."
+ New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams | Out-Null
+ Start-Sleep -Seconds 10
+}
+
+Set-Location "$($SiteCode):\" @initParams
+
+$SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+
+if(!$SystemServer)
+{
+ $LogList += "Creating cm site system server..."
+ $LogList += New-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Finished creating cm site system server."
+}
+else
+{
+ $LogList += "$MachineName is already a Site System Server."
+}
+
+if((Get-CMSoftwareUpdatePoint -SiteSystemServerName $MachineName).count -eq 1)
+{
+ $LogList += "$MachineName is already a Software Update Point."
+ $LogList += 1
+ return $LogList
+}
+else
+{
+ $SystemServer = Get-CMSiteSystemServer -SiteSystemServerName $MachineName
+ $LogList += "Adding cm software update point on $MachineName ..."
+ $LogList += Add-CMSoftwareUpdatePoint -InputObject $SystemServer -WsusIisPort 8530 -WsusIisSslPort 8531 -WsusSsl $WsusSsl
+ $LogList += "Finished adding cm software update point on $MachineName ..."
+
+ if((Get-CMSoftwareUpdatePoint -SiteSystemServerName $MachineName).count -eq 1)
+ {
+ $LogList += "Finished running the script."
+ $LogList += 0
+ return $LogList
+ }
+ else
+ {
+ $LogList += "Failed to run the script."
+ $LogList += 2
+ return $LogList
+ }
+}
+# SIG # Begin signature block
+# MIIn8AYJKoZIhvcNAQcCoIIn4TCCJ90CAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCByugQpLXQKgW6N
+# tNtEgPiBgp5EiHArlb3AZyqNT7Ii+6CCDYUwggYDMIID66ADAgECAhMzAAADri01
+# UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG
+# yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899
+# QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82
+# 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV
+# M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd
+# WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w
+# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW
+# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
+# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
+# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
+# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
+# AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W
+# 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY
+# 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV
+# APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37
+# ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57
+# xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t
+# Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i
+# 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk
+# 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK
+# 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO
+# zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK
+# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
+# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
+# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
+# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
+# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
+# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
+# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
+# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
+# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
+# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
+# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
+# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
+# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
+# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
+# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
+# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
+# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
+# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
+# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
+# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
+# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
+# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
+# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
+# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
+# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
+# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
+# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
+# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
+# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
+# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
+# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
+# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
+# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
+# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
+# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGcEwghm9AgEBMIGVMH4x
+# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
+# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
+# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA
+# A64wDQYJYIZIAWUDBAIBBQCggcwwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
+# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIHs7
+# qYWzTyiuB42lJMRDByM5Nx6t0SiTp6TFpPpRN5P4MGAGCisGAQQBgjcCAQwxUjBQ
+# oDKAMABFAHgAdABlAG4AZABNAGkAZwByAGEAdABlAFQAbwBBAHoAdQByAGUALgBl
+# AHgAZaEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAE
+# ggEAsFHvAwKACz7B24wHIA8D/V78YtgnzhehE4ZbdhHBS/W40VjtE5pXjasa2zLK
+# 5hW+s2sirO6Iygp1pjwS5B9RFuUEJC4oG4h5D/AqEmwP/oLDsffrKQzVK/5Y+vB1
+# H8PGodVbrtnVBtxcRLM8BYXsnFS5IB922EBz9F6nhYM6FJFH+FjYWdmz+Q6YcH4u
+# RdWFkZUts9mUn1q6RtIMBgakObg/LNt4ZRWgvtflKjKUM4uGGOF7TUMCfs0lKI21
+# ZbTqlMCaqRtWUV9UabRqcpdnOcK2q6TOeK4rIh21C0Xs6e+zPMBhAhYoe+7xNB6A
+# MU6uFTfFKJO+a4SSIFyVOwAMkqGCFy0wghcpBgorBgEEAYI3AwMBMYIXGTCCFxUG
+# CSqGSIb3DQEHAqCCFwYwghcCAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsqhkiG
+# 9w0BCRABBKCCAUgEggFEMIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQC
+# AQUABCAs3VF3hSGIc1OxcInzdplI1JoPcHRtmVfV9lLDf+7YFQIGZjOqeGBbGBMy
+# MDI0MDUwMjIwNTgwNy41NTFaMASAAgH0oIHYpIHVMIHSMQswCQYDVQQGEwJVUzET
+# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
+# TWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu
+# ZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjg2
+# REYtNEJCQy05MzM1MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
+# aWNloIIRfDCCBycwggUPoAMCAQICEzMAAAHdXVcdldStqhsAAQAAAd0wDQYJKoZI
+# hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
+# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
+# MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEy
+# MTkwNzA5WhcNMjUwMTEwMTkwNzA5WjCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
+# dCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0
+# aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4NkRGLTRCQkMt
+# OTMzNTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIw
+# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKhOA5RE6i53nHURH4lnfKLp+9Jv
+# ipuTtctairCxMUSrPSy5CWK2DtriQP+T52HXbN2g7AktQ1pQZbTDGFzK6d03vYYN
+# rCPuJK+PRsP2FPVDjBXy5mrLRFzIHHLaiAaobE5vFJuoxZ0ZWdKMCs8acjhHUmfa
+# Y+79/CR7uN+B4+xjJqwvdpU/mp0mAq3earyH+AKmv6lkrQN8zgrcbCgHwsqvvqT6
+# lEFqYpi7uKn7MAYbSeLe0pMdatV5EW6NVnXMYOTRKuGPfyfBKdShualLo88kG7qa
+# 2mbA5l77+X06JAesMkoyYr4/9CgDFjHUpcHSODujlFBKMi168zRdLerdpW0bBX9E
+# Dux2zBMMaEK8NyxawCEuAq7++7ktFAbl3hUKtuzYC1FUZuUl2Bq6U17S4CKsqR3i
+# tLT9qNcb2pAJ4jrIDdll5Tgoqef5gpv+YcvBM834bXFNwytd3ujDD24P9Dd8xfVJ
+# vumjsBQQkK5T/qy3HrQJ8ud1nHSvtFVi5Sa/ubGuYEpS8gF6GDWN5/KbveFkdsoT
+# VIPo8pkWhjPs0Q7nA5+uBxQB4zljEjKz5WW7BA4wpmFm24fhBmRjV4Nbp+n78cgA
+# jvDSfTlA6DYBcv2kx1JH2dIhaRnSeOXePT6hMF0Il598LMu0rw35ViUWcAQkUNUT
+# xRnqGFxz5w+ZusMDAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUbqL1toyPUdpFyyHS
+# DKWj0I4lw/EwHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f
+# BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv
+# TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsG
+# AQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAx
+# MCgxKS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO
+# BgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAC5U2bINLgXIHWbMcqVu
+# f9jkUT/K8zyLBvu5h8JrqYR2z/eaO2yo1Ooc9Shyvxbe9GZDu7kkUzxSyJ1IZksZ
+# Zw6FDq6yZNT3PEjAEnREpRBL8S+mbXg+O4VLS0LSmb8XIZiLsaqZ0fDEcv3HeA+/
+# y/qKnCQWkXghpaEMwGMQzRkhGwcGdXr1zGpQ7HTxvfu57xFxZX1MkKnWFENJ6urd
+# +4teUgXj0ngIOx//l3XMK3Ht8T2+zvGJNAF+5/5qBk7nr079zICbFXvxtidNN5eo
+# XdW+9rAIkS+UGD19AZdBrtt6dZ+OdAquBiDkYQ5kVfUMKS31yHQOGgmFxuCOzTpW
+# HalrqpdIllsy8KNsj5U9sONiWAd9PNlyEHHbQZDmi9/BNlOYyTt0YehLbDovmZUN
+# azk79Od/A917mqCdTqrExwBGUPbMP+/vdYUqaJspupBnUtjOf/76DAhVy8e/e6zR
+# 98PkplmliO2brL3Q3rD6+ZCVdrGM9Rm6hUDBBkvYh+YjmGdcQ5HB6WT9Rec8+qDH
+# mbhLhX4Zdaard5/OXeLbgx2f7L4QQQj3KgqjqDOWInVhNE1gYtTWLHe4882d/k7L
+# ui0K1g8EZrKD7maOrsJLKPKlegceJ9FCqY1sDUKUhRa0EHUW+ZkKLlohKrS7Fwjd
+# rINWkPBgbQznCjdE2m47QjTbMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAA
+# AAAAFTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
+# b3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUg
+# QXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8
+# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
+# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
+# aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQAD
+# ggIPADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2
+# AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpS
+# g0S3po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2r
+# rPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k
+# 45GPsjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSu
+# eik3rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09
+# /SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR
+# 6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxC
+# aC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaD
+# IV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMUR
+# HXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMB
+# AAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQq
+# p1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ
+# 6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0
+# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB
+# MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP
+# 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWlj
+# cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2
+# LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu
+# bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
+# Y3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2
+# Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03d
+# mLq2HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1Tk
+# eFN1JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kp
+# icO8F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKp
+# W99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrY
+# UP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QB
+# jloZkWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkB
+# RH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0V
+# iY1w/ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq
+# 0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1V
+# M1izoXBm8qGCAtgwggJBAgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzAR
+# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
+# Y3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQg
+# T3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4NkRG
+# LTRCQkMtOTMzNTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
+# ZaIjCgEBMAcGBSsOAwIaAxUANiNHGWXbNaDPxnyiDbEOciSjFhCggYMwgYCkfjB8
+# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
+# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
+# aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOne
+# KPAwIhgPMjAyNDA1MDIyMzAwMDBaGA8yMDI0MDUwMzIzMDAwMFoweDA+BgorBgEE
+# AYRZCgQBMTAwLjAKAgUA6d4o8AIBADALAgEAAgMChb4CAf8wBwIBAAICEW0wCgIF
+# AOnfenACAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQAC
+# AwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQAWrWoEheXdsNh6F10G
+# V75SmZSzO+e6KlIJAz4a9gNkA/iIWl2FkI71JTedkFnajtOt61x8eAgXtyTi2A2C
+# RZcZna8aeU8Cut9WP1aQj2Bqoxfu64NcU/HJFqOQ5oLCzel2bH+U8hLDGsm0ZwaI
+# LlhRMaIy66vpbtQdyXm0byFhTDGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVT
+# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
+# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
+# LVN0YW1wIFBDQSAyMDEwAhMzAAAB3V1XHZXUraobAAEAAAHdMA0GCWCGSAFlAwQC
+# AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkE
+# MSIEIBdouR/hYhF1K+uqt+lO7hMyebL+w7UNVyzWNGQDky0UMIH6BgsqhkiG9w0B
+# CRACLzGB6jCB5zCB5DCBvQQgYf8OLZplrE94mZx7R9FZN+1AjdNpUcWPkYjjesAx
+# Y2YwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
+# MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+# MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAd1d
+# Vx2V1K2qGwABAAAB3TAiBCA/lBI100BkxEB55UhYNh+4YF70NoCY+GK2hItManwf
+# XjANBgkqhkiG9w0BAQsFAASCAgCDUfbjXapAxzN5PqvOTQr8/u0S+0XxmoJe28xA
+# S0VylHV/fcuiYMqGUP4gCETAiJq+XU96g8gfHt1jAC741I38habr8bwn5bgAAFrI
+# O2wsSmM5jW2sptmeDHFe8rof8TFmGCNwZuOrWEDQf4Vy18V9J2kln1rEYYaF9csI
+# w7a0++u1tr4Uqs6KqqyDQ5WrTVBe8R58HHVlow5bBPSGJU5F2p8NZ1FbpBXb6w4/
+# uTDmdvl+l1s3JuzkrqibiMDdGyx2rpl/BUHXy3oHc+gc3/A7/gs5+QQD1C29Zf9E
+# GN1C04Qc8KKqUsQUr1POspk5ff0GTa2N37rtlkQlMsoHASeVRoPUdcfo6y4rRcNw
+# cz6gCLXsFmxXyyeVFgJqSW9apKmY/3RNl9jXJPiasNKCLesj6iFP41C3W/cW1UHC
+# hfj1BNWUw99K3X8IWIthcbdYIoAXkLPQV/iD4/Y45lKN2/ni11QvOm53dWk4LlvP
+# UL0aikcvVjMRbNt78LoGP0+22U5gyCyhrYbrwGx7sVeAhTmNutk7UoN5v7xnPxeb
+# NjwT1rExQwv5eSTwiKJWqnRB5SEvnPvdvkvR6xYcrhC5z7BXHT+eLLo9n0We6UCp
+# sAZCwEyJie14lSavrCE92/cW3PdXXDaQ7k+qfATQRrb2EOqMe26vtgyAPksMd5cD
+# 4qGXSQ==
+# SIG # End signature block
diff --git a/ExtendMigrateToAzure/scripts/DSCConfiguration.zip b/ExtendMigrateToAzure/scripts/DSCConfiguration.zip
new file mode 100644
index 0000000..2043f56
Binary files /dev/null and b/ExtendMigrateToAzure/scripts/DSCConfiguration.zip differ
diff --git a/OfflineUpdateExporter/Microsoft.ConfigurationManager.CabinetUtils.dll b/OfflineUpdateExporter/Microsoft.ConfigurationManager.CabinetUtils.dll
new file mode 100644
index 0000000..798df7f
Binary files /dev/null and b/OfflineUpdateExporter/Microsoft.ConfigurationManager.CabinetUtils.dll differ
diff --git a/OfflineUpdateExporter/OfflineUpdateExporter.exe b/OfflineUpdateExporter/OfflineUpdateExporter.exe
new file mode 100644
index 0000000..c0f3046
Binary files /dev/null and b/OfflineUpdateExporter/OfflineUpdateExporter.exe differ
diff --git a/OfflineUpdateExporter/patchdownloader.dll b/OfflineUpdateExporter/patchdownloader.dll
new file mode 100644
index 0000000..40a3834
Binary files /dev/null and b/OfflineUpdateExporter/patchdownloader.dll differ
diff --git a/PortConfiguration/Portswitch.vbs b/PortConfiguration/Portswitch.vbs
new file mode 100644
index 0000000..742b370
--- /dev/null
+++ b/PortConfiguration/Portswitch.vbs
@@ -0,0 +1,579 @@
+'--------------------------------------------------------------------
+' Portswitch.vbs
+' Usage: Portswitch (HTTP port number)
+' Example:Portswitch 1337
+' (c) Microsoft Corporation. All rights reserved.
+'
+' This script will set the HTTP port on which the
+' ConfigMgr Advanced Client will use to communicate with the Management Point.
+' This script is intended to be used with software distribution.
+' Because file associations can change it is recommended that you execute portswitch.vbs in the
+' following way:
+'
+' The command line provided in the package's program should be "wscript.exe portswitch.vbs
+' (HTTP port number) (optional: HTTPS port number)"
+'
+' Example: "Wscript.exe portswitch.vbs 1337 31337"
+'
+'
+' To properly generate pass/fail status for software distribution you must do the following:
+' 1) In the ConfigMgr package, set the MIF matching properties to the following:
+' MIF Filename: "Portswitch.mif"
+' 2) In the ConfigMgr Program, you must specify that the "Program will reboot"
+' (this is because CCMExec restarts)
+'
+'--------------------------------------------------------------------
+
+Dim objShell 'This establishes the variable Shell that will become the WScript.Shell object.
+Dim nPortValue, nSslPortValue, nReadValue 'Holds the value passed as a command argument
+Dim CCMService
+
+Const EVENT_SUCESS = 0
+Const EVENT_FAILED = 2
+
+Const Reg_PortKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\HttpPort" 'Set constant as the registry path to the desired key.
+Const Reg_PortKeySSL = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\HttpsPort" 'SSL port for ConfigMgr client
+
+' Create a WScript.Shell oject
+Set objShell = Wscript.CreateObject("Wscript.Shell")
+
+' check the argument count
+iNumberOfArguments = Wscript.Arguments.Count
+If iNumberOfArguments > 2 or iNumberOfArguments < 1 Then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs was executed with no specified port. " & _
+ "Usage: Portswitch (HTTP port number) " & _
+ "(optional HTTPS port number). Examples: ""Portswitch 8080"" or ""PortSwitch 8080 8443"""
+ FailAndQuit
+End if
+
+On Error Resume Next
+' Validate the port arguments, and set the ports in the registry
+nPortValue = CLng(Wscript.Arguments.Item(0))
+ValidatePort nPortValue
+
+' If we have an SSL port, validate it, too.
+If iNumberOfArguments = 2 Then
+ nSslPortValue = CLng(Wscript.Arguments.Item(1))
+ If nSslPortValue = nPortValue Then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs had an invalid port specification: HTTP and HTTPS ports cannot be identical."
+ FailAndQuit
+ End If
+
+ ValidatePort nSslPortValue
+ WriteRegKey Reg_PortKeySSL, nSslPortValue
+End If
+
+WriteRegKey Reg_PortKey, nPortValue
+
+Set objWmiservice = GetObject("winmgmts:root\cimv2:Win32_Service.Name=""CCMExec""")
+
+' Stop the CCMExec so the port change may be picked up by the client.
+errReturnCode = objWMIService.StopService()
+
+If errReturnCode <> 0 Then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs was unable to stop the CCMExec service: (Err=" & errReturnCode & ")"
+ FailAndQuit
+End If
+
+' Wait for the ccmexec service to stop (to a maximum of 10 minutes)
+Dim dWaitUntil
+dWaitUntil = DateAdd("n", 10, Now)
+Do While (objWMIService.InterrogateService() <> 6) And (Now < dWaitUntil)
+ ' The service is still running
+ WScript.Sleep 1000
+Loop
+
+' Did the service stop?
+If objWMIService.InterrogateService() <> 6 then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs timed out trying to stop the CCMExec service after 3 minutes."
+ FailAndQuit
+End If
+
+If Err.number <> 0 Then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs - An error occured: " & Err.Description
+ FailAndQuit
+End If
+
+' Generate a success status mif
+WriteStatusMIF(true)
+
+' Starting CCMExec so the port change may be picked up by the client.
+errReturnCode = objWMIService.StartService ()
+If iNumberOfArguments = 2 Then
+ objShell.LogEvent EVENT_SUCCESS, _
+ "The ConfigMgr Advanced Client has been successfully set to communicate with the MP on ports " & nPortValue & " (HTTP) and " & nSslPortValue & " (HTTPS)"
+Else
+ objShell.LogEvent EVENT_SUCCESS, _
+ "The ConfigMgr Advanced Client has been successfully set to communicate with the MP on port " & nPortValue
+End If
+
+WScript.Quit(0)
+' -----------------------------
+
+ErrorHandler:
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch failed with an internal error: " & Err.Description
+ FailAndQuit
+
+' -----------------------------
+Sub ValidatePort(nPort)
+ If Err.number <> 0 Then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs - An invalid port number was specified (Valid ports are 1-65535). " & _
+ "Usage: Portswitch (HTTP port number) Example: Portswitch 8080"
+ FailAndQuit
+ End If
+
+ ' Check the port value
+ If nPort < 1 or nPort > 65535 then
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch.vbs was executed with an invalid port number (" & nPort & "). Port numbers must fall " & _
+ "between 1-65535 Usage: Portswitch (HTTP port number) Example: Portswitch 8080"
+ FailAndQuit
+ End if
+End Sub
+
+' -----------------------------
+Sub WriteRegKey(sRegKey, nPort)
+ nReadValue = objShell.RegRead(sRegKey)
+ If nReadValue then
+ ' Write current path to registry key and read it to become constant for script.
+ objShell.RegWrite (sRegKey), nPort, "REG_DWORD"
+ nReadValue = objShell.RegRead(sRegKey)
+ else
+ objShell.LogEvent EVENT_FAILED, _
+ "Portswitch is unable to modify the Registry. The Registry Key is not present. This must be an RTM Advanced Client or a Legacy Client."
+ FailAndQuit
+ End If
+End Sub
+
+' -----------------------------
+Sub FailAndQuit()
+ WriteStatusMIF(false)
+ WScript.Quit(1)
+End Sub
+
+
+' -----------------------------
+Sub WriteStatusMIF(bSuccess)
+
+ ' Writing a status MIF for SWDist to return a success or a failure to execute
+ Const ForWriting = 2
+ Const TemporaryFolder = 2
+ Set objFSO = CreateObject("Scripting.FileSystemObject")
+ Dim strTempDir
+ strTempDir = objFSO.GetSpecialFolder(TemporaryFolder)
+ Set objFile = objFSO.CreateTextFile(strTempDir & "\portswitch.mif", ForWriting)
+ objFile.Writeline ("START COMPONENT")
+ objFile.Writeline ("NAME = ""WORKSTATION""")
+ objFile.Writeline (" START GROUP")
+ objFile.Writeline (" NAME = ""ComponentID""")
+ objFile.Writeline (" ID = 1")
+ objFile.Writeline (" CLASS = ""DMTF|ComponentID|1.0""")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Manufacturer""")
+ objFile.Writeline (" ID = 1")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(64)")
+ objFile.Writeline (" VALUE = ""Microsoft""")
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Product""")
+ objFile.Writeline (" ID = 2")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(64)")
+ objFile.Writeline (" VALUE = ""Portswitch""")
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Version""")
+ objFile.Writeline (" ID = 3")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(64)")
+ objFile.Writeline (" VALUE = ""1.0""")
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Locale""")
+ objFile.Writeline (" ID = 4")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(16)")
+ objFile.Writeline (" VALUE = ""ENU""")
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Serial Number""")
+ objFile.Writeline (" ID = 5")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(64)")
+ objFile.Writeline (" VALUE = """"")
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Installation""")
+ objFile.Writeline (" ID = 6")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(64)")
+ objFile.Writeline (" VALUE = ""DateTime""")
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" END GROUP")
+ objFile.Writeline (" START GROUP")
+ objFile.Writeline (" NAME = ""InstallStatus""")
+ objFile.Writeline (" ID = 2")
+ objFile.Writeline (" CLASS = ""MICROSOFT|JOBSTATUS|1.0""")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Status""")
+ objFile.Writeline (" ID = 1")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(32)")
+
+ ' Pass or fail this status mif?
+ If bSuccess = true then
+ objFile.Writeline (" VALUE = ""Success""")
+ else
+ objFile.Writeline (" VALUE = ""Failed""")
+ End if
+
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" START ATTRIBUTE")
+ objFile.Writeline (" NAME = ""Description""")
+ objFile.Writeline (" ID = 2")
+ objFile.Writeline (" ACCESS = READ-ONLY")
+ objFile.Writeline (" STORAGE = SPECIFIC")
+ objFile.Writeline (" TYPE = STRING(128)")
+
+ If bSuccess = true and iNumberOfArguments = 2 then
+ objFile.Writeline (" VALUE = ""The ConfigMgr Advanced Client has been successfully set to communicate with the MP on ports " & nPortValue & " (HTTP) and " & nSslPortValue & " (HTTPS)""")
+ ElseIf bSuccess = true then
+ objFile.Writeline (" VALUE = ""The ConfigMgr Advanced Client has been successfully set to communicate with the MP on ports " & nPortValue & """")
+ Else
+ objFile.Writeline (" VALUE = ""The ConfigMgr Advanced Client has not been set to communicate with the MP on the specified port. See the client's Application Event Log for more details""")
+ End If
+
+ objFile.Writeline (" END ATTRIBUTE")
+ objFile.Writeline (" END GROUP")
+ objFile.Writeline ("END COMPONENT")
+
+End Sub
+
+'' SIG '' Begin signature block
+'' SIG '' MIIn+wYJKoZIhvcNAQcCoIIn7DCCJ+gCAQExDzANBglg
+'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
+'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
+'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
+'' SIG '' kNoyQ+kEDMJy5X6lruwNc6Pgdomi/DC06UKEA/dNZYmg
+'' SIG '' gg2FMIIGAzCCA+ugAwIBAgITMwAAA64tNVHIU49VHQAA
+'' SIG '' AAADrjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
+'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
+'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
+'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
+'' SIG '' aWduaW5nIFBDQSAyMDExMB4XDTIzMTExNjE5MDg1OVoX
+'' SIG '' DTI0MTExNDE5MDg1OVowdDELMAkGA1UEBhMCVVMxEzAR
+'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
+'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+'' SIG '' bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+'' SIG '' 9CD8pjY3wxCoPmMhOkow7ycCltfqYnqk4wGNApzh2dTY
+'' SIG '' +YqxozWTzJUOB38VxsgFQmXBFhOMdrGYGpvO9kdbNPkw
+'' SIG '' HpTrW6hZqFuLLiRwGKEx4ZM5zVSqbHJuX2fPfUJ0Xmb+
+'' SIG '' VrVsGw/BwBV2zz0rVtiSgqj3GeeGOsG7llfWyrSjyJqm
+'' SIG '' 5DHE3o04BAI/NuhkHOv04euiqJGvHFCL8+fXvyD9OAxq
+'' SIG '' 4fcJKtoyBb0PBA3oMNQeCsiUyLO+voZqVTOUsAWY0bN5
+'' SIG '' YjkK4nq5DVaNdVrrowd5AX9gmz6D/TJTssns6pDCG00Y
+'' SIG '' +Dh3ipWpnVmkhYcByyUSEKX3PLC8DkiAQQIDAQABo4IB
+'' SIG '' gjCCAX4wHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYB
+'' SIG '' BQUHAwMwHQYDVR0OBBYEFIcf73Spl4cHOFoll27H9COd
+'' SIG '' 4fE/MFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRNaWNy
+'' SIG '' b3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx
+'' SIG '' FjAUBgNVBAUTDTIzMDAxMis1MDE4MzYwHwYDVR0jBBgw
+'' SIG '' FoAUSG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0fBE0w
+'' SIG '' SzBJoEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+'' SIG '' L3BraW9wcy9jcmwvTWljQ29kU2lnUENBMjAxMV8yMDEx
+'' SIG '' LTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMwUQYIKwYB
+'' SIG '' BQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+'' SIG '' a2lvcHMvY2VydHMvTWljQ29kU2lnUENBMjAxMV8yMDEx
+'' SIG '' LTA3LTA4LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3
+'' SIG '' DQEBCwUAA4ICAQBqyWA1Eu7PKNMjaaxl0V7gJ0XBysUo
+'' SIG '' xZluMHJXFE2LEGZIZ2zMLYVjOnAGG/4dluRjSrZZo/8v
+'' SIG '' wk4Xt8v6NBB9ofo8H1P/XidHytWTv9lg9MYu++6lPmu5
+'' SIG '' fCozD3cI2NLZPW2BBhGX2D0R8tQBj0FbmZRuIucpiQ7D
+'' SIG '' K3CHKlfKcc7MP8pPzuMv55Tox8+KFQD1NG6+bfbYA/BN
+'' SIG '' PBkg4tyOh+exbaHfcNuodDJUIjq9dF6oa+Yjy0u0pUMI
+'' SIG '' /B1t+8m6rJo0KSoZlrpesYl0jRhpt+hmqx8uENXoGJcY
+'' SIG '' ZVJ5N2Skq90LViKNRhi9N4U+e8c4y9uXyomUF/6viCPJ
+'' SIG '' 7huTNEJo75ehIJba+IWd3txUEc0R3y6DT6txC6cW1nR/
+'' SIG '' LTbo9I/8fQq538G5IvJ+e5iSiOSVVkVk0i5m03Awy5E2
+'' SIG '' ZSS4PVdQSCcFxmN4tpEfYuR7AAy/GJVtIDFlUpSgdXok
+'' SIG '' pSui5hYtK1R9enXXvo+U/xGkLRc+qp4De3dZbzu7pOq7
+'' SIG '' V/jCyhuCw0bEIAU4urCGIip7TI6GBRzD7yPzjFIqeZY7
+'' SIG '' S4rVW5BRn2oEqpm8Su6yTIQvMIk8x2pwYNUa2339Z4gW
+'' SIG '' 5xW21eFA5mLpo7NRSKRQms5OgAA18aCgqOU7Ds0h6q/Y
+'' SIG '' B4BmEAtoTMl/TBiyKaMGAlEcdy+5FIhmzojMGjCCB3ow
+'' SIG '' ggVioAMCAQICCmEOkNIAAAAAAAMwDQYJKoZIhvcNAQEL
+'' SIG '' BQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
+'' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
+'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMT
+'' SIG '' KU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhv
+'' SIG '' cml0eSAyMDExMB4XDTExMDcwODIwNTkwOVoXDTI2MDcw
+'' SIG '' ODIxMDkwOVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+'' SIG '' Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
+'' SIG '' BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYG
+'' SIG '' A1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0Eg
+'' SIG '' MjAxMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+'' SIG '' ggIBAKvw+nIQHC6t2G6qghBNNLrytlghn0IbKmvpWlCq
+'' SIG '' uAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnVARQxQtOJ
+'' SIG '' DXlkh36UYCRsr55JnOloXtLfm1OyCizDr9mpK656Ca/X
+'' SIG '' llnKYBoF6WZ26DJSJhIv56sIUM+zRLdd2MQuA3WraPPL
+'' SIG '' bfM6XKEW9Ea64DhkrG5kNXimoGMPLdNAk/jj3gcN1Vx5
+'' SIG '' pUkp5w2+oBN3vpQ97/vjK1oQH01WKKJ6cuASOrdJXtjt
+'' SIG '' 7UORg9l7snuGG9k+sYxd6IlPhBryoS9Z5JA7La4zWMW3
+'' SIG '' Pv4y07MDPbGyr5I4ftKdgCz1TlaRITUlwzluZH9TupwP
+'' SIG '' rRkjhMv0ugOGjfdf8NBSv4yUh7zAIXQlXxgotswnKDgl
+'' SIG '' mDlKNs98sZKuHCOnqWbsYR9q4ShJnV+I4iVd0yFLPlLE
+'' SIG '' tVc/JAPw0XpbL9Uj43BdD1FGd7P4AOG8rAKCX9vAFbO9
+'' SIG '' G9RVS+c5oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/C
+'' SIG '' HFfbg43sTUkwp6uO3+xbn6/83bBm4sGXgXvt1u1L50kp
+'' SIG '' pxMopqd9Z4DmimJ4X7IvhNdXnFy/dygo8e1twyiPLI9A
+'' SIG '' N0/B4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+TzOE
+'' SIG '' 2rCIF96eTvSWsLxGoGyY0uDWiIwLAgMBAAGjggHtMIIB
+'' SIG '' 6TAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUSG5k
+'' SIG '' 5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGCNxQCBAwe
+'' SIG '' CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB
+'' SIG '' /wQFMAMBAf8wHwYDVR0jBBgwFoAUci06AjGQQ7kUBU7h
+'' SIG '' 6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDov
+'' SIG '' L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj
+'' SIG '' dHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNy
+'' SIG '' bDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0
+'' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv
+'' SIG '' TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNydDCB
+'' SIG '' nwYDVR0gBIGXMIGUMIGRBgkrBgEEAYI3LgMwgYMwPwYI
+'' SIG '' KwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv
+'' SIG '' bS9wa2lvcHMvZG9jcy9wcmltYXJ5Y3BzLmh0bTBABggr
+'' SIG '' BgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBwAG8AbABp
+'' SIG '' AGMAeQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkq
+'' SIG '' hkiG9w0BAQsFAAOCAgEAZ/KGpZjgVHkaLtPYdGcimwuW
+'' SIG '' EeFjkplCln3SeQyQwWVfLiw++MNy0W2D/r4/6ArKO79H
+'' SIG '' qaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpLHPM8QotS
+'' SIG '' 0LD9a+M+By4pm+Y9G6XUtR13lDni6WTJRD14eiPzE32m
+'' SIG '' kHSDjfTLJgJGKsKKELukqQUMm+1o+mgulaAqPyprWElj
+'' SIG '' HwlpblqYluSD9MCP80Yr3vw70L01724lruWvJ+3Q3fMO
+'' SIG '' r5kol5hNDj0L8giJ1h/DMhji8MUtzluetEk5CsYKwsat
+'' SIG '' ruWy2dsViFFFWDgycScaf7H0J/jeLDogaZiyWYlobm+n
+'' SIG '' t3TDQAUGpgEqKD6CPxNNZgvAs0314Y9/HG8VfUWnduVA
+'' SIG '' KmWjw11SYobDHWM2l4bf2vP48hahmifhzaWX0O5dY0Hj
+'' SIG '' Wwechz4GdwbRBrF1HxS+YWG18NzGGwS+30HHDiju3mUv
+'' SIG '' 7Jf2oVyW2ADWoUa9WfOXpQlLSBCZgB/QACnFsZulP0V3
+'' SIG '' HjXG0qKin3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs
+'' SIG '' 6jeZeRhL/9azI2h15q/6/IvrC4DqaTuv/DDtBEyO3991
+'' SIG '' bWORPdGdVk5Pv4BXIqF4ETIheu9BCrE/+6jMpF3BoYib
+'' SIG '' V3FWTkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16UM0x
+'' SIG '' ghnOMIIZygIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEG
+'' SIG '' A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+'' SIG '' ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
+'' SIG '' MSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5n
+'' SIG '' IFBDQSAyMDExAhMzAAADri01UchTj1UdAAAAAAOuMA0G
+'' SIG '' CWCGSAFlAwQCAQUAoIHeMBkGCSqGSIb3DQEJAzEMBgor
+'' SIG '' BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEE
+'' SIG '' AYI3AgEVMC8GCSqGSIb3DQEJBDEiBCA0WmhIyaCB433Q
+'' SIG '' btKGvSlstI+NGeScr9S1mJTSgSORSDByBgorBgEEAYI3
+'' SIG '' AgEMMWQwYqBEgEIARABlAHMAawB0AG8AcABBAG4AYQBs
+'' SIG '' AHkAdABpAGMAcwBMAG8AZwBzAEMAbwBsAGwAZQBjAHQA
+'' SIG '' bwByAC4AcABzADGhGoAYaHR0cDovL3d3dy5taWNyb3Nv
+'' SIG '' ZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBAJ9zK+4HpCF+
+'' SIG '' MUnwpdesD9BH6r7upuQnz2Islc44ygwusOykI7QwsqTM
+'' SIG '' 0zimy+ptdC3/LT2tobs3Qg/fbLvTqpQpvjtO4Lb/4j5o
+'' SIG '' beSb75ATIe/PiTxCtU/2ItsxBNZq/vciBHBPcQrjOxw0
+'' SIG '' c+bdqsqoKkViOngFhOnezGpmj3LsiSn697jifm7top4m
+'' SIG '' hEhMML0ekqqfOQ4KP3TUF9ltBWrDCjiDaEyP//w6o56c
+'' SIG '' KEHJQ2JFFIuedJ9ACLgW85h/RY1cuJAXN6+79JuLHQgT
+'' SIG '' 7PurvxR+idMyjCWNXCXYy13ZVKYryNA9gmtH6OQxi3ht
+'' SIG '' oIFv78IMoqfwXgEAIK1/9PuhghcoMIIXJAYKKwYBBAGC
+'' SIG '' NwMDATGCFxQwghcQBgkqhkiG9w0BBwKgghcBMIIW/QIB
+'' SIG '' AzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcNAQkQ
+'' SIG '' AQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEwMTAN
+'' SIG '' BglghkgBZQMEAgEFAAQgSr696137b/L1iZdh+gDumG0i
+'' SIG '' y7UFdJv/wZFbrf7GFXYCBmYzqJqqQxgTMjAyNDA1MDIy
+'' SIG '' MDU1NDYuMzg1WjAEgAIB9KCB2KSB1TCB0jELMAkGA1UE
+'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
+'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
+'' SIG '' b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IEly
+'' SIG '' ZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQL
+'' SIG '' Ex1UaGFsZXMgVFNTIEVTTjozQkQ0LTRCODAtNjlDMzEl
+'' SIG '' MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
+'' SIG '' dmljZaCCEXcwggcnMIIFD6ADAgECAhMzAAAB5Y9qwPM9
+'' SIG '' tAujAAEAAAHlMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
+'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
+'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
+'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
+'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTAxMjE5MDcz
+'' SIG '' NVoXDTI1MDExMDE5MDczNVowgdIxCzAJBgNVBAYTAlVT
+'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
+'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
+'' SIG '' YXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5k
+'' SIG '' IE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhh
+'' SIG '' bGVzIFRTUyBFU046M0JENC00QjgwLTY5QzMxJTAjBgNV
+'' SIG '' BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw
+'' SIG '' ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCp
+'' SIG '' e+A62rtjuiy6yTtx8k7zvWl2ov/3jcj+TC1ma5lBjTiT
+'' SIG '' D8DCNPFfcwX0TzXLnK3iGEsiR45DCFBprodKz1ef9vlA
+'' SIG '' ixqzdT++5/X6v5nc1zDdRc6mjx3ShJSp3iUPEenD+Ha7
+'' SIG '' thspprda6xnDXvNNAnA+nfzXaKJppHdfelajrY2RQNV1
+'' SIG '' rvhrBQXlh4ns/z5ZanDP3lp7ZEDLNJStM5gnx/gbu4tY
+'' SIG '' fhQ0UfBe1s1K/+zN44VXT6QH6ts2AgPGVSzYBIs2PrxZ
+'' SIG '' oMfsw7rlPxgoQyu5JQ3AsPv4FaBLkjpeXJULMnVkIySV
+'' SIG '' +2dslftSguhtSVaqT93aSjwD/+LnTaqUeRyHm/E2tSX4
+'' SIG '' 0VM0r96ko3ucvUWE/wI1jWEO4LHs7g1jP/HGddZHKNSb
+'' SIG '' 1MjkPMfyQ5DBakkcI9b/pnOiyipY//3Vghvx8PaaXZVi
+'' SIG '' V+qbA3rELkEexVe3gqlf5X2o6C6Tzcf/cxdXb/MlwXc5
+'' SIG '' liT3gontl2kJ6wCg6pRt817sfbTUJs9i/ek3cZyDtjhp
+'' SIG '' mMQQAGQFqCm5rWCPgos+AmMjtBZuWd0+NGuXeyibn7Re
+'' SIG '' gk6HHHP1Kf46RX0IrS343e9XEvnCwnqEPqtJ9CAC71fm
+'' SIG '' nGxDaLkjq47/0LWOBSIx5SOc3ScyZxrJFSeaM4Y4tGEb
+'' SIG '' HL9VsCRQLssgjELy3Zj3XQIDAQABo4IBSTCCAUUwHQYD
+'' SIG '' VR0OBBYEFN//n4e7TXMxInxF5QkIBTl4DIeqMB8GA1Ud
+'' SIG '' IwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1Ud
+'' SIG '' HwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0
+'' SIG '' LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUt
+'' SIG '' U3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF
+'' SIG '' BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cu
+'' SIG '' bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z
+'' SIG '' b2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSku
+'' SIG '' Y3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYI
+'' SIG '' KwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3
+'' SIG '' DQEBCwUAA4ICAQAz+sIThYw9WnfBpBCfaCwbr3453TMh
+'' SIG '' kPUeB4ASkpT7d6WtF1S3IpqyZQ5yhoBQYlsCOlzoMPNo
+'' SIG '' XaJQ4jAwSy1kTEyR1lXlGNYFOFwfDjiMQXPf0PN829XN
+'' SIG '' EVhLqYAuPCPm/tsdlTYBiVLECMj0dj4l0IU+T8nqzIGo
+'' SIG '' PTkqHUIxcKTXRoq52tq6VdtxFMBXjuft6El+CXgjWb4M
+'' SIG '' lDsyqcjL6lWrm6PhpX/6bH1ubSHDI2VbdHpbMH6tKiTU
+'' SIG '' IKGIqW2k77+8ZosVCRk24sWIn08AIrz3CjXXorGZrbbO
+'' SIG '' zh2wDO/eWbyi0hKl4kVIw2Gcnh8gMrDBAC2yIXV4BxIe
+'' SIG '' tCqGcs5QV891cRIqxO54bnDcDNrVYjpcCOxJHlOYbnXL
+'' SIG '' Z1whueSbjMP8G+3O9USopmQPyl5VqZgb5CZAdAWREvDg
+'' SIG '' hg3fs2P0/QZ06fLIt+k6pfOFX6WHvYh5suz6qsajBdgp
+'' SIG '' +KtmtJhDJ6Qa7gxhP4EfXPElSdp7ZAEcuUn5brifzAet
+'' SIG '' ckb09ZlMd5cqaTttnj4wY58KBL1cWw409Y4XTDXXrzrg
+'' SIG '' 3iRs0SyvRzZkwwvk3WUJY/lTICJvGXhCETRdKGr4hfkG
+'' SIG '' XFGS1s1m2Kusg6JPBGShYkUeaLQaBi72mBacQWVBPJpy
+'' SIG '' yrg5WKG468Ye5Z8K8Vf3zMtBfX0qNicRZrS4LTCCB3Ew
+'' SIG '' ggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJ
+'' SIG '' KoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD
+'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
+'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
+'' SIG '' MjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj
+'' SIG '' YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIy
+'' SIG '' NVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMx
+'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
+'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
+'' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
+'' SIG '' bXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+'' SIG '' DwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3u
+'' SIG '' nAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VT
+'' SIG '' cVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aO
+'' SIG '' RmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlh
+'' SIG '' AnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S
+'' SIG '' /rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc
+'' SIG '' 6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1o
+'' SIG '' O5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbni
+'' SIG '' jYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3E
+'' SIG '' XzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr
+'' SIG '' bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M
+'' SIG '' 269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFph
+'' SIG '' AXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6Cm
+'' SIG '' gyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr
+'' SIG '' 9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfH
+'' SIG '' CBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQAB
+'' SIG '' o4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkr
+'' SIG '' BgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4w
+'' SIG '' HQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwG
+'' SIG '' A1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYB
+'' SIG '' BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
+'' SIG '' a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUE
+'' SIG '' DDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMA
+'' SIG '' dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+'' SIG '' AwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX
+'' SIG '' zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
+'' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
+'' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYB
+'' SIG '' BQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3
+'' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl
+'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsF
+'' SIG '' AAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5O
+'' SIG '' R2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts
+'' SIG '' 0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp
+'' SIG '' 4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRX
+'' SIG '' ud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFd
+'' SIG '' PSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZ
+'' SIG '' QhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzs
+'' SIG '' kYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCr
+'' SIG '' dTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5
+'' SIG '' JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxn
+'' SIG '' GSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU
+'' SIG '' CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3
+'' SIG '' Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzba
+'' SIG '' ukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRb
+'' SIG '' atGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNT
+'' SIG '' TY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggLTMIICPAIB
+'' SIG '' ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD
+'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
+'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
+'' SIG '' LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+'' SIG '' dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT
+'' SIG '' UyBFU046M0JENC00QjgwLTY5QzMxJTAjBgNVBAMTHE1p
+'' SIG '' Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH
+'' SIG '' BgUrDgMCGgMVAPeNohrmBa7BOMM1g3fORKTOkYsKoIGD
+'' SIG '' MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
+'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
+'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
+'' SIG '' DQYJKoZIhvcNAQEFBQACBQDp3icNMCIYDzIwMjQwNTAy
+'' SIG '' MjI1MTU3WhgPMjAyNDA1MDMyMjUxNTdaMHMwOQYKKwYB
+'' SIG '' BAGEWQoEATErMCkwCgIFAOneJw0CAQAwBgIBAAIBCDAH
+'' SIG '' AgEAAgIRVzAKAgUA6d94jQIBADA2BgorBgEEAYRZCgQC
+'' SIG '' MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQow
+'' SIG '' CAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADaQqHja
+'' SIG '' OqoHQOVEUxJ0LoKdCagtOxJfD3099ShJlCv3vUni6+3H
+'' SIG '' GPKMH46NjPwqRE+gazyrJAR1sEnnrM+jlmA6Ybde0GlC
+'' SIG '' 7NQUjSVI/LU9ie9XkodPq28cc5KXmny1roGN3UByBene
+'' SIG '' hsSHrJ63JCzv//vI4XGwGemjCYKmz3oYMYIEDTCCBAkC
+'' SIG '' AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
+'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
+'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC
+'' SIG '' EzMAAAHlj2rA8z20C6MAAQAAAeUwDQYJYIZIAWUDBAIB
+'' SIG '' BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
+'' SIG '' BDAvBgkqhkiG9w0BCQQxIgQgO/d+xJXyipEnhQB5YCKb
+'' SIG '' /510ev/Bpllc+uySGfDQNiIwgfoGCyqGSIb3DQEJEAIv
+'' SIG '' MYHqMIHnMIHkMIG9BCAVqdP//qjxGFhe2YboEXeb8I/p
+'' SIG '' Aof01CwhbxUH9U697TCBmDCBgKR+MHwxCzAJBgNVBAYT
+'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
+'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
+'' SIG '' cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
+'' SIG '' LVN0YW1wIFBDQSAyMDEwAhMzAAAB5Y9qwPM9tAujAAEA
+'' SIG '' AAHlMCIEIIxI1X5ALp6rnWH5V1diADKb7ruIm50/mvcH
+'' SIG '' f/g5juuhMA0GCSqGSIb3DQEBCwUABIICAGNonK74S7hT
+'' SIG '' zX8qp/LdUDLYemNFd6lC/VyG/wGUm1KRz7xb+chJDA9z
+'' SIG '' rEumYQR8ZvS6B6bhbhRMi34xoAKA/saTgtGDr/zT3hGp
+'' SIG '' n79JJt4F9d/bBUwt2am+PIX+PbnQl90VUYqGVml21fbE
+'' SIG '' bmym5kuOWPa3ro59yMZ7QcKs1ZFYSNzUNacQ52XuGsZP
+'' SIG '' 07l77Nm5ECWPzXfuBCmbDsxeK7LDBCeptTO3DAIrtkDf
+'' SIG '' p+dx2eO4d0E3bqQ0buISKCh/ERqVP+D5kvFx4xE/z8ag
+'' SIG '' RazCysLFvzElldhnWf0+6+AOgT++2r0LKJf52NpytAA+
+'' SIG '' TBw4tgFQKhai5+jn5k0Y7r0kyFtQ76r7szNbobPKkxEB
+'' SIG '' v69Gwq9prlezA7knth/NjnZdFgkmiMTJkX4BS23Kouvn
+'' SIG '' 2Hz5qMZk3bcS4UM+wyOr85xq8DeN8hVj9eiUWTOlXEJQ
+'' SIG '' lGD+o196BgWD+Yi1Rap3K84gXyXOpbXK83aYDlWGCJxo
+'' SIG '' fAga1ZUIhqol7Q++SMllOjmKcGb+1kSRUFo30BaEaT81
+'' SIG '' 8cViNmglvbi4fCWG38dhhWKxDil+4LLMjPsKyS6tnEvS
+'' SIG '' VWB2iv/l1hDfTeCarsJVxnPbQY8vo4mE2vVBhA8Bwc/E
+'' SIG '' oZpQMEDaKUHHCJ+qlAKwmnbqbWH1+Kj3FRJeU5MvKR22
+'' SIG '' aeejB/WQJnsi
+'' SIG '' End signature block
diff --git a/ServerTools/AdminUI.WqlQueryEngine.dll b/ServerTools/AdminUI.WqlQueryEngine.dll
new file mode 100644
index 0000000..f5d4f2f
Binary files /dev/null and b/ServerTools/AdminUI.WqlQueryEngine.dll differ
diff --git a/ServerTools/ContentLibraryExplorer.exe b/ServerTools/ContentLibraryExplorer.exe
new file mode 100644
index 0000000..d0c4459
Binary files /dev/null and b/ServerTools/ContentLibraryExplorer.exe differ
diff --git a/ServerTools/ContentLibraryTransfer.exe b/ServerTools/ContentLibraryTransfer.exe
new file mode 100644
index 0000000..9245508
Binary files /dev/null and b/ServerTools/ContentLibraryTransfer.exe differ
diff --git a/ServerTools/ContentOwnershipTool.exe b/ServerTools/ContentOwnershipTool.exe
new file mode 100644
index 0000000..41bf9d7
Binary files /dev/null and b/ServerTools/ContentOwnershipTool.exe differ
diff --git a/ServerTools/DPJobMgr.exe b/ServerTools/DPJobMgr.exe
new file mode 100644
index 0000000..491b657
Binary files /dev/null and b/ServerTools/DPJobMgr.exe differ
diff --git a/ServerTools/Microsoft.ConfigurationManagement.ManagementProvider.dll b/ServerTools/Microsoft.ConfigurationManagement.ManagementProvider.dll
new file mode 100644
index 0000000..c36476b
Binary files /dev/null and b/ServerTools/Microsoft.ConfigurationManagement.ManagementProvider.dll differ
diff --git a/ServerTools/Microsoft.Diagnostics.Tracing.EventSource.dll b/ServerTools/Microsoft.Diagnostics.Tracing.EventSource.dll
new file mode 100644
index 0000000..c390180
Binary files /dev/null and b/ServerTools/Microsoft.Diagnostics.Tracing.EventSource.dll differ
diff --git a/ServerTools/RunMeterSumm.exe b/ServerTools/RunMeterSumm.exe
new file mode 100644
index 0000000..d452f94
Binary files /dev/null and b/ServerTools/RunMeterSumm.exe differ
diff --git a/ServiceConnectionTool/Microsoft.ConfigurationManager.CabinetUtils.dll b/ServiceConnectionTool/Microsoft.ConfigurationManager.CabinetUtils.dll
new file mode 100644
index 0000000..798df7f
Binary files /dev/null and b/ServiceConnectionTool/Microsoft.ConfigurationManager.CabinetUtils.dll differ
diff --git a/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.Common.dll b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.Common.dll
new file mode 100644
index 0000000..0b70222
Binary files /dev/null and b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.Common.dll differ
diff --git a/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.Connector.dll b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.Connector.dll
new file mode 100644
index 0000000..102b340
Binary files /dev/null and b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.Connector.dll differ
diff --git a/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.DataUpload.dll b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.DataUpload.dll
new file mode 100644
index 0000000..990361c
Binary files /dev/null and b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.DataUpload.dll differ
diff --git a/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.MessageDownload.dll b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.MessageDownload.dll
new file mode 100644
index 0000000..8b6c8c1
Binary files /dev/null and b/ServiceConnectionTool/Microsoft.ConfigurationManager.DmpConnector.MessageDownload.dll differ
diff --git a/ServiceConnectionTool/Microsoft.ConfigurationManager.ManagedBase.dll b/ServiceConnectionTool/Microsoft.ConfigurationManager.ManagedBase.dll
new file mode 100644
index 0000000..bda298d
Binary files /dev/null and b/ServiceConnectionTool/Microsoft.ConfigurationManager.ManagedBase.dll differ
diff --git a/ServiceConnectionTool/ServiceConnectionTool.exe b/ServiceConnectionTool/ServiceConnectionTool.exe
new file mode 100644
index 0000000..e4b6649
Binary files /dev/null and b/ServiceConnectionTool/ServiceConnectionTool.exe differ
diff --git a/ServiceConnectionTool/baseutil.dll b/ServiceConnectionTool/baseutil.dll
new file mode 100644
index 0000000..d759919
Binary files /dev/null and b/ServiceConnectionTool/baseutil.dll differ
diff --git a/ServiceConnectionTool/setupdl.exe b/ServiceConnectionTool/setupdl.exe
new file mode 100644
index 0000000..5f39c4a
Binary files /dev/null and b/ServiceConnectionTool/setupdl.exe differ
diff --git a/SupportCenter/SupportCenterInstaller.msi b/SupportCenter/SupportCenterInstaller.msi
new file mode 100644
index 0000000..16a6be5
Binary files /dev/null and b/SupportCenter/SupportCenterInstaller.msi differ
diff --git a/UploadOfflineFeedback/CommandLine.dll b/UploadOfflineFeedback/CommandLine.dll
new file mode 100644
index 0000000..f293e1e
Binary files /dev/null and b/UploadOfflineFeedback/CommandLine.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.ConfigurationManagement.Feedback.Common.dll b/UploadOfflineFeedback/Microsoft.ConfigurationManagement.Feedback.Common.dll
new file mode 100644
index 0000000..e67d32d
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.ConfigurationManagement.Feedback.Common.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.ConfigurationManagement.ManagementProvider.dll b/UploadOfflineFeedback/Microsoft.ConfigurationManagement.ManagementProvider.dll
new file mode 100644
index 0000000..c36476b
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.ConfigurationManagement.ManagementProvider.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.ConfigurationManager.CabinetUtils.dll b/UploadOfflineFeedback/Microsoft.ConfigurationManager.CabinetUtils.dll
new file mode 100644
index 0000000..798df7f
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.ConfigurationManager.CabinetUtils.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.Diagnostics.Tracing.EventSource.dll b/UploadOfflineFeedback/Microsoft.Diagnostics.Tracing.EventSource.dll
new file mode 100644
index 0000000..c390180
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.Diagnostics.Tracing.EventSource.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.Identity.Client.Extensions.Msal.dll b/UploadOfflineFeedback/Microsoft.Identity.Client.Extensions.Msal.dll
new file mode 100644
index 0000000..661af6d
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.Identity.Client.Extensions.Msal.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.Identity.Client.dll b/UploadOfflineFeedback/Microsoft.Identity.Client.dll
new file mode 100644
index 0000000..07e8186
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.Identity.Client.dll differ
diff --git a/UploadOfflineFeedback/Microsoft.WindowsAzure.Storage.dll b/UploadOfflineFeedback/Microsoft.WindowsAzure.Storage.dll
new file mode 100644
index 0000000..d25230b
Binary files /dev/null and b/UploadOfflineFeedback/Microsoft.WindowsAzure.Storage.dll differ
diff --git a/UploadOfflineFeedback/NewtonSoft.Json.dll b/UploadOfflineFeedback/NewtonSoft.Json.dll
new file mode 100644
index 0000000..31c2f52
Binary files /dev/null and b/UploadOfflineFeedback/NewtonSoft.Json.dll differ
diff --git a/UploadOfflineFeedback/System.ValueTuple.dll b/UploadOfflineFeedback/System.ValueTuple.dll
new file mode 100644
index 0000000..b63769a
Binary files /dev/null and b/UploadOfflineFeedback/System.ValueTuple.dll differ
diff --git a/UploadOfflineFeedback/UploadOfflineFeedback.exe b/UploadOfflineFeedback/UploadOfflineFeedback.exe
new file mode 100644
index 0000000..1bd86e3
Binary files /dev/null and b/UploadOfflineFeedback/UploadOfflineFeedback.exe differ