summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-10-06Docs: fix udev rulesErovia
Apparently, udev does not like inline comments. Rules with them are ignored, oops.
2020-10-06[CLI] Add c2json (#8817)Erovia
* Basic keymap parsing finally works * Add 'keymap.json' creation to the qmk.keymap module * Add tests and fix formatting * Fix/exclude flake8 errors * Convert keymap.c to valid keymap.json * Fix some errors * Add tests * Finalize keymap.json creation, add json template * Add docs * Move pygments to the standard requirements * Add support for nameless layers, fix tests * Fix things after rebase * Add missing 'keymap' value. * Fix missing layer numbers from advanced keycodes Buckwich noticed that if the advanced keycode / layer toggling key contains a number, it goes missing. Now we properly handle them. Thx for noticing! * Apply suggestions from code review * fixup tests Co-authored-by: Zach White <skullydazed@drpepper.org> Co-authored-by: skullY <skullydazed@gmail.com>
2020-10-06Improve LAYOUT macro searching (#9530)Ryan
* Improve LAYOUT macro searching * Apply suggestions from code review Co-authored-by: Zach White <skullydazed@users.noreply.github.com> * Adjust signature * Try to copy the makefile's handling of DEFAULT_FOLDER * Move it further up, into `info_json()` * Move it even further up so that keyboard_folder is correct * Update lib/python/qmk/info.py Co-authored-by: Zach White <skullydazed@drpepper.org> * Update lib/python/qmk/info.py Co-authored-by: Zach White <skullydazed@drpepper.org> Co-authored-by: Zach White <skullydazed@users.noreply.github.com> Co-authored-by: Zach White <skullydazed@drpepper.org>
2020-10-06CLI: update subcommands to use return instead of exit() (#10323)Ryan
2020-10-06Increment EVE Vendor ID to be unique.stein3
2020-10-06Merge branch 'master' into meteorstein3
2020-10-05Fixes small typo in docs (#10515)Joe Strong
2020-10-05Update personal keymap for Let's Split keyboard. (#10536)Gergely Peidl
* Add Initial layout configuration. * Set arduino pro micro's built in RX LED as Numlock * Enable Autoshift feautre. * Remove DVORAK layout. * Add Numpad, update default layer. * Update AutoShift timeout. * Beautify ASCII Art. * Update keymap. * Add Initial verison of RGB lighting. * Add Tap dance, hungarian letters. .Xmodmap example: https://github.com/geripgeri/dotfiles/commit/09f058753dd10e4ff8ab2aac7274b5600c466392 * Update RGB to use only noeeprom functions. * Change default rgb led color. * Add `pragma once`. * Emojis added. * Add tap dance for hungarian letters, multimedia control, slash/backslash. * Remove audio related code. * Add Gaming layer. * Remove unnecessary code, update copyright. * Add readme.md * Implement code review suggestions. * Implement code review suggestions #2 * Remove Auto Shift feature. * Remove Gaming layer.
2020-10-04[Keymap] Move my custom functions and keymaps to userspace (#10502)Reibl János Dániel
* Move my custom functions and keymaps to userspace to be able to add the STM32F411 variant of my keyboard with mostly the same functionality * Move keymaps to community layouts * Remove keymaps from userspace readme.md Co-authored-by: Janos Daniel Reibl <janos.daniel.reibl@protonmail.com>
2020-10-04[Keyboard] add support for ymd75 rev3 (#10483)Jakob
* add support for ymd75 rev3 * Update keyboards/ymd75/rev3/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/ymd75/rev3/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> * remove DESCRIPTION * only apply offset for rev3 Co-authored-by: Ryan <fauxpark@gmail.com>
2020-10-04[Keyboard] Add soy20 PCB (#10440)Thomas Holt-Ronczy
* Add soy20 PCB adds default and VIA Keymaps for soy20 pcb by DrewKeys * Update keyboards/soy20/config.h Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/config.h Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/rules.mk Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/soy20.h Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/keymaps/via/keymap.c Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/keymaps/via/keymap.c Agreed. It was left over from the original file provided by the board makers original configurator file. Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/rules.mk Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/config.h Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/config.h Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/config.h Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/keymaps/default/keymap.c Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/keymaps/default/keymap.c Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> * Update keyboards/soy20/info.json Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/readme.md Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/soy20.h Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/default/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/default/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/default/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/via/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/via/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/via/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/keymaps/via/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/info.json Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/soy20/config.h Co-authored-by: Joel Challis <git@zvecr.com> * Updating *.c & *.h files with GPL3 license * Delete rules.mk * Delete keymap.c * Corrected Header Comments Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Joel Challis <git@zvecr.com>
2020-10-04Fix for MIDI sustain effect issue (#10361)3araht
2020-10-04format code according to conventions [skip ci]QMK Bot
2020-10-04Merge pull request #10404 from cmdremily/opendeck-coreDrashna Jaelre
Allow the use of only one IS31FL3731 LED driver
2020-10-04[Keyboard] Add Yugo-M Controller (#10389)tomic1785
* Created folder structure and blank files * Update the yugo_m initial blank files * Add yugo_m default keymap * Update yugo_m info.json * Fix yugo_m keymap.c * keymap.c update * Changed subfolder name * File names * Fixed lock LEDs problem * Returned old subfolder name; LEDs fix * Activated anti-ghosting feature in config.h * Update readme.md * Changed LAYOUT to LAYOUT_all * Updated keymap.c * corrected LAYOUT to LAYOUT_all in info.json * Rewritten readme.md according to the template * Removed backslashes from keymap.c * Fixed readme.md * Fixed readme.md again * Tidying up readme.md * Tidying up comments and readme.md * Removed a line from rules.mk * Update keyboards/yugo_m/model_m_101/model_m_101.h Co-authored-by: Joel Challis <git@zvecr.com> * Removed chconf, halconf, mcuconf * Updated LED control * Update keyboards/yugo_m/model_m_101/rules.mk Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/yugo_m/model_m_101/config.h Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/yugo_m/model_m_101/config.h Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/yugo_m/model_m_101/config.h Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/yugo_m/model_m_101/model_m_101.c Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/yugo_m/readme.md Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Updated readme.md, there was an outdated info * Update keyboards/yugo_m/model_m_101/keymaps/default/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/yugo_m/model_m_101/keymaps/default/keymap.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/yugo_m/model_m_101/model_m_101.c Co-authored-by: Ryan <fauxpark@gmail.com> * Update keyboards/yugo_m/model_m_101/model_m_101.c Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Nidzo Tomic <tomicn8@hotmail.com> Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: Ryan <fauxpark@gmail.com>
2020-10-04[Keymap] Add onekey keymap for OLED testing (#10380)Sergey Vlasov
* Add onekey keymap for OLED testing * Add license header
2020-10-04[Keymap] Add winterNebs keymaps (#10328)Isaac
* Add kyria keymap * Add planck keymap * Add nyquist keymap * Add vim movement instead of regular movement layer * Use partial home row mods :) * Update keyboards/keebio/nyquist/keymaps/winterNebs/config.h Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/keebio/nyquist/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/keebio/nyquist/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/keebio/nyquist/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/keebio/nyquist/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/kyria/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/kyria/keymaps/winterNebs/rules.mk Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/planck/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/planck/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/planck/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * Fix outdated function call * Apply suggestions from code review Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: Drashna Jaelre <drashna@live.com> * Update keyboards/kyria/keymaps/winterNebs/keymap.c somehow this wasn't added to the batch? Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * remove deprecated function * Rename to lowercase * Update keyboards/planck/keymaps/winterNebs/keymap.c Co-authored-by: Drashna Jaelre <drashna@live.com> * fix oled path * rebase and add back nyquist that was lost by rename * Add licenses * License in the wrong file Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2020-10-04[Keymap] Added 333fred 5x6_5 keymap (#10272)Fred Silberberg
* First pass at manuform layout. * Updates from actual usage on my board. Fixed a couple of bugs, added a stormlight quote randomizer. * Use a 32-bit timer that can actually hit 5 minutes. * Some updates after a day of usage: * Turn off WPM. It's too inaccurate and takes up a decent amount of space that can be devoted to quotes. * Turn off the OLEDs after 5 minutes * Move the keys around a bit. * Add many more quotes. * Adjust the quotes to make room for missing and misswritten WoT quote. Adjusted the keymap slightly. Adjust the mods display to include one_shots. * Revert osm on lgui as it makes start menu search impossible to use. * Use LTO_ENABLE flag. * License all of my (333fred's) keymaps as MIT. * Update users/333fred/rgb.c Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Ryan <fauxpark@gmail.com>
2020-10-04[Keyboard] Add hannah60rgb rev.2 PCB (#10287)mechlovin
* add hannah60rgb_rev2 * add * Update rev2.c * fixed rgb matrix * Update rev2.c * update rules.mk * update readme * update * Update config.h * Update rules.mk
2020-10-04Adding VIA support to katana60 rev2 (#10442)swampmonster
Co-authored-by: swampmonster <>
2020-10-04OLED driver fixes (#10377)Sergey Vlasov
* Fix dirtying in oled_write_pixel() Set the dirty bit for the block only if oled_write_pixel() actually changed the buffer state. Without this check oled_write_pixel() could not be used inside the oled_task_user() code using the “redraw always” style, because the blocks touched by oled_write_pixel() would always appear dirty, and oled_render() would not proceed beyond the first such dirty block. * Fix oled_write_pixel() with 90/270 degree rotation Use oled_rotation_width instead of OLED_DISPLAY_WIDTH, so that a rotated display would be handled correctly. * Fix compilation with custom OLED_BLOCK_COUNT and OLED_BLOCK_SIZE Some OLED sizes (e.g., 64×48) may require a nonstandard value of OLED_BLOCK_COUNT. The documentation says that this value may be redefined in config.h, but actually trying to redefine it caused a compile error, because the macro was redefined in oled_driver.c. Make the OLED_BLOCK_COUNT definition in oled_driver.c respect any user override, and do the same for OLED_BLOCK_SIZE just in case. * Fix handling of out-of-range bits in oled_dirty If a custom OLED_BLOCK_COUNT value is specified, some bits in oled_dirty may not correspond to existing blocks; however, if those bits are set somewhere (e.g., by code with sets oled_dirty to ~0 or even -1), oled_render() would try to handle them and could access memory beyond oled_buffer and perform hardware operations with out of range values. Prevent this by masking off unused bits in oled_render(), and also avoid setting those bits in other functions. * Fix potentially wrong dirtying in oled_write_char() oled_write_char() tried to mark the position just beyond the written character as dirty; use (OLED_FONT_WIDTH - 1) to dirty the last position still belonging to the character instead. * Fix `#define OLED_BLOCK_TYPE uint32_t` on AVR Using uint32_t as OLED_BLOCK_TYPE did not work properly on AVR, because some bit shifts were performed using 16-bit int. Add explicit casts to OLED_BLOCK_TYPE to those shifts.
2020-10-04IS31FL3741 driver fixup (#10519)a_p_u_r_o
* Fix issue with data transfer of CS1_SW7 to CS18_SW7. * Fix issue with handling of scaling register buffer's dirty flag. * Remove unused extern declaration. * Compaction of struct is31_led utilizing bit fields.
2020-10-03add info.json for XD75 keyboard (#10523)Simon
Currently the XD75 is missing a info.json attributing to non standardised use of QMK
2020-10-03Mark 'key_count' as optional within info.json docs (#10513)George Mao
* Update reference_info_json.md key_count is now an optional field because it is better to get the keycount by counting the elements in the layout array. * Updated Japanese documentation as well
2020-10-02Update info.json for Slice RGB (#10514)James Young
- add data for LAYOUT_all macro - correct some rounding errors - make the indentation consistent - remove trailing whitespace
2020-10-02Add Slice RGB VIA Support (#10407)Nick Abe
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
2020-10-02Add joestrong keymap for quefrency rev 2 (#10503)Joe Strong
2020-10-01[Keyboard] FightPad! macropad by Clawsome (#10507)AlisGraveNil
* 1 Oct 20 * Update keyboards/clawsome/fightpad/config.h * Update keyboards/clawsome/fightpad/rules.mk * Update keyboards/clawsome/fightpad/info.json * Update keyboards/clawsome/fightpad/readme.md * Update keyboards/clawsome/fightpad/readme.md * Update keyboards/clawsome/fightpad/info.json * Update keyboards/clawsome/fightpad/config.h
2020-10-01[Keymap] VIA keymap for the Sofle (#10446)Sturek
* Added via support * Now uses LTO_ENABLE * Deactivated console to save space * Update keyboards/sofle/keymaps/via/readme.md * Added GPL license * Update keyboards/sofle/keymaps/via/keymap.c * Update keyboards/sofle/keymaps/via/keymap.c * Update keyboards/sofle/keymaps/via/keymap.c * Update keyboards/sofle/keymaps/via/keymap.c
2020-10-01[Keymap] niclake keymap for Boardwalk (#10488)Nic Lake
* Initializing Boardwalk layout * rules.mk newline * config.h newline * qwerty num toggle -> tap-toggle * errant K, and _LOWER momentary toggles * Lack of autosave sucks * Converting to HHKB layout * TT(_NUM) added to num layer * Final updates for Boardwalk initialization * Final refinements * newline * Removal of extra includes * Update keyboards/boardwalk/keymaps/niclake/config.h #pragma once * Removing comment block from rules * Updates to my layout
2020-10-01[keyboard] add BM60Poker support (#10475)Peter Peterson
* WIP working on new keymap * tweaking keymap * updated keymap * cleaned up a little bit * New preonic keymap * my preonic keymap * added mac layout * preonic map update * cleaning up old repo * cleaning up to match upstream * more cleanup * removing old keymaps * Added BM60 Poker * Apply suggestions from code review * Added license * updated license * updated license * Fixed remaining licenses and added layout to rules
2020-10-02Fixed some small things and replaced deprecated definitions (#10414)Žan Pevec
* Fixed some small things and replaced deprecated definitions * Improvements * Reverted kemyap change
2020-10-02Added replacement pcb for the matrix cain keyboard (#10436)yulei
* added replacement pcb for the matrix cain keyboard * update usb descriptor * fixed led polarity * Update keyboards/matrix/cain/cain.c Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/matrix/cain/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> * Apply suggestions from code review Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * rename from cain to cain_re * Update keyboards/matrix/cain_re/readme.md Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2020-10-01New keyboard: wsk/g4m3ralpha (#10431)ridingqwerty
* adding alpha variants * adding cajal layouts * adding V2 PCB support adding additional layouts for new PCB version, and correecting incorrect image in info file * Cleanup master -- remove alpha9 * Cleanup master -- remove g4m3ralpha * Cleanup master -- remove cajal & sl40 * Master cleanup -- re-add sl40 * Master cleanup -- correct SL40 image * Add new keyboard: wsk/g4m3ralpha * Added license attribution to .{c,h} files * Update keyboards/wsk/g4m3ralpha/config.h Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/wsk/g4m3ralpha/rules.mk Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/wsk/g4m3ralpha/g4m3ralpha.c Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/wsk/g4m3ralpha/keymaps/default/keymap.c Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/wsk/g4m3ralpha/config.h Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/wsk/g4m3ralpha/info.json Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/wsk/g4m3ralpha/rules.mk Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: worldspawn00 <mcmancuso@gmail.com> Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: Ryan <fauxpark@gmail.com>
2020-10-01BM60RGB ISO: update default keymap and layout macro (#10494)James Young
* BM60RGB ISO: fix and extend default keymap - correctly assigns the Non-US Backslash and Hash keys - adds Function and Navigation keys - use KC_GESC instead of KC_ESC to make Grave accent available * Update layout macro The layout is the ISO equivalent of QMK's `LAYOUT_60_ansi_arrow`.
2020-10-01Doc followup 9942 (#10473)nopunin10did
* Update feature_advanced_keycodes.md * Update mod_tap.md
2020-10-01Port mechmini v2 for VIA support (#10497)Jordan
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
2020-10-01Add ddeklerk split_3x6_3 layout (#10470)Danilo de Klerk
2020-10-01Update make rules for community/ortho_4x12/junonum (#10467)Juno Nguyen
2020-10-01Add 64_ansi and 64_iso Community Layouts (#10463)James Young
* Add 64_ansi Community Layout * Add 64_iso Community Layout * Add readme.md with layout drawings * Edit readme.md - fix layout drawings Fix 65_ansi_blocker_split_bs and 65_ansi_blocker_tsangan drawings. * Edit readme.md - suggestions per fauxpark Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Ryan <fauxpark@gmail.com>
2020-10-01Southpaw Fullsize: Add VIA support (#10469)ai03
* Add via configurator support * Remove layers to fix via * Re-add extra via layers since it seems to work now * Replace tabs with spaces * Update readme.md
2020-10-01Update keyboards/eve/meteor/info.jsonNate Stein
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-10-01[Keymap] Adding 2x2u default layout for Boardwalk (#10486)Nic Lake
* Adding 2x2u default layout for Boardwalk * Defining the _RAISE layer
2020-10-01KBDFans KBD19x: VIA Support & LAYOUT macro fixing (#10401)MechMerlin
* first pass at fixing the key labeling * second pass of fixing key labeling * third pass of this key naming * another pass of changing key naming * another pass * another pass * another pass * renamed it all * give a good vid and pid * add via keymap * add on to the comments * update readme and comments * one more small change
2020-10-02Crkbd implementing return value for matrix_scan() (#10422)yhr0x43
2020-10-01xd75re Multi-layer keymap (#10499)Tom Swartz
Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Erovia <Erovia@users.noreply.github.com>
2020-10-02Fix SPLIT_KEYBOARD compilation for ATMega*U2, which doesn't have VBUS/OTG ↵sol
control (#10460) Co-authored-by: s-ol <s-ol@users.noreply.github.com>
2020-10-01Enable Mediakeys for yiancar's 328p keyboards (#10476)yiancar
2020-10-01resolve extra param issue in boardsource/5x12 via keymap (#10501)Adam Gwilliam
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: Danny <nooges@users.noreply.github.com> Co-authored-by: Adam Gwilliam <agwilliam@yaharasoftware.com>
2020-10-01[Keymap] VIA Support for Nein Macropad (#10496)thompson-ele
Co-authored-by: Ryan <fauxpark@gmail.com>