рдПрдХ рд╡рд┐рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдкрд╣рд▓реВ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдПрдУрдкреА) рдХрд╛ рд╡рд┐рд╖рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдмреЗ рдкрд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдкреНрд░рддрд┐рдорд╛рди рдХреБрдЫ рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рдлрд╛рдпрджреЗрдордВрдж рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдЬрд╣рд╛рдВ рдПрдУрдкреА рдиреЗ рдореЗрд░реА рдорджрдж рдХреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕рд┐рд░реНрдл рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рд▓рд┐рдВрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдФрд░ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдкрд╕реЗ рдХрд╣реАрдВ рдЧрд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдмрдЧрд░ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдФрд░ рдлрд┐рд░ рдЕрдЪрд╛рдирдХ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдХреЛрдИ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░рдг рд╕реЗ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ ...

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░реЗрдВред

рд╕рдорд╕реНрдпрд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЕрдкрдиреЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрдм рдЧреНрд░рд╣рдг рдбреАрдПрд▓рдЯреАрдХреЗ (рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдЯреВрд▓рдХрд┐рдЯ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдИрдбреАрдИ рдореЗрдВ рдСрдЯреЛрдХреЛрдореНрдкреНрд▓реАрдореЗрдВрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ред

рдореИрдВрдиреЗ рдбрд┐рдмрдЧрд░ (рд╕рднреА рд╕реНрд░реЛрддреЛрдВ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ,) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝рдиреА рдереА, рд╡рд╣ рдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдмреАрдЪ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдерд╛ред рдФрд░ рдПрдХ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рдлреЛрдХрд╕ рдЦреЛ рдЬрд╛рдиреЗ рдкрд░ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╡рд┐рдВрдбреЛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдЙрд╕ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рдФрд░ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЖрдк рдЯреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд▓реЗрдХрд░ рдкреВрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рддрдХ рдХрдИ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВред рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдЗрди рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореИрдВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдорд╛рдЗрдирд╕ рдХреЛ рдЕрд╡рд╛рдВрдЫрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рди рдХреЗрд╡рд▓ DLTK, рдмрд▓реНрдХрд┐ рдкреВрд░реЗ JFace рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрдорд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛; рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдереЗ; рдФрд░ рдЧреНрд░рд╣рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рднрд╛рд░реА рдордВрдЪ рдХреА рдкреВрд░реНрдг рд░реВрдкрд░реЗрдЦрд╛ рдПрдХ рдзреВрдорд┐рд▓ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реБрдИред

рдирд┐рд░реНрдгрдп

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реБрдЖ - рдореИрдВрдиреЗ рдПрдХ рдПрдХрд▓ рдкрд╣рд▓реВ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

рдореИрдВ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдореВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред AspectJ рдФрд░ PostSharp рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рдЪрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Habr├й рдкрд░ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, OSGi рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╖рдпрдЧрдд рдмреНрд▓реЙрдЧ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред

рдореИрдВ рдХреЗрд╡рд▓ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рдкрд╣рд▓реВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдереА (рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЪреВрдВрдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХ рдмреБрдирд╛рдИ (рд░рдирдЯрд╛рдЗрдо рдмреБрдирд╛рдИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ AspectJ рдкрд░ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрд╡рд░реЛрдзрди рдХреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдерд╛ред

рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХреЙрд▓ рдХреЛ Foo.bar рд╡рд┐рдзрд┐ рдореЗрдВ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛:

public aspect TraceAspect { before() : cflowbelow(execution(void Foo.bar(..))) && execution(* *.*(..)) && !within(TraceAspect){ try { System.out.println(thisJoinPoint.getSourceLocation()); } catch (Exception e) { } } } 


рдпрд╣ рд╕рдВрднрд╡ рд╣реИ (рдФрд░ рдЖрд╡рд╢реНрдпрдХ) cflowbelow рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдХреЗ рдмрд╣реБрдд рдХрдо рд╕реНрддрд░ рдХреА рдХреЙрд▓ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

AOP рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рддреА рд╣реИ, рдЙрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реБрдХ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

AOP рд╕реЗ рдбрд░реЛ рдорддред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╣рд░ рдЬрдЧрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрд╡реЗрджрди рдХреЗ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИред рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде рдПрдХ рдХреАрд▓ рдХреЛ рд╣рдереМрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╣рдереМрдбрд╝рд╛ рдХрд░рдиреЗ рдпрд╛ рдЗрд╕реЗ рдкреЗрдЪрдХрд╢ рдХреЗ рд╕рд╛рде рдШреБрдорд╛ рджреЗрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдерд╛ред

рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЧреИрд░-рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЗрд╕ рд╕рд╛рд░реА рд╢рдХреНрддрд┐ рдХреЛ рдХреИрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред

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

Source: https://habr.com/ru/post/In138755/


All Articles