summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* Android: Fix compile using ndkr15 clang and unified headersBogDan Vatra2017-08-182-0/+2
| | | | | | | Add missing includes Change-Id: I6fd58c9ebb5a8099c99928e3a7a0cbf3aa23ba43 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Android: Dissable internal hack when using libc++BogDan Vatra2017-08-181-1/+1
| | | | | | | libc++ has proper wstring support Change-Id: Ifae98676974bfd660b7f849d4466efc5486d3fca Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Android: Fix compile with unified headersBogDan Vatra2017-08-174-40/+48
| | | | | | | | Unified headers now defines _POSIX_THREAD_SAFE_FUNCTIONS but not all libc functions are available in all Android API versions. Change-Id: I01c94f0b89e7f8aa8575e7bbda28d9fe41a68ff1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Android: Fix warning for __fp16BogDan Vatra2017-08-171-1/+1
| | | | | Change-Id: I65cd64dfc0ed357555e8b5276109303377a67e0e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix crash when reading a PKCS12 file with no private keyEdward Welbourne2017-08-172-1/+4
| | | | | | | | | | | | | | | | | | The only reason our code wants PKCS12 files is for a private key, but a valid file needn't contain one; and reading a file without lead to a crash in QSslKeyPrivate::fromEVP_PKEY(). So check for missing key and fail the load, since the file is useless to us. Also ensure the caller's pkey is initialized, as we aren't promised that PKCS12_parse() will set it when there is no private key. Add a test for this case (it crashes without the fix) and update the instructions for how to generate test data to cover it also. (Corrected the wording there, too; at the interactive prompt, "providing no password" really provides an empty password.) Task-number: QTBUG-62335 Change-Id: I617508b903f6d9dee40d539b7136b0be8bc2c747 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* QPicture: check that pictureFormat doesn't return dangling pointersGiuseppe D'Angelo2017-08-161-1/+6
| | | | | | | | | | | The function returns a const char * out of a QByteArray. We must be sure that the QByteArray outlives the function, otherwise the pointer returned would be dangling. Add an assertion for that. Found by clazy. Change-Id: I3416af4eb5ec79ddb3e4baf3bdcfe046b44d4225 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* XCB: Don't core-dump if we can't connect to the X displayNameThiago Macieira2017-08-163-8/+30
| | | | | | | Exit with error, but don't crash. Change-Id: Ie05c6480d8a44fda817ffffd14d9dfd8c951beef Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Doc: Mark the dbmsType() function and DbmsType enum as internalAndy Shaw2017-08-161-0/+2
| | | | | | | | | | | | The function and type is only used in the tests and has no benefit in applications so it should be marked as internal to avoid confusion for those implementing their own drivers. Task-number: QTBUG-56278 Change-Id: I0f2ae27d41b133c4f0d3b0d390688fd3307592ce Reviewed-by: Andre Somers <andre.somers@kdab.com> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Block input to a window shown while an application modal dialog is visibleAndy Shaw2017-08-161-0/+2
| | | | | | | | | | | Although the window is refused input for the most part from the system, it does not act like that it is blocked by the application modal dialog. This ensures that it is the case and prevents things like being able to double click on the title bar to maximize the window on Windows. Task-number: QTBUG-49102 Change-Id: If1582819b90cb2ec9d891f664da24f13bfec7103 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* macOS: Fix matching of font weights for application fontsEskil Abrahamsen Blomfeldt2017-08-161-19/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 5ad2e1cea1b2c08950c91174840f542806954d99 exposed a latent bug when matching font weights that do not exactly match any of the canonical weights in the system . It seems that when we registered the font with FontManager, it would modify the font weight to match a system weight, while we now get raw values from the font instead. So for Roboto Medium, for instance, we would now get 0.2 instead of 0.23, and since our conversion logic would convert everything between Light (-0.4) to Medium (0.23) to QFont::Normal, we would regard this as normal weight instead of medium. But on a linear scale, it makes more sense to match to the closest canonical weight instead of requiring exact matches. Note that the definition says that the middle between two weights should tend upwards, therefore we do the comparisons in decreasing order. [ChangeLog][QtGui][Text] Fixed matching of non-regular font weights for application fonts on macOS. Task-number: QTBUG-61520 Change-Id: Ieda4927c2c69ec72125257340cf06c683b031d05 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QMenu: Prevent torn-off menus from extending behind the taskbarGabriel de Dietrich2017-08-162-12/+14
| | | | | | | | | | On Windows and macOS, that area of the menu can become inaccessible if the menu is tall enough. Since these are not popups but tool windows, the test for UseFullScreenForPopupMenu should not apply for torn-off menus. Change-Id: Ife7836bef568896a5bb67d42a2af412f06a871d6 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Check for loopback address if network access is unavailableMårten Nordheim2017-08-151-2/+10
| | | | | | | | | A loopback address warrants the same exception as local files. Task-number: QTBUG-59219 Change-Id: Ie0a75faa558d6596455da38656c8749c994d0fd8 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Convert features.graphicsview to QT_[REQUIRE_]CONFIGStephan Binner2017-08-1576-321/+209
| | | | | Change-Id: I1083097802772624e5d414678b4612308683a56f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* QCocoaMenu: Sync menubar menu when adding itemsGabriel de Dietrich2017-08-152-1/+8
| | | | | | | | | | | | | Empty menus on a menubar are hidden by default. If the menu gets added to the menubar before it contains any item, we need to get the menubar to sync the menu, which will update its native menu item hidden property. Menurama manual test's 'Add Many Items' button should now work. Change-Id: I8ce1df21031c171789318fdf28ae495819458d71 Task-number: QTBUG-62260 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QCocoaMenu: De-pessimize the number of calls to validateMenuItem:Gabriel de Dietrich2017-08-152-2/+21
| | | | | | | | | | | | | Calling -[NSMenu update] every time we add a new item can result in a quadratic behavior since the function itself will iterate over all the items in the menu. We solve this by using a 0-timer which will trigger the call to update the next time the event loop spins. Menurama manual test updated. Change-Id: Ic155d364515cc93eb81b1c8085c8e44c93799954 Task-number: QTBUG-62396 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Fix a race condition in QEvdevTabletHandler::readData()Romain Pokrzywka2017-08-141-1/+1
| | | | | | | | | | | | | | Statics and threads don't mix well. There can be multiple threads calling QEvdevTabletHandler::readData() simultaneously if you have several tablet devices registered with the plugin, creating a race on the static buffer array. Make the buffer a simple local variable instead, the array is small enough that we can afford the per-thread stack allocation. Change-Id: I4487add8df50743b8178ca6faeb9be45231ccb78 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* QNAM: requeue pipelined HTTP requests after unrecoverable socket errorsRomain Pokrzywka2017-08-141-2/+5
| | | | | | | | | | | | If we reach the maximum reconnect attempts for an HTTP request with pipelining enabled, those also need to be requeued during cleanup for the connection channel. Otherwise future successful requests on that same channel will incorrectly assign the data to replies from the old pipelined requests, resulting in swapped data in the replies. Task-number: QTBUG-62286 Change-Id: I804b8ac280957b518d63b2341e469a13315a8c27 Reviewed-by: Markus Goetz (Woboq GmbH) <markus@woboq.com>
* Doc: indicate the QSharedMemory::size() that the size may be biggerThiago Macieira2017-08-131-0/+3
| | | | | | Task-number: QTBUG-62468 Change-Id: I6e9274c1e7444ad48c81fffd14da78718828c4a6 Reviewed-by: Martin Smith <martin.smith@qt.io>
* Widgets: Fix ImSurroundingText query for a QLineEdit with maskJarkko Koivikko2017-08-112-1/+6
| | | | | | | | | | | | | | | | | | | | | QLineEdit with a mask does not return empty fields with the ImSurroundingText query. This is a problem for the input context that is not aware of the mask and relies on the fact that the cursor position never exceeds the boundaries of the surrounding text. This change fixes the issue by returning unmasked text with the ImSurroundingText query. [ChangeLog][QtWidgets][QLineEdit] Fixed behavior of the ImSurroundingText query. Previously, it returned a masked text whose length may be less than the cursor position. Now it returns unmasked text, so the text length is always greater than or equal to the cursor position. Task-number: QTBUG-60319 Change-Id: I1c8009164836a1baa2e3a45958bf1ea5fa9be38d Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix write and read-write ioctls on certain 64-bit OSThiago Macieira2017-08-101-1/+1
| | | | | | | | | | | | | Using int as the operation parameter was wrong. It meant any write or RW ioctls (which have the MSB set) would be sign-extended to 64-bit when calling the native API. Depending on the OS, the upper 32 bits were not cleared prior to comparing with the call number, resulting in unexpected errors. Linux and FreeBSD operated properly; I only got the error on Darwin. Change-Id: Iaf4157b7efa2416d898cfffd14d985af65c1ff89 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* Enable custom shared memory schemes on INTEGRITYTero Alamäki2017-08-101-0/+13
| | | | | | | | | | | Replaced dependency to libdl.a with libshm_client.a. Defined symbols 'shm_area_password' and 'shm_area_name' internally. The build for INTEGRITY is static only so libdl.a is not needed. Change-Id: I7e34528835132d79ea582a30cf9ff61cdda198da Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Rolland Dudemaine <rolland@ghs.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Convert features.toolbutton to QT_[REQUIRE_]CONFIGStephan Binner2017-08-1018-43/+63
| | | | | Change-Id: I4227e1868da21bded76a8ec55996c436c8a8d763 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Convert features.splitter to QT_[REQUIRE_]CONFIGStephan Binner2017-08-108-14/+19
| | | | | Change-Id: I2eea5004938c581beb5a7c0c01409c576c5e5b39 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Convert features.groupbox to QT_[REQUIRE_]CONFIGStephan Binner2017-08-1011-29/+36
| | | | | Change-Id: I034286043a880ab777ec3f2311572bdc38e7fafc Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Convert features.scrollbar to QT_[REQUIRE_]CONFIGStephan Binner2017-08-1025-43/+67
| | | | | Change-Id: Id6ea899c0fddf0de636701cfdc5f01ba20024976 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Convert features.toolbox to QT_[REQUIRE_]CONFIGStephan Binner2017-08-107-20/+18
| | | | | Change-Id: I7abfe0166a021c439f6ed4465631ba62660ef001 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Convert features.progressbar to QT_[REQUIRE_]CONFIGStephan Binner2017-08-1012-23/+33
| | | | | Change-Id: I66d00d5bac98ff337ba5877e5f23be5e14a97551 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Convert features.textbrowser to QT_[REQUIRE_]CONFIGStephan Binner2017-08-108-18/+17
| | | | | Change-Id: I02a0c39c308204f7c67674928973275fa1247d38 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* macOS: Make alpha-based click-trough work againMorten Johan Sørvig2017-08-091-2/+12
| | | | | | | | | | | | | | | | | | | | Commit 3ea04c7d made it so that we always set the ignoresMouseEvent property on the NSWindow, based on the WindowTransparentForInput flag. However, this overwrites the magical secret initial state where click-trough is determined based on window content transparency - setting the property to false makes the window capture all events. Restore 5.6 behavior by not modifying ignoresMouseEvent if we can. Toggling WindowTransparentForInput on and off again is still broken. Task-number: QTBUG-54830 Change-Id: I5f44ce14d9a7dc1713f9efb1ef929e2969838d90 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Fallback to QGnomeTheme if Gtk3 does not support long-press-timeJan Arve Sæther2017-08-091-2/+15
| | | | | | | | | | "gtk-long-press-time" was introduced in 3.14. Therefore, if the property does not exist, we should fallback to QGnomeTheme::themeHint(). Task-number: QTBUG-61393 Change-Id: I898c0ddebdbabb300d7ad9dd275d51836ad9cf8c Reviewed-by: Dmitry Shachnev <mitya57@gmail.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Convert features.statusbar to QT_[REQUIRE_]CONFIGStephan Binner2017-08-089-20/+22
| | | | | Change-Id: Ifc1881388e559d3235df0202ac6d26f78ba2c691 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Win: Account for when "condition expression is constant" warning occursAndy Shaw2017-08-081-14/+23
| | | | | | | | | | There is already some case accounting for when this warning appears with warning level 4 and Visual C++ on Windows. However it was not catching all the places it was coming from, so this extends it to cover those places too. Change-Id: I69b21440716361fda1c1ae0be0d9c17ced7f0792 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QAction: Note that the QAction parent parameter is optional since 5.7hjk2017-08-081-0/+2
| | | | | Change-Id: Id1cb5591dae55cd22621cd8e403d2056f1aa9364 Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
* Fix reset with qoffscreensurface destruction with multimonitor supportMäättä Antti2017-08-081-1/+1
| | | | | | | | | | | | | | | | | The qoffscreensurface::setScreen crashes in create if application is closing. This happens in multimonitor setup when one of the screens is already destroyed and qoffscreensurface handles the screenDestroyed signal. In this case the QGuiApplication::primaryScreen returns non-null surface and selects the codepath that recreates the surface. The create function calls the qGuiApp->thread function, which crashes since the application instance has already been set to nullptr. Prevent this in qoffscreensurface by checking the application instance in the setScreen function. Task-number: QTBUG-62222 Change-Id: Ibb11a270c23a39e66009b45ab83dd7d47d5ccb1f Reviewed-by: Janne Koskinen <janne.p.koskinen@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Convert features.dial to QT_[REQUIRE_]CONFIGStephan Binner2017-08-0811-28/+25
| | | | | Change-Id: I9fea2451fe3567fdd1af1540e9a55f218f54b569 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Doc: remove linking to internal methodNico Vertriest2017-08-061-1/+1
| | | | | | | qimage.cpp:2127: warning: Can't link to 'isDetached()' Change-Id: Ib8f056441bf08e315ed97caf55c510f50ebaf4ed Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Add flowId to messages when logging in TeamCity formatBorgar Ovsthus2017-08-042-13/+13
| | | | | | | | | | | | Added flowId='name' to each message when using TeamCity logging format. This is necessary to distinguish separate processes running in parallel. [ChangeLog][QtTest] Added flowId to messages when logging in TeamCity format. FlowId is used to distinguish logging from multiple processes running in parallel. Change-Id: I7f5046c1058ff02770404caa2c9b3a5398f97f6b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix iOS shared buildsJan Murawski2017-08-041-0/+1
| | | | | | | | | Building iOS shared failed with link errors to the CoreGraphics framework when building without harfbuzz-ng. This patch adds the missing dependency. Change-Id: If464417039172c2854e455563153057f0cea2a22 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* XCB GLX: request OpenGL 4.6 / OpenGL ES 3.2 if possibleGiuseppe D'Angelo2017-08-041-4/+4
| | | | | | | | | Code was lagging a bit behind published standards. Change-Id: I0fe07c0162a54d9eed8b539887496b9313b37aa4 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Fix race condition in QDBusAbstractInterfacePrivate::initOwnerTracking()Romain Pokrzywka2017-08-041-5/+5
| | | | | | | | | | | | | | | | | The current code fetches currentOwner in the constructor, then sets up a connection between a service watcher and _q_serviceOwnerChanged() in initOwnerTracking(). But an owner change notification could arrive after we fetch the current owner and before the connection is made. In this case the owner change notification will be lost, and the interface will keep reporting being invalid permanently. The fix is to delay initializing currentOwner until after the connection is made. Task-number: QTBUG-62284 Change-Id: I92b9d61004e14fd2ee2543488740a542dc7a9b7a Reviewed-by: Romain Pokrzywka <romain.pokrzywka@gmail.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Bump minimum glibc requirement for sys/eventfd.h to glibc 2.8Thiago Macieira2017-08-041-2/+4
| | | | | | | | | | | | | | | The file was added to glibc 2.7 along with the functions we need (Added 2007-10-05). But they forgot to install the file until a month and a half later (2007-11-17), which means it missed the 2.7 release (2007-10-19). Note that EFD_CLOEXEC wasn't added until glibc 2.9, so effectively glibc 2.9 is required. Change-Id: I3868166e5efc45538544fffd14d773ba576fb793 Reviewed-by: Kai Koehne <kai.koehne@qt.io> Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Fix build error with macOS 10.13 SDKJake Petroules2017-08-042-18/+2
| | | | | | | | | | | Several of these variables/macros are no longer defined. We didn't validate the preconditions on iOS, tvOS, or watchOS, so no need to bother validating them on macOS either. Nor did we check the OSStatus result on any platform anyways. Task-number: QTBUG-62266 Change-Id: Id19ebead5d3a8a08a0a56d798f0173d0d893fc91 Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
* Android: Fix push button label duplication with stylesheetsEskil Abrahamsen Blomfeldt2017-08-041-33/+44
| | | | | | | | | | | | | | | | | | | | | In the Android style, we matched both the full CE_PushButton, and the individual, decomposed CE_PushButtonBevel and CE_PushButtonLabel (and similar for other controls) to the same drawing code which draws both the label and the bevel. When used together with the style sheet style, this caused the label of the button to be drawn multiple times in different locations. For labels, we now skip the part which draws the actual control, and for the non-textual parts of the controls, we skip drawing the label. [ChangeLog][QtWidgets][Android] Fixed label duplication for buttons when using style sheets with the Android style. Task-number: QTBUG-48639 Change-Id: I1a1cdb0a82870cebd0438c5c72199afc3192938c Reviewed-by: BogDan Vatra <bogdan@kdab.com>
* QAbstractItemView: fix nullptr violationRaschbauer, Reinhard2017-08-041-1/+1
| | | | | | | | | | | | | | | If in a slot connected to QAbstractItemView::clicked QAbstractItemView::setModel(nullptr) is called the method QAbstractItemView::mouseReleaseEvent will cause a segmentation fault. The problem is that the method QAbstractItemView::model used in QAbstractItemView::mouseReleaseEvent will return a nullptr if a null model was set. The solution is to used d->model since it is always a valid model. (See line d->model = (model ? model : QAbstractItemModelPrivate::staticEmptyModel()); in method QAbstractItemView::setModel) Change-Id: I6f01bdeac64495ee4a76adcc7bf8da8a7719ef4d Reviewed-by: David Faure <david.faure@kdab.com>
* Update bundled zlib to version 1.2.11André Klitzing2017-08-0452-7525/+3899
| | | | | | | | | | | Also clean up some unused files. The remaining diff to clean 1.2.11 is archived in the qtpatches.diff file. [ChangeLog][Third-Party Code] zlib was updated to version 1.2.11. Task-number: QTBUG-31020 Change-Id: I89f890904af48c6e9ba6eabc5d58f5adbe2c53f0 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Improve documentation for {QFile, QFileDevice}::resize()Sérgio Martins2017-08-032-1/+5
| | | | | | | | - Warn that they can fail if used on non-existent files - Fixed random garbage Change-Id: Ie58aac4a9f4479332ef07d39aecc136b1cfa58e1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make high-dpi QGLWidget work cross platformMorten Johan Sørvig2017-08-021-4/+0
| | | | | | | | A Q_OS_MAC ifdef was left from the days of macOS-only support. Task-number: QTBUG-59956 Change-Id: Ia10258910ad14ecccee8f0ec22e53f9299a672ff Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* Fix RGBA64 interpolation when x remainder equals zeroAllan Sandfeld Jensen2017-08-021-9/+12
| | | | | | | | | | The 16-bit multiplication can not handle the case where one of the numbers is 65536, so skip it in that case as we do when the y remainder triggers the same issue. Task-number: QTBUG-62165 Change-Id: Iea2ebe557949797d9aa77b8d7cdac9247eea7b84 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* QWidget::render(): Add a call to QPaintEnginePrivate::systemStateChanged()Friedemann Kleint2017-08-021-0/+1
| | | | | | | | | | | | | | Setting the clip needs to be followed by a call to QPaintEnginePrivate::systemStateChanged() since the raster paint engine overrides the function to set some variables. Amends change 4ae1025c0b54a535ef9f50c6cdab5ef752b667dc. Task-number: QTBUG-44067 Task-number: QTBUG-56282 Task-number: QTBUG-55698 Change-Id: I7983ddd087deb484d9dbbf955eb1d6f903ef59fe Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QWindowSystemInterfacePrivate::toNativeTouchPoints(): Add missing scalingFriedemann Kleint2017-08-021-2/+2
| | | | | | | | Scale velocity and raw positions as does QWindowSystemInterfacePrivate::fromNativeTouchPoints(). Change-Id: I4c9e03e4c2f4ca807319b1a7d1f4a9e56a25b06c Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>