http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo2
        urn:uuid:$uuid
        https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured
        
            
                $created
                $expires
            
            
                
                    $device
                
            
        
    
    
        
            
                
                    $updateId
                    $rev
                
            
            
                FileUrl
                FileDecryption
                EsrpDecryptionInformation
                PiecesHashUrl
                BlockMapUrl
            
            $deviceAttributes
        
    
XML;
}
// Composes POST data for fetching the latest update information from Windows Update
function composeFetchUpdRequest($device, $encData, $arch, $flight, $ring, $build, $sku = 48) {
    $uuid = genUUID();
    $createdTime = time();
    $expiresTime = $createdTime + 120;
    $cookieExpiresTime = $createdTime + 604800;
    $created = gmdate(DATE_W3C, $createdTime);
    $expires = gmdate(DATE_W3C, $expiresTime);
    $cookieExpires = gmdate(DATE_W3C, $cookieExpiresTime);
    $branch = branchFromBuild($build);
    if($sku == 7 || $sku == 8) {
        $mainProduct = 'Server.OS';
    } else {
        $mainProduct = 'Client.OS.rs2';
    }
    if($arch == 'all') {
        $arch = array(
            'amd64',
            'x86',
            'arm64',
            'arm',
        );
    }
    if(!is_array($arch)) {
        $arch = array($arch);
    }
    $products = array();
    foreach($arch as $currArch) {
        $products[] = "PN=$mainProduct.$currArch&Branch=$branch&PrimaryOSProduct=1&Repairable=1&V=$build&ReofferUpdate=1";
        $products[] = "PN=Windows.Appraiser.$currArch&Repairable=1&V=$build";
        $products[] = "PN=Windows.AppraiserData.$currArch&Repairable=1&V=$build";
        $products[] = "PN=Windows.EmergencyUpdate.$currArch&Repairable=1&V=$build";
        $products[] = "PN=Windows.ManagementOOBE.$currArch&IsWindowsManagementOOBE=1&Repairable=1&V=$build";
        $products[] = "PN=Windows.OOBE.$currArch&IsWindowsOOBE=1&Repairable=1&V=$build";
        $products[] = "PN=Windows.UpdateStackPackage.$currArch&Name=Update Stack Package&Repairable=1&V=$build";
        $products[] = "PN=Hammer.$currArch&Source=UpdateOrchestrator&V=0.0.0.0";
        $products[] = "PN=MSRT.$currArch&Source=UpdateOrchestrator&V=0.0.0.0";
        $products[] = "PN=SedimentPack.$currArch&Source=UpdateOrchestrator&V=0.0.0.0";
    }
    $callerAttrib = array(
        'Interactive=1',
        'Profile=AUv2',
        'SheddingAware=1',
        'IsSeeker=1',
        'Id=MoUpdateOrchestrator',
    );
    $products = htmlentities(implode(';', $products));
    $callerAttrib = htmlentities('E:'.implode('&', $callerAttrib));
    $deviceAttributes = composeDeviceAttributes(
        $flight,
        $ring,
        $build,
        $arch,
        $sku
    );
    return <<
    
        http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/SyncUpdates
        urn:uuid:$uuid
        https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx
        
            
                $created
                $expires
            
            
                
                    $device
                
            
        
    
    
        
            
                $cookieExpires
                $encData
            
            
                false
                
                    1
                    10
                    105939029
                    105995585
                    106017178
                    107825194
                    10809856
                    11
                    117765322
                    129905029
                    130040030
                    130040031
                    130040032
                    130040033
                    133399034
                    138372035
                    138372036
                    139536037
                    139536038
                    139536039
                    139536040
                    142045136
                    158941041
                    158941042
                    158941043
                    158941044
                    159776047
                    160733048
                    160733049
                    160733050
                    160733051
                    160733055
                    160733056
                    161870057
                    161870058
                    161870059
                    17
                    19
                    2
                    23110993
                    23110994
                    23110995
                    23110996
                    23110999
                    23111000
                    23111001
                    23111002
                    23111003
                    23111004
                    2359974
                    2359977
                    24513870
                    28880263
                    3
                    30077688
                    30486944
                    5143990
                    5169043
                    5169044
                    5169047
                    59830006
                    59830007
                    59830008
                    60484010
                    62450018
                    62450019
                    62450020
                    69801474
                    8788830
                    8806526
                    9125350
                    9154769
                    98959022
                    98959023
                    98959024
                    98959025
                    98959026
                
                
                false
                true
                true
                
                
                    
                        Extended
                        LocalizedProperties
                    
                    
                        en-US
                    
                
                
                
                    false
                    $deviceAttributes
                    $callerAttrib
                    $products
                
            
        
    
XML;
}
// Composes POST data for Get Cookie request
function composeGetCookieRequest($device) {
    $uuid = genUUID();
    $createdTime = time();
    $expiresTime = $createdTime + 120;
    $created = gmdate(DATE_W3C, $createdTime);
    $expires = gmdate(DATE_W3C, $expiresTime);
    return <<
    
        http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie
        urn:uuid:$uuid
        https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx
        
            
                $created
                $expires
            
            
                
                    $device
                
            
        
    
    
        
            
                $created
            
            $created
            $created
            2.0
        
    
XML;
}