<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Unexpected Warning with Macro Quoting in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774308#M246086</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/10892"&gt;@PaigeMiller&lt;/a&gt;&amp;nbsp;The N isn't a macro variable that is meant to be defined. N1 and N2 are two defined macro variables, and (using macro quoting) I was trying to assemble the text &amp;amp;N1 &amp;amp;N2. The warning is coming up even though the %NRSTR(&amp;amp;N) is quoted when called with SUPERQ.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is a simpler version of the code to assist with debugging. The same warning is still produced:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=) ;
   %qsysfunc(prxchange(s!([^%superq(dlm_charlist)]+)!%superq(add_prefix)$1%superq(add_suffix)!,-1,%superq(string)))
%mend qmodify_list;

%macro modify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=);
   %sysfunc(prxchange(s!([^%superq(dlm_charlist)]+)!%superq(add_prefix)$1%superq(add_suffix)!,-1,%superq(string)))
%mend;

* Self-contained test runs ;
%let n1 = A;
%let n2 = B;

%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
%put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;n));

%let m = whoops;
%let m1 = C;
%let m2 = D;

%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
%put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;m));&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;* Self-contained test runs ;
39         %let n1 = A;
40         %let n2 = B;
41         
42         %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
WARNING: Apparent symbolic reference N not resolved.
&amp;amp;n1 &amp;amp;n2
43         %put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
WARNING: Apparent symbolic reference N not resolved.
A B
44         
45         %let m = whoops;
46         %let m1 = C;
47         %let m2 = D;
48         
49         %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
&amp;amp;m1 &amp;amp;m2
50         %put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
C D&lt;/PRE&gt;</description>
    <pubDate>Thu, 14 Oct 2021 18:12:38 GMT</pubDate>
    <dc:creator>PremS</dc:creator>
    <dc:date>2021-10-14T18:12:38Z</dc:date>
    <item>
      <title>Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774205#M246030</link>
      <description>&lt;P&gt;I've got this utility macro that I commonly use to add prefixes/suffixes to a list of terms. Recently I've also been using this to shorthand macro variable resolution, but despite the use of macro quoting, I'm getting a resolution warning of "Apparent symbolic reference N not resolved".&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;From my testing, the place where the warning appears is in the %QSYSFUNC(PRXCHANGE()) function.&lt;BR /&gt;&lt;BR /&gt;Below is the macro and a simple example illustrating the warning (I'm running SAS 9.4M3). I've included an example where if the prefix N had a value, it doesn't get resolved anyway. Almost like the macro compiler is doing a check for the macro variable but isn't actually trying to resolve it (not sure on why it would do this).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This nonissue has been bothering me for some time, appreciate any thoughts!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=) ;
%*----------------------------------------------------------------------------*;
%* STRING - list of delimited words                                           *;
%* DLM_CHARLIST - delimiter for words in STRING                               *;
%*                                                                            *;
%* ADD_PREFIX - characters to add before each word in STRING                  *;
%* ADD_SUFFIX - characters to add after each word in STRING                   *;
%*  * NOTE: Above can use substitution regex characters, like $1 to add the   *;
%*          the matched string as a prefix or suffix                          *;
%*                                                                            *;
%* REPLACE_DLM - characters to replace all consecutive delimiters             *;
%*                                                                            *;
%* Common applications:                                                       *;
%*                                                                            *;
%*  - Append prefix for a RENAME= option:                                     *;
%*       %modify_list(var1 var2 var3, add_prefix=%str($1=new_))               *;
%*         -&amp;gt; returns: var1=new_var1 var2=new_var2 var3=new_var3              *;
%*                                                                            *;
%*  - Get a comma separated list of quoted values for an IN operator          *;
%*       %modify_list(PPN1 PPN2, add_prefix=%bquote(")                        *;
%*                              , add_suffix=%bquote(")                       *;
%*                              , replace_dlm=%str(,)                         *;
%*                     )                                                      *;
%*         -&amp;gt; returns: "PPN1","PPN2"                                          *;
%*                                                                            *;
%* Returned text is macro quoted, primarily used for input to other macros    *;
%*----------------------------------------------------------------------------*;

%if %superq(string) = %then %do;
   %put ERROR: [dev] List to modify (first parameter) was not provided.;
   %put ERROR: [dev] Macro will ABORT CANCEL.;
   %abort cancel;
%end;
%else %if %superq(add_prefix) =  and %superq(add_suffix) = and %superq(replace_dlm) =  %then %do;
   %put WARNING: [dev] Neither ADD_PREFIX=, ADD_SUFFIX=, nor replace_dlm= parameters were given.;
   %put WARNING: [dev] Supply at least one parameter to utilize this macro.;
   %put WARNING: [dev] Original list will be returned.;
   %superq(string);
%end;
%else %do;
   %* BE SURE TO ESCAPE the charaters in the ADD_PREFIX or ADD_SUFFIX parameters with \
      TO MASK PRX METACHARACTERS! E.g. \$ for $ or \\ for \;

   %if %superq(replace_dlm) ne %then %do;
      %let string = %qsysfunc(prxchange(s~[%superq(dlm_charlist)]+~%superq(replace_dlm)~,-1,%superq(string)));
      %let dlm_charlist = %superq(replace_dlm);
   %end;

   %qsysfunc(prxchange(s!([^%superq(dlm_charlist)]+)!%superq(add_prefix)$1%superq(add_suffix)!,-1,%superq(string)))

%end;

%mend qmodify_list;

%macro modify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=);
   %unquote(%qmodify_list(%superq(string)
                        , dlm_charlist=%superq(dlm_charlist)
                        , add_prefix=%superq(add_prefix)
                        , add_suffix=%superq(add_suffix)
                        , replace_dlm=%superq(replace_dlm)
                          )
            )
%mend;


%let n1 = A;
%let n2 = B;

%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
%put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;n));

%let m = whoops;
%let m1 = C;
%let m2 = D;

%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
%put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;98         %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
WARNING: Apparent symbolic reference N not resolved.
&amp;amp;n1 &amp;amp;n2
99         %put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
WARNING: Apparent symbolic reference N not resolved.
A B
100        
101        %let m = whoops;
102        %let m1 = C;
103        %let m2 = D;
104        
105        %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
&amp;amp;m1 &amp;amp;m2
106        %put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
C D&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Oct 2021 12:58:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774205#M246030</guid>
      <dc:creator>PremS</dc:creator>
      <dc:date>2021-10-14T12:58:21Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774216#M246037</link>
      <description>&lt;P&gt;Where is &amp;amp;n created or defined?&lt;/P&gt;</description>
      <pubDate>Thu, 14 Oct 2021 13:40:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774216#M246037</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-10-14T13:40:27Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774231#M246046</link>
      <description>&lt;P&gt;Sounds like the issue is how %SYSFUNC()/%QSYSFUNC() is trying to evaluate the arguments to your function call.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In general I have found that %SYSFUNC() does not play that well with others. It seems to be related to functions that can have arguments that can either be strings or numbers.&amp;nbsp; It seems like %SYSFUNC() is trying to figure out whether the text (everything in macro code is text) being passed is a number or a string.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Can you recreate the issue without the rest of your macro code to make debugging easier?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Oct 2021 14:10:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774231#M246046</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-10-14T14:10:30Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774308#M246086</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/10892"&gt;@PaigeMiller&lt;/a&gt;&amp;nbsp;The N isn't a macro variable that is meant to be defined. N1 and N2 are two defined macro variables, and (using macro quoting) I was trying to assemble the text &amp;amp;N1 &amp;amp;N2. The warning is coming up even though the %NRSTR(&amp;amp;N) is quoted when called with SUPERQ.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is a simpler version of the code to assist with debugging. The same warning is still produced:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=) ;
   %qsysfunc(prxchange(s!([^%superq(dlm_charlist)]+)!%superq(add_prefix)$1%superq(add_suffix)!,-1,%superq(string)))
%mend qmodify_list;

%macro modify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=);
   %sysfunc(prxchange(s!([^%superq(dlm_charlist)]+)!%superq(add_prefix)$1%superq(add_suffix)!,-1,%superq(string)))
%mend;

* Self-contained test runs ;
%let n1 = A;
%let n2 = B;

%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
%put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;n));

%let m = whoops;
%let m1 = C;
%let m2 = D;

%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
%put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;m));&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;* Self-contained test runs ;
39         %let n1 = A;
40         %let n2 = B;
41         
42         %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
WARNING: Apparent symbolic reference N not resolved.
&amp;amp;n1 &amp;amp;n2
43         %put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
WARNING: Apparent symbolic reference N not resolved.
A B
44         
45         %let m = whoops;
46         %let m1 = C;
47         %let m2 = D;
48         
49         %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
&amp;amp;m1 &amp;amp;m2
50         %put %modify_list(1 2, add_prefix=%nrstr(&amp;amp;m));
C D&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Oct 2021 18:12:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774308#M246086</guid>
      <dc:creator>PremS</dc:creator>
      <dc:date>2021-10-14T18:12:38Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774311#M246089</link>
      <description>&lt;P&gt;If &amp;amp;N is not defined, then you get the error. SAS is looking for &amp;amp;N and it doesn't exist.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I don't understand your explanation "&lt;SPAN&gt;The N isn't a macro variable that is meant to be defined."&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Oct 2021 18:20:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774311#M246089</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-10-14T18:20:58Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774322#M246095</link>
      <description>&lt;P&gt;Agree with&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;&amp;nbsp; .&amp;nbsp; In theory, you shouldn't need those %superq since you've quoted the value with %nrstr() before passing it into the macro.&amp;nbsp; I think something in the innerworkings of PRXCHANGE is unquoting the value, and causing the problem.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This trivial example with UPCASE works:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(add_prefix=) ;
   %qsysfunc(upcase(&amp;amp;add_prefix))
%mend qmodify_list;

%put %qmodify_list(add_prefix=%nrstr(&amp;amp;n));
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Change to CATS and it tries to resolve macro variable n:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(add_prefix=) ;
   %qsysfunc(CATS(&amp;amp;add_prefix))
%mend qmodify_list;

%put %qmodify_list(add_prefix=%nrstr(&amp;amp;n));&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;CATS is also one of those pesky functions that can accept numeric or character values, and I think it unquotes values in the process, unfortunately.&lt;/P&gt;</description>
      <pubDate>Thu, 14 Oct 2021 19:10:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774322#M246095</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2021-10-14T19:10:08Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774382#M246118</link>
      <description>&lt;P&gt;Why not use %QSCAN() and TRANWRD() instead?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=) ;
%local i word sep;
%let add_prefix=%qsysfunc(tranwrd(&amp;amp;add_prefix,$1,%nrstr(&amp;amp;word)));
%let add_suffix=%qsysfunc(tranwrd(&amp;amp;add_suffix,$1,%nrstr(&amp;amp;word)));
%do i=1 %to %sysfunc(countw(&amp;amp;string,&amp;amp;dlm_charlist));
  %let word=%qscan(&amp;amp;string,&amp;amp;i,&amp;amp;dlm_charlist);
  %*;%bquote(&amp;amp;sep.%unquote(&amp;amp;add_prefix.)&amp;amp;word.%unquote(&amp;amp;add_suffix.))%*;
  %let sep=&amp;amp;replace_dlm;
%end;
%mend qmodify_list;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Test:&lt;/P&gt;
&lt;PRE&gt;144   %put %qmodify_list(var1 var2 var3, add_prefix=$1=new_,replace_dlm=%str( ));
var1=new_var1 var2=new_var2 var3=new_var3
&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Oct 2021 22:37:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774382#M246118</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-10-14T22:37:27Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774414#M246131</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;&amp;nbsp;Yeah I could believe Tom is right about how the character processing works for certain functions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The QSCAN/TRANWRD does circumvent the warning, thanks for the suggestion! I had to reorder the TRANWRD to happen after the text to prevent warning messages due to unquoting ADD_PREFIX.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(string, dlm_charlist=%str( ,), add_prefix=, add_suffix=, replace_dlm=) ;
   %local i word sep term ;

   %do i=1 %to %sysfunc(countw(&amp;amp;string,&amp;amp;dlm_charlist));
      %let word=%qscan(&amp;amp;string,&amp;amp;i,&amp;amp;dlm_charlist);
      %let term = %qsysfunc(tranwrd(%bquote(&amp;amp;sep.&amp;amp;add_prefix.&amp;amp;word.&amp;amp;add_suffix.), %str($1), %superq(word)));

      %*; &amp;amp;term %*;
      
      %let sep=&amp;amp;replace_dlm;
   %end;
%mend qmodify_list;

%let n1 = A;
%let n2 = B;
%put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 Oct 2021 02:30:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774414#M246131</guid>
      <dc:creator>PremS</dc:creator>
      <dc:date>2021-10-15T02:30:34Z</dc:date>
    </item>
    <item>
      <title>Re: Unexpected Warning with Macro Quoting</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774416#M246132</link>
      <description>&lt;P&gt;Your macro is inserted un-requested spaces.&lt;/P&gt;
&lt;P&gt;For example this call has empty value for replace_dlm but it is still inserting a space between the terms.&lt;/P&gt;
&lt;PRE&gt;160   %put %qmodify_list(1 2, add_prefix=%nrstr(&amp;amp;n));
&amp;amp;n1 &amp;amp;n2
&lt;/PRE&gt;
&lt;P&gt;It is doing that because you added a space after the comment in front on where you expanded TERM.&lt;/P&gt;
&lt;P&gt;Use code like this instead.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;      %*;&amp;amp;term
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you want the default to have a space inserted then set that as the default value for the REPLACE_DLM parameter.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro qmodify_list(string,dlm_charlist=%str( ,),add_prefix=,add_suffix=,replace_dlm=%str( )) ;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Oct 2021 02:45:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Unexpected-Warning-with-Macro-Quoting/m-p/774416#M246132</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-10-15T02:45:19Z</dc:date>
    </item>
  </channel>
</rss>

