{"id":15671742,"url":"https://github.com/defgsus/good-github","last_synced_at":"2025-05-06T20:29:28.276Z","repository":{"id":44692037,"uuid":"439307083","full_name":"defgsus/good-github","owner":"defgsus","description":"Collector of exceptional / somewhat personal github commit messages - updated daily","archived":false,"fork":false,"pushed_at":"2024-01-01T01:09:43.000Z","size":55075,"stargazers_count":10,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-25T17:51:31.478Z","etag":null,"topics":["archive","commit-messages","emotional","github-untrending","personal","strong-words"],"latest_commit_sha":null,"homepage":"https://defgsus.github.io/good-github/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/defgsus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-17T11:17:11.000Z","updated_at":"2025-01-28T20:33:56.000Z","dependencies_parsed_at":"2024-10-23T13:54:54.489Z","dependency_job_id":null,"html_url":"https://github.com/defgsus/good-github","commit_stats":{"total_commits":729,"total_committers":1,"mean_commits":729.0,"dds":0.0,"last_synced_commit":"60dc18abee11b0f66ca767de70f311b449962bff"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defgsus%2Fgood-github","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defgsus%2Fgood-github/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defgsus%2Fgood-github/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defgsus%2Fgood-github/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/defgsus","download_url":"https://codeload.github.com/defgsus/good-github/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242833036,"owners_count":20192678,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive","commit-messages","emotional","github-untrending","personal","strong-words"],"created_at":"2024-10-03T15:04:48.967Z","updated_at":"2025-03-10T10:30:26.361Z","avatar_url":"https://github.com/defgsus.png","language":"Python","readme":"## *good gosh*\n\nIt's so many stuff on **github**! Here's one more attempt to *get a grip*. And\nan [index](docs/messages.md).\n\n---\n\n# [2023-12-31](docs/good-messages/2023/2023-12-31.md)\n\n\nthere were a lot of events recorded by [gharchive.org](https://www.gharchive.org/) of which 2,568,713 were push events containing 3,073,998 commit messages that amount to 126,745,196 characters filtered with [words.py@e23d022007...](https://github.com/defgsus/good-github/blob/e23d022007992279f9bcb3a9fd40126629d787e2/src/words.py) to these 48 messages:\n\n\n## [M-D-Team/ait-fabric-1.20.1](https://github.com/M-D-Team/ait-fabric-1.20.1)@[baabc3b7ce...](https://github.com/M-D-Team/ait-fabric-1.20.1/commit/baabc3b7cebfc0e1882d636c777c9570220a2a62)\n#### Sunday 2023-12-31 00:33:18 by Loqor\n\nmoved the registries to where they belong FUCK YOU CREATIVIOUS\n\n---\n## [YakumoChen/tgstation](https://github.com/YakumoChen/tgstation)@[71b45e54ad...](https://github.com/YakumoChen/tgstation/commit/71b45e54adfaa4c681babc545db97fa7103289de)\n#### Sunday 2023-12-31 00:44:06 by san7890\n\nPuts all traits in the globalvars file + CI Testing (#79642)\n\n## About The Pull Request\n\nFixes #76349\n\nI didn't know that people needed to add any new traits to a global list\nso they can be easily read in View Variables, and was pretty shocked to\nfind out many other people didn't know it was a thing. Let's make it a\nthing by testing it using a new CI Python Linter to check this. But oh\nno-\n\n\n![image](https://github.com/tgstation/tgstation/assets/34697715/c093f1a8-00ce-40a6-8e1d-f344107ce7b8)\n\nThere were about 200+ missing traits. Alright, so let's do the\nfollowing:\n\n* Move trait defines to their own dedicated folder in the `_DEFINES`\nfolder.\n* Split up the traits mega-file into different files, for better\norganization. One for the macros, one for the sources, and a few for the\n\"trait declarations\"\n* Run the linter a load of times and add everything to the globalvars\nfile, removing anything that's no longer used and figuring out where the\nbest categorization of it is. also minor code improvements. also rename\nall of the ones that look weird. also fix list indentations\n* Also alphabetize the lists because it's easy\n* Move everything to a new `traits_by_type` list, while keeping the\nadmin one the way it is for the time being while we figure out a better\nway to show that list to admins.\n* Profit\n## Why It's Good For The Game\n\nMapping trait injectors will now work for any type of trait. You\nshouldn't add any trait via this injector though, but you're no longer\nlimited to coders remembering to add it to that critical list you\nneeded.\n\nLays the framework for a better view variables experience. This work is\ntoo lengthy to presently do, but hopefully we can get this done sooner\nrather than later. we will need a code-accessible way to view these\ntraits for such a framework to be implemented, so let's just do that.\n\nFuture steps are to break down the mega-declarations file into a folder\nfull of separate files by typepath, but that requires a lot of auditing.\nDoes need to happen one day though, there's a lot of mob traits mingled\nwith datum traits and auuugh we gotta do this later this PR is already\nmassive.\n\nthere's probably ways to game this but this catches _my_ mistakes so\ngood luck to everyone else (it should work for 99% of everyone)\n## Changelog\n\nNothing applicable to players. However, to mappers, the mapping trait\ninjector should always be able to add any kind of trait (which is rather\ngood for the times when you need it).\n\n---\n## [Pickle-Coding/tgstation](https://github.com/Pickle-Coding/tgstation)@[c00f7d53a3...](https://github.com/Pickle-Coding/tgstation/commit/c00f7d53a32801b7afd923f268da30fb2f99bbd5)\n#### Sunday 2023-12-31 01:02:19 by MGOOOOOO\n\nThe Inversenning : Superior Healing Medications (#79342)\n\nIntroducing new inverse reagents for existing superior healing\nmedications! This push includes...\n\n**Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that\nprovides a decent range of benefits for plant life.\n\n**Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that\npromotes the growth of muscle during and after exercise.\n\n**Bamethan** : Inverse of Salbutamol. Blood thinner that drastically\nincreases the chance of receiving bleeding wounds.\n\n**Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug\nthat purges basic radiation healing chems. Also increases the severity\nof radiation poisoning.\n\n**Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage,\nand slowly removes minor toxin damage.\n\n**Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking\nmess of mercury by-product which causes bursts of manic hysteria.\n\n**Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of\nall things related to carps.\n\nThis is an effort to add more variety to the existing inverse reagent\nsystem within chemistry. Not only should this variety serve to provide\nadditional options for a Chemist to experiment with, they should also\nbroaden the possibilities for already existing strategies.\n\n---\n## [IndieanaJones/tgstation](https://github.com/IndieanaJones/tgstation)@[b7b0932c4b...](https://github.com/IndieanaJones/tgstation/commit/b7b0932c4b5b3d4f9386b6dce514ee1ba3e25a05)\n#### Sunday 2023-12-31 01:05:19 by distributivgesetz\n\nDelamination variants are now locked in after the countdown is reached (#80324)\n\n## About The Pull Request\n\nDoes what it says on the tin.\n## Why It's Good For The Game\n\nThis effectively changes one and only one thing: \n\nThe \"All Within Theoretical Limits\" achievement is easier/fairer to get\nwith this. Previously, if you edged a crystal with the gas composition\nmethod to get a resonance cascade, you had to make sure that your gas\ncomposition stayed until it left the explosion point, which made the\nachievement extremely finnicky and unfun to get this way. Regular\ndelaminations won't really be affected, because yeah. It's at the\nexplosion point. What are you going to do about it?\n\nThis makes the achievement easier to cheese, but honestly, in my opinion\nas person who added the achievement, meh. If people feel like this isn't\ngood for the achievement, say something in the comments.\n\nCloses #79528\n\n## Changelog\n:cl:\nbalance: Delamination variants no longer change once the explosion point\nhas been reached.\n/:cl:\n\n---\n## [kkpan11/comprehensive-rust](https://github.com/kkpan11/comprehensive-rust)@[c9f66fd425...](https://github.com/kkpan11/comprehensive-rust/commit/c9f66fd425ec7f6e5e80eb5622c6e40d85ceedd3)\n#### Sunday 2023-12-31 01:13:57 by Martin Geisler\n\nFormat all Markdown files with `dprint` (#1157)\n\nThis is the result of running `dprint fmt` after removing `src/` from\nthe list of excluded directories.\n\nThis also reformats the Rust code: we might want to tweak this a bit in\nthe future since some of the changes removes the hand-formatting. Of\ncourse, this formatting can be seen as a mis-feature, so maybe this is\ngood overall.\n\nThanks to mdbook-i18n-helpers 0.2, the POT file is nearly unchanged\nafter this, meaning that all existing translations remain valid! A few\nmessages were changed because of stray whitespace characters:\n\n     msgid \"\"\n     \"Slices always borrow from another object. In this example, `a` has to remain \"\n    -\"'alive' (in scope) for at least as long as our slice. \"\n    +\"'alive' (in scope) for at least as long as our slice.\"\n     msgstr \"\"\n\nThe formatting is enforced in CI and we will have to see how annoying\nthis is in practice for the many contributors. If it becomes annoying,\nwe should look into fixing dprint/check#11 so that `dprint` can annotate\nthe lines that need fixing directly, then I think we can consider more\nstrict formatting checks.\n\nI added more customization to `rustfmt.toml`. This is to better emulate\nthe dense style used in the course:\n\n- `max_width = 85` allows lines to take up the full width available in\nour code blocks (when taking margins and the line numbers into account).\n- `wrap_comments = true` ensures that we don't show very long comments\nin the code examples. I edited some comments to shorten them and avoid\nunnecessary line breaks — please trim other unnecessarily long comments\nwhen you see them! Remember we're writing code for slides :smile:\n- `use_small_heuristics = \"Max\"` allows for things like struct literals\nand if-statements to take up the full line width configured above.\n\nThe formatting settings apply to all our Rust code right now — I think\nwe could improve this with https://github.com/dprint/dprint/issues/711\nwhich lets us add per-directory `dprint` configuration files. However,\nthe `inherit: true` setting is not yet implemented (as far as I can\ntell), so a nested configuration file will have to copy most or all of\nthe top-level file.\n\n---\n## [thegrb93/Bubberstation](https://github.com/thegrb93/Bubberstation)@[8f3d1036c8...](https://github.com/thegrb93/Bubberstation/commit/8f3d1036c8f4f7b51acc6bad8b28009a81e20ac4)\n#### Sunday 2023-12-31 03:02:52 by SkyratBot\n\n[MIRROR] Refactor icemoon wolves into basic mobs and add taming + pack behavior [MDB IGNORE] (#25126)\n\n* Refactor icemoon wolves into basic mobs and add taming + pack behavior (#79736)\n\n## About The Pull Request\n\nPorts icemoon wolves over to the basic mob framework with a bit of extra\nstuff:\n\n- Wolves call for help when attacked within a decently large radius.\nBecause you know, pack animals.\n- Wolves can now be tamed with a slab of meat\n- When tamed, wolves can be ridden like goliath mounts. Ride wolf, life\ngood. Pretend you're playing ARK and start shivering to death in thatch\nhuts for that High Roleplay experience.\n- Tamed wolves have access to a bunch of pet commands (following, point\nfetching, point attacking, play dead, etc) and will also defend their\nowners vehemently if they're attacked.\n\nYou can probably tame multiple if you wanted to.\n\n## Why It's Good For The Game\n\nWhat part about riding wolves isn't entertaining? I don't really play\n/tg/ that much so I can't argue too much about the balance implications\nthis might pose, but it's undoubtedly a stupid little gimmick and is\nlikely to be used by bored assistants and miners with too much time on\ntheir hands.\n\nEspecially robust individuals will probably find a million things to do\nwith a basic mob capable of fetching, attacking on command and generally\nbeing able to defend themselves decently well.\n\n## Changelog\n\n:cl: yooriss\nrefactor: Icemoon wolves now use the basic mob framework and should act\nmore intelligently, defending their pack.\nadd: Icemoon wolves can be tamed with slabs of meat and can be ridden as\nmounts once friendly. Being rather large dogs, they also have access to\nmost of the pet commands you'd expect, such as fetching things, and\nviolently mauling people their owners point at.\n/:cl:\n\n---------\n\nCo-authored-by: san7890 \u003cthe@ san7890.com\u003e\n\n* Refactor icemoon wolves into basic mobs and add taming + pack behavior\n\n---------\n\nCo-authored-by: Ephemeralis \u003cEphemeralis@users.noreply.github.com\u003e\nCo-authored-by: san7890 \u003cthe@ san7890.com\u003e\n\n---\n## [Omgise/Et-Futurum-Requiem](https://github.com/Omgise/Et-Futurum-Requiem)@[aef5968a71...](https://github.com/Omgise/Et-Futurum-Requiem/commit/aef5968a71be261fc3f72f2848a6c2ba5e8cab5a)\n#### Sunday 2023-12-31 03:17:54 by Roadhog360\n\nOK SMARTASS INTERPRETER JUST HAVE IT ALL\nOH THIS IS MISSING OH THAT IS MISSING WHO FUCKING CARES JUST COMPILE IT ANYWAYS AND IGNORE THE ONE GODDAMN MISSING FUNCTION UNTIL I COMMIT THE CODE\nPeople be like \"oh just use branches\" \"just commit a bit at a time\" I TRY THAT AND THIS SHIT IS WHAT FUCKING HAPPENS\nbuild failed build fauileldd sdfbsfogdiuhaeraipiz[p\nIt just leads to build failures\nSo when people tell me to use branches to confuse my code or make more \"\"\"\"\"organized\"\"\"\"\" commits I link them to this message. Yes I'm tilted\nLet's see Gradle fail this one too because it likes to be an asshole\n\n- Add soul fire gen through WorldGenSoulFire and apply it to NetherChunkProvider, so soul fire appears on soul soil when enabled\n- Due to failures with forge's custom item entity system, it has been removed and replaced with a mixin. Bugs include custom item-entities jittering when first spawned in and /give not dispensing the item into the player's inventory. It's clear the custom item entity system was NOT thoroughly tested by Forge. Old uninflammable items that exist in the world will be converted to the regular item entities automatically.\n  - A system to add/remove items via the config or mod code will be added in the future, as well as adjusting their buoyancy\n - Add a biome list helper function to Utils.java, to make it easier to create biome lists with certain blacklists\n\n---\n## [Bird-Lounge/Skyraptor-SS13](https://github.com/Bird-Lounge/Skyraptor-SS13)@[bce2a4a224...](https://github.com/Bird-Lounge/Skyraptor-SS13/commit/bce2a4a224b65f8093999d598f1b80f59ba3d03d)\n#### Sunday 2023-12-31 03:54:27 by jimmyl\n\n69 new vox phrases (#80577)\n\n# attempt 2 of #80569 (no rizz, gyatt, or mothblocks this time)\n# created via https://github.com/AlexMorgan3817/ss13-vox\n\n## About The Pull Request\n\n69 or so roughly new phrases\nwords of note: felinid, jolly, christmas, lightbulb, present, presents,\nlizard, lizardperson, never, thanks, while, was, okay, had, her, some\nnumbers, ever\nwordlist used (duplicates inside:)\n\n[common.txt](https://github.com/tgstation/tgstation/files/13765603/common.txt)\n\n\n\nhttps://github.com/tgstation/tgstation/assets/70376633/adaa1607-8c18-4fed-a6e8-1b7ac0db3303\n\n\n\n\n\nhttps://github.com/tgstation/tgstation/assets/70376633/ffbd1b1d-6b2c-4921-ae77-45ea4056348f\n\n\n\n## Why It's Good For The Game\n\nvox shenanigans\n\n## technobabble\nanyway so getting the shitty project running took me 80 hours or so over\nmany attempts but\nthe linked fork has less of that poetry python bullshit\njust dont install python3.6 its pointless, install python3\nanyway so run sudo python3 setup.py\nfollow instructions till it actually works\ngenerate.sh will not work well so just run \"sudo python3 create.py\"\ndirectly\nalso you could just skip the sudo part by just running sudo -i before\nall that\ncreate.py will create both voices for vox_masc and vox_fem for some\nreason but you could avoid that by removing masc or whatever the fuck\nthe sex is called from create.py to save some time by doing fem solely\nalso you should set codebase to tg in codebase.yaml and replace\ntglist.jinja2 in templates with this\n```\nGLOBAL_LIST_INIT(vox_sounds, list(\n  {%- for sex, phrases in SEXES.items() %}\n    {%- for phrase in phrases %}\n\"{{- phrase.id -}}\" = 'sound/vox_fem/{{- phrase.id -}}.ogg',\n    {%- endfor %}\n  {%- endfor %}\n))\n```\nwhich should create roughly correct code for tg but you still need to do\nsome text work\nlike removing duplicates n stuff and moving sounds from dist/sounds to\nthe actual proper sound folder\n\nanyway thank you for coming to my rant\n\n## Changelog\n:cl:\nadd: 69(roughly?) new vox phrases\n/:cl:\n\n---\n## [AnonWasTaken/sixflags](https://github.com/AnonWasTaken/sixflags)@[34170c1dec...](https://github.com/AnonWasTaken/sixflags/commit/34170c1dece6c36bf6804df8338470f998a44f9e)\n#### Sunday 2023-12-31 04:21:28 by AnonWasTaken\n\nAll Star\n\nSomebody once told me\nThe world is gonna roll me\nI ain't the sharpest tool in the shed\nShe was looking kind of dumb\nWith her finger and her thumb\nIn the shape of an L on her forehead\n\nWell, the years start coming\nAnd they don't stop coming\nFed to the rules and I hit the ground running\nDidn't make sense not to live for fun\nYour brain gets smart\nBut your head gets dumb\n\nSo much to do, so much to see\nSo what's wrong with taking the back streets?\nYou'll never know if you don't go\nYou'll never shine if you don't glow\n\nHey now, you're an all star\nGet your game on, go play\nHey now, you're a rock star\nGet the show on, get paid\nAnd all that glitters is gold\nOnly shooting stars break the mold\n\nIt's a cool place and they say it gets colder\nYou're bundled up now\nBut wait till you get older\nBut the meteor men beg to differ\nJudging by the hole in the satellite picture\n\nThe ice we skate is getting pretty thin\nThe water is getting warm\nSo you might as well swim\nMy world's on fire, how about yours?\nThat's the way I like it\nAnd I never get bored\n\nHey now, you're an all star\nGet your game on, go play\nHey now, you're a rock star\nGet the show on, get paid\nAnd all that glitters is gold\nOnly shooting stars break the mold\n\nHey now, you're an all star\nGet your game on, go play\nHey now, you're a rock star\nGet the show on, get paid\nAnd all that glitters is gold\nOnly shooting stars\n\nSomebody once asked\nCould I spare some change for gas?\nI need to get myself away from this place\nI said: Yep, what a concept\nI could use a little fuel myself\nAnd we could all use a little change\n\nWell the years start coming\nAnd they don't stop coming\nFed to the rules and I hit the ground running\nDidn't make sense not to live for fun\nYour brain gets smart\nBut your head gets dumb\n\nSo much to do, so much to see\nSo what's wrong with taking the back streets\nYou'll never know if you don't go (go!)\nYou'll never shine if you don't glow\n\nHey now, you're an all star\nGet your game on, go play\nHey now, you're a rock star\nGet the show on, get paid\n\nAnd all that glitters is gold\nOnly shooting stars break the mold\nAnd all that glitters is gold\nOnly shooting stars break the mold\n\n---\n## [bunnymatic/bryantstreetstudios](https://github.com/bunnymatic/bryantstreetstudios)@[cc61dc4fc9...](https://github.com/bunnymatic/bryantstreetstudios/commit/cc61dc4fc9631aef16e116130499478ef5ad8b41)\n#### Sunday 2023-12-31 04:57:17 by Jon Rogers\n\nAdd selenium so we can do full JS browser testing\n\nproblem\n--------\n\nRunning full e2e tests now that we're doing more react is important.  We\nneed our browser to have JS support.  But the current Capybara setup\njust uses the `rack_test` driver which does not have JS support.\n\nsolution\n--------\n\nThis PR introduces selenium and webdrivers gems and sets up capybara so\nthat we can tag certain tests with `type: :e2e` and they will run\nselenium and a browser.  It also includes support for headed or headless\nchrome for testing.  By default it's headed for development so we'll see\nthe tests run.  If this turns out to be too annoying we can switch it\nlater.\n\nchanges\n------\n\n* add e2e spec around editable content for events/cms entries\n* split css and js entries\n* move from `thin` to `puma`\n* add tests controller and sample data create/delete endpoints\n* revamp admin js and application js so that they were correct for our\n  test runner\n* reinstate content block edits and fix that so it works.\n\nnotes\n------\n\nI spent a lot of time trying to get the database transaction issue\nfigured out with no luck.  The basic issue is that in the rspec example\nor it block, if you use factory bot to create database entries, that\ndata is in a transaction which is separate from the db connection that\nthe app is using which means the application does *not* see that\ncreation.  Rspec-Rails and some other rails stuff has tooling to get\naround this but I was unable to figure out how to leverage that here or\nmimic it.\n\nBecause of this, I added a tests_controllers.rb file and a\n`tests/sample_data` endpoint that *only* works if you're in test mode\n(for safety).\n\nWhen we write e2e tests we should populate this sample data such that it\nis a valid start up scenario for *all* e2e tests.  We can think of it as\na set of seed data for a test instance of the application.  Currently,\nwe're going to start with 1 active event and 2 cms entries for the two\npages that show custom cms content.  I could imagine a default\n\"exclusion\" item... in the future.\n\nIt's not great but it's better than not having full feature e2e tests.\n\nExercise for the author and reader\n-------------------\n\nI don't understand `@use` vs `@import` in SCSS and I feel like I should.\n\n---\n## [maxwaldman8/Deceptive-Perspectives](https://github.com/maxwaldman8/Deceptive-Perspectives)@[aa5801cb95...](https://github.com/maxwaldman8/Deceptive-Perspectives/commit/aa5801cb95e480f9410ba9ae6abb8bc652908ebf)\n#### Sunday 2023-12-31 05:20:39 by maxwaldman8\n\nA lot of changes\n\nOrganization, implemented the Y, and improved the movement controller.\n\nBUGS/MISSING FEATURES SO FAR THAT I HAVE FOUND: Keyhole animation breaks when you press play (maybe we can make it so you can't press play when the keyhole animation is running), movement controller is still pretty bad, hole item on canvas goes out of frame, no Y item texture (using brick as placeholder), no play button without Y texture, no Y texture to go on top of that texture (using brick as placeholder) (note: I have a solution for the no y on door texture), and maybe we could make the parts of the play button falling a little more random with animation which also would make the hole not go offscreen (and they also fall differently if you pause while they are falling).\n\nAlso Adrian had an idea of \"skeletons in the closet\" for like a bedroom or something with a closet but one of the bones of the skeleton is a \"skeleton key\" which opens a door (but it gets used up). I also thought that maybe we could do hint messages appearing if you spend a while on a puzzle (that can be turned on and are off by default or maybe the opposite of that). For example:\n\nA while on pause puzzle: \"Think outside of the box\"\nEven longer on pause puzzle (it will have already told you the controls earlier: \"Remember: Esc to pause\"\nEven longer on pause puzzle: \"Esc to go outside of the box\"\nWay too long on pause puzzle (for other ones would also just give the solution): \"Go into the pause menu and try to move around after a second to complete the puzzle\"\n\nI think either that or just a hint section of the menu would be good.\n\nAlso Adrian played through it and said that the Y puzzle was really hard because of all of the different symbols in the logo so we should definitely add hints for that.\n\nSorry this is so long but one last thing I think there could be like a piece of paper somewhere with a code that you dial into the phone and press the # then the screen turns on and it shows an easter egg.\n\n---\n## [beartype/beartype](https://github.com/beartype/beartype)@[6a191af44a...](https://github.com/beartype/beartype/commit/6a191af44aa549878afd14fccf994e9c16d3fdc8)\n#### Sunday 2023-12-31 06:15:03 by leycec\n\nPEP 695 `type` aliases x 9.\n\nThis commit is the next in a commit chain adding support for PEP\n695-compliant type aliases (i.e., type hints instantiated by statements\nof the form ``type {alias_name} = {alias_value}``, available under\nPython ≥ 3.12), en-route to resolving feature request #297 kindly\nsubmitted by the magical rainbow GitHub unicorn @EtaoinWu (Yue Wu).\nSpecifically, this commit continues brutally applying a hardcore AST\ntransformation just to force PEP 695 to comply with our will. Will you\njust stop sucking it already, PEP 695? PEP 695 as if written by Terry\nPratchett:\n\n\u003e \"I didn do nuffin.\"\n\n(*Bland blemish on a Flemish flamingo!*)\n\n---\n## [ReturnToZender/ReturnsBubber](https://github.com/ReturnToZender/ReturnsBubber)@[25be46a37d...](https://github.com/ReturnToZender/ReturnsBubber/commit/25be46a37dfd73308619ad393479bb06cc233ced)\n#### Sunday 2023-12-31 06:20:28 by aKromatopzia\n\nfixes for teshvali cybernetics (#900)\n\n\u003c!-- Write **BELOW** The Headers and **ABOVE** The comments else it may\nnot be viewable. --\u003e\n\u003c!-- You can view Contributing.MD for a detailed description of the pull\nrequest process. --\u003e\n\n# OOPS\nSo in the previous and now closed PR\n(https://github.com/Bubberstation/Bubberstation/pull/871#issue-2049760879)\nI forgot to commit changes to tgstation.dme. So while the files are now\nin the code... they're not enabled. Oops.\n\n## About The Pull Request\n\n\u003c!-- Describe The Pull Request. Please be sure every change is\ndocumented or this can delay review and even discourage maintainers from\nmerging your PR! --\u003e\n\nI didn't notice some more minor changes in the testmerge. This rectifies\nsome of that - new vars, and such. After I fix the new bugs inherent to\nthis... Which have now been fixed. ~~Although the current version should\nstill be functional, teshari cybernetic limbs take approximately 10%\nmore damage than they should due to the missing var. I think. The var is\nweird, and honestly seems to be a redundancy? better safe than sorry.~~\nThis PR actually enables the previous PR and fixes some things which\nwould have caused minor statistical inconsistencies on the scale of\n+-1-5 damage taken.\n### Advanced Raptor limbs\nOh, also advanced cybernetic limbs were implemented since the downstream\nmade them obtainable. They're a bit brighter than the regular limbs.\n\n![Screenshot_57](https://github.com/Bubberstation/Bubberstation/assets/94389683/9421bc98-1944-4bfe-b707-817123ab8ce1)\n![Screenshot_56](https://github.com/Bubberstation/Bubberstation/assets/94389683/870b334a-ce7f-4708-ad97-e0a9d1972b42)\n![Screenshot_58](https://github.com/Bubberstation/Bubberstation/assets/94389683/b681ebea-2272-4f38-87ea-adcd75a6aed7)\n\n\n\n\u003c!-- Please make sure to actually test your PRs. If you have not tested\nyour PR mention it. --\u003e\n\n## Changelog\n\n\u003c!-- If your PR modifies aspects of the game that can be concretely\nobserved by players or admins you should add a changelog. If your change\ndoes NOT meet this description, remove this section. Be sure to properly\nmark your PRs to prevent unnecessary GBP loss. You can read up on GBP\nand it's effects on PRs in the tgstation guides for contributors. Please\nnote that maintainers freely reserve the right to remove and add tags\nshould they deem it appropriate. You can attempt to finagle the system\nall you want, but it's best to shoot for clear communication right off\nthe bat. --\u003e\n\n:cl:\nfix: ACTUALLY enables teshvali cybernetics\nadd: advanced raptoral cybernetics\nfix: some vars that were added in the downstream are now correctly\nimplemented.\n/:cl:\n\n\u003c!-- Both :cl:'s are required for the changelog to work! You can put\nyour name to the right of the first :cl: if you want to overwrite your\nGitHub username as author ingame. --\u003e\n\u003c!-- You can use multiple of the same prefix (they're only used for the\nicon ingame) and delete the unneeded ones. Despite some of the tags,\nchangelogs should generally represent how a player might be affected by\nthe changes rather than a summary of the PR's contents. --\u003e\n\n\u003c!-- By opening a pull request. You have read and understood the\nrepository rules located on the main README.md on this project. --\u003e\n\n---------\n\nCo-authored-by: Waterpig \u003c49160555+Majkl-J@users.noreply.github.com\u003e\nCo-authored-by: projectkepler-RU \u003c99981766+projectkepler-ru@users.noreply.github.com\u003e\n\n---\n## [user-why-red/san_kernel_xiaomi_sdm660_419](https://github.com/user-why-red/san_kernel_xiaomi_sdm660_419)@[cfbef24cde...](https://github.com/user-why-red/san_kernel_xiaomi_sdm660_419/commit/cfbef24cde597a129006e19e74792837fac4f387)\n#### Sunday 2023-12-31 06:24:57 by Peter Zijlstra\n\nUPSTREAM: sched/core: Fix ttwu() race\n\nPaul reported rcutorture occasionally hitting a NULL deref:\n\n  sched_ttwu_pending()\n    ttwu_do_wakeup()\n      check_preempt_curr() := check_preempt_wakeup()\n        find_matching_se()\n          is_same_group()\n            if (se-\u003ecfs_rq == pse-\u003ecfs_rq) \u003c-- *BOOM*\n\nDebugging showed that this only appears to happen when we take the new\ncode-path from commit:\n\n  2ebb17717550 (\"sched/core: Offload wakee task activation if it the wakee is descheduling\")\n\nand only when @cpu == smp_processor_id(). Something which should not\nbe possible, because p-\u003eon_cpu can only be true for remote tasks.\nSimilarly, without the new code-path from commit:\n\n  c6e7bd7afaeb (\"sched/core: Optimize ttwu() spinning on p-\u003eon_cpu\")\n\nthis would've unconditionally hit:\n\n  smp_cond_load_acquire(\u0026p-\u003eon_cpu, !VAL);\n\nand if: 'cpu == smp_processor_id() \u0026\u0026 p-\u003eon_cpu' is possible, this\nwould result in an instant live-lock (with IRQs disabled), something\nthat hasn't been reported.\n\nThe NULL deref can be explained however if the task_cpu(p) load at the\nbeginning of try_to_wake_up() returns an old value, and this old value\nhappens to be smp_processor_id(). Further assume that the p-\u003eon_cpu\nload accurately returns 1, it really is still running, just not here.\n\nThen, when we enqueue the task locally, we can crash in exactly the\nobserved manner because p-\u003ese.cfs_rq != rq-\u003ecfs_rq, because p's cfs_rq\nis from the wrong CPU, therefore we'll iterate into the non-existant\nparents and NULL deref.\n\nThe closest semi-plausible scenario I've managed to contrive is\nsomewhat elaborate (then again, actual reproduction takes many CPU\nhours of rcutorture, so it can't be anything obvious):\n\n\t\t\t\t\tX-\u003ecpu = 1\n\t\t\t\t\trq(1)-\u003ecurr = X\n\n\tCPU0\t\t\t\tCPU1\t\t\t\tCPU2\n\n\t\t\t\t\t// switch away from X\n\t\t\t\t\tLOCK rq(1)-\u003elock\n\t\t\t\t\tsmp_mb__after_spinlock\n\t\t\t\t\tdequeue_task(X)\n\t\t\t\t\t  X-\u003eon_rq = 9\n\t\t\t\t\tswitch_to(Z)\n\t\t\t\t\t  X-\u003eon_cpu = 0\n\t\t\t\t\tUNLOCK rq(1)-\u003elock\n\n\t\t\t\t\t\t\t\t\t// migrate X to cpu 0\n\t\t\t\t\t\t\t\t\tLOCK rq(1)-\u003elock\n\t\t\t\t\t\t\t\t\tdequeue_task(X)\n\t\t\t\t\t\t\t\t\tset_task_cpu(X, 0)\n\t\t\t\t\t\t\t\t\t  X-\u003ecpu = 0\n\t\t\t\t\t\t\t\t\tUNLOCK rq(1)-\u003elock\n\n\t\t\t\t\t\t\t\t\tLOCK rq(0)-\u003elock\n\t\t\t\t\t\t\t\t\tenqueue_task(X)\n\t\t\t\t\t\t\t\t\t  X-\u003eon_rq = 1\n\t\t\t\t\t\t\t\t\tUNLOCK rq(0)-\u003elock\n\n\t// switch to X\n\tLOCK rq(0)-\u003elock\n\tsmp_mb__after_spinlock\n\tswitch_to(X)\n\t  X-\u003eon_cpu = 1\n\tUNLOCK rq(0)-\u003elock\n\n\t// X goes sleep\n\tX-\u003estate = TASK_UNINTERRUPTIBLE\n\tsmp_mb();\t\t\t// wake X\n\t\t\t\t\tttwu()\n\t\t\t\t\t  LOCK X-\u003epi_lock\n\t\t\t\t\t  smp_mb__after_spinlock\n\n\t\t\t\t\t  if (p-\u003estate)\n\n\t\t\t\t\t  cpu = X-\u003ecpu; // =? 1\n\n\t\t\t\t\t  smp_rmb()\n\n\t// X calls schedule()\n\tLOCK rq(0)-\u003elock\n\tsmp_mb__after_spinlock\n\tdequeue_task(X)\n\t  X-\u003eon_rq = 0\n\n\t\t\t\t\t  if (p-\u003eon_rq)\n\n\t\t\t\t\t  smp_rmb();\n\n\t\t\t\t\t  if (p-\u003eon_cpu \u0026\u0026 ttwu_queue_wakelist(..)) [*]\n\n\t\t\t\t\t  smp_cond_load_acquire(\u0026p-\u003eon_cpu, !VAL)\n\n\t\t\t\t\t  cpu = select_task_rq(X, X-\u003ewake_cpu, ...)\n\t\t\t\t\t  if (X-\u003ecpu != cpu)\n\tswitch_to(Y)\n\t  X-\u003eon_cpu = 0\n\tUNLOCK rq(0)-\u003elock\n\nHowever I'm having trouble convincing myself that's actually possible\non x86_64 -- after all, every LOCK implies an smp_mb() there, so if ttwu\nobserves -\u003estate != RUNNING, it must also observe -\u003ecpu != 1.\n\n(Most of the previous ttwu() races were found on very large PowerPC)\n\nNevertheless, this fully explains the observed failure case.\n\nFix it by ordering the task_cpu(p) load after the p-\u003eon_cpu load,\nwhich is easy since nothing actually uses @cpu before this.\n\nFixes: c6e7bd7afaeb (\"sched/core: Optimize ttwu() spinning on p-\u003eon_cpu\")\nReported-by: Paul E. McKenney \u003cpaulmck@kernel.org\u003e\nTested-by: Paul E. McKenney \u003cpaulmck@kernel.org\u003e\nSigned-off-by: Peter Zijlstra (Intel) \u003cpeterz@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\nLink: https://lkml.kernel.org/r/20200622125649.GC576871@hirez.programming.kicks-ass.net\nChange-Id: I40e0e01946eadb1701a4d06758e434591e5a5c92\nSigned-off-by: Tashfin Shakeer Rhythm \u003ctashfinshakeerrhythm@gmail.com\u003e\nSigned-off-by: Santhosh \u003csan8754513543@gmail.com\u003e\n\n---\n## [SpessManCN/BrainTrauma-1995](https://github.com/SpessManCN/BrainTrauma-1995)@[1a2ab1b13c...](https://github.com/SpessManCN/BrainTrauma-1995/commit/1a2ab1b13c2da4eee7c39df31695926b13048063)\n#### Sunday 2023-12-31 06:49:28 by SkyratBot\n\n[MIRROR] Touches up Moffuchi's pizzeria  [MDB IGNORE] (#25246)\n\n* Touches up Moffuchi's pizzeria  (#79899)\n\n## About The Pull Request\nI've given the icebox pizzeria ruin a few small improvements:\n- Firstly, The kitchen is actually stocked with tomatoes from the get\ngo. Along with a few mothic themed ingredients for those signature\nmothic pizzas we all know and love (And hate for being such a pain to\nmake)\n- The discarded air alarm frames have been replaced with working ones\n(I'm unsure if this was intentional or not)\n- Some drinking glasses have been added to the bar\n- And finally a pacman has been placed in the backroom along with some\nplasma to power the place\n## Why It's Good For The Game\nThis place gets overlooked a lot because its completely powerless, and\ndoesn't actually give you enough from the get go to make even a basic\npizza besides the tomato seeds a lot of people are gonna miss. This\ngives the ruin just a little more life to maybe be worth trekking out\nfor. And having mothic themed ingredients in the **MOFFIC** Pizzeria\njust makes sense even if they are a bitch to make.\n\nNot sure if this counts as a balance change or a QOL so feel free to\nyell at me if I've labelled this wrong, I have been advised that this\nSHOULD be the latter at least.\n## Changelog\n:cl:\nqol: Mothuchi's pizzeria has been improved slightly! Order yourself a\nfresh mothic pizza today!\n/:cl:\n\n* Touches up Moffuchi's pizzeria\n\n---------\n\nCo-authored-by: DaydreamIQ \u003c62606051+DaydreamIQ@users.noreply.github.com\u003e\nCo-authored-by: Bloop \u003c13398309+vinylspiders@users.noreply.github.com\u003e\n\n---\n## [a3-Prjkt/kernel_xiaomi_sm8250](https://github.com/a3-Prjkt/kernel_xiaomi_sm8250)@[eb32c22f37...](https://github.com/a3-Prjkt/kernel_xiaomi_sm8250/commit/eb32c22f377767a83f13b09ba2c3c4919593b20c)\n#### Sunday 2023-12-31 07:34:08 by Angelo G. Del Regno\n\nMakefile.lib: Lower kernel gzip compression to fastest\n\nYou're reading this - so you're trying to understand \"JUST WHY OMG\".\nThat's already a good step.\n\nFirst of all, this is a downstream kernel - always keep that in mind!\nNow, this kernel is targeting new *very powerful* Qualcomm platforms\nlike SM8250 and the Sony Edo platform - which has a very fast UFS card.\n\nKeep in mind that the bootloader sets the CPU at a frequency that is\nslightly faster than the \"in the middle\" ones, which is anyway not\nveeeery fast - but that's good, really. I agree.\n\nSo.. check this out:   for Image.gz-dtb.....\nCOMP_LEVEL    SIZE\n9             20116171\n5      \t      20220479\n2      \t      20940223\n1      \t      21231290\n\nRemember again that we're loading from a UFS card and that\nwe are loading ~1.1MB more out of a 20MB file.\nIf you're smart enough you surely know already about RAM and CPU\noverhead of very high compression levels.\n\nIf you still disagree with what I just did, read this commit description\nanother 20 times, or more, until you understand it. :)))\n\n---\n## [checkraisefold/Foundation-19](https://github.com/checkraisefold/Foundation-19)@[f717155e32...](https://github.com/checkraisefold/Foundation-19/commit/f717155e32508fd2f2ef5e781b93f0996391fa0e)\n#### Sunday 2023-12-31 08:18:50 by cheesePizza2\n\nRemoves old control room + mapping improvements (#1407)\n\n* mapping is fun!\n\n* fuck you\n\n* there is a ghost in my computer that is reverting my changes before i can commit them\n\n* fixes\n\n* fuckyou\n\n* trigger Github actions\n\n---\n## [emiya27/Stellaris_kernel_sony_tama](https://github.com/emiya27/Stellaris_kernel_sony_tama)@[671b308a50...](https://github.com/emiya27/Stellaris_kernel_sony_tama/commit/671b308a5065975588405fe6bf52eb08aacd3636)\n#### Sunday 2023-12-31 09:21:12 by Greg Kroah-Hartman\n\nMerge 4.9.233 into android-4.9-q\n\nChanges in 4.9.233\n\txfs: catch inode allocation state mismatch corruption\n\txfs: validate cached inodes are free when allocated\n\txfs: don't call xfs_da_shrink_inode with NULL bp\n\tnet: phy: mdio-bcm-unimac: fix potential NULL dereference in unimac_mdio_probe()\n\tcrypto: ccp - Release all allocated memory if sha type is invalid\n\tmedia: rc: prevent memory leak in cx23888_ir_probe\n\tath9k_htc: release allocated buffer if timed out\n\tath9k: release allocated buffer if timed out\n\tPCI/ASPM: Disable ASPM on ASMedia ASM1083/1085 PCIe-to-PCI bridge\n\tARM: 8986/1: hw_breakpoint: Don't invoke overflow handler on uaccess watchpoints\n\tdrm/amdgpu: Prevent kernel-infoleak in amdgpu_info_ioctl()\n\tdrm: hold gem reference until object is no longer accessed\n\tf2fs: check memory boundary by insane namelen\n\tf2fs: check if file namelen exceeds max value\n\t9p/trans_fd: abort p9_read_work if req status changed\n\t9p/trans_fd: Fix concurrency del of req_list in p9_fd_cancelled/p9_read_work\n\tx86/build/lto: Fix truncated .bss with -fdata-sections\n\tx86, vmlinux.lds: Page-align end of ..page_aligned sections\n\tfbdev: Detect integer underflow at \"struct fbcon_ops\"-\u003eclear_margins.\n\trds: Prevent kernel-infoleak in rds_notify_queue_get()\n\txfs: fix missed wakeup on l_flush_wait\n\tuapi: includes linux/types.h before exporting files\n\tinstall several missing uapi headers\n\tnet/x25: Fix x25_neigh refcnt leak when x25 disconnect\n\tnet/x25: Fix null-ptr-deref in x25_disconnect\n\tsh: Fix validation of system call number\n\tnet: lan78xx: add missing endpoint sanity check\n\tnet: lan78xx: fix transfer-buffer memory leak\n\tmlx4: disable device on shutdown\n\tmlxsw: core: Increase scope of RCU read-side critical section\n\tmlxsw: core: Free EMAD transactions using kfree_rcu()\n\tibmvnic: Fix IRQ mapping disposal in error path\n\tmac80211: mesh: Free ie data when leaving mesh\n\tmac80211: mesh: Free pending skb when destroying a mpath\n\tarm64: csum: Fix handling of bad packets\n\tusb: hso: Fix debug compile warning on sparc32\n\tqed: Disable \"MFW indication via attention\" SPAM every 5 minutes\n\tnfc: s3fwrn5: add missing release on skb in s3fwrn5_recv_frame\n\tparisc: add support for cmpxchg on u8 pointers\n\tnet: ethernet: ravb: exit if re-initialization fails in tx timeout\n\tRevert \"i2c: cadence: Fix the hold bit setting\"\n\txen-netfront: fix potential deadlock in xennet_remove()\n\tKVM: LAPIC: Prevent setting the tscdeadline timer if the lapic is hw disabled\n\tx86/i8259: Use printk_deferred() to prevent deadlock\n\trandom32: update the net random state on interrupt and activity\n\tARM: percpu.h: fix build error\n\trandom: fix circular include dependency on arm64 after addition of percpu.h\n\trandom32: remove net_rand_state from the latent entropy gcc plugin\n\trandom32: move the pseudo-random 32-bit definitions to prandom.h\n\text4: fix direct I/O read error\n\tUSB: serial: qcserial: add EM7305 QDL product ID\n\tnet/mlx5e: Don't support phys switch id if not in switchdev mode\n\tALSA: seq: oss: Serialize ioctls\n\tBluetooth: Fix slab-out-of-bounds read in hci_extended_inquiry_result_evt()\n\tBluetooth: Prevent out-of-bounds read in hci_inquiry_result_evt()\n\tBluetooth: Prevent out-of-bounds read in hci_inquiry_result_with_rssi_evt()\n\tomapfb: dss: Fix max fclk divider for omap36xx\n\tvgacon: Fix for missing check in scrollback handling\n\tmtd: properly check all write ioctls for permissions\n\tleds: wm831x-status: fix use-after-free on unbind\n\tleds: da903x: fix use-after-free on unbind\n\tleds: lm3533: fix use-after-free on unbind\n\tleds: 88pm860x: fix use-after-free on unbind\n\tnet/9p: validate fds in p9_fd_open\n\tdrm/nouveau/fbcon: fix module unload when fbcon init has failed for some reason\n\tcfg80211: check vendor command doit pointer before use\n\tigb: reinit_locked() should be called with rtnl_lock\n\tatm: fix atm_dev refcnt leaks in atmtcp_remove_persistent\n\ttools lib traceevent: Fix memory leak in process_dynamic_array_len\n\txattr: break delegations in {set,remove}xattr\n\tbinder: Prevent context manager from incrementing ref 0\n\tipv4: Silence suspicious RCU usage warning\n\tipv6: fix memory leaks on IPV6_ADDRFORM path\n\tvxlan: Ensure FDB dump is performed under RCU\n\tnet: lan78xx: replace bogus endpoint lookup\n\tRevert \"vxlan: fix tos value before xmit\"\n\tusb: hso: check for return value in hso_serial_common_create()\n\tSmack: fix use-after-free in smk_write_relabel_self()\n\ttracepoint: Mark __tracepoint_string's __used\n\tgpio: fix oops resulting from calling of_get_named_gpio(NULL, ...)\n\tcgroup: add missing skcd-\u003eno_refcnt check in cgroup_sk_clone()\n\tEDAC: Fix reference count leaks\n\tarm64: dts: qcom: msm8916: Replace invalid bias-pull-none property\n\tarm64: dts: exynos: Fix silent hang after boot on Espresso\n\tm68k: mac: Don't send IOP message until channel is idle\n\tm68k: mac: Fix IOP status/control register writes\n\tplatform/x86: intel-hid: Fix return value check in check_acpi_dev()\n\tplatform/x86: intel-vbtn: Fix return value check in check_acpi_dev()\n\tARM: at91: pm: add missing put_device() call in at91_pm_sram_init()\n\tARM: socfpga: PM: add missing put_device() call in socfpga_setup_ocram_self_refresh()\n\tdrm/tilcdc: fix leak \u0026 null ref in panel_connector_get_modes\n\tBluetooth: add a mutex lock to avoid UAF in do_enale_set\n\tfs/btrfs: Add cond_resched() for try_release_extent_mapping() stalls\n\tdrm/radeon: Fix reference count leaks caused by pm_runtime_get_sync\n\tvideo: fbdev: neofb: fix memory leak in neo_scan_monitor()\n\tmd-cluster: fix wild pointer of unlock_all_bitmaps()\n\tdrm/nouveau: fix multiple instances of reference count leaks\n\tdrm/debugfs: fix plain echo to connector \"force\" attribute\n\tmm/mmap.c: Add cond_resched() for exit_mmap() CPU stalls\n\tbrcmfmac: To fix Bss Info flag definition Bug\n\tiwlegacy: Check the return value of pcie_capability_read_*()\n\tusb: gadget: net2280: fix memory leak on probe error handling paths\n\tbdc: Fix bug causing crash after multiple disconnects\n\tdyndbg: fix a BUG_ON in ddebug_describe_flags\n\tbcache: fix super block seq numbers comparision in register_cache_set()\n\tACPICA: Do not increment operation_region reference counts for field units\n\tagp/intel: Fix a memory leak on module initialisation failure\n\tvideo: fbdev: sm712fb: fix an issue about iounmap for a wrong address\n\tconsole: newport_con: fix an issue about leak related system resources\n\tvideo: pxafb: Fix the function used to balance a 'dma_alloc_coherent()' call\n\tiio: improve IIO_CONCENTRATION channel type description\n\tleds: lm355x: avoid enum conversion warning\n\tmedia: omap3isp: Add missed v4l2_ctrl_handler_free() for preview_init_entities()\n\tscsi: cumana_2: Fix different dev_id between request_irq() and free_irq()\n\tdrm/mipi: use dcs write for mipi_dsi_dcs_set_tear_scanline\n\tcxl: Fix kobject memleak\n\tdrm/radeon: fix array out-of-bounds read and write issues\n\tscsi: powertec: Fix different dev_id between request_irq() and free_irq()\n\tscsi: eesox: Fix different dev_id between request_irq() and free_irq()\n\tmedia: firewire: Using uninitialized values in node_probe()\n\tmedia: exynos4-is: Add missed check for pinctrl_lookup_state()\n\txfs: fix reflink quota reservation accounting error\n\tPCI: Fix pci_cfg_wait queue locking problem\n\tleds: core: Flush scheduled work for system suspend\n\tdrm: panel: simple: Fix bpc for LG LB070WV8 panel\n\tscsi: scsi_debug: Add check for sdebug_max_queue during module init\n\tmwifiex: Prevent memory corruption handling keys\n\tpowerpc/vdso: Fix vdso cpu truncation\n\tstaging: rtl8192u: fix a dubious looking mask before a shift\n\tPCI/ASPM: Add missing newline in sysfs 'policy'\n\tdrm/imx: tve: fix regulator_disable error path\n\tUSB: serial: iuu_phoenix: fix led-activity helpers\n\tusb: dwc2: Fix error path in gadget registration\n\tscsi: mesh: Fix panic after host or bus reset\n\tSmack: fix another vsscanf out of bounds\n\tSmack: prevent underflow in smk_set_cipso()\n\tpower: supply: check if calc_soc succeeded in pm860x_init_battery\n\tselftests/powerpc: Fix CPU affinity for child process\n\tselftests/powerpc: Fix online CPU selection\n\ts390/qeth: don't process empty bridge port events\n\twl1251: fix always return 0 error\n\tnet: spider_net: Fix the size used in a 'dma_free_coherent()' call\n\tfsl/fman: use 32-bit unsigned integer\n\tfsl/fman: fix dereference null return value\n\tfsl/fman: fix unreachable code\n\tfsl/fman: check dereferencing null pointer\n\tfsl/fman: fix eth hash table allocation\n\tdlm: Fix kobject memleak\n\tpinctrl-single: fix pcs_parse_pinconf() return value\n\tdrivers/net/wan/lapbether: Added needed_headroom and a skb-\u003elen check\n\tnet/nfc/rawsock.c: add CAP_NET_RAW check.\n\tnet: Set fput_needed iff FDPUT_FPUT is set\n\tUSB: serial: cp210x: re-enable auto-RTS on open\n\tUSB: serial: cp210x: enable usb generic throttle/unthrottle\n\tALSA: usb-audio: Creative USB X-Fi Pro SB1095 volume knob support\n\tALSA: usb-audio: fix overeager device match for MacroSilicon MS2109\n\tALSA: usb-audio: add quirk for Pioneer DDJ-RB\n\tcrypto: qat - fix double free in qat_uclo_create_batch_init_list\n\tcrypto: ccp - Fix use of merged scatterlists\n\tfs/minix: check return value of sb_getblk()\n\tfs/minix: don't allow getting deleted inodes\n\tfs/minix: reject too-large maximum file size\n\tALSA: usb-audio: work around streaming quirk for MacroSilicon MS2109\n\t9p: Fix memory leak in v9fs_mount\n\tparisc: mask out enable and reserved bits from sba imask\n\tARM: 8992/1: Fix unwind_frame for clang-built kernels\n\txen/balloon: fix accounting in alloc_xenballooned_pages error path\n\txen/balloon: make the balloon wait interruptible\n\tsmb3: warn on confusing error scenario with sec=krb5\n\tPCI: hotplug: ACPI: Fix context refcounting in acpiphp_grab_context()\n\tbtrfs: don't allocate anonymous block device for user invisible roots\n\tbtrfs: only search for left_info if there is no right_info in try_merge_free_space\n\tbtrfs: fix memory leaks after failure to lookup checksums during inode logging\n\tiio: dac: ad5592r: fix unbalanced mutex unlocks in ad5592r_read_raw()\n\txtensa: fix xtensa_pmu_setup prototype\n\tpowerpc: Fix circular dependency between percpu.h and mmu.h\n\tnet: ethernet: stmmac: Disable hardware multicast filter\n\tnet: stmmac: dwmac1000: provide multicast filter fallback\n\tnet/compat: Add missing sock updates for SCM_RIGHTS\n\tmd/raid5: Fix Force reconstruct-write io stuck in degraded raid5\n\tbcache: allocate meta data pages as compound pages\n\tmac80211: fix misplaced while instead of if\n\tMIPS: CPU#0 is not hotpluggable\n\text2: fix missing percpu_counter_inc\n\tocfs2: change slot number type s16 to u16\n\tftrace: Setup correct FTRACE_FL_REGS flags for module\n\tkprobes: Fix NULL pointer dereference at kprobe_ftrace_handler\n\twatchdog: f71808e_wdt: indicate WDIOF_CARDRESET support in watchdog_info.options\n\twatchdog: f71808e_wdt: remove use of wrong watchdog_info option\n\twatchdog: f71808e_wdt: clear watchdog timeout occurred flag\n\tpseries: Fix 64 bit logical memory block panic\n\tmfd: arizona: Ensure 32k clock is put on driver unbind and error\n\tUSB: serial: ftdi_sio: make process-packet buffer unsigned\n\tUSB: serial: ftdi_sio: clean up receive processing\n\tgpu: ipu-v3: image-convert: Combine rotate/no-rotate irq handlers\n\tiommu/omap: Check for failure of a call to omap_iommu_dump_ctx\n\tiommu/vt-d: Enforce PASID devTLB field mask\n\ti2c: rcar: slave: only send STOP event when we have been addressed\n\tclk: clk-atlas6: fix return value check in atlas6_clk_init()\n\tpwm: bcm-iproc: handle clk_get_rate() return\n\tInput: sentelic - fix error return when fsp_reg_write fails\n\tdrm/vmwgfx: Fix two list_for_each loop exit tests\n\tnet: qcom/emac: add missed clk_disable_unprepare in error path of emac_clks_phase1_init\n\tnfs: Fix getxattr kernel panic and memory overflow\n\tfs/ufs: avoid potential u32 multiplication overflow\n\tmfd: dln2: Run event handler loop under spinlock\n\tALSA: echoaudio: Fix potential Oops in snd_echo_resume()\n\tsh: landisk: Add missing initialization of sh_io_port_base\n\tkhugepaged: retract_page_tables() remember to test exit\n\tmm: Avoid calling build_all_zonelists_init under hotplug context\n\tLinux 4.9.233\n\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@google.com\u003e\nChange-Id: Ied62cb0768f5bd8e989d75e7c2ccf6f1e6f2efd4\n\n---\n## [Maybe-Anton/Shiptest](https://github.com/Maybe-Anton/Shiptest)@[d1339da7b3...](https://github.com/Maybe-Anton/Shiptest/commit/d1339da7b3fe7a9303cbdc93e2d836ec82460a26)\n#### Sunday 2023-12-31 10:24:58 by zevo\n\nNerfs legion core implanting to not be an aheal (#2590)\n\n\u003c!-- Write **BELOW** The Headers and **ABOVE** The comments else it may\nnot be viewable. --\u003e\n\u003c!-- You can view Contributing.MD for a detailed description of the pull\nrequest process. --\u003e\n\n## About The Pull Request\nThe legion core implant now gives you a potent heal of all four damage\ntypes (-100 brute -100 burn -50 tox -50 oxy) instead of a literal aheal.\nIt now also deals 10 clone damage as a drawback to organics/FBPS (IPCS\nexcluded because they cant use clone damage medicine).\nDue to how adjustBruteLoss and adjustBurnLoss work, the implanted core\nno longer heals mechanical bodyparts, making it mostly useless for IPCs\nand FBPs only healing oxygen and toxin damage.\n\u003c!-- Describe The Pull Request. Please be sure every change is\ndocumented or this can delay review and even discourage maintainers from\nmerging your PR! --\u003e\n\n## Why It's Good For The Game\n1. Player accessible aheals are not good and encourage exploiting to\ncure ailments or gain an advantage.\n2. Synthetics could use self-surgery to implant legion cores on the go\nfor a safety net heal. While not necessarily bad, it was insanely\npowerful as an aheal and negated the requirement of stabilizing the core\nand getting another person to put it in you.\n3. It had literally no drawbacks. A strong consumable healing ability is\ncool, but it should come with a cost.\n\n\u003c!-- Please add a short description of why you think these changes would\nbenefit the game. If you can't justify it in words, it might not be\nworth adding. --\u003e\n\n## Changelog\n\n:cl:\nfix: legion core implanting no longer aheals you on use\nadd: legion core implant now just does a potent organic heal with minor\nclone damage when used\n/:cl:\n\n\u003c!-- Both :cl:'s are required for the changelog to work! You can put\nyour name to the right of the first :cl: if you want to overwrite your\nGitHub username as author ingame. --\u003e\n\u003c!-- You can use multiple of the same prefix (they're only used for the\nicon ingame) and delete the unneeded ones. Despite some of the tags,\nchangelogs should generally represent how a player might be affected by\nthe changes rather than a summary of the PR's contents. --\u003e\n\n---------\n\nSigned-off-by: zevo \u003c95449138+Zevotech@users.noreply.github.com\u003e\nCo-authored-by: Mark Suckerberg \u003cmark@suckerberg.gay\u003e\n\n---\n## [depoz0/G2station](https://github.com/depoz0/G2station)@[33e10634ba...](https://github.com/depoz0/G2station/commit/33e10634ba89c28c1ca3518068e916ec0a10b33e)\n#### Sunday 2023-12-31 10:38:57 by Iamgoofball\n\nFixes Holy Water performing water metabolization twice, giving more blood and making you less drunk (#80440)\n\n## About The Pull Request\n\n~~Fixes Holy Water taking double the time it's supposed to take to\ndeconvert, and fixes it metabolizing out at twice the normal speed.~~\n\nFixes Holy Water performing water metabolization twice, giving more\nblood and making you less drunk\n\n## Why It's Good For The Game\n\nlmfao ~~this is why deconversion for cult sucked~~ so bad\n\n## Changelog\n\n:cl:\nfix: Fixes Holy Water giving you more blood and making you less drunk\nthan water normally does.\n/:cl:\n\n---\n## [NetBSD/pkgsrc](https://github.com/NetBSD/pkgsrc)@[06d0f6cb6f...](https://github.com/NetBSD/pkgsrc/commit/06d0f6cb6f4ae12662875afbf52a5fc1b3be243d)\n#### Sunday 2023-12-31 10:46:42 by adam\n\nscummvm: updated to 2.8.0\n\nScummVM 2.8.0\n\nNew games\n\nThe team was quite busy working on new engines and enhancing existing ones. The list of supported games grew noticeably, and we now support these additions:\n\nAdibou 1\nClassical Cats\nThe Dark Eye\nDark Side\nEscape From Hell\nGadget: Invention Travel and Adventure\nGobliiins 5\nThe Excavation of Hob's Barrow\nKingdom: The Far Reaches\nMight and Magic Book One\nMuppet Treasure Island\nNancy Drew: The Final Scene\nNancy Drew: Message in a Haunted Mansion\nNancy Drew: Secrets Can Kill\nNancy Drew: Stay Tuned for Danger\nNancy Drew: Treasure in the Royal Tower\nPrimordia\nReah: Face the Unknown\nSchizm: Mysterious Journey\nShardlight\nStrangeland\nSyberia and Syberia II (macOS versions only)\nTechnobabylon\nThe Vampire Diaries\nWhispers of a Machine\nWrath of the Gods and four other Director titles.\n14 AGS titles by Stranga and Cloak and Dagger\nAll together, we’ve introduced 50 new games and five new engines.\n\nNew platforms\n\nWe are happy to see the RetroArch port being properly rewritten, and the port is now part of our source code. The Atari port has also been redone from scratch and now talks natively to the hardware, skipping SDL as an intermediate layer. That made many more games playable on the platform. The Atari FireBee port is still using the SDL library, though.\n\nSpeed-optimized graphics\n\nThanks to the work of one of the GSoC participants this year, Wyatt Radkiewicz (a.k.a. eklipsed), we now use CPU-specific SIMD instructions such as SSE, AVX2, and NEON for drawing graphics in the AGS engine and in some generic routines. This led to 4-14x speedup in drawing for many cases.\n\nNetworking games\n\nThis year, we merged with the Backyard Sports Online project, which made it possible to play Backyard Football, Backyard Baseball 2001 and Backyard Football 2002 over the internet with other humans. Also, the Moonbase Commander support is in active playtesting mode, though not yet ready for prime time.\n\nNotable engine enhancements\n\nThe AGS engine has been brought up to version 3.6.0.53 from upstream.\n\nFor many engines, we added support for numerous Chinese and Japanese game variants.\n\nBelieve it or not, we implemented a lot of native GUI dialogs for SCUMM games, bringing them closer to the original experience. We also rewrote the sound code for the SCUMM Humongous Entertainment games, making them flawless.\n\nWe performed a deep review of the Broken Sword 1 game engine, implementing some small, previously unnoticed things like scene transitions, in-game menu peculiarities, accurate fonts, idle animations, and more. Now, the game is absolutely faithful to the original.\n\n---\n## [MichielSaey/clickup-time-tracker](https://github.com/MichielSaey/clickup-time-tracker)@[2fcc0001c9...](https://github.com/MichielSaey/clickup-time-tracker/commit/2fcc0001c91f54eef8d2cd82302583e1cfb99437)\n#### Sunday 2023-12-31 11:04:52 by Michiel Saey\n\nThis thing is what you show people to make the write functional code...\n\nManeged to pass the start and end dates to the statistics components, but had its own pandora's box abd came with the problem that I had to call the events function twice.\n\nThinking to pass the events data to statics comp, but that would mean having to calculate the statics in the \"front\", not that there really is a front, so maybe that isn't a problem.\n\n Just want to get this over with so i never have to touch electron again.\n\n \"Why should this Electron be saved? Doesn't it seem profoundly sick? Diseased? Like PWA has to be better, purely by the virtue that this is awful.\"\n\n---\n## [FardinOhe/Event-Management](https://github.com/FardinOhe/Event-Management)@[27d078b4fc...](https://github.com/FardinOhe/Event-Management/commit/27d078b4fc91267bcc9dcae174404b5dd63a40b0)\n#### Sunday 2023-12-31 11:20:32 by FardinOhe\n\nCreate Portfolio\n\n\"Welcome to our Portfolio, a curated collection of our finest work and a testament to our dedication to creativity, innovation, and excellence. As architects of memorable experiences, we take pride in showcasing a diverse array of projects that span across industries and embody our commitment to exceeding expectations.\n\nExplore a tapestry of events, each woven with meticulous planning, thoughtful design, and flawless execution. From corporate galas that captivate audiences to intimate weddings that celebrate love in its purest form, our Portfolio is a testament to our versatility and ability to transform visions into reality.\n\nEvery entry in our Portfolio is a chapter in our story, narrating the unique challenges we've overcome, the partnerships we've forged, and the success stories we've written together with our clients. Immerse yourself in the visual and narrative journey of events that left lasting impressions, whether through immersive branding experiences, cutting-edge technology integration, or the seamless orchestration of complex logistical details.\n\nOur commitment to excellence extends beyond aesthetics; it's about crafting experiences that resonate, inspire, and endure in the memories of attendees. As you navigate through our Portfolio, envision the possibilities for your next event, knowing that our team stands ready to bring your vision to life with the same passion, precision, and creativity that defines our body of work.\n\nJoin us on this visual odyssey, where each project is more than an event—it's a testament to our unwavering pursuit of perfection and our dedication to making every moment unforgettable. Welcome to a showcase of innovation, inspiration, and the artistry that defines our approach to event management.\"\n\n---\n## [Erol509/Bubberstation](https://github.com/Erol509/Bubberstation)@[2805c86c81...](https://github.com/Erol509/Bubberstation/commit/2805c86c811fde2450a054a25c7a665b77df47e5)\n#### Sunday 2023-12-31 11:29:49 by Nerevar\n\n[THE HALF-MODULAR PRINCE] Snalance (Snail Balance) and Snissues (Snail Issues) Adjustment (#25439)\n\n* initial d\n\n* holy shit i forgot\n\n* i got so much cheese in my pocket, they thought I was a fucking calzone\n\n* opp was sneak-dissing on the 'gram, turned his city into pompeii\n\n* Just fixing some diffs (line breaks should match tg)\n\n* Fixes these edit comments\n\n---------\n\nCo-authored-by: Giz \u003c13398309+vinylspiders@users.noreply.github.com\u003e\n\n---\n## [an0rak-dev/Avatar](https://github.com/an0rak-dev/Avatar)@[d05206556c...](https://github.com/an0rak-dev/Avatar/commit/d05206556c93499eed865ca12892314ee66b1fae)\n#### Sunday 2023-12-31 11:34:34 by Sylvain Nieuwlandt\n\nAdd Readme, License and CI.\n\nIt's not because I'm working alone on this that I should work as a\nsavage. I thought it will be fun to integrate the linting steps as\nreviews from the github action bot (Yeah, I know it might not sound\nfun but it is !).\n\nGot a MetaQuest 3 for Christmas from my insanely crazy wife. Guess\nthat this project will take another slow down because I'll try to\ncreate a commercial game with it.\n\nChangelog: other\n\n---\n## [deltanedas/ss14-docs](https://github.com/deltanedas/ss14-docs)@[4feada28fb...](https://github.com/deltanedas/ss14-docs/commit/4feada28fbf0cdd543026992706dd770c4edfb35)\n#### Sunday 2023-12-31 11:44:46 by Kevin Zheng\n\nAdd atmos roadmap (#78)\n\n# Roadmap For Atmospherics\n\n## Background\n\nMost atmos players currently agree that atmos is not very fun to play,\nfor some of the following reasons:\n\n1. There is little content to play after round-start setup. Part of the\nproblem is that things like distro and TEG are \"set up and forget\".\n\n2. Atmos can't actually rectify atmos problems in a reasonable amount of\ntime. For example, if there actually is a plasma leak, scrubbers\ntypically work too slowly resulting in the plasma inevitably being lit\nbefore it can be cleaned up.\n\n3. Atmos techs don't play with the rest of the station, preferring to\nisolate themselves to produce a funny green gas that is only\nparticularly useful for shuttle bombing. Mechanics like this violate the\n[fundamental design\nprinciples](en/general-development/feature-proposals/ss14-fundamental-design-principles.md).\nWhile these mechanics shouldn't be removed per-se, more focus should be\ngiven to mechanics that increase interactions with the station, like\nmaking sure the air is breathable and well-heated.\n\n## Proposal\n\nMake atmos more fun to play by adding more challenges and processes\nsemi-inspired by real life.\n\n**An atmos tech's primary job is to keep the station livable and\nbreathable.** There are a lot of interesting real life challenges\nassociated with making this happen, not in the least of which is that in\nspace, every gas molecule wants desperately to escape into the cold of\nspace. There is also the challenge of keeping the station appropriately\ntemperature-regulated despite the cold outside and occasional plasma\nfires inside.\n\nWhere it does not conflict with fun (see below), **incorporate realistic\nprocesses and simulations**. As stated in the [fundamental design\nprinciples](en/general-development/feature-proposals/ss14-fundamental-design-principles.md),\nintuitive simulation makes for a better game. Having real-life analogs\nfor gas behaviors helps make both atmos more discoverable and intuitive\nfor new players and also caters to atmos nerds.\n\nNone of these realism additions require any sort of math to play. Only a\nbasic understanding of the following principles should be enough to\nunderstand and play:\n\n1. You should not be able to spin energy out of thin air.\n2. When given a choice, gas flows from high pressure to low pressure.\n3. When given a choice, temperature transfers from hot to cold.\n\n### An Interlude on Realism\n\nThe chief objective of a game is to be fun to play, and not to be\nrealistic. Where realism conflicts with fun, fun should be chosen every\ntime.\n\n**However,** games are most fun when players have a sense of agency\n(their actions matter in determining the final outcome of the game) and\nwhen their challenges are struggles are believable.\n\nIn order for players' challenges and struggles to be believable, the\ngame universe must obey a consistent system of rules and physical\nlimitations. It would not be fun if players have a way to *deux ex\nmachina* out of every imaginable problem (e.g. Nukies? Why don't we use\nthe magical remote control that makes all the nukies disappear? After\nall, we have *spess magic*.) We're in space, and it should be hard to\nget gases because they tend to escape into... you know... space. Not\nevery station should have a magical gas miner.\n\nBut guess what? It turns out that realism provides both a set of\ninteresting problems and a set of rules for how a universe should\nconsistently behave. So by making things more realistic, we get both\ninteresting mechanics and a set of consistent rules for free. Of course\nrealism doesn't trump fun, and if it is fun to make something that is\nunrealistic (e.g. plasma gas), then we should always pick fun.\n**However, where realism does not conflict with being fun, then we\nshould opt to be realistic because it provides a set of interesting\nproblems and consistent rules.**\n\nAfter all, why do we say that *PV=nRT*? Shouldn't we make up a different\ngas law because realism is bad?\n\n## High-Priority Proposals\n\nThese proposals should be implemented first, because they have an\noutsized impact on atmos balance as a whole.\n\n- **Phase out gas miners for all upstream maps.** It doesn't make sense\nthat all stations have free and plentiful sources of gas, otherwise you\nmight as well be on a planet. This is a game that is literally set in\nspace. It would make sense to keep a few specialty miners, e.g. for\nplasma, if a station is set on a plasma mining planet. But in general,\nall other gases should be imported via gas canisters. Miners should\nstill be kept available for any forks that choose to use them.\n\n- This solves problems (1) and (3). Maintaining a livable atmos would\ninvolve work during the round beyond setting up distro to pipe gas from\nminers. It would help increase interactions with other departments, such\nas cargo and salvage as atmos needs to order gas.\n\n- Ensuring a appropriate round-start supply of gas would make the game\nplayable without a functional cargo department.\n\n- This would discourage fighting fires or atmos problems by wholesale\nspacing a section. There is currently very little downside to spacing a\nsection to get rid of problems because of an unlimited gas supply.\n\n- There is [overwhelming consensus on mappers for\nthis](https://discord.com/channels/310555209753690112/770682801607278632/1162179968915210280).\n\n- As an interim or for very low pop-count maps, keep miners but make\nthem mine gas at low temperature that has to be heated up before use.\nThis preserves a bit of an incentive for atmos players to not space a\nsection at the first sign of trouble.\n\n- **Globally increase MaxTransferRate** for devices that are not\nflow-based, e.g. pumps.\n\n- This solves problem (2). Among other things, it would make scrubbers\nand other devices actually useful for combating atmospheric problems.\nCurrently players prefer to just space everything. Increasing this would\nprovide a feasible alternative.\n\n## Medium Priority\n\n- **Make all atmos devices flow-based.** This means driving gas flow as\na result of pressure differences created using pumps. The specific\noffenders are currently any \"pumped\" device that is not a dedicated\npump, e.g. air vents, scrubbers, filters, and mixers.\n\n- This addresses an issue about atmos intuition and accessibility.\nPlayers should not have to understand the internal workings of the pipe\nnet system (e.g. a pipe is one big node, gases move between them). In\nreal life, a fan or pump creates a pressure difference, and pressure\ndifferences drive gas flow. If you blow on one end of a straw, you can\nexpect it to come out of the other end, not get stuck in a pipe net.\n\n- This also addresses (2). Instead of having a fixed upper bound on\nvolume transfer, transfer rates would always depend on the pressure\ndifference that you create.\n\n- **Add maximum temperature and pressure limits for most devices.** It\ndoes not make sense that you can contain the surface of the sun in your\npipes. Adding limits would encourage designing processes and systems\nthat work within reasonable constraints.\n\n- Some \"sub-optimal\" setups are really unintuitive and wouldn't work in\nreal life due to temperature and pressure limits.\n\n- There are some concerns about being able to run burn chambers and the\nTEG. The screenshot below demonstrates a TEG that is capable of powering\nan entire large-sized station (256.8 kW current output, the peak output\nis quite a bit higher) with a maximum pressure excursion of 1600 kPa. It\nshows that pipes that burst at reasonable pressures are entirely\nconsistent with having burn chambers. You just need to set them up\ncorrectly.\n\n\n![image](https://user-images.githubusercontent.com/3229565/274441724-712f4ebf-7440-4d81-879e-19aa29788822.png)\n\n- This addresses problem (1), the \"set up and forget\" issue by adding\ntemperatures and pressures to monitor. It also allows the opportunity\nfor sabatoge.\n\n\n- **Make heaters and freezers thermodynamically sound.** Keeping a\nstation properly heated or cooled is actually a substantial real-life\nproblem. Why deprive atmos techs an actual challenge that keeps gameplay\ninteresting? Because of the existence of generators like the TEG,\nkeeping things thermodynamically balanced is also a great way to prevent\ninfinite power hacks.\n\n## Low Priority\n\n- **Make station air flow-based.** Currently, air vents release air when\nthe pressure is too low, and by default scrubbers only scrub waste\ngases. So if for some reason the station gets cold, there's no easy way\nto cycle the air out and heat it up. Of course, you could set all the\nscrubbers to siphon, heat your distro, and then set the air alarm to\nfill. But that would just be describing a bad way of doing what real\nlife HVAC systems have always been doing: keep the air flowing.\n\n- This addresses problem (2) by making it possible to better regulate\nstation temperature.\n\n- **Make heaters and freezers binary.** Just like your central heating\nand air conditioning circulate air through heat/cold coils, gases should\nflow across heaters and freezers in order to exchange temperature.\n\n- **Adding process-based alternatives to scrubbers and filters.** For\nexample, with gas reaction-based scrubbing processes, scrubbers with\nlimited uses, or physical processes.\n\n- This addresses problems (1) and (3) by adding more content that is\ndirectly related to the well-being of the station.\n\n- One of the most pressing challenges in the real world is \"how do you\nseparate different kinds of gas.\" Most current methods of gas extraction\nare based on chemistry (e.g. real life carbon dioxide scrubbers contain\nchemicals that react with CO2, pulling it out) or physical methods (e.g.\nfractional distillation, where you cool down air in different stages to\nget liquid nitrogen, oxygen, etc.) This creates a lot of opportunity for\nnew game play mechanics and industrial processes. This would also give\nmore opportunities to add gas-based reactions (i.e. more content).\n\n- This does not advocate for removal of scrubbers and filters, but\nrather makes it a mapper option, e.g. whether to use scrubbers at\nround-start or make atmos set up a system depending on the desired level\nof role-play.\n\n- When set up correctly, these should have much higher processing rates\nthan scrubbers. This should give an incentive to set these up, e.g. on\nlonger rounds, while still keeping scrubbers as an option.\n\n- This adds \"optimization, tinkering, and creation of intricate builds.\"\n\n- **Add gas condensation.** This would enable fractional distillation\nand permit conversion between gas and the equivalent reagent.\n\n- **Add pump efficiency curves.** Pumps have to work harder when they\ncreate a larger pressure difference. As a result, pumping from 1 atm to\n2 atm should be easier (read: faster) than pumping from 1 atm to 10 atm.\nYou could create a multi-stage pump, and indeed, that is what people in\nreal life do, at the trade-off of less throughput.\n\n- **Breaking windows at high enough tile pressure differences.** To\nhandle explosions and resulting space wind without leaning on the\nexplosino system, and to encourage people to design burn chambers with\nmore controlled burns instead of always putting their pedal to the\nmetal.\n\n- **Various QoL improvements** such as the RPD.\n\n---\n## [ParadiseSS13/Paradise](https://github.com/ParadiseSS13/Paradise)@[a069966658...](https://github.com/ParadiseSS13/Paradise/commit/a069966658a0a5b4a56dea7467a623ac658088d1)\n#### Sunday 2023-12-31 12:51:47 by Zack\n\nQol improvements for the ghost bar (#23421)\n\n* Added some garbage bins, added a vender for the ghost bar kitchen\n\n* Fixed the floor under a table\n\n* Moved the shadycig vender a bit more to the wall and removed a beaker that I placed on accident\n\n* Removed a wall behind a vender\n\n* fuck you merge masters\n\n---------\n\nCo-authored-by: S34N \u003c12197162+S34NW@users.noreply.github.com\u003e\n\n---\n## [L7NEG/Ultimate-Menu](https://github.com/L7NEG/Ultimate-Menu)@[f6455a8fa9...](https://github.com/L7NEG/Ultimate-Menu/commit/f6455a8fa9327899a831c7bbd2f39bcd29c4a740)\n#### Sunday 2023-12-31 13:21:23 by L7NEG\n\nV19 Changelogs\n\nV19 ChangeLogs:\n\nUpdated For 1.68\n\nAdded Vehicle \u003e Ultimate Vehicle Spawner Menu (With 1.68 New Vehicles) (Credits generic.goose On Discord For His Cool Ultimate Vehicle Spawner / L7NEG For Adding Save Nearest Vehicle In Saved Vehicles Menu)\n\nUpdated Remote Nightclub Safe Money Loop To 1.68 In Ultimate Money Methods Menu\n\nAdded Events Menu \u003e Yeti Hunt Menu (Credits ShinyWassabi For The Globals And Coordinates On UC)\n\nAdded 1.68 Unlocker Menu \u003e Unlock 1.68 New Vehicles (Credits ShinyWassabi For The Globals On UC)\n\nRmoved 1.68 Unlocker Menu \u003e Enable Vincent Contact Missions\n\nAdded Back 1.68 Unlocker Menu \u003e Enable Enable Deleted Vehicles\n\nAdded Back 1.68 Unlocker Menu \u003e Enable Knife And Baseball Bat Skins In GunVan\n\nFixed Spawn Vehicle In Online Players Troll Menu (Please Note That The Total Number Of Players Means The Whole Players In Your Session Its Called From Kiddion Api So Dont Worry If You See That The Total Number Of Online Players Is Diff As It Collects Those Who Are Watching The Session You Play)\n\nBugFixes And Overall Improvements\n\nUpdated Credits Section\n\nUpdated Missions Selector And Cooldown Menu\n\nAnd That's It Bros\n\nI Hope You All To Have A Great Day In Your Real Life Enjoy ❤️\n\n---\n## [rmellis/HelpUKR-master](https://github.com/rmellis/HelpUKR-master)@[dd11a6d43b...](https://github.com/rmellis/HelpUKR-master/commit/dd11a6d43b4d7269302f607da4dd7cffdee39084)\n#### Sunday 2023-12-31 14:52:56 by rmellis\n\nAdded Day 676 - Targets and Days (TL) Eng+Ukr\n\nSimply run this for as long as you can to help flood Russia in the most legal, yet effective way possible \nNew targets imported from db1000n:\nTo keep up with targets we're going to use the db1000n targets direct from their GitHub repository. \nThese updates will be daily, so if the db1000n changes, it will probably take a few hours longer for the change to make it here.\nMessage posted by the IT Army of Ukraine:\nMillion payment terminals in Russia stopped working since yesterday because we disabled Evotor, the top online cash register maker. Some sellers had up to 90% non-cash turnover, right before New Year's. It's likely causing huge losses to the aggressor's economy. This reflects in agitated customers and sellers.\nRemember, every dollar lost in their economy means less funding for the war. That's the impact of economic sanctions, and our efforts too.\n/ *** / \nПросто запускайте це стільки, скільки зможете, щоб допомогти наповнити Росію найбільш законним, але ефективним способом \nНові цілі, імпортовані з db1000n:\nМільйон платіжних терміналів по всієї рашці не працює зі вчора, бо ми поклали Евотор - найбільшого виробника онлайн-кас. Деякі продавці мали до 90% безготівкового обігу, ще і напередодні Нового Року. Це мають бути мільярдні збитки для економіки агресора тільки від цієї однієї нашої операції. Я вже не кажу про роздратованих москалів по обидва боки прилавка.\nНагадаємо, що кожен втрачений долар економіки, це втрачений цент на фінансування війни. Так працюють економічні санкції, так працюємо і ми.\n\n---\n## [LionsPhil/pixmasclock](https://github.com/LionsPhil/pixmasclock)@[2b499d3c96...](https://github.com/LionsPhil/pixmasclock/commit/2b499d3c96cf862d1d138b9bb9dede8a9815240b)\n#### Sunday 2023-12-31 14:59:09 by LionsPhil\n\nSDL 2 support (without removing SDL 1)\n\nSecond binary, which is actually partially because I plan to stick a\nmenu on this thing for HyperPixel touchscreen purposes.\n\nSlightly ugly SDLVERSION hacks, but mostly the two are compatible. The\nbig changes are contained to the separate main binary, needing to do\ndifferent graphics setup.\n\nrender() must now use the provided, not remembered, framebuffer, and\nreport if it wants to update the screen, which the main binary takes\ncare of (flip for SDL1, more complicated dance for SDL2).\n\nSome changes around palette handling. Also surface creation---SDL2 is\nmore pedantic about complaining if you hand it a pixel format bitfield\nat the same time as saying \"paletted, please\".\n\nVSCode noise.\n\nFlag which hacks are working or misbehaving weirdly under SDL2.\n\nYes, this all needs a pile of refactoring, but as always time is short.\n\n---\n## [truecharts/charts](https://github.com/truecharts/charts)@[550367183d...](https://github.com/truecharts/charts/commit/550367183d70ebeff5d6759c29db1254cebbf21c)\n#### Sunday 2023-12-31 15:00:13 by TrueCharts Bot\n\nchore(deps): update container image ghcr.io/linkwarden/linkwarden to v2.4.5@0247ad1 by renovate (#16677)\n\nThis PR contains the following updates:\n\n| Package | Update | Change |\n|---|---|---|\n|\n[ghcr.io/linkwarden/linkwarden](https://togithub.com/linkwarden/linkwarden)\n| minor | `v2.3.0` -\u003e `v2.4.5` |\n\n---\n\n\u003e [!WARNING]\n\u003e Some dependencies could not be looked up. Check the Dependency\nDashboard for more information.\n\n---\n\n### Release Notes\n\n\u003cdetails\u003e\n\u003csummary\u003elinkwarden/linkwarden (ghcr.io/linkwarden/linkwarden)\u003c/summary\u003e\n\n###\n[`v2.4.5`](https://togithub.com/linkwarden/linkwarden/releases/tag/v2.4.5)\n\n[Compare\nSource](https://togithub.com/linkwarden/linkwarden/compare/v2.4.4...v2.4.5)\n\n#### What's Changed\n\n-   small improvement + better error handling\n\n**Full Changelog**:\nhttps://github.com/linkwarden/linkwarden/compare/v2.4.4...v2.4.5\n\n###\n[`v2.4.4`](https://togithub.com/linkwarden/linkwarden/releases/tag/v2.4.4)\n\n[Compare\nSource](https://togithub.com/linkwarden/linkwarden/compare/v2.4.3...v2.4.4)\n\n#### What's Changed\n\n- bugs fixed by [@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13)\nin\n[https://github.com/linkwarden/linkwarden/pull/379](https://togithub.com/linkwarden/linkwarden/pull/379)\n\n**Full Changelog**:\nhttps://github.com/linkwarden/linkwarden/compare/v2.4.3...v2.4.4\n\n###\n[`v2.4.3`](https://togithub.com/linkwarden/linkwarden/releases/tag/v2.4.3)\n\n[Compare\nSource](https://togithub.com/linkwarden/linkwarden/compare/v2.4.2...v2.4.3)\n\n#### What's Changed\n\n- Bug fixed by [@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13)\nin\n[https://github.com/linkwarden/linkwarden/pull/375](https://togithub.com/linkwarden/linkwarden/pull/375)\n- hotfix by [@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13) in\n[https://github.com/linkwarden/linkwarden/pull/376](https://togithub.com/linkwarden/linkwarden/pull/376)\n\n**Full Changelog**:\nhttps://github.com/linkwarden/linkwarden/compare/v2.4.2...v2.4.3\n\n###\n[`v2.4.2`](https://togithub.com/linkwarden/linkwarden/releases/tag/v2.4.2)\n\n[Compare\nSource](https://togithub.com/linkwarden/linkwarden/compare/v2.4.1...v2.4.2)\n\n#### What's Changed\n\n- minor bug fixed by\n[@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13) in\n[https://github.com/linkwarden/linkwarden/pull/372](https://togithub.com/linkwarden/linkwarden/pull/372)\n\n**Full Changelog**:\nhttps://github.com/linkwarden/linkwarden/compare/v2.4.1...v2.4.2\n\n###\n[`v2.4.1`](https://togithub.com/linkwarden/linkwarden/releases/tag/v2.4.1)\n\n[Compare\nSource](https://togithub.com/linkwarden/linkwarden/compare/v2.4.0...v2.4.1)\n\n#### What's Changed\n\n- updated README by\n[@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13) in\n[https://github.com/linkwarden/linkwarden/pull/363](https://togithub.com/linkwarden/linkwarden/pull/363)\n- updated README by\n[@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13) in\n[https://github.com/linkwarden/linkwarden/pull/364](https://togithub.com/linkwarden/linkwarden/pull/364)\n- bugs fixed by [@\u0026#8203;daniel31x13](https://togithub.com/daniel31x13)\nin\n[https://github.com/linkwarden/linkwarden/pull/366](https://togithub.com/linkwarden/linkwarden/pull/366)\n\n**Full Changelog**:\nhttps://github.com/linkwarden/linkwarden/compare/v2.4.0...v2.4.1\n\n###\n[`v2.4.0`](https://togithub.com/linkwarden/linkwarden/releases/tag/v2.4.0)\n\n[Compare\nSource](https://togithub.com/linkwarden/linkwarden/compare/v2.3.0...v2.4.0)\n\n### Linkwarden 2.4\n\nRead the blog: https://blog.linkwarden.app/releases/v2.4\n\n#### What's New?\n\n##### 🎨 Much Improved Design\n\nEnjoy a visual upgrade with sleeker icons, enhanced coloring, and\nredesigned link cards for a more engaging experience. Huge thanks to\n[DaisyUI](https://daisyui.com) for this!\n\n##### 🏛️ All Bookmarks Now Get Archived!\n\nThere is a background script that automatically processes each link,\ncreating archived versions without any user intervention. So from now\non, every bookmark you save, **including those imported from other\nsources**, is automatically preserved, this means you'll have access to\nyour favorite article even if the original content is gone!\n\n##### 🗃️ Archive Formats Other Than Webpages\n\nYou can now archive Links that contain a PDF or Image and link\npreservation is no longer limited to webpages, for example:\nhttps://www.africau.edu/images/default/sample.pdf\n\n##### 📋 Added Compact List View\n\nThis new feature introduces a list-based format for viewing bookmarks.\nIt's designed for those who prefer a more structured and straightforward\nway to browse their saved links. This view can be especially handy for\nquickly scanning through numerous bookmarks, making it easier to find\nwhat you're looking for.\n\n##### 👍 Enhanced User Experience\n\nThere are many improvements made to enhance the user experience of the\napp, like for instance you can now add new Collections right from the\nnavbar. Also when you try to delete a Link, you get a \"Are you sure\"\nprompt to prevent accidentally deletion of your Links.\n\n##### 🔐 Added Many More Single Sign-On and Oauth Integrations\n\nFrom Authentik, to Apple, Google, and more... The list goes on.\n\n##### ✅ And more...\n\nCheck out the full changelog below.\n\n**Full Changelog**:\nhttps://github.com/linkwarden/linkwarden/compare/v2.3.0...v2.4.0\n\n\u003c/details\u003e\n\n---\n\n### Configuration\n\n📅 **Schedule**: Branch creation - \"before 10pm on monday\" in timezone\nEurope/Amsterdam, Automerge - At any time (no schedule defined).\n\n🚦 **Automerge**: Enabled.\n\n♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the\nrebase/retry checkbox.\n\n🔕 **Ignore**: Close this PR and you won't be reminded about this update\nagain.\n\n---\n\n- [ ] \u003c!-- rebase-check --\u003eIf you want to rebase/retry this PR, check\nthis box\n\n---\n\nThis PR has been generated by [Renovate\nBot](https://togithub.com/renovatebot/renovate).\n\n\u003c!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMTUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjExNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=--\u003e\n\n---\n## [treckstar/yolo-octo-hipster](https://github.com/treckstar/yolo-octo-hipster)@[a886801dc4...](https://github.com/treckstar/yolo-octo-hipster/commit/a886801dc43b0d51722158054e1cd44032d87e92)\n#### Sunday 2023-12-31 15:22:03 by treckstar\n\nLife is one big road with lots of signs. So when you riding through the ruts, don't complicate your mind. Flee from hate, mischief and jealousy. Don't bury your thoughts, put your vision to reality. Wake Up and Live!\n\n---\n## [Qwertytoforty/Paradise](https://github.com/Qwertytoforty/Paradise)@[6a109ade7f...](https://github.com/Qwertytoforty/Paradise/commit/6a109ade7f7cd612dcd371f64c4485340ab963d9)\n#### Sunday 2023-12-31 15:26:10 by Henri215\n\nMoves a few sprites out of items.dmi (#23301)\n\n* fuck you items.dmi\n\n* banhammer\n\n---\n## [huytran17/cheerup](https://github.com/huytran17/cheerup)@[316e2276ee...](https://github.com/huytran17/cheerup/commit/316e2276eed1f9dbb35ad055d6e87826ec1360a4)\n#### Sunday 2023-12-31 16:33:17 by huytran17\n\nLast commitment of 2023. Thank you all for coming in my life. Not necessarily good, not necessarily bad, neither praiseworthy nor blameworthy. But all are valuable pieces of luggage for me to move forward. Thanks for everything, 2023.\n\n---\n## [Road-to-56-RP/roadto56rp](https://github.com/Road-to-56-RP/roadto56rp)@[8ef61ada41...](https://github.com/Road-to-56-RP/roadto56rp/commit/8ef61ada416bee946097def779e43d3e85efab5c)\n#### Sunday 2023-12-31 16:44:13 by Warlider\n\nMEFO Free baby\n\n- Canceling and Renewing MEFO's is free now (simpy fucked himself, might as well make it free)\n- Once more fixed \"Democratic Socialism\" being borked. Imagine making a focus name that has overlap with ideology. Wunderbar.\n\n---\n## [callgirlsingoa1/Call-Girl-In-Goa-Panaji-9289866737-Goa-Russian-Escort-Service](https://github.com/callgirlsingoa1/Call-Girl-In-Goa-Panaji-9289866737-Goa-Russian-Escort-Service)@[a5bf4c09bc...](https://github.com/callgirlsingoa1/Call-Girl-In-Goa-Panaji-9289866737-Goa-Russian-Escort-Service/commit/a5bf4c09bc61b153b151d0c45dbedd6d8f301a2a)\n#### Sunday 2023-12-31 17:09:36 by callgirlsingoa1\n\nAdd files via upload\n\nCall Girl In ✂️ North Goa ✂️9289866737 ✂️ Goa Russian Escort Service\nNote :- Pic Collectors . time passers , Bargainers Stay Away . Call Girls In All Goa Area Door Step Delivery We Offering You 100% Genuine Completed Body And Mind Relaxation With Happy Ending ServiCe Done By Most Attractive Charming Soft Spoken Bold Beautiful Full Cooperative Independent And Agency Escort Girls Available In All Star Hotel And Resorts Guest house ServiCe In All Over Goa\n\nWe Have Extremely Beautiful Broad Minded Cute Sexy And Hot Call Girls and Escorts, We Are Located in 3* 4* 5* Hotels in Goa. Safe And Secure High Class Services Affordable Rate 100% Satisfaction, Unlimited Enjoyment. Any Time for Model/Teens Escort in Goa High Class luxury and Premium Escorts ServiCe.\n\nCALL US High Class Luxury and Premium Escorts ServiCe We Provide Well Educated, Royal Class Female, High-Class Escorts Agency Offering a Top High Class Escorts Service In the \u0026 Several Nearby All Places Of Goa Our Service Available IN All 3/4/5 STAR HOTEL ,Out Call Services.24 hrs\n\nLocations: Baga, Calangute, Candolim, Arpora, Anjuna, Morjim, Vagator, Dona Paula, Panaji, Arambol, Ashvem, Bardez, Nerul, Nagoa, Porvorim, Sangolda, Siolom, Mapusa Miramar and All over North Goa.\n\nALL OVER South Goa Colva Margao Benalium Varca Mobor Majorda Agonda canacona Call 24×7. Your assistance for your service…9289866737\n\n---\n## [Project-Mist-OS/frameworks_base](https://github.com/Project-Mist-OS/frameworks_base)@[5b324a1928...](https://github.com/Project-Mist-OS/frameworks_base/commit/5b324a19280358c1426d7e4043e019099045f4bb)\n#### Sunday 2023-12-31 17:22:47 by Adithya R\n\n[DNM][HACK] telephony: Force Class 0 SMS to Class 1\n\nThis kills Flash SMS messages. Fuck you airtel\n\nChange-Id: Ifb0c9e8bae5c12868d178fbdaeceb2cc72a0ffb6\nSigned-off-by: Sageofd6path \u003cmail2anirban95@gmail.com\u003e\nSigned-off-by: Hưng Phan \u003cphandinhhungvp2001@gmail.com\u003e\n\n---\n## [PigeonLord/Shiptest](https://github.com/PigeonLord/Shiptest)@[b22529fc74...](https://github.com/PigeonLord/Shiptest/commit/b22529fc74e5af32967ac91679cbce3e7e06c4ca)\n#### Sunday 2023-12-31 17:32:12 by zevo\n\nFixes rock sprites ingame [WHOOPS] (#2332)\n\n\u003c!-- Write **BELOW** The Headers and **ABOVE** The comments else it may\nnot be viewable. --\u003e\n\u003c!-- You can view Contributing.MD for a detailed description of the pull\nrequest process. --\u003e\n\n## About The Pull Request\nRocks were invisible in game due to a recently merged PR of mine. this\nis why we testmerge PRs! anyways this should fix them.\n\nAdds flora and rock missing texture sprites to most flora files to\nprevent something like this from ever happening again.\n\u003c!-- Describe The Pull Request. Please be sure every change is\ndocumented or this can delay review and even discourage maintainers from\nmerging your PR! --\u003e\n\n## Why It's Good For The Game\ninvisible things that block movement bad yeah. i want to fix my\nmistakes.\n\u003c!-- Please add a short description of why you think these changes would\nbenefit the game. If you can't justify it in words, it might not be\nworth adding. --\u003e\n\n## Changelog\n\n:cl:\nfix: Most rocks are now visible again\nadd: Most flora files now have missing texture sprites to make it easier\nto spot when something has gone wrong.\n/:cl:\n\n\u003c!-- Both :cl:'s are required for the changelog to work! You can put\nyour name to the right of the first :cl: if you want to overwrite your\nGitHub username as author ingame. --\u003e\n\u003c!-- You can use multiple of the same prefix (they're only used for the\nicon ingame) and delete the unneeded ones. Despite some of the tags,\nchangelogs should generally represent how a player might be affected by\nthe changes rather than a summary of the PR's contents. --\u003e\n\n---\n## [arsLan4k1390/Cherrygram](https://github.com/arsLan4k1390/Cherrygram)@[6fb8120768...](https://github.com/arsLan4k1390/Cherrygram/commit/6fb8120768ce0733ea801e0d5dec0a45542ed120)\n#### Sunday 2023-12-31 18:04:10 by arsLan4k1390\n\nFix Package Installer crash on ShitOS (Android 14 QPR1)\n\nPackage installer on Pixel Experience has been crashing because of the resolution of background. I hate Google and Pixel devices. This is another reason to use Samsung devices - my Samsung device has never had this problem on Android 14.\n\n---\n## [propbreakerfpv/ripgrep](https://github.com/propbreakerfpv/ripgrep)@[082245dadb...](https://github.com/propbreakerfpv/ripgrep/commit/082245dadb3854238e62b91aa95a46018cf16ef1)\n#### Sunday 2023-12-31 18:38:28 by Andrew Gallant\n\ncli: replace clap with lexopt and supporting code\n\nripgrep began it's life with docopt for argument parsing. Then it moved\nto Clap and stayed there for a number of years. Clap has served ripgrep\nwell, and it probably could continue to serve ripgrep well, but I ended\nup deciding to move off of it.\n\nWhy?\n\nThe first time I had the thought of moving off of Clap was during the\n2-\u003e3-\u003e4 transition. I thought the 3.x and 4.x releases were great, but\nfor me, it ended up moving a little too quickly. Since the release of\n4.x was telegraphed around when 3.x came out, I decided to just hold off\nand wait to migrate to 4.x instead of doing a 3.x migration followed\nshortly by another 4.x migration. Of course, I just never ended up doing\nthe migration at all. I never got around to it and there just wasn't a\ncompelling reason for me to upgrade. While I never investigated it, I\nsaw an upgrade as a non-trivial amount of work in part because I didn't\nencapsulate the usage of Clap enough.\n\nThe above is just what got me started thinking about it. It wasn't\nenough to get me to move off of it on its own. What ended up pushing me\nover the edge was a combination of factors:\n\n* As mentioned above, I didn't want to run on the migration treadmill.\nThis has proven to not be much of an issue, but at the time of the\n2-\u003e3-\u003e4 releases, I didn't know how long Clap 4.x would be out before a\n5.x would come out.\n* The release of lexopt[1] caught my eye. IMO, that crate demonstrates\nexactly how something new can arrive on the scene and just thoroughly\nsolve a problem minimalistically. It has the docs, the reasoning, the\nsimple API, the tests and good judgment. It gets all the weird corner\ncases right that Clap also gets right (and is part of why I was\noriginally attracted to Clap).\n* I have an overall desire to reduce the size of my dependency tree. In\npart because a smaller dependency tree tends to correlate with better\ncompile times, but also in part because it reduces my reliance and trust\non others. It lets me be the \"master\" of ripgrep's destiny by reducing\nthe amount of behavior that is the result of someone else's decision\n(whether good or bad).\n* I perceived that Clap solves a more general problem than what I\nactually need solved. Despite the vast number of flags that ripgrep has,\nits requirements are actually pretty simple. We just need simple\nswitches and flags that support one value. No multi-value flags. No\nsub-commands. And probably a lot of other functionality that Clap has\nthat makes it so flexible for so many different use cases. (I'm being\nhand wavy on the last point.)\n\nWith all that said, perhaps most importantly, the future of ripgrep\npossibly demands a more flexible CLI argument parser. In today's world,\nI would really like, for example, flags like `--type` and `--type-not`\nto be able to accumulate their repeated values into a single sequence\nwhile respecting the order they appear on the CLI. For example, prior\nto this migration, `rg regex-automata -Tlock -ttoml` would not return\nresults in `Cargo.lock` in this repository because the `-Tlock` always\ntook priority even though `-ttoml` appeared after it. But with this\nmigration, `-ttoml` now correctly overrides `-Tlock`. We would like to\ndo similar things for `-g/--glob` and `--iglob` and potentially even\nnow introduce a `-G/--glob-not` flag instead of requiring users to use\n`!` to negate a glob. (Which I had done originally to work-around this\nproblem.) And some day, I'd like to add some kind of boolean matching to\nripgrep perhaps similar to how `git grep` does it. (Although I haven't\nthought too carefully on a design yet.) In order to do that, I perceive\nit would be difficult to implement correctly in Clap.\n\nI believe that this last point is possible to implement correctly in\nClap 2.x, although it is awkward to do so. I have not looked closely\nenough at the Clap 4.x API to know whether it's still possible there. In\nany case, these were enough reasons to move off of Clap and own more of\nthe argument parsing process myself.\n\nThis did require a few things:\n\n* I had to write my own logic for how arguments are combined into one\nsingle state object. Of course, I wanted this. This was part of the\nupside. But it's still code I didn't have to write for Clap.\n* I had to write my own shell completion generator.\n* I had to write my own `-h/--help` output generator.\n* I also had to write my own man page generator. Well, I had to do this\nwith Clap 2.x too, although my understanding is that Clap 4.x supports\nthis. With that said, without having tried it, my guess is that I\nprobably wouldn't have liked the output it generated because I\nultimately had to write most of the roff by hand myself to get the man\npage I wanted. (This also had the benefit of dropping the build\ndependency on asciidoc/asciidoctor.)\n\nWhile this is definitely a fair bit of extra work, it overall only cost\nme a couple days. IMO, that's a good trade off given that this code is\nunlikely to change again in any substantial way. And it should also\nallow for more flexible semantics going forward.\n\nFixes #884, Fixes #1648, Fixes #1701, Fixes #1814, Fixes #1966\n\n[1]: https://docs.rs/lexopt/0.3.0/lexopt/index.html\n\n---\n## [Raskulk/Improved-Mobile-main.scm](https://github.com/Raskulk/Improved-Mobile-main.scm)@[c6fa6a714d...](https://github.com/Raskulk/Improved-Mobile-main.scm/commit/c6fa6a714d98ce67896d724da6d511fa1207db9f)\n#### Sunday 2023-12-31 18:44:53 by Raskulk\n\nv38\n\n(new version of Sanny Builder, had to recompile the sources)\nChanges from 31.12.23 (version 38):\nI wish you all a happy New Year!\n- After the \"Big Smoke\" mission at the Los Santos cemetery, the grave of CJ's mother is now covered with earth, a monument appears near it.\n- After the Los Sepulcros mission at the Los Santos cemetery, Kane's grave is now covered with earth, a monument appears near it.\n- On the \"555 We Tip\" mission, you now have to drive yourself into the garage to put drugs in the prosecutor's car.\n- Near the Los Santos Police Station, you can now view information about parking lots.\n- On the \"Black Project\" mission, the searchlights now switch to search mode if the main character opens fire with any weapon except a pistol with a silencer.\n- The behavior of the military has been slightly redesigned on the Black Project mission.\n- On the pimp mission, the level scale now looks similar to other side missions.\n- Added unused text during the completion of the pimp's mission (appears only when the mission is completed again).\n- On the Mountain Cloud Boys mission, Blood Feathers now have unique models.\n- On the mission \"The Da Nang Thang\", Snakehead's accuracy and attack speed were increased.\n- On the \"Dam and Blast\" mission, the guards now have increased accuracy.\n- CJ's phrases in a hidden knife attack are now pronounced only outside of missions.\n- Some bugs have been fixed.\n\n---\n## [AnywayFarus/Skyrat-tg](https://github.com/AnywayFarus/Skyrat-tg)@[fc530572f6...](https://github.com/AnywayFarus/Skyrat-tg/commit/fc530572f6bbe4db0a36df35251a2dd7e62c6b64)\n#### Sunday 2023-12-31 19:04:05 by SkyratBot\n\n[MIRROR] Removes an exploit that can farm Russian revolver moodlets, adds Russian revolvers to the contraband section of games vendors [MDB IGNORE] (#25493)\n\n* Removes an exploit that can farm Russian revolver moodlets, adds Russian revolvers to the contraband section of games vendors (#80159)\n\n## About The Pull Request\n\nFixes https://github.com/tgstation/tgstation/issues/80158 by making\ncurses block you from playing Russian roulette regardless of whether or\nnot there's a live bullet in your Russian revolver's chamber.\n\nA Russian revolver has been added to the contraband section of each Good\nClean Fun vendor.\n\n## Why It's Good For The Game\n\nThe bug is incredibly funny, but ~~I want GBP~~ probably should be\nfixed.\n\nThere's no actual way to get (more) Russian revolvers outside of the\nmapstart ones, and that can be a bit stifling to gimmicks that involve\nthem. And Russian roulette IS a game.\n\nLike the roundstart ones, you could unload these vendor revolvers for\n.357 bullets, but you can already just print .357 bullets from a hacked\nautolathe directly, so I don't think that's an issue.\n\n## Changelog\n\n:cl: ATHATH\nfix: Spacemen can no longer use curses to cheat at Russian roulette by\nselectively blocking attempts to shoot themselves.\nadd: A Russian revolver has been added to the contraband section of each\nGood Clean Fun vendor.\n/:cl:\n\n---------\n\nCo-authored-by: Jacquerel \u003chnevard@ gmail.com\u003e\n\n* Removes an exploit that can farm Russian revolver moodlets, adds Russian revolvers to the contraband section of games vendors\n\n---------\n\nCo-authored-by: ATH1909 \u003c42606352+ATH1909@users.noreply.github.com\u003e\nCo-authored-by: Jacquerel \u003chnevard@ gmail.com\u003e\n\n---\n## [petre-symfony/30-Days-with-Last-Stack-2023](https://github.com/petre-symfony/30-Days-with-Last-Stack-2023)@[3e7222832c...](https://github.com/petre-symfony/30-Days-with-Last-Stack-2023/commit/3e7222832c34d6704c96eaf7d289fe08c06320aa)\n#### Sunday 2023-12-31 19:10:23 by petrero\n\n25.11 Pointing Tailwind at your Component PHP Classes\n - Though, one detail. Tailwind scans our source files, finds all the Tailwind classes we're using and includes those in the final CSS file. And because we're now including classes inside PHP, we need to make sure Tailwind sees those.\n\n In tailwind.config.js, on top, I'll paste in one more line to make it scan our Twig component PHP classes\n\n Changing the Component Tag Name\n - Ok, we're nearly done for today - but I want to celebrate and use the new component in one more spot: on the voyage index page, for the \"New Voyage\" button.\n\n Open index.html.twig... change this to a \u003ctwig:Button\u003e... then we can remove most of these classes. The bold is specific to this spot I think\n\n When we refresh... it renders! Though... when I click... nothing happens! You probably saw why: this is now a button, not an a tag.\n\n That's okay: we can make our component just a bit more flexible. In Button.php, add another property: string $tag defaulting to button\n\n Then in the template, use {{ tag }} for the starting tag and the ending tag\n\n Finish in index.html.twig: pass tag=\"a\"\n\n Now over here... when we click... got it!\n\n That's it! I hope you love Twig components as much as I do. But they can do even more! I didn't tell you how you can prefix any attribute with : to pass dynamic Twig variables or expressions to a prop. We also didn't discuss that the component PHP classes are services. Yea, you can add an __construct() function, autowire other services, like VoyageRepository, then use those to provide data to your template... making the entire component standalone and self-sufficient. That's one of my favorite features.\n\n Tomorrow we're going to keep leveraging Twig components to create a modal component... then see just how easily we can use modals whenever we want.\n\n---\n## [Lambdagon/fc](https://github.com/Lambdagon/fc)@[9e7ad80845...](https://github.com/Lambdagon/fc/commit/9e7ad80845887de75d998e80a9e0741e3f1f2c2e)\n#### Sunday 2023-12-31 19:28:24 by Rainer\n\nunprefabbed broken weapons, made the vermin8 not just suck, deluxe shades not fucked up, made the pot not evil\n\n---\n## [ProfessorSidon/VGC-Damage-Calculator-Chinese](https://github.com/ProfessorSidon/VGC-Damage-Calculator-Chinese)@[90ebab0707...](https://github.com/ProfessorSidon/VGC-Damage-Calculator-Chinese/commit/90ebab070756a16e150c0b43c34b2618817bce6b)\n#### Sunday 2023-12-31 19:47:45 by nerd-of-now\n\nAdded ??? type, remember gen/level, 2x BP button, more nat dex field conditions, minor damage adjustments\n\n- Added the ??? type to gens 2-4, yes it's different from no typing\n- The calc will now remember the last level system and gen that the user used\n- Changed the 2x attack field from a dropdown list to a button\n- Removed Typeless from the options for Tera Type\n- Changed where Aura Wheel checks for its type change\n- Changed how the calc handles ignoring abilities so that the moves that ignore abilities will also affect things like Friend Guard and Aura Break\n- Added a check for Struggle to Wonder Guard\n- Fixed OHKO move logic (was reverse of what it was supposed to be)\n- Fixed the Hydro Steam/Utility Umbrella interaction\n- Fixed the Power-Up Punch/Parental Bond interaction (a +6 Power-Up Punch would incorrectly calc for a +7 second hit)\n- The calc will correctly save and export male Indeedee now\n- Added a few more default abilities\n\n---\n## [peterlevel1/react](https://github.com/peterlevel1/react)@[b6978bc38f...](https://github.com/peterlevel1/react/commit/b6978bc38f6788c7e73982b9fd2771aabdf36f15)\n#### Sunday 2023-12-31 20:20:15 by Andrew Clark\n\nexperimental_use(promise) (#25084)\n\n* Internal `act`: Unwrapping resolved promises\n\nThis update our internal implementation of `act` to support React's new\nbehavior for unwrapping promises. Like we did with Scheduler, when \nsomething suspends, it will yield to the main thread so the microtasks\ncan run, then continue in a new task.\n\nI need to implement the same behavior in the public version of `act`,\nbut there are some additional considerations so I'll do that in a\nseparate commit.\n\n* Move throwException to after work loop resumes\n\nthrowException is the function that finds the nearest boundary and\nschedules it for a second render pass. We should only call it right \nbefore we unwind the stack — not if we receive an immediate ping and\nrender the fiber again.\n\nThis was an oversight in 8ef3a7c that I didn't notice because it happens\nto mostly work, anyway. What made me notice the mistake is that\nthrowException also marks the entire render phase as suspended\n(RootDidSuspend or RootDidSuspendWithDelay), which is only supposed to\nbe happen if we show a fallback. One consequence was that, in the \nRootDidSuspendWithDelay case, the entire commit phase was blocked,\nbecause that's the exit status we use to block a bad fallback\nfrom appearing.\n\n* Use expando to check whether promise has resolved\n\nAdd a `status` expando to a thrown thenable to track when its value has\nresolved.\n\nIn a later step, we'll also use `value` and `reason` expandos to track\nthe resolved value.\n\nThis is not part of the official JavaScript spec — think of\nit as an extension of the Promise API, or a custom interface that is a\nsuperset of Thenable. However, it's inspired by the terminology used\nby `Promise.allSettled`.\n\nThe intent is that this will be a public API — Suspense implementations\ncan set these expandos to allow React to unwrap the value synchronously\nwithout waiting a microtask.\n\n* Scaffolding for `experimental_use` hook\n\nSets up a new experimental hook behind a feature flag, but does not\nimplement it yet.\n\n* use(promise)\n\nAdds experimental support to Fiber for unwrapping the value of a promise\ninside a component. It is not yet implemented for Server Components, \nbut that is planned.\n\nIf promise has already resolved, the value can be unwrapped\n\"immediately\" without showing a fallback. The trick we use to implement\nthis is to yield to the main thread (literally suspending the work\nloop), wait for the microtask queue to drain, then check if the promise\nresolved in the meantime. If so, we can resume the last attempted fiber\nwithout unwinding the stack. This functionality was implemented in \nprevious commits.\n\nAnother feature is that the promises do not need to be cached between\nattempts. Because we assume idempotent execution of components, React\nwill track the promises that were used during the previous attempt and\nreuse the result. You shouldn't rely on this property, but during\ninitial render it mostly just works. Updates are trickier, though,\nbecause if you used an uncached promise, we have no way of knowing \nwhether the underlying data has changed, so we have to unwrap the\npromise every time. It will still work, but it's inefficient and can\nlead to unnecessary fallbacks if it happens during a discrete update.\n\nWhen we implement this for Server Components, this will be less of an\nissue because there are no updates in that environment. However, it's\nstill better for performance to cache data requests, so the same\nprinciples largely apply.\n\nThe intention is that this will eventually be the only supported way to\nsuspend on arbitrary promises. Throwing a promise directly will\nbe deprecated.\n\n---\n## [petre-symfony/30-Days-with-Last-Stack-2023](https://github.com/petre-symfony/30-Days-with-Last-Stack-2023)@[d3127a151d...](https://github.com/petre-symfony/30-Days-with-Last-Stack-2023/commit/d3127a151d5ea8ac27535be72f4a556cb0737ec5)\n#### Sunday 2023-12-31 21:36:15 by petrero\n\n26.9 Finally, let's frost this cake. Near the bottom of the content, I'll paste in the planet checkboxes\n\n This is more boring code! I loop over the planets and render input check boxes. My Symfony controller is already set up to read the planets parameter and filter the query.\n\n Final test. Open it up. Lovely! Now watch: click a few. When I press \"See Results\", the table should update. Boom. It did!\n\n But the coolest part is... how this worked! Think about it: I click this button... and the table reloads. That means the form is submitting. But... what caused that? Look at the button: there's no code to submit the form. So what's going on?\n\n Remember: this button, the planet checkboxes and this modal physically live inside the \u003cform\u003e element. And what happens when you press a button that lives inside a form? It submits the form! We run the modal#close, but we also allow the browser to do the default behavior: submitting the form. This is ancient alien technology at work!\n\n On the close button, I was a bit sneaky. When I added that, I included a type=\"button\". That tells the browser to not submit any form that it might be inside. That's why when we click \"X\", nothing updates. But when we click \"see results\", the form submits.\n\n Woh! Best day ever! Tomorrow, it's time to look at Live components, where we take Twig components and let them re-render on the page via Ajax as the user interacts when them.\n\n---\n## [SRockt/SRockt](https://github.com/SRockt/SRockt)@[c4008aa1ac...](https://github.com/SRockt/SRockt/commit/c4008aa1acbde852eeab681e791f09729ce2d60c)\n#### Sunday 2023-12-31 23:19:01 by Siegfried Serve\n\n{\n    \"githubPullRequests.remotes\": [\n        \"origin\",\n        \"upstream\",\n        \"dscho:drive-less-symlinks\",\n        \"@ext:GitHub.vscode-pull-request-github remotes\"\n    ],\n    \"workbench.settings.applyToAllProfiles\": [\n        \"githubPullRequests.remotes\",\n        \"git.branchValidationRegex\"\n    ],\n    \"githubIssues.queries\": [\n        {\n            \"label\": \"Meine Probleme\",\n            \"query\": \"default\"\n        },\n        {\n            \"label\": \"Erstellte Probleme\",\n            \"query\": \"author:${user} state:open repo:${owner}/${repository} sort:created-desc\"\n        },\n        {\n            \"label\": \"Aktuelle Probleme\",\n            \"query\": \"state:open repo:${owner}/${repository} sort:updated-desc\"\n        }\n    ],\n    \"window.menuBarVisibility\": \"classic\",\n    \"workbench.colorTheme\": \"PowerShell ISE\",\n    \"cloudcode.autoDependencies\": \"off\",\n    \"security.promptForLocalFileProtocolHandling\": false,\n    \"github.copilot.advanced\": {\n\n    },\n    \"cloudcode.duetAI.project\": \"glassy-clock-403222\",\n    \"editor.unicodeHighlight.nonBasicASCII\": false,\n    \"mssql.enableQueryHistoryCapture\": false,\n    \"mssql.objectExplorer.groupBySchema\": true,\n    \"git.enableSmartCommit\": true,\n    \"gitlens.ai.experimental.provider\": \"anthropic\",\n    \"gitlens.ai.experimental.anthropic.model\": \"claude-2.1\",\n    \"git.autofetch\": true,\n    \"git.autoStash\": true,\n    \"git.branchRandomName.dictionary\": [\n        \"adjectives\",\n        \"animals\",\n        \"numbers\"\n    ],\n    \"git.branchRandomName.enable\": true,\n    \"git.branchSortOrder\": \"alphabetically\",\n    \"git.branchValidationRegex\": \"vscode.git\",\n    \"git.commandsToLog\": [\n        \"vscode.git\"\n    ],\n    \"git.defaultCloneDirectory\": \"\"\n}\n\u003c!DOCTYPE html\u003e\u003chtml class=\"maestro maestro--responsive global-header\" lang=\"de\" xml:lang=\"de\" xmlns=\"http://www.w3.org/1999/xhtml\"\u003e\u003chead\u003e\u003cscript nonce=\"AwAFyR8mbB48mik7l2cB\"\u003e\nwindow._goch_ = {};\nwindow.addEventListener('click', function(event) {\n    'use strict';\n    for (var elm = event.target; elm; elm = elm.parentElement) {\n        if (elm.id \u0026\u0026\n            window._goch_.hasOwnProperty(elm.id) \u0026\u0026\n            window._goch_[elm.id].call(elm, event) === false) {\n            event.preventDefault();\n        }\n    }\n}, true);\nwindow._csp_external_script_nonce = \"e2lVsGiUH3tX0noOW1W+\"\u003c/script\u003e\u003clink href=\"https://cfl.dropboxstatic.com\" rel=\"preconnect\" /\u003e\u003clink href=\"https://cfl.dropboxstatic.com/static/metaserver/static/images/favicon-vfl8lUR9B.ico\" rel=\"shortcut icon\" /\u003e\u003ctitle\u003eDropbox\u003c/title\u003e\u003cmeta content=\"noindex, nofollow, noimageindex\" name=\"robots\" /\u003e\u003cmeta content=\"origin-when-cross-origin\" name=\"referrer\" /\u003e\u003cmeta content=\"width=device-width, initial-scale=1\" name=\"viewport\" /\u003e\u003cmeta content=\"app-id=327630330\" name=\"apple-itunes-app\" /\u003e\u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003eif (window.performance \u0026\u0026 window.performance.mark) { window.performance.mark(\"requirejs_start\"); }\u003c/script\u003e \u003clink crossorigin=\"anonymous\" href=\"https://cfl.dropboxstatic.com/static/metaserver/static/js/alameda_bundle/alameda_bundle_chrome_de-vflU8rBSF.js\" as=\"script\" nonce=\"e2lVsGiUH3tX0noOW1W+\" rel=\"preload\" type=\"text/javascript\" /\u003e \u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003e\n            (()=\u003e{\"use strict\";const e=window;let a;const r=()=\u003e{a=[],e.addRequireLoadCallback=e=\u003ea.push(e),e.configureRequire=function(){const a=arguments;e.addRequireLoadCallback(()=\u003ee.configureRequire.apply(null,a))},e.define=function(){const a=arguments;e.addRequireLoadCallback(()=\u003ee.define.apply(null,a))},e.preLoadFile=(...a)=\u003e{e.addRequireLoadCallback(()=\u003ee.preLoadFile.apply(null,a))}};r(),e._insertRequireShim=r,e.InitRequireJs=r=\u003e{e.requireContexts={},e.performance\u0026\u0026null!=e.performance.now\u0026\u0026(requirejs.onResourceLoad=(a,r,i)=\u003e{const l=e.performance.now(),n=e.requireContexts[a.id];if(n){r.id in n.module_callback_times||(n.module_callback_times[r.id]={});const e=n.module_callback_times[r.id];e.loadTime=l,r.url\u0026\u0026(e.url=r.url),r.id\u0026\u0026(e.name=r.id),r.parentMap\u0026\u0026r.parentMap.url\u0026\u0026(e.parent=r.parentMap.url)}}),e.configureRequire=r,e.addRequireLoadCallback=e=\u003ee(),a.forEach(e=\u003ee())}})();\n\n            window.CSP_SCRIPT_NONCE = \"AwAFyR8mbB48mik7l2cB\";\n            \u003c/script\u003e \u003cscript async=\"async\" crossorigin=\"anonymous\" src=\"https://cfl.dropboxstatic.com/static/metaserver/static/js/alameda_bundle/alameda_bundle_chrome_de-vflU8rBSF.js\" type=\"text/javascript\" nonce=\"e2lVsGiUH3tX0noOW1W+\"\u003e\u003c/script\u003e \u003clink crossorigin=\"anonymous\" href=\"https://cfl.dropboxstatic.com/static/metaserver/static/fonts/paper-atlasgrotesk/AtlasGrotesk-Regular-Web-vflk7bxjs.woff2\" as=\"font\" rel=\"preload\" type=\"font/woff2\" /\u003e\u003clink crossorigin=\"anonymous\" href=\"https://cfl.dropboxstatic.com/static/metaserver/static/fonts/paper-atlasgrotesk/AtlasGrotesk-Medium-Web-vfl38XiTL.woff2\" as=\"font\" rel=\"preload\" type=\"font/woff2\" /\u003e  \u003cstyle\u003e\n            * { font-weight: inherit; }\n            html { box-sizing: border-box; }\n            /* To remove Firefox's extra padding */\n            button::-moz-focus-inner,\n            input[type='button']::-moz-focus-inner,\n            input[type='submit']::-moz-focus-inner,\n            input[type='reset']::-moz-focus-inner {\n              padding: 0;\n              border: 0 none;\n            }\n            [class^='maestro-sidebar'] { box-sizing: border-box; }\n            .maestro body,\n            .maestro .normal {\n                font-family: AtlasGrotesk, sans-serif;\n                font-size: 14px;\n                -moz-osx-font-smoothing: grayscale;\n                -webkit-font-smoothing: antialiased;\n            }\n            .maestro input,\n            .maestro textarea,\n            .maestro select,\n            .maestro button:not(.dig-Button, .dig-StylelessButton, .dig-DatePicker-day, .dwg-button2) {\n                font-family: AtlasGrotesk, sans-serif;\n                -moz-osx-font-smoothing: grayscale;\n                -webkit-font-smoothing: antialiased;\n            }\n            .maestro body {\n              margin: 0;\n            }\n            .embedded-app {\n              top: 0;\n              bottom: 0;\n              padding-left: 240px;\n            }\n            .embedded-app__error-state {\n              display: block;\n              text-align: center;\n              align-items: center;\n              justify-content: center;\n              flex-direction: column;\n              bottom: 0;\n            }\n            .embedded-app__error-state img {\n                height: 300px;\n                width: 300px;\n            }\n            .maestro-loading-spinner-wrapper {\n              position: fixed;\n              top: 0;\n              right: 0;\n              bottom: 0;\n              left: 0;\n              display: flex;\n              justify-content: center;\n            }\n            .maestro-loading-spinner {\n              position: absolute;\n              top: 33%;\n              width: 24px;\n              height: 24px;\n              background-image: url('https://cfl.dropboxstatic.com/static/metaserver/static/images/icons/ajax-loading-small-blue@2x-vfl14X6Ll.gif');\n              background-size: 24px 24px;\n              /* So the center of the image is used to center the element. */\n              transform: translate(-50%, -50%);\n            }\u003c/style\u003e \u003cstyle type=\"text/css\"\u003e\u003c/style\u003e\u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003eif (window.performance \u0026\u0026 window.performance.mark) { window.performance.mark(\"ensemble_payload_start\"); }\u003c/script\u003e \u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003e(function(){\"use strict\";const PerfTimer=\"object\"==typeof performance\u0026\u0026\"function\"==typeof performance.now?performance:Date,FAST_FRAME_THRESHOLD=20,SLOW_FRAME_THRESHOLD=34;class CPUIdleMonitor{constructor(){this.idleCPUTime=0,this.busyCPUTime=0,this.startedTracking=PerfTimer.now(),this.lastFrame=this.startedTracking,this.requestID=requestAnimationFrame((()=\u003e{this.updateCPUTimes()})),console.timeStamp\u0026\u0026console.timeStamp(\"cpu_idle_tracking_started\")}updateCPUTimes(e={forceUpdate:!1,currentCPUSpan:0}){const t=PerfTimer.now(),s=t-this.lastFrame;let r;this.lastFrame=t,r=s\u003e=SLOW_FRAME_THRESHOLD?0:s\u003c=FAST_FRAME_THRESHOLD?1:(SLOW_FRAME_THRESHOLD-s)/(SLOW_FRAME_THRESHOLD-FAST_FRAME_THRESHOLD);let n=s*(1-r);e.forceUpdate\u0026\u0026n\u003ce.currentCPUSpan\u0026\u0026(n=Math.min(s,e.currentCPUSpan)),this.busyCPUTime+=n,this.idleCPUTime+=s-n,e.forceUpdate||(this.requestID=requestAnimationFrame((()=\u003e{this.updateCPUTimes()})))}stop(){null!==this.requestID\u0026\u0026(console.timeStamp\u0026\u0026console.timeStamp(\"cpu_idle_tracking_stopped\"),cancelAnimationFrame(this.requestID),this.requestID=null)}getIdleCPUTime(){return this.idleCPUTime}getCPUTimeSnapshot(e){return void 0!==e\u0026\u0026this.updateCPUTimes({forceUpdate:!0,currentCPUSpan:e}),{idleTime:this.idleCPUTime.toString(),busyTime:this.busyCPUTime.toString()}}getTotalTrackedTime(){return this.idleCPUTime+this.busyCPUTime}getIdlePercentOfTracked(){const e=this.idleCPUTime+this.busyCPUTime;return 0===e?0:this.idleCPUTime/e}getUntrackedTimeSinceTTFB(){if(\"object\"!=typeof performance||\"function\"!=typeof performance.now||\"object\"!=typeof performance.timing||\"number\"!=typeof performance.timing.responseStart||\"number\"!=typeof performance.timing.navigationStart)return null;const e=performance.timing.responseStart-performance.timing.navigationStart;return this.startedTracking-e}}function reportNonceMismatch(e,t){window.addRequireLoadCallback((()=\u003e{setTimeout((()=\u003e{const s=new Error(\"Refused to execute script from because window.CSP_SCRIPT_NONCE is defined and the nonce doesn't match.\");throw s.excExtra={page_nonce:e,script_tag_nonce:t,err_version:3},s.tags=[\"csp-nonce-error\"],s}),0)}))}const hasPerfNow=!(!window.performance||!window.performance.now);function consoleTimeStamp(e){console.timeStamp\u0026\u0026console.timeStamp(e)}class EnsembleStopwatch{constructor(){this._data={}}getNow(){if(hasPerfNow)return window.performance.now()}markSpan(e,t={}){if(consoleTimeStamp(e),\"number\"!=typeof t.startTime\u0026\u0026(t.startTime=0),\"number\"!=typeof t.endTime){const e=this.getNow();if(void 0===e)return;t.endTime=e}t.startTime=Math.round(t.startTime),t.endTime=Math.round(t.endTime),this._data[e]?console.error(\"stopwatch error: spanName has been used before: \"+e):this._data[e]={start:t.startTime,end:t.endTime,annotations:t.annotations||{}}}getData(){const e={};for(const t in this._data)if(this._data.hasOwnProperty(t)){const s=this._data[t];e[t]={end:s.end,start:s.start,annotations:s.annotations}}return e}}class EventTracker{constructor(){this._postEventCallbacks=[],this._eventMarked=!1}callAfterEvent(e){this._eventMarked?e():this._postEventCallbacks.push(e)}_triggerPostEventCallbacks(){for(const e of this._postEventCallbacks)e();this._postEventCallbacks=[]}markEvent(){if(this._eventMarked)throw new Error(\"event can't be marked twice\");this._eventMarked=!0,this._triggerPostEventCallbacks()}}const ScriptTypes=[\"text/javascript\",\"text/ecmascript\",\"application/javascript\",\"application/ecmascript\",\"\",void 0];function insertPagelet(e,t){return e.innerHTML=t,t=\u003e_evaluateScripts(e,t)}function evaluateScript(e,t){const s=document.createElement(\"div\");return s.innerHTML=e,_evaluateScripts(s,t)}function _evaluateScripts(e,t){const s=e.getElementsByTagName(\"script\");for(let e=0;e\u003cs.length;e++){const r=s[e];if(-1===ScriptTypes.indexOf(r.type))continue;const n=r.nonce||r.getAttribute(\"nonce\"),o=window.CSP_SCRIPT_NONCE;if(o===n){if(r.src)throw new Error(\"Do not add scripts with src in the pagelet html, they should instead be loaded via requirejs or as pagelet dependencies\");eval.call(window,r.innerHTML)}else t(o,n)}}const loaderOrder=[\"edison:preloadCss\",\"js:requireCssWithComponent\",\"js:require_css\",\"loadCssWithCache\",\"ensemble\",\"CssEntryPoint\",\"css-modules\"],sortedLoaders=[\"css-modules\"];function findInsertPosition(e,t,s){if(s[t].length\u003e0){if(sortedLoaders.includes(t)){const r=s[t];for(let t=0;t\u003cr.length;t++){const{elem:s,path:n}=r[t];if(n\u003ee.path)return[s,t]}}return[s[t][s[t].length-1].elem.nextElementSibling,null]}const r=loaderOrder.indexOf(t);for(let e=r-1;e\u003e=0;e--){const t=s[loaderOrder[e]]||[];if(t.length\u003e0)return[t[t.length-1].elem.nextElementSibling,null]}for(let e=r+1;e\u003cloaderOrder.length;e++){const t=s[loaderOrder[e]]||[];if(t.length\u003e0)return[t[0].elem,null]}return[null,null]}function injectCssElement(e,t,s,r,n){e.elem.setAttribute(\"data-loader\",t),e.elem instanceof HTMLStyleElement\u0026\u0026e.elem.setAttribute(\"path\",e.path);let o=null,i=null;n||([o,i]=findInsertPosition(e,t,s)),null===i?s[t].push(e):s[t].splice(i,0,e),o?r.insertBefore(e.elem,o):r.appendChild(e.elem)}function injectCss(e,t,s=document){const r=s.defaultView;r.__injectCssCache||(r.__injectCssCache={\"edison:preloadCss\":[],\"js:require_css\":[],\"js:requireCssWithComponent\":[],loadCssWithCache:[],ensemble:[],CssEntryPoint:[],\"css-modules\":[]});const n=r.__injectCssCache;n[t]=n[t]?n[t]:[];const o=sortedLoaders.includes(t);if(!o\u0026\u0026e.length\u003e1){const[r]=findInsertPosition(e[0],t,n),i=s.createDocumentFragment();for(const s of e)injectCssElement(s,t,n,i,!o);null===r?s.head.appendChild(i):s.head.insertBefore(i,r)}else for(const r of e)injectCssElement(r,t,n,s.head,!1)}const _loadedCSS={},_CSSElements={};function appendLinkTags(e,t,s,r){const n=[];for(const e of t){const t=_CSSElements[e];if(t)if(_loadedCSS[e])s();else{const r=t.onload,n=t.onerror;t.onload=()=\u003e{s(),r()},t.onerror=()=\u003e{s({resource:e,type:\"stylesheet\"}),n()}}else{const t=document.createElement(\"link\");if(t.href=e,t.rel=\"stylesheet\",t.onload=()=\u003e{_loadedCSS[e]=!0,s()},t.onerror=()=\u003e{s({resource:e,type:\"stylesheet\"})},r)for(const[e,s]of Object.entries(r))0===e.indexOf(\"data-\")\u0026\u0026t.setAttribute(e,s);n.push({elem:t,path:e}),_CSSElements[e]=t}}injectCss(n,\"ensemble\",e)}function appendScriptTags(e,t,s,r){let n;window.hasOwnProperty(\"_csp_external_script_nonce\")\u0026\u0026(n=window._csp_external_script_nonce);for(const o of t){const t=document.createElement(\"script\");if(t.src=o,t.type=\"text/javascript\",t.async=!0,t.onload=()=\u003e{s()},t.onerror=()=\u003e{s({resource:o,type:\"script\"})},n\u0026\u0026t.setAttribute(\"nonce\",n),r)for(const[e,s]of Object.entries(r))0===e.indexOf(\"data-\")\u0026\u0026t.setAttribute(e,s);e.appendChild(t)}}class ResourceLoader{constructor(e,t){this.totalResources=0,this.loadedResources=0,this.onLoadCallbacks=[],this.errors=[],e.stylesheets\u0026\u0026(this.totalResources+=e.stylesheets.length),e.scripts\u0026\u0026(this.totalResources+=e.scripts.length),t\u0026\u0026this.onLoadCallbacks.push(t),0!==this.totalResources?this.loadResources(e.stylesheets,e.scripts,e.dataAttributes):setTimeout(this.runCallbacks.bind(this),0)}isDoneLoading(){return this.loadedResources===this.totalResources}addOnLoadCallback(e){if(this.isDoneLoading())throw new Error(\"ResourceLoader error: added callback after resources have finished loading\");this.onLoadCallbacks.push(e)}loadResources(e,t,s){const r=function(e){this.loadedResources+=1,e\u0026\u0026this.errors.push(e),this.loadedResources===this.totalResources\u0026\u0026this.runCallbacks()}.bind(this);if(e\u0026\u0026appendLinkTags(document,e,r,s),t){const e=document.createDocumentFragment();appendScriptTags(e,t,r,s),document.body.appendChild(e)}}runCallbacks(){let e;if(0!==this.errors.length){e={failedStylesheets:[],failedScripts:[]};for(const t of this.errors)\"stylesheet\"===t.type?e.failedStylesheets.push(t.resource):\"script\"===t.type\u0026\u0026e.failedScripts.push(t.resource)}for(let t=0;t\u003cthis.onLoadCallbacks.length;t++)this.onLoadCallbacks[t](e)}}function doFrameBust(e){if(e.mini_frame_bust){let e=!1;try{e=top.location.hostname===self.location.hostname}catch(e){}if(self!==top\u0026\u0026!e){setTimeout((()=\u003e{window.DB_FRAME_BUST=!0,document.body.innerHTML=\"\u003cimg src='https://cfl.dropboxstatic.com/static/metaserver/static/images/logo.png' id='frame-bust-image'/\u003e\",document.getElementById(\"frame-bust-image\").addEventListener(\"click\",(function(e){top.location.href=window.location.href}))}),4);try{top.location.replace(self.location.href)}catch(e){console.error(e)}}}e.frame_bust\u0026\u0026self===top\u0026\u0026(document.body.style.display=\"\")}class TTITracker{constructor(){this._postTTICallbacks=[],this.ttiMarked=!1}callAfterTTI(e){this.ttiMarked?e():this._postTTICallbacks.push(e)}_triggerPostTTICallbacks(){for(const e of this._postTTICallbacks)e();this._postTTICallbacks=[]}markTTI(){clearTimeout(this.ttiTimeoutId),setTimeout((()=\u003e{this.ttiMarked=!0,this._triggerPostTTICallbacks();const e=document.createEvent(\"Event\");e.initEvent(\"TTI\",!0,!0),window.dispatchEvent(e)}),0)}startTTITimeout(e,t){this.ttiTimeoutId=setTimeout((()=\u003e{t\u0026\u0026t(),this._triggerPostTTICallbacks()}),e)}}function validateObjectProperties(e,t,s){for(const r of Object.keys(s)){if(!Object.prototype.hasOwnProperty.call(t,r))throw new Error(e+\" missing required property '\"+r+\"'\");let n,o=!1;const i=s[r];if(null!==i)if(\"object\"==typeof i?(n=i.kind,o=i.nullable):n=i,o){if(null!=t[r]\u0026\u0026typeof t[r]!==n)throw new Error(e+\" property '\"+r+\"' has incorrect type. Expected '\"+n+\"' or null, got '\"+typeof t[r]+\"'\")}else{const s=typeof t[r];if(s!==n)throw new Error(e+\" property '\"+r+\"' has incorrect type. Expected '\"+n+\"', got '\"+s+\"'\")}}}function validatePageletConfig(e){if(null==e)throw new Error(\"Pagelet config is null or undefined\");if(\"object\"!=typeof e)throw new Error(\"Pagelet config is not an object\");switch(validateObjectProperties(\"Pagelet config\",e,{name:\"string\",driver:\"string\"}),e.driver){case\"simple\":_validateSimplePageletConfig(e);break;case\"requirejs\":case\"js_only\":_validateRequireJSPageletConfig(e);break;case\"inline\":_validateInlinePageletConfig(e);break;default:throw new Error(\"Unknown pagelet config driver '\"+e.driver+\"'\")}return e}function _validateSimplePageletConfig(e){if(validateObjectProperties(\"Pagelet config\",e,{html:\"string\",script:{kind:\"string\",nullable:!0},stylesheets:null}),!Array.isArray(e.stylesheets))throw new Error(\"Pagelet config property 'stylesheets' has incorrect type. Expected 'Array' or null, got '\"+typeof e.stylesheets+\"'\");for(const t of e.stylesheets)if(\"string\"!=typeof t)throw new Error(\"Pagelet config property 'stylesheets' has an element of incorrect type. Expected 'string', got '\"+typeof t+\"'\")}function _validateRequireJSPageletConfig(e){if(validateObjectProperties(\"Pagelet config\",e,{html:\"string\",stylesheets:null}),!Array.isArray(e.stylesheets))throw new Error(\"Pagelet config property 'stylesheets' has incorrect type. Expected 'Array' or null, got '\"+typeof e.stylesheets+\"'\");for(const t of e.stylesheets)if(\"string\"!=typeof t)throw new Error(\"Pagelet config property 'stylesheets' has an element of incorrect type. Expected 'string', got '\"+typeof t+\"'\")}function _validateInlinePageletConfig(e){validateObjectProperties(\"Pagelet config\",e,{html:\"string\",style:{kind:\"string\",nullable:!0},script:{kind:\"string\",nullable:!0}})}function validateUsers(e){if(!Array.isArray(e))throw new Error(\"users must be an array\");for(let t=0;t\u003ce.length;t++){_validateUser(e[t])}}function _validateUser(e){if(validateObjectProperties(\"User\",e,{userId:\"number\",displayName:\"string\",personalName:{kind:\"string\",nullable:!0},isActive:\"boolean\",isTeam:\"boolean\",teamName:{kind:\"string\",nullable:!0},teamSize:\"number\",redirectUrl:{kind:\"string\",nullable:!0},role:\"string\"}),-1!==e.userId\u0026\u0026!e.isTeam\u0026\u0026null==e.personalName)throw new Error(\"Non-team user must have 'personalName' set\");if(e.isTeam\u0026\u0026null==e.teamName)throw new Error(\"Team user must have 'teamName' set\");if(e.isTeam\u0026\u0026-1===e.teamSize)throw new Error(\"Team user must have 'teamSize' set\");if(-1===[\"work\",\"personal\"].indexOf(e.role))throw new Error(`role ${e.role} is not recognized`);if(-1===e.userId\u0026\u0026null==e.redirectUrl||-1!==e.userId\u0026\u0026null!=e.redirectUrl)throw new Error(\"User property 'redirectUrl' must be set if and only if the user is not paired\")}class Viewer{constructor(e){if(!e.users)throw new Error(\"Viewer config must contain users. Config: \"+JSON.stringify(e));validateUsers(e.users),this.users=e.users}getActiveUser(){for(let e=0;e\u003cthis.users.length;e++)if(this.users[e].isActive)return this.users[e];return null}getUserById(e){for(let t=0;t\u003cthis.users.length;t++){const s=this.users[t];if(s.userId===e)return s}throw new Error(`user ${e} is not in the current viewer`)}isValidRole(e){return-1!==[\"personal\",\"work\"].indexOf(e)}}let started=!1;function startVisibilityWatcher(){if(!started\u0026\u0026window.performance\u0026\u0026window.performance.mark){started=!0;const e=()=\u003e{const e=document.visibilityState;e\u0026\u0026window.performance.mark(`VisibilityState.${e}`)};e(),document\u0026\u0026document.addEventListener\u0026\u0026document.addEventListener(\"visibilitychange\",e,!1)}}const cpuIdleMonitor=new CPUIdleMonitor;startVisibilityWatcher();const CLIENT_HANDLED_QUERY_PARAMS={role:!0,email_just_verified:!0,email_just_verified_and_changed:!0,oref:!0,always_show_progressbar:!0,from_scl_sync_modal:!0};let jsStopwatch;function registerEnsembleStopwatch(){jsStopwatch=new EnsembleStopwatch}class Pagelet{constructor(e,t){this.name=e.name,this.driver=e.driver,this.exceptionInfo=t}}class SimplePagelet extends Pagelet{constructor(e,t){super(e,t),this.html=e.html,this.script=e.script,this.stylesheets=e.stylesheets}initializeLoad(e,t,s,r){const n=()=\u003e{this.renderHtml(e),t?s.callAfterTTI((()=\u003ethis.loadScript())):this.loadScript(),r()};this.stylesheets\u0026\u0026this.stylesheets.length\u003e0?new ResourceLoader({stylesheets:this.stylesheets},n):n()}renderHtml(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to find pagelet targetElementId '\"+e+\"'\");t.innerHTML=this.html}loadScript(){null!=this.script\u0026\u0026globalEval(this.script)}getDOMInteractive(){throw new Error(\"SimplePagelet does not track DOMInteractive\")}}function globalEval(script){eval(script)}class RequireJSPagelet extends Pagelet{constructor(e,t,s){super(e,t),this.html=e.html,this.stylesheets=e.stylesheets,this._ensemble=s}insertIntoDOM(e,t,s){const r=document.getElementById(e);r.style.visibility=\"hidden\",r.style.position=\"absolute\";const n=insertPagelet(r,this.html);t?s.callAfterTTI((()=\u003en(reportNonceMismatch))):n(reportNonceMismatch),jsStopwatch.markSpan(\"dws_pagelet_render_on_page_\"+e),jsStopwatch.markSpan(\"dws_pagelet_render_on_page_\"+this.name),jsStopwatch.markSpan(\"dws_pagelet_render_on_page_uncached_\"+this.name)}_showPageletElement(e){const t=document.getElementById(e);t.style.position=\"\",t.style.visibility=\"visible\"}initializeLoad(e,t,s,r){jsStopwatch.markSpan(\"dws_start_initialize_load_uncached_\"+this.name),jsStopwatch.markSpan(\"dws_pagelet_payload_available_\"+e),this.insertIntoDOM(e,t,s),this._domInteractive=(new Date).getTime(),console.timeStamp\u0026\u0026console.timeStamp(\"DOMInteractive\"),\"embedded-app\"===e\u0026\u0026(this._ensemble.waitingForCss=!0),new ResourceLoader({stylesheets:this.stylesheets},(()=\u003e{this._showPageletElement(e),\"embedded-app\"===e\u0026\u0026(this._ensemble.waitingForCss=!1,this._ensemble.mark_tti_callback()),jsStopwatch.markSpan(\"dws_pagelet_css_loaded_\"+e),jsStopwatch.markSpan(\"dws_pagelet_load_stylesheet_\"+this.name),jsStopwatch.markSpan(\"dws_pagelet_load_stylesheet_uncached_\"+this.name),r()}))}getDOMInteractive(){if(!this._domInteractive)throw new Error(\"DOMInteractive has not been logged\");return this._domInteractive}}class JSOnlyPagelet extends RequireJSPagelet{constructor(e,t,s){super(Object.assign(Object.assign({},e),{driver:\"requirejs\",html:\"\"}),t,s)}_showPageletElement(e){}insertIntoDOM(e){jsStopwatch.markSpan(\"dws_pagelet_render_on_page_\"+e),jsStopwatch.markSpan(\"dws_pagelet_render_on_page_\"+this.name),jsStopwatch.markSpan(\"dws_pagelet_render_on_page_uncached_\"+this.name)}}function removeServiceWorker(){navigator.serviceWorker\u0026\u0026navigator.serviceWorker.getRegistration().then((function(e){e\u0026\u0026e.unregister()}))}class Ensemble{constructor(){this.bufferedEventEmitter=null,this.globalHeaderEventEmitter=null,this.eventEmitter=null,this.ttiTracker=new TTITracker,this.ttiMarked=!1,this.ttiTracker.callAfterTTI((()=\u003ethis.ttiMarked=!0)),this.pageletsByElemId={},this.waitingForCss=!1,this.mark_tti_callback=()=\u003e{},this.constModules={},this.constModuleCallbacks={},this._placeholderLoadedTrackerByElemId={},this.exceptionInfo=null,registerEnsembleStopwatch(),jsStopwatch.markSpan(\"dws_ensemble_constructor\")}init(e){const t=jsStopwatch.getNow();if(jsStopwatch.markSpan(\"dws_ensemble_begin_init\"),!e)throw new Error(\"Missing ensemble configuration\");if(!e.viewerData)throw new Error(\"Missing viewer data needed to initialize the Ajax calls afterwards\");if(!e.jsCsrfCookieName)throw new Error(\"Missing jsCsrfCookieName info for CSRF cookie\");if(!e.frameProtection)throw new Error(\"Missing frameProtection\");if(!e.errorStrings)throw new Error(\"Missing errorStrings\");if(!e.dwsPageName)throw new Error(\"Missing dwsPageName\");if(!e.exceptionInfo)throw new Error(\"Missing exceptionInfo\");if(doFrameBust(e.frameProtection),!e.ttiTimeoutMS)throw new Error(\"Missing ttiTimeoutMS needed to ensure post-TTI pagelets always load\");this.ttiTracker.startTTITimeout(e.ttiTimeoutMS,(()=\u003ejsStopwatch.markSpan(\"dws_tti_timeout_expired\"))),jsStopwatch.markSpan(\"dws_tti_timeout_started\"),this.viewer=new Viewer(e.viewerData),this.jsCsrfCookieName=e.jsCsrfCookieName,this._embeddedAppPagelet=null,this.errorStrings=e.errorStrings,this.dwsPageName=e.dwsPageName,this.exceptionInfo=e.exceptionInfo,this.lazyLoadJQuery=e.lazyLoadJQuery;try{this.switchedAccounts=!!sessionStorage.getItem(\"Ensemble.switchedAccounts\"),sessionStorage.removeItem(\"Ensemble.switchedAccounts\")}catch(e){console.error(e),this.switchedAccounts=!1}removeServiceWorker(),this.prefetchedResourcesLoader=new ResourceLoader({stylesheets:e.prefetchResources.stylesheets,scripts:e.prefetchResources.scripts}),window.addRequireLoadCallback((()=\u003e{if(window.requireContexts.externals){const e=this.lazyLoadJQuery?[\"react\",\"react-dom\"]:[\"jquery\",\"react\",\"react-dom\"];window.requireContexts.externals.require(e,(()=\u003e{jsStopwatch.markSpan(\"dws_core_externals_loaded\")}))}}));const s=jsStopwatch.getNow(),r=cpuIdleMonitor.getCPUTimeSnapshot(s\u0026\u0026t?s-t:void 0);jsStopwatch.markSpan(\"dws_ensemble_init\",{annotations:r})}getPageName(){return this.dwsPageName}getExceptionInfo(){return this.exceptionInfo}markTTI(){this.ttiTracker.markTTI()}stopwatchPagelet(e,t){const s=cpuIdleMonitor.getCPUTimeSnapshot(),r=\"dws_\"+e+\"_\"+t;console.timeStamp\u0026\u0026console.timeStamp(r),jsStopwatch.markSpan(r,{annotations:s})}insertAfterTTI(e){this.ttiTracker.callAfterTTI((()=\u003eevaluateScript(e,reportNonceMismatch)))}snapshotTimingProfile(){cpuIdleMonitor.stop();const e={idleCPUTime:cpuIdleMonitor.getIdleCPUTime(),totalTrackedCPUTime:cpuIdleMonitor.getTotalTrackedTime()},t=cpuIdleMonitor.getUntrackedTimeSinceTTFB();return t\u0026\u0026(e.untrackedTimeAfterFirstByte=t),e}showError(e){document.body.innerHTML='\\n      \u003clink href=\"https://cfl.dropboxstatic.com{\\'/static/metaserver/static/css/font_paper_atlas_grotesk.css\\'}\" rel=\"stylesheet\"\u003e\\n    ';const t=document.createElement(\"div\");t.id=\"dws-error\",t.innerHTML=`\\n      \u003cdiv class=\"embedded-app__error-state\"\u003e\\n        \u003cimg alt=\"\" src=\"https://assets.dropbox.com/www/en-us/illustrations/spot/target-miss.svg\" /\u003e\\n        \u003cp\u003e${this.errorStrings.sorryForTheHiccup}\u003c/p\u003e\\n        \u003cp\u003e\\n          \u003ca class=\"reload-link\" href=\"#\"\u003e\\n            ${this.errorStrings.tryRefreshingYourPage}\\n          \u003c/a\u003e\\n        \u003c/p\u003e\\n        \u003cspan id=\"debug_info\"\u003e\u003c/span\u003e\\n      \u003c/div\u003e\\n    `,document.body.appendChild(t);const s=document.querySelectorAll(\".embedded-app__error-state .reload-link\");for(let e=0;e\u003cs.length;e++)s[e].addEventListener(\"click\",(()=\u003ewindow.location.reload()))}setupPlaceholder(e,t,s,r,n,o,i){if(!this.prefetchedResourcesLoader.isDoneLoading())return void this.prefetchedResourcesLoader.addOnLoadCallback((()=\u003e{this.setupPlaceholder(e,t,s,r,n,o,i)}));const a=new EventTracker;this._placeholderLoadedTrackerByElemId[s]=a,this._setupPagelet(e,t,!1,(()=\u003e{}),(()=\u003ea.markEvent()),r,n,o,i)}setupPagelet(e,t,s,r,n,o,i,a,l){if(!this.prefetchedResourcesLoader.isDoneLoading())return void this.prefetchedResourcesLoader.addOnLoadCallback((()=\u003e{this.setupPagelet(e,t,s,r,n,o,i,a)}));const c=()=\u003e{this._setupPagelet(e,t,s,r,(()=\u003enull==l?void 0:l()),n,o,i,a)},d=this._placeholderLoadedTrackerByElemId[e];null!=d?d.callAfterEvent(c):c()}_setupPagelet(e,t,s,r,n,o,i,a,l){const c=validatePageletConfig(t);jsStopwatch.markSpan(\"dws_before_internal_setup_pagelet_uncached_\"+c.name);const d={pagelet_client_load_time:(new Date).getTime()/1e3,pagelet_element_id:e,pagelet_name:t.name,repo_rev:o,served_by_hostname:i,yaps_project:a,yaps_deployment:l};let h;switch(t.driver){case\"requirejs\":h=new RequireJSPagelet(t,d,this);break;case\"js_only\":h=new JSOnlyPagelet(t,d,this);break;case\"simple\":h=new SimplePagelet(t,d);break;default:throw new Error(`unrecognized driver ${t.driver}`)}this.pageletsByElemId[e]=h,\"embedded-app\"===e\u0026\u0026(this._embeddedAppPagelet=h),h.initializeLoad(e,s,this.ttiTracker,n),r\u0026\u0026(s?this.ttiTracker.callAfterTTI(r):r())}loadCSS(e,t){new ResourceLoader({stylesheets:e,dataAttributes:t?{\"data-pagelet\":t}:void 0})}getEmbeddedAppDOMInteractive(){if(!this._embeddedAppPagelet)throw new Error(\"Cannot get DOMInteractive, embedded app is not initialized\");return this._embeddedAppPagelet.getDOMInteractive()}getPageletInfoForExceptionReporting(){const e=[];for(const t in this.pageletsByElemId)this.pageletsByElemId.hasOwnProperty(t)\u0026\u0026e.push(this.pageletsByElemId[t].exceptionInfo);return e}requestConstModule(e,t,s){this.constModules[t]||(this.constModules[t]={}),this.constModuleCallbacks[t]||(this.constModuleCallbacks[t]={}),e in this.constModules[t]?s(this.constModules[t][e]):(this.constModuleCallbacks[t][e]||(this.constModuleCallbacks[t][e]=[]),this.constModuleCallbacks[t][e].push(s))}defineConstModule(e,t,s){if(this.constModules[t]||(this.constModules[t]={}),e in this.constModules[t])return;this.constModules[t][e]=s;const r=this.constModuleCallbacks[t]\u0026\u0026this.constModuleCallbacks[t][e];if(r){for(const e of r)e(s);this.constModuleCallbacks[t][e]=[]}}processChunk(e,t,s){const r=window.performance\u0026\u0026window.location.search.indexOf(\"show_debug_spans\")\u003e-1;r\u0026\u0026window.performance.mark(`${e} ${t} processChunk start`);const n=jsStopwatch.getNow();s();const o=jsStopwatch.getNow();n\u0026\u0026o\u0026\u0026(cpuIdleMonitor.updateCPUTimes({forceUpdate:!0,currentCPUSpan:o-n}),jsStopwatch.markSpan(`dws-processChunk-${e}-${t}`,{startTime:n,endTime:o,annotations:cpuIdleMonitor.getCPUTimeSnapshot(o-n)})),r\u0026\u0026(window.performance.mark(`${e} ${t} processChunk end`),window.performance.measure(`${e} ${t} processChunk`,`${e} ${t} processChunk start`,`${e} ${t} processChunk end`))}preLoadJs(e,t){window.preLoadFile\u0026\u0026window.preLoadFile(e)}_hasOnlyClientHandledQueryParams(e){const t=e.split(\"\u0026\");for(const e of t){if(!(e.split(\"=\")[0]in CLIENT_HANDLED_QUERY_PARAMS))return!1}return!0}_getCookieValue(e){const t=document.cookie.match(\"(^|; )\"+e+\"=([^;]*)\");return t?t[2]:\"\"}getCsrfToken(){return this._getCookieValue(this.jsCsrfCookieName)}getJSStopwatchData(){const e=jsStopwatch.getData();return window.timingCraftPrefetchStart\u0026\u0026(e.craft_fast_prefetch_start={end:window.timingCraftPrefetchStart,start:0,annotations:{}}),window.timingCraftPrefetchDone\u0026\u0026(e.craft_fast_prefetch_done={end:window.timingCraftPrefetchDone,start:0,annotations:{}}),e}}window.ensemble=new Ensemble})();\n\u003c/script\u003e  \u003c/head\u003e\u003cbody\u003e\u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003eif (window.performance \u0026\u0026 window.performance.mark) { window.performance.mark(\"body_start\"); }\u003c/script\u003e \u003cdiv id=\"pagelet-0\"\u003e\u003c/div\u003e\u003cdiv id=\"pagelet-1\"\u003e\u003c/div\u003e\u003cdiv id=\"pagelet-2\"\u003e\u003c/div\u003e\u003cdiv id=\"pagelet-3\"\u003e\u003c/div\u003e\u003cdiv id=\"pagelet-4\"\u003e\u003c/div\u003e  \u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003e addRequireLoadCallback(function(){\ndefine(\"metaserver/static/js/modules/constants/page_load\", [], function() {\n            return {\"COUNTRY_OVERRIDE\": false, \"PUBLIC_MODE_OVERRIDE\": null, \"REPO_REV\": \"e27313f4c53a40bd60f54babd8daa5ade9ced7bc\", \"HOSTNAME\": \"atlas-dropins-live-prod-pdx-564b7c88cb-s6s6d\", \"YAPS_DEPLOYMENT\": \"prod-pdx\", \"YAPS_PROJECT\": \"atlasservlet.dropins-live\", \"PAGE_LOCALE\": \"de\", \"SESSION_ID\": \"148131182027354817762016026028562153939\", \"IS_SELENIUM_TEST\": false, \"__esModule\": true};\n        });\n        define(\"metaserver/static/js/modules/constants/request\", [], function() {\n                var o = {\"LOGGED_OUT_X_DROPBOX_UID\": -1, \"IS_HTTP2\": true, \"PAGE_LOAD_TIME\": 1704061203, \"REQUEST_ID\": \"ed3a2f982fbc44ee85d2e8dff6a516e7\", \"REQUEST_START_TIME\": 1704061203400, \"REQUEST_TRACING_ENABLED\": false, \"HTTP3_SUPPORT_ENABLED\": false, \"__esModule\": true};\n                /* global: ensemble is global for maestro pages */\n                if (window.ensemble \u0026\u0026 window.ensemble.getRequestId) {\n                    o.REQUEST_ID = ensemble.getRequestId();\n                }\n                return o;\n            });\n\n/* global: require */\nrequire.config({context: \"externals\"})([\"metaserver/static/js/modules/constants/page_load\"]);\n});\n\u003c/script\u003e\u003cscript type=\"text/javascript\" nonce=\"AwAFyR8mbB48mik7l2cB\"\u003e\n            /* global: configureRequire comes from the\n               fake_require_snippet (ui/page/script_tags.py) */\n            configureRequire({\"baseUrl\": \"https://cfl.dropboxstatic.com/\", \"bundles\": {\"pkg-core\": [\"js/browser/browser_detection\"], \"pkg-exception-reporting\": [\"js/browser/cookies\", \"js/common/exception_tag_registry\", \"metaserver/static/js/clean/csrf\", \"metaserver/static/js/core/assert\", \"metaserver/static/js/core/exception\", \"metaserver/static/js/core/exception_info\", \"metaserver/static/js/core/tracekit\", \"metaserver/static/js/core/xhr\", \"metaserver/static/prod_assets_web_modules/tracekit\"], \"pkg-api_v2\": [\"metaserver/static/js/api_v2/client_base\", \"metaserver/static/js/api_v2/error\", \"metaserver/static/js/api_v2/noauth_client\", \"metaserver/static/js/api_v2/transport/fetch\", \"metaserver/static/js/api_v2/types\", \"metaserver/static/js/core/transport/fetch_utils\"], \"pkg-growth_features\": [\"metaserver/static/js/clean/server_side_client_view_bridge\"], \"pkg-api_v2-extra\": [\"metaserver/static/js/core/attribution_header\", \"metaserver/static/prod_assets_web_modules/eventemitter3\"], \"pkg-core-url-and-css\": [\"metaserver/static/js/core/uri\"], \"pkg-timing\": [\"metaserver/static/js/metrics/index\", \"metaserver/static/js/metrics/server_view_sink\", \"metaserver/static/js/metrics/unload\", \"metaserver/static/js/uuid/insecure_uuid\", \"typescript/dropbox/proto/apex_metrics_web/apex_metrics_web_pb\", \"typescript/libraries/shared/apex-metrics/src/clock\", \"typescript/libraries/shared/apex-metrics/src/executor\", \"typescript/libraries/shared/apex-metrics/src/hyperloglog\", \"typescript/libraries/shared/apex-metrics/src/index\", \"typescript/libraries/shared/apex-metrics/src/instant\", \"typescript/libraries/shared/apex-metrics/src/internal\", \"typescript/libraries/shared/apex-metrics/src/metrics\", \"typescript/libraries/shared/apex-metrics/src/metrics_reporter\", \"typescript/libraries/shared/apex-metrics/src/murmur\", \"typescript/libraries/shared/apex-metrics/src/no_op\", \"typescript/libraries/shared/apex-metrics/src/sink/apiv2_sink\", \"typescript/libraries/shared/apex-metrics/src/sink/coin\", \"typescript/libraries/shared/apex-metrics/src/sink/database\", \"typescript/libraries/shared/apex-metrics/src/sink/filter\", \"typescript/libraries/shared/apex-metrics/src/sink/index\", \"typescript/libraries/shared/apex-metrics/src/sink/instrumentation\", \"typescript/libraries/shared/apex-metrics/src/sink/platform\", \"typescript/libraries/shared/apex-metrics/src/sink/serialization\", \"typescript/libraries/shared/apex-metrics/src/types\", \"typescript/libraries/shared/apex-metrics/src/validate\"], \"pkg-timing-helpers\": [\"metaserver/static/js/user_centric_perf_metrics/component_visually_complete/ajax\", \"metaserver/static/js/user_centric_perf_metrics/component_visually_complete/constants\", \"metaserver/static/js/user_centric_perf_metrics/component_visually_complete/network_idle_observable\", \"metaserver/static/prod_assets_web_modules/@dropbox/ttvc\"], \"pkg-misc2\": [\"metaserver/static/prod_assets_web_modules/@bufbuild/protobuf\", \"metaserver/static/prod_assets_web_modules/common/any_pb\"], \"pkg-external\": [\"metaserver/static/prod_assets_web_modules/common/_commonjsHelpers\", \"metaserver/static/prod_assets_web_modules/tslib\"], \"pkg-react\": [\"metaserver/static/prod_assets_web_modules/react\", \"metaserver/static/prod_assets_web_modules/react-dom\"]}, \"context\": \"externals\", \"map\": {\"*\": {\"metaserver/static/js/reactserver_stubs/__unstubbed_purify\": \"metaserver/static/prod_assets_web_modules/dompurify\", \"metaserver/static/js/modules/core/langpack\": \"json_loader!js/langpack/icu-de.json\", \"@adyen/adyen-web\": \"metaserver/static/prod_assets_web_modules/@adyen/adyen-web\", \"@bufbuild/connect-web\": \"metaserver/static/prod_assets_web_modules/@bufbuild/connect-web\", \"@bufbuild/protobuf\": \"metaserver/static/prod_assets_web_modules/@bufbuild/protobuf\", \"@dropbox/api-v2-client\": \"metaserver/static/prod_assets_web_modules/@dropbox/api-v2-client\", \"@dropbox/dig-components/accordion\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/accordion\", \"@dropbox/dig-components/aspect_ratio\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/aspect_ratio\", \"@dropbox/dig-components/avatar\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/avatar\", \"@dropbox/dig-components/badge\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/badge\", \"@dropbox/dig-components/badges\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/badges\", \"@dropbox/dig-components/banner\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/banner\", \"@dropbox/dig-components/breadcrumb\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/breadcrumb\", \"@dropbox/dig-components/buttons\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/buttons\", \"@dropbox/dig-components/card\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/card\", \"@dropbox/dig-components/carousel\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/carousel\", \"@dropbox/dig-components/chip\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/chip\", \"@dropbox/dig-components/chips\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/chips\", \"@dropbox/dig-components/click_outside\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/click_outside\", \"@dropbox/dig-components/combinations\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/combinations\", \"@dropbox/dig-components/controls\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/controls\", \"@dropbox/dig-components/date_picker\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/date_picker\", \"@dropbox/dig-components/drawer\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/drawer\", \"@dropbox/dig-components/dropzone\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/dropzone\", \"@dropbox/dig-components/form_row\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/form_row\", \"@dropbox/dig-components/global_header\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/global_header\", \"@dropbox/dig-components/hooks\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/hooks\", \"@dropbox/dig-components/jest_after_env_setup\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/jest_after_env_setup\", \"@dropbox/dig-components/layer\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/layer\", \"@dropbox/dig-components/list\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/list\", \"@dropbox/dig-components/menu\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/menu\", \"@dropbox/dig-components/modal\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/modal\", \"@dropbox/dig-components/motion\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/motion\", \"@dropbox/dig-components/overlay\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/overlay\", \"@dropbox/dig-components/progress_indicators\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/progress_indicators\", \"@dropbox/dig-components/skeleton\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/skeleton\", \"@dropbox/dig-components/slider\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/slider\", \"@dropbox/dig-components/snackbar\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/snackbar\", \"@dropbox/dig-components/stepper\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/stepper\", \"@dropbox/dig-components/table\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/table\", \"@dropbox/dig-components/tabs\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/tabs\", \"@dropbox/dig-components/text_fields\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/text_fields\", \"@dropbox/dig-components/tooltips\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/tooltips\", \"@dropbox/dig-components/truncate\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/truncate\", \"@dropbox/dig-components/typeahead\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/typeahead\", \"@dropbox/dig-components/typography\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-components/typography\", \"@dropbox/dig-content-icons\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-content-icons\", \"@dropbox/dig-foundations\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-foundations\", \"@dropbox/dig-icons\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-icons\", \"@dropbox/dig-icons/assets\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-icons/assets\", \"@dropbox/dig-illustrations\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations\", \"@dropbox/dig-illustrations/hero/apple-picking\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/apple-picking\", \"@dropbox/dig-illustrations/hero/archeologist-dig\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/archeologist-dig\", \"@dropbox/dig-illustrations/hero/artist-painter\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/artist-painter\", \"@dropbox/dig-illustrations/hero/assess-with-purpose\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/assess-with-purpose\", \"@dropbox/dig-illustrations/hero/balance-woman\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/balance-woman\", \"@dropbox/dig-illustrations/hero/baton-pass\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/baton-pass\", \"@dropbox/dig-illustrations/hero/bike-courier\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/bike-courier\", \"@dropbox/dig-illustrations/hero/bike-shop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/bike-shop\", \"@dropbox/dig-illustrations/hero/bird-perch\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/bird-perch\", \"@dropbox/dig-illustrations/hero/birthday-picture-family\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/birthday-picture-family\", \"@dropbox/dig-illustrations/hero/bowl-empty\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/bowl-empty\", \"@dropbox/dig-illustrations/hero/bridge\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/bridge\", \"@dropbox/dig-illustrations/hero/browsing-supermarket\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/browsing-supermarket\", \"@dropbox/dig-illustrations/hero/checking-workload\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/checking-workload\", \"@dropbox/dig-illustrations/hero/checklist-nursery\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/checklist-nursery\", \"@dropbox/dig-illustrations/hero/coffee-shop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/coffee-shop\", \"@dropbox/dig-illustrations/hero/collaboration-remote\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/collaboration-remote\", \"@dropbox/dig-illustrations/hero/collaboration-review\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/collaboration-review\", \"@dropbox/dig-illustrations/hero/community-garden\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/community-garden\", \"@dropbox/dig-illustrations/hero/conference-call\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/conference-call\", \"@dropbox/dig-illustrations/hero/construction-planning\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/construction-planning\", \"@dropbox/dig-illustrations/hero/coupon\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/coupon\", \"@dropbox/dig-illustrations/hero/courtroom\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/courtroom\", \"@dropbox/dig-illustrations/hero/crystal-ball\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/crystal-ball\", \"@dropbox/dig-illustrations/hero/deliver-boxes\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/deliver-boxes\", \"@dropbox/dig-illustrations/hero/delivery-truck\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/delivery-truck\", \"@dropbox/dig-illustrations/hero/desk-laptop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/desk-laptop\", \"@dropbox/dig-illustrations/hero/desk-notebook\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/desk-notebook\", \"@dropbox/dig-illustrations/hero/developer-desk-1\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/developer-desk-1\", \"@dropbox/dig-illustrations/hero/developer-desk-2\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/developer-desk-2\", \"@dropbox/dig-illustrations/hero/developer-esignature\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/developer-esignature\", \"@dropbox/dig-illustrations/hero/developer-esignature-2\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/developer-esignature-2\", \"@dropbox/dig-illustrations/hero/developer-esignature-3\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/developer-esignature-3\", \"@dropbox/dig-illustrations/hero/device\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/device\", \"@dropbox/dig-illustrations/hero/device-home-office\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/device-home-office\", \"@dropbox/dig-illustrations/hero/device-install\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/device-install\", \"@dropbox/dig-illustrations/hero/devices-couch\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/devices-couch\", \"@dropbox/dig-illustrations/hero/dia-de-muertos\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/dia-de-muertos\", \"@dropbox/dig-illustrations/hero/diwali\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/diwali\", \"@dropbox/dig-illustrations/hero/document-pile\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/document-pile\", \"@dropbox/dig-illustrations/hero/dropbox-delivers\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/dropbox-delivers\", \"@dropbox/dig-illustrations/hero/esignature-laptop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/esignature-laptop\", \"@dropbox/dig-illustrations/hero/esignature-template\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/esignature-template\", \"@dropbox/dig-illustrations/hero/family-gathering\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/family-gathering\", \"@dropbox/dig-illustrations/hero/fingerprint-scanner\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/fingerprint-scanner\", \"@dropbox/dig-illustrations/hero/fleet-of-ships\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/fleet-of-ships\", \"@dropbox/dig-illustrations/hero/group-huddle\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/group-huddle\", \"@dropbox/dig-illustrations/hero/handshake-interview\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/handshake-interview\", \"@dropbox/dig-illustrations/hero/healthcare-doctor\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/healthcare-doctor\", \"@dropbox/dig-illustrations/hero/healthcare-therapist\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/healthcare-therapist\", \"@dropbox/dig-illustrations/hero/home-meditation\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/home-meditation\", \"@dropbox/dig-illustrations/hero/home-office\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/home-office\", \"@dropbox/dig-illustrations/hero/hospital-reception\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/hospital-reception\", \"@dropbox/dig-illustrations/hero/house-large\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/house-large\", \"@dropbox/dig-illustrations/hero/house-painting\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/house-painting\", \"@dropbox/dig-illustrations/hero/hr-virtual\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/hr-virtual\", \"@dropbox/dig-illustrations/hero/insurance-agent\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/insurance-agent\", \"@dropbox/dig-illustrations/hero/insurance-agent-desk\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/insurance-agent-desk\", \"@dropbox/dig-illustrations/hero/interview-lineup\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/interview-lineup\", \"@dropbox/dig-illustrations/hero/invest-in-success\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/invest-in-success\", \"@dropbox/dig-illustrations/hero/ipad-esignature\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/ipad-esignature\", \"@dropbox/dig-illustrations/hero/learn-to-unlearn\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/learn-to-unlearn\", \"@dropbox/dig-illustrations/hero/logging-in\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/logging-in\", \"@dropbox/dig-illustrations/hero/mapping-out-the-forest\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/mapping-out-the-forest\", \"@dropbox/dig-illustrations/hero/moving-boxes\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/moving-boxes\", \"@dropbox/dig-illustrations/hero/ocean-cargo-ship\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/ocean-cargo-ship\", \"@dropbox/dig-illustrations/hero/office-fax\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/office-fax\", \"@dropbox/dig-illustrations/hero/office-light-off\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/office-light-off\", \"@dropbox/dig-illustrations/hero/on-demand-business\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/on-demand-business\", \"@dropbox/dig-illustrations/hero/on-demand-warehouse\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/on-demand-warehouse\", \"@dropbox/dig-illustrations/hero/open-package\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/open-package\", \"@dropbox/dig-illustrations/hero/orchestra\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/orchestra\", \"@dropbox/dig-illustrations/hero/outdoor-signing\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/outdoor-signing\", \"@dropbox/dig-illustrations/hero/overflowing-file-cabinet\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/overflowing-file-cabinet\", \"@dropbox/dig-illustrations/hero/peaceful-gardening\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/peaceful-gardening\", \"@dropbox/dig-illustrations/hero/phone-picture-family\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/phone-picture-family\", \"@dropbox/dig-illustrations/hero/phone-picture-friends\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/phone-picture-friends\", \"@dropbox/dig-illustrations/hero/procurement-shipping-container\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/procurement-shipping-container\", \"@dropbox/dig-illustrations/hero/procurement-small-business\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/procurement-small-business\", \"@dropbox/dig-illustrations/hero/real-estate-buyer\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/real-estate-buyer\", \"@dropbox/dig-illustrations/hero/real-estate-sign\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/real-estate-sign\", \"@dropbox/dig-illustrations/hero/realtor\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/realtor\", \"@dropbox/dig-illustrations/hero/receive-fax\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/receive-fax\", \"@dropbox/dig-illustrations/hero/relaxed-working-from-home\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/relaxed-working-from-home\", \"@dropbox/dig-illustrations/hero/remote-outside-working\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/remote-outside-working\", \"@dropbox/dig-illustrations/hero/remote-work\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/remote-work\", \"@dropbox/dig-illustrations/hero/roadblock\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/roadblock\", \"@dropbox/dig-illustrations/hero/scan\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/scan\", \"@dropbox/dig-illustrations/hero/security-archive\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/security-archive\", \"@dropbox/dig-illustrations/hero/security-camera-weather\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/security-camera-weather\", \"@dropbox/dig-illustrations/hero/security-display-case\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/security-display-case\", \"@dropbox/dig-illustrations/hero/send-receive-fax\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/send-receive-fax\", \"@dropbox/dig-illustrations/hero/share\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/share\", \"@dropbox/dig-illustrations/hero/share-idea\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/share-idea\", \"@dropbox/dig-illustrations/hero/sharing-box\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/sharing-box\", \"@dropbox/dig-illustrations/hero/ship\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/ship\", \"@dropbox/dig-illustrations/hero/shipyard\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/shipyard\", \"@dropbox/dig-illustrations/hero/side-mirror-view\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/side-mirror-view\", \"@dropbox/dig-illustrations/hero/sign\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/sign\", \"@dropbox/dig-illustrations/hero/signature-desktop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/signature-desktop\", \"@dropbox/dig-illustrations/hero/signature-digital\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/signature-digital\", \"@dropbox/dig-illustrations/hero/signature-paper\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/signature-paper\", \"@dropbox/dig-illustrations/hero/sports-stadium\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/sports-stadium\", \"@dropbox/dig-illustrations/hero/stationary-bike\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/stationary-bike\", \"@dropbox/dig-illustrations/hero/students-1\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/students-1\", \"@dropbox/dig-illustrations/hero/students-2\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/students-2\", \"@dropbox/dig-illustrations/hero/study-group\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/study-group\", \"@dropbox/dig-illustrations/hero/supreme-court\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/supreme-court\", \"@dropbox/dig-illustrations/hero/team-cheerleaders\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/team-cheerleaders\", \"@dropbox/dig-illustrations/hero/team-esignature\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/team-esignature\", \"@dropbox/dig-illustrations/hero/team-filmmakers\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/team-filmmakers\", \"@dropbox/dig-illustrations/hero/team-hands\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/team-hands\", \"@dropbox/dig-illustrations/hero/team-hike\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/team-hike\", \"@dropbox/dig-illustrations/hero/team-lift\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/team-lift\", \"@dropbox/dig-illustrations/hero/tech-data-center\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/tech-data-center\", \"@dropbox/dig-illustrations/hero/tech-laptop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/tech-laptop\", \"@dropbox/dig-illustrations/hero/tech-research-lab\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/tech-research-lab\", \"@dropbox/dig-illustrations/hero/telescope\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/telescope\", \"@dropbox/dig-illustrations/hero/thinking\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/thinking\", \"@dropbox/dig-illustrations/hero/to-do-list\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/to-do-list\", \"@dropbox/dig-illustrations/hero/toss-wastebasket\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/toss-wastebasket\", \"@dropbox/dig-illustrations/hero/travel-backpack\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/travel-backpack\", \"@dropbox/dig-illustrations/hero/travel-hike\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/travel-hike\", \"@dropbox/dig-illustrations/hero/travel-market\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/travel-market\", \"@dropbox/dig-illustrations/hero/travel-scooter\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/travel-scooter\", \"@dropbox/dig-illustrations/hero/travel-van\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/travel-van\", \"@dropbox/dig-illustrations/hero/van-cityscape\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/van-cityscape\", \"@dropbox/dig-illustrations/hero/vase-repair\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/vase-repair\", \"@dropbox/dig-illustrations/hero/vault\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/vault\", \"@dropbox/dig-illustrations/hero/video-analytics\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/video-analytics\", \"@dropbox/dig-illustrations/hero/video-call-collage\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/video-call-collage\", \"@dropbox/dig-illustrations/hero/video-editing\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/video-editing\", \"@dropbox/dig-illustrations/hero/video-stream\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/video-stream\", \"@dropbox/dig-illustrations/hero/vista\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/vista\", \"@dropbox/dig-illustrations/hero/warehouse-forklift\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/warehouse-forklift\", \"@dropbox/dig-illustrations/hero/water-cooler\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/water-cooler\", \"@dropbox/dig-illustrations/hero/whiteboard\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/whiteboard\", \"@dropbox/dig-illustrations/hero/work-desk\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-desk\", \"@dropbox/dig-illustrations/hero/work-desk-headset\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-desk-headset\", \"@dropbox/dig-illustrations/hero/work-desk-plant\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-desk-plant\", \"@dropbox/dig-illustrations/hero/work-desk-video-call\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-desk-video-call\", \"@dropbox/dig-illustrations/hero/work-from-home-1\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-from-home-1\", \"@dropbox/dig-illustrations/hero/work-from-home-2\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-from-home-2\", \"@dropbox/dig-illustrations/hero/work-from-home-3\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-from-home-3\", \"@dropbox/dig-illustrations/hero/work-from-home-4\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-from-home-4\", \"@dropbox/dig-illustrations/hero/work-from-home-5\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-from-home-5\", \"@dropbox/dig-illustrations/hero/work-mug\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-mug\", \"@dropbox/dig-illustrations/hero/work-outside\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/work-outside\", \"@dropbox/dig-illustrations/hero/worker-cafe\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/worker-cafe\", \"@dropbox/dig-illustrations/hero/workshop-integration\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/workshop-integration\", \"@dropbox/dig-illustrations/hero/workshop-tools\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/hero/workshop-tools\", \"@dropbox/dig-illustrations/spot/analyze\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/analyze\", \"@dropbox/dig-illustrations/spot/artist-painter\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/artist-painter\", \"@dropbox/dig-illustrations/spot/artist-sculptor\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/artist-sculptor\", \"@dropbox/dig-illustrations/spot/attention-knock\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/attention-knock\", \"@dropbox/dig-illustrations/spot/attention-ring\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/attention-ring\", \"@dropbox/dig-illustrations/spot/balloon-gone\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/balloon-gone\", \"@dropbox/dig-illustrations/spot/balloon-pop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/balloon-pop\", \"@dropbox/dig-illustrations/spot/bike-1\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/bike-1\", \"@dropbox/dig-illustrations/spot/bike-2\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/bike-2\", \"@dropbox/dig-illustrations/spot/bike-courier\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/bike-courier\", \"@dropbox/dig-illustrations/spot/bike-shop\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/bike-shop\", \"@dropbox/dig-illustrations/spot/bird-perch\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/bird-perch\", \"@dropbox/dig-illustrations/spot/bowl-empty\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/bowl-empty\", \"@dropbox/dig-illustrations/spot/box-empty\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/box-empty\", \"@dropbox/dig-illustrations/spot/box-empty-link\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/box-empty-link\", \"@dropbox/dig-illustrations/spot/browser-extension\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/browser-extension\", \"@dropbox/dig-illustrations/spot/building-office\": \"metaserver/static/prod_assets_web_modules/@dropbox/dig-illustrations/spot/building-office\", \"@dropbox/dig-illustrations/spot/building-storefront\": \"metase…\n\n---\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefgsus%2Fgood-github","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdefgsus%2Fgood-github","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefgsus%2Fgood-github/lists"}