Jump to content

Параллаксный пропеллер

(Перенаправлено с Spin (язык программирования) )
Пропеллер Parallax в двухрядном корпусе
Параллаксный пропеллер в TQFP

Parallax P8X32A Propeller — это многоядерный с параллельной компьютерной архитектурой микроконтроллер и восемью 32-разрядными компьютера с сокращенным набором команд ( RISC) ядрами центрального процессора . [ 1 ] [ 2 ] Представленный в 2006 году, он разработан и продается компанией Parallax, Inc.

Микроконтроллер Propeller, язык ассемблера Propeller и интерпретатор Spin были разработаны соучредителем и президентом Parallax Чипом Грейси. Spin Язык программирования и (IDE) Propeller Tool интегрированная среда разработки были разработаны Чипом Грейси и инженером-программистом Parallax Джеффом Мартином.

6 августа 2014 г. компания Parallax Inc. выпустила все оборудование и инструменты Propeller 1 P8X32A как с открытым исходным кодом аппаратное и программное обеспечение под лицензией GNU General Public License (GPL) 3.0. Сюда входили код Verilog верхнего уровня , файлы языка описания оборудования (HDL), интерпретатор Spin, инструменты и компиляторы программирования PropellerIDE и SimpleIDE. [ 3 ]

В 2020 году был выпущен Пропеллер 2 (P2X8C4M64P).

Многоядерная архитектура

[ редактировать ]

Каждое из восьми 32-битных ядер (называемых процессором ) имеет центральный процессор (ЦП), который имеет доступ к 512 32-битным длинным словам (2 КБ ) инструкций и данных. Самомодифицирующийся код возможен и используется внутри, например, когда загрузчик перезаписывает себя с помощью Spin Interpreter. Подпрограммы в Spin (объектно-ориентированный высокоуровневый код) используют механизм возврата вызова, требующий использования стека вызовов . Коду ассемблера (PASM, низкоуровневый) не нужен стек вызовов. Доступ к общей памяти (32 КБ оперативной памяти (ОЗУ); 32 КБ постоянной памяти (ПЗУ)) контролируется посредством циклического планирования с помощью внутреннего контроллера шины компьютера, называемого концентратором . Каждый процессор также имеет доступ к двум выделенным аппаратным счетчикам и специальному видеогенератору для использования в генерации сигналов синхронизации для PAL , NTSC , VGA , управления сервомеханизмом и других. [ 4 ]

Управление скоростью и мощностью

[ редактировать ]

Пропеллер можно тактировать с помощью либо внутреннего встроенного генератора (обеспечивает меньшее общее количество деталей, но жертвуя некоторой точностью и термической стабильностью), либо внешнего кварцевого генератора или керамического резонатора (обеспечивает более высокую максимальную скорость с большей точностью при более высокой общей стоимости). ). Только внешний генератор может работать через встроенный с фазовой автоподстройкой частоты (ФАПЧ) умножитель тактовой частоты , который может быть установлен на 1x, 2x, 4x, 8x или 16x.

Как частота встроенного генератора (если используется), так и значение множителя ФАПЧ могут быть изменены во время выполнения. При правильном использовании это может повысить энергоэффективность; например, множитель ФАПЧ можно уменьшить перед длительным бездействием , необходимым для целей синхронизации, а затем увеличить после этого, заставляя процессор потреблять меньше энергии. Однако полезность этого метода ограничена ситуациями, когда ни один другой процессор не выполняет код, зависящий от времени (или тщательно спроектирован с учетом изменений), поскольку эффективная тактовая частота является общей для всех процессоров.

Эффективная тактовая частота находится в диапазоне от 32 кГц до 80 МГц (точные значения, доступные для динамического управления, зависят от используемой конфигурации, как описано выше). При работе на частоте 80 МГц собственный интерпретируемый язык программирования Spin выполняет примерно 80 000 токенов инструкций в секунду на каждом ядре, что дает 8 раз 80 000 для 640 000 инструкций высокого уровня в секунду. Для выполнения большинства инструкций машинного языка требуется 4 тактовых цикла, что дает 20 миллионов инструкций в секунду (MIPS) на процессор или всего 160 MIPS для пропеллера с 8 процессорами.

Потребление энергии можно уменьшить, снизив тактовую частоту до необходимого уровня, отключив ненужные процессоры (которые затем потребляют мало энергии) и переконфигурировав ненужные контакты ввода-вывода или которые можно безопасно перевести в с высоким импедансом состояние . ( тристатизированный ), в качестве входных данных. Пины можно переконфигурировать динамически, но, опять же, изменение применяется ко всем шестерням, поэтому синхронизация важна для определенных проектов. Некоторая защита доступна в ситуациях, когда одно ядро ​​пытается использовать вывод в качестве выхода, а другое пытается использовать его в качестве входа; это объясняется в техническом справочном руководстве Parallax.

Встроенные периферийные устройства

[ редактировать ]

Каждый процессор имеет доступ к некоторому выделенному аппаратному обеспечению счетчика времени и специальному генератору сигналов синхронизации, предназначенному для упрощения конструкции выходных каскадов видео, таких как композитные дисплеи PAL или NTSC (включая модуляцию для вещания) и мониторы Video Graphics Array (VGA). Таким образом, Parallax делает доступным образец кода, который может генерировать видеосигналы (текст и графику с низким разрешением), используя минимальное количество деталей, состоящее из пропеллера, кварцевого генератора и нескольких резисторов, чтобы сформировать грубый цифро-аналоговый преобразователь (DAC). ). Частота генератора важна, поскольку возможности коррекции аппаратной синхронизации видео ограничены тактовой частотой. Можно использовать несколько процессоров параллельно для генерации одного видеосигнала. В более общем смысле, аппаратное обеспечение синхронизации может использоваться для реализации различных сигналов синхронизации с широтно-импульсной модуляцией (ШИМ).

Расширения ПЗУ

[ редактировать ]

Помимо интерпретатора Spin и загрузчика , встроенное ПЗУ предоставляет некоторые данные, которые могут быть полезны для определенных звуковых, видео или математических приложений:

Математические расширения призваны помочь компенсировать отсутствие единицы измерения с плавающей запятой и отсутствие более примитивных операций, таких как умножение и деление (это маскируется в Spin, но является ограничением для подпрограмм языка ассемблера ). Однако Propeller — это 32-битный процессор, и эти таблицы могут иметь недостаточную точность для более точного использования.

Встроенный интерпретатор байт-кода Spin.

[ редактировать ]

Spin — это многозадачный высокого уровня язык программирования , созданный Чипом Грейси из Parallax , который также разработал микроконтроллер Propeller , на котором он работает, для своей линейки микроконтроллеров Propeller. [ 5 ]

Код Spin написан на Propeller Tool, платформе разработки программного обеспечения с графическим интерфейсом, написанной для Windows XP. [ 6 ] Этот компилятор преобразует код Spin в байт-коды , которые можно загрузить (с помощью того же инструмента) в основную 32 КБ ОЗУ и, дополнительно, в ) I²C загрузочную электрически стираемую программируемую постоянную память ( EEPROM чипа Propeller. После загрузки винта интерпретатор байт-кода копируется из встроенного ПЗУ в 2 КБ ОЗУ основного COG. Затем этот COG начнет интерпретировать байт-коды в основной оперативной памяти объемом 32 КБ. В других COG может работать более одной копии интерпретатора байт-кода, поэтому несколько потоков кода Spin могут выполняться одновременно. В программу Spin-кода можно вставить программу(ы) ассемблерного кода . Эти ассемблерные программы затем будут работать на своих собственных COG.

Как и Python использует пробелы, а не фигурные скобки или ключевые слова , Spin для разделения блоков .

Интерпретатор Propeller для его собственного многопоточного компьютерного языка Spin представляет собой интерпретатор байт-кода . Этот интерпретатор декодирует строки инструкций (по одной инструкции на байт ) из пользовательского кода, который был отредактирован, скомпилирован и загружен в Propeller из специальной интегрированной среды разработки (IDE). Эта IDE, которую Parallax называет Инструментом Propeller , предназначена для использования в операционной системе Microsoft Windows .

Язык Spin — это язык программирования высокого уровня . Поскольку он интерпретируется программно, он работает медленнее, чем чистая сборка Propeller, но может быть более экономичным: коды операций сборки Propeller имеют длину 32 бита; Директивы Spin имеют длину 8 бит, за которыми может следовать несколько 8-битных байтов, чтобы указать, как работает эта директива. Spin также позволяет избежать серьезных проблем с сегментацией памяти , которые необходимо учитывать для ассемблерного кода.

При запуске копия интерпретатора байт-кода (размером менее 2 КБ) будет скопирована в выделенную оперативную память процессора, а затем начнет интерпретировать байт-код в основной ОЗУ объемом 32 КБ. С этого момента можно запустить дополнительные процессоры, загрузив отдельную копию интерпретатора в выделенную ОЗУ нового процессора (таким образом, одновременно могут работать восемь потоков интерпретатора). В частности, это означает, что по крайней мере минимальный объем стартового кода должен быть Spin-кодом для всех приложений Propeller.

Синтаксис

[ редактировать ]

Синтаксис Spin можно разделить на блоки, которые содержат:

  • VAR – глобальные переменные
  • CON – программные константы
  • PUB – код публичной подпрограммы
  • PRI – код частной подпрограммы
  • OBJ – код для объектов
  • DAT – предопределенные данные, резервирование памяти и ассемблерный код.

Примеры ключевых слов

[ редактировать ]
  • перезагрузка: вызывает перезагрузку микроконтроллера
  • waitcnt: дождаться, пока системный счетчик станет равным или превысит указанное значение.
  • waitvid: ожидает события синхронизации (видео) перед выводом (видео) данных на контакты ввода-вывода.
  • coginit: запускает процессор для выполнения новой задачи

Пример программы

[ редактировать ]

Пример программы (как она выглядит в редакторе Propeller Tool ), которая генерирует текущий системный счетчик каждые 3 000 000 циклов, а затем отключается другим процессором после 40 000 000 циклов:

Parallax Propeller постепенно накапливает программные библиотеки, которые придают ему возможности, аналогичные старому продукту BASIC Stamp от Parallax ; однако не существует единого списка того, какие средства PBASIC теперь имеют эквиваленты Spin.

В шутку высказывалось мнение, что «если бы в баре встретились два языка — Фортран и БЕЙСИК — девять месяцев спустя можно было бы найти Спин». Это относится к форматированию пробелов в FORTRAN и к операции BASIC, основанной на ключевых словах.

Пакет и ввод-вывод

[ редактировать ]

Первоначальная версия микросхемы (называемая P8X32A) имеет один 32-разрядный порт в 40-контактном корпусе 0,6 с двойным входом (DIP), 44-контактном корпусе LQFP или Quad Flat No-leads (QFN). корпусе смонтировать технологический пакет. Из 40 доступных контактов 32 используются для ввода-вывода, четыре — для питания и заземления, два — для внешнего кристалла (если он используется), один — для включения отключения питания и обнаружения понижения напряжения и один — для сброса.

Все восемь ядер могут одновременно обращаться к 32-битному порту (обозначенному «A»; «B» в настоящее время нет). Специальный механизм управления используется, чтобы избежать конфликтов ввода-вывода, если одно ядро ​​пытается использовать вывод ввода-вывода в качестве выхода, а другое пытается использовать его в качестве входа. Любой из этих контактов можно использовать для описанных выше методов вывода времени или широтно-импульсной модуляции.

Компания Parallax заявила, что ожидает, что более поздние версии Propeller будут предлагать больше контактов ввода-вывода и/или больше памяти. [ 7 ]

Виртуальные устройства ввода-вывода

[ редактировать ]
Снимок экрана графической демонстрации, созданной Parallax для демонстрации видеотеки NTSC.

Разработчики Propeller разработали его на основе концепции «виртуальных устройств ввода-вывода». Например, комплект разработки игр HYDRA (компьютерная система, предназначенная для любителей, позволяющая научиться разрабатывать видеоигры в стиле ретро) использует встроенный генератор символов и логику поддержки видео для создания виртуального графического процессора -генератора, который выводит VGA. цветные изображения, цветные изображения, совместимые с PAL/NTSC, или радиочастотное вещание видео+аудио в программном обеспечении. [ 8 ]

Показанный здесь снимок экрана был сделан с использованием программного драйвера виртуального дисплея , который отправляет данные пикселей по последовательному каналу связи на ПК. [ 9 ]

Доступны библиотеки программного обеспечения для реализации нескольких устройств ввода-вывода, начиная от простых UART и последовательных интерфейсов ввода-вывода, таких как последовательные интерфейсы мыши и клавиатуры, совместимые с SPI, I²C и PS/2, драйверы двигателей для роботизированных систем, MIDI-интерфейсы и контроллеры ЖК-дисплея. [ 10 ]

Выделенные ядра вместо прерываний

[ редактировать ]

Философия проектирования Propeller заключается в том, что многоядерная архитектура жесткого реального времени исключает необходимость в специальном аппаратном обеспечении прерываний и поддержке сборки. В традиционной архитектуре ЦП внешние линии прерываний подаются на встроенный контроллер прерываний и обслуживаются одной или несколькими процедурами обработки прерываний . Когда происходит прерывание, контроллер прерываний приостанавливает нормальную обработку ЦП и сохраняет внутреннее состояние (обычно в стеке), а затем передает его в назначенную процедуру обслуживания прерывания. После обработки прерывания сервисная программа выполняет команду возврата из прерывания , которая восстанавливает внутреннее состояние и возобновляет обработку ЦП.

Для оперативной обработки внешнего сигнала на Propeller любая из 32 линий ввода/вывода настраивается как вход. Затем процессор настраивается на ожидание перехода (положительного или отрицательного фронта) на этом входе с использованием одной из двух схем счетчика, доступных для каждого процессора. В ожидании сигнала винтик работает в режиме пониженного энергопотребления, фактически спит. Расширяя эту технику, Propeller можно настроить на реагирование на восемь независимых линий прерываний практически с нулевой задержкой обработки. Альтернативно, одна строка может использоваться для сигнализации о прерывании, а затем можно прочитать дополнительные входные строки, чтобы определить характер события. На код, выполняющийся в других ядрах, процессор обработки прерываний не влияет. В отличие от традиционной многозадачной однопроцессорной архитектуры прерываний, время отклика сигнала остается предсказуемым . [ 11 ] и действительно, использование термина прерывание в этом контексте может вызвать путаницу, поскольку эту функцию правильнее рассматривать как опрос с нулевым временем цикла.

Загрузочный механизм

[ редактировать ]

При включении питания, обнаружении отключения питания , программном сбросе или внешнем аппаратном сбросе Propeller загружает процедуру загрузки машинного кода из внутреннего ПЗУ в ОЗУ своего первого (основного) процессора и выполняет ее. Этот код эмулирует интерфейс I²C в программном обеспечении, временно используя два контакта ввода-вывода для необходимых последовательных сигналов синхронизации и данных для загрузки пользовательского кода из внешнего I/O. 2 С ЭСППЗУ .

Одновременно он эмулирует последовательный порт , используя два других контакта ввода-вывода, которые можно использовать для загрузки программного обеспечения непосредственно в ОЗУ (и, опционально, во внешнюю EEPROM). Если Пропеллер не видит команд из последовательного порта, он загружает пользовательскую программу (код входа которой необходимо прописать в Spin, как описано выше) из последовательной EEPROM в основную оперативную память объемом 32 КБ. После этого он загружает интерпретатор Spin из встроенного ПЗУ в выделенную ОЗУ своего первого процессора, перезаписывая большую часть загрузчика.

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

Внешняя постоянная память

[ редактировать ]

Пропеллер загружается из внешнего последовательного EEPROM ; после завершения последовательности загрузки к этому устройству можно будет получить доступ как к внешнему периферийному устройству. [ 12 ]

Другие языковые реализации

[ редактировать ]

Помимо Spin и низкоуровневого ассемблера Propeller, на него был портирован ряд других языков.

Компилятор Си

[ редактировать ]

Parallax поддерживает Propeller-GCC, который является портом компилятора GNU Compiler Collection (GCC) для языков программирования C и C++ для Propeller. [ 13 ] (ветвь Release_1_0). Компилятор C и библиотека C совместимы с ANSI C. Компилятор C++ соответствует стандарту ANSI-C99. Полный C++ поддерживается при использовании внешней памяти. Программа SimpleIDE [ 14 ] предоставляет пользователям простой способ написания программ без необходимости использования make-файлов . В 2013 году компания Parallax включила Propeller-GCC и Simple Libraries в серию руководств Propeller-C Learn. [ 15 ] Propeller-GCC активно поддерживается. Propeller-GCC и SimpleIDE являются официально поддерживаемыми программными продуктами Parallax.

Компилятор ImageCraft ICCV7 для Propeller C помечен как устаревший. [ 16 ]

Доступен бесплатный компилятор ANSI C под названием Catalina. [ 17 ] Он основан на LCC . Каталина активно поддерживается.

БЕЙСИК-компилятор

[ редактировать ]

PropBASIC — это язык программирования BASIC для микроконтроллера Parallax Propeller. [ 18 ] Для PropBASIC требуется Brad's Spin Tool (BST), кроссплатформенный набор инструментов для разработки с использованием Parallax Propeller. По состоянию на август 2015 года BST работает на i386-linux-gtk2, PowerPC-darwin ( Mac OS X 10.4–10.6), i386-darwin (Mac OS X 10.4–10.6) и i386-Win32 ( от Windows 95 до Windows 7 ).

Вперед на пропеллере

[ редактировать ]

как минимум шесть различных версий Forth , как коммерческих , так и с открытым исходным кодом Для Propeller доступно .

ПропФорт

[ редактировать ]

Бесплатная версия, которая активно развивается и поддерживается сообществом, — это PropForth. [ 19 ] Он адаптирован к архитектуре опоры и обязательно отклоняется от любого общего стандарта архитектурной уникальности, соответствующего концепции Форта.

Помимо интерпретатора Forth, PropForth предоставляет множество функций, использующих возможности чипа. Связанный ввод-вывод относится к методу связывания потока с процессом, позволяющему одному процессу связываться со следующим на лету, прозрачно для приложения. Во многих случаях это может уменьшить или исключить необходимость аппаратной отладки или интерфейса JTAG . Многоканальный синхронный последовательный порт (MCS) относится к синхронной последовательной связи между микросхемами. 96-битные пакеты передаются непрерывно между двумя процессорами, в результате приложения видят дополнительные ресурсы (+6 процессоров для каждого добавленного процессора) с небольшим влиянием или вообще без влияния на пропускную способность для хорошо построенного приложения.

LogicAnalyzer — это пакет расширения, реализующий программный логический анализатор. Файловая система EEPROM и файловая система SD — это расширения, которые реализуют элементарное хранилище с использованием EEPROM и флэш-памяти SD.

PagedAssembler относится к пакету оптимизаций, которые позволяют заменять ассемблерные процедуры (и выгружать их путем перезаписи) на лету, обеспечивая практически неограниченный размер приложения. Выполнение сценариев позволяет загружать расширения «на лету», позволяя использовать исходный код программы до размера носителя.

Пропеллер и Ява

[ редактировать ]

В настоящее время предпринимаются попытки запустить виртуальную машину Java (JVM) на Propeller. В разработке находятся компилятор, отладчик и эмулятор. [ 20 ]

Компилятор Pascal и среда выполнения

[ редактировать ]

Большая часть Паскаля реализуется с помощью компилятора и интерпретатора на основе системы P4 машины p-кода . [ 21 ]

Графическое программирование

[ редактировать ]
Снимок экрана редактора релейных диаграмм PICoPLC

PICo Программируемый логический контроллер (PLC, PICoPLC) поддерживает вывод на процессор Propeller. Программа создается в редакторе лестничной логики с графическим интерфейсом , а полученный код выдается как исходный код Spin. PICoPLC также поддерживает P8X32 с функцией создания-моделирования-запуска. Никаких ограничений на целевое оборудование, поскольку частота генератора и контакты ввода-вывода свободно настраиваются в редакторе релейной схемы. Сайт разработчика PICoPLC ( [1] ).

Будущие версии

[ редактировать ]

По состоянию на 2014 год , Параллакс строит новый пропеллер [ 22 ] с процессорами, каждый из которых будет работать со скоростью около 200 MIPS, тогда как каждый процессор текущего Propeller работает со скоростью около 20 MIPS. Улучшение производительности будет результатом увеличения максимальной тактовой частоты до 200 МГц (с 80 МГц) и архитектуры, которая передает инструкции по конвейеру, выполняя в среднем почти одну инструкцию за такт (приблизительно десятикратное увеличение). [ 7 ]

  1. ^ Торроне, Филипп (18 февраля 2006 г.). «Первый взгляд на чип Parallax Propeller» . Сделать блог . Архивировано из оригинала 25 июня 2008 г.
  2. ^ Торроне, Филипп (21 августа 2006 г.). «Пропеллер Параллакс (обзор)» . Делать .
  3. ^ Грейси, Кен (2014). «Пропеллер 1 с открытым исходным кодом» . Компания Параллакс . Компания Параллакс . Проверено 23 января 2021 г. Propeller 1 (P8X32A) теперь представляет собой на 100% открытый многоядерный микроконтроллер, включая все аппаратное обеспечение и инструменты... Propeller 1 может быть самым открытым чипом в своем классе.
  4. ^ Вонг, Уильям Г. (15 декабря 2022 г.). «EiED Online>> Параллаксный пропеллер» .
  5. ^ Сканлан, Дэвид А.; Хебель, Мартин А. (октябрь 2007 г.). «Программирование восьмиядерного пропеллерного чипа» . Журнал компьютерных наук в колледжах . 23 (1): 162–168.
  6. ^ «Инструмент для реквизита» . Вики-сайт Propeller на Wikispaces . Архивировано из оригинала 1 октября 2008 г.
  7. ^ Jump up to: а б «Сообщение на форуме Parallax» . Форумы по параллаксу . [ постоянная мертвая ссылка ]
  8. ^ «Печатная плата прикладной видеоплаты Propeller» . Решения SelmaWare . Архивировано из оригинала 21 декабря 2008 г. ; специальная плата видеогенератора с пропеллером
  9. ^ «Сообщение на форуме Parallax о программном обеспечении для захвата экрана» . Форумы по параллаксу . Архивировано из оригинала 9 июля 2012 г.
  10. ^ p1 на GitHub ; Библиотека программного обеспечения для обмена объектами Propeller
  11. ^ «Прерывает» . Вики-сайт Propeller на Wikispaces . Архивировано из оригинала 21 сентября 2010 г.
  12. ^ Кантрелл, Том (август 2006 г.). «Превращение ядра» . Цепь подвала . № 193. с. 80. Архивировано из оригинала 28 июня 2007 г.
  13. ^ «PropGCC в Google Code» .
  14. ^ «Propeller C — Настройка SimpleIDE» . Learn.parallax.com .
  15. ^ «Пропеллер С» . Learn.parllax.com .
  16. ^ «ICCV7 для Propeller (некоммерческий) — срок эксплуатации закончился» . Компания Параллакс . Архивировано из оригинала 18 сентября 2011 г.
  17. ^ «Catalina — БЕСПЛАТНЫЙ компилятор C для Propeller — последний рубеж!» . Форумы по параллаксу . Архивировано из оригинала 31 июля 2012 г.
  18. ^ «Загрузите PropBASIC здесь... 00.01.14 ПОСЛЕДНЯЯ ВЕРСИЯ ДЛЯ BST» . Форумы по параллаксу . 23 декабря 2009 г.
  19. ^ "проппроф" . code.google.com .
  20. ^ «Программирование на Java» . Вики-сайт Propeller на Wikispaces . Архивировано из оригинала 4 октября 2008 г.
  21. ^ «Программирование на языке Паскаль» . Вики-сайт Propeller на Wikispaces . Архивировано из оригинала 4 октября 2008 г.
  22. ^ «Пропеллер 2» . Компания Параллакс . 23 июля 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2b28e36af3c57ea8b53c99b931279362__1719138240
URL1:https://arc.ask3.ru/arc/aa/2b/62/2b28e36af3c57ea8b53c99b931279362.html
Заголовок, (Title) документа по адресу, URL1:
Parallax Propeller - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)