Объявление

Свернуть

ФУНКЦИОНАЛ ПОСЫЛКИ ЭЛЕКТРОННОЙ ПОЧТЫ ВОССТАНОВЛЕН

Кому не пришел имейл активации аккаунта, пройдите по ссылке и активируйте свой аккаунт
https://www.pristavka.de/activateemail
Показать больше
Показать меньше

PCH-KartinaTV: Вопросы, ответы, обсуждения (до 21.06.2010)

Свернуть
Эта тема закрыта.
X
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

    Попробовал зайти от имени приставки.. Израиль+ недоступен все равно, правда зашел по недельному акку, так как в моем нынешнем пакете канал этот есть. Может какой особый запрос нужен, хотя судя по скриптам, ничего такого... Вообще поснифил бы кто болтовню картиновской приставки с сервером. Чтоб раз и навсегда порешать эти дела, что на приставке что-то есть, а в браузере нет. Фигня какая-то..

    Комментарий


    • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

      я в это не верю, думю блоируют по ип, ну а кекусы просто хотят пихнуть приставку.
      кому не лень откройте тему в разделе картина и спросите, наврятли найдется ктото, кто напишет, мол у него с приставкой в израиле идет.
      Обсуждение всех нюансов развода в Германии. www.razvod.net

      Комментарий


      • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

        Джентельмены,
        Дело действительно только в аккаунте, мне купили Европейский на месяц и Израиль+ работает и на компьютере и на NMT (Egreat M34A) без проблем.
        Мой ISP в Израиле - Kavey Zahav 012.

        Комментарий


        • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

          Помогите пожалуйста сэкономить время и нервы, я новичок в области NMT и к сожалению имею очень мало времени для эксперементов.

          Задача в следующем, имеется:
          Пожилая мама, без технических навыков - 1шт.
          ЭЛТ Телевизор Toshiba 29" 100Hz (with Component Video In) - 1шт.
          NMT Egreat EG-M34A (with FW-20091022) - 1шт.
          Подписка на Kartina.TV + Internet 5Mбит/500кбит.

          Задача: Настроить, все это так, чтобы работало как можно более автономно. Хотелось бы настроить так, чтобы после включения Egreat сразу бы запускался KartinaTV plugin и работал без проблем на 480p Component.

          Вчера установил KartinaTV plugin на Egreat-М34А из коробки без всяких дополнительных плагинов, сумел добиться более менее нормальной работы только при резолюции 1080p через HDMI, очень медленная навигация в меню, часто подвисает. Когда подключаю через Component и выставляю 4:3 ratio то меню KartinaTV налазеет само на себя по бокам и глючит. В настройках Server#1, Buffering 8sec.

          Комментарий


          • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

            [quote author=iderzh link=topic=4386.msg62091#msg62091 date=1266312037]
            Помогите пожалуйста сэкономить время и нервы, я новичок в области NMT и к сожалению имею очень мало времени для эксперементов.
            [/quote]

            Поскольку я схожу с ума от безделья и уже разбил лоб, стучась об стенку головой, отвечу.

            [quote author=iderzh link=topic=4386.msg62091#msg62091 date=1266312037]
            Задача: Настроить, все это так, чтобы работало как можно более автономно. Хотелось бы настроить так, чтобы после включения Egreat сразу бы запускался KartinaTV plugin и работал без проблем на 480p Component.[/quote]

            Дружище, на предыдущей странице ответ на этот вопрос.
            Для тех кто в танке ещё раз:
            настройки для SD-режима | 480p | компонентный вход.

            Чтобы запускалось автоматически попробуй дописать следующее в файле start_app.sh в конце, строчкой раньше exit 0
            На А100 сработало.
            Делать такое, тем не менее, не советую. И память забивает, и работает долго. Лучше маму научить (написать на бумажке) нажать две кнопки (source дважды).
            Some people are alive only because it's illegal to kill them
            Xtreamer MK1: 2.7.0
            Xtreamer Pro: 2.7.0
            Samsung LE52 A656A
            Philips 32 PFL8404H

            Комментарий


            • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

              Из Г. с годовым аккаунтом запрос на канал 213 возвращает как обычно "нехнах".
              Можете сами попробовать с прицепленной тулзой, написанной для AzBox разработчиков.
              Идентификатор канала можно вводить просто числом без скобок и названия.
              Вложения
              Some people are alive only because it's illegal to kill them
              Xtreamer MK1: 2.7.0
              Xtreamer Pro: 2.7.0
              Samsung LE52 A656A
              Philips 32 PFL8404H

              Комментарий


              • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                Под видом приставки, на 213 "нехнах" не посылает. Просто возвращает как я понимаю в главное меню приставки. Непонятно, как израильские дилеры заявляют о наличии этого канала, но только на приставках. Если такую дыру картиновцы откроют, так можно будет спокойно прикидываться "шлангами". В чем смысл..

                Комментарий


                • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                  Уважаемый consros,
                  Спасибо за ответ и Ваше терпение!

                  Комментарий


                  • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                    Та нема за шо, обращайтесь!
                    Some people are alive only because it's illegal to kill them
                    Xtreamer MK1: 2.7.0
                    Xtreamer Pro: 2.7.0
                    Samsung LE52 A656A
                    Philips 32 PFL8404H

                    Комментарий


                    • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                      Всем привет. Хочу поделиться наблюдениями сделанными в процессе написания http proxy (КартинаТВ->PCH A110). Может быть пригодится кому нибудь...

                      1. Поведение PCH зависит от того присутствует ли Content-Length header в http response. Если header есть, PCH переходит на HTTP 1.1 Range Request. Если же нет, то продолжает использовать обычный HTTP 1.0 запрос. Поскольку .TS файлы нормально читаются и без этого поля и размер .TS файла (потока) заранее неизвестен, в случае с КартинаТВ Content-Length можно не ставить и не заморачиваться с Range Request.

                      2. PCH запрашивает начало файла/потока насколько раз (5 раз в случае .TS), по-видимому, определяя параметры потока перед тем как включить окончательный режим воспроизведения. Для 'хороших' .TS файлов PCH достаточно прочитать 200-500кб в первых 4х проходах и это происходит достаточно быстро. В случае с потоком от КартинаТВ PCH зависает на втором проходе на 60-80 сек, считывая до 8мб (наверное пытаясь найти отсутствующий framerate). Все это время на экране горит надпись 'buffering...', хотя к настоящей буфферизации это никакого отношения не имеет. Любопытно, что .TS файл от КартинаТВ, почищенный с помощью tsMuxer (http://www.smlabs.net/tsmuxer.html), загружается почти мгновенно (5 сек стартует плэйер + 3 сек на все 4 предварительных прохода).

                      3. Предлагаемое решение в случае с proxy - подменить поток от Картины на первых двух проходах на исправленный tsMuxerом файл с похожими параметрами. Как показывает опыт, достаточно всего два варианта - HD (24fps) и обычные каналы. Похоже что разрешение роли не играет, достаточно лишь подсунуть провильный framerate. Результат - поток от Картины через proxy стартует за 8 сек вместо 60-80 сек.

                      Все вышесказанное было проверено на А110. Как это будет на A200/C200 - не знаю.

                      Комментарий


                      • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                        Вот скажи, это, что ли, не по-пацански - сообщить о своей работе на форуме? Когда я написал, что собираюсь заняться прокси - ни один человек не откликнулся, мол, хочу поучаствовать. В результате имеем дважды проделанную работу.

                        Вот ровно то же для C-200. Там 8 проходов:
                        Код:
                        #include <unistd.h>
                        #include <stdio.h>
                        #include <stdlib.h>
                        #include <string.h>
                        #include <strings.h>
                        #include <sys/types.h>
                        #include <sys/socket.h>
                        #include <netinet/in.h>
                        #include <netdb.h>
                        #include <string>
                        
                        using namespace std;
                        
                        void readSocket(int sockfd, FILE* out = NULL, int bytesLimit = 0) {
                            char buffer[2048];
                            int totalRead = 0;
                            int size = sizeof(buffer) - 1;
                            int bytesRead = size;
                            while (bytesRead == size && (bytesLimit <= 0 || totalRead < bytesLimit)) {
                                bytesRead = read(sockfd, buffer, size);
                                totalRead += bytesRead;
                                buffer[bytesRead] = '\0';
                                if (NULL != out) {
                                    fprintf(out, "%s", buffer);
                                    fflush(out);
                                }
                            }
                        }
                        
                        void sendFile(int sockfd, const char* filename, int minLength = 0) {
                            printf("Sending HTTP header and %s ... ", filename);
                            fflush(stdout);
                            char buffer[2048];
                            strcat(buffer, "HTTP/1.0 200 OK\r\n");
                            strcat(buffer, "Content-type: application/octet-stream\r\n");
                            strcat(buffer, "Cache-Control: no-cache\r\n");
                            strcat(buffer, "\r\n");
                        
                            int bytesWritten = write(sockfd, buffer, strlen(buffer));
                            if (bytesWritten != strlen(buffer)) {
                                fprintf(stderr, "ERROR writing to socket\n");
                                exit(1);
                            }
                        
                            FILE *infile = fopen(filename, "r");
                            if (infile == NULL) {
                                fprintf(stderr, "ERROR cannot open %s\n", filename);
                                exit(1);
                            }
                        
                            int counter = 0;
                            while (true) {
                                int bytesRead = fread(buffer, 1, sizeof(buffer), infile);
                                if (bytesRead < sizeof(buffer) && counter < minLength) {
                                    fseek(infile, 0, SEEK_SET);
                                    continue;
                                }
                                
                                counter += bytesRead;
                                bytesWritten = write(sockfd, buffer, bytesRead);
                                if (bytesRead < sizeof(buffer) || bytesWritten != bytesRead) {
                                    break;
                                }
                            }
                            printf("%dKb was sent\n", counter / 1024);
                            fclose(infile);
                        }
                        
                        
                        void getHeader(int sockfd, char *headerBuffer, int length) {
                            int size = length - 1;
                            int bytesRead = read(sockfd, headerBuffer, size);
                            headerBuffer[bytesRead] = '\0';
                            printf("%s", headerBuffer);
                            fflush(stdout);
                        
                            if (bytesRead == size) {
                                printf("Header is over %i bytes: extra read initiated!\n", size);
                                fflush(stdout);
                                readSocket(sockfd, stdout);
                            }
                        }
                        
                        int connectToHost(const char *host, int port) {
                            int sockfd = socket(AF_INET, SOCK_STREAM, 0);
                            if (sockfd < 0) {
                                fprintf(stderr, "ERROR opening socket\n");
                                return -1;
                            }
                        
                            struct hostent *server = gethostbyname(host);
                            if (server == NULL) {
                                fprintf(stderr, "ERROR no such host %s\n", host);
                                exit(0);
                            }
                        
                            printf("server = %s\n", server->h_name);
                            fflush(stdout);
                            
                            struct sockaddr_in serv_addr;
                            bzero((char*) &serv_addr, sizeof(serv_addr));
                            serv_addr.sin_family = AF_INET;
                            bcopy((char*)server->h_addr, (char*)&serv_addr.sin_addr.s_addr, server->h_length);
                            serv_addr.sin_port = htons(port);
                        
                            if (connect(sockfd,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
                                fprintf(stderr, "ERROR connecting %s:%i\n", host, port);
                                return -1;
                            }
                        
                            return sockfd;
                        }
                        
                        
                        bool isInitialRequest(char *header) {
                            return header == strstr(header, "HEAD ");
                        }
                        
                        bool isStreamRequest(char *header) {
                            return NULL != strstr(header, "Range: bytes=");
                        }
                        
                        void handleClient12(char *header, int clientSockFd) {
                            char host[512] = "";
                            int port = 80;
                        
                            const char *str = strstr(header, "\nHost:");
                            if (NULL == str || sscanf(str, "\nHost: %[^:]:%i", &host, &port) < 1) {
                                printf("No host:port found!\nExiting\n");
                                fflush(stdout);
                                return;
                            }
                        
                            printf("Found host:port: %s:%i\n", host, port);
                            fflush(stdout);
                             
                            sendFile(clientSockFd, "real-movie1.mpg");
                        }
                        
                        
                        void handleClient(char *host, int port, char *path, int clientFd) {
                            int serverFd = connectToHost(host, port);
                            if (-1 == serverFd) {
                                return;
                            }
                        
                            bool clientConnected = true;
                            bool serverConnected = true;
                        
                            char buffer[2048];
                            sprintf(buffer, "GET %s HTTP/1.0\r\n", path);
                            sprintf(buffer + strlen(buffer), "Host: %s:%d\r\n", host, port);
                            strcat(buffer, "User-Agent: Mozilla/5.0\r\n");
                            strcat(buffer, "Content-Type: application/x-www-form-urlencoded\r\n");
                            strcat(buffer, "Connection: Close\r\n");
                            strcat(buffer, "Accept: */*\r\n");
                            strcat(buffer, "\r\n");
                        
                            int bytesReceived = strlen(buffer);
                            while (clientConnected && serverConnected) {
                        
                                if (bytesReceived > 0) {
                                    // send request to server
                                    if (-1 == send(serverFd, buffer, bytesReceived, 0)) {
                                        fprintf(stderr, "ERROR writing to server socket\n");
                                        break;
                                    }
                                    printf("1");
                                    fflush(stdout);
                                }
                        
                                // read server response
                                bytesReceived = recv(serverFd, buffer, sizeof(buffer), 0);
                                if (-1 == bytesReceived) {
                                    fprintf(stderr, "ERROR reading from server socket\n");
                                    break;
                                }
                        
                                if (bytesReceived > 0) {
                                    // send response to client
                                    if (-1 == send(clientFd, buffer, bytesReceived, 0)) {
                                        fprintf(stderr, "ERROR writing to client socket\n");
                                        break;
                                    }
                                    printf("4");
                                    fflush(stdout);
                                } else {
                                    printf("\nRecv:%d\n", bytesReceived);
                                    fflush(stdout);
                                    break;
                                }
                        
                                // read client request
                                bytesReceived = -1;
                                int bytesReceived = recv(clientFd, buffer, sizeof(buffer), MSG_DONTWAIT);
                                if (-199 == bytesReceived) {
                                    fprintf(stderr, "ERROR reading from client socket\n");
                                    break;
                                }
                            }
                            close(serverFd);
                        }
                        
                        
                        int main(const int argc, const char *argv[]) {
                        
                            int videoConnectionNumber = 9;
                            const char* filename = argc > 1 ? argv[1] : "ktv03.mpeg";
                        
                            int port = 9119;
                            int sockfd = socket(AF_INET, SOCK_STREAM, 0);
                            if (sockfd < 0) {
                                fprintf(stderr, "ERROR opening socket\n");
                                exit(1);
                            }
                        
                            struct sockaddr_in serv_addr;
                            bzero((char *) &serv_addr, sizeof(serv_addr));
                            serv_addr.sin_family = AF_INET;
                            serv_addr.sin_addr.s_addr = INADDR_ANY;
                            serv_addr.sin_port = htons(port);
                            if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
                                fprintf(stderr, "ERROR on binding\n");
                                exit(1);
                            }
                        
                            printf("\nStart listening on %d!\n", port);
                            printf("-------------------------------\n");
                            fflush(stdout);
                            listen(sockfd, 5);
                        
                            int clientNum = 0;
                            while (true) { 
                                struct sockaddr_in cli_addr;
                                int clilen = sizeof(cli_addr);
                                int clientSock = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*)&clilen);
                                if (clientSock < 0) {
                                    fprintf(stderr, "ERROR on accept\n");
                                    close(sockfd);
                                    exit(1);
                                }
                        
                                char header[4096];
                                getHeader(clientSock, header, sizeof(header));
                                printf("Initial request: %i\n", isInitialRequest(header));
                                printf("Stream  request: %i\n", isStreamRequest(header));
                        
                                if (isInitialRequest(header)) {
                                    clientNum = 1;
                                } else if (isStreamRequest(header)) {
                                    clientNum = videoConnectionNumber;
                                } else {
                                    clientNum++;
                                }
                            
                                // this is the child process
                                if (! ****()) { 
                                    
                                    // child doesn't need the listener
                                    close(sockfd); 
                        
                                    printf("Got client connection: %d\n", clientNum);
                                    
                                    // skip ignored connection
                                    if (clientNum < videoConnectionNumber) {
                                        sendFile(clientSock, "sample.mpg", 1024 * 1000 * 2);
                                    } else {
                                        // handleClient12(header, clientSock);
                                        // http://pch-c200:9999/KartinaTV_web/2.avi
                                        handleClient("pch-c200", 9999, "/KartinaTV_web/2.avi" , clientSock);
                                    }
                        
                                    // done with this client
                                    close(clientSock);
                                    printf("-------------------------------\n");
                                    exit(0);
                                }
                                close(clientSock);
                            }
                            close(sockfd);
                            return 0; 
                        }
                        А вот лог запросов С-200:

                        Код:
                        Start listening on 9119!
                        -------------------------------
                        Got connection: 1
                        HEAD / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Range: bytes=0-0
                        
                        Sending HTTP header and sample.mpg ... 246Kb was sent
                        -------------------------------
                        Got connection: 2
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 1090Kb was sent
                        -------------------------------
                        Got connection: 3
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 86Kb was sent
                        -------------------------------
                        Got connection: 4
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 150Kb was sent
                        -------------------------------
                        Got connection: 5
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 326Kb was sent
                        -------------------------------
                        Got connection: 6
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 348Kb was sent
                        -------------------------------
                        Got connection: 7
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 260Kb was sent
                        -------------------------------
                        Got connection: 8
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Connection: close
                        
                        Sending HTTP header and real-movie1.mpg ... 6083Kb was sent
                        -------------------------------
                        Got connection: 1
                        GET / HTTP/1.1
                        Host: ber13045:9119
                        User-Agent: Syabas/00-00-000000-00-000-400-000/00-000 Firefox/0.8.0+ (gaya3 TV R
                        es1280x720; Browser Res1100x656-32bits; Res1280x720; mac_addr=00.00.00.00.00.
                        00)
                        Range: bytes=6229792-
                        Connection: close
                        
                        Sending HTTP header and sample.mpg ... 1408Kb was sent
                        -------------------------------
                        Что характерно - сообщением о том, что я этим занимаюсь, исписана половина интернета.
                        Some people are alive only because it's illegal to kill them
                        Xtreamer MK1: 2.7.0
                        Xtreamer Pro: 2.7.0
                        Samsung LE52 A656A
                        Philips 32 PFL8404H

                        Комментарий


                        • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                          Типа дискляймер

                          Ребята, не ведите себя как [s]пидорасы[/s] тупые, давайте возможность другим людям пользоваться вашими наработками!

                          А то один прикрутит тайм-шифт и молчит - наблюдает когда у меня это получится, другой сделает альтернативный дизайн, но предлагает всем довольствоваться довольно посредственным моим. Теперь, вот, прокси пишем.

                          Втф?!
                          Some people are alive only because it's illegal to kill them
                          Xtreamer MK1: 2.7.0
                          Xtreamer Pro: 2.7.0
                          Samsung LE52 A656A
                          Philips 32 PFL8404H

                          Комментарий


                          • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                            Прочитал всю тему, но нигде не нашел упоминания о том если PCH-KartinaTV будет работать с ново-выпушеным Popcorn Hour A-200. Везде говориться только о совместимости с С-200, но про А-200 ни слова.
                            Popcorn Hour A200: 02-01-100119-19-POP-411

                            Комментарий


                            • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                              ну нет наверное обладателя этой модели, а так скрипт прет и на дюне, с чего бы его на а200 не работать...
                              Обсуждение всех нюансов развода в Германии. www.razvod.net

                              Комментарий


                              • Re: PCH-KartinaTV: Вопросы, ответы, обсуждения

                                Здравствуйте, у меня PCH C-200, последняя официальная версия Firmware Version: 02-02-100118-19-POP-408-000.
                                Поставил ваш клиент KartinaTV 0.8.5. Все показывает! Браво! Но, у меня меню очень крупное, не такое как на скриншотах. А самое главное - сильные тормоза. Надо ждать примерно минуту(!), чтобы пошла трансляция какого-либо канала, при нажатии на "сохранении изменений" в настройках задержка примерно 10 секунд, при выходе из настроек обратно к списку каналов опять 4 секунды задержка, сам клиент запускается примерно 10 секунд. В настройках клиента стоит сервер: 1, буфферизация: 20). Не пойму в чем дело. Подскажите, пожалуйста, что я не так делаю. Может дело в самих настройках PCH? Или какой файл конфигурации клиентя надо изменить? Заранее благодарен.
                                Popcorn Hour A200
                                Прошивка от С200 02-02-100214-19-POP-408
                                KartinaTV v0.9.0

                                Комментарий

                                Обработка...
                                X