From 15bd4ea79ff9043f2570e9d4cb7189b5780f3858 Mon Sep 17 00:00:00 2001
From: Patbox <39821509+Patbox@users.noreply.github.com>
Date: Mon, 30 Sep 2024 12:20:39 +0200
Subject: [PATCH] Initial commit
---
.github/FUNDING.yml | 1 +
.github/workflows/build.yml | 40 +++
.github/workflows/release.yml | 36 +++
.gitignore | 40 +++
LICENSE | 165 ++++++++++++
README.md | 9 +
build.gradle | 126 +++++++++
gradle.properties | 17 ++
gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes
gradle/wrapper/gradle-wrapper.properties | 7 +
gradlew | 249 ++++++++++++++++++
gradlew.bat | 92 +++++++
settings.gradle | 10 +
.../extdrawpatch/impl/BaseFactoryBlock.java | 17 ++
.../impl/ExtendedDrawersPolymerPatch.java | 34 +++
.../impl/model/BaseDrawerModel.java | 230 ++++++++++++++++
.../impl/model/CompactingDrawerModel.java | 57 ++++
.../extdrawpatch/impl/model/DrawerModel.java | 47 ++++
.../impl/model/ShadowDrawerModel.java | 37 +++
.../impl/model/SimpleBlockModel.java | 17 ++
.../impl/ui/CapacityLimiterGui.java | 109 ++++++++
.../mixin/mod/ExtendedDrawersMixin.java | 19 ++
.../mod/block/AccessPointBlockMixin.java | 27 ++
.../mod/block/CompactingDrawerBlockMixin.java | 28 ++
.../mixin/mod/block/ConnectorBlockMixin.java | 27 ++
.../mixin/mod/block/DrawerBlockMixin.java | 28 ++
.../mixin/mod/block/ModBlocksMixin.java | 15 ++
.../mod/block/ShadowDrawerBlockMixin.java | 27 ++
.../be/CompactingDrawerBlockEntityMixin.java | 58 ++++
.../mod/block/be/DrawerBlockEntityMixin.java | 53 ++++
.../be/ShadowDrawerBlockEntityMixin.java | 51 ++++
.../mod/item/CopyLimiterRecipeMixin.java | 9 +
.../mixin/mod/item/DrawerItemMixin.java | 46 ++++
.../mixin/mod/item/LimiterItemMixin.java | 39 +++
.../mixin/mod/item/ModItemsMixin.java | 26 ++
.../mixin/mod/item/UpgradeItemMixin.java | 20 ++
.../assets/extdraw-patch/font/gui.json | 22 ++
.../resources/assets/extdraw-patch/icon.png | Bin 0 -> 2697 bytes
.../extdraw-patch/models/sgui/button_32.json | 10 +
.../extdraw-patch/models/sgui/close.json | 6 +
.../extdraw-patch/models/sgui/done.json | 6 +
.../models/sgui/done_blocked.json | 6 +
.../extdraw-patch/models/sgui/empty.json | 6 +
.../textures/sgui/elements/base.png | Bin 0 -> 4513 bytes
.../textures/sgui/elements/base_blocked.png | Bin 0 -> 4346 bytes
.../textures/sgui/elements/close.png | Bin 0 -> 4878 bytes
.../textures/sgui/elements/done.png | Bin 0 -> 4880 bytes
.../textures/sgui/elements/done_blocked.png | Bin 0 -> 4798 bytes
.../textures/sgui/elements/empty.png | Bin 0 -> 4559 bytes
.../extdraw-patch/textures/sgui/limiter.png | Bin 0 -> 5240 bytes
.../assets/minecraft/atlases/blocks.json | 9 +
...extended-drawers-polymer-patch.mixins.json | 25 ++
src/main/resources/fabric.mod.json | 32 +++
53 files changed, 1935 insertions(+)
create mode 100644 .github/FUNDING.yml
create mode 100644 .github/workflows/build.yml
create mode 100644 .github/workflows/release.yml
create mode 100644 .gitignore
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 build.gradle
create mode 100644 gradle.properties
create mode 100644 gradle/wrapper/gradle-wrapper.jar
create mode 100644 gradle/wrapper/gradle-wrapper.properties
create mode 100644 gradlew
create mode 100644 gradlew.bat
create mode 100644 settings.gradle
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/BaseFactoryBlock.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/ExtendedDrawersPolymerPatch.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/model/BaseDrawerModel.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/model/CompactingDrawerModel.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/model/DrawerModel.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/model/ShadowDrawerModel.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/model/SimpleBlockModel.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/impl/ui/CapacityLimiterGui.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/ExtendedDrawersMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/AccessPointBlockMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/CompactingDrawerBlockMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/ConnectorBlockMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/DrawerBlockMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/ModBlocksMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/ShadowDrawerBlockMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/be/CompactingDrawerBlockEntityMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/be/DrawerBlockEntityMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/block/be/ShadowDrawerBlockEntityMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/item/CopyLimiterRecipeMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/item/DrawerItemMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/item/LimiterItemMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/item/ModItemsMixin.java
create mode 100644 src/main/java/eu/pb4/extdrawpatch/mixin/mod/item/UpgradeItemMixin.java
create mode 100644 src/main/resources/assets/extdraw-patch/font/gui.json
create mode 100644 src/main/resources/assets/extdraw-patch/icon.png
create mode 100644 src/main/resources/assets/extdraw-patch/models/sgui/button_32.json
create mode 100644 src/main/resources/assets/extdraw-patch/models/sgui/close.json
create mode 100644 src/main/resources/assets/extdraw-patch/models/sgui/done.json
create mode 100644 src/main/resources/assets/extdraw-patch/models/sgui/done_blocked.json
create mode 100644 src/main/resources/assets/extdraw-patch/models/sgui/empty.json
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/elements/base.png
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/elements/base_blocked.png
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/elements/close.png
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/elements/done.png
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/elements/done_blocked.png
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/elements/empty.png
create mode 100644 src/main/resources/assets/extdraw-patch/textures/sgui/limiter.png
create mode 100644 src/main/resources/assets/minecraft/atlases/blocks.json
create mode 100644 src/main/resources/extended-drawers-polymer-patch.mixins.json
create mode 100644 src/main/resources/fabric.mod.json
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..b86584a
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+ko_fi: Patbox
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..aa35820
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,40 @@
+# Automatically build the project and run any configured tests for every push
+# and submitted pull request. This can help catch issues that only occur on
+# certain platforms or Java versions, and provides a first line of defence
+# against bad commits.
+
+name: build
+on:
+ pull_request:
+ push:
+ paths-ignore: [ '.github/', 'docs/', 'mkdocs.yml' ]
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ # Use these Java versions
+ java: [
+ 21 # Latest version
+ ]
+ # and run on both Linux and Windows
+ os: [ubuntu-latest]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: checkout repository
+ uses: actions/checkout@v2
+ - name: setup jdk ${{ matrix.java }}
+ uses: actions/setup-java@v1
+ with:
+ java-version: ${{ matrix.java }}
+ - name: make gradle wrapper executable
+ if: ${{ runner.os != 'Windows' }}
+ run: chmod +x ./gradlew
+ - name: build
+ run: ./gradlew build
+ - name: capture build artifacts
+ if: ${{ runner.os == 'Linux' && matrix.java == '21' }} # Only upload artifacts built from LTS java on one OS
+ uses: actions/upload-artifact@v4
+ with:
+ name: Artifacts
+ path: build/libs/
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..4009354
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,36 @@
+name: Release
+
+on:
+ release:
+ types:
+ - published
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/cache@v2
+ with:
+ path: |
+ ~/.gradle/loom-cache
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
+ restore-keys: |
+ gradle-
+ - uses: actions/checkout@v2
+ - name: Set up JDK
+ uses: actions/setup-java@v1
+ with:
+ java-version: 21
+
+ - name: Grant execute permission for gradlew
+ run: chmod +x gradlew
+ - name: Build and publish with Gradle
+ run: ./gradlew build publish
+ env:
+ MODRINTH: ${{ secrets.MODRINTH }}
+ CHANGELOG: ${{ github.event.release.body }}
+ RELEASE: true
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c476faf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,40 @@
+# gradle
+
+.gradle/
+build/
+out/
+classes/
+
+# eclipse
+
+*.launch
+
+# idea
+
+.idea/
+*.iml
+*.ipr
+*.iws
+
+# vscode
+
+.settings/
+.vscode/
+bin/
+.classpath
+.project
+
+# macos
+
+*.DS_Store
+
+# fabric
+
+run/
+
+# java
+
+hs_err_*.log
+replay_*.log
+*.hprof
+*.jfr
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..153d416
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..73ae388
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+# Polymer Patch for Extended Drawers
+This is a patch for [Extended Drawers by MattiDragon](https://modrinth.com/mod/extended-drawers),
+making it work fully server side, without all of its functionality intact.
+
+Extended Drawers is required and not included within this mod.
+
+This mod requires server resource pack, about which setup you can read here: https://polymer.pb4.eu/latest/user/resource-pack-hosting/
+
+[You can read more about [Extended Drawers on it's Modrinth page!](https://modrinth.com/mod/extended-drawers)
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..e10e286
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,126 @@
+plugins {
+ id 'fabric-loom' version '1.7.+'
+ id 'maven-publish'
+ id "com.modrinth.minotaur" version "2.+"
+}
+
+version = project.mod_version
+group = project.maven_group
+
+base {
+ archivesName = project.archives_base_name
+}
+
+repositories {
+ // Add repositories to retrieve artifacts from in here.
+ // You should only use this when depending on other mods because
+ // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
+ // See https://docs.gradle.org/current/userguide/declaring_repositories.html
+ // for more information about repositories.
+ maven { url "https://api.modrinth.com/maven/" }
+ maven { url 'https://maven.nucleoid.xyz' }
+ maven { url "https://kneelawk.com/maven/" }
+ maven { url "https://maven.isxander.dev/releases" }
+ maven { url "https://jitpack.io" }
+
+ repositories {
+ maven {
+ url "https://maven.theepicblock.nl"
+ content { includeGroup("nl.theepicblock") }
+ }
+ }
+}
+
+dependencies {
+ // To change the versions see the gradle.properties file
+ minecraft "com.mojang:minecraft:${project.minecraft_version}"
+ mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
+ modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
+
+ // Fabric API. This is technically optional, but you probably want it anyway.
+ modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
+
+ modImplementation "maven.modrinth:extended-drawers:3.0.4+mc.1.21.1"
+ modImplementation "com.kneelawk.graphlib:graphlib-core-fabric:2.0.0+1.21"
+ modImplementation "com.github.mattidragon:ConfigToolkit:1.1.1"
+ modImplementation "dev.isxander:yet-another-config-lib:3.5.0+1.21-fabric"
+
+ modImplementation include('eu.pb4:factorytools:0.3.2+1.21')
+ modImplementation include('eu.pb4:sgui:1.6.1+1.21.1')
+ modImplementation 'eu.pb4:polymer-core:0.9.16+1.21.1'
+ modImplementation 'eu.pb4:polymer-resource-pack:0.9.16+1.21.1'
+ modImplementation 'eu.pb4:polymer-autohost:0.9.16+1.21.1'
+ modImplementation 'eu.pb4:polymer-virtual-entity:0.9.16+1.21.1'
+
+ // Uncomment the following line to enable the deprecated Fabric API modules.
+ // These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.
+
+ // modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"
+}
+
+processResources {
+ inputs.property "version", project.version
+
+ filesMatching("fabric.mod.json") {
+ expand "version": project.version
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ it.options.release = 21
+}
+
+java {
+ // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
+ // if it is present.
+ // If you remove this line, sources will not be generated.
+ withSourcesJar()
+
+ sourceCompatibility = JavaVersion.VERSION_21
+ targetCompatibility = JavaVersion.VERSION_21
+}
+
+jar {
+ from("LICENSE") {
+ rename { "${it}_${project.base.archivesName.get()}"}
+ }
+}
+
+// configure the maven publication
+publishing {
+ publications {
+ mavenJava(MavenPublication) {
+ from components.java
+ }
+ }
+
+ // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
+ repositories {
+ // Add repositories to publish to here.
+ // Notice: This block does NOT have the same function as the block in the top level.
+ // The repositories here will be used for publishing your artifact, not for
+ // retrieving dependencies.
+ }
+}
+
+if (System.getenv("MODRINTH")) {
+ modrinth {
+ token = System.getenv("MODRINTH")
+ projectId = 'TIgnE8wT'// The ID of your modrinth project, slugs will not work.
+ versionNumber = "" + version // The version of the mod to upload.
+ versionType = "beta"
+ uploadFile = remapJar // This links to a task that builds your mod jar and sets "uploadFile" to the mod jar.
+ gameVersions = [((String) project.minecraft_version)]
+ changelog = System.getenv("CHANGELOG")
+ loaders = ["fabric"/*, "quilt"*/]
+
+ dependencies {
+ required.project "extended-drawers"
+ required.project "polymer"
+ }
+ }
+
+ remapJar {
+ finalizedBy project.tasks.modrinth
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..5f178f4
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,17 @@
+# Done to increase the memory available to gradle.
+org.gradle.jvmargs=-Xmx1G
+org.gradle.parallel=true
+
+# Fabric Properties
+# check these on https://fabricmc.net/develop
+minecraft_version=1.21.1
+yarn_mappings=1.21.1+build.1
+loader_version=0.15.11
+
+# Mod Properties
+mod_version=3.0.4.0+1.21.1
+maven_group=eu.pb4
+archives_base_name=extended-drawers-polymer-patch
+
+# Dependencies
+fabric_version=0.100.1+1.21
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596
GIT binary patch
literal 43462
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