Π‘Π£Π‘Π” EdgeDB ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² Gel. Выпуск Gel 6.0

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π‘Π£Π‘Π” EdgeDB объявили ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Gel. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ сформирован Π½ΠΎΠ²Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· β€” Gel 6.0. Π’ качСствС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ смСны ΠΈΠΌΠ΅Π½ΠΈ упоминаСтся ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ вводящих Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… использованиСм слова Β«Π΅dgeΒ», ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ Π‘Π£Π‘Π” для edge-вычислСний ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π‘Π£Π‘Π”. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнты Π±Ρ€Π΅Π½Π΄Π°. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ†Π΅Π»ΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌΠΈ. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ выпускС ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹, Π½ΠΎ для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости сохранСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования старых ΠΈΠΌΡ‘Π½ Ρ‡Π΅Ρ€Π΅Π· символичСскиС ссылки ΠΈ обвязки.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ развиваСтся Π² Ρ„ΠΎΡ€ΠΌΠ΅ надстройки Π½Π°Π΄ PostgreSQL, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ рСляционно-Π³Ρ€Π°Ρ„ΠΎΠ²ΡƒΡŽ модСль Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ язык запросов EdgeQL, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со слоТными иСрархичСскими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Код написан Π½Π° языках Python ΠΈ Rust (парсСр ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ части), ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ для языков Python, Go, Rust, .NET, Elixir ΠΈ TypeScript/Javascript. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ инструмСнтарий ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для управлСния Π‘Π£Π‘Π” ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ выполнСния запросов (REPL).

ВмСсто ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС Ρ‚Π°Π±Π»ΠΈΡ† Π² Gel примСняСтся дСкларативная систСма Π½Π° основС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ВмСсто Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (foreign key) для опрСдСлСния связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ примСняСтся связываниС ссылками (ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ свойство Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°).

type Person { required name: str; } type Movie { required title: str; multi actors: Person; }

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности ΠΊΠ°ΠΊ строгая типизация свойств, ограничСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойств, вычисляСмыС свойства ΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Из особСнностСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ схСмы хранСния Gel, которая Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ORM, отмСчаСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ смСшивания схСм, связывания свойств ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ интСгрированная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° JSON. Для ускорСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ индСксы.

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ встроСнныС инструмСнты для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ схСмы хранСния β€” послС измСнСния схСмы, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ esdl-Ρ„Π°ΠΉΠ»Π΅, достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«gel migration createΒ» ΠΈ Π‘Π£Π‘Π” ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ различия Π² схСмС ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ сгСнСрируСт скрипт для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ схСму. АвтоматичСски отслСТиваСтся история измСнСния схСмы.

Для формирования запросов поддСрТиваСтся язык запросов GraphQL ΠΈ собствСнный язык EdgeQL, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΡŽ SQL для иСрархичСских Π΄Π°Π½Π½Ρ‹Ρ…. ВмСсто списков Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ запроса ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ Π² структурированном Π²ΠΈΠ΄Π΅, Π° вмСсто подзапросов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ JOIN прСдоставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ указания ΠΎΠ΄Π½ΠΎΠ³ΠΎ запроса EdgeQL Π² качСствС выраТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ запроса. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹.

select Movie { title, actors: { name } } filter .title = Β«The MatrixΒ» insert Movie { title := Β«The Matrix ResurrectionsΒ», actors := ( select Person filter .name in { β€˜Keanu Reeves’, β€˜Carrie-Anne Moss’, β€˜Laurence Fishburne’ } ) }

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния Π² Gel 6.0:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… SQL-запросов ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ Π‘Π£Π‘Π” ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Gel ΠΈΠ»ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° PostgreSQL. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° SQL упростит ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ Π½Π° Gel ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ постСпСнно ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ с SQL, продолТая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старыС SQL-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ SQL ORM. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ EdgeQL, смогут Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² SQL, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² EdgeQL, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, рСкурсивныС запросы ΠΈ явныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° обновлСния ΠΏΠΎ мСсту, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ создания ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π»ΠΈΠ²ΠΊΠΈ Π΄Π°ΠΌΠΏΠ° Π‘Π” ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·. ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ с EdgeDB 5.x Π΄ΠΎ Gil 6.0 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старый ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° c Gil 6.x Π½Π° 7.0 ΠΏΠ΅Ρ€Π΅Π·Π°Π»ΠΈΠ²ΠΊΠ° Π΄Π°ΠΌΠΏΠ° Π½Π΅ потрСбуСтся.
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ сохранСниС статистики ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов, которая доступна Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ sys::QueryStats.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° PostgreSQL-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ PostGIS для хранСния пространствСнных Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² гСографичСских ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° std::net для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сСтСвых запросов (поддСрТиваСтся HTTP) Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅.​
  • Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ext::auth​ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° настройки ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² OpenID Connect.
  • Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ext::ai​ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ список список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π±ΠΎΠ»ΡŒΡˆΠΈΡ… языковых ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΎΡ‚ OpenAI, Anthropic ΠΈ Mistral.
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² для ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ gel.
  • Π’ EdgeQL ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π° сСмантика для нахоТдСния ΠΏΡƒΡ‚Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ Π³Ρ€Π°Ρ„Π°.
  • Π’ gel.toml Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° настройка Β«[[watch]]Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скрипты ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².
  • Π’ ORM Drizzle Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Gel.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

0 0 голоса
Π Π΅ΠΉΡ‚ΠΈΠ½Π³ ΡΡ‚Π°Ρ‚ΡŒΠΈ
ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ
Π£Π²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΎ
0 ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²
Π‘Ρ‚Π°Ρ€Ρ‹Π΅
НовыС ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅
ΠœΠ΅ΠΆΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹Π΅ ΠžΡ‚Π·Ρ‹Π²Ρ‹
ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ
0
ΠžΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ! ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ.x