Releases: Atmosphere-NX/Atmosphere
Atmosphère 0.11.1
0.11.1 is Atmosphère's thirtieth official release.
fusee-primary was last updated in: 0.11.1.
With thanks to the @switchbrew team, Atmosphère 0.11.1 is bundled with hbl 2.3.1, and hbmenu 3.3.0.
The following was changed since the last release:
- A bug was fixed that could cause owls to flicker under certain circumstances.
- For those interested in technical details, in 10.0.0 kernelldr/kernel no longer set cpuactlr_el1, assuming that it was set correctly by the secure monitor.
- However, exosphere did not set cpuactlr_el1. This meant that the register held the reset value going into boot.
- This caused a variety of highly erratic symptoms, including causing basically any game to crash seemingly randomly.
- A number of other major inaccuracies in exosphere were corrected.
- General system stability improvements to enhance the user's experience.
The changelog for the previous release, 0.11.0 is as follows:
- Support was added for 10.0.0.
- Exosphere has been updated to reflect the new key import semantics in 10.0.0.
- kernel_ldr now implements physical ASLR for the kernel's backing pages.
- Loader, NCM, and PM have been updated to reflect the changes Nintendo made in 10.0.0.
- Creport was updated to use the new
pgl
service to terminate processes instead ofns:dev
.
- A reimplementation of the
erpt
(error reports) system module was added.- In previous versions of Atmosphere, a majority of error reports were prevented via a combination of custom creport, fatal, and stubbed eclct.
- However, error reports were still generated via some system actions.
- Most notably, any time the error applet appeared, an error report was generated.
- By default, atmosphere disabled the uploading of error reports, but going online in OFW after an error report occurred in Atmosphere could lead to undesirable telemetry.
- Atmosphere's
erpt
reimplementation allows the system to interact with existing error reports as expected. - However, all new error reports are instead saved to the sd card (
/atmosphere/erpt_reports
), and are not committed to the system savegame.- Users curious about what kind of telemetry is being prevented can view the reports as they're generated in there.
- Reports are saved as msgpack (as this is what Nintendo uses).
- Please note, not all telemetry is disabled. Play reports and System reports will continue to function unmodified.
- With atmosphere's
erpt
implementation, homebrew can now use the native error applet to display errors without worrying about generating undesirable telemetry.
- libstratosphere and libvapours received a number of improvements.
- With thanks to @Adubbz for his work, the NCM namespace now has client code.
- This lays the groundwork for first-class system update/downgrade homebrew support in the near future.
- In particular, code implementing the os namespace is significantly more accurate.
- In addition, Nintendo's allocators were implemented, allowing for identical memory efficiency versus Nintendo's implementations.
- With thanks to @Adubbz for his work, the NCM namespace now has client code.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.11, please see the official release notes.
Atmosphère 0.11.0 (pre-release)
0.11.0 is Atmosphère's twenty-ninth official release.
fusee-primary was last updated in: 0.11.0.
With thanks to the @switchbrew team, Atmosphère 0.11.0 is bundled with hbl 2.3.1, and hbmenu 3.3.0.
Please note: Atmosphère 0.11.0 is currently in pre-release.
- If any bugs are reported while Atmosphère is in pre-release, they will be fixed and the build will be updated.
- 0.11.0 will transition to release after a short amount of time has passed without pressing bug reports.
The following was changed since the last release:
- Support was added for 10.0.0.
- Exosphere has been updated to reflect the new key import semantics in 10.0.0.
- kernel_ldr now implements physical ASLR for the kernel's backing pages.
- Loader, NCM, and PM have been updated to reflect the changes Nintendo made in 10.0.0.
- Creport was updated to use the new
pgl
service to terminate processes instead ofns:dev
.
- A reimplementation of the
erpt
(error reports) system module was added.- In previous versions of Atmosphere, a majority of error reports were prevented via a combination of custom creport, fatal, and stubbed eclct.
- However, error reports were still generated via some system actions.
- Most notably, any time the error applet appeared, an error report was generated.
- By default, atmosphere disabled the uploading of error reports, but going online in OFW after an error report occurred in Atmosphere could lead to undesirable telemetry.
- Atmosphere's
erpt
reimplementation allows the system to interact with existing error reports as expected. - However, all new error reports are instead saved to the sd card (
/atmosphere/erpt_reports
), and are not committed to the system savegame.- Users curious about what kind of telemetry is being prevented can view the reports as they're generated in there.
- Reports are saved as msgpack (as this is what Nintendo uses).
- Please note, not all telemetry is disabled. Play reports and System reports will continue to function unmodified.
- With atmosphere's
erpt
implementation, homebrew can now use the native error applet to display errors without worrying about generating undesirable telemetry.
- libstratosphere and libvapours received a number of improvements.
- With thanks to @Adubbz for his work, the NCM namespace now has client code.
- This lays the groundwork for first-class system update/downgrade homebrew support in the near future.
- In particular, code implementing the os namespace is significantly more accurate.
- In addition, Nintendo's allocators were implemented, allowing for identical memory efficiency versus Nintendo's implementations.
- With thanks to @Adubbz for his work, the NCM namespace now has client code.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.11, please see the official release notes.
Atmosphère 0.10.5
0.10.5 is Atmosphère's twenty-eighth official release.
fusee-primary was last updated in: 0.10.4.
With thanks to the @switchbrew team, Atmosphère 0.10.5 is bundled with hbl 2.3, and hbmenu 3.2.0.
The following was changed since the last release:
- Changes were made to the way fs.mitm builds images when providing a layeredfs romfs.
- Building romfs metadata previously had a memory cost of about ~4-5x the file table size.
- This caused games that have particularly enormous file metadata tables (> 4 MB) to exhaust fs.mitm's 16 MB memory pool.
- The code that creates romfs images was thus changed to be significantly more memory efficient, again.
- Memory requirements have been lowered from ~4x file table size to ~2x file table size + 0.5 MB.
- There is a slight speed penalty to this, but testing on Football Manager 2020 only took an extra ~1.5 seconds for the game to boot with many modded files.
- This shouldn't be noticeable thanks to the async changes made in 0.10.2.
- If you encounter a game that exhausts ams.mitm's memory (crashing it) when loading layeredfs mods, please contact SciresM.
- Romfs building can be made even more memory efficient, but unless games show up with even more absurdly huge file tables it seems not worth the speed trade-off.
- A bug was fixed that caused Atmosphere's fatal error context to not dump TLS for certain processes.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.10, please see the official release notes.
Atmosphère 0.10.4
0.10.4 is Atmosphère's twenty-seventh official release.
fusee-primary was last updated in: 0.10.4.
With thanks to the @switchbrew team, Atmosphère 0.10.4 is bundled with hbl 2.3, and hbmenu 3.2.0.
The following was changed since the last release:
- With major thanks to @Adubbz for his work, the NCM system module has now been re-implemented.
- This was a major stepping stone towards the goal of having implementations of everything in the Switch's package1/package2 firmware.
- This also lays the groundwork for libstratosphere providing bindings for changing the installed version of the Switch's OS.
- Please Note: The NCM implementation will initially be opt-in.
- The Atmosphere team is confident in our NCM implementation (and we have tested it on every firmware version).
- That said, this is our first system module that manages NAND savegames -- and caution is a habit.
- We do not anticipate any issues that didn't come up in testing, so this is just our being particularly careful.
- Users interested in opting in to using our implementation should set
stratosphere!ncm_enabled = 1
in BCT.ini.- In the unlikely event that any issues are encountered, please report them to @SciresM.
- The NCM implementation will stop being opt-in in a future update, after thorough testing has been done in practice.
- A bug was fixed in emummc that caused Nintendo path to be corrupted on 1.0.0.
- This manifested as the emummc folder being created inside the virtual NAND instead of the SD card.
- It's unlikely there are any negative consequences to this in practice.
- If you want to be truly sure, you can re-clone sysmmc before updating a 1.0.0 emummc to latest firmware.
- Stratosphere system modules now use new Nintendo-style FS bindings instead of stdio.
- This saves a modest amount of memory due to leaner code, and greatly increases the accuracy of several components.
- These bindings will make it easier for other system modules using libstratosphere to interact with the filesystem.
- This also lays the groundwork for changes necessary to support per-emummc Atmosphere folders in a future update.
- Atmosphere's fatal error context now dumps 0x100 of TLS.
- This will make it much easier to fix bugs when an error report is dumped for whatever caused the crash.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.10, please see the official release notes.
Atmosphère 0.10.3
0.10.3 is Atmosphère's twenty-sixth official release.
fusee-primary was last updated in: 0.10.3.
With thanks to the @switchbrew team, Atmosphère 0.10.3 is bundled with hbl 2.3, and hbmenu 3.2.0.
The following was changed since the last release:
- Support was added for 9.2.0.
- Support was added for redirecting manual html content for games.
- This works like normal layeredfs, replacing content placed in
/atmosphere/contents/<program id>/manual_html/
. - This allows for game mods/translations to provide custom manual content, if they so choose.
- This works like normal layeredfs, replacing content placed in
- A number of improvements were made to Atmosphere's memory usage, including:
fatal
now uses STB instead of freetype for rendering.- This saves around 1 MB of memory, and makes our fatal substantially leaner than Nintendo's.
sm
no longer wastes 2 MiB unnecessarily.
- fusee/sept's sdmmc access now better matches official behavior.
- This improves compatibility with some SD cards.
ro
has been updated to reflect changes made in 9.1.0.- The temporary auto-migration added in 0.10.0 has been removed, since the transitionary period is well over.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.10.0, please see the official release notes.
Atmosphère 0.10.2
0.10.2 is Atmosphère's twenty-fifth official release.
fusee-primary was last updated in: 0.10.2.
With thanks to the @switchbrew team, Atmosphère 0.10.2 is bundled with hbl 2.3, and hbmenu 3.2.0.
The following was changed since the last release:
- hbl configuration was made more flexible.
- Up to eight specific program ids can now be specified to have their own override keys.
- This allows designating both the album applet and a specific game as hbl by default as desired.
- Configuration targeting a specific program is now mutually exclusive with override-any-app for that program.
- This fixes unintuitive behavior when override key differed for an application specific program.
- Loader's external content fileystem support was fixed (thanks @misson20000!).
- KernelLdr was reimplemented.
- This is the first step towards developing mesosphere, Atmosphere's planned reimplementation of the Switch's Kernel.
- The typical user won't notice anything different, as there are no extensions, but a lot of groundwork was laid for future development.
- Improvements were made to the way Atmosphere's buildsystem detects source code files.
- This significantly reduces compilation time (saving >30 seconds) on the machine that builds official releases.
- Certain device code was cleaned up and made more correct in fusee/sept/exosphere (thanks @hexkyz!).
- A number of changes were made to the way fs.mitm builds images when providing a layeredfs romfs.
- Some games (Resident Evil 6, Football Manager 2020 Touch, possibly others) have enormous numbers of files.
- Attempting to create a layeredfs mod for these games actually caused fs.mitm to run out of memory, causing a fatal error.
- The code that creates these images was changed to be significantly more memory efficient.
- However, these changes also cause a significant slowdown in the romfs building code (~2-5x).
- This introduced a noticeable stutter when launching a game, because the UI thread would block on the romfs creation.
- To solve this, fs.mitm now lazily initializes the image in a background thread.
- This fixes stutter issues, however some games may be slightly slower (~1-2s in the worst cases) to transition from the "loading" GIF to gameplay now.
- Please note: the slowdown is not noticeable in the common case where games don't have tons of files (typical is ~0.1-0.2 seconds).
- Once the image has been built, there is no further speed penalty at runtime -- only when the game is launched.
- A number of other bugs were fixed, including:
- Several minor logic inversions that could have caused fatal errors when modding games.
- Atmosphere's new-ipc code did not handle "automatic" recvlist buffers correctly, so some non-libnx homebrew could crash.
- fs.mitm now correctly mitms sdb, which makes redirection of certain system data archives work again.
- In 0.10.0/0.10.1, changing the system font/language did not work correctly due to this.
- A bug was fixed in process cleanup that caused the system to hang on < 5.0.0.
- The temporary hid-mitm added in Atmosphere 0.9.0 was disabled by default.
- Please ensure your homebrew is updated.
- For now, users may re-enable this mitm by use of a custom setting (
atmosphere!enable_deprecated_hid_mitm
) to ease the transition process some.- As usual, edit the
atmosphere
section of/atmosphere/config/system_settings.ini
if you wish to do so.
- As usual, edit the
- Please note: support for this setting may be removed to save memory in a future atmosphere release.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.10.0, please see the official release notes.
Atmosphère 0.10.1
0.10.1 is Atmosphère's twenty-fourth official release.
fusee-primary was last updated in: 0.10.0.
With thanks to the @switchbrew team, Atmosphère 0.10.1 is bundled with hbl 2.3, and hbmenu 3.2.0.
The following was changed since the last release:
-
A bug was fixed that caused memory reallocation to the system pool to work improperly on firmware 5.0.0 and above.
- Atmosphere was always trying to deallocate memory away from the applet pool and towards the system pool.
- The intent of this is to facilitate running more custom sysmodules/atmosphere binaries.
- However, while memory was always successfully taken away from the applet pool, on 5.0.0+ granting it to the system pool did not work for technical reasons.
- If you are interested in the technical details, talk to SciresM.
- This has now been fixed by adding new kernel patches, and memory is correctly granted to the system pool as intended.
- Atmosphere was always trying to deallocate memory away from the applet pool and towards the system pool.
-
Atmosphere's library system has been overhauled:
- libstratosphere's repository has been rebranded, more generally, to "Atmosphere-libs".
- In addition to libstratosphere, a new general library for not-stratosphere-specific code has been added.
- This is currently named
libvapours
.
- This is currently named
- In the future, kernel functionality will be available as
libmesosphere
.
- In addition to libstratosphere, a new general library for not-stratosphere-specific code has been added.
- The build system for stratosphere system modules has been similarly overhauled.
- libstratosphere's repository has been rebranded, more generally, to "Atmosphere-libs".
-
The
boot
system module is now loaded into non-secure memory.- This helps somewhat to prevent fragmentation of the system memory heap.
-
A number of other bugs were fixed, including:
- A bug was fixed that could cause memory corruption when redirecting certain Romfs content.
- A bug was fixed that could cause an infinite loop when redirecting certain Romfs content.
- A bug was fixed that could cause certain NROs to fail to load.
- This caused the latest version of Super Smash Bros to display "An error has occurred" on launch.
- A bug was fixed that caused input/output array sizes for certain circumstances to be calculated incorrectly.
- This caused cheats to fail to function properly.
- C++ exception code is now more thoroughly removed from stratosphere executables.
- This saves a minor amount of memory.
- A number of minor logic inversions were fixed in libstratosphere.
- These did not affect any code currently used by released Atmosphere binaries.
-
Please note: Because this update is releasing so soon after 0.10.0, the removal of the temporary hid-mitm has been postponed to 0.10.2.
- Please ensure your homebrew is updated.
-
Random number generation now uses TinyMT instead of XorShift.
-
General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.10.0, please see the official release notes.
Atmosphère 0.10.0
0.10.0 is Atmosphère's twenty-third official release.
fusee-primary was last updated in: 0.10.0.
With thanks to the @switchbrew team, Atmosphère 0.10.0 is bundled with hbl 2.2, and hbmenu 3.1.1.
- Please note: Atmosphère 0.10.0 is currently in pre-release.
- If any bugs are reported while Atmosphère is in pre-release, they will be fixed and the build will be updated.
- 0.10.0 will transition to release after a short amount of time has passed without pressing bug reports.
The following was changed since the last release:
- Support was added for 9.1.0
- Please note: The temporary hid-mitm added in Atmosphere 0.9.x will be removed in Atmosphere 0.10.1.
- Please ensure your homebrew is updated.
- Please note: The temporary hid-mitm added in Atmosphere 0.9.x will be removed in Atmosphere 0.10.1.
- The Stratosphere rewrite was completed.
- libstratosphere was rewritten as part of Stratosphere's refactor.
- Code responsible for providing and managing IPC services was greatly improved.
- The new code is significantly more accurate (it is bug-for-bug compatible with Nintendo's code), and significantly faster.
- Code responsible for providing and managing IPC services was greatly improved.
- ams.mitm was rewritten as part of Stratosphere's refactor.
- Saves redirected to the SD card are now separated for sysmmc vs emummc.
- Please note: If you find any bugs, please report them so they can be fixed.
- libstratosphere was rewritten as part of Stratosphere's refactor.
- Thanks to the rewrite, Atmosphere now uses significantly less memory.
- Roughly 10 additional megabytes are now available for custom system modules to use.
- This means you can potentially run more custom system modules simultaneously.
- If system modules are incompatible, please ask their authors to reduce their memory footprints.
- Atmosphere's configuration layout has had major changes.
- Configuration now lives inside /atmosphere/config/.
- Atmosphere code now knows what default values should be, and includes them in code.
- It is no longer an error if configuration inis are not present.
- Correspondingly, Atmosphere no longer distributes default configuration inis.
- Templates are provided in /atmosphere/config_templates.
- loader.ini was renamed to override_config.ini.
- This fixes the longstanding problem that atmosphere updates overwrote user configuration when extracted.
- Atmosphere's process override layout was changed.
- Atmosphere now uses the /atmosphere/contents directory, instead of /atmosphere/titles.
- This goes along with a refactoring to remove all reference to "title id" from code, as Nintendo does not use the term.
- To make this transition easier, a temporary functionality has been added that migrates folders to the new directory.
- When booting into 0.10.0, Atmosphere will rename
/atmosphere/titles/<program id>
to/atmosphere/contents/<program id>
.- This functionality may or may not be removed in some future update.
- This should solve any transition difficulties for the typical user.
- Please make sure that any future mods you install extract to the correct directory.
- When booting into 0.10.0, Atmosphere will rename
- Atmosphere now uses the /atmosphere/contents directory, instead of /atmosphere/titles.
- Support for configuring override keys for hbl was improved.
- The key used to override applications versus a specific program can now be different.
- The key to override a specific program can be managed via override_key.
- The key to override any app can be managed via override_any_app_key.
- Default override behavior was changed.
- By default, atmosphere will now override the album applet with hbl unless R is held.
- By default, atmosphere will now override any application with hbl only if R is held.
- The key used to override applications versus a specific program can now be different.
- The default amount of applet memory reserved has been slightly increased.
- This allows the profile selector applet to work by default in applet mode.
- The way process override status is captured was changed.
- Process override keys are now captured exactly once, when the process is created.
- This fixes the longstanding issue where letting go of the override button partway into the process launch could cause problems.
- The Mitm API was changed to pass around override status.
- Mitm services now know what keys were held when the client was created, as well as whether the client is HBL/should override contents.
- An extension was added to pm:info to allow querying a process's override status.
- Process override keys are now captured exactly once, when the process is created.
- Thanks to process override capture improvements, hbl html behavior has been greatly improved.
- Web applets launched by hbl will now always see the /atmosphere/hbl_html filesystem
- Support was added to exosphere for enabling usermode access to the PMU registers.
- This can be controlled via exosphere!enable_user_pmu_access in BCT.ini.
- An enormous number of minor bugs were fixed.
- dmnt's cheat VM had a fix for an inversion in opcode behavior.
- An issue was fixed in fs.mitm's management of domain object IDs that could lead to system corruption in rare cases.
- The Mitm API no longer silently fails when attempting to handle commands passing C descriptors.
- On previous atmosphere versions, certain commands to FS would silently fail due to this...
- No users reported any visible errors, but it was definitely a problem behind the scenes.
- These commands are now handled correctly.
- On previous atmosphere versions, certain commands to FS would silently fail due to this...
- Atmosphere can now display a fatal error screen significantly earlier in the boot process, if things go wrong early on.
- The temporary hid mitm will no longer sometimes cause games to fail to detect input.
- Mitm Domain object ID management no longer desynchronizes from the host process.
- An issue was fixed that could cause service acquisition to hang forever if certain sm commands were called in a precise order.
- An off-by-one was fixed that could cause memory corruption in server memory management.
- ... and too many more bugs fixed to reasonably list them all :)
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.10.0, please see the official release notes.
Atmosphère 0.9.4
0.9.4 is Atmosphère's twenty-second official release.
fusee-primary was last updated in: 0.9.3.
With thanks to the @switchbrew team, Atmosphère 0.9.4 is bundled with hbl 2.2, and hbmenu 3.1.1.
The following was changed since the last release:
- Support was added for 9.0.0.
- Please note: 9.0.0 made a number of changes that may cause some issues with homebrew. Details:
- 9.0.0 changed HID in a way that causes libnx to be unable to detect button input.
- Homebrew should be recompiled with newest libnx to fix this.
- Atmosphere now provides a temporary hid-mitm that will cause homebrew to continue to work as expected.
- This mitm will be removed in a future Atmosphere revision once homebrew has been updated, to allow users to use a custom hid mitm again if they desire.
- 9.0.0 introduced an dependency in FS on the USB system module in order to launch the SD card.
- This means the USB system module must now be launched before the SD card is initialized.
- Correspondingly, the USB system module can no longer be IPS patched, and its settings cannot be reliably mitm'd.
- We know this is frustrating, so we'll be looking into whether there is some way of addressing this in the future.
- Please note: 9.0.0 updated the switch's gamecart controller ("lotus") firmware.
- To prevent the burning of lotus fuses, Atmosphere now applies nogc patches when booting into 9.0.0 with fuses below 9.0.0.
- If you wish to play gamecarts on 9.0.0 (but forever prevent yourself from playing them on < 9.0.0), set
nogc = 0
in BCT.ini.
- An off-by-one error was fixed in
boot
system module's pinmux initialization.- This could theoretically have caused issues with HdmiCec communication.
- No users reported issues, so it's unclear if this was a problem in practice.
- A bug was fixed that could cause webapplet launching homebrew to improperly set the accessible url whitelist.
- BIS key generation has been fixed for newer hardware.
- Newer hardware uses new, per-firmware device key to generate BIS keys instead of the first device key, so previously the wrong keys were generated as backup.
- This only affects units manufactured after ~5.0.0.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.9.0, please see the official release notes.
Atmosphère 0.9.3
0.9.3 is Atmosphère's twenty-first official release.
fusee-primary was last updated in: 0.9.3.
With thanks to the @switchbrew team, Atmosphère 0.9.3 is bundled with hbl 2.2, and hbmenu 3.1.0.
The following was changed since the last release:
- Thanks to hexkyz, fusee's boot sequence has been greatly optimized.
- Memory training is now managed by a separate binary (
fusee-mtc
, loaded by fusee-primary before fusee-secondary). - Unnecessarily long splash screen display times were reduced.
- The end result is that Atmosphere now boots significantly faster. :)
- Note: This means fusee-primary must be updated for Atmosphere to boot successfully.
- Memory training is now managed by a separate binary (
- The version string was adjusted, and now informs users whether or not they are using emummc.
- Atmosphere now automatically backs up the user's BIS keys on boot.
- This should prevent a user from corrupting nand without access to a copy of the keys needed to fix it.
- This is especially relevant on ipatched units, where the RCM vulnerability is not an option for addressing bricks.
- This should prevent a user from corrupting nand without access to a copy of the keys needed to fix it.
- The
pm
system module was rewritten as part of Stratosphere's ongoing refactor.- Support was added for forward-declaring a mitm'd service before a custom user sysmodule is launched.
- This should help resolve dependency issues with service registration times.
- SM is now informed of every process's title id, including built-in system modules.
- Support was added for forward-declaring a mitm'd service before a custom user sysmodule is launched.
- The
creport
system module was rewritten as part of Stratosphere's ongoing refactor.- creport now dumps up to 0x100 of stack from each thread in the target process.
- A few bugs were fixed, including one that caused creport to incorrectly dump process dying messages.
- Defaults were added to
system_settings.ini
for controlling hbloader's memory usage in applet mode.- These defaults reserve enough memory so that homebrew can launch swkbd while in applet mode.
- The
fatal
system module was rewritten as part of Stratosphere's ongoing refactor.- Incorrect display output ("2000-0000") has been fixed. Fatal will now correctly show 2162-0002 when this occurs.
- A longstanding bug in how fatal manages the displays has been fixed, and official display init behavior is now matched precisely.
- General system stability improvements to enhance the user's experience.
For information on the featureset supported by 0.9.0, please see the official release notes.