ForgeZero 1.9.0 (fz), ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° C, C++ ΠΈ Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΈ (NASM, GAS, FASM), Π±Π΅ΡΠ΅ ΠΏΡΡΠ½Π°Ρ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Makefile ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΎΡΠ½ΠΎΠ²Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Go ΠΈ Π΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠ°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° MIT.
ForgeZero ΠΎΡΠΊΡΠΈΠ²Π° ΡΠΈΠΏΠ° Π½Π° ΡΠ°ΠΉΠ»Π° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·Π±ΠΈΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ Π±Π΅ΠΊΠ΅Π½Π΄. ΠΡΠ΅ΠΊΠΈ ΠΊΠΎΠ΄ΠΎΠ² ΡΠ°ΠΉΠ» ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² ΠΎΠ±Π΅ΠΊΡΠ΅Π½ ΡΠ°ΠΉΠ», ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π° Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠΈ ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Π² Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ». ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠΎ ΠΈΠ·Π±ΠΎΡ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΠΏΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΡΠ»Π΅Π΄ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΡΠ° GCC, Clang, G++ ΠΈ Clang++; Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΈΡΠ΅ ΡΠ° NASM, GAS ΠΈ FASM; Π»ΠΈΠ½ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ° LD, GCC ΠΈ Clang; ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ ΠΈ AR Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡ. ΠΠ°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π·Π° C ΠΈ C++ ΡΠ°: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". ΠΠ΅Π·ΠΈΠ½ΡΠ΅ΠΊΡΠ°Π½ΡΠΈΡΠ΅ AddressSanitizer ΠΈ UndefinedBehaviorSanitizer ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ (ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ Ρ ΡΠ»Π°Π³Π° -sanitize=false). ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ ΡΠ°: Linux, macOS, Windows (WSL2 ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π½Π°ΡΠΈΠ²Π΅Π½).
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΡΠ² Π²Π΅ΡΡΠΈΡ 1.9.0:
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠ»Π°Π³ β-targetβ , ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΊΡΡΡΡΠΎΡΠ°Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° Π²ΡΡΠΊΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠΈ. fz Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, Π»ΠΈΠ½ΠΊΠ΅ΡΠ° ΠΈ Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡΠ° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (Π½Π°ΠΏΡ. βarm-linux-gnueabihf-gccβ). ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΠ΅Π»Π΅Π²ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π½Π° GNU, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ arm-linux-gnueabihf, aarch64-linux-gnu ΠΈ riscv64-linux-gnu.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Language Server Protocol (LSP). Π€Π»Π°Π³ΡΡ "-compile-commands" Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΠ°ΠΉΠ» compile_commands.json (Compilation Database) Π² ΠΊΠΎΡΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π€Π°ΠΉΠ»ΡΡ ΡΠ΅ ΡΠ΅ΡΠ΅ ΠΎΡ Π΅Π·ΠΈΠΊΠ°. ΡΡΡΠ²ΡΡΠΈ clangd ΠΈ ccls, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΠ²ΡΡΡΠ²Π°Π½Π΅, Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π² ΠΊΠΎΠ΄Π° ΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ LSP (Neovim, VSCode, CLion, Emacs ΠΈ Π΄Ρ.).
- ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° fz "-update" Π²Π΅ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π° ΡΠ΅ΠΊΡΡΠΈΡ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ» Π² /usr/local/bin/fz.old ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π±Π΅Π· ΠΏΡΠ΅ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅.
- ΠΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ Π³ΡΠ΅ΡΠΊΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Π±Π°Π·ΠΎΠ²ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π΄ΡΡΠ³ΠΈΡ. ΠΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π²Π΅ΡΠ΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΡΠ»Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π΅Π½ ΠΏΡΡ Π΄ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ°ΠΉΠ».
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΅ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ "fz -shell" Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΡΠ΅ΡΡΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ SplitCommand, CmdSet ΠΈ CmdBuild. Π’Π΅ΡΡΠΎΠ²ΠΎΡΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π·Π° Π»ΠΈΠ½ΠΊΠΈΡΠ°Π½Π΅ ΡΠ΅ Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΎ ΠΎΡ 17% Π½Π° 60%, Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ΡΠΎ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π΅ Π½Π°Π΄Ρ Π²ΡΡΠ»ΠΈΠ»ΠΎ 40%.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° CheckTool Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ΅Π½Π°ΡΠΈΠΈ Ρ Π»ΠΈΠΏΡΠ²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΎΡ Π²Π΅ΡΠΈΠ³Π°ΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.
ΠΡΠΎΠΌΠ΅Π½ΠΈ ΡΠΏΡΡΠΌΠΎ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡ:
- ΠΠ΅ΡΡΠΈΡ 1.8.0 ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (-ΡΠΈΠΏ static / -lib), ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΡΡ ".."
- ΠΠ΅ΡΡΠΈΡ 1.7.0 Π΄ΠΎΠ±Π°Π²Ρ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ (-j N, 0 β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΡΠ΄ΡΠ°ΡΠ°), ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π»ΠΈΠ½ΠΊΠ΅ΡΠ½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ (-T) ΠΈ Π°Π΄ΡΠ΅ΡΠΈ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈ ΡΠΎΡΠΊΠΈ (-Ttext), ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ (fz -shell), ΠΈΠ·ΡΠΈΡΠ΅Π½ ΠΈΠ·Π±ΠΎΡ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΠΎΡΠΌΠ°Ρ (elf32, elf64, bin), ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° C++ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (.cpp, .cc, .cxx) ΡΡΡ ΡΡΡΠΈΡΠ΅ ΡΡΡΠΎΠ³ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅, ΠΊΠ°ΠΊΡΠΎ Π·Π° C.
- ΠΠ΅ΡΡΠΈΡ 1.6.0 Π΄ΠΎΠ±Π°Π²Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ (fz -init, ΡΡΠ·Π΄Π°Π²Π° .fz.yaml, .fzignore, README.md), ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° bin ΡΠΎΡΠΌΠ°Ρ (-format bin) Π·Π° Π±ΡΡΡΠ»ΠΎΡΠ΄ΡΡΠΈ ΠΈ ΡΡΡΠΌΡΠ΅Ρ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° libs, flags.cc, flags.asm, flags.ld.
- ΠΠ΅ΡΡΠΈΡ 1.5.0 Π²ΡΠ²Π΅ΠΆΠ΄Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Ρ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ (source_dirs), ΠΈΠ·ΡΠΈΡΠ½ΠΈ ΡΠΏΠΈΡΡΡΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (source_files), ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π·Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅/ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅, ΠΏΠΎΠ»Π΅ libs Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π° Π»ΠΈΠ½ΠΊΠ΅ΡΠΈ, ΡΠ°ΠΉΠ»Π° .fzignore ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ»ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
