text: %%**********************************************************
  %% SDPT3soln_SEDUMIsoln: convert SQLP solution in SDPT3 format to 
  %%                       SeDuMi format
  %%
  %% [xx,yy,zz = SDPT3soln_SEDUMIsoln(blk,X,y,Z); 
  %%
  %% usage: load SEDUMI_data_file (containing say, A,b,c,K)
  %%        [blk,At,C,b,perm] = read_sedumi(A,b,c,K); 
  %%        [obj,X,y,Z]  = sdpt3(blk,At,C,b); 
  %%        [xx,yy,zz]   = SDPT3soln_SEDUMIsoln(blk,X,y,Z,perm); 
  %%
  %% SDPT3: version 3.1
  %% Copyright (c) 1997 by
  %% K.C. Toh, M.J. Todd, R.H. Tutuncu
  %% Last Modified: 16 Sep 2004
  %%**********************************************************
  
    function [xx,yy,zz] = SDPT3soln_SEDUMIsoln(blk,X,y,Z,perm); 
  
    yy = y; 
    xx = []; zz = []; 
  %%
  %% extract unrestricted blk
  %%
    for p = 1:size(blk,1)
       pblk = blk(p,:);
       if strcmp(pblk{1},'u')
          xx  = [xx; X{p,1}];
          zz  = [zz; Z{p,1}];
       end
    end
  %%
  %% extract linear blk
  %%
    for p = 1:size(blk,1)
       pblk = blk(p,:);
       if strcmp(pblk{1},'l')
          xx  = [xx; X{p,1}];
          zz  = [zz; Z{p,1}];
       end
    end
  %%
  %% extract second order cone blk 
  %%
    for p = 1:size(blk,1)
       pblk = blk(p,:); 
       if strcmp(pblk{1},'q')  
          xx  = [xx; X{p,1}];
          zz  = [zz; Z{p,1}];
       end
    end
  %%
  %% extract rotated cone blk 
  %%
    for p = 1:size(blk,1)
       pblk = blk(p,:); 
       if strcmp(pblk{1},'r')  
          xx  = [xx; X{p,1}];
          zz  = [zz; Z{p,1}];
       end
    end
  %%
  %% extract semidefinite cone blk
  %%
    per = []; 
    len = 0; 
    for p = 1:size(blk,1)
       pblk = blk(p,:); 
       if strcmp(pblk{1},'s')  
          sblk(p) = length(pblk{2}); 
          per = [per, perm{p}]; 
          len = len + sum(pblk{2}.*pblk{2}); 
       end
    end
    sblk = sum(sblk); 
    cnt = 1; 
    Xsblk = cell(sblk,1); Zsblk = cell(sblk,1); 
    for p = 1:size(blk,1)
       pblk = blk(p,:); 
       if strcmp(pblk{1},'s')
          ss = [0,cumsum(pblk{2})]; 
          numblk = length(pblk{2}); 
  	Xp = X{p,1}; 
          Zp = Z{p,1}; 
          xtmp = []; ztmp = []; 
          for tt = 1:numblk
     	   if (numblk > 1) 
                idx = [ss(tt)+1: ss(tt+1)];
                Xsblk{cnt} = full(Xp(idx,idx)); 
                Zsblk{cnt} = full(Zp(idx,idx)); 
             else
                Xsblk{cnt} = Xp; 
                Zsblk{cnt} = Zp; 
             end
  	   cnt = cnt + 1; 
          end        
       end
    end
    if ~isempty(per)
       Xsblk(per) = Xsblk; Zsblk(per) = Zsblk; 
       xtmp = zeros(len,1); ztmp = zeros(len,1);
       cnt = 0; 
       for p = 1:sblk
          if strcmp(pblk{1},'s') 
             idx = [1:length(Xsblk{p})^2]; 
             xtmp(cnt+idx) = Xsblk{p}(:); 
             ztmp(cnt+idx) = Zsblk{p}(:); 
             cnt = cnt + length(idx); 
          end
       end
       xx = [xx; xtmp]; 
       zz = [zz; ztmp]; 
    end
  %%**********************************************************
  