рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдХрдИ рд▓реЛрдЧ рд╕реБрди рдЪреБрдХреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рднреА рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ), рдЬрдмрдХрд┐ рдЕрдиреНрдп рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рд░рдЧрдбрд╝рддреЗ рд╣реИрдВ, рд╕реНрдХрд╛рдЗрдк рдФрд░ рдлреНрд▓реИрд╢ рдкрд░ рдХреНрд░рдорд┐рдХ рджрд░рд╛рд░ рдХреА рдЖрд╢рдВрдХрд╛ рд╣реИред
Habr├й (hehehe) рдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдРрд╕реЗ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓реЗ рдЬреЛ WebRTC рдХреЗ рддрдХрдиреАрдХреА рдкрдХреНрд╖ рдореЗрдВ рдереЗ, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдВрдЧреЗред
рдЦреИрд░, рдореИрдВ рдЖрдкрдХреЛ рдпреЛрдЬрдирд╛рдмрджреНрдз, рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреБрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдХреЛ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИред рддреЛ рдЪрд▓реЛ рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкреНрд░рд┐рдп рдкрд╛рдардХред
рдпрд╣ рдХреНрдпрд╛ рд╣реИ
рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореАрдбрд┐рдпрд╛ рдбреЗрдЯрд╛ (рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдбреЗрдЯрд╛ рдФрд░ рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, WebRTC рд╣реИ:
1. рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо (getUserMedia)ред
2. рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рдиред
рдиреАрдЪреЗ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрди рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореАрдбрд┐рдпрд╛ рдзрд╛рд░рд╛рдУрдВ
рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдпрд╛ рдлреНрд▓реИрд╢ рдХреЗ рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрдорд░рд╛ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
WebRTC рдкрдмреНрд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ getUserMedia рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
- рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП (рдСрдбрд┐рдпреЛ / рд╡реАрдбрд┐рдпреЛ) рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ
- рд╕рдлрд▓рддрд╛ рдХреЙрд▓рдмреИрдХ
- рддреНрд░реБрдЯрд┐ рдХреЙрд▓рдмреИрдХ
рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдмреИрд╕рд╛рдЦреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
var getUserMedia; var browserUserMedia = navigator.webkitGetUserMedia ||
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрдпрд╛рд░рд╛ рд╕реЗ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреЗрдЧрд╛ред

рд╣реБрд░реНрд░реЗ! рд╣рдореЗрдВ рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рд╣рдо HTML5 рдЯреИрдЧ "рд╡реАрдбрд┐рдпреЛ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рд╡реНрдпрд╡рд╕рд╛рдп рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред
<video id="video" autoplay></video>
var videoElement = document.getElementById( 'video' ); videoElement.src = URL.createObjectURL( stream );
рдФрд░ рдереЛрдбрд╝реА рдЪреАрдиреАред рдЕрдм рдЖрдк рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рдХреЛ html5 рдлрд╝рд┐рд▓реНрдЯрд░ (рд╡реЗрдмрдХрд┐рдЯ) рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
#video { -webkit-filter: sepia(1); }
рдХреВрд▓, рд╣реИ рдирд╛?
рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди
рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди рд╡рд╣реА рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЖрд░реЗрдЦ рд╣реИред

- рдкрд╣рд▓рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдерд╛рдХрдерд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ (PeerConnection Observer) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрдерд╛рдХрдерд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред
- рджреВрд╕рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ (рд░рд┐рдореЛрдЯ рдкреАрдпрд░) рдкрд╣рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИред
- рдПрдХ рдкреА 2 рдкреА рдХрдиреЗрдХреНрд╢рди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рднреА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдиреЗрдХреНрд╢рди рдХреЛ рдареАрдХ рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдкрд┐рдпрд░рдХреЙрдиреНрд╕реЗрдХреНрд╢рди рдСрдмреНрдЬрд░реНрд╡рд░ рдХреА рдЖрдЧреЗ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ RTCPeerConnection рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
var PeerConnection = webkitRTCPeerConnection ||
рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЛ рдЕрдзрд┐рдХ рдЕрд╡рд▓реЛрдХрди рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдХрдорд┐рдпреЛрдВ
"рдирд┐рд░реАрдХреНрд╖рдг" рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрдзреЗрд░реЗ рдкрдХреНрд╖ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
1. рдПрдкреАрдЖрдИ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛
рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
2. рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЛрдбреЗрдХреНрд╕ рдХреЗ рдЕрдиреБрдореЛрджрди рд╕реЗ рдкрд╣рд▓реЗ, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
3. рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рд╣реИ:
| рдХреНрд░реЛрдо | рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ | рдУрдкреЗрд░рд╛ |
---|
getUserMedia | рд╕реНрдерд┐рд░ (рд╕рдВрд╕реНрдХрд░рдг 21 рдХреЗ рдЕрдиреБрд╕рд╛рд░) | 17 | 12 |
рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди | рд╕реНрдерд┐рд░ (рд╕рдВрд╕реНрдХрд░рдг 23 рдХреЗ рдЕрдиреБрд╕рд╛рд░) | рд╣рд░ рд░рд╛рдд рдХреЛ | - |
рдлрд┐рд░ рд╡рд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрднреА рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ WebRTC API рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд╕реЗ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрд╡рд╕рд░ рдЦреБрд▓реЗрдВрдЧреЗред рдЕрднреА рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдШреБрд╕рдирд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Chrome Stable) рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдХреЛрдИ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░рджреНрдж рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рд╣рд╛рдБ, рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк, рд╕рд╣реА?
рдЖрдЧреЗ рдФрд░ рднреА
рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ рдХрдард┐рди рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
1. рд╡реЗрдмрдЖрд░рдЯреАрд╕реА # 1 - рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
2. рд╡реЗрдмрдЖрд░рдЯреАрд╕реА # 2 - рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо
3. рд╡реЗрдмрдЖрд░рдЯреАрд╕реА # 3 - рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди: рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
4. рд╡реЗрдмрдЖрд░рдЯреАрд╕реА # 4 - рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб
5. ...
рдкреБрдирд╢реНрдЪ рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХ рд╢рдкрде рди рд▓реЗрдВред рдпрд╣ рд╡рд┐рд╖рдп рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдЪрдХреНрд░ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реВрдВред
UPD: рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
GeorP рдФрд░
egobrain ред