[Google Pixel XL ROMs, Kernels, Recoveries, & Other] Freak07:
UPDATE to 2.00 / EAS 1.3 SCHEDUTIL

Hey guys and girls,

update time again.

As the previous post already indicated I revert some of googles patches to the EAS integration, in order to implement EAS 1.3 directly from CAF/Linaro.

This means schedutil is also back for those of you, that prefer this governor.

Changelog:

- Implemented EAS 1.3, also Schedutil is available again.

- upstreamed kernel to latest 3.18.74

Detailed Changelog:

8a1b535 update:marlin_defconfig

9e56730 sched: walt: Modify WALT window size to adjust for CONFIG_HZ

8c7d4cc sched/fair: Add a backup_cpu to find_best_target

783ca7d sched/fair: Try to estimate possible idle states.

d0e8d3c sched/fair: Sync task util before EAS wakeup

bf14a2b Revert "sched/fair: ensure utilization signals are synchronized before use"

12f564a sched/fair: kick nohz idle balance for misfit task

41cea9d sched/fair: Update signals of nohz cpus if we are going idle

1e62962 events: add tracepoint for find_best_target

77f3d4f sched/fair: streamline find_best_target heuristics

cac6b29 sched: always use blk_schedule_flush_plug in io_schedule_out

3a1d966 sched: Prevent recursion in io_schedule()

8e617a8 update:marlin_defconfig

706f5eb UPSTREAM: cpufreq: schedutil: Trace frequency only if it has changed

c482b3a UPSTREAM: cpufreq: schedutil: Avoid reducing frequency of busy CPUs prematurely

80c5cd1 UPSTREAM: cpufreq: schedutil: Refactor sugov_next_freq_shared()

6cf4bc0 UPSTREAM: cpufreq: schedutil: Fix per-CPU structure initialization in sugov_start()

f6898bf UPSTREAM: cpufreq: schedutil: Pass sg_policy to get_next_freq()

b40e900 UPSTREAM: cpufreq: schedutil: move cached_raw_freq to struct sugov_policy

32f8e9d UPSTREAM: cpufreq: schedutil: Rectify comment in sugov_irq_work() function

7ad69cb UPSTREAM: cpufreq: schedutil: irq-work and mutex are only used in slow path

673730f UPSTREAM: cpufreq: schedutil: enable fast switch earlier

243ed34 UPSTREAM: cpufreq: schedutil: Avoid indented labels

f8168a8 cpufreq/sched: Use cpu max freq rather than policy max

f2d69af sched/fair: Fix load_balance() affinity redo path

67e426d sched/fair: Remove group imbalance from calculate_imbalance()

32773d4 Revert "memcg: add permission check"

9beeb9e Revert "cgroup: memcg: pass correct argument to subsys_cgroup_allow_attach"

c02cadc cgroup: Change from CAP_SYS_NICE to CAP_SYS_RESOURCE for cgroup migration permissions

2e9515e CHROMIUM: cgroups: relax permissions on moving tasks between cgroups

b39d6cf ANDROID: sched/tune: Remove leftover instances of allow_attach

65241e6 Revert "cgroup: refactor allow_attach function into common code"

69054a5 Revert "cgroup: Add generic cgroup subsystem permission checks"

3cbd367 Revert "cgroup: Clean up after allow_attach check"

ed4891d cpuset: make sure new tasks conform to the current config of the cpuset

683f155 sched: Fix build without cpufreq_sched governror

a858f55 EAS: Silence logging caused by EAS changes

7b186f7 sched: walt: fix window misalignment when HZ=300

c630e7e UPSTREAM: PM / sleep: make PM notifiers called symmetrically

7a818f1 BACKPORT: sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target

942ef55 sched: Check if we got a shallowest_idle_cpu before searching for least_loaded_cpu

a76059b sched/rt/nohz: Stop scheduler tick if running realtime task

d003647 sched: Implement lockless wake-queues

a352167 UPSTREAM: sched/fair: Fix post_init_entity_util_avg() serialization

89d7941 ANDROID: sched: fix duplicate sched_group_energy const specifiers

0d697fe DTS: Update Energy Model for SD820 Devices (msm8996)

28636d3 DTS: MSM8996: EAS Energy Model Change

3c9b24a sched: EAS: energy model change. Based on QCOM 8996AB one.

f67756f sched/tune: don't use schedtune before it is ready

a6a2ce0 sched/fair: use SCHED_CAPACITY_SCALE for energy normalization

aed7b93 sched/{fair,tune}: use reciprocal_value to compute boost margin

a2cf769 sched/tune: Initialize raw_spin_lock in boosted_groups

a899478 sched/tune: report when SchedTune has not been initialized

d8b2de0 sched/tune: fix sched_energy_diff tracepoint

afc2f1c sched/tune: increase group count to 5

e96af9c cpufreq/schedutil: use boosted_cpu_util for PELT to match WALT

dfd3888 sched/fair: Fix sched_group_energy() to support per-cpu capacity states

a216bde sched/fair: discount task contribution to find CPU with lowest utilization

dc2df7d cpufreq/schedutil: Fix schedutil's 'default governor' machinery

e35cac9 sched/fair: ensure utilization signals are synchronized before use

d56d125 sched/walt: Add CONFIG_USE_WALT to change default usage of WALT

7afeb98 sched/fair: remove task util from own cpu when placing waking task

d12ec4d trace:sched: Make util_avg in load_avg trace reflect PELT/WALT as used

f617139 Experimental!: sched/fair: Add eas (& cas) specific rq, sd and task stats

6649bad sched/core: Fix PELT jump to max OPP upon util increase

86eadbd DEBUG: sched/fair: Fix sched_load_avg_cpu events for task_groups

25bc02d DEBUG: sched/fair: Fix missing sched_load_avg_cpu events

87da313 Revert "cgroup: Fix issues in allow_attach callback"

50d3a44 ANDROID: sched/walt: fix build failure if FAIR_GROUP_SCHED=n

582e817 sched/walt: kill {min,max}_capacity

ed83af8 sched: EAS & 'single cpu per cluster'/cpu hotplug interoperability

0ad49f1 sched: Multiple upstream load tracking changes

7901128 sched/fair: Fix effective_load() to consistently use smoothed load

ea162f6 sched: propagate asynchrous detach

eff1aff sched: propagate load during synchronous attach/detach

0ad85ef sched: fix hierarchical order in rq->leaf_cfs_rq_list

6c10115 sched: factorize PELT update

29e22e0 sched: factorize attach entity

855884b sched/fair: Improve PELT stuff some more

231e583 sched/fair: Apply more PELT fixes

febcfa9 sched/fair: Initiate a new task's util avg to a bounded value

9142e4a Fixup!: sched/fair: No need to 'and' current cpu w/ online mask in wakeup

1ee9833 Fixup!: Return first idle cpu for prefer_idle task immediately

c272276 Fixup!: sched/fair: Simplify idle_idx handling in select_idle_sibling()

7040d34 Fixup!: sched/fair: Refactor min_util, new_util in find_best_target()

6cd685e Fixup!: sched/fair: Simplify idle_idx handling in find_best_target()

d36aacb Fixup!: sched/fair: Simplify target_util handling in find_best_target()

1a51e56 sched/fair: Simplify backup_capacity handling in find_best_target()

2a81c68 Experimental!: sched/fair: Change cpu iteration order in find_best_target()

5bd7349 Experimental!: sched/core: Add first cpu w/ max/min orig capacity to root domain

3db3b03 sched/core: Remove remnants of commit fd5c98da1a42

90a4140 Experimental!: sched: Remove sysctl_sched_is_big_little

6a9d4fe Experimental!: sched/fair: Code !is_big_little path into select_energy_cpu_brute()

3090dc3 Experimental!: EAS: sched/fair: Re-integrate 'honor sync wakeups' into wakeup path

b53f02f Fixup!: sched/fair.c: Set SchedTune specific struct energy_env.task

15d2b5b Experimental!: sched/fair: Energy-aware wake-up task placement

c323180 Experimental!: sched/fair: Add energy_diff dead-zone margin

e023154 Experimental!: sched/fair: Decommission energy_aware_wake_cpu()

22ab3da Experimental!: sched/fair: Do not force want_affine eq. true if EAS is enabled

5b926cf Experimental! arm64: Set SD_SHARE_CAP_STATES sched_domain flag on DIE level

114a20e sched/fair: Fix incorrect comment for capacity_margin

4693519 sched/fair: Avoid pulling tasks from non-overloaded higher capacity groups

73d8ab0 sched/fair: Add per-CPU min capacity to sched_group_capacity

dd7e43e sched/fair: Consider spare capacity in find_idlest_group()

3607618 sched/fair: Compute task/cpu utilization at wake-up correctly

0b44fc7 sched/fair: Let asymmetric CPU configurations balance at wake-up

9c6af21 sched/core: Enable SD_BALANCE_WAKE for asymmetric capacity systems

eb232e3 sched/core: Pass child domain into sd_init()

2ea2f99 sched/core: Introduce SD_ASYM_CPUCAPACITY sched_domain topology flag

136be3b sched/core: Remove unnecessary NULL-pointer check

9ed2737 sched/fair: Optimize find_idlest_cpu() when there is no choice

a2e85a8 sched/fair: Make the use of prev_cpu consistent in the wakeup path

718f084 sched/core: Fix power to capacity renaming in comment

d660e38 Partial Revert: "WIP: sched: Add cpu capacity awareness to wakeup balancing"

8395793 Revert "WIP: sched: Consider spare cpu capacity at task wake-up"

9d48086 schedutil: Fix linkage of schedutil and walt

0273bfc cpufreq: schedutil: add up/down frequency transition rate limits

688f39e trace/sched: add rq utilization signal for WALT

f009889 sched/cpufreq: make schedutil use WALT signal

9954bf4 sched: cpufreq: use rt_avg as estimate of required RT CPU capacity

ac3bb03 cpufreq: schedutil: move slow path from workqueue to SCHED_FIFO task

17aa43d sched: backport schedutil governor from 4.9-rc4

b1d749a sched: backport cpufreq hooks from 4.9-rc4

3e7b802 kthread: allow to cancel kthread work

180629e sched/cpufreq: fix tunables for schedfreq governor

381c2fd sched: This kernel expects sched_cfs_boost to be signed

28ce384 Revert "DEBUG: UTIL_EST: sched: update tracepoint to report estimated CPU utilzation"

96bff1f sched/walt: Drop arch-specific timer access

09c903e sched/tune: backport 'fix accounting for runnable tasks'

a47da57 sched: Fix sysctl_sched_cfs_boost type to be int

9f2822c sched/walt: use do_div instead of division operator

2a4dc84 schedtune: Guarding against compile errors

1ba0e58 Unify whitespace layout with android-3.18

f804e76 Revert: UTIL_EST code from 'fix set_cfs_cpu_capacity when WALT is in use"

db88145 sched/fair: missing parts of 'optimize idle cpu selection for boosted tasks'

09e63ec eas/sched/fair: Fixing comments in find_best_target.

472f188 FIX: sched/tune: move schedtune_nornalize_energy into fair.c

5c5268b FIXUP: sched/tune: update accouting before CPU capacity

ecd1aed Revert "WIP: UTIL_EST: sched/fair: add support for estimated utilization"

397aec24 Revert "WIP: UTIL_EST: sched/{core,fair}: add support to use estimated utilization"

37f896b sched: revert UTIL_EST usage from commit 6bf72ca7f1

6d04fbc Revert "WIP: UTIL_EST: switch to usage of tasks's estimated utilization"

6d316d4 Revert "WIP: UTIL_EST: sched/fair: use estimated utilization to drive CPUFreq"

e06505e Revert "WIP: UTIL_EST: use estimated utilization on energy aware wakeup path"

a17779d7 Revert "WIP: UTIL_EST: use estimated utilization on load balancing paths"

eeb9e83 sched: tune: Fix lacking spinlock initialization

4061b0c ANDROID: sched/tune: schedtune_allow_attach() can be static

d466f46 ANDROID: sched/tune: __pcpu_scope_cpu_boost_groups can be static

39abe2d Revert "DEBUG: sched/walt: make WALT tracepoints parsable by Trappy"

3ec8c93 Revert "FIXUP: sched/tune: update accouting before CPU capacity"

cddd7c5 Revert "FIXUP: sched/core: disable EAS mode when energy model data are not available"

d98350c Revert "FIXUP: sched/fair: fix SCHED_DEBUG compilation issue"

97c3075 Revert "EXP: sched/fair: use boosted task utilisation to constraint CPU selection"

8b4fc49 Revert "EXP: sched/fair: add ENERGY_FILTER sched_feature"

61720ea Revert "sched/{fair,tune}: use reciprocal_value to compute boost margin"

16bb6c4 Revert "sched/tune: report when SchedTune has not been initialized"

205f752 Revert "sched/fair: use SCHED_CAPACITY_SCALE for energy normalization"

83b56c3 Revert "EXP: sched/fair: use energy_env as single argument"

fa6d0a2 Revert "EXP: sched/fair: make find_new_capacity() to honour the task's boost"

3430ebb Revert "sched/fair: add support to compute perf/energy variations"

0eccc9f Revert "DEBUG: sched: add tracepoint for energy_diff"

970d4d5 Revert "DEBUG: sched: add tracpoint for energy/performance variations"

df060f1 Revert "eas/sched/fair: Enabling energy comparisons for boosted and prefer_idle"

60f99b3 Revert "eas/sched/fair: Fixing comments in find_best_target."

bc42470 Revert "eas/sched/fair: Pick cpu with lowest utilization amongst busy cpus when"

8f7eaa2 Revert "Enable ENERGY_FILTER sched feature by default."

5b5625b Revert "sched/tune: Initialize raw_spin_lock in boosted_groups"

e28a2ab Revert "Revert "eas/sched/fair: Enabling energy comparisons for boosted and prefer_idle""

45d6ca9 Revert "sched: Temporarily disable KASAN instrumentation in kernel/sched"

c21d25b Revert "sched/rt: rt cpu selection integration with EAS."

ce7f447 Revert "cpufreq_sched: Fix capacity over accounting."

d1c4a0b Revert "Audio RT glitch fix."

7d19fa3 Revert "schedtune: Increase boost group max count"

6650c60 Revert "sched: Move schedtune boost utilization calculations to tune.h"

c2ec054 Revert "sched: Use schedtune boosted WALT signal for RT"

2de30cb Revert "Move sync logic to be run always"

1414b2e Revert "sched: Add back capacity margin in sched_freq_tick_walt"

baf9739 Revert "sched: rt: Fix broken sync wakeup logic"

b2678d6 Revert "sched: freq: Reevaluate throttle if frequency requested changes"

cca00da Revert "Revert "sched: freq: Reevaluate throttle if frequency requested changes""

e9f5d16 Revert "sched: freq: Reevaluate throttle if frequency requested changes"

c90921a Revert "BACKPORT: sched: Replace post_schedule with a balance callback list"

67e2557 Revert "UPSTREAM: sched: Allow balance callbacks for check_class_changed()"

0ae363a Revert "BACKPORT: sched,rt: Remove return value from pull_rt_task()"

46f4d67 Revert "BACKPORT: sched, rt: Convert switched_{from, to}_rt() / prio_changed_rt() to balance callbacks"

9e075bb Revert "cpufreq_sched: Fix race in governor exit path"

3bb0150 Revert "BACKPORT: sched/rt: Add a missing rescheduling point"

8405df7 Revert "Revert "sched: rt: Fix broken sync wakeup logic""

9a7e53e Revert "Revert "sched/rt: rt cpu selection integration with EAS.""

3c8373d Revert "Revert "sched: freq: Reevaluate throttle if frequency requested changes""

352965e Revert "BACKPORT: sched/rt: Reduce rq lock contention by eliminating locking of non-feasible target"

c0c00a8d Revert "BACKPORT: sched: Introduce the trace_sched_waking tracepoint"

d5eee93 Revert "UPSTREAM: sched/rt: Use IPI to trigger RT task push migration instead of pulling."

1415fb4 Revert "ANDROID: sched: rt: Avoid preempting CPUs if softirq explicity disable"

fb044f9 Revert "ANDROID: sched: rt: Boost RT tasks that are not-pinned as well"

67bcf3a Revert "ANDROID: sched: rt: schedtune: Add boost retention to RT"

ccc897d Revert "UPSTREAM: sched: core: Use hrtimer_start[_expires]()"

c215da5 Revert "UPSTREAM: sched: Cleanup bandwidth timers"

8464ec9 Revert "BACKPORT: sched,perf: Fix periodic timers"

2ab195c Revert "Revert "sched/tune: Initialize raw_spin_lock in boosted_groups""

240ee95 Revert "sched: honor sync only if CPU is about to goto idle"

34eb2ea Revert "sched: rt: Avoid CPUs running top apps if possible"

7db7377 Linux 3.18.74

cf16c4f crypto: algif_skcipher - Load TX SG list after waiting

38b48a9 staging: nvec: remove duplicated const

81d3398 ttpci: address stringop overflow warning

69565b3 ALSA: au88x0: avoid theoretical uninitialized access

906bed0 IB/qib: fix false-postive maybe-uninitialized warning

7f15dbe libata: transport: Remove circular dependency at free time

822b554 xfs: remove kmem_zalloc_greedy

46cf2c5 md/raid10: submit bio directly to replacement disk

3b22060 rds: ib: add error handle

690118a parisc: perf: Fix potential NULL pointer dereference

f26d7d5 netfilter: nfnl_cthelper: fix incorrect helper->expect_class_max

22fc7b2 exynos-gsc: Do not swap cb/cr for semi planar formats

85331d4 netfilter: invoke synchronize_rcu after set the _hook_ to NULL

57e428a mmc: sdio: fix alignment issue in struct sdio_func

b800784 usb: plusb: Add support for PL-27A1

6f825f3 team: fix memory leaks

691fd93 net/packet: check length in getsockopt() called with PACKET_HDRLEN

980bfcf net: core: Prevent from dereferencing null pointer when releasing SKB

9298db5 audit: log 32-bit socketcalls

74c0e45 partitions/efi: Fix integer overflow in GPT size calculation

1f2cea2 USB: serial: mos7840: fix control-message error handling

95c65cb USB: serial: mos7720: fix control-message error handling

ef85cea IB/ipoib: Replace list_del of the neigh->list with list_del_init

e49a0c8 IB/ipoib: rtnl_unlock can not come after free_netdev

8c43a48 IB/ipoib: Fix deadlock over vlan_mutex

2340f48 tty: goldfish: Fix a parameter of a call to free_irq

56fa7c1 ARM: 8635/1: nommu: allow enabling REMAP_VECTORS_TO_RAM

e10105b hwmon: (gl520sm) Fix overflows and crash seen when writing into limit attributes

ba2a6a6 sh_eth: use correct name for ECMR_MPDE bit

995236b MIPS: Ensure bss section ends on a long-aligned address

3c8373d Revert "Revert "sched: freq: Reevaluate throttle if frequency requested

changes""

352965e Revert "BACKPORT: sched/rt: Reduce rq lock contention by eliminating loc

king of non-feasible target"

c0c00a8d Revert "BACKPORT: sched: Introduce the trace_sched_waking tracepoint"

d5eee93 Revert "UPSTREAM: sched/rt: Use IPI to trigger RT task push migration in

stead of pulling."

1415fb4 Revert "ANDROID: sched: rt: Avoid preempting CPUs if softirq explicity d

isable"

fb044f9 Revert "ANDROID: sched: rt: Boost RT tasks that are not-pinned as well"

67bcf3a Revert "ANDROID: sched: rt: schedtune: Add boost retention to RT"

ccc897d Revert "UPSTREAM: sched: core: Use hrtimer_start[_expires]()"

c215da5 Revert "UPSTREAM: sched: Cleanup bandwidth timers"

8464ec9 Revert "BACKPORT: sched,perf: Fix periodic timers"

2ab195c Revert "Revert "sched/tune: Initialize raw_spin_lock in boosted_groups""

240ee95 Revert "sched: honor sync only if CPU is about to goto idle"

34eb2ea Revert "sched: rt: Avoid CPUs running top apps if possible"

7db7377 Linux 3.18.74

cf16c4f crypto: algif_skcipher - Load TX SG list after waiting

38b48a9 staging: nvec: remove duplicated const

81d3398 ttpci: address stringop overflow warning

69565b3 ALSA: au88x0: avoid theoretical uninitialized access

906bed0 IB/qib: fix false-postive maybe-uninitialized warning

7f15dbe libata: transport: Remove circular dependency at free time

822b554 xfs: remove kmem_zalloc_greedy

46cf2c5 md/raid10: submit bio directly to replacement disk

3b22060 rds: ib: add error handle

690118a parisc: perf: Fix potential NULL pointer dereference

f26d7d5 netfilter: nfnl_cthelper: fix incorrect helper->expect_class_max

22fc7b2 exynos-gsc: Do not swap cb/cr for semi planar formats

85331d4 netfilter: invoke synchronize_rcu after set the _hook_ to NULL

57e428a mmc: sdio: fix alignment issue in struct sdio_func

b800784 usb: plusb: Add support for PL-27A1

6f825f3 team: fix memory leaks

691fd93 net/packet: check length in getsockopt() called with PACKET_HDRLEN

980bfcf net: core: Prevent from dereferencing null pointer when releasing SKB

9298db5 audit: log 32-bit socketcalls

74c0e45 partitions/efi: Fix integer overflow in GPT size calculation

1f2cea2 USB: serial: mos7840: fix control-message error handling

95c65cb USB: serial: mos7720: fix control-message error handling

ef85cea IB/ipoib: Replace list_del of the neigh->list with list_del_init

e49a0c8 IB/ipoib: rtnl_unlock can not come after free_netdev

8c43a48 IB/ipoib: Fix deadlock over vlan_mutex

2340f48 tty: goldfish: Fix a parameter of a call to free_irq

56fa7c1 ARM: 8635/1: nommu: allow enabling REMAP_VECTORS_TO_RAM

e10105b hwmon: (gl520sm) Fix overflows and crash seen when writing into limit at

tributes

ba2a6a6 sh_eth: use correct name for ECMR_MPDE bit

995236b MIPS: Ensure bss section ends on a long-aligned address

a1269c7 RDS: RDMA: Fix the composite message user notification

1602048 drm: bridge: add DT bindings for TI ths8135

22c88e3 Linux 3.18.73

f65e9bd fix xen_swiotlb_dma_mmap prototype

fc785bf swiotlb-xen: implement xen_swiotlb_dma_mmap callback

f2358ea video: fbdev: aty: do not leak uninitialized padding in clk to userspace

e96d68c x86/fpu: Don't let userspace set bogus xcomp_bv

b9658b5 btrfs: prevent to set invalid default subvolid

663f1f3 PCI: Fix race condition with driver_override

f9961ca kvm: nVMX: Don't allow L2 to access the hardware CR8

c6e2907 arm64: Make sure SPsel is always set

a3dd295 bsg-lib: don't free job in bsg_prepare_job

4eddeae nl80211: check for the required netlink attributes presence

8a9f511 vfs: Return -ENXIO for negative SEEK_HOLE / SEEK_DATA offsets

dec8a29 SMB3: Don't ignore O_SYNC/O_DSYNC and O_DIRECT flags

d7225fa SMB: Validate negotiate (to protect against downgrade) even if signing off

86380cf powerpc/pseries: Fix parent_dn reference leak in add_dt_node()

dced9fd KEYS: prevent KEYCTL_READ on negative key

4c8ddab KEYS: prevent creating a different user's keyrings

dcf7477 KEYS: fix writing past end of user-supplied buffer in keyring_read()

90c7028 crypto: talitos - fix sha224

1609b58 scsi: scsi_transport_iscsi: fix the issue that iscsi_if_rx doesn't parse nlmsg properly

aacb232 tracing: Erase irqsoff trace with empty write

6320680 tracing: Fix trace_pipe behavior for instance traces

88178f9 KVM: PPC: Book3S: Fix race and leak in kvm_vm_ioctl_create_spapr_tce()

097abab mac80211: flush hw_roc_start work before cancelling the ROC

ea5d09b cifs: release auth_key.response for reconnect.

0777bf9 cifs: release cifs root_cred after exit_cifs

Download is here: https://www.androidfilehost.com/?fid=745849072291680402

Instruction can be found here:

https://xdaforums.com/pixel-xl/how-to/guide-android-8-oreo-root-stock-rooted-t3660591

Set governor to schedutil on both cluster to fully benefit from all the patches :)

use point 6 / install custom kernel.

Thank you [MENTION=4810220]Homeboy76[/MENTION] for the guide and including my kernel

Have fun, enjoy the kernel and your phone.

Please report back your battery life with the EAS 1.3 implementation of the OREO kernel. Also please comment if you´re using SCHED or SCHEDUTIL Governor.

I´d recommend to set the governor to schedutil for both clusters now :)

This took quite a bit of fiddling around. So as always:

Donations are not mandatory but very welcome. :)

If you like my work and want to buy me a coffee: http://paypal.me/freak07