userJames Kingcancel
reposboxcancel

991 Commits over 1,369 Days - 0.03cph!

1 Year Ago
Fixed VarClass sometimes getting stuck rebuilding every frame NeedsRebuild was getting set to true during the rebuild, so it'd keep doing it every tick
1 Year Ago
Failing async method test Better support for parsing generated names with generic parameter count Hotload generated name refactor, fixing async state machine types
1 Year Ago
Failing test for lambdas declared in non-swapped generic methods But with swapped type parameters Fixed test in 8a2bb255285d1e47c1314b70cd47f5ef92a2b21d Log error when encountering unhandled generated types
1 Year Ago
Implemented a simple assembly resolver for Tools Allows hotload to make more valid substitutions Cleanup Failing hotload tests for lambdas in static constructors Fixed finding scope method ordinals of static constructors Stop expecting every method to have a scope ordinal Fixed IsMatchingType(typeRef, type) with nested types Fixed ResolveMethod() with a static constructor ref Fix upgrading lambda display class instances that are found in the wild GetNewType consistency Now returns null to mean a substitution couldn't be found Added failing generic delegate test Organised and documented delegate hotloading tests Fixed AreEqualTypes when exactly one param is null AreEquivalentTypes(old, new) refactor Fixed finding substitutions for generic parameters
1 Year Ago
Fixed AreEqualTypes when exactly one param is null AreEquivalentTypes(old, new) refactor Fixed finding substitutions for generic parameters
1 Year Ago
Added failing generic delegate test Organised and documented delegate hotloading tests
1 Year Ago
Implemented a simple assembly resolver for Tools Allows hotload to make more valid substitutions Cleanup Failing hotload tests for lambdas in static constructors Fixed finding scope method ordinals of static constructors Stop expecting every method to have a scope ordinal Fixed IsMatchingType(typeRef, type) with nested types Fixed ResolveMethod() with a static constructor ref Fix upgrading lambda display class instances that are found in the wild GetNewType consistency Now returns null to mean a substitution couldn't be found
1 Year Ago
1 Year Ago
GetNewType consistency Now returns null to mean a substitution couldn't be found
1 Year Ago
Fixed ResolveMethod() with a static constructor ref Fix upgrading lambda display class instances that are found in the wild
1 Year Ago
Cleanup Failing hotload tests for lambdas in static constructors Fixed finding scope method ordinals of static constructors Stop expecting every method to have a scope ordinal Fixed IsMatchingType(typeRef, type) with nested types
1 Year Ago
Implemented a simple assembly resolver for Tools Allows hotload to make more valid substitutions
1 Year Ago
Rip the bandaid off and stop looking for "GameSettings" meta, only "PackageSettings" Add search & button to display local maps for games with "this list only" map support Squashed commit of the following: commit f5d20681b7389cd09e9c877d4ea0d9e260762a44 Author: Rubat <3299036+robotboy655@users.noreply.github.com> Date: Mon Dec 5 21:48:02 2022 +0200 Delete Sandbox.Internal.Decals commit c9ed0a3acf8a248f4533109ddb63edba3a3c5330 Author: Rubat <3299036+robotboy655@users.noreply.github.com> Date: Mon Dec 5 21:43:19 2022 +0200 Remove obsoletes Removed Sandbox.SpotLightCone Removed Sandbox.SceneSpotLight.SpotCone Removed Sandbox.UI.DataSource.ArraySource Removed Sandbox.UI.DataSource.BaseDataSource Removed Sandbox.UI.DataSource.BindMethod Removed Sandbox.UI.DataSource.Property Removed Assert.True( bool ) in favor of Assert.True( bool, string=null ) Removed Assert.False( bool ) in favor of Assert.False( bool, string=null ) Removed Vector3.LerpTo( Vector3, float ) in favor of Vector3.LerpTo( Vector3, float, bool = true ) Removed Vector3.LerpTo( Vector3, Vector3 ) in favor of Vector3.LerpTo( Vector3, Vector3, bool = true ) Removed Sandbox.DecalSystem Nothing should be named "dynamic.*" anymore protocol++ Recompiled materials Trim slashes from shader path before compiling Update shaders.def Don't skip program when checking if shader is up to date if we failed to load the compiled version (it might not exist) memset shader header so we dont run into these issues that are caused by uninitialized memory Remove subview stuff from vr.cpp, not neded in our case Remove FSR, wasn't doing much and was causing issues with VR stencil, fix vr stencil debug Granular foveated rendering, still needs cleanup Remove old deprecated depth of field, cleanup checkerboard reconstruction Add convars for vr_foveated_rendering Get center lens position from HMD, pass foveation parameters to GPU Cleanup and update shader files Readd FSR for now, wouldn't be able to properly remove it until we have a good replacement, but don't bother with it if we're in VR Remove unused convars Tweak autofidelity, remove autofidelity for multigpu, add autofidelity for mobile while at it, fix typo Tie vr_foveated_rendering to autofidelity, optimize shaders a bit Fix rebase changes for shader assets Merge pull request #652 from Facepunch/vr-foveated-rendering VR Foveated Rendering Merge remote-tracking branch 'origin/master' into hotload-fixes
1 Year Ago
Apparently MakeArrayType( 1 ) != MakeArrayType() We can skip cached lambda instances now They'll still get upgraded if they're referenced in a non-cache field somewhere
1 Year Ago
Some more test cases for upgrading delegates Fixed resolving multi-dimensional array parameter methods ByRef and async method tests Fixed resolving method definitions with ByRef parameters Support for upgrading lambdas defined in async methods More array and ByRef fixes Type equivalence fixes
1 Year Ago
Failing test for lambdas with a generator context method Fixed upgrading lambdas with a generator context method Tests for finding definitions of methods involving generic parameters More generic type / method fixes in hotload Added failing test for handling removed lambda with a return type Test case for nested lambdas Fixed generating error delegate if original lambda had a return type
1 Year Ago
Experimental / PoC Limit stored custom inputs to a maximum of 256, removing older entries as new ones are added Added ButtonState intended for use with [ClientInput] Use TypeDescription to fetch property for [ClientInput] Add extensions for reading/writing Transform Add Transform.Read and Transform.Write Add support for Transform to [ClientInput] Added ButtonState.Pressed and ButtonState.Released with docs Fixed compile error from copy paste 🥴 Make ButtonState a struct again but add a method `Set` so it doesn't need to be a class for the property Revert "Make ButtonState a struct again but add a method `Set` so it doesn't need to be a class for the property" This reverts commit 6d29a14ea85614a2c91c8f670f73e5ebb30e60cf. Fixed IsDown / WasDown and also Pressed / Released being swapped Delta values for some stuff (only send stuff that changed since last cmd) Tidy up + add ManagedInputs Rename to PawnInput Just use TypeLibrary as its cached anyway Add comments + use TypeLibrary Add HasAttribute<T>() Merge branch 'master' into custom-client-input Don't add const to ArgPointer if asref is specified Rid of CUtlVectorByte in favor of direct byte arrays Make ButtonState a struct with implicit bool conversion Write dynamic assembly hash to managed input message. Check hashes match when deserializing, if they don't skip that input Merge branch 'master' into custom-client-input Prepare to move a bunch of stuff from user cmd to managed. Clear out eye angle stuff Start stripping out stuff that'll need implementing on pawn Merge branch 'master' into custom-client-input Match structs Input.LookDelta and Input.MoveDelta analog inputs + copy PawnInput props in MimicBot from target client Update (obsolete) player and controller examples to use the managed input / pawn inputs Try stripping out InputBuilder and see how it feels... Merge branch 'master' into custom-client-input Some extra docs + rename PawnInput to ClientInput Remove redundant inputs. Reverse yaw for bots Some additional documentation Move MimicBot to base addon Write -1 if entity is null Add ActiveChildInput and ensure children get added to Inventory on ClientSpawn so they match Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Can pass RenderAttributes into VertexBuffer.Draw Avoid conflicts Merge branch 'master' into custom-client-input Add Tony's change for always record voice in VR Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Remove code I added that wasn't needed Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge in Matt's Input.Pressed fix for when FPS is lower than tick rate Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Make sure StopProcessing is reset in Input.Process so that it isn't remembered next time Ensure InputDirection client input is consistently set to Input.AnalogMove for parity with old system Merge branch 'master' into custom-client-input Support extra types Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Early out if no managed inputs to write Additional types Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Fix crash when closing console and restoring default layout Fix unable to close/open game view dock Arrange View/ menu alphabetically Fix gameframe fullscreen Give Hammer asset browser object name and icon again Fixed changing asset types breaking paths with spaces in Asset Browser Added asset type locations to Everything in Hammer https://files.facepunch.com/rubat/1b0111b1/4YRjDUkg2p.png This only includes stuff that can be drag'n'dropped in Hammer Fix soundscape drag'n'drop not applying offset from hit surface New Outfit! - Bomber Jacket https://files.facepunch.com/daniel/1b0111b1/slack_sEoatXbAqn.png LODs and skinning adjustments coming. aoproxies: fix crash when a non-anim sceneobject has bones and aoproxies, the game used to override sceneobjects to be anim so this code made assumptions aoproxies: optimize loop over aoProxies by ref instead of copying Add SceneParticles.SetControlPoint that takes a snapshot Cleanup AO functions Make sure we have scene worlds before fetching one for the shape manager CShapeManager: all of this should be const auto& Can we stop pushing `#pragma optimize("",off)` to master Remove vr_ prefix from things that aren't actually dependent on VR vr_msaa is VR exclusive Typo :S Bomber Jacket LODs Plus adjustments to Hivis Jacket LOD3 shape Recursive content recompile Skater Helmet LODs + Modeldoc adjustments to Hivis light prefabs tweak, adding missing LOD to some models, model physic setup Merge branch 'master' of sbox Copy over changes for shader resources Remove old .vfx, .vcs Forgot some vpc files Build content Update assettypes.txt Update resourcecompilersystem.cpp Forgot shader asset type images Impl GetErrorResource for shader type manager so we get an error shader when shader can't be found Enable all modes for error shader Recompile all core shader resources from master Update high_quality_reflections shader Recompile base shaders Update Graphics.Paint and PanelRenderer Update shaders.def Make damn sure all shaders are packed from vcs from master Material doesn't grab shaders from resource system anymore until I figure out why it was fucking up Switch back to using resource system to get shaders for material, remove vfx dictionary Free shaders for static combos that have zero ref count Destroy static combo shaders when deallocating shader resource Create all modes for error material.. again Switch to error resource if setting up static combos for mode fails Switch to ResourceIsError for other places that need to check if a shader is error Remove deallocate logs Simplify mat_reloadshaders, just do a shader and used materials blocking reload Fix assert on material layer destructor, static combo ref count should be fine to be zero here, we probably should reloaded shader update all_shaders.txt Allow access to material attributes without asserting, if modes have loaded Delete me_shaderselect.cpp Don't publish core/*.shader to steam 🦆 Update vfx_compile_helpers_d3d11.cpp update content from master Smart Jacket LODs removing test asset Merge branch 'master' of sbox Merge branch 'master' into shader-resources update core materials from master Added Input.SetViewAngles - actually sets view angles Use Input.SetViewAngles for setpos/setang & Game.MoveToSpawnpoint Added Go To option to entity list in tools (uses setpos concommand) Fix cable_dynamic entity not existing Add shader macros back in Fix crash hopefully stopping build-content from failing Merge branch 'master' into custom-client-input Merge branch 'master' into custom-client-input Merge fixes incompatible Merge pull request #651 from Facepunch/shader-resources Shader resources Build content Don't free shaders for unused static combos until I figure out why it's crashing Just get rid of FreeAllUnreferencedData, shaders are destroyed when resource is, so this shouldn't be needed and if it is we can do it better anyway particle procedural mat uses shaders/spritecard.shader for shader keyvalue Make mat_print_shaders work again, mostly just for my own use Make mat_print_shader_info work again null check resource data when deallocating shader resource (can this even happen tho?) assign layer shader to error resource if it couldn't load the shader we want Don't try to set default textures for raw material that has error shader Dont use GetErrorResource, it's fucking us up Don't try to deallocate error resource, because this is a thing that happens apparently :S Actually load all modes for error material, check for the actual error shader was wrong Remove refcount from vfx, the resource now has the refcount Add back ogniks fix for sboxgame/issues/issues/2533 Maps can use entities from addons tagged "map entity", these addons are mounted for the map independent of game and are accessible from Hammer entity tool Fallback to error shader if setting up static combos for mode fails Remove some parts of material editor still assuming .vfx so we can start phasing it out Compile optimized versions of all base addon shaders Force shaders changes in base to always compile optimized We keep pushing unoptimized shaders. End user ends up having to compile them all the time when they want to build optimized shaders. Lets force base to always be optimized so we don't make this mistake again Fix mat_reloadshaders not trimming properly, check if shader resource file even exists for good measure Revert back to the old way of reloading materials, blocking resource reload isn't stable Removed SteamVRImport as it was unused Fix mat_reloadshaders not finding all the proper materials it needs to reload Blocking load static combo requests, seeing little or no benefit to async and it's fucking us over Fix foliage shader always failing MD5 check, rare situation where the shader has a program defined (geometry shader) with no code inside Fix Graphics.DrawRoundedRectangle not drawing a border SetDefaultToRendersystemEmpty for vfxcompile, this should allow it to run on build server I hope Cleanup and strip native postprocess pipeline and shader, fix dx11 validation error, remove unused combos, features & attribute - remove unused convars: r_post_fxaa, r_post_vignette, r_post_film_grain, r_post_mirror_horizontal, r_post_mirror_vertical Add mat_free_shaders so I can see how many unreferenced shaders can be destroyed Build rendersystemempty when building shaders Fix directional lightmaps and tangents on shadingmodel (including blendable), cleanup blendable, make directional lightmap settings not user editable since they're bullshit for artists We always want fast compile on iterations Recompile blendable Unify alphatested depth prepass stuff to r_depth_prepass, force it to have conservative culling, fixes aliasing on what's otherwise a fine painting to be put in a museum https://i.imgur.com/l5kIX0T.png We do want to depth prepass in monitor views, it's much faster Revert "Unify alphatested depth prepass stuff to r_depth_prepass, force it to have conservative culling, fixes aliasing on what's otherwise a fine painting to be put in a museum" This reverts commit aef55245f9cb3c500db9e32259cbde7f4b9f616d. Load spritecard shader with the main shader manager manifest so hopefully map compiler always has it loaded BuildShaders.bat needs to build the whole resource system now because shaders and resources. So do that. Fixed numerous Rust models having incorrect collision We aren't actually encoding normals on standard shader, so let's fix that, also let's have it DXT5 instead of BC7 Allow to add non-forbidden headers to Http requests, we should replace this whole class soon Drop some shader related breadcrums Warn us if we can't open file stream for static combo decompression, I don't know if CUtlStreamBuffer warns us Fix editor crash on exit (causing layout to not save) Compile optimized base shaders again Redo public MSAA shader api & update glass/passthrough for it Should fix that random d3d11 error we get Fix potential NRE in Panel.TickInternal() OnAssetFileChanged doesn't throw an exception when the file was deleted Handle and report template parsing exception Fixed exception reporting wrongly classifying old addons as engine exceptions Fix menu exceptions getting ignored Error reporting classify tools propertly Update exception dsn This test is a bit subjective, lets give it more breathing room Moved network and api protocol into src/common/protocol.h, deleted unused version stuff Oops, unmangle engine.def Merge branch 'master' into custom-client-input Don't say we have a shader program if there's no vcs data for it, might fix us not being able to decompress some static combos More breadcrum info Remove Package.Query Clean up + document protocol stuff in c# Pass api protocol when querying packages Include program type in breadcrumb too Disable api protection unit tests (we're breaking the api now) Api++ Unit test fix Merge remote-tracking branch 'origin/custom-client-input' protocol++ Remove obsolete Refactor to assume we have Mono.Cecil, WIP method resolution Fixed server not correctly setting correct values for game settings Add OriginalViewAngles to Player Merge branch 'master' of github.com:Facepunch/sbox Updated game.minimal template to fix Input so people creating new projects won't be greeted with errors Clear buttons and AnalogMove for DevCamera Make Input.Clear internal as it's confusing (and server-side only). Update ThirdPersonCamera to use ClearButtons Merge branch 'master' of github.com:Facepunch/sbox Update ProjectConfig.Ident MinLength to 2 Fixed HotloadTests.Delegate11 Hotload message type consistency Warning: non-fatal, but recommend reloading the game Error: something went wrong that we should fix Fixed resolving nested type definitions Merge remote-tracking branch 'origin/master' into hotload-fixes
1 Year Ago
Split DelegateUpgrader up, mocked up same-named scope method solution
1 Year Ago
Easy case for delegate methods from non-swapped assemblies Failing delegate swap involving same-named methods Strategies for fixing HotloadTests.Delegate11
1 Year Ago
More diagnostics for TestAccessControl and OnAddonsCompile with scopes of each stage Fix asset.party sound(scapes) not loading for local maps unless they were opened in Hammer first Fixed Game Launcher play button not working on game start when the selected item is the first one Added upgraded docking system Fixed an issue with bind proxies change detection Fixes cases when the value of a bind proxy target or source changes after assigned but before the hash was calculated., making the 2 sides desynced until the next value change. Fixes sboxgame/issues/issues/2594 Minor cleanups Revert "Fixed an issue with bind proxies change detection" This reverts commit 25876a3af2d31f764e5ccbcc3774b36b39b992e1. Remove DisplayInfo.For cache, it sucked hard under parallelization - after thinking about the best way to do it, it doesn't need to be done really.. Can use TypeLibrary.GetDescription<T>() instead where it's already cached Fix Hammer Asset Browser not creating Update Facepunch.SymStore to .NET 7 Update Facepunch.SymStore.exe Fix crash caused by invalid vertex stages trying to be loaded on material compilation Embed shader macros so we know what combos are set when viewing shader debug info Update Facepunch.SymStore.exe Make Window.StatusBar able to handle late initialization of statusBar() - fixes Hammer asset browser assets disappearing due to native ptr in StatusBar being null Citizen/animgraph: increased long idle tag trigger time from 5 to 60 seconds Fixed an issue with bind proxies change detection but passes tests now Fixes cases when the value of a bind proxy target or source changes after assigned but before the hash was calculated., making the 2 sides desynced until the next value change. Fixes sboxgame/issues/issues/2594 Merge branch 'master' of sbox "Projcet" -> "Project" Merge remote-tracking branch 'origin/master' into hotload-fixes Get rid of soon-to-be-unused "context" arg in OnTryCreateNewInstance Some more permutations of lambda method types Big DelegateUpgrader rewrite * A lot more careful about matching generated methods that change name * Fixed case where swapping unchanged code would substitute in the wrong lambda method * Now replace lambdas we can't find a match for with one that throws a helpful error (before they would become null)
1 Year Ago
Stop watching System.Text.Json since we're clearing its cache now Ignore LiteDB types during hotload
1 Year Ago
Make hotload tests more strict Warn when encountering delegates that can't be upgraded Even simpler way to clear System.Text.Json cache on hotload Readonly field hotload test Trace instance paths when doing hotload tests
1 Year Ago
Fixed ConditionalWeakTableUpgrader Handles the case where oldInstance == newInstance, or if the collection gets modified while being processed Simplify JsonSerializerOptionsUpgrader Directly process JsonConverters inside existing JsonSerializerOptions, without creating a new instance. Handles case where we can't create a new instance, and the options aren't mutable. Also make sure we process static fields in System.Text.Json assembly. Possible fix for #640 Add some more easy hotload skips to save a few milliseconds JsonSerializerOptionsUpgrader .NET 7 fixes Log path to instance when a hotload error occurs Some nicer paths for items in common collections Replace TypeDescription / MemberDescription instances during swap Tests for TypeDescription / MemberDescription replacing
1 Year Ago
Log path to instance when a hotload error occurs Some nicer paths for items in common collections
1 Year Ago
JsonSerializerOptionsUpgrader .NET 7 fixes
1 Year Ago
Fixed ConditionalWeakTableUpgrader Handles the case where oldInstance == newInstance, or if the collection gets modified while being processed Simplify JsonSerializerOptionsUpgrader Directly process JsonConverters inside existing JsonSerializerOptions, without creating a new instance. Handles case where we can't create a new instance, and the options aren't mutable. Also make sure we process static fields in System.Text.Json assembly. Possible fix for #640 Add some more easy hotload skips to save a few milliseconds
1 Year Ago
Always use addon map list for map leaderboards in menu
1 Year Ago
Add scrolling to leaderboard list in menu
1 Year Ago
Limit main menu leaderboard list to 5 items for now
1 Year Ago
Show all leaderboards in menu again Basic support for {map} leaderboard name substitution Only supported for MapSelect.Official
1 Year Ago
Added hotload_log engine convar
1 Year Ago
Whitelist TextWriter and StringWriter StringWriter only writes to memory. I'm leaving StreamWriter forbidden for now.
2 Years Ago
Allow sending compiled shaders to clients
2 Years Ago
Fixed support for Leaderboard<float> and Leaderboard<TimeSpan>
2 Years Ago
Fixed FromNotAutoPropertyStruct leaderboard test
2 Years Ago
Support building a leaderboard type from a single field type Support for Leaderboard<float> Some typed leaderboard tests
2 Years Ago
Code-first typed leaderboards, support for creation / writing / reading Read leaderboard type info from local addon assemblies in tools Display custom leaderboard types in the menu https://files.facepunch.com/ziks/1b2011b1/sbox-dev_xm1fXA5ej8.png Fixed leaderboard details having too much padding Support for marking entries as deleted in the backend Refactor to nest leaderboard attributes etc in the Leaderboard struct Built-in support for periodic leaderboards (daily / weekly / monthly) More refactoring * Leaderboard has too many fields to justify being a struct anymore * Nested Leaderboard.Update and Leaderboard.Entry * Leaderboard<T> can inherit from Leaderboard now, much less repetition Leaderboard API documentation Finish merging in Histograms
2 Years Ago
Added test for adding properties with default values Support for log value histograms https://files.facepunch.com/ziks/2022-10-10/sbox-dev_YnroiYzjt5.png
2 Years Ago
Added test for adding properties with default values Code-first typed leaderboards, support for creation / writing / reading Read leaderboard type info from local addon assemblies in tools Display custom leaderboard types in the menu https://files.facepunch.com/ziks/1b2011b1/sbox-dev_xm1fXA5ej8.png Fixed leaderboard details having too much padding Support for marking entries as deleted in the backend Refactor to nest leaderboard attributes etc in the Leaderboard struct Built-in support for periodic leaderboards (daily / weekly / monthly) More refactoring * Leaderboard has too many fields to justify being a struct anymore * Nested Leaderboard.Update and Leaderboard.Entry * Leaderboard<T> can inherit from Leaderboard now, much less repetition Leaderboard API documentation Finish merging in Histograms
2 Years Ago
Add Hotload.AssemblyResolver, warn if not assigned when needed Set HotloadManager.AssemblyResolver for client / menu / server
2 Years Ago
Fixed some histograms being offset horizontally Only show histogram markers that are in range
2 Years Ago
Fall back to fetching top scores if no scores around user
2 Years Ago
Added Leaderboard.GetHistogram() Basic leaderboard histogram drawing Show markers on friend scores in histogram
2 Years Ago
Added Leaderboard.GetHistogram() Basic leaderboard histogram drawing https://files.facepunch.com/ziks/2022-10-04/sbox-dev_jf1ILIXWus.png Show markers on friend scores in histogram https://files.facepunch.com/ziks/2022-10-04/sbox-dev_1lIGzwZv9e.png
2 Years Ago
Leaderboard API documentation
2 Years Ago
More refactoring * Leaderboard has too many fields to justify being a struct anymore * Nested Leaderboard.Update and Leaderboard.Entry * Leaderboard<T> can inherit from Leaderboard now, much less repetition
2 Years Ago
Built-in support for periodic leaderboards (daily / weekly / monthly)
2 Years Ago
Support for marking entries as deleted in the backend Refactor to nest leaderboard attributes etc in the Leaderboard struct
2 Years Ago
Fixed leaderboard details having too much padding
2 Years Ago
Read leaderboard type info from local addon assemblies in tools Display custom leaderboard types in the menu https://files.facepunch.com/ziks/1b2011b1/sbox-dev_xm1fXA5ej8.png