Калькулятор идеального газа
Расчёт давления, объёма, количества вещества или температуры газа по уравнению Менделеева — Клапейрона (PV = nRT) с выбором единиц измерения.
Как пользоваться
1
Выберите, какую величину нужно найти: давление P, объём V, количество вещества n или температуру T.
2
Заполните три оставшихся поля известными значениями. Например: V = 22.4 л, n = 1 моль, T = 273 K — и найдите P.
3
Выберите подходящие единицы измерения (кПа, атм, мм рт. ст., Па для давления; л, м³, мл для объёма; K или °C для температуры).
4
Нажмите «Рассчитать». Результат появится в правой карточке, а все четыре параметра системы отобразятся в единой системе единиц.
Примеры использования
Газ при нормальных условиях
Дано: P = 101.325 кПа (1 атм), T = 273.15 K (0 °C), n = 1 моль. Расчёт: V = nRT/P = (1 × 8.314 × 273.15) / 101325 ≈ 0.022414 м³ = 22.41 л — молярный объём идеального газа при н.у.
Давление в баллоне
Баллон объёмом 10 л содержит 2 моль газа при 300 K (27 °C). Найти давление. P = nRT/V = (2 × 8.314 × 300) / 0.01 ≈ 498.8 кПа (около 4.92 атм). Важно: не превышайте допустимое давление сосуда!
Количество вещества в ёмкости
Ёмкость 5 л заполнена газом при 2 атм и 298 K (25 °C). Сколько вещества? n = PV/(RT) = (202650 × 0.005) / (8.314 × 298) ≈ 0.409 моль.
Важные нюансы
- Уравнение идеального газа — приближение. Оно работает лучше всего при низких давлениях и высоких температурах. Для реальных газов при высоких давлениях или вблизи точки сжижения используйте уравнение Ван-дер-Ваальса или другие модели.
- Температура всегда в Кельвинах. При расчётах температура автоматически переводится в абсолютную шкалу: T(K) = t(°C) + 273.15. Ноль Кельвинов (−273.15 °C) — абсолютный нуль, недостижимый на практике.
- Газовая постоянная R зависит от единиц. Калькулятор автоматически выбирает R = 8.314 Дж/(моль·K) для СИ, R = 0.08206 л·атм/(моль·K) для атмосфер и литров, R = 62.36 л·мм рт.ст./(моль·K) для мм рт.ст.
- ⚠️ Техника безопасности. При работе с газами под давлением всегда соблюдайте осторожность: используйте сертифицированные баллоны, не превышайте максимальное рабочее давление, работайте в проветриваемом помещении, применяйте защитные очки и перчатки. Данный калькулятор — справочный инструмент, он не заменяет инженерные расчёты и нормы охраны труда.
- Молярный объём при н.у. Для идеального газа при 0 °C и 1 атм он составляет примерно 22.414 л/моль. Это полезный ориентир для проверки расчётов.
Источники данных
- IUPAC Gold Book — определение идеального газа, газовой постоянной и стандартных условий (IUPAC, 2019).
- NIST Chemistry WebBook — значения фундаментальных физических констант, включая универсальную газовую постоянную R = 8.314462618 Дж/(моль·K) (NIST, 2022).
- CRC Handbook of Chemistry and Physics (104th Edition, 2023–2024) — табличные данные по свойствам газов, молярным объёмам и константам.
- Стандартные справочные данные — нормальные условия (T = 273.15 K, P = 101.325 кПа), молярный объём идеального газа при н.у. ≈ 22.414 л/моль. Расчёт основан на стандартных химических формулах и школьно-вузовских справочных значениях.
Калькулятор идеального газа помогает быстро рассчитать давление, объём, количество вещества или температуру по уравнению Менделеева — Клапейрона. Инструмент полезен студентам, преподавателям, инженерам-химикам и всем, кто изучает термодинамику газов. Поддерживаются различные единицы измерения, автоматический подбор газовой постоянной и перевод температуры в шкалу Кельвина. Результаты отображаются наглядно с подробным ходом расчёта.
CihmdW5jdGlvbigpewogIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25uLWdlbi1pZGVhbC1nYXMtcm9vdCcpOwogIGlmICghcm9vdCkgcmV0dXJuOwoKICAvLyDQrdC70LXQvNC10L3RgtGLINGE0L7RgNC80YsKICB2YXIgZmluZFNlbGVjdCA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtZmluZCcpOwogIHZhciBpbnB1dFAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLVAnKTsKICB2YXIgaW5wdXRWID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy1WJyk7CiAgdmFyIGlucHV0TiA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtbicpOwogIHZhciBpbnB1dFQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLVQnKTsKICB2YXIgdW5pdFAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXVuaXQtUCcpOwogIHZhciB1bml0ViA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtdW5pdC1WJyk7CiAgdmFyIHVuaXRUID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy11bml0LVQnKTsKICB2YXIgZXJyUCA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtZXJyLVAnKTsKICB2YXIgZXJyViA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtZXJyLVYnKTsKICB2YXIgZXJyTiA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtZXJyLW4nKTsKICB2YXIgZXJyVCA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtZXJyLVQnKTsKICB2YXIgZ3JvdXBQID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy1ncm91cC1QJyk7CiAgdmFyIGdyb3VwViA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtZ3JvdXAtVicpOwogIHZhciBncm91cE4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLWdyb3VwLW4nKTsKICB2YXIgZ3JvdXBUID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy1ncm91cC1UJyk7CiAgdmFyIHJEaXNwbGF5ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy1yLWRpc3BsYXknKTsKCiAgLy8g0JrQvdC+0L/QutC4CiAgdmFyIGNhbGNCdG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLWNhbGMtYnRuJyk7CiAgdmFyIHJlc2V0QnRuID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy1yZXNldC1idG4nKTsKCiAgLy8g0KDQtdC30YPQu9GM0YLQsNGC0YsKICB2YXIgcmVzdWx0VmFsdWUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXJlc3VsdC12YWx1ZScpOwogIHZhciByZXN1bHRMYWJlbCA9IHJvb3QucXVlcnlTZWxlY3RvcignI25uLWdlbi1pZGVhbC1nYXMtcmVzdWx0LWxhYmVsJyk7CiAgdmFyIHJlc3VsdFVuaXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXJlc3VsdC11bml0Jyk7CiAgdmFyIHJlc1AgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXJlcy1QJyk7CiAgdmFyIHJlc1YgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXJlcy1WJyk7CiAgdmFyIHJlc04gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXJlcy1uJyk7CiAgdmFyIHJlc1QgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLXJlcy1UJyk7CiAgdmFyIGZvcm11bGFEZXRhaWwgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNubi1nZW4taWRlYWwtZ2FzLWZvcm11bGEtZGV0YWlsJyk7CiAgdmFyIGZvcm11bGFUZXh0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbm4tZ2VuLWlkZWFsLWdhcy1mb3JtdWxhLXRleHQnKTsKCiAgLy8g0JrQvtC90YHRgtCw0L3RgtGLCiAgdmFyIFJfU0kgPSA4LjMxNDQ2MjYxODsgLy8g0JTQti8o0LzQvtC70YzCt0spCiAgdmFyIFJfTF9hdG0gPSAwLjA4MjA1NzsgLy8g0LvCt9Cw0YLQvC8o0LzQvtC70YzCt0spCiAgdmFyIFJfTF9tbUhnID0gNjIuMzYzOyAvLyDQu8K30LzQvCDRgNGCLtGB0YIuLyjQvNC+0LvRjMK3SykKCiAgZnVuY3Rpb24gY2xlYXJFcnJvcnMoKSB7CiAgICBlcnJQLnRleHRDb250ZW50ID0gJyc7CiAgICBlcnJWLnRleHRDb250ZW50ID0gJyc7CiAgICBlcnJOLnRleHRDb250ZW50ID0gJyc7CiAgICBlcnJULnRleHRDb250ZW50ID0gJyc7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVEaXNhYmxlZEZpZWxkcygpIHsKICAgIHZhciBmaW5kID0gZmluZFNlbGVjdC52YWx1ZTsKICAgIGlucHV0UC5kaXNhYmxlZCA9IChmaW5kID09PSAnUCcpOwogICAgaW5wdXRWLmRpc2FibGVkID0gKGZpbmQgPT09ICdWJyk7CiAgICBpbnB1dE4uZGlzYWJsZWQgPSAoZmluZCA9PT0gJ24nKTsKICAgIGlucHV0VC5kaXNhYmxlZCA9IChmaW5kID09PSAnVCcpOwogICAgdW5pdFAuZGlzYWJsZWQgPSAoZmluZCA9PT0gJ1AnKTsKICAgIHVuaXRWLmRpc2FibGVkID0gKGZpbmQgPT09ICdWJyk7CiAgICB1bml0VC5kaXNhYmxlZCA9IChmaW5kID09PSAnVCcpOwogICAgdXBkYXRlUkRpc3BsYXkoKTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVJEaXNwbGF5KCkgewogICAgdmFyIHBVbml0ID0gdW5pdFAudmFsdWU7CiAgICB2YXIgdlVuaXQgPSB1bml0Vi52YWx1ZTsKICAgIHZhciByVmFsLCByVW5pdFRleHQ7CiAgICBpZiAocFVuaXQgPT09ICdhdG0nICYmIHZVbml0ID09PSAnTCcpIHsKICAgICAgclZhbCA9IFJfTF9hdG0udG9GaXhlZCg1KTsKICAgICAgclVuaXRUZXh0ID0gJ9C7wrfQsNGC0LwvKNC80L7Qu9GMwrdLKSc7CiAgICB9IGVsc2UgaWYgKHBVbml0ID09PSAnbW1IZycgJiYgdlVuaXQgPT09ICdMJykgewogICAgICByVmFsID0gUl9MX21tSGcudG9GaXhlZCgzKTsKICAgICAgclVuaXRUZXh0ID0gJ9C7wrfQvNC8INGA0YIu0YHRgi4vKNC80L7Qu9GMwrdLKSc7CiAgICB9IGVsc2UgewogICAgICByVmFsID0gUl9TSS50b0ZpeGVkKDQpOwogICAgICByVW5pdFRleHQgPSAn0JTQti8o0LzQvtC70YzCt0spJzsKICAgIH0KICAgIHJEaXNwbGF5LnRleHRDb250ZW50ID0gJ1IgPSAnICsgclZhbCArICcgJyArIHJVbml0VGV4dDsKICB9CgogIGZ1bmN0aW9uIGdldFNlbGVjdGVkUigpIHsKICAgIHZhciBwVW5pdCA9IHVuaXRQLnZhbHVlOwogICAgdmFyIHZVbml0ID0gdW5pdFYudmFsdWU7CiAgICBpZiAocFVuaXQgPT09ICdhdG0nICYmIHZVbml0ID09PSAnTCcpIHsKICAgICAgcmV0dXJuIHsgdmFsdWU6IFJfTF9hdG0sIGxhYmVsOiAn0LvCt9Cw0YLQvC8o0LzQvtC70YzCt0spJyB9OwogICAgfSBlbHNlIGlmIChwVW5pdCA9PT0gJ21tSGcnICYmIHZVbml0ID09PSAnTCcpIHsKICAgICAgcmV0dXJuIHsgdmFsdWU6IFJfTF9tbUhnLCBsYWJlbDogJ9C7wrfQvNC8INGA0YIu0YHRgi4vKNC80L7Qu9GMwrdLKScgfTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB7IHZhbHVlOiBSX1NJLCBsYWJlbDogJ9CU0LYvKNC80L7Qu9GMwrdLKScgfTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRvU0lfUCh2YWx1ZSwgdW5pdCkgewogICAgc3dpdGNoKHVuaXQpIHsKICAgICAgY2FzZSAna1BhJzogcmV0dXJuIHZhbHVlICogMTAwMDsKICAgICAgY2FzZSAnYXRtJzogcmV0dXJuIHZhbHVlICogMTAxMzI1OwogICAgICBjYXNlICdtbUhnJzogcmV0dXJuIHZhbHVlICogMTMzLjMyMjsKICAgICAgY2FzZSAnUGEnOiByZXR1cm4gdmFsdWU7CiAgICAgIGRlZmF1bHQ6IHJldHVybiB2YWx1ZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZyb21TSV9QKHZhbHVlU0ksIHVuaXQpIHsKICAgIHN3aXRjaCh1bml0KSB7CiAgICAgIGNhc2UgJ2tQYSc6IHJldHVybiB2YWx1ZVNJIC8gMTAwMDsKICAgICAgY2FzZSAnYXRtJzogcmV0dXJuIHZhbHVlU0kgLyAxMDEzMjU7CiAgICAgIGNhc2UgJ21tSGcnOiByZXR1cm4gdmFsdWVTSSAvIDEzMy4zMjI7CiAgICAgIGNhc2UgJ1BhJzogcmV0dXJuIHZhbHVlU0k7CiAgICAgIGRlZmF1bHQ6IHJldHVybiB2YWx1ZVNJOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9TSV9WKHZhbHVlLCB1bml0KSB7CiAgICBzd2l0Y2godW5pdCkgewogICAgICBjYXNlICdMJzogcmV0dXJuIHZhbHVlICogMC4wMDE7CiAgICAgIGNhc2UgJ21MJzogcmV0dXJuIHZhbHVlICogMC4wMDAwMDE7CiAgICAgIGNhc2UgJ20zJzogcmV0dXJuIHZhbHVlOwogICAgICBkZWZhdWx0OiByZXR1cm4gdmFsdWU7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBmcm9tU0lfVih2YWx1ZVNJLCB1bml0KSB7CiAgICBzd2l0Y2godW5pdCkgewogICAgICBjYXNlICdMJzogcmV0dXJuIHZhbHVlU0kgLyAwLjAwMTsKICAgICAgY2FzZSAnbUwnOiByZXR1cm4gdmFsdWVTSSAvIDAuMDAwMDAxOwogICAgICBjYXNlICdtMyc6IHJldHVybiB2YWx1ZVNJOwogICAgICBkZWZhdWx0OiByZXR1cm4gdmFsdWVTSTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRvU0lfVCh2YWx1ZSwgdW5pdCkgewogICAgaWYgKHVuaXQgPT09ICdDJykgcmV0dXJuIHZhbHVlICsgMjczLjE1OwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgZnVuY3Rpb24gZnJvbVNJX1QodmFsdWVTSSwgdW5pdCkgewogICAgaWYgKHVuaXQgPT09ICdDJykgcmV0dXJuIHZhbHVlU0kgLSAyNzMuMTU7CiAgICByZXR1cm4gdmFsdWVTSTsKICB9CgogIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsKICAgIGNsZWFyRXJyb3JzKCk7CiAgICB2YXIgZmluZCA9IGZpbmRTZWxlY3QudmFsdWU7CiAgICB2YXIgcFJhdyA9IHBhcnNlRmxvYXQoaW5wdXRQLnZhbHVlKTsKICAgIHZhciB2UmF3ID0gcGFyc2VGbG9hdChpbnB1dFYudmFsdWUpOwogICAgdmFyIG5SYXcgPSBwYXJzZUZsb2F0KGlucHV0Ti52YWx1ZSk7CiAgICB2YXIgdFJhdyA9IHBhcnNlRmxvYXQoaW5wdXRULnZhbHVlKTsKICAgIHZhciBwVW5pdCA9IHVuaXRQLnZhbHVlOwogICAgdmFyIHZVbml0ID0gdW5pdFYudmFsdWU7CiAgICB2YXIgdFVuaXQgPSB1bml0VC52YWx1ZTsKCiAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTsKCiAgICAvLyDQktCw0LvQuNC00LDRhtC40Y8g0LjQt9Cy0LXRgdGC0L3Ri9GFINC/0L7Qu9C10LkKICAgIGZ1bmN0aW9uIHZhbGlkYXRlRmllbGQocmF3LCBmaWVsZE5hbWUsIG1pblZhbCwgZXJyb3JFbCwgaW5wdXRFbCkgewogICAgICBpZiAoaW5wdXRFbC5kaXNhYmxlZCkgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBudWxsIH07CiAgICAgIGlmIChpc05hTihyYXcpKSB7CiAgICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9ICfQktCy0LXQtNC40YLQtSDRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUgJyArIGZpZWxkTmFtZTsKICAgICAgICBoYXNFcnJvciA9IHRydWU7CiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogbnVsbCB9OwogICAgICB9CiAgICAgIGlmIChyYXcgPD0gbWluVmFsKSB7CiAgICAgICAgZXJyb3JFbC50ZXh0Q29udGVudCA9IGZpZWxkTmFtZSArICcg0LTQvtC70LbQvdC+INCx0YvRgtGMID4gJyArIG1pblZhbDsKICAgICAgICBoYXNFcnJvciA9IHRydWU7CiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogbnVsbCB9OwogICAgICB9CiAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogcmF3IH07CiAgICB9CgogICAgdmFyIHBWYWxpZCA9IHZhbGlkYXRlRmllbGQocFJhdywgJ1AnLCAwLCBlcnJQLCBpbnB1dFApOwogICAgdmFyIHZWYWxpZCA9IHZhbGlkYXRlRmllbGQodlJhdywgJ1YnLCAwLCBlcnJWLCBpbnB1dFYpOwogICAgdmFyIG5WYWxpZCA9IHZhbGlkYXRlRmllbGQoblJhdywgJ24nLCAwLCBlcnJOLCBpbnB1dE4pOwogICAgdmFyIHRWYWxpZCA9IHZhbGlkYXRlRmllbGQodFJhdywgJ1QnLCAtMjczLjE1LCBlcnJULCBpbnB1dFQpOwoKICAgIC8vINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0L/RgNC+0LLQtdGA0LrQsCDRgtC10LzQv9C10YDQsNGC0YPRgNGLINCyINCa0LXQu9GM0LLQuNC90LDRhQogICAgaWYgKHRWYWxpZC52YWxpZCAmJiB0VmFsaWQudmFsdWUgIT09IG51bGwpIHsKICAgICAgdmFyIHRJbksgPSB0b1NJX1QodFZhbGlkLnZhbHVlLCB0VW5pdCk7CiAgICAgIGlmICh0SW5LIDw9IDApIHsKICAgICAgICBlcnJULnRleHRDb250ZW50ID0gJ9CQ0LHRgdC+0LvRjtGC0L3QsNGPINGC0LXQvNC/0LXRgNCw0YLRg9GA0LAg0LTQvtC70LbQvdCwINCx0YvRgtGMID4gMCBLICjQstGL0YjQtSDQsNCx0YHQvtC70Y7RgtC90L7Qs9C+INC90YPQu9GPKSc7CiAgICAgICAgaGFzRXJyb3IgPSB0cnVlOwogICAgICAgIHRWYWxpZC52YWxpZCA9IGZhbHNlOwogICAgICB9CiAgICB9CgogICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgIHJlc2V0UmVzdWx0RGlzcGxheSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8g0JrQvtC90LLQtdGA0YLQuNGA0YPQtdC8INC40LfQstC10YHRgtC90YvQtSDQsiDQodCYCiAgICB2YXIgUF9TSSwgVl9TSSwgbl92YWwsIFRfU0k7CiAgICB2YXIgckluZm8gPSBnZXRTZWxlY3RlZFIoKTsKICAgIHZhciBSX3VzZWQgPSBySW5mby52YWx1ZTsKICAgIHZhciBSX2xhYmVsID0gckluZm8ubGFiZWw7CgogICAgaWYgKGZpbmQgIT09ICdQJykgUF9TSSA9IHRvU0lfUChwVmFsaWQudmFsdWUsIHBVbml0KTsKICAgIGlmIChmaW5kICE9PSAnVicpIFZfU0kgPSB0b1NJX1YodlZhbGlkLnZhbHVlLCB2VW5pdCk7CiAgICBpZiAoZmluZCAhPT0gJ24nKSBuX3ZhbCA9IG5WYWxpZC52YWx1ZTsKICAgIGlmIChmaW5kICE9PSAnVCcpIFRfU0kgPSB0b1NJX1QodFZhbGlkLnZhbHVlLCB0VW5pdCk7CgogICAgdmFyIHJlc3VsdFNJLCByZXN1bHREaXNwbGF5LCBmb3JtdWxhU3RyaW5nOwoKICAgIHN3aXRjaChmaW5kKSB7CiAgICAgIGNhc2UgJ1AnOgogICAgICAgIFBfU0kgPSAobl92YWwgKiBSX1NJICogVF9TSSkgLyBWX1NJOwogICAgICAgIHJlc3VsdFNJID0gUF9TSTsKICAgICAgICByZXN1bHREaXNwbGF5ID0gZnJvbVNJX1AoUF9TSSwgcFVuaXQpOwogICAgICAgIGZvcm11bGFTdHJpbmcgPSAnUCA9IG5SVCAvIFYgPSAoJyArIG5fdmFsICsgJyDQvNC+0LvRjCDDlyAnICsgUl9TSS50b0ZpeGVkKDQpICsgJyDDlyAnICsgVF9TSS50b0ZpeGVkKDIpICsgJyBLKSAvICcgKyBWX1NJLnRvRml4ZWQoNikgKyAnINC8wrMgPSAnICsgUF9TSS50b0ZpeGVkKDIpICsgJyDQn9CwJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnVic6CiAgICAgICAgVl9TSSA9IChuX3ZhbCAqIFJfU0kgKiBUX1NJKSAvIFBfU0k7CiAgICAgICAgcmVzdWx0U0kgPSBWX1NJOwogICAgICAgIHJlc3VsdERpc3BsYXkgPSBmcm9tU0lfVihWX1NJLCB2VW5pdCk7CiAgICAgICAgZm9ybXVsYVN0cmluZyA9ICdWID0gblJUIC8gUCA9ICgnICsgbl92YWwgKyAnINC80L7Qu9GMIMOXICcgKyBSX1NJLnRvRml4ZWQoNCkgKyAnIMOXICcgKyBUX1NJLnRvRml4ZWQoMikgKyAnIEspIC8gJyArIFBfU0kudG9GaXhlZCgyKSArICcg0J/QsCA9ICcgKyBWX1NJLnRvRml4ZWQoNikgKyAnINC8wrMnOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICduJzoKICAgICAgICBuX3ZhbCA9IChQX1NJICogVl9TSSkgLyAoUl9TSSAqIFRfU0kpOwogICAgICAgIHJlc3VsdFNJID0gbl92YWw7CiAgICAgICAgcmVzdWx0RGlzcGxheSA9IG5fdmFsOwogICAgICAgIGZvcm11bGFTdHJpbmcgPSAnbiA9IFBWIC8gKFJUKSA9ICgnICsgUF9TSS50b0ZpeGVkKDIpICsgJyDQn9CwIMOXICcgKyBWX1NJLnRvRml4ZWQoNikgKyAnINC8wrMpIC8gKCcgKyBSX1NJLnRvRml4ZWQoNCkgKyAnIMOXICcgKyBUX1NJLnRvRml4ZWQoMikgKyAnIEspID0gJyArIG5fdmFsLnRvRml4ZWQoNikgKyAnINC80L7Qu9GMJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnVCc6CiAgICAgICAgVF9TSSA9IChQX1NJICogVl9TSSkgLyAobl92YWwgKiBSX1NJKTsKICAgICAgICByZXN1bHRTSSA9IFRfU0k7CiAgICAgICAgcmVzdWx0RGlzcGxheSA9IGZyb21TSV9UKFRfU0ksIHRVbml0KTsKICAgICAgICBmb3JtdWxhU3RyaW5nID0gJ1QgPSBQViAvIChuUikgPSAoJyArIFBfU0kudG9GaXhlZCgyKSArICcg0J/QsCDDlyAnICsgVl9TSS50b0ZpeGVkKDYpICsgJyDQvMKzKSAvICgnICsgbl92YWwgKyAnINC80L7Qu9GMIMOXICcgKyBSX1NJLnRvRml4ZWQoNCkgKyAnKSA9ICcgKyBUX1NJLnRvRml4ZWQoMikgKyAnIEsnOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHJlc2V0UmVzdWx0RGlzcGxheSgpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyDQn9GA0L7QstC10YDQutCwINC90LAgTmFOL0luZmluaXR5CiAgICBpZiAoIWlzRmluaXRlKHJlc3VsdERpc3BsYXkpIHx8ICFpc0Zpbml0ZShyZXN1bHRTSSkpIHsKICAgICAgZXJyUC50ZXh0Q29udGVudCA9ICfQntGI0LjQsdC60LAg0YDQsNGB0YfRkdGC0LA6INC/0YDQvtCy0LXRgNGM0YLQtSDQstGF0L7QtNC90YvQtSDQtNCw0L3QvdGL0LUnOwogICAgICByZXNldFJlc3VsdERpc3BsYXkoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHJlc3VsdERpc3BsYXkgPD0gMCAmJiBmaW5kICE9PSAnVCcpIHsKICAgICAgZXJyUC50ZXh0Q29udGVudCA9ICfQoNC10LfRg9C70YzRgtCw0YIg0YDQsNGB0YfRkdGC0LAg0L7RgtGA0LjRhtCw0YLQtdC70YzQvdGL0Lkg0LjQu9C4INC90YPQu9C10LLQvtC5IOKAlCDQv9GA0L7QstC10YDRjNGC0LUg0LTQsNC90L3Ri9C1JzsKICAgICAgcmVzZXRSZXN1bHREaXNwbGF5KCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChmaW5kID09PSAnVCcgJiYgcmVzdWx0U0kgPD0gMCkgewogICAgICBlcnJULnRleHRDb250ZW50ID0gJ9Cg0LDRgdGB0YfQuNGC0LDQvdC90LDRjyDRgtC10LzQv9C10YDQsNGC0YPRgNCwINC90LjQttC1INCw0LHRgdC+0LvRjtGC0L3QvtCz0L4g0L3Rg9C70Y8g4oCUINC/0YDQvtCy0LXRgNGM0YLQtSDQtNCw0L3QvdGL0LUnOwogICAgICByZXNldFJlc3VsdERpc3BsYXkoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vINCV0LTQuNC90LjRhtGLINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGA0LXQt9GD0LvRjNGC0LDRgtCwCiAgICB2YXIgdW5pdExhYmVscyA9IHsKICAgICAgUDogeyAna1BhJzogJ9C60J/QsCcsICdhdG0nOiAn0LDRgtC8JywgJ21tSGcnOiAn0LzQvCDRgNGCLiDRgdGCLicsICdQYSc6ICfQn9CwJyB9LAogICAgICBWOiB7ICdMJzogJ9C7JywgJ20zJzogJ9C8wrMnLCAnbUwnOiAn0LzQuycgfSwKICAgICAgbjogeyAnZGVmYXVsdCc6ICfQvNC+0LvRjCcgfSwKICAgICAgVDogeyAnSyc6ICdLJywgJ0MnOiAnwrBDJyB9CiAgICB9OwoKICAgIHZhciByZXN1bHRVbml0TGFiZWwgPSAnJzsKICAgIGlmIChmaW5kID09PSAnUCcpIHJlc3VsdFVuaXRMYWJlbCA9IHVuaXRMYWJlbHMuUFtwVW5pdF0gfHwgJyc7CiAgICBlbHNlIGlmIChmaW5kID09PSAnVicpIHJlc3VsdFVuaXRMYWJlbCA9IHVuaXRMYWJlbHMuVlt2VW5pdF0gfHwgJyc7CiAgICBlbHNlIGlmIChmaW5kID09PSAnbicpIHJlc3VsdFVuaXRMYWJlbCA9ICfQvNC+0LvRjCc7CiAgICBlbHNlIGlmIChmaW5kID09PSAnVCcpIHJlc3VsdFVuaXRMYWJlbCA9IHVuaXRMYWJlbHMuVFt0VW5pdF0gfHwgJyc7CgogICAgLy8g0J7RgtC+0LHRgNCw0LbQtdC90LjQtSDQvtGB0L3QvtCy0L3QvtCz0L4g0YDQtdC30YPQu9GM0YLQsNGC0LAKICAgIHJlc3VsdFZhbHVlLnRleHRDb250ZW50ID0gKGZpbmQgPT09ICduJykgPyByZXN1bHREaXNwbGF5LnRvRml4ZWQoNCkgOiByZXN1bHREaXNwbGF5LnRvRml4ZWQoMik7CiAgICB2YXIgbGFiZWxNYXAgPSB7ICdQJzogJ9CU0LDQstC70LXQvdC40LUgUCcsICdWJzogJ9Ce0LHRitGR0LwgVicsICduJzogJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INCy0LXRidC10YHRgtCy0LAgbicsICdUJzogJ9Ci0LXQvNC/0LXRgNCw0YLRg9GA0LAgVCcgfTsKICAgIHJlc3VsdExhYmVsLnRleHRDb250ZW50ID0gbGFiZWxNYXBbZmluZF0gfHwgJyc7CiAgICByZXN1bHRVbml0LnRleHRDb250ZW50ID0gcmVzdWx0VW5pdExhYmVsOwoKICAgIC8vINCX0LDQv9C+0LvQvdC10L3QuNC1INCy0YHQtdGFINC/0L7Qu9C10Lkg0LIg0KHQmCDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjwogICAgaWYgKGZpbmQgPT09ICdQJykgewogICAgICBpbnB1dFAudmFsdWUgPSBmcm9tU0lfUChQX1NJLCBwVW5pdCkudG9GaXhlZCgyKTsKICAgIH0gZWxzZSBpZiAoZmluZCA9PT0gJ1YnKSB7CiAgICAgIGlucHV0Vi52YWx1ZSA9IGZyb21TSV9WKFZfU0ksIHZVbml0KS50b0ZpeGVkKDMpOwogICAgfSBlbHNlIGlmIChmaW5kID09PSAnbicpIHsKICAgICAgaW5wdXROLnZhbHVlID0gbl92YWwudG9GaXhlZCg0KTsKICAgIH0gZWxzZSBpZiAoZmluZCA9PT0gJ1QnKSB7CiAgICAgIGlucHV0VC52YWx1ZSA9IGZyb21TSV9UKFRfU0ksIHRVbml0KS50b0ZpeGVkKDIpOwogICAgfQoKICAgIC8vINCe0LHQvdC+0LLQu9C10L3QuNC1INGB0LLQvtC00LrQuCDQstGB0LXRhSDQv9Cw0YDQsNC80LXRgtGA0L7QsgogICAgcmVzUC50ZXh0Q29udGVudCA9IGZyb21TSV9QKFBfU0ksICdrUGEnKS50b0ZpeGVkKDIpOwogICAgcmVzVi50ZXh0Q29udGVudCA9IGZyb21TSV9WKFZfU0ksICdMJykudG9GaXhlZCgzKTsKICAgIHJlc04udGV4dENvbnRlbnQgPSBuX3ZhbC50b0ZpeGVkKDQpOwogICAgcmVzVC50ZXh0Q29udGVudCA9IFRfU0kudG9GaXhlZCgyKTsKCiAgICAvLyDQn9C+0LrQsNC30LDRgtGMINGE0L7RgNC80YPQu9GDINGBINC/0L7QtNGB0YLQsNC90L7QstC60L7QuQogICAgZm9ybXVsYURldGFpbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGZvcm11bGFUZXh0LnRleHRDb250ZW50ID0gZm9ybXVsYVN0cmluZzsKICB9CgogIGZ1bmN0aW9uIHJlc2V0UmVzdWx0RGlzcGxheSgpIHsKICAgIHJlc3VsdFZhbHVlLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICByZXN1bHRMYWJlbC50ZXh0Q29udGVudCA9ICfQndCw0LbQvNC40YLQtSDCq9Cg0LDRgdGB0YfQuNGC0LDRgtGMwrsnOwogICAgcmVzdWx0VW5pdC50ZXh0Q29udGVudCA9ICcnOwogICAgcmVzUC50ZXh0Q29udGVudCA9ICfigJQnOwogICAgcmVzVi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgcmVzTi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgcmVzVC50ZXh0Q29udGVudCA9ICfigJQnOwogICAgZm9ybXVsYURldGFpbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgZm9ybXVsYVRleHQudGV4dENvbnRlbnQgPSAnJzsKICB9CgogIGZ1bmN0aW9uIHJlc2V0QWxsKCkgewogICAgaW5wdXRQLnZhbHVlID0gJyc7CiAgICBpbnB1dFYudmFsdWUgPSAnJzsKICAgIGlucHV0Ti52YWx1ZSA9ICcnOwogICAgaW5wdXRULnZhbHVlID0gJyc7CiAgICBjbGVhckVycm9ycygpOwogICAgcmVzZXRSZXN1bHREaXNwbGF5KCk7CiAgICB1cGRhdGVEaXNhYmxlZEZpZWxkcygpOwogICAgdXBkYXRlUkRpc3BsYXkoKTsKICAgIGZpbmRTZWxlY3QudmFsdWUgPSAnUCc7CiAgICB1cGRhdGVEaXNhYmxlZEZpZWxkcygpOwogICAgdW5pdFAudmFsdWUgPSAna1BhJzsKICAgIHVuaXRWLnZhbHVlID0gJ0wnOwogICAgdW5pdFQudmFsdWUgPSAnSyc7CiAgICB1cGRhdGVSRGlzcGxheSgpOwogIH0KCiAgLy8g0J7QsdGA0LDQsdC+0YLRh9C40LrQuCDRgdC+0LHRi9GC0LjQuQogIGZpbmRTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICB1cGRhdGVEaXNhYmxlZEZpZWxkcygpOwogICAgcmVzZXRSZXN1bHREaXNwbGF5KCk7CiAgICBjbGVhckVycm9ycygpOwogIH0pOwoKICB1bml0UC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgIHVwZGF0ZVJEaXNwbGF5KCk7CiAgICByZXNldFJlc3VsdERpc3BsYXkoKTsKICAgIGNsZWFyRXJyb3JzKCk7CiAgfSk7CiAgdW5pdFYuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICB1cGRhdGVSRGlzcGxheSgpOwogICAgcmVzZXRSZXN1bHREaXNwbGF5KCk7CiAgICBjbGVhckVycm9ycygpOwogIH0pOwogIHVuaXRULmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgcmVzZXRSZXN1bHREaXNwbGF5KCk7CiAgICBjbGVhckVycm9ycygpOwogIH0pOwoKICAvLyDQodCx0YDQvtGBINC+0YjQuNCx0L7QuiDQv9GA0Lgg0LLQstC+0LTQtQogIFtpbnB1dFAsIGlucHV0ViwgaW5wdXROLCBpbnB1dFRdLmZvckVhY2goZnVuY3Rpb24oZWwpIHsKICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyRXJyb3JzKCk7CiAgICB9KTsKICB9KTsKCiAgY2FsY0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGN1bGF0ZSk7CiAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZXNldEFsbCk7CgogIC8vINCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPCiAgdXBkYXRlRGlzYWJsZWRGaWVsZHMoKTsKICB1cGRhdGVSRGlzcGxheSgpOwogIHJlc2V0UmVzdWx0RGlzcGxheSgpOwp9KSgpOwo=