Skip to content

Commit

Permalink
Merge pull request #4509 from esphome/bump-2024.12.0
Browse files Browse the repository at this point in the history
2024.12.0
  • Loading branch information
jesserockz authored Dec 18, 2024
2 parents 38ef940 + e5d2f2b commit a7bc1ef
Show file tree
Hide file tree
Showing 30 changed files with 791 additions and 19 deletions.
2 changes: 1 addition & 1 deletion Doxygen
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER = 2024.11.3
PROJECT_NUMBER = 2024.12.0

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ESPHOME_PATH = ../esphome
ESPHOME_REF = 2024.11.3
ESPHOME_REF = 2024.12.0
PAGEFIND_VERSION=1.1.1
PAGEFIND=pagefind
NET_PAGEFIND=../pagefindbin/pagefind
Expand Down
Binary file added _static/changelog-2024.12.0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion _static/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2024.11.3
2024.12.0
247 changes: 247 additions & 0 deletions changelog/2024.12.0.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
ESPHome 2024.12.0 - 18th December 2024
======================================

.. seo::
:description: Changelog for ESPHome 2024.12.0.
:image: /_static/changelog-2024.12.0.png
:author: Jesse Hills
:author_twitter: @jesserockz

.. imgtable::
:columns: 2

Seeed Studio MR60BHA2 mmWave, components/seeed_mr60bha2, seeed_mr60bha2.jpg
Seeed Studio MR60FDA2 mmWave, components/seeed_mr60fda2, seeed_mr60fda2.jpg
H-bridge Switch, components/switch/hbridge, hbridge-relay.jpg
Switch Binary Sensor, components/binary_sensor/switch, electric-switch.svg, dark-invert


ESP-IDF
-------

ESPHome has now updated the core ESP32 code to use `ESP-IDF <https://github.com/espressif/esp-idf/>`__ 5.1.5.
This is a major upgrade and should bring more features, chip support (Most notably the ESP32-C6 that people keep raving on about)
and in general more stability.

To acommodate this change, ESPHome has moved away from the "official" platformio provided ESP32 platform,
and is now using a community fork `pioarduino/platform-espressif32 <https://github.com/pioarduino/platform-espressif32>`__ as platformio
has decided to stop providing ESP-IDF updates to their platform for Espressif chips. As a user, you should not notice any difference.

As we are unable to test every single component and board, there might be issues with specific configurations. Please report these in
the `ESPHome issue tracker <https://github.com/esphome/issues/issues>`__ on GitHub.


ESPHome ``armv7`` Docker Support
--------------------------------

We will be retiring ESPHome's Docker support for ``armv7`` hardware in the February 2025 release.

This is due to both waning support as it relates to tooling and performance reasons. We strongly recommend moving to a
more modern architecture, especially if you're using the ESPHome Device Compiler to build/compile firmware for your
devices.


Full list of changes
--------------------

New Components
^^^^^^^^^^^^^^

- Add: Seeed Studio mr60fda2 mmwave sensor :esphomepr:`7576` by :ghuser:`limengdu` (new-integration)
- Add: Seeed Studio MR60BHA2 mmWave Sensor :esphomepr:`7589` by :ghuser:`limengdu` (new-integration)

New Platforms
^^^^^^^^^^^^^

- binary_sensor for switch state :esphomepr:`7819` by :ghuser:`ssieb` (new-platform)
- Add H-Bridge switch component :esphomepr:`7421` by :ghuser:`dwmw2` (new-platform)

Breaking Changes
^^^^^^^^^^^^^^^^

- Fix entity name validation to allow "Off" and "On" :esphomepr:`7821` by :ghuser:`jesserockz` (breaking-change)
- MQTT sensors handling of publishing NaN values :esphomepr:`7768` by :ghuser:`kbullet` (breaking-change)
- Synchronise esp32 boards with platform version 51.03.07 :esphomepr:`7945` by :ghuser:`jesserockz` (breaking-change)
- [sgp30] Set default update interval to 60s :esphomepr:`7952` by :ghuser:`jesserockz` (breaking-change)

Beta Changes
^^^^^^^^^^^^

- [const] Add RMT CONF variables to const.py :esphomepr:`7953` by :ghuser:`swoboda1337`
- [sgp30] Set default update interval to 60s :esphomepr:`7952` by :ghuser:`jesserockz` (breaking-change)
- [dallas_temp] Move delay_microseconds_safe to iram :esphomepr:`7957` by :ghuser:`swoboda1337`
- [i2s_audio] Bugfix: Correctly set ring buffer size :esphomepr:`7959` by :ghuser:`kahrendt`
- [adc] Restore missing LIBRETINY code in a separated file :esphomepr:`7955` by :ghuser:`edwardtfn`
- [font] cleanly handle font file format exception (Bugfix) :esphomepr:`7970` by :ghuser:`clydebarrow`
- [dashboard] Accept basic auth header :esphomepr:`7965` by :ghuser:`jesserockz`
- Bump esphome-dashboard to 20241217.1 :esphomepr:`7971` by :ghuser:`jesserockz`
- [esp32_ble] Use RAMAllocator to avoid panic abort from ``new`` :esphomepr:`7936` by :ghuser:`jesserockz`

All changes
^^^^^^^^^^^

- Bump codecov/codecov-action from 4 to 5 :esphomepr:`7771` by :ghuser:`dependabot[bot]`
- [remote_base] Fix extra comma in dump raw :esphomepr:`7774` by :ghuser:`swoboda1337`
- [nextion] New trigger `on_buffer_overflow` :esphomepr:`7772` by :ghuser:`edwardtfn`
- enable rp2040 for online_image :esphomepr:`7769` by :ghuser:`afflux`
- [nextion] Add publish actions :esphomepr:`7646` by :ghuser:`pkejval`
- [wifi] Make wifi_channel_() public :esphomepr:`7818` by :ghuser:`nielsnl68`
- feat(WiFi): Add wifi.configure action :esphomepr:`7335` by :ghuser:`Rapsssito`
- allow multiple graphical menus :esphomepr:`7809` by :ghuser:`ssieb`
- Move ``CONF_NAME_ADD_MAC_SUFFIX`` to ``const.py`` :esphomepr:`7820` by :ghuser:`jesserockz`
- binary_sensor for switch state :esphomepr:`7819` by :ghuser:`ssieb` (new-platform)
- [nextion] Remove assignment within `if` :esphomepr:`7824` by :ghuser:`kbx81`
- [ota] `void` functions should return nothing :esphomepr:`7825` by :ghuser:`kbx81`
- [safe_mode] Remove unused capture :esphomepr:`7826` by :ghuser:`kbx81`
- [stepper] Remove unnecessary ``#include`` :esphomepr:`7827` by :ghuser:`kbx81`
- [sx1509] Fix up includes :esphomepr:`7828` by :ghuser:`kbx81`
- [uart] `void` functions should return nothing :esphomepr:`7829` by :ghuser:`kbx81`
- [audio] Header modernization :esphomepr:`7832` by :ghuser:`kbx81`
- [opentherm] Follow variable naming convention :esphomepr:`7833` by :ghuser:`kbx81`
- [opentherm] Add nolint for 8266 static global :esphomepr:`7837` by :ghuser:`kbx81`
- [helpers] Add NOLINT for Mutex private field ``handle_`` :esphomepr:`7838` by :ghuser:`kbx81`
- Add waveshare 1 45 in v2 b support :esphomepr:`7052` by :ghuser:`programmingbgloDE`
- added Waveshare BWR Mode for the 7.5in Display :esphomepr:`7687` by :ghuser:`JonasB2497`
- [homeassistant.number] Return when value not set :esphomepr:`7839` by :ghuser:`kbx81`
- [CI] Add/update some system include paths :esphomepr:`7831` by :ghuser:`kbx81`
- add on_key trigger to matrix_keypad :esphomepr:`7830` by :ghuser:`ssieb`
- Add: Seeed Studio mr60fda2 mmwave sensor :esphomepr:`7576` by :ghuser:`limengdu` (new-integration)
- [lvgl] clang-tidy fixes for #7822 :esphomepr:`7843` by :ghuser:`kbx81`
- [xiaomi_ble] clang-tidy fixes for #7822 :esphomepr:`7860` by :ghuser:`kbx81`
- [wireguard] clang-tidy fixes for #7822 :esphomepr:`7859` by :ghuser:`kbx81`
- [dsmr] clang-tidy fixes for #7822 :esphomepr:`7848` by :ghuser:`kbx81`
- Fix entity name validation to allow "Off" and "On" :esphomepr:`7821` by :ghuser:`jesserockz` (breaking-change)
- [camera_web_server] Add ``NOLINT`` due to naming :esphomepr:`7823` by :ghuser:`kbx81`
- [display_menu_base] clang-tidy fixes for #7822 :esphomepr:`7847` by :ghuser:`kbx81`
- [nextion] clang-tidy fixes for #7822 :esphomepr:`7852` by :ghuser:`kbx81`
- [shelly_dimmer] clang-tidy fixes for #7822 :esphomepr:`7844` by :ghuser:`kbx81`
- [sim800l] clang-tidy fixes for #7822 :esphomepr:`7856` by :ghuser:`kbx81`
- [nfc, pn532, pn7150, pn7160] clang-tidy fixes for #7822 :esphomepr:`7853` by :ghuser:`kbx81`
- [output] clang-tidy fixes for #7822 :esphomepr:`7854` by :ghuser:`kbx81`
- [sun_gtil2] clang-tidy fixes for #7822 :esphomepr:`7858` by :ghuser:`kbx81`
- [pipsolar] clang-tidy fixes for #7822 :esphomepr:`7855` by :ghuser:`kbx81`
- [ltr501] clang-tidy fixes for #7822 :esphomepr:`7850` by :ghuser:`kbx81`
- [cse7766] clang-tidy fixes for #7822 :esphomepr:`7846` by :ghuser:`kbx81`
- [alarm_control_panel] clang-tidy fixes for #7822 :esphomepr:`7845` by :ghuser:`kbx81`
- [sprinkler] clang-tidy fixes for #7822 :esphomepr:`7857` by :ghuser:`kbx81`
- [haier] clang-tidy fixes for #7822 :esphomepr:`7849` by :ghuser:`kbx81`
- [mqtt] clang-tidy fixes for #7822 :esphomepr:`7851` by :ghuser:`kbx81`
- [helpers, optional] clang-tidy fixes for #7822 :esphomepr:`7841` by :ghuser:`kbx81`
- Move ``USE_CAPTIVE_PORTAL`` into all define groups it can be used with :esphomepr:`7863` by :ghuser:`jesserockz`
- Bump docker/build-push-action from 6.9.0 to 6.10.0 in /.github/actions/build-image :esphomepr:`7866` by :ghuser:`dependabot[bot]`
- python lint for platform components :esphomepr:`7864` by :ghuser:`tomaszduda23`
- [max31865] clang-tidy fixes for #7822 :esphomepr:`7876` by :ghuser:`kbx81`
- [esp32_ble] clang-tidy fixes for #7822 :esphomepr:`7883` by :ghuser:`kbx81`
- [mqtt] clang-tidy fixes for #7822 :esphomepr:`7877` by :ghuser:`kbx81`
- [uln2003] clang-tidy fixes for #7822 :esphomepr:`7881` by :ghuser:`kbx81`
- [rotary_encoder] clang-tidy fixes for #7822 :esphomepr:`7880` by :ghuser:`kbx81`
- [pca6416a, pca9554] clang-tidy fixes for #7822 :esphomepr:`7879` by :ghuser:`kbx81`
- [nextion] clang-tidy fixes for #7822 :esphomepr:`7878` by :ghuser:`kbx81`
- [various] clang-tidy fixes for #7822 :esphomepr:`7874` by :ghuser:`kbx81`
- [logger] clang-tidy fixes for #7822 :esphomepr:`7875` by :ghuser:`kbx81`
- [ezo] clang-tidy fixes for #7822 :esphomepr:`7873` by :ghuser:`kbx81`
- [apds9306] clang-tidy fixes for #7822 :esphomepr:`7872` by :ghuser:`kbx81`
- [dht] clang-tidy fixes for #7822 :esphomepr:`7871` by :ghuser:`kbx81`
- [network] clang-tidy fixes for #7822 :esphomepr:`7870` by :ghuser:`kbx81`
- [lvgl] Make image update via lambda work :esphomepr:`7886` by :ghuser:`clydebarrow`
- [deep_sleep] fix deep_sleep not keeping awake when sleep_duration is defined :esphomepr:`7885` by :ghuser:`makstech`
- [hx711] clang-tidy fixes for #7822 :esphomepr:`7900` by :ghuser:`kbx81`
- [modbus_controller] Clang fixes :esphomepr:`7899` by :ghuser:`kbx81`
- Add H-Bridge switch component :esphomepr:`7421` by :ghuser:`dwmw2` (new-platform)
- [CI] Bump GHA runners to ``ubuntu-24.04`` :esphomepr:`7905` by :ghuser:`kbx81`
- [font et. al.] Remove explicit check for pillow installed. :esphomepr:`7891` by :ghuser:`clydebarrow`
- [CI] Update clang-tidy to 18.1.3 :esphomepr:`7822` by :ghuser:`kbx81`
- MQTT sensors handling of publishing NaN values :esphomepr:`7768` by :ghuser:`kbullet` (breaking-change)
- [ble] Allow setting shorter name for ble advertisements :esphomepr:`7867` by :ghuser:`jesserockz`
- [font] Restore correct default glyphs for bitmap fonts :esphomepr:`7907` by :ghuser:`clydebarrow`
- [helpers] clang-tidy fix for #7706 :esphomepr:`7909` by :ghuser:`kbx81`
- [docker] Fix clang-tidy installation :esphomepr:`7910` by :ghuser:`kbx81`
- [sntp] Resolve warnings from ESP-IDF 5.x :esphomepr:`7913` by :ghuser:`clydebarrow`
- Add strftime variant with background color :esphomepr:`7714` by :ghuser:`mikosoft83`
- [i2s_audio] Bugfix: Follow configured bits per sample :esphomepr:`7916` by :ghuser:`kahrendt`
- Haier AC quiet mode switch fix :esphomepr:`7902` by :ghuser:`paveldn`
- [CI] Update clang-tidy to 18.1.8 :esphomepr:`7915` by :ghuser:`syssi`
- [i2s_audio] Speaker type fix :esphomepr:`7919` by :ghuser:`kbx81`
- [esp32_rmt_led_strip] Add ``COMPONENT_SCHEMA`` extending :esphomepr:`7918` by :ghuser:`jesserockz`
- [esp32] Use pioarduino + IDF 5.1.5 as default for IDF builds :esphomepr:`7706` by :ghuser:`kbx81`
- Bump actions/cache from 4.1.2 to 4.2.0 :esphomepr:`7926` by :ghuser:`dependabot[bot]`
- Bump actions/cache from 4.1.2 to 4.2.0 in /.github/actions/restore-python :esphomepr:`7925` by :ghuser:`dependabot[bot]`
- Add OCI Image Labels :esphomepr:`7924` by :ghuser:`Passific`
- Move docker oci labels to correct image :esphomepr:`7927` by :ghuser:`jesserockz`
- Update project description :esphomepr:`7928` by :ghuser:`jesserockz`
- [modbus] More clean-up :esphomepr:`7921` by :ghuser:`kbx81`
- Add: Seeed Studio MR60BHA2 mmWave Sensor :esphomepr:`7589` by :ghuser:`limengdu` (new-integration)
- Optimize QMC5883L reads :esphomepr:`7889` by :ghuser:`dnschneid`
- [display] Fix strftime overload ignoring alignment :esphomepr:`7937` by :ghuser:`jesserockz`
- Add font anti-aliasing for grayscale display :esphomepr:`7934` by :ghuser:`koreapyj`
- Bump pypa/gh-action-pypi-publish from 1.12.2 to 1.12.3 :esphomepr:`7941` by :ghuser:`dependabot[bot]`
- [adc] Split files by platform :esphomepr:`7940` by :ghuser:`edwardtfn`
- [const] Move ``CONF_TEMPERATURE_COMPENSATION`` to common const.py :esphomepr:`7943` by :ghuser:`jesserockz`
- [lvgl] Fix image `mode` property (Bugfix) :esphomepr:`7938` by :ghuser:`clydebarrow`
- [lvgl] Add `on_change` event :esphomepr:`7939` by :ghuser:`clydebarrow`
- Synchronise esp32 boards with platform version 51.03.07 :esphomepr:`7945` by :ghuser:`jesserockz` (breaking-change)
- [i2c] Use correct macro to determine number of i2c peripherals for idf :esphomepr:`7947` by :ghuser:`jesserockz`
- [const] Add RMT CONF variables to const.py :esphomepr:`7953` by :ghuser:`swoboda1337`
- [sgp30] Set default update interval to 60s :esphomepr:`7952` by :ghuser:`jesserockz` (breaking-change)
- [dallas_temp] Move delay_microseconds_safe to iram :esphomepr:`7957` by :ghuser:`swoboda1337`
- [i2s_audio] Bugfix: Correctly set ring buffer size :esphomepr:`7959` by :ghuser:`kahrendt`
- [adc] Restore missing LIBRETINY code in a separated file :esphomepr:`7955` by :ghuser:`edwardtfn`
- [font] cleanly handle font file format exception (Bugfix) :esphomepr:`7970` by :ghuser:`clydebarrow`
- [dashboard] Accept basic auth header :esphomepr:`7965` by :ghuser:`jesserockz`
- Bump esphome-dashboard to 20241217.1 :esphomepr:`7971` by :ghuser:`jesserockz`
- [esp32_ble] Use RAMAllocator to avoid panic abort from ``new`` :esphomepr:`7936` by :ghuser:`jesserockz`

Past Changelogs
---------------

- :doc:`2024.11.0`
- :doc:`2024.10.0`
- :doc:`2024.9.0`
- :doc:`2024.8.0`
- :doc:`2024.7.0`
- :doc:`2024.6.0`
- :doc:`2024.5.0`
- :doc:`2024.4.0`
- :doc:`2024.3.0`
- :doc:`2024.2.0`
- :doc:`2023.12.0`
- :doc:`2023.11.0`
- :doc:`2023.10.0`
- :doc:`2023.9.0`
- :doc:`2023.8.0`
- :doc:`2023.7.0`
- :doc:`2023.6.0`
- :doc:`2023.5.0`
- :doc:`2023.4.0`
- :doc:`2023.3.0`
- :doc:`2023.2.0`
- :doc:`2022.12.0`
- :doc:`2022.11.0`
- :doc:`2022.10.0`
- :doc:`2022.9.0`
- :doc:`2022.8.0`
- :doc:`2022.6.0`
- :doc:`2022.5.0`
- :doc:`2022.4.0`
- :doc:`2022.3.0`
- :doc:`2022.2.0`
- :doc:`2022.1.0`
- :doc:`2021.12.0`
- :doc:`2021.11.0`
- :doc:`2021.10.0`
- :doc:`2021.9.0`
- :doc:`2021.8.0`
- :doc:`v1.20.0`
- :doc:`v1.19.0`
- :doc:`v1.18.0`
- :doc:`v1.17.0`
- :doc:`v1.16.0`
- :doc:`v1.15.0`
- :doc:`v1.14.0`
- :doc:`v1.13.0`
- :doc:`v1.12.0`
- :doc:`v1.11.0`
- :doc:`v1.10.0`
- :doc:`v1.9.0`
- :doc:`v1.8.0`
- :doc:`v1.7.0`
2 changes: 1 addition & 1 deletion changelog/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Changelog
=========

.. redirect::
:url: /changelog/2024.11.0.html
:url: /changelog/2024.12.0.html

.. toctree::
:glob:
Expand Down
44 changes: 44 additions & 0 deletions components/binary_sensor/nextion.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,50 @@ should be prefixed with the page name (page0/page1).

``nextion_component_name: page0.r0``

.. _binary_sensor-nextion-publish_action:

``binary_sensor.nextion.publish`` Action
----------------------------------------

You can also publish a state to a Nextion binary sensor from elsewhere in your YAML file
with the ``binary_sensor.nextion.publish`` action.

.. code-block:: yaml
# Example configuration entry
binary_sensor:
- platform: nextion
id: nextion_bsensor
...
# in some trigger
on_...:
- binary_sensor.nextion.publish:
id: nextion_bsensor
state: true
# These are optional. Defaults to true.
publish_state: true
send_to_nextion: true
# Templated
- binary_sensor.nextion.publish:
id: nextion_bsensor
state: !lambda 'return true;'
# These are optional. Defaults to true.
publish_state: true
send_to_nextion: true
Configuration variables:

- **id** (**Required**, :ref:`config-id`): The ID of the Nextion switch.
- **state** (**Required**, string, :ref:`templatable <config-templatable>`): The boolean state to publish.
- **publish_state** (**Optional**, bool, :ref:`templatable <config-templatable>`): Publish new state to Home Assistant.
Default is true.
- **send_to_nextion** (**Optional**, bool, :ref:`templatable <config-templatable>`): Publish new state to Nextion
display which will update component. Default is true.

.. note::

This action can also be written in lambdas. See :ref:`nextion_binary_sensor_lambda_calls`

.. _nextion_binary_sensor_lambda_calls:

Lambda Calls
Expand Down
36 changes: 36 additions & 0 deletions components/binary_sensor/switch.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
.. _switch-binary-sensor:

Switch Binary Sensor
====================

.. seo::
:description: Instructions for setting up switch binary sensors with ESPHome.

The Switch Binary Sensor platform allows you to view the state of any switch component as a
read-only binary sensor.

.. code-block:: yaml
# Example configuration entry
binary_sensor:
- platform: switch
name: "Output state"
source_id: relay1
switch:
- platform: gpio
id: relay1
pin: GPIOXX
Configuration variables:
------------------------

- **source_id** (**Required**, :ref:`config-id`): The source switch to observe.
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.

See Also
--------

- :doc:`/components/binary_sensor/index`
- :apiref:`switch/binary_sensor/switch_binary_sensor.h`
- :ghedit:`Edit`
17 changes: 17 additions & 0 deletions components/display/nextion.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ Configuration variables:
- **on_wake** (*Optional*, :ref:`Action <config-action>`): An action to be performed when the Nextion wakes up. See :ref:`Nextion Automation <nextion-on_sleep>`.
- **on_page** (*Optional*, :ref:`Action <config-action>`): An action to be performed after a page change. See :ref:`Nextion Automation <nextion-on_page>`.
- **on_touch** (*Optional*, :ref:`Action <config-action>`): An action to be performed after a touch event (press or release). See :ref:`Nextion Automation <nextion-on_touch>`.
- **on_buffer_overflow** (*Optional*, :ref:`Action <config-action>`): An action to be performed when the Nextion reports a buffer overflow. See :ref:`Nextion Automation <nextion-on_buffer_overflow>`.

.. _display-nextion_lambda:

Expand Down Expand Up @@ -281,6 +282,22 @@ The following arguments will be available:
ESP_LOGD("nextion.on_touch", "Component Id: %i", component_id);
ESP_LOGD("nextion.on_touch", "Event type: %s", touch_event ? "Press" : "Release");
.. _nextion-on_buffer_overflow:

``on_buffer_overflow``
**********************

This automation is triggered when the Nextion display reports a serial buffer overflow.
When this happens, the Nextion's buffer will continue to receive the new instructions, but all previous instructions are lost and the Nextion queue may get out of sync.
This automation will allow you handle this situation nicelly, like repeating some command to Nextion or restarting the system.

.. code-block:: yaml
on_buffer_overflow:
then:
lambda: |-
ESP_LOGW("nextion.on_buffer_overflow", "Nextion reported a buffer overflow event!");
.. _nextion_upload_tft_file:

Uploading A TFT File
Expand Down
Loading

0 comments on commit a7bc1ef

Please sign in to comment.