Commit graph android_kernel_sony_sdm845/drivers/input/input.c
Message SHA1
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: hp_sdc_rtc - fix test in hp_sdc_rtc_read_rt()
  Input: atkbd - consolidate force release quirks for volume keys
  Input: logips2pp - model 73 is actually TrackMan FX
  Input: i8042 - add Sony Vaio VGN-FZ240E to the nomux list
  Input: fix locking issue in /proc/bus/input/ handlers
  Input: atkbd - postpone restoring LED/repeat rate at resume
  Input: atkbd - restore resetting LED state at startup
  Input: i8042 - make pnp_data_busted variable boolean instead of int
  Input: synaptics - add another Protege M300 to rate blacklist

Linus Torvalds   commited 2009-10-22 08:27:12 +09:00
be8db0b843
Input: fix locking issue in /proc/bus/input/ handlers
input_devices_seq_start() uses mutex_lock_interruptible() to acquire
the input_mutex, but doesn't properly handle the situation when the
call fails (for example due to interrupt). Instead of returning NULL
(which indicates that there is no more data) we should return
ERR_PTR()-encoded error.

We also need explicit flag indicating whether input_mutex was acquired
since input_devices_seq_stop() is called whether input_devices_seq_start()
was successful or not.

The same applies to input_handlers_seq_start().

Reported-by: iceberg <strakh@ispras.ru>
Reviewed-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2009-10-14 00:36:33 -07:00
1572ca2a84
headers: remove sched.h from poll.h
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Alexey Dobriyan   authored and   Linus Torvalds   commited 2009-10-04 15:05:10 -07:00
a99bbaf5ee
drivers/input/input.c: fix CONFIG_PM=n warning
drivers/input/input.c:1277: warning: 'input_dev_reset' defined but not used

Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Andrew Morton   authored and   Linus Torvalds   commited 2009-10-01 16:11:11 -07:00
1c4115e595
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: add driver for Atmel AT42QT2160 Sensor Chip
  Input: max7359 - use threaded IRQs
  Input: add driver for Maxim MAX7359 key switch controller
  Input: add driver for ADP5588 QWERTY I2C Keypad
  Input: add touchscreen driver for MELFAS MCS-5000 controller
  Input: add driver for OpenCores Keyboard Controller
  Input: dm355evm_keys - remove dm355evm_keys_hardirq
  Input: synaptics_i2c - switch to using __cancel_delayed_work()
  Input: ad7879 - add support for AD7889
  Input: atkbd - rely on input core to restore state on resume
  Input: add generic suspend and resume for input devices
  Input: libps2 - additional locking for i8042 ports

Linus Torvalds   commited 2009-09-23 15:39:36 -07:00
0dd52d0df0
Driver-Core: extend devnode callbacks to provide permissions
This allows subsytems to provide devtmpfs with non-default permissions
for the device node. Instead of the default mode of 0600, null, zero,
random, urandom, full, tty, ptmx now have a mode of 0666, which allows
non-privileged processes to access standard device nodes in case no
other userspace process applies the expected permissions.

This also fixes a wrong assignment in pktcdvd and a checkpatch.pl complain.

Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Kay Sievers   authored and   Live-CD User   commited 2009-09-19 12:50:38 -07:00
e454cea20b
Input: add generic suspend and resume for input devices
Automatically turn off leds and sound effects as part of suspend
process and restore led state, sounds and repeat rate at resume.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2009-09-17 23:23:58 -07:00
ffd0db9719
driver model: constify attribute groups
Let attribute group vectors be declared "const".  We'd
like to let most attribute metadata live in read-only
sections... this is a start.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

David Brownell   authored and   Greg Kroah-Hartman   commited 2009-09-15 09:50:47 -07:00
a4dbd6740d
Driver Core: input: add nodename for input drivers
This adds support to the input core to report the proper device name to
userspace for their devices.

Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Jan Blunck <jblunck@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Kay Sievers   authored and   Greg Kroah-Hartman   commited 2009-06-15 21:30:26 -07:00
aa5ed63e96
Input: multitouch - add tracking ID to the protocol
There are a few multi-touch devices that support finger tracking
well in hardware, Stantum being the prime example. By exposing the
tracking ID in the MT protocol, evdev bandwidth and cpu usage in
user space can be reduced.

This patch adds the ABS_MT_TRACKING_ID to the MT protocol.

Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Tested-by: Stéphane Chatty <chatty@enac.fr>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Henrik Rydberg   authored and   Dmitry Torokhov   commited 2009-05-23 09:53:18 -07:00
df391e0eda
Input: add detailed multi-touch finger data report protocol
In order to utilize the full power of the new multi-touch devices, a
way to report detailed finger data to user space is needed. This patch
adds a multi-touch (MT) protocol which allows drivers to report details
for an arbitrary number of fingers.

The driver sends a SYN_MT_REPORT event via the input_mt_sync() function
when a complete finger has been reported.

In order to stay compatible with existing applications, the data
reported in a finger packet must not be recognized as single-touch
events. In addition, all finger data must bypass input filtering,
since subsequent events of the same type refer to different fingers.

A set of ABS_MT events with the desired properties are defined. The
events are divided into categories, to allow for partial implementation.
The minimum set consists of ABS_MT_TOUCH_MAJOR, ABS_MT_POSITION_X and
ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked.
If the device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide
the size of the approaching finger. Anisotropy and direction may be
specified with ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and
ABS_MT_ORIENTATION. Devices with more granular information may specify
general shapes as blobs, i.e., as a sequence of rectangular shapes
grouped together by a ABS_MT_BLOB_ID. Finally, the ABS_MT_TOOL_TYPE
may be used to specify whether the touching tool is a finger or a pen.

Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Henrik Rydberg   authored and   Dmitry Torokhov   commited 2009-04-28 09:36:24 -07:00
5e5ee686e3
Input: allow certain EV_ABS events to bypass all filtering
With the upcoming multi-touch interface as an example, there is
a need to make certain that all reported events actually get passed
to the event handler. This patch equips the input core with the
ability to bypass all filtering for certain EV_ABS events.

Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Henrik Rydberg   authored and   Dmitry Torokhov   commited 2009-04-28 09:36:16 -07:00
61994a61bc
Merge branch 'next' into for-linus
Dmitry Torokhov   commited 2009-04-16 08:51:52 -07:00
0c387ec88a
Input: remove unnecessary synchronize_rcu() call
There is no need to issue serialize_rcu() after adding a new handle
to the list of handles associated with the device because new events
will "see" the new handle in the list immediately. Remove it so we
can boot a little bit faster.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Arjan van de Ven   authored and   Dmitry Torokhov   commited 2009-04-11 17:09:14 -07:00
b79e83bdd9
Merge branch 'next' into for-linus
Dmitry Torokhov   commited 2009-04-08 00:00:33 -07:00
ba28f22e7c
proc 2/2: remove struct proc_dir_entry::owner
Setting ->owner as done currently (pde->owner = THIS_MODULE) is racy
as correctly noted at bug #12454. Someone can lookup entry with NULL
->owner, thus not pinning enything, and release it later resulting
in module refcount underflow.

We can keep ->owner and supply it at registration time like ->proc_fops
and ->data.

But this leaves ->owner as easy-manipulative field (just one C assignment)
and somebody will forget to unpin previous/pin current module when
switching ->owner. ->proc_fops is declared as "const" which should give
some thoughts.

->read_proc/->write_proc were just fixed to not require ->owner for
protection.

rmmod'ed directories will be empty and return "." and ".." -- no harm.
And directories with tricky enough readdir and lookup shouldn't be modular.
We definitely don't want such modular code.

Removing ->owner will also make PDE smaller.

So, let's nuke it.

Kudos to Jeff Layton for reminding about this, let's say, oversight.

http://bugzilla.kernel.org/show_bug.cgi?id=12454

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>

Alexey Dobriyan   commited 2009-03-31 01:14:44 +04:00
99b7623380
Input: fix polling of /proc/bus/input/devices
Tested-by: Alessio Sangalli <alesan@manoweb.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2009-03-08 16:34:55 -07:00
fa88661224
Input: stop autorepeat timer on key release
Whenever you press and then release a key, the CPU wakes up
three times:
 * press
 * release
 * autorepeat timer exactly 250ms after press

The autorepeat timer has nothing to do, obviously, since you already
have released the key, so stop it on key release.

[dtor@mail.ru: This changes autorepeat behavior a bit since we now stop
 autorepeat even if key that is being released is not the one that is
 being auto-repeated, but I believe the new behavior is better.]

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Johannes Berg   authored and   Dmitry Torokhov   commited 2009-01-29 23:43:21 -08:00
e7b5c1ef4d
Input: struct device - replace bus_id with dev_name(), dev_set_name()
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Kay Sievers   authored and   Dmitry Torokhov   commited 2008-10-30 09:29:05 -04:00
a6c2490f01
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 into next
Dmitry Torokhov   commited 2008-07-21 00:55:14 -04:00
908cf4b925
Input: don't reset sync flag when ignoring event
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2008-06-30 09:35:18 -04:00
c981228281
Input: cdev lock_kernel() pushdown
Signed-off-by: Jonathan Corbet <corbet@lwn.net>

Jonathan Corbet   commited 2008-06-20 14:05:47 -06:00
2edbf8537e
drivers: use non-racy method for proc entries creation (2)
Use proc_create()/proc_create_data() to make sure that ->proc_fops and ->data
be setup before gluing PDE to main tree.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Peter Osterlund <petero2@telia.com>
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Cc: Dmitry Torokhov <dtor@mail.ru>
Cc: Neil Brown <neilb@suse.de>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Denis V. Lunev   authored and   Linus Torvalds   commited 2008-04-29 08:06:22 -07:00
c7705f3449
proc: remove proc_bus
Remove proc_bus export and variable itself. Using pathnames works fine
and is slightly more understandable and greppable.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Alexey Dobriyan   authored and   Linus Torvalds   commited 2008-04-29 08:06:18 -07:00
9c37066d88
Input: constify function pointer tables (seq_operations)
Signed-off-by: Jan Engelhardt <jengelh@computergmbh.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Jan Engelhardt   authored and   Dmitry Torokhov   commited 2008-01-31 00:43:32 -05:00
cec69c376b
Input: remove cdev from input_dev structure
Cdev field was obsolete and provided only for backward compatibility
since conversion of input core from class devices to regular devices.
It is time to remove it.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2008-01-21 01:11:08 -05:00
0c1efd3653
Input: Add proper locking when changing device's keymap
Take dev->event_lock to make sure that we don't race with input_event() and
also force key up event when removing a key from keymap table.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2008-01-21 01:11:06 -05:00
f4f37c8ec7
Input: pass EV_PWR events to event handlers
input_handle_event() used to pass EV_PWR events to event handlers
but no longer does so in 2.6.23. Modules to trigger power management
events based on input power events exist but rely on the EV_PWR events
being passed to the input event handlers.

Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Richard Purdie   authored and   Dmitry Torokhov   commited 2008-01-03 10:46:21 -05:00
ed2fa4dd41
Input: Handle EV_PWR type of input caps in input_set_capability.
Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Baryshkov   authored and   Dmitry Torokhov   commited 2007-12-14 01:21:03 -05:00
22d1c398e8
get rid of input BIT* duplicate defines
get rid of input BIT* duplicate defines

use newly global defined macros for input layer. Also remove includes of
input.h from non-input sources only for BIT macro definiton. Define the
macro temporarily in local manner, all those local definitons will be
removed further in this patchset (to not break bisecting).
BIT macro will be globally defined (1<<x)

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: <dtor@mail.ru>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Cc: <lenb@kernel.org>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Cc: <perex@suse.cz>
Acked-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: <vernux@us.ibm.com>
Cc: <malattia@linux.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Jiri Slaby   authored and   Linus Torvalds   commited 2007-10-19 11:53:42 -07:00
7b19ada2ed
Input: use full RCU API
RT guys alerted me to the fact that in their tree spinlocks
are preemptible and it is better to use full RCU API
(rcu_read_lock()/rcu_read_unlock()) to be safe.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-10-13 15:46:55 -04:00
82ba56c273
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:

	drivers/macintosh/adbhid.c

Dmitry Torokhov   commited 2007-10-12 21:27:47 -04:00
b981d8b3f5
Driver core: change add_uevent_var to use a struct
This changes the uevent buffer functions to use a struct instead of a
long list of parameters. It does no longer require the caller to do the
proper buffer termination and size accounting, which is currently wrong
in some places. It fixes a known bug where parts of the uevent
environment are overwritten because of wrong index calculations.

Many thanks to Mathieu Desnoyers for finding bugs and improving the
error handling.

Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Kay Sievers   authored and   Greg Kroah-Hartman   commited 2007-10-12 14:51:01 -07:00
7eff2e7a8b
Input: implement proper locking in input core
Also add some kerneldoc documentation to input.h

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-08-30 00:22:11 -04:00
8006479c9b
Input: switch to using seq_list_xxx helpers
This is essentially just a renaming of the existing functions
as copies of seq_list_start() and seq_list_next() already existed
in the input.c.

Signed-off-by: Pavel Emelianov <xemul@openvz.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Pavel Emelianov   authored and   Dmitry Torokhov   commited 2007-07-18 00:38:32 -04:00
ad5d972cda
Input: convert from class devices to standard devices
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-07-10 00:35:17 -04:00
9657d75c5f
header cleaning: don't include smp_lock.h when not used
Remove includes of <linux/smp_lock.h> where it is not used/needed.
Suggested by Al Viro.

Builds cleanly on x86_64, i386, alpha, ia64, powerpc, sparc,
sparc64, and arm (all 59 defconfigs).

Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Randy Dunlap   authored and   Linus Torvalds   commited 2007-05-08 11:15:07 -07:00
e63340ae6b
Input: add input_set_capability() helper
Add input_set_capability() helper used to indicate that an input
device supports a certain event without need to manipulate bitmaps
directly.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-04-25 00:53:18 -04:00
534565f254
Input: prepare to switching to struct device
In preparation to switching to struct device and class device
going away provide an alias to allow drivers that create devices
to use either input_dev->cdev.dev or input_dev->dev.parent to
put them into sysfs tree. The former will go away once conversion
to struct device is complete.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-04-12 01:34:47 -04:00
88a447a030
Input: rework handle creation code
- consolidate code for binding handlers to a device
 - return error codes from handlers connect() methods back to input
   core and log failures

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-04-12 01:29:46 -04:00
5b2a08262a
Input: simplify input_free_device()
Now that sysfs attributes that were marked for deletion can't access
their devices we do not need to set name, phys and uniq to NULL.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-03-16 00:57:25 -04:00
54f9e36cb8
Input: add getkeycode and setkeycode methods
Allow drivers to implement their own get and set keycode methods. This
will allow drivers to change their keymaps without allocating huge
tables covering entire range of possible scancodes.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Marvin Raaijmakers   authored and   Dmitry Torokhov   commited 2007-03-14 22:50:42 -04:00
c8e4c77277
Input: let driver core create class device attribute groups
Rely on device core to create attribute groups for input devices
instead of open-coding it.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-03-07 23:20:26 -05:00
cb9def4dff
Input: export 'uniq' in /proc/bus/input/devices
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-03-07 23:20:17 -05:00
15e03ae811
Input: do not lock device when showing name, phys and uniq
Now that sysfs attributes return -ENODEV once driver requests their
removal we do not need to handle scenario when data is deleted from
under our feet and can simplify the code.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2007-02-18 01:40:37 -05:00
1efa770f8e
[PATCH] remove many unneeded #includes of sched.h
After Al Viro (finally) succeeded in removing the sched.h #include in module.h
recently, it makes sense again to remove other superfluous sched.h includes.
There are quite a lot of files which include it but don't actually need
anything defined in there.  Presumably these includes were once needed for
macros that used to live in sched.h, but moved to other header files in the
course of cleaning it up.

To ease the pain, this time I did not fiddle with any header files and only
removed #includes from .c-files, which tend to cause less trouble.

Compile tested against 2.6.20-rc2 and 2.6.20-rc2-mm2 (with offsets) on alpha,
arm, i386, ia64, mips, powerpc, and x86_64 with allnoconfig, defconfig,
allmodconfig, and allyesconfig as well as a few randconfigs on x86_64 and all
configs in arch/arm/configs on arm.  I also checked that no new warnings were
introduced by the patch (actually, some warnings are removed that were emitted
by unnecessarily included header files).

Signed-off-by: Tim Schmielau <tim@physik3.uni-rostock.de>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Tim Schmielau   authored and   Linus Torvalds   commited 2007-02-14 08:09:54 -08:00
cd354f1ae7
[PATCH] mark struct file_operations const 3
Many struct file_operations in the kernel can be "const".  Marking them const
moves these to the .rodata section, which avoids false sharing with potential
dirty data.  In addition it'll catch accidental writes at compile time to
these shared resources.

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Arjan van de Ven   authored and   Linus Torvalds   commited 2007-02-12 09:48:45 -08:00
2b8693c061
Input: add comments to input_{allocate|free}_device()
Hopefully this will stop people from using input_free_device()
incorrectly.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2006-11-02 23:26:55 -05:00
1447190e39
Input: make input_register_handler() return error codes
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2006-09-14 01:32:39 -04:00
4263cf0fac
Input: remove cruft that was needed for transition to sysfs
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

Dmitry Torokhov   commited 2006-09-14 01:32:28 -04:00
68c2a1607c