10 рдорд┐рдирдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╡реЗрдм-рдкреАрдбреАрдПрдл рдкреНрд░рд┐рдВрдЯрд░





рдХреИрд╕реЗ рдХрд╛рдлреА рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдФрд░ рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рдореВрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╣рдбрд╝рддрд╛рд▓реА - рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдХреБрд▓ рдмреЗрдХрд╛рд░? рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдкреНрд░рд┐рдВрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВред



рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд┐рд░ рдФрд░ рд╣рд╛рдереЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ cgi-bin рд╕рдкреЛрд░реНрдЯ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ FTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рд╣реИред рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рдмрд╛рдд рд╣реИ? рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!





Cgi-bin рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рд┐рдВрдЯрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдБред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:



<br> #! /usr/bin/perl <br><br> use strict ; <br><br> if (! defined ( $ENV { 'CONTENT_TYPE' } ) || $ENV { 'CONTENT_TYPE' } ne "application/ipp" ) { <br> print "Content-Type: text/html\n\n" ; <br> print ":-)" ; <br> exit ; <br> } <br><br> # $d - <br> # $l - <br> # $i - <br> # %a - <br><br> my ( $d , $l , $i , %a ) = ( "" , 0 , 0 ); <br> binmode STDIN ; <br> $l += read ( STDIN , $d , 4096 , $l ) while (! eof ( STDIN )); <br><br> parseRequest (\ $d , \ $l , \ $i , \ %a ); <br><br> my $o = "" <br> . substr ( $d , 0 , 2 ) # version <br> . chr ( 0x00 ) . chr ( 0x00 ) # status <br> . substr ( $d , 4 , 4 ) # request <br> . chr ( 0x01 ) # attributes <br> . stringAttribute ( 0x47 , "attributes-charset" , "utf-8" ) <br> . stringAttribute ( 0x48 , "attributes-natural-language" , "en-us" ) <br> . chr ( 0x04 ) # attributes <br> . stringAttribute ( 0x42 , "printer-name" , "PDF" ) <br> . chr ( 0x03 ) # end <br> . chr ( 0x0a ) <br> ; <br><br> print "Content-Type: text/html\n" ; <br> print "Content-Length: " . length ( $o ) . "\n" ; <br> print "\n" ; <br> print $o ; <br><br> if ( defined ( $a { '-status' } ) && $a { '-status' } == 0x02 && $i < $l ) { <br> my @t = localtime ; <br> my $output = sprintf ( "../pdf/%04d%02d%02d-%02d%02d%02d.pdf" , $t [ 5 ] + 1900 , $t [ 4 ], $t [ 3 ], $t [ 2 ], $t [ 1 ], $t [ 0 ]); <br> if ( open ( P , "|-" , "gs" , "-q" , "-dBATCH" , "-dNOPAUSE" , "-dSAFER" , "-sDEVICE=pdfwrite" , "-sOutputFile=$output" , "-" )) { <br> binmode P ; <br> print P substr ( $d , $i ); <br> close P ; <br> } <br> } <br><br> sub parseRequest { <br> my ( $d , $l , $i , $a ) = @_ ; <br> return if $ $i >= $ $l - 2 ; <br> $ $a { '-version' } = ( ord ( substr ( $ $d , $ $i , 1 )) << 8 ) + ord ( substr ( $ $d , $ $i + 1 , 1 )); $ $i += 2 ; <br> return if $ $i >= $ $l - 2 ; <br> $ $a { '-status' } = ( ord ( substr ( $ $d , $ $i , 1 )) << 8 ) + ord ( substr ( $ $d , $ $i + 1 , 1 )); $ $i += 2 ; <br> return if $ $i >= $ $l - 4 ; <br> $ $a { '-request' } = parseInt ( substr ( $ $d , $ $i , 4 )); $ $i += 4 ; <br> return if $ $i >= $ $l - 1 ; <br> my $what = ord ( substr ( $ $d , $ $i , 1 )); $ $i ++; <br> return parseAttributes ( $d , $l , $i , $a ) if ( $what == 0x01 ); <br> } <br><br> sub parseAttributes { <br> my ( $d , $l , $i , $a ) = @_ ; <br> while ( $ $i < $ $l ) { <br> my $what = ord ( substr ( $ $d , $ $i , 1 )); $ $i ++; <br> return if ( $what == 0x03 ); <br> return parseAttributes ( $d , $l , $i , $a ) if ( $what == 0x02 ); <br> return parseAttributes ( $d , $l , $i , $a ) if ( $what == 0x04 ); <br> return if $ $i >= $ $l - 2 ; <br> my $key_len = ( ord ( substr ( $ $d , $ $i , 1 )) << 8 ) + ord ( substr ( $ $d , $ $i + 1 , 1 )); $ $i += 2 ; <br> return if $ $i >= $ $l - $key_len ; <br> my $key = substr ( $ $d , $ $i , $key_len ); $ $i += $key_len ; <br> return if $ $i >= $ $l - 2 ; <br> my $val_len = ( ord ( substr ( $ $d , $ $i , 1 )) << 8 ) + ord ( substr ( $ $d , $ $i + 1 , 1 )); $ $i += 2 ; <br> return if $ $i >= $ $l - $val_len ; <br> my $val = substr ( $ $d , $ $i , $val_len ); $ $i += $val_len ; <br> $ $a { $key } = $val ; <br> } <br> } <br><br> sub parseInt { <br> my $v = shift ; <br> my $l = length ( $v ); <br> my $r = 0 ; <br> for ( my $i = $l ; $i > 0 ; $i --) { <br> $r += ( ( 1 << (( $i - 1 ) * 8 )) * ord ( substr ( $v , $l - $i , 1 )) ); <br> } <br> $r -= 4294967296 if ( $r >= 2147483648 ); <br> return $r ; <br> } <br><br> sub stringLength { <br> my $s = shift ; <br> my $l = length ( $s ); <br> my $i1 = $l & 0xFF ; <br> $l = ( $l - $i1 ) >> 8 ; <br> my $i2 = $l & 0xFF ; <br> return chr ( $i2 ) . chr ( $i1 ); <br> } <br><br> sub stringAttribute { <br> my ( $type , $key , $val ) = @_ ; <br> return chr ( $type ) . stringLength ( $key ) . $key . stringLength ( $val ) . $val ; <br> } <br>







рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░реНрд▓ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдХреЛрдИ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛, рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд░реНрд▓ рдФрд░ рдЬреАрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВред



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдмрд╛рд░ PHP :: Print :: IPP рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереАред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ рдкрд░ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рдкрд░реНрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рд╕реНрдХреНрд░рд┐рдкреНрдЯ IPP рд╕рд░реНрд╡рд░ рдХреА рдмрд╣реБрдд рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред



рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрддреЗ рд╣реИрдВ ( 755 , рдпрд╛ rwxr-xr-x )ред рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ: http://www.site.ru/cgi-bin/printer рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕рдм рдареАрдХ рд╣реИред



рд╣рдо рд╕рд╛рдЗрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ рдПрдХ рдкреАрдбреАрдПрдл рдлрд╝реЛрд▓реНрдбрд░ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ ( 777 , рдпрд╛ rwxrwxrwx ) рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред



рдЕрдм рдкреНрд░рд┐рдВрдЯрд░ рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рд╕рд░реНрд╡рд░ рдкрд░ рдкреАрдбреАрдПрдл рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред



рдЗрд╕реА рддрд░рд╣, рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬ, рдЪрд┐рддреНрд░ ... рдХреБрдЫ рднреАред



рдпрд╣ рддреАрди рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред



1. рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

2. рдкреНрд░рд┐рдВрдЯрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдХреБрдЫ рдкреЗрдЪреАрджрд╛ рдПрдХ рдкрд░ рд░рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рд╣рд░ рдХреЛрдИ рдЖрдкрдХреЗ рдкреНрд░рд┐рдВрдЯрд░ рдкрд░ рдкреНрд░рд┐рдВрдЯ рди рдХрд░реЗред .Htaccess рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CGI рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдФрд░ рддрдм рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ ...

3. рдкреНрд░рд┐рдВрдЯрд░ рд╡рд┐рдВрдбреЛрдЬ рд╡рд┐рд╕реНрдЯрд╛ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд╛рдкрдирд╛, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЗрддрдиреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЬрд░реВрд░реА рд╣реИ? редред



UPD: рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╛рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ PHP рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдкрдХреЛ php.ini рдкрд░ рд╣рдореЗрд╢рд╛_рдкреЛрдкрд▓реНрдЯ_рд░рд╛рд╡_рдкреЛрд╕реНрдЯ_рдбрд╛рдЯрд╛ = рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреЛрдкреЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



<? <br><br> if (! isset ( $_SERVER [ 'CONTENT_TYPE' ]) || $_SERVER [ 'CONTENT_TYPE' ] != "application/ipp" ) { <br> header ( "Content-Type: text/html" ); <br> print ":-)" ; <br> exit ; <br> } <br><br> # $d - <br> # $l - <br> # $i - <br> # %a - <br><br> $d = & $HTTP_RAW_POST_DATA ; <br> $l = strlen ( $d ); <br> $i = 0 ; <br> $a = array (); <br><br> parseRequest ( $d , $l , $i , $a ); <br><br> $o = "" <br> . substr ( $d , 0 , 2 ) # version <br> . chr ( 0x00 ) . chr ( 0x00 ) # status <br> . substr ( $d , 4 , 4 ) # request <br> . chr ( 0x01 ) # attributes <br> . stringAttribute ( 0x47 , "attributes-charset" , "utf-8" ) <br> . stringAttribute ( 0x48 , "attributes-natural-language" , "en-us" ) <br> . chr ( 0x04 ) # attributes <br> . stringAttribute ( 0x42 , "printer-name" , "PDF" ) <br> . chr ( 0x03 ) # end <br> . chr ( 0x0a ) <br> ; <br><br> header ( "Content-Type: text/html" ); <br> header ( "Content-Length: " . strlen ( $o )); <br> print $o ; <br><br> if ( isset ( $a [ '-status' ]) && $a [ '-status' ] == 0x02 && $i < $l ) { <br> $output = sprintf ( "pdf/%s.pdf" , date ( "Ymd-His" )); <br> if ( $P = popen ( "gs -q -dBATCH -dNOPAUSE -dSAFER -sDEVICE=pdfwrite -sOutputFile=$output -" , "w" )) { <br> fwrite ( $P , substr ( $d , $i )); <br> fclose ( $P ); <br> } <br> } <br><br> function parseRequest (& $d , & $l , & $i , & $a ) { <br> if ( $i >= $l - 2 ) return ; <br> $a [ '-version' ] = ( ord ( $d [ $i ]) << 8 ) + ord ( $d [ $i + 1 ]); $i += 2 ; <br> if ( $i >= $l - 2 ) return ; <br> $a [ '-status' ] = ( ord ( $d [ $i ]) << 8 ) + ord ( $d [ $i + 1 ]); $i += 2 ; <br> if ( $i >= $l - 4 ) return ; <br> $a [ '-request' ] = parseInt ( substr ( $d , $i , 4 )); $i += 4 ; <br> if ( $i >= $l - 1 ) return ; <br> $what = ord ( $d [ $i ]); $i ++; <br> if ( $what == 0x01 ) return parseAttributes ( $d , $l , $i , $a ); <br> } <br><br> function parseAttributes (& $d , & $l , & $i , & $a ) { <br> while ( $i < $l ) { <br> $what = ord ( $d [ $i ]); $i ++; <br> if ( $what == 0x03 ) return ; <br> if ( $what == 0x02 ) return parseAttributes ( $d , $l , $i , $a ); <br> if ( $what == 0x04 ) return parseAttributes ( $d , $l , $i , $a ); <br> if ( $i >= $l - 2 ) return ; <br> $key_len = ( ord ( $d [ $i ]) << 8 ) + ord ( $d [ $i + 1 ]); $i += 2 ; <br> if ( $i >= $l - $key_len ) return ; <br> $key = substr ( $d , $i , $key_len ); $i += $key_len ; <br> if ( $i >= $l - 2 ) return ; <br> $val_len = ( ord ( $d [ $i ]) << 8 ) + ord ( $d [ $i + 1 ]); $i += 2 ; <br> if ( $i >= $l - $val_len ) return ; <br> $val = substr ( $d , $i , $val_len ); $i += $val_len ; <br> $a [ $key ] = $val ; <br> } <br> } <br><br> function parseInt ( $v ) { <br> $r = 0 ; <br> $l = strlen ( $v ); <br> for ( $i = $l ; $i > 0 ; $i --) { <br> $r += ( ( 1 << (( $i - 1 ) * 8 )) * ord ( $v [ $l - $i ]) ); <br> } <br> if ( $r >= 2147483648 ) $r -= 4294967296 ; <br> return $r ; <br> } <br><br> function stringLength ( $s ) { <br> $l = strlen ( $s ); <br> $i1 = $l & 0xFF ; <br> $l = ( $l - $i1 ) >> 8 ; <br> $i2 = $l & 0xFF ; <br> return chr ( $i2 ) . chr ( $i1 ); <br> } <br><br> function stringAttribute ( $type , $key , $val ) { <br> return chr ( $type ) . stringLength ( $key ) . $key . stringLength ( $val ) . $val ; <br> } <br><br> ?> <br>





рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬреАрдПрд╕ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдорд╛рд░реНрдЧ рдореЗрдВ рд╕реНрд▓реИрд╢ рдХрд╛ рдЙрд▓рдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: "C: \\ Program files \\ gs \\ gs8.71 \\ bin \\ gs.exeред" рд╡рд╣реА рдкреАрдбреАрдПрдл рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐, рднрд▓реЗ рд╣реА PHP рд╕реНрд╡рдпрдВ рдЖрдЧреЗ рдХреА рд╕реНрд▓реИрд╢ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реЛ, рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



All Articles