encryqed / dumper-7 Goto Github PK
View Code? Open in Web Editor NEWUnreal Engine SDK Generator
Unreal Engine SDK Generator
I'm not sure about the version it was removed exactly, but here is the commit epic removed it: https://github.com/EpicGames/UnrealEngine/commit/eb53ce238e6db965f38e6d0c14139267e462108b
I would like to do a PR but i don't think I would check if its existing correctly
(i struggled a lot trying to realize what was messing up the offsets)
I hope this gets fixed! ๐
need find PostRender thanks
LoginId:27413c3e4e9d0c9a67cdc781c4707607
EpicAccountId:30fe06b94fce41e1a771994cd923a40d
Unhandled exception
Dumper_7!ObjectArray::FindObjectFast() [C:\Users\e\source\repos\Dumper-7-main\Dumper\ObjectArray.cpp:365]
Dumper_7!ObjectArray::GetAllPackages() [C:\Users\e\source\repos\Dumper-7-main\Dumper\ObjectArray.cpp:322]
Dumper_7!Generator::GenerateSDK() [C:\Users\e\source\repos\Dumper-7-main\Dumper\Generator.cpp:36]
Dumper_7!MainThread() [C:\Users\e\source\repos\Dumper-7-main\Dumper\Main.cpp:57]
kernel32
ntdll
i was trying to get the static class in my internal but it gives me no result
/*Objects & Names inits*/
auto GStatic = (SDK::UGameplayStatics*)SDK::UGameplayStatics::StaticClass();/// 0000000000
but when i try to get those static classes on the dumper it gives me results
UEClass GStatic = ObjectArray::FindClassFast("GameplayStatics"); /// 000000002D064E40
sdk on latest fn (ue 5.2, fn 25.11) generates both FortniteGame and FortniteAI files (structs, classes & params), and both of them are using structs from eachother, for example, UAthenaAIBotDebugMiniMapIndicator : public UFortMiniMapIndicator
(from FortniteAI_classes) uses UFortMiniMapIndicator from FortniteGame_classes, so it leads to errors like 'SDK::UFortMiniMapIndicator': base class undefined
or incomplete type is not allowed
, makes it impossible to compile
is possible to generate json format for dumps.host ?
Since this is more actively maintained than UnrealMappingsDumper for the time being, are there plans to add support for dumping mappings as well as the SDK?
12.41 dump aint compiling, class redefinition in files that start with s12 and intro files
getsocketlocation func in mesh crashes my game (uworld is good, i use the initgobjects func before everything)
Compiling in release-x64
when I inject the game crashes sometimes before generating anything in 'C:/dumper-7',
sometimes it will generate some of the SDK but every time it does it is really broken.
I am trying to use this on a random pre-alpha game called Astro, it uses UE 5.2 and keeps giving me this error:
I don't know if it matters or not but the game was distributed as a development build.
I have tried using both an older commit (idk which, I built it a few weeks ago) and the most recent e6dde46
i have some quest games i want to generate an sdk for
The project is missing instructions on how to actually use it. See UE's and Kn4cker's SDK Generator for adequate compilation and usage instructions examples:
https://github.com/EpicGames/UnrealEngine
https://github.com/polivilas/UnrealEngineSDKGenerator
Generator shows logs and reports done, but there are no folders and no files created.
Video:
https://github.com/Encryqed/Dumper-7/assets/16989713/a44a9cdb-f4d0-42ad-9cde-6904c5d4558f
Log:
Started Generation [Dumper-7]!
Dumper-7 by me, you & him
Searching for GObjects...
Found FChunkedFixedUObjectArray GObjects at offset 0x7bc7c70
Found FName::AppendString at Offset 0x1a3e200
Off::UStruct::Children: 48
Off::UField::Next: 28
Off::UStruct::SuperStruct: 40
Off::UStruct::Size: 58
Off::UClass::CastFlags: d8
Game uses FProperty system
Off::UStruct::ChildProperties: 50
Off::UClass::ClassDefaultObject: 110
Off::UEnum::Names: 40
Off::UFunction::FunctionFlags: b0
Off::UProperty::ElementSize: 3c
Off::UProperty::ArrayDim: 38
Off::UProperty::Offset_Internal: 4c
Off::UProperty::PropertyFlags: 40
UPropertySize: 78
Off::UArrayProperty::Inner: 78
Off::USetProperty::ElementProp: 78
Off::UMapProperty::Base: 78
PE-Offset: 0x1ca07b0
PE-Index: 0x4b
GameName: UE53rdPersonShooter
GameVersion: 5.0.3-20979098+++UE5+Release-5.0
[=] Done [=]
Also tried to inject it into a real game on 5.1.2 with the same result. Same result with a different injector.
I do have write access to all of these folders and other generators like UE4SS do successfully generate headers for UHT.
Dumper-7\Dumper\Generator.cpp(1531,13): error C2661: 'FileWriter::Write': no overloaded function requires 2 arguments.
Seems like you forgot to update something
Using GetRawString crashes on some Names, i'm not sure yet why i can get some names and some don't but it appears to be an issue with AppendString, is there an alternative to use maybe? Im using it on Dead by Daylight which is EAC protected if thats related
When generating the SDK for The Culling (a defunct UE 4.15 game), the process suddenly exits during generation.
I can see a bunch of SDK files being generated (and they look very promising, digging out fields that no other SDK generator has found me thus far), but SDK.hpp
is never generated.
I'm launching the game with EAC disabled.
I'm not entirely sure how to debug this properly because I don't know enough about how the SDK generator works yet. When attaching a debugger it breaks here:
Exception thrown at 0x00007FF921EEA8D6 (Dumper-7.dll) in Victory.exe: 0xC0000005: Access violation reading location 0x0000000000000008.
(I'm guessing it's actually GetFlags that's throwing the exception and it's getting inlined)
(While I'm here, I might as well ask whether the moment of injection matters. Right now, I'm injecting the dll after the game has entirely loaded. I'm assuming it needs the entities loaded that I want to have in the SDK. Is that actually needed or can I inject the dll on process start already?)
I'm getting many errors with the same issue "incomplete type is not allowed", how do I fix this?
made my compiler crash 7 times in a row
+rep
Check out these structs:
// 0x40 (0x2D8 - 0x298)
// Class Polaris.Barrier
class ABarrier : public AActor
{
public:
TArray<struct FWallBarrierGroup> WallBarrierGroups; // 0x298(0x10)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, NativeAccessSpecifierPublic)
TArray<struct FBarrierGroup> BarrierGroups; // 0x2A8(0x10)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, NativeAccessSpecifierPublic)
TArray<struct FWallBarrierGroup> WallCullBackGroups; // 0x2B8(0x10)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, NativeAccessSpecifierPublic)
TArray<struct FBarrierInitializeRequestOne> InitializeRequest; // 0x2C8(0x10)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, ContainsInstancedReference, NativeAccessSpecifierPublic)
static class UClass* StaticClass();
static class ABarrier* GetDefaultObj();
struct FBarrierInitializeRequestOne PopInitializeRequest();
};
// 0xD9 (0x3B1 - 0x2D8)
// BlueprintGeneratedClass BP_Barrier.BP_Barrier_C
class ABP_Barrier_C : public ABarrier
{
public:
struct FPointerToUberGraphFrame UberGraphFrame; // 0x2D8(0x8)(ZeroConstructor, Transient, DuplicateTransient)
class USceneComponent* DefaultSceneRoot; // 0x2E0(0x8)(BlueprintVisible, ZeroConstructor, InstancedReference, NonTransactional, NoDestructor, HasGetValueTypeHash)
double MinDistance; // 0x2E8(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double MaxDistance; // 0x2F0(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double MinHeight; // 0x2F8(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double MaxHeight; // 0x300(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double FloorHeightFB; // 0x308(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double FloorBarrierAlphaOffset; // 0x310(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
TArray<class UMaterialInstanceDynamic*> MIDs; // 0x318(0x10)(Edit, BlueprintVisible, DisableEditOnInstance)
TArray<class ABP_WallBarrierCamera_C*> OverlapVolumes_DEPLICATED; // 0x328(0x10)(Edit, BlueprintVisible, DisableEditOnTemplate)
double OverlapVolumeCount_DEPLICATED; // 0x338(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double PrevOverlapVolumeCount_DEPLICATED; // 0x340(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool UseOverlapVolumes_DEPLICATED; // 0x348(0x1)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
uint8 Pad_1C7A[0x7]; // Fixing Size After Last Property [ Dumper-7 ]
TArray<class UMaterialInstanceDynamic*> EffectMIDs; // 0x350(0x10)(Edit, BlueprintVisible, DisableEditOnInstance)
double FloorHeight; // 0x360(0x8)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool EnabledCullBack; // 0x368(0x1)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool QueuedVisibility; // 0x369(0x1)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool Queueing; // 0x36A(0x1)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool Initialized; // 0x36B(0x1)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
uint8 Pad_1C7B[0x4]; // Fixing Size After Last Property [ Dumper-7 ]
double DistanceScale; // 0x370(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
double AlphaOffset; // 0x378(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
struct FVector FacadeVector; // 0x380(0x18)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool LocalFacade; // 0x398(0x1)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
uint8 Pad_1C7C[0x7]; // Fixing Size After Last Property [ Dumper-7 ]
double AlphaOffset1; // 0x3A0(0x8)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
int32 Step; // 0x3A8(0x4)(Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
int32 NumReplaceTimeSlice; // 0x3AC(0x4)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
bool EveryBattle_StageReset; // 0x3B0(0x1)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash)
};
// 0xF (0x3C0 - 0x3B1)
// BlueprintGeneratedClass BP_BarrierCol1.BP_BarrierCol1_C
class ABP_BarrierCol1_C : public ABP_Barrier_C
{
public:
uint8 Pad_1035[0x7]; // Fixing Size After Last Property [ Dumper-7 ]
class UBoxComponent* Box; // 0x3B8(0x8)(BlueprintVisible, ZeroConstructor, InstancedReference, NonTransactional, NoDestructor, HasGetValueTypeHash)
static class UClass* StaticClass();
static class ABP_BarrierCol1_C* GetDefaultObj();
};
I'm interested in the ABP_BarrierCol1_C::Box
member. It's commented by the dumper offset of 0x3B8 is correct: I verified it manually with reclass.
But the tests won't pass here:
static_assert(offsetof(ABP_BarrierCol1_C, Box) == 0x3B8);
static_assert(sizeof ABP_BarrierCol1_C == 0x3C0);
The reason they won't pass is because size of ABP_Barrier_C
is actually 0x3B8, because it has its' last member at offset 0x3B0: bool EveryBattle_StageReset
, and so it's size becomes 0x3B1, but then the compiler aligns struct's size to be 0x3B8. But then at the start of ABP_BarrierCol1_C
it also adds 7 bytes of padding, and the offset of the Box
becomes 0x3C0 and the size of ABP_BarrierCol1_C
becomes 0x3C8.
The SDK dumper reports the size of ABP_Barrier_C
to be 0x3B1. I also verified it manually and it does report 0x3B1 in the reflection system. But I doubt it is, since the default on x64 is to align structs bigger than 8 by 16, align pointers by 8, etc.
I don't think this bug was present in the original Kn4cker's SDK generator. So whatever algorithm he wrote to add paddings should also work here correctly.
When you use the sdk in a project the dll will not work because the SDK fails
Everything crashes.
Video:
https://github.com/Encryqed/Dumper-7/assets/16989713/654a3fb4-139c-49d9-8438-700db6e09e36
Also tried to inject it into a real game on 4.13.2 with the same result. Same result with a different injector.
2 examples:
In file AB_SKT_CH_base_msl_wait_structs.hpp:
// 0x0 (0x1 - 0x1)
// ScriptStruct AB_SKT_CH_base_msl_wait.AB_SKT_CH_base_msl_wait_C.AnimBlueprintGeneratedMutableData
struct FAnimBlueprintGeneratedMutableData : public FAnimBlueprintMutableData
{
public:
};
}
Then in file AB_SKT_CH_base_msl_structs.hpp:
// 0x0 (0x1 - 0x1)
// ScriptStruct AB_SKT_CH_base_msl.AB_SKT_CH_base_msl_C.AnimBlueprintGeneratedMutableData
struct FAnimBlueprintGeneratedMutableData : public FAnimBlueprintMutableData
{
public:
};
}
This causes struct redefinition error: Error C2011 'SDK::FAnimBlueprintGeneratedMutableData': 'struct' type redefinition
.
These are just 2, there are like 20 of them and other FAnimBlueprintGeneratedMutableData
are not empty. They're only used inside their respective classes, so I managed to fix the name clashes by adding name of the class before them: AB_SKT_CH_base_msl_FAnimBlueprintGeneratedMutableData
.
A fix for a generator could be just this:
โข Keep a list with all struct names.
โข Once there's more than just 1 struct with the same name detected, prepend the name of the class to both of them.
Here's the generated SDK:
5.1.1-0+++UE5+Release-5.1-Polaris.zip
At the moment current implementation to get the class is:
class UClass* ABP_CharacterLightController_C::StaticClass()
{
static class UClass* Clss = nullptr;
if (!Clss)
Clss = UObject::FindClassFast("BP_CharacterLightController_C");
return Clss;
}
It is correct for C++ classes, because C++ classes get loaded at the start and never get unloaded from memory. However, blueprint classes might and do get loaded and then unloaded from memory when all objects of that class get destroyed. In my case it's on level load and unload.
So, when I first get the static class when I'm on the level, it works. But after levels get unloaded and then loaded back, the blueprint class has a different pointer and this pointer is no longer valid.
When I change the code to this:
class UClass* ABP_CharacterLightController_C::StaticClass()
{
return UObject::FindClassFast("BP_CharacterLightController_C");
}
The bug disappears, because it always looks for the class.
For a quick fix, I did find and replace in the SDK project. Find: (class UClass\* .BP_.*?::StaticClass\(\)\r\n{\r\n)(\s*static class UClass\* Clss = nullptr;\r\n)(.*?)(\s*if \(!Clss\)\r\n\s)(\s)
and replace with $1$5UClass*
, this appears to fix all the BP classes in the project.
When I try to print the address of any object I get 0000000, and if i use GetFullName or GetName the function crashes
Here is the code and the place it crashes at is when i print with getfullname in dllmain.cpp
here is where GetFullName() is
and the crash log reads:
LoginId:ced81d57431a50cab505e3a8f66ab5e9
EpicAccountId:
Unhandled exception
FortniteSDK!SDK::UObject::GetFullName() [pathtoproject\SDK\CoreUObject_functions.cpp:28]
FortniteSDK!DLLMain() [pathtoproject\dllmain.cpp:23]
kernel32
ntdll
Hi,
When i want get UGameplayStatics or any class in engine the game crash.
static inline SDK::UGameplayStatics* GPStatics = nullptr;
//---
if (!this->GPStatics) this->GPStatics = (SDK::UGameplayStatics*)SDK::UGameplayStatics::StaticClass();
I change like in this issue : #52
static inline SDK::UGameplayStatics* GPStatics = nullptr;
//---
if (!this->GPStatics) this->GPStatics = (SDK::UGameplayStatics*)SDK::UGameplayStatics::GetDefaultObj();
And it crash too.
Thx for any reply.
Recently built the dumper at commit 2f8743d
and these errors have appeared in basic.hpp:
There are duplicate functions in this image and the EClassFlags enum is not in the right place:
Where do i set Settings::SDKGenerationPath for it to work correctly?
thanks in advance!
For some reason, generator generates enums of type uint8
and then puts bigger values in them, bigger than the type can handle. Here's an example:
enum class EAkSpeakerConfiguration : uint8
{
Ak_Speaker_Front_Left = 1,
Ak_Speaker_Front_Right = 2,
Ak_Speaker_Front_Center = 4,
Ak_Speaker_Low_Frequency = 8,
Ak_Speaker_Back_Left = 16,
Ak_Speaker_Back_Right = 32,
Ak_Speaker_Back_Center = 256,
Ak_Speaker_Side_Left = 512,
Ak_Speaker_Side_Right = 1024,
Ak_Speaker_Top = 2048,
Ak_Speaker_Height_Front_Left = 4096,
Ak_Speaker_Height_Front_Center = 8192,
Ak_Speaker_Height_Front_Right = 16384,
Ak_Speaker_Height_Back_Left = 32768,
Ak_Speaker_Height_Back_Center = 65536,
Ak_Speaker_Height_Back_Right = 131072,
Ak_Speaker_MAX = 131073,
};
There are many of them like this.
Generated SDK:
5.1.1-0+++UE5+Release-5.1-Polaris.zip
it seems to crash on StringifyObjectFlags in UnrealObjects.cpp
probably useless info but ill add it for context
i have tried using reclass and reversing all the major structs but the game seems quite different from the base 4.24 engine
despite this using corrm's tool seems to generate a sdk mind you its missing alot but it seems to work using the base 4,24 structs
either this game is just fucked or i am just retarded and fell into a pitfall somewhere
As a beginner, this is a great tool. How can I use SDK files to find all UUserWidgets in the game?
class UDataTable : public UObject
{
public:
class UScriptStruct* RowStruct; // 0x28(0x8)(Edit, ZeroConstructor, EditConst, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
uint8 Pad_2199[0x50]; // Fixing Size After Last Property [ Dumper-7 ]
uint8 bStripFromClientBuilds : 1; // Mask: 0x1, PropSize: 0x10x80(0x1)(Edit, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
uint8 bIgnoreExtraFields : 1; // Mask: 0x2, PropSize: 0x10x80(0x1)(Edit, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
uint8 bIgnoreMissingFields : 1; // Mask: 0x4, PropSize: 0x10x80(0x1)(Edit, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
uint8 BitPad_103 : 5; // Fixing Bit-Field Size [ Dumper-7 ]
uint8 Pad_21B8[0x7]; // Fixing Size After Last Property [ Dumper-7 ]
class FString ImportKeyField; // 0x88(0x10)(Edit, ZeroConstructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
bool InInitialLoadOrDestruction; // 0x98(0x1)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
uint8 Pad_21B9[0x1F]; // Fixing Size Of Struct [ Dumper-7 ]
static class UClass* StaticClass();
static class UDataTable* GetDefaultObj();
};
LoginId:c29ae7924c473cd763a05e970ce8e17e
EpicAccountId:f8c93c8174944b7088aab0920a8ab9fa
Unhandled exception
Dumper_7!UEObject::GetIndex() [E:\Dumper-7-main\Dumper\UnrealObjects.cpp:25]
Dumper_7!ObjectArray::Init() [E:\Dumper-7-main\Dumper\ObjectArray.cpp:176]
Dumper_7!Generator::Init() [E:\Dumper-7-main\Dumper\Generator.cpp:11]
Dumper_7!MainThread() [E:\Dumper-7-main\Dumper\Main.cpp:35]
kernel32
ntdll
fix yo goddamn sdk dumper!!!! 12.41 crashg!!!!!!!!! omg so bad
๐ก๐ก๐ก๐ก๐ก๐ก
Hey,
I crash when i try to get all this adress
if (!this->MathLib) this->MathLib = (SDK::UKismetMathLibrary*)SDK::UKismetMathLibrary::GetDefaultObj();
if (!this->KismetSystemLib) this->KismetSystemLib = (SDK::UKismetSystemLibrary*)SDK::UKismetSystemLibrary::GetDefaultObj();
if (!this->GPStatics) this->GPStatics = (SDK::UGameplayStatics*)SDK::UGameplayStatics::GetDefaultObj();
or
if (!this->MathLib) this->MathLib = (SDK::UKismetMathLibrary*)SDK::UKismetMathLibrary::StaticClass();
if (!this->KismetSystemLib) this->KismetSystemLib = (SDK::UKismetSystemLibrary*)SDK::UKismetSystemLibrary::StaticClass();
if (!this->GPStatics) this->GPStatics = (SDK::UGameplayStatics*)SDK::UGameplayStatics::StaticClass();
SDK: https://anonymfile.com/zDV0/sdk.rar
Like you tell me i set the offset or maybe it's not what you tell me.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.