mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 22:55:48 +01:00
Compare commits
15 commits
vk/c544-pa
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d0abeb37c |
||
|
|
033650d792 |
||
|
|
4c49f27edf |
||
|
|
c84578721c |
||
|
|
354fee648e |
||
|
|
da3ce17161 |
||
|
|
bbd1b33122 |
||
|
|
ae40ca4ac1 |
||
|
|
093aa2d663 |
||
|
|
e906751c89 |
||
|
|
718fd92f85 |
||
|
|
01b661f6a5 |
||
|
|
896344eb66 |
||
|
|
8fd0340404 |
||
|
|
bc4ee373b5 |
31 changed files with 1724 additions and 117 deletions
332
.github/workflows/build-cross-image.yml
vendored
332
.github/workflows/build-cross-image.yml
vendored
|
|
@ -19,6 +19,11 @@ on:
|
|||
description: 'Image version tag'
|
||||
required: true
|
||||
default: 'latest'
|
||||
skip_tests:
|
||||
description: 'Skip cross-compilation tests'
|
||||
required: false
|
||||
default: 'false'
|
||||
type: boolean
|
||||
push:
|
||||
branches:
|
||||
- v3-alpha
|
||||
|
|
@ -35,6 +40,8 @@ jobs:
|
|||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
outputs:
|
||||
image_tag: ${{ steps.vars.outputs.image_version }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
|
@ -89,3 +96,328 @@ jobs:
|
|||
MACOS_SDK_VERSION=${{ steps.vars.outputs.sdk_version }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
# Test cross-compilation for all platforms
|
||||
test-cross-compile:
|
||||
needs: build
|
||||
if: ${{ inputs.skip_tests != 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
# Darwin targets (Zig + macOS SDK) - no platform emulation needed
|
||||
- os: darwin
|
||||
arch: arm64
|
||||
platform: ""
|
||||
expected_file: "Mach-O 64-bit.*arm64"
|
||||
- os: darwin
|
||||
arch: amd64
|
||||
platform: ""
|
||||
expected_file: "Mach-O 64-bit.*x86_64"
|
||||
# Linux targets (GCC) - need platform to match architecture
|
||||
- os: linux
|
||||
arch: amd64
|
||||
platform: "linux/amd64"
|
||||
expected_file: "ELF 64-bit LSB.*x86-64"
|
||||
- os: linux
|
||||
arch: arm64
|
||||
platform: "linux/arm64"
|
||||
expected_file: "ELF 64-bit LSB.*ARM aarch64"
|
||||
# Windows targets (Zig + mingw) - no platform emulation needed
|
||||
- os: windows
|
||||
arch: amd64
|
||||
platform: ""
|
||||
expected_file: "PE32\\+ executable.*x86-64"
|
||||
- os: windows
|
||||
arch: arm64
|
||||
platform: ""
|
||||
expected_file: "PE32\\+ executable.*Aarch64"
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
|
||||
- name: Set up QEMU
|
||||
if: matrix.platform != ''
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Log in to Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create test CGO project
|
||||
run: |
|
||||
mkdir -p test-project
|
||||
cd test-project
|
||||
|
||||
# Create a minimal CGO test program
|
||||
cat > main.go << 'EOF'
|
||||
package main
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
|
||||
int add(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
result := C.add(1, 2)
|
||||
fmt.Printf("CGO test: 1 + 2 = %d\n", result)
|
||||
}
|
||||
EOF
|
||||
|
||||
cat > go.mod << 'EOF'
|
||||
module test-cgo
|
||||
|
||||
go 1.21
|
||||
EOF
|
||||
|
||||
- name: Build ${{ matrix.os }}/${{ matrix.arch }} (CGO)
|
||||
run: |
|
||||
cd test-project
|
||||
PLATFORM_FLAG=""
|
||||
if [ -n "${{ matrix.platform }}" ]; then
|
||||
PLATFORM_FLAG="--platform ${{ matrix.platform }}"
|
||||
fi
|
||||
|
||||
docker run --rm $PLATFORM_FLAG \
|
||||
-v "$(pwd):/app" \
|
||||
-e APP_NAME="test-cgo" \
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }} \
|
||||
${{ matrix.os }} ${{ matrix.arch }}
|
||||
|
||||
- name: Verify binary format
|
||||
run: |
|
||||
cd test-project/bin
|
||||
ls -la
|
||||
|
||||
# Find the built binary
|
||||
if [ "${{ matrix.os }}" = "windows" ]; then
|
||||
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }}.exe 2>/dev/null || ls *.exe | head -1)
|
||||
else
|
||||
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }} 2>/dev/null || ls test-cgo* | grep -v '.exe' | head -1)
|
||||
fi
|
||||
|
||||
echo "Binary: $BINARY"
|
||||
FILE_OUTPUT=$(file "$BINARY")
|
||||
echo "File output: $FILE_OUTPUT"
|
||||
|
||||
# Verify the binary format matches expected
|
||||
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected_file }}"; then
|
||||
echo "✅ Binary format verified: ${{ matrix.os }}/${{ matrix.arch }}"
|
||||
else
|
||||
echo "❌ Binary format mismatch!"
|
||||
echo "Expected pattern: ${{ matrix.expected_file }}"
|
||||
echo "Got: $FILE_OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Check library dependencies (Linux only)
|
||||
if: matrix.os == 'linux'
|
||||
run: |
|
||||
cd test-project/bin
|
||||
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }} 2>/dev/null || ls test-cgo* | grep -v '.exe' | head -1)
|
||||
|
||||
echo "## Library Dependencies for $BINARY"
|
||||
echo ""
|
||||
|
||||
# Use readelf to show dynamic dependencies
|
||||
echo "### NEEDED libraries:"
|
||||
readelf -d "$BINARY" | grep NEEDED || echo "No dynamic dependencies (statically linked)"
|
||||
|
||||
# Verify expected libraries are linked
|
||||
echo ""
|
||||
echo "### Verifying required libraries..."
|
||||
NEEDED=$(readelf -d "$BINARY" | grep NEEDED)
|
||||
|
||||
MISSING=""
|
||||
for lib in libwebkit2gtk-4.1.so libgtk-3.so libglib-2.0.so libc.so; do
|
||||
if echo "$NEEDED" | grep -q "$lib"; then
|
||||
echo "✅ $lib"
|
||||
else
|
||||
echo "❌ $lib MISSING"
|
||||
MISSING="$MISSING $lib"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$MISSING" ]; then
|
||||
echo ""
|
||||
echo "ERROR: Missing required libraries:$MISSING"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test non-CGO builds (pure Go cross-compilation)
|
||||
test-non-cgo:
|
||||
needs: build
|
||||
if: ${{ inputs.skip_tests != 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: darwin
|
||||
arch: arm64
|
||||
expected_file: "Mach-O 64-bit.*arm64"
|
||||
- os: darwin
|
||||
arch: amd64
|
||||
expected_file: "Mach-O 64-bit.*x86_64"
|
||||
- os: linux
|
||||
arch: amd64
|
||||
expected_file: "ELF 64-bit LSB"
|
||||
- os: linux
|
||||
arch: arm64
|
||||
expected_file: "ELF 64-bit LSB.*ARM aarch64"
|
||||
- os: windows
|
||||
arch: amd64
|
||||
expected_file: "PE32\\+ executable.*x86-64"
|
||||
- os: windows
|
||||
arch: arm64
|
||||
expected_file: "PE32\\+ executable.*Aarch64"
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
|
||||
- name: Log in to Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create test non-CGO project
|
||||
run: |
|
||||
mkdir -p test-project
|
||||
cd test-project
|
||||
|
||||
# Create a pure Go test program (no CGO)
|
||||
cat > main.go << 'EOF'
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Pure Go cross-compilation test")
|
||||
}
|
||||
EOF
|
||||
|
||||
cat > go.mod << 'EOF'
|
||||
module test-pure-go
|
||||
|
||||
go 1.21
|
||||
EOF
|
||||
|
||||
- name: Build ${{ matrix.os }}/${{ matrix.arch }} (non-CGO)
|
||||
run: |
|
||||
cd test-project
|
||||
|
||||
# For non-CGO, we can use any platform since Go handles cross-compilation
|
||||
# We set CGO_ENABLED=0 to ensure pure Go build
|
||||
docker run --rm \
|
||||
-v "$(pwd):/app" \
|
||||
-e APP_NAME="test-pure-go" \
|
||||
-e CGO_ENABLED=0 \
|
||||
--entrypoint /bin/sh \
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }} \
|
||||
-c "GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -o bin/test-pure-go-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.os == 'windows' && '.exe' || '' }} ."
|
||||
|
||||
- name: Verify binary format
|
||||
run: |
|
||||
cd test-project/bin
|
||||
ls -la
|
||||
|
||||
# Find the built binary
|
||||
if [ "${{ matrix.os }}" = "windows" ]; then
|
||||
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}.exe"
|
||||
else
|
||||
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}"
|
||||
fi
|
||||
|
||||
echo "Binary: $BINARY"
|
||||
FILE_OUTPUT=$(file "$BINARY")
|
||||
echo "File output: $FILE_OUTPUT"
|
||||
|
||||
# Verify the binary format matches expected
|
||||
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected_file }}"; then
|
||||
echo "✅ Binary format verified: ${{ matrix.os }}/${{ matrix.arch }} (non-CGO)"
|
||||
else
|
||||
echo "❌ Binary format mismatch!"
|
||||
echo "Expected pattern: ${{ matrix.expected_file }}"
|
||||
echo "Got: $FILE_OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Check library dependencies (Linux only)
|
||||
if: matrix.os == 'linux'
|
||||
run: |
|
||||
cd test-project/bin
|
||||
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}"
|
||||
|
||||
echo "## Library Dependencies for $BINARY (non-CGO)"
|
||||
echo ""
|
||||
|
||||
# Non-CGO builds should have minimal dependencies (just libc or statically linked)
|
||||
echo "### NEEDED libraries:"
|
||||
readelf -d "$BINARY" | grep NEEDED || echo "No dynamic dependencies (statically linked)"
|
||||
|
||||
# Verify NO GTK/WebKit libraries (since CGO is disabled)
|
||||
NEEDED=$(readelf -d "$BINARY" | grep NEEDED || true)
|
||||
if echo "$NEEDED" | grep -q "libwebkit\|libgtk"; then
|
||||
echo "❌ ERROR: Non-CGO binary should not link to GTK/WebKit!"
|
||||
exit 1
|
||||
else
|
||||
echo "✅ Confirmed: No GTK/WebKit dependencies (expected for non-CGO)"
|
||||
fi
|
||||
|
||||
# Summary job
|
||||
test-summary:
|
||||
needs: [build, test-cross-compile, test-non-cgo]
|
||||
if: always() && inputs.skip_tests != 'true'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check test results
|
||||
run: |
|
||||
echo "## Cross-Compilation Test Results" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [ "${{ needs.test-cross-compile.result }}" = "success" ]; then
|
||||
echo "✅ **CGO Tests**: All passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **CGO Tests**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [ "${{ needs.test-non-cgo.result }}" = "success" ]; then
|
||||
echo "✅ **Non-CGO Tests**: All passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **Non-CGO Tests**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### Tested Platforms" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Platform | Architecture | CGO | Non-CGO |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|----------|-------------|-----|---------|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Darwin | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Darwin | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Linux | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Linux | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Windows | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Windows | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# Fail if any test failed
|
||||
if [ "${{ needs.test-cross-compile.result }}" != "success" ] || [ "${{ needs.test-non-cgo.result }}" != "success" ]; then
|
||||
echo ""
|
||||
echo "❌ Some tests failed. Check the individual job logs for details."
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
44
.github/workflows/claude-code-review.yml
vendored
Normal file
44
.github/workflows/claude-code-review.yml
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
name: Claude Code Review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, ready_for_review, reopened]
|
||||
# Optional: Only run on specific file changes
|
||||
# paths:
|
||||
# - "src/**/*.ts"
|
||||
# - "src/**/*.tsx"
|
||||
# - "src/**/*.js"
|
||||
# - "src/**/*.jsx"
|
||||
|
||||
jobs:
|
||||
claude-review:
|
||||
# Optional: Filter by PR author
|
||||
# if: |
|
||||
# github.event.pull_request.user.login == 'external-contributor' ||
|
||||
# github.event.pull_request.user.login == 'new-developer' ||
|
||||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code Review
|
||||
id: claude-review
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
|
||||
plugins: 'code-review@claude-code-plugins'
|
||||
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://code.claude.com/docs/en/cli-reference for available options
|
||||
|
||||
50
.github/workflows/claude.yml
vendored
Normal file
50
.github/workflows/claude.yml
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
name: Claude Code
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
issues:
|
||||
types: [opened, assigned]
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
|
||||
jobs:
|
||||
claude:
|
||||
if: |
|
||||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
||||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
id-token: write
|
||||
actions: read # Required for Claude to read CI results on PRs
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code
|
||||
id: claude
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
|
||||
# This is an optional setting that allows Claude to read CI results on PRs
|
||||
additional_permissions: |
|
||||
actions: read
|
||||
|
||||
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
||||
# prompt: 'Update the pull request description to include a summary of changes.'
|
||||
|
||||
# Optional: Add claude_args to customize behavior and configuration
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://code.claude.com/docs/en/cli-reference for available options
|
||||
# claude_args: '--allowed-tools Bash(gh pr:*)'
|
||||
|
||||
76
v2/examples/panic-recovery-test/README.md
Normal file
76
v2/examples/panic-recovery-test/README.md
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
# Panic Recovery Test
|
||||
|
||||
This example demonstrates the Linux signal handler issue (#3965) and verifies the fix using `runtime.ResetSignalHandlers()`.
|
||||
|
||||
## The Problem
|
||||
|
||||
On Linux, WebKit installs signal handlers without the `SA_ONSTACK` flag, which prevents Go from recovering panics caused by nil pointer dereferences (SIGSEGV). Without the fix, the application crashes with:
|
||||
|
||||
```
|
||||
signal 11 received but handler not on signal stack
|
||||
fatal error: non-Go code set up signal handler without SA_ONSTACK flag
|
||||
```
|
||||
|
||||
## The Solution
|
||||
|
||||
Call `runtime.ResetSignalHandlers()` immediately before code that might panic:
|
||||
|
||||
```go
|
||||
import "github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
|
||||
go func() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("Recovered: %v", err)
|
||||
}
|
||||
}()
|
||||
runtime.ResetSignalHandlers()
|
||||
// Code that might panic...
|
||||
}()
|
||||
```
|
||||
|
||||
## How to Reproduce
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Linux with WebKit2GTK 4.1 installed
|
||||
- Go 1.21+
|
||||
- Wails CLI
|
||||
|
||||
### Steps
|
||||
|
||||
1. Build the example:
|
||||
```bash
|
||||
cd v2/examples/panic-recovery-test
|
||||
wails build -tags webkit2_41
|
||||
```
|
||||
|
||||
2. Run the application:
|
||||
```bash
|
||||
./build/bin/panic-recovery-test
|
||||
```
|
||||
|
||||
3. Wait ~10 seconds (the app auto-calls `Greet` after 5s, then waits another 5s before the nil pointer dereference)
|
||||
|
||||
### Expected Result (with fix)
|
||||
|
||||
The panic is recovered and you see:
|
||||
```
|
||||
------------------------------"invalid memory address or nil pointer dereference"
|
||||
```
|
||||
|
||||
The application continues running.
|
||||
|
||||
### Without the fix
|
||||
|
||||
Comment out the `runtime.ResetSignalHandlers()` call in `app.go` and rebuild. The application will crash with a fatal signal 11 error.
|
||||
|
||||
## Files
|
||||
|
||||
- `app.go` - Contains the `Greet` function that demonstrates panic recovery
|
||||
- `frontend/src/main.js` - Auto-calls `Greet` after 5 seconds to trigger the test
|
||||
|
||||
## Related
|
||||
|
||||
- Issue: https://github.com/wailsapp/wails/issues/3965
|
||||
- Original fix PR: https://github.com/wailsapp/wails/pull/2152
|
||||
44
v2/examples/panic-recovery-test/app.go
Normal file
44
v2/examples/panic-recovery-test/app.go
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
)
|
||||
|
||||
// App struct
|
||||
type App struct {
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
// NewApp creates a new App application struct
|
||||
func NewApp() *App {
|
||||
return &App{}
|
||||
}
|
||||
|
||||
// startup is called when the app starts. The context is saved
|
||||
// so we can call the runtime methods
|
||||
func (a *App) startup(ctx context.Context) {
|
||||
a.ctx = ctx
|
||||
}
|
||||
|
||||
// Greet returns a greeting for the given name
|
||||
func (a *App) Greet(name string) string {
|
||||
go func() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
fmt.Printf("------------------------------%#v\n", err)
|
||||
}
|
||||
}()
|
||||
time.Sleep(5 * time.Second)
|
||||
// Fix signal handlers right before potential panic using the Wails runtime
|
||||
runtime.ResetSignalHandlers()
|
||||
// Nil pointer dereference - causes SIGSEGV
|
||||
var t *time.Time
|
||||
fmt.Println(t.Unix())
|
||||
}()
|
||||
|
||||
return fmt.Sprintf("Hello %s, It's show time!", name)
|
||||
}
|
||||
12
v2/examples/panic-recovery-test/frontend/index.html
Normal file
12
v2/examples/panic-recovery-test/frontend/index.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||||
<title>panic-test</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script src="./src/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
13
v2/examples/panic-recovery-test/frontend/package.json
Normal file
13
v2/examples/panic-recovery-test/frontend/package.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"name": "frontend",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vite": "^3.0.7"
|
||||
}
|
||||
}
|
||||
54
v2/examples/panic-recovery-test/frontend/src/app.css
Normal file
54
v2/examples/panic-recovery-test/frontend/src/app.css
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#logo {
|
||||
display: block;
|
||||
width: 50%;
|
||||
height: 50%;
|
||||
margin: auto;
|
||||
padding: 10% 0 0;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
background-origin: content-box;
|
||||
}
|
||||
|
||||
.result {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
margin: 1.5rem auto;
|
||||
}
|
||||
|
||||
.input-box .btn {
|
||||
width: 60px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
border-radius: 3px;
|
||||
border: none;
|
||||
margin: 0 0 0 20px;
|
||||
padding: 0 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.input-box .btn:hover {
|
||||
background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%);
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.input-box .input {
|
||||
border: none;
|
||||
border-radius: 3px;
|
||||
outline: none;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
padding: 0 10px;
|
||||
background-color: rgba(240, 240, 240, 1);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.input-box .input:hover {
|
||||
border: none;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.input-box .input:focus {
|
||||
border: none;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2016 The Nunito Project Authors (contact@sansoxygen.com),
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 136 KiB |
55
v2/examples/panic-recovery-test/frontend/src/main.js
Normal file
55
v2/examples/panic-recovery-test/frontend/src/main.js
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
import './style.css';
|
||||
import './app.css';
|
||||
|
||||
import logo from './assets/images/logo-universal.png';
|
||||
import {Greet} from '../wailsjs/go/main/App';
|
||||
|
||||
document.querySelector('#app').innerHTML = `
|
||||
<img id="logo" class="logo">
|
||||
<div class="result" id="result">Please enter your name below 👇</div>
|
||||
<div class="input-box" id="input">
|
||||
<input class="input" id="name" type="text" autocomplete="off" />
|
||||
<button class="btn" onclick="greet()">Greet</button>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
document.getElementById('logo').src = logo;
|
||||
|
||||
let nameElement = document.getElementById("name");
|
||||
nameElement.focus();
|
||||
let resultElement = document.getElementById("result");
|
||||
|
||||
// Setup the greet function
|
||||
window.greet = function () {
|
||||
// Get name
|
||||
let name = nameElement.value;
|
||||
|
||||
// Check if the input is empty
|
||||
if (name === "") return;
|
||||
|
||||
// Call App.Greet(name)
|
||||
try {
|
||||
Greet(name)
|
||||
.then((result) => {
|
||||
// Update result with data back from App.Greet()
|
||||
resultElement.innerText = result;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
};
|
||||
|
||||
// Auto-call Greet after 5 seconds to trigger the panic test
|
||||
setTimeout(() => {
|
||||
console.log("Auto-calling Greet to trigger panic test...");
|
||||
Greet("PanicTest")
|
||||
.then((result) => {
|
||||
resultElement.innerText = result + " (auto-called - panic will occur in 5s)";
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("Error:", err);
|
||||
});
|
||||
}, 5000);
|
||||
26
v2/examples/panic-recovery-test/frontend/src/style.css
Normal file
26
v2/examples/panic-recovery-test/frontend/src/style.css
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
html {
|
||||
background-color: rgba(27, 38, 54, 1);
|
||||
text-align: center;
|
||||
color: white;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
color: white;
|
||||
font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto",
|
||||
"Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
||||
sans-serif;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Nunito";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local(""),
|
||||
url("assets/fonts/nunito-v16-latin-regular.woff2") format("woff2");
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100vh;
|
||||
text-align: center;
|
||||
}
|
||||
4
v2/examples/panic-recovery-test/frontend/wailsjs/go/main/App.d.ts
vendored
Executable file
4
v2/examples/panic-recovery-test/frontend/wailsjs/go/main/App.d.ts
vendored
Executable file
|
|
@ -0,0 +1,4 @@
|
|||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
export function Greet(arg1:string):Promise<string>;
|
||||
7
v2/examples/panic-recovery-test/frontend/wailsjs/go/main/App.js
Executable file
7
v2/examples/panic-recovery-test/frontend/wailsjs/go/main/App.js
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
// @ts-check
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
export function Greet(arg1) {
|
||||
return window['go']['main']['App']['Greet'](arg1);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"name": "@wailsapp/runtime",
|
||||
"version": "2.0.0",
|
||||
"description": "Wails Javascript runtime library",
|
||||
"main": "runtime.js",
|
||||
"types": "runtime.d.ts",
|
||||
"scripts": {
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/wailsapp/wails.git"
|
||||
},
|
||||
"keywords": [
|
||||
"Wails",
|
||||
"Javascript",
|
||||
"Go"
|
||||
],
|
||||
"author": "Lea Anthony <lea.anthony@gmail.com>",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/wailsapp/wails/issues"
|
||||
},
|
||||
"homepage": "https://github.com/wailsapp/wails#readme"
|
||||
}
|
||||
249
v2/examples/panic-recovery-test/frontend/wailsjs/runtime/runtime.d.ts
vendored
Normal file
249
v2/examples/panic-recovery-test/frontend/wailsjs/runtime/runtime.d.ts
vendored
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
/*
|
||||
_ __ _ __
|
||||
| | / /___ _(_) /____
|
||||
| | /| / / __ `/ / / ___/
|
||||
| |/ |/ / /_/ / / (__ )
|
||||
|__/|__/\__,_/_/_/____/
|
||||
The electron alternative for Go
|
||||
(c) Lea Anthony 2019-present
|
||||
*/
|
||||
|
||||
export interface Position {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export interface Size {
|
||||
w: number;
|
||||
h: number;
|
||||
}
|
||||
|
||||
export interface Screen {
|
||||
isCurrent: boolean;
|
||||
isPrimary: boolean;
|
||||
width : number
|
||||
height : number
|
||||
}
|
||||
|
||||
// Environment information such as platform, buildtype, ...
|
||||
export interface EnvironmentInfo {
|
||||
buildType: string;
|
||||
platform: string;
|
||||
arch: string;
|
||||
}
|
||||
|
||||
// [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit)
|
||||
// emits the given event. Optional data may be passed with the event.
|
||||
// This will trigger any event listeners.
|
||||
export function EventsEmit(eventName: string, ...data: any): void;
|
||||
|
||||
// [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name.
|
||||
export function EventsOn(eventName: string, callback: (...data: any) => void): () => void;
|
||||
|
||||
// [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple)
|
||||
// sets up a listener for the given event name, but will only trigger a given number times.
|
||||
export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void;
|
||||
|
||||
// [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce)
|
||||
// sets up a listener for the given event name, but will only trigger once.
|
||||
export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void;
|
||||
|
||||
// [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff)
|
||||
// unregisters the listener for the given event name.
|
||||
export function EventsOff(eventName: string, ...additionalEventNames: string[]): void;
|
||||
|
||||
// [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall)
|
||||
// unregisters all listeners.
|
||||
export function EventsOffAll(): void;
|
||||
|
||||
// [LogPrint](https://wails.io/docs/reference/runtime/log#logprint)
|
||||
// logs the given message as a raw message
|
||||
export function LogPrint(message: string): void;
|
||||
|
||||
// [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace)
|
||||
// logs the given message at the `trace` log level.
|
||||
export function LogTrace(message: string): void;
|
||||
|
||||
// [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug)
|
||||
// logs the given message at the `debug` log level.
|
||||
export function LogDebug(message: string): void;
|
||||
|
||||
// [LogError](https://wails.io/docs/reference/runtime/log#logerror)
|
||||
// logs the given message at the `error` log level.
|
||||
export function LogError(message: string): void;
|
||||
|
||||
// [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal)
|
||||
// logs the given message at the `fatal` log level.
|
||||
// The application will quit after calling this method.
|
||||
export function LogFatal(message: string): void;
|
||||
|
||||
// [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo)
|
||||
// logs the given message at the `info` log level.
|
||||
export function LogInfo(message: string): void;
|
||||
|
||||
// [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning)
|
||||
// logs the given message at the `warning` log level.
|
||||
export function LogWarning(message: string): void;
|
||||
|
||||
// [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload)
|
||||
// Forces a reload by the main application as well as connected browsers.
|
||||
export function WindowReload(): void;
|
||||
|
||||
// [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp)
|
||||
// Reloads the application frontend.
|
||||
export function WindowReloadApp(): void;
|
||||
|
||||
// [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop)
|
||||
// Sets the window AlwaysOnTop or not on top.
|
||||
export function WindowSetAlwaysOnTop(b: boolean): void;
|
||||
|
||||
// [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme)
|
||||
// *Windows only*
|
||||
// Sets window theme to system default (dark/light).
|
||||
export function WindowSetSystemDefaultTheme(): void;
|
||||
|
||||
// [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme)
|
||||
// *Windows only*
|
||||
// Sets window to light theme.
|
||||
export function WindowSetLightTheme(): void;
|
||||
|
||||
// [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme)
|
||||
// *Windows only*
|
||||
// Sets window to dark theme.
|
||||
export function WindowSetDarkTheme(): void;
|
||||
|
||||
// [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter)
|
||||
// Centers the window on the monitor the window is currently on.
|
||||
export function WindowCenter(): void;
|
||||
|
||||
// [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle)
|
||||
// Sets the text in the window title bar.
|
||||
export function WindowSetTitle(title: string): void;
|
||||
|
||||
// [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen)
|
||||
// Makes the window full screen.
|
||||
export function WindowFullscreen(): void;
|
||||
|
||||
// [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen)
|
||||
// Restores the previous window dimensions and position prior to full screen.
|
||||
export function WindowUnfullscreen(): void;
|
||||
|
||||
// [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen)
|
||||
// Returns the state of the window, i.e. whether the window is in full screen mode or not.
|
||||
export function WindowIsFullscreen(): Promise<boolean>;
|
||||
|
||||
// [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize)
|
||||
// Sets the width and height of the window.
|
||||
export function WindowSetSize(width: number, height: number): void;
|
||||
|
||||
// [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize)
|
||||
// Gets the width and height of the window.
|
||||
export function WindowGetSize(): Promise<Size>;
|
||||
|
||||
// [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize)
|
||||
// Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions.
|
||||
// Setting a size of 0,0 will disable this constraint.
|
||||
export function WindowSetMaxSize(width: number, height: number): void;
|
||||
|
||||
// [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize)
|
||||
// Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions.
|
||||
// Setting a size of 0,0 will disable this constraint.
|
||||
export function WindowSetMinSize(width: number, height: number): void;
|
||||
|
||||
// [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition)
|
||||
// Sets the window position relative to the monitor the window is currently on.
|
||||
export function WindowSetPosition(x: number, y: number): void;
|
||||
|
||||
// [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition)
|
||||
// Gets the window position relative to the monitor the window is currently on.
|
||||
export function WindowGetPosition(): Promise<Position>;
|
||||
|
||||
// [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide)
|
||||
// Hides the window.
|
||||
export function WindowHide(): void;
|
||||
|
||||
// [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow)
|
||||
// Shows the window, if it is currently hidden.
|
||||
export function WindowShow(): void;
|
||||
|
||||
// [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise)
|
||||
// Maximises the window to fill the screen.
|
||||
export function WindowMaximise(): void;
|
||||
|
||||
// [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise)
|
||||
// Toggles between Maximised and UnMaximised.
|
||||
export function WindowToggleMaximise(): void;
|
||||
|
||||
// [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise)
|
||||
// Restores the window to the dimensions and position prior to maximising.
|
||||
export function WindowUnmaximise(): void;
|
||||
|
||||
// [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised)
|
||||
// Returns the state of the window, i.e. whether the window is maximised or not.
|
||||
export function WindowIsMaximised(): Promise<boolean>;
|
||||
|
||||
// [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise)
|
||||
// Minimises the window.
|
||||
export function WindowMinimise(): void;
|
||||
|
||||
// [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise)
|
||||
// Restores the window to the dimensions and position prior to minimising.
|
||||
export function WindowUnminimise(): void;
|
||||
|
||||
// [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised)
|
||||
// Returns the state of the window, i.e. whether the window is minimised or not.
|
||||
export function WindowIsMinimised(): Promise<boolean>;
|
||||
|
||||
// [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal)
|
||||
// Returns the state of the window, i.e. whether the window is normal or not.
|
||||
export function WindowIsNormal(): Promise<boolean>;
|
||||
|
||||
// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour)
|
||||
// Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels.
|
||||
export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void;
|
||||
|
||||
// [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall)
|
||||
// Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system.
|
||||
export function ScreenGetAll(): Promise<Screen[]>;
|
||||
|
||||
// [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl)
|
||||
// Opens the given URL in the system browser.
|
||||
export function BrowserOpenURL(url: string): void;
|
||||
|
||||
// [Environment](https://wails.io/docs/reference/runtime/intro#environment)
|
||||
// Returns information about the environment
|
||||
export function Environment(): Promise<EnvironmentInfo>;
|
||||
|
||||
// [Quit](https://wails.io/docs/reference/runtime/intro#quit)
|
||||
// Quits the application.
|
||||
export function Quit(): void;
|
||||
|
||||
// [Hide](https://wails.io/docs/reference/runtime/intro#hide)
|
||||
// Hides the application.
|
||||
export function Hide(): void;
|
||||
|
||||
// [Show](https://wails.io/docs/reference/runtime/intro#show)
|
||||
// Shows the application.
|
||||
export function Show(): void;
|
||||
|
||||
// [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext)
|
||||
// Returns the current text stored on clipboard
|
||||
export function ClipboardGetText(): Promise<string>;
|
||||
|
||||
// [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext)
|
||||
// Sets a text on the clipboard
|
||||
export function ClipboardSetText(text: string): Promise<boolean>;
|
||||
|
||||
// [OnFileDrop](https://wails.io/docs/reference/runtime/draganddrop#onfiledrop)
|
||||
// OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings.
|
||||
export function OnFileDrop(callback: (x: number, y: number ,paths: string[]) => void, useDropTarget: boolean) :void
|
||||
|
||||
// [OnFileDropOff](https://wails.io/docs/reference/runtime/draganddrop#dragandddropoff)
|
||||
// OnFileDropOff removes the drag and drop listeners and handlers.
|
||||
export function OnFileDropOff() :void
|
||||
|
||||
// Check if the file path resolver is available
|
||||
export function CanResolveFilePaths(): boolean;
|
||||
|
||||
// Resolves file paths for an array of files
|
||||
export function ResolveFilePaths(files: File[]): void
|
||||
|
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
_ __ _ __
|
||||
| | / /___ _(_) /____
|
||||
| | /| / / __ `/ / / ___/
|
||||
| |/ |/ / /_/ / / (__ )
|
||||
|__/|__/\__,_/_/_/____/
|
||||
The electron alternative for Go
|
||||
(c) Lea Anthony 2019-present
|
||||
*/
|
||||
|
||||
export function LogPrint(message) {
|
||||
window.runtime.LogPrint(message);
|
||||
}
|
||||
|
||||
export function LogTrace(message) {
|
||||
window.runtime.LogTrace(message);
|
||||
}
|
||||
|
||||
export function LogDebug(message) {
|
||||
window.runtime.LogDebug(message);
|
||||
}
|
||||
|
||||
export function LogInfo(message) {
|
||||
window.runtime.LogInfo(message);
|
||||
}
|
||||
|
||||
export function LogWarning(message) {
|
||||
window.runtime.LogWarning(message);
|
||||
}
|
||||
|
||||
export function LogError(message) {
|
||||
window.runtime.LogError(message);
|
||||
}
|
||||
|
||||
export function LogFatal(message) {
|
||||
window.runtime.LogFatal(message);
|
||||
}
|
||||
|
||||
export function EventsOnMultiple(eventName, callback, maxCallbacks) {
|
||||
return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks);
|
||||
}
|
||||
|
||||
export function EventsOn(eventName, callback) {
|
||||
return EventsOnMultiple(eventName, callback, -1);
|
||||
}
|
||||
|
||||
export function EventsOff(eventName, ...additionalEventNames) {
|
||||
return window.runtime.EventsOff(eventName, ...additionalEventNames);
|
||||
}
|
||||
|
||||
export function EventsOffAll() {
|
||||
return window.runtime.EventsOffAll();
|
||||
}
|
||||
|
||||
export function EventsOnce(eventName, callback) {
|
||||
return EventsOnMultiple(eventName, callback, 1);
|
||||
}
|
||||
|
||||
export function EventsEmit(eventName) {
|
||||
let args = [eventName].slice.call(arguments);
|
||||
return window.runtime.EventsEmit.apply(null, args);
|
||||
}
|
||||
|
||||
export function WindowReload() {
|
||||
window.runtime.WindowReload();
|
||||
}
|
||||
|
||||
export function WindowReloadApp() {
|
||||
window.runtime.WindowReloadApp();
|
||||
}
|
||||
|
||||
export function WindowSetAlwaysOnTop(b) {
|
||||
window.runtime.WindowSetAlwaysOnTop(b);
|
||||
}
|
||||
|
||||
export function WindowSetSystemDefaultTheme() {
|
||||
window.runtime.WindowSetSystemDefaultTheme();
|
||||
}
|
||||
|
||||
export function WindowSetLightTheme() {
|
||||
window.runtime.WindowSetLightTheme();
|
||||
}
|
||||
|
||||
export function WindowSetDarkTheme() {
|
||||
window.runtime.WindowSetDarkTheme();
|
||||
}
|
||||
|
||||
export function WindowCenter() {
|
||||
window.runtime.WindowCenter();
|
||||
}
|
||||
|
||||
export function WindowSetTitle(title) {
|
||||
window.runtime.WindowSetTitle(title);
|
||||
}
|
||||
|
||||
export function WindowFullscreen() {
|
||||
window.runtime.WindowFullscreen();
|
||||
}
|
||||
|
||||
export function WindowUnfullscreen() {
|
||||
window.runtime.WindowUnfullscreen();
|
||||
}
|
||||
|
||||
export function WindowIsFullscreen() {
|
||||
return window.runtime.WindowIsFullscreen();
|
||||
}
|
||||
|
||||
export function WindowGetSize() {
|
||||
return window.runtime.WindowGetSize();
|
||||
}
|
||||
|
||||
export function WindowSetSize(width, height) {
|
||||
window.runtime.WindowSetSize(width, height);
|
||||
}
|
||||
|
||||
export function WindowSetMaxSize(width, height) {
|
||||
window.runtime.WindowSetMaxSize(width, height);
|
||||
}
|
||||
|
||||
export function WindowSetMinSize(width, height) {
|
||||
window.runtime.WindowSetMinSize(width, height);
|
||||
}
|
||||
|
||||
export function WindowSetPosition(x, y) {
|
||||
window.runtime.WindowSetPosition(x, y);
|
||||
}
|
||||
|
||||
export function WindowGetPosition() {
|
||||
return window.runtime.WindowGetPosition();
|
||||
}
|
||||
|
||||
export function WindowHide() {
|
||||
window.runtime.WindowHide();
|
||||
}
|
||||
|
||||
export function WindowShow() {
|
||||
window.runtime.WindowShow();
|
||||
}
|
||||
|
||||
export function WindowMaximise() {
|
||||
window.runtime.WindowMaximise();
|
||||
}
|
||||
|
||||
export function WindowToggleMaximise() {
|
||||
window.runtime.WindowToggleMaximise();
|
||||
}
|
||||
|
||||
export function WindowUnmaximise() {
|
||||
window.runtime.WindowUnmaximise();
|
||||
}
|
||||
|
||||
export function WindowIsMaximised() {
|
||||
return window.runtime.WindowIsMaximised();
|
||||
}
|
||||
|
||||
export function WindowMinimise() {
|
||||
window.runtime.WindowMinimise();
|
||||
}
|
||||
|
||||
export function WindowUnminimise() {
|
||||
window.runtime.WindowUnminimise();
|
||||
}
|
||||
|
||||
export function WindowSetBackgroundColour(R, G, B, A) {
|
||||
window.runtime.WindowSetBackgroundColour(R, G, B, A);
|
||||
}
|
||||
|
||||
export function ScreenGetAll() {
|
||||
return window.runtime.ScreenGetAll();
|
||||
}
|
||||
|
||||
export function WindowIsMinimised() {
|
||||
return window.runtime.WindowIsMinimised();
|
||||
}
|
||||
|
||||
export function WindowIsNormal() {
|
||||
return window.runtime.WindowIsNormal();
|
||||
}
|
||||
|
||||
export function BrowserOpenURL(url) {
|
||||
window.runtime.BrowserOpenURL(url);
|
||||
}
|
||||
|
||||
export function Environment() {
|
||||
return window.runtime.Environment();
|
||||
}
|
||||
|
||||
export function Quit() {
|
||||
window.runtime.Quit();
|
||||
}
|
||||
|
||||
export function Hide() {
|
||||
window.runtime.Hide();
|
||||
}
|
||||
|
||||
export function Show() {
|
||||
window.runtime.Show();
|
||||
}
|
||||
|
||||
export function ClipboardGetText() {
|
||||
return window.runtime.ClipboardGetText();
|
||||
}
|
||||
|
||||
export function ClipboardSetText(text) {
|
||||
return window.runtime.ClipboardSetText(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for OnFileDrop returns a slice of file path strings when a drop is finished.
|
||||
*
|
||||
* @export
|
||||
* @callback OnFileDropCallback
|
||||
* @param {number} x - x coordinate of the drop
|
||||
* @param {number} y - y coordinate of the drop
|
||||
* @param {string[]} paths - A list of file paths.
|
||||
*/
|
||||
|
||||
/**
|
||||
* OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings.
|
||||
*
|
||||
* @export
|
||||
* @param {OnFileDropCallback} callback - Callback for OnFileDrop returns a slice of file path strings when a drop is finished.
|
||||
* @param {boolean} [useDropTarget=true] - Only call the callback when the drop finished on an element that has the drop target style. (--wails-drop-target)
|
||||
*/
|
||||
export function OnFileDrop(callback, useDropTarget) {
|
||||
return window.runtime.OnFileDrop(callback, useDropTarget);
|
||||
}
|
||||
|
||||
/**
|
||||
* OnFileDropOff removes the drag and drop listeners and handlers.
|
||||
*/
|
||||
export function OnFileDropOff() {
|
||||
return window.runtime.OnFileDropOff();
|
||||
}
|
||||
|
||||
export function CanResolveFilePaths() {
|
||||
return window.runtime.CanResolveFilePaths();
|
||||
}
|
||||
|
||||
export function ResolveFilePaths(files) {
|
||||
return window.runtime.ResolveFilePaths(files);
|
||||
}
|
||||
5
v2/examples/panic-recovery-test/go.mod
Normal file
5
v2/examples/panic-recovery-test/go.mod
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
module panic-recovery-test
|
||||
|
||||
go 1.21
|
||||
|
||||
require github.com/wailsapp/wails/v2 v2.11.0
|
||||
36
v2/examples/panic-recovery-test/main.go
Normal file
36
v2/examples/panic-recovery-test/main.go
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
|
||||
"github.com/wailsapp/wails/v2"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
)
|
||||
|
||||
//go:embed all:frontend/dist
|
||||
var assets embed.FS
|
||||
|
||||
func main() {
|
||||
// Create an instance of the app structure
|
||||
app := NewApp()
|
||||
|
||||
// Create application with options
|
||||
err := wails.Run(&options.App{
|
||||
Title: "panic-test",
|
||||
Width: 1024,
|
||||
Height: 768,
|
||||
AssetServer: &assetserver.Options{
|
||||
Assets: assets,
|
||||
},
|
||||
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
|
||||
OnStartup: app.startup,
|
||||
Bind: []interface{}{
|
||||
app,
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
println("Error:", err.Error())
|
||||
}
|
||||
}
|
||||
13
v2/examples/panic-recovery-test/wails.json
Normal file
13
v2/examples/panic-recovery-test/wails.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"$schema": "https://wails.io/schemas/config.v2.json",
|
||||
"name": "panic-recovery-test",
|
||||
"outputfilename": "panic-recovery-test",
|
||||
"frontend:install": "npm install",
|
||||
"frontend:build": "npm run build",
|
||||
"frontend:dev:watcher": "npm run dev",
|
||||
"frontend:dev:serverUrl": "auto",
|
||||
"author": {
|
||||
"name": "Lea Anthony",
|
||||
"email": "lea.anthony@gmail.com"
|
||||
}
|
||||
}
|
||||
|
|
@ -17,7 +17,7 @@ require (
|
|||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/jackmordaunt/icns v1.0.0
|
||||
github.com/jaypipes/ghw v0.13.0
|
||||
github.com/jaypipes/ghw v0.21.3
|
||||
github.com/labstack/echo/v4 v4.13.3
|
||||
github.com/labstack/gommon v0.4.2
|
||||
github.com/leaanthony/clir v1.3.0
|
||||
|
|
@ -53,7 +53,6 @@ require (
|
|||
dario.cat/mergo v1.0.0 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.1.5 // indirect
|
||||
github.com/StackExchange/wmi v1.2.1 // indirect
|
||||
github.com/alecthomas/chroma/v2 v2.14.0 // indirect
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||
github.com/aymerick/douceur v0.2.0 // indirect
|
||||
|
|
@ -72,7 +71,7 @@ require (
|
|||
github.com/gorilla/css v1.0.1 // indirect
|
||||
github.com/itchyny/gojq v0.12.13 // indirect
|
||||
github.com/itchyny/timefmt-go v0.1.5 // indirect
|
||||
github.com/jaypipes/pcidb v1.0.1 // indirect
|
||||
github.com/jaypipes/pcidb v1.1.1 // indirect
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect
|
||||
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
||||
|
|
@ -82,7 +81,6 @@ require (
|
|||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||
github.com/microcosm-cc/bluemonday v1.0.27 // indirect
|
||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||
github.com/muesli/reflow v0.3.0 // indirect
|
||||
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
||||
|
|
@ -101,6 +99,7 @@ require (
|
|||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
||||
github.com/yuin/goldmark v1.7.4 // indirect
|
||||
github.com/yuin/goldmark-emoji v1.0.3 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
golang.org/x/crypto v0.33.0 // indirect
|
||||
golang.org/x/image v0.12.0 // indirect
|
||||
golang.org/x/sync v0.11.0 // indirect
|
||||
|
|
@ -108,6 +107,6 @@ require (
|
|||
golang.org/x/text v0.22.0 // indirect
|
||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
howett.net/plist v1.0.0 // indirect
|
||||
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9 // indirect
|
||||
mvdan.cc/sh/v3 v3.7.0 // indirect
|
||||
)
|
||||
|
|
|
|||
21
v2/go.sum
21
v2/go.sum
|
|
@ -24,8 +24,6 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc
|
|||
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
||||
github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
|
||||
github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
|
||||
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
|
||||
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
|
||||
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
|
||||
github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE=
|
||||
|
|
@ -88,7 +86,7 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj
|
|||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
||||
github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0=
|
||||
github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A=
|
||||
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
|
||||
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
|
||||
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
|
||||
|
|
@ -117,10 +115,10 @@ github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm
|
|||
github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8=
|
||||
github.com/jackmordaunt/icns v1.0.0 h1:RYSxplerf/l/DUd09AHtITwckkv/mqjVv4DjYdPmAMQ=
|
||||
github.com/jackmordaunt/icns v1.0.0/go.mod h1:7TTQVEuGzVVfOPPlLNHJIkzA6CoV7aH1Dv9dW351oOo=
|
||||
github.com/jaypipes/ghw v0.13.0 h1:log8MXuB8hzTNnSktqpXMHc0c/2k/WgjOMSUtnI1RV4=
|
||||
github.com/jaypipes/ghw v0.13.0/go.mod h1:In8SsaDqlb1oTyrbmTC14uy+fbBMvp+xdqX51MidlD8=
|
||||
github.com/jaypipes/pcidb v1.0.1 h1:WB2zh27T3nwg8AE8ei81sNRb9yWBii3JGNJtT7K9Oic=
|
||||
github.com/jaypipes/pcidb v1.0.1/go.mod h1:6xYUz/yYEyOkIkUt2t2J2folIuZ4Yg6uByCGFXMCeE4=
|
||||
github.com/jaypipes/ghw v0.21.3 h1:v5mUHM+RN854Vqmk49Uh213jyUA4+8uqaRajlYESsh8=
|
||||
github.com/jaypipes/ghw v0.21.3/go.mod h1:GPrvwbtPoxYUenr74+nAnWbardIZq600vJDD5HnPsPE=
|
||||
github.com/jaypipes/pcidb v1.1.1 h1:QmPhpsbmmnCwZmHeYAATxEaoRuiMAJusKYkUncMC0ro=
|
||||
github.com/jaypipes/pcidb v1.1.1/go.mod h1:x27LT2krrUgjf875KxQXKB0Ha/YXLdZRVmw6hH0G7g8=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
||||
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck=
|
||||
|
|
@ -178,8 +176,6 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T
|
|||
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
|
||||
github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
|
||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
|
||||
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
|
||||
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg=
|
||||
|
|
@ -263,6 +259,8 @@ github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg=
|
|||
github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
|
||||
github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4=
|
||||
github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U=
|
||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
|
|
@ -340,7 +338,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
|
|||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
|
|
@ -348,7 +345,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
|
|||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
|
||||
howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
|
||||
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9 h1:eeH1AIcPvSc0Z25ThsYF+Xoqbn0CI/YnXVYoTLFdGQw=
|
||||
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9/go.mod h1:fyFX5Hj5tP1Mpk8obqA9MZgXT416Q5711SDT7dQLTLk=
|
||||
mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg=
|
||||
mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8=
|
||||
|
|
|
|||
65
v2/pkg/runtime/signal_linux.go
Normal file
65
v2/pkg/runtime/signal_linux.go
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
//go:build linux
|
||||
|
||||
package runtime
|
||||
|
||||
/*
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
static void fix_signal(int signum)
|
||||
{
|
||||
struct sigaction st;
|
||||
|
||||
if (sigaction(signum, NULL, &st) < 0) {
|
||||
return;
|
||||
}
|
||||
st.sa_flags |= SA_ONSTACK;
|
||||
sigaction(signum, &st, NULL);
|
||||
}
|
||||
|
||||
static void fix_all_signals()
|
||||
{
|
||||
#if defined(SIGSEGV)
|
||||
fix_signal(SIGSEGV);
|
||||
#endif
|
||||
#if defined(SIGBUS)
|
||||
fix_signal(SIGBUS);
|
||||
#endif
|
||||
#if defined(SIGFPE)
|
||||
fix_signal(SIGFPE);
|
||||
#endif
|
||||
#if defined(SIGABRT)
|
||||
fix_signal(SIGABRT);
|
||||
#endif
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
|
||||
// ResetSignalHandlers resets signal handlers to allow panic recovery.
|
||||
//
|
||||
// On Linux, WebKit (used for the webview) may install signal handlers without
|
||||
// the SA_ONSTACK flag, which prevents Go from properly recovering from panics
|
||||
// caused by nil pointer dereferences or other memory access violations.
|
||||
//
|
||||
// Call this function immediately before code that might panic to ensure
|
||||
// the signal handlers are properly configured for Go's panic recovery mechanism.
|
||||
//
|
||||
// Example usage:
|
||||
//
|
||||
// go func() {
|
||||
// defer func() {
|
||||
// if err := recover(); err != nil {
|
||||
// log.Printf("Recovered from panic: %v", err)
|
||||
// }
|
||||
// }()
|
||||
// runtime.ResetSignalHandlers()
|
||||
// // Code that might panic...
|
||||
// }()
|
||||
//
|
||||
// Note: This function only has an effect on Linux. On other platforms,
|
||||
// it is a no-op.
|
||||
func ResetSignalHandlers() {
|
||||
C.fix_all_signals()
|
||||
}
|
||||
18
v2/pkg/runtime/signal_other.go
Normal file
18
v2/pkg/runtime/signal_other.go
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
//go:build !linux
|
||||
|
||||
package runtime
|
||||
|
||||
// ResetSignalHandlers resets signal handlers to allow panic recovery.
|
||||
//
|
||||
// On Linux, WebKit (used for the webview) may install signal handlers without
|
||||
// the SA_ONSTACK flag, which prevents Go from properly recovering from panics
|
||||
// caused by nil pointer dereferences or other memory access violations.
|
||||
//
|
||||
// Call this function immediately before code that might panic to ensure
|
||||
// the signal handlers are properly configured for Go's panic recovery mechanism.
|
||||
//
|
||||
// Note: This function only has an effect on Linux. On other platforms,
|
||||
// it is a no-op.
|
||||
func ResetSignalHandlers() {
|
||||
// No-op on non-Linux platforms
|
||||
}
|
||||
|
|
@ -186,7 +186,16 @@ func Install(options *Options) (bool, *Template, error) {
|
|||
return false, nil, err
|
||||
}
|
||||
options.TargetDir = targetDir
|
||||
if !fs.DirExists(options.TargetDir) {
|
||||
if fs.DirExists(options.TargetDir) {
|
||||
// Check if directory is non-empty
|
||||
entries, err := os.ReadDir(options.TargetDir)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
if len(entries) > 0 {
|
||||
return false, nil, fmt.Errorf("cannot initialise project in non-empty directory: %s", options.TargetDir)
|
||||
}
|
||||
} else {
|
||||
err := fs.Mkdir(options.TargetDir)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
|
|
|
|||
|
|
@ -52,3 +52,48 @@ func TestInstall(t *testing.T) {
|
|||
is2.NoErr(err)
|
||||
|
||||
}
|
||||
|
||||
func TestInstallFailsInNonEmptyDirectory(t *testing.T) {
|
||||
is2 := is.New(t)
|
||||
|
||||
// Create a temp directory with a file in it
|
||||
tempDir, err := os.MkdirTemp("", "wails-test-nonempty-*")
|
||||
is2.NoErr(err)
|
||||
defer func() {
|
||||
_ = os.RemoveAll(tempDir)
|
||||
}()
|
||||
|
||||
// Create a file in the directory to make it non-empty
|
||||
err = os.WriteFile(filepath.Join(tempDir, "existing-file.txt"), []byte("test"), 0644)
|
||||
is2.NoErr(err)
|
||||
|
||||
options := &Options{
|
||||
ProjectName: "test",
|
||||
TemplateName: "vanilla",
|
||||
TargetDir: tempDir,
|
||||
}
|
||||
|
||||
_, _, err = Install(options)
|
||||
is2.True(err != nil) // Should fail
|
||||
is2.True(err.Error() == "cannot initialise project in non-empty directory: "+tempDir)
|
||||
}
|
||||
|
||||
func TestInstallSucceedsInEmptyDirectory(t *testing.T) {
|
||||
is2 := is.New(t)
|
||||
|
||||
// Create an empty temp directory
|
||||
tempDir, err := os.MkdirTemp("", "wails-test-empty-*")
|
||||
is2.NoErr(err)
|
||||
defer func() {
|
||||
_ = os.RemoveAll(tempDir)
|
||||
}()
|
||||
|
||||
options := &Options{
|
||||
ProjectName: "test",
|
||||
TemplateName: "vanilla",
|
||||
TargetDir: tempDir,
|
||||
}
|
||||
|
||||
_, _, err = Install(options)
|
||||
is2.NoErr(err) // Should succeed in empty directory
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,3 +70,57 @@ If the added package does not resolve the issue, additional GStreamer dependenci
|
|||
- This issue impacts [Tauri apps](https://tauri.app/).
|
||||
|
||||
Source: [developomp](https://github.com/developomp) on the [Tauri discussion board](https://github.com/tauri-apps/tauri/issues/4642#issuecomment-1643229562).
|
||||
|
||||
## Panic Recovery / Signal Handling Issues
|
||||
|
||||
### App crashes with "non-Go code set up signal handler without SA_ONSTACK flag"
|
||||
|
||||
On Linux, if your application crashes with an error like:
|
||||
|
||||
```
|
||||
signal 11 received but handler not on signal stack
|
||||
fatal error: non-Go code set up signal handler without SA_ONSTACK flag
|
||||
```
|
||||
|
||||
This occurs because WebKit (used for the webview) installs signal handlers that interfere with Go's panic recovery mechanism.
|
||||
Normally, Go can convert signals like SIGSEGV (from nil pointer dereferences) into recoverable panics, but WebKit's signal
|
||||
handlers prevent this.
|
||||
|
||||
### Solution
|
||||
|
||||
Use the `runtime.ResetSignalHandlers()` function immediately before code that might panic:
|
||||
|
||||
```go
|
||||
import "github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
|
||||
go func() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("Recovered from panic: %v", err)
|
||||
}
|
||||
}()
|
||||
// Reset signal handlers right before potentially dangerous code
|
||||
runtime.ResetSignalHandlers()
|
||||
|
||||
// Your code that might panic...
|
||||
}()
|
||||
```
|
||||
|
||||
:::warning Important
|
||||
|
||||
- Call `ResetSignalHandlers()` in each goroutine where you need panic recovery
|
||||
- Call it immediately before the code that might panic, as WebKit may reset the handlers at any time
|
||||
- This is only necessary on Linux - the function is a no-op on other platforms
|
||||
|
||||
:::
|
||||
|
||||
### Why This Happens
|
||||
|
||||
WebKit installs its own signal handlers for garbage collection and other internal processes. These handlers don't include
|
||||
the `SA_ONSTACK` flag that Go requires to properly handle signals on the correct stack. When a signal like SIGSEGV occurs,
|
||||
Go's runtime can't recover because the signal is being handled on the wrong stack.
|
||||
|
||||
The `ResetSignalHandlers()` function adds the `SA_ONSTACK` flag to the signal handlers for SIGSEGV, SIGBUS, SIGFPE, and
|
||||
SIGABRT, allowing Go's panic recovery to work correctly.
|
||||
|
||||
Source: [GitHub Issue #3965](https://github.com/wailsapp/wails/issues/3965)
|
||||
|
|
|
|||
|
|
@ -98,3 +98,46 @@ interface EnvironmentInfo {
|
|||
arch: string;
|
||||
}
|
||||
```
|
||||
|
||||
### ResetSignalHandlers
|
||||
|
||||
Resets signal handlers to allow panic recovery from nil pointer dereferences and other memory access violations.
|
||||
|
||||
Go: `ResetSignalHandlers()`
|
||||
|
||||
:::info Linux Only
|
||||
|
||||
This function only has an effect on Linux. On macOS and Windows, it is a no-op.
|
||||
|
||||
On Linux, WebKit (used for the webview) may install signal handlers without the `SA_ONSTACK` flag, which prevents
|
||||
Go from properly recovering from panics caused by nil pointer dereferences (SIGSEGV) or other memory access violations.
|
||||
|
||||
Call this function immediately before code that might panic to ensure the signal handlers are properly configured
|
||||
for Go's panic recovery mechanism.
|
||||
|
||||
:::
|
||||
|
||||
#### Example
|
||||
|
||||
```go
|
||||
go func() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("Recovered from panic: %v", err)
|
||||
}
|
||||
}()
|
||||
// Reset signal handlers right before potentially dangerous code
|
||||
runtime.ResetSignalHandlers()
|
||||
|
||||
// Code that might cause a nil pointer dereference...
|
||||
var t *time.Time
|
||||
fmt.Println(t.Unix()) // This would normally crash on Linux
|
||||
}()
|
||||
```
|
||||
|
||||
:::warning
|
||||
|
||||
This function must be called in each goroutine where you want panic recovery to work, and should be called
|
||||
immediately before the code that might panic, as WebKit may reset the signal handlers at any time.
|
||||
|
||||
:::
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
### Fixed
|
||||
|
||||
- Fixed `wails init` to prevent initialization in non-empty directories when using the `-d` flag, avoiding accidental data loss [`#4940`](https://github.com/wailsapp/wails/issues/4940) by `@leaanthony`
|
||||
- Fixed missing `EventsOffAll` in runtime templates for all frontend frameworks [#4883](https://github.com/wailsapp/wails/pull/4883) by @narcilee7
|
||||
- Fixed Linux crash on panic in JS-bound Go methods due to WebKit overriding signal handlers [#3965](https://github.com/wailsapp/wails/issues/3965) by @leaanthony
|
||||
- Fixed code block range in "How Does It Work?" documentation [#4884](https://github.com/wailsapp/wails/pull/4884) by @msal4
|
||||
|
|
|
|||
|
|
@ -16,12 +16,28 @@ text {
|
|||
}
|
||||
</style>
|
||||
<text x="400" y="100" text-anchor="middle" class="sponsorkit-tier-title">Silver Sponsors</text><a href="https://orb.net" class="sponsorkit-link" target="_blank" id="orbforge">
|
||||
<text x="400" y="243" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Orb</text>
|
||||
<text x="290" y="243" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Orb</text>
|
||||
|
||||
<clipPath id="cd9f93e">
|
||||
<rect x="350" y="125" width="100" height="100" rx="10" ry="10" />
|
||||
<rect x="240" y="125" width="100" height="100" rx="10" ry="10" />
|
||||
</clipPath>
|
||||
<image x="350" y="125" width="100" height="100" href="data:image/webp;base64,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" clip-path="url(#cd9f93e)"/>
|
||||
<image x="240" y="125" width="100" height="100" href="data:image/webp;base64,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" clip-path="url(#cd9f93e)"/>
|
||||
</a>
|
||||
<a href="http://blog.johnoscott.com" class="sponsorkit-link" target="_blank" id="johnoscott">
|
||||
<text x="400" y="243" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Johno Scott</text>
|
||||
|
||||
<clipPath id="c52f250">
|
||||
<rect x="350" y="125" width="100" height="100" rx="50" ry="50" />
|
||||
</clipPath>
|
||||
<image x="350" y="125" width="100" height="100" href="data:image/webp;base64,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" clip-path="url(#c52f250)"/>
|
||||
</a>
|
||||
<a href="http://jclark.com" class="sponsorkit-link" target="_blank" id="jclark">
|
||||
<text x="510" y="243" text-anchor="middle" class="sponsorkit-name" fill="currentColor">James Clark</text>
|
||||
|
||||
<clipPath id="c4c2262">
|
||||
<rect x="460" y="125" width="100" height="100" rx="50" ry="50" />
|
||||
</clipPath>
|
||||
<image x="460" y="125" width="100" height="100" href="data:image/webp;base64,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" clip-path="url(#c4c2262)"/>
|
||||
</a><text x="400" y="285" text-anchor="middle" class="sponsorkit-tier-title">Bronze Sponsors</text><a href="https://codybentley.dev" class="sponsorkit-link" target="_blank" id="sircodemane">
|
||||
<text x="180" y="413" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Cody Bentley</text>
|
||||
|
||||
|
|
@ -61,108 +77,68 @@ text {
|
|||
<rect x="577.5" y="310" width="85" height="85" rx="8.5" ry="8.5" />
|
||||
</clipPath>
|
||||
<image x="577.5" y="310" width="85" height="85" href="data:image/webp;base64,UklGRowFAABXRUJQVlA4IIAFAAAwHQCdASp4AHgAPm00lkckIyIhKZNp8IANiWIA1T2r/u2sP+E+WbpieLvEfET2l/ufQp6kvMA/VzpF+YDzgPxm94voAfr11p/oAeWh+2Hwo/3b/s2IDR7x6f9Rwo7AG8cwA7xnCDF985r0r/4/cP6Mxhi4t8W+GbFqfhQKQVZ3IgWPtcfA2svR7dD04jXfLm57gWbyvN37PPUjXAP5c2ebGWlzSWSwIZw2yYHQesa8vKE7H8yF9FjofmYX7+uLuHHdx2W4UvE042iYJtdjrY/3UWIreVQl8QQZHDUK37EdaNIdkPhXY+3fxfRUv609aer4AAD+92uv7Gb3I+n0ozhwyvecAACxbFt7MhCuc/U65f6CMOSSctnGpc5gj8Fe/Yw7fjsrOcLUd20ETN7E2Us5jwsFksP4/avwhgxuyPeaXNH9RIb6Jjq5ighP90JWDyKgboa0qn5jMSn14QdyA/WGjGUGx0iHOoOloAPnvrqd5un2T0hoYwgaTW+24CiB4/EZ47WC2WK1Z2dLBkgtrjFj3LYBHwrqBF/5j2HUEN4a6HxpUL4rP0OOQxCKV0L7i3UWSwGRHXwDmSZ2AjrlugaKF0pe03jyi0Y98RulL42iLF06Shhp3+xbehKGJgea6u8yggmfmveu2j15iV3kfK+drjyGyejCkkMb78BdQuhR5IEAQ4uLjf9QY/FGdR9/N+L2zA1LvTZqEq1V3hqeg99drkvp+DvxSeHTvBRakD5JnC1c747KvYhgHNBM3qeirdPlCWgP+73ZR76hkhI0VMEguODgVTPtDm9RAkd/21HZvvoqHJF2/xqXiTt1x81fvd7P1DKyyQTvgbWfH49WxcqSTG73SGjpwxXnw5/LItQfzqMicjDbQnuBlQIhbh6T2Zv8i5UcgS6XZWiQt6YqnBaKbbqwJDMdZsfTZKz0GT0VKfdu46GwIvxdzPQFATlbuUMnpWwcn5NQJgfU2tYZt8/pYFfSau4tDBex1Q422SBzaNiukG/yuHKPskSUx1HjE48VQLjEtY+Leyf7xGyaABYJKZRbmvM9i+EswnodQryvaYPUOPwlVQ3vnFzukFaPEuW08bYMWVsz5skmDJOQ9Z0y0T+Lpi4TOyhbS4IyWgct2ZQSL0iMtAkm1+Wf09GJTL21eN65fQEX8T2uRuEfL+7ccRVAhz20K4vIutfA1WO4//CH3sLp96nqq5WbJqZymvTTmmfPUl5XBzfo/e9cFhyHov4TtHDSCuZZHePGqzSal8ROh0+VzT/64vrC+G80o7RAJ/iyTyFcqXmkzLghj5EdhATzFPC+hn9yYPSEiKY5x9eS9DyjWMYGluxKc/QQT0eINiI2lRR6nWRDglLg5cwVD4gPh8lv7Qu+sN53WC8pQ8jIOWIzeB4YsL0cPUbeOf+MCbJzA+Fu5m1eqNN9/9XSUclRlNNurz8rA8DGRW2Xt21YhkTWpppEzb3isLTLJT9Jr2frfLPD9kv9+aHNMx8w2O/OPofIaLwZuRKY4Rs6C9+jVaFH+QH+8+Fwe8tQ1I609MwRcxfSPyrGKyk3gf0Wx+1TUnqE9BVMY2zYsS4oop2NiQcRWVr/W49GUrCM/A+UPj/hS7VJJvAf7CUsatsbwkxHyUqUB0Rs+zqABbQU/O94i5/XfyAftP/F0bsNAt98+Ig/8/e1y6zttBPuClsCyzoZhld3Su7hXios02QCFf8DZX582YcoAvh1396r+v/ajed+MTyYMgS5xzhqqlsBqTyEdRusUMC+sFmircgB7FQqtzjswIb5L7sekwZEpUUubUDkFfF48LgktZ75RaBurac1xi8z6D1dVdgbFEq1VrsMfSzZGeubiHeR5ULfjEEeW7jNALQYRC/suAAAAAAA" clip-path="url(#cd94937)"/>
|
||||
</a><text x="400" y="460" text-anchor="middle" class="sponsorkit-tier-title">Covering Costs</text><a href="https://utf9k.net" class="sponsorkit-link" target="_blank" id="marcus-crane">
|
||||
<text x="220" y="568" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Marcus</text>
|
||||
|
||||
<clipPath id="c5ef27a">
|
||||
<rect x="187.5" y="485" width="65" height="65" rx="32.5" ry="32.5" />
|
||||
</clipPath>
|
||||
<image x="187.5" y="485" width="65" height="65" href="data:image/webp;base64,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" clip-path="url(#c5ef27a)"/>
|
||||
</a>
|
||||
<a href="https://github.com/iaincollins" class="sponsorkit-link" target="_blank" id="iaincollins">
|
||||
<text x="310" y="568" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Iain</text>
|
||||
|
||||
<clipPath id="c96f165">
|
||||
<rect x="277.5" y="485" width="65" height="65" rx="32.5" ry="32.5" />
|
||||
</clipPath>
|
||||
<image x="277.5" y="485" width="65" height="65" href="data:image/webp;base64,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" clip-path="url(#c96f165)"/>
|
||||
</a>
|
||||
<a href="https://github.com/mstiles-grs" class="sponsorkit-link" target="_blank" id="mstiles-grs">
|
||||
</a><text x="400" y="460" text-anchor="middle" class="sponsorkit-tier-title">Covering Costs</text><a href="https://github.com/mstiles-grs" class="sponsorkit-link" target="_blank" id="mstiles-grs">
|
||||
<text x="400" y="568" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Michael</text>
|
||||
|
||||
<clipPath id="cc22eb4">
|
||||
<rect x="367.5" y="485" width="65" height="65" rx="32.5" ry="32.5" />
|
||||
</clipPath>
|
||||
<image x="367.5" y="485" width="65" height="65" href="data:image/webp;base64,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" clip-path="url(#cc22eb4)"/>
|
||||
</a>
|
||||
<a href="https://blueskyfish.de" class="sponsorkit-link" target="_blank" id="blueskyfish">
|
||||
<text x="490" y="568" text-anchor="middle" class="sponsorkit-name" fill="currentColor">BlueSky...</text>
|
||||
|
||||
<clipPath id="cd52116">
|
||||
<rect x="457.5" y="485" width="65" height="65" rx="32.5" ry="32.5" />
|
||||
</clipPath>
|
||||
<image x="457.5" y="485" width="65" height="65" href="data:image/webp;base64,UklGRsAEAABXRUJQVlA4ILQEAABQFwCdASpQAFAAPm0ukkWkIqGUek9UQAbEsgBjPPkuPzY/G+bbUf7tTE9sf5jPOq87ffa/Qr6WX9xcJR7Df8v0JyW/BXvB2sN4DlV8K9qCwcvTTzvfTH7AfAV+sPWb9JX9mUX5vNn/x3AapqL6jvmlVJp2uBCHX3yjz92DCc/K4XlzFkH/dge07diwfLDb2CwqM3kaX6nOtNx4VwxLT5RKXRbkrBLE2ULGDz+HDZy0Tzh3ys9UhW3Ns+If5+0pyxOBMwAA/ktbEUPf8CYNTa6nEc5GuN7SdtzUSgdAmxaKde7ggnWKHOfQA3Rg1/OvoR+44Qmd75kbeFUZmX4seR9oMObxe/3o8dXB4Ld28U2vJigtWyXN0Ytyp1AUBrcjkYS5w4ZGsngdvcaDvHNml3Qz4PBvcRg6dJUo48CPFBglWcFeiGckzZWIYcixx3rdidCkfzwW/+JEIW10PsxDa5sE1TAi6dNWgrxY1B4OZkgtFfz8yteNexubwvC4GmV/+vfd/XT+P+XaNJ4PPB+PBb9Di/6XNLrqEudD67GbYBTp+UHNBbEzrHla61Ykh65jPCrEnEIGZAlQyrMAApJE/CZeU3ACj8DFxY5MYwjvDAV51zmXLk7FxINOEV0P4c4GqkdmL+AN0z/3TocLEpNSBfvC/hP/iCVGrKbHBSrt7teFPoZqvNsn1cTOjsQ/P2XM39DfMP1LSVOHfdFyUe5zrcYcawhOQvtfI340d+8/9ccT22L+BOpR/B1YGAISWxxVUWM2tW/UfwnHAzLwvcraUW6oo+VIx2hJO3ZINSwh0Nk44qkvF3ovxXvzdiczW4vOmn3N1WMlErhHkM3Mn+n/hy45xb7Warn/iVpZ1t+XxruZvScX7T/rDFII9KSYbgcp5ITaYgIJQviiN0/ENNo60mDYaP8Wunor4LvhS52F4S9J73COrDbCO+o2QxB9ek/1ECHu16+j6/Z8nNcBZ5A0FbA9LBIInM+k69mX2th0UpWcnFDwWYFIxHlPnM4a+TBD+LR1wD8teUpy283GM03G9zuvccejX74Qkl+WZ+35bHudyK3Mvu0lH8rb1zGQN0NiboNEUQRG0Rk0pxPnpg2k4TUhfN2Ny+GXgIBEYrR9eePYnVQvI25Dm2YxYkqjfXIN1XawB1MJSGujgw91kkyul1BwoQJDAb/KyFliXYzofdgN8PvXgUN6MVzm4PL4Q0HoRU0Th3lenUnl74DMqYqku1zihy+sDSR+ti2XhT/gdWG7UjqTVuXQEZSzSjB8km6adoUsR6AMgCUsG0ziLWS+H7Murd2J2ano5dLRh/sOIoAsAqtK9Dzd+5QNEQS264u92r6zu/4ytAQZwDUHsWLg/eBAcOLP05iVeLjjchwaZTXbvZ89HKnkqmussRStmubw4L7g7S8R/1G3HKSQ+D/FC9VNpjfUS1brN7XuyS1L2XI+s1TkwAByIDiWP79CS/m6fJJnfgFwdRjEzTpkfGJF/vyZlzdfAkNuM4DgZ4uzjkD56r39bDyx+3muuUXAfF53hyNZQmgpmWF9Umc5nTlDrc8SidDMqc2BGhAS8Tt63DD7QY1AxugS+n1knfwpKXA3n5HcAAAA" clip-path="url(#cd52116)"/>
|
||||
</a>
|
||||
<a href="https://digitalgods.ai" class="sponsorkit-link" target="_blank" id="Digitalgods2">
|
||||
<text x="580" y="568" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Digital...</text>
|
||||
|
||||
<clipPath id="cab03bb">
|
||||
<rect x="547.5" y="485" width="65" height="65" rx="32.5" ry="32.5" />
|
||||
</clipPath>
|
||||
<image x="547.5" y="485" width="65" height="65" href="data:image/webp;base64,UklGRooFAABXRUJQVlA4IH4FAAAwGQCdASpQAFAAPm0ukkakIiGhK5jrAIANiWUAvNiqQWHj7e3nqmbh5E/bigd3Nv1yz2BH1z1qegB+cPRXzfPVXsDeWp7HP2n9h39cGpAqAVyFcgL6l6ouKXNIYG3f6xqW4X0c6XATK+YX3HTWab8BsOKvreGs1OxC51SyhySotyTRaeOoGLUCaLdw5RF/005iONLLMmEfOyzWvA1F6vgiopZYJ6BjCIxIs8FoxUOEwpXvi1J4LDWU/fwyI2Xr3AL1Th8QY8Ej+fMJ84/G7r4wOlAA/voUBTIW8Z3frv7Q0SuCBGRKbzpujMIqQrJye2uZwp+p4u5phmLV+nmdTm/t5B7g22B5SwiecQeAeZ/IpZr5urw6LfwjDioppvWl9vlTTubrhXgdv36dN18RkeaUom9NWoGURTNAX4whP5iEzCAGCQGjQ/n17TzqSkjYlyATtg9aVNjMoSv3Eqn4fy7k7TooyzbrmBTgH3tnwerNkoICYzR7pCs6+C2dnbncsX8smqLkGxADOh3gyhIZweu3OxkFrZwHFwSxBHbZ/1MpjGhVjmV/0UrrX5Mm0VwAabmZl/7FIXMQTKOWkJTRrNcKDU3d6wh/i5ULbSWX/UnYjaBbW0EMARlh15nTtfjfGfmQvYzqsYdJwInVBBvsvdiPCwdDHBm6TSG/mjfZWqvRbcGeSwjqwUKWrC0si36++PUzknKzSZlzlQAfqmImO2tFsHk3GjmJIsXpoR5uf/0ifhIb5f0qAWysKkGLfPYOqeAJf9LLcwE1nwtnA+HFyzp8io4FuxBNoDnlBKutk8rYKKpQWhIoW8AippoQVRc/bU78gLTYpZVlOYPhYVY4T4G6M94ivY7xX7ykqVA3L5+kuzIIuDzcnsqT6c1HjRbfaTHvHuAGbe19hbtpkb6XIXjA3ciY5pPumY/HK03CLU5Pgx/0bVE/mPs8xjM42X8GuWcGvNtZy6TNOiToLFsXo3yHA07aWHzzYnVNk45f8zY8ErZtA6JV3P2oZ80AhLUXp5jVQcfpW6owMRJLRjYvuai0aJgYp2z5eUGWpUy+s1UsmwV8Woe3k4pyqfK90Hcq8rSSZa0ym6/hjNE+vewgg0RxCh96uMg4A/D6z5EajTPDQFJq7h/a3pCVDeM2eYwj/f7KSSmSJtJWOCL6GmtaEPm5g+trf0gkUW9H4BK/yUqZmmCv9K8n31kwW+yyW496ZEihy7sA/9JN0py7puU2ZYuN0OhwZSm+cn48B9/eQ5OYsZ51zER8LebAgrNX7Ej51xXdcJAshff1Hkvot9W37OTD0XmoZ4bKG61+QGDDpE1tw3Ya0m/BwM8fVGhzuGvuuwb8O/j+tbmUdSsycw9zQ6m0JnI8ikS8/1X8lE6LNhdQf7x+FaSaMxsZ0Mp+Fy2R0VCpNMYVAq/Q1ejaxsPVU0ECPA2EEEvpWBfDG4Da002VXRXB8ZzWqYY/4RxNO+1hMPoOHCBObGojQ2vLmNc4xoOybA5Eg+xRUgcEcXd9Exdi+q0sRwhElZnGzbMESLCHfGxLl9pEdYItek7lPR+7NeJxvHSAoKBNy469DTswSmA71JhWGskkiR+uiXSQREr9tOmVCcbaTW+7LTaH2IgZ/5CS1u/CUlKSTBIt5PQ4K9oYBHTTvGihSkf714XzuK6mMBaBXCBoUDYEuW07FzewhDUSXw/gLbCCBBrjiUvao9taF1CkHV9fsMm6JXT7YhaL+4yPSXQVFtN7TmyJM1XblHlDcxr0H8MR0AX5QW12jTk6N199mgbrmmCiZUcNC8w1Dr1oWu/bAogsT/BlVVa7jfaC9+AFtqV5cJQvUXPZekWTtMCTf2i3r3erYMtqZ/2aAzEVMA9JaIgeD5nyZSgAAA==" clip-path="url(#cab03bb)"/>
|
||||
</a><text x="400" y="615" text-anchor="middle" class="sponsorkit-tier-title">Buying Breakfast</text><a href="https://taigrr.com" class="sponsorkit-link" target="_blank" id="taigrr">
|
||||
<text x="137.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Tai Groot</text>
|
||||
<text x="175" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Tai Groot</text>
|
||||
|
||||
<clipPath id="cdd9d5f">
|
||||
<rect x="110" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="147.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="110" y="640" width="55" height="55" href="data:image/webp;base64,UklGRv4DAABXRUJQVlA4IPIDAABQFgCdASpQAFAAPmUqkUWkIqGa2eYAQAZEtgBgTw4tLzk/Acd7yx355zQzfbt+76U3hAdTLzAfZX1znqAfzn/Pdaf6AHlteyz+zH7Oe1VmolnDGbmz3X6aUqu70AJMJ0/7jwMs4/a9jyJjIDF/1+ZToBYvULXHNoc+rk6qo2SB+UGXj+w13NA4xoxsSe+eBRcG0NpYhuQHrJKPvcaanpqW8giRPezhONfWcdf5OB3BNb10Tzl8KyB+KzgAAP7+pTYkfRRTa+szJto4xvgzlkbUzSmeP9PfBbW0f16uIcXU/4l6Y+ad7pmzWT368CNHk0XAnKuxtLPC96Zla+HhWdZzj40Vvgh60tzcR5Mqixl5eCofdjbJPL9yq+7vIPBKzu0NcZ6Xt7ieWrx8u/LSw9IAbBTOIFiFqC3Xu9qUPYnN9ix8OYBkNgrIAyiiWAewJEmXEFnxYi5C5HeFqHQzZuqwr2rq3gNLxGFf8THy1x9MNtlnD+7WjIjZg9UA/nSLH1aVt1W6WWCZBZ6bz2ov9esbkX5K1O6SpI/3EjbnKKbHd+sK+WAbAU7/HiLXSVA/DSoAAYuaF84691dUa2bkFYIhmCIrUWY5nR3cQjIDjZP8L1Kc8RFKV6wSnZkZ7JviAJwI+qhOuMjWfzdF+J8rvLMK+sIMUFiNhemPFjHy1yIHc+mr54g60hVUyf9P1kjvCb3V3qRct9mq/ZjL8us/9G6O/bo0bWzoH5VzUqp194C1wCctyyOOp6i/zIWlJsv2hJZ4hEK1Zh5T7G/zD7sCGkuAu/tVz0njjqC25f9uMZva+NB9mqgenbeM6yI3TlGjENkq1en/+3ffzeIqDUAzedvy+t/44uRtRbtzMphpZsf8uC7zpNCHR0PHZM95nsEEykuy3G0EqhwlAZWMRRFepNLg0EesyXV4wUZe8VLtB3GFedm/T/BlmdvFhA6HZWLxHpv0qPQPRSKEvGwO/d0tZRQgR9Tdg4ip2v5kUJBm4BBlJcwBp/8gVliImv/9G9w82kdMuQas2YQUf3qqiRZLKl/RA2SHfgsQazEuiFEzhFOpbhLzTS/01H2UiRv2/rwjLKxKE0qpEqfchkeohfuA2Ls6+HMQ91JSx7+B4rIiSUFJJAOfgSPflCE0ymXHtHrhkh3GgPVNMOsp5kaXGZZa6cutLWWORHmlduXaySl/54ZZWVefRFIlPZAcwMKadGYFN4bdxkGmCobdNng0SQAHUGOxwhy4XvdGYzPxJjqSwlIJ+BndLChtzfEXgkBdED2FH9aEom3FkCX7uHQ6OLVBb8x27OzG2Gh5wSb3HedwThrlflBqH5y7KVdUPMXTq54wPnAAAA==" clip-path="url(#cdd9d5f)"/>
|
||||
<image x="147.5" y="640" width="55" height="55" href="data:image/webp;base64,UklGRv4DAABXRUJQVlA4IPIDAABQFgCdASpQAFAAPmUqkUWkIqGa2eYAQAZEtgBgTw4tLzk/Acd7yx355zQzfbt+76U3hAdTLzAfZX1znqAfzn/Pdaf6AHlteyz+zH7Oe1VmolnDGbmz3X6aUqu70AJMJ0/7jwMs4/a9jyJjIDF/1+ZToBYvULXHNoc+rk6qo2SB+UGXj+w13NA4xoxsSe+eBRcG0NpYhuQHrJKPvcaanpqW8giRPezhONfWcdf5OB3BNb10Tzl8KyB+KzgAAP7+pTYkfRRTa+szJto4xvgzlkbUzSmeP9PfBbW0f16uIcXU/4l6Y+ad7pmzWT368CNHk0XAnKuxtLPC96Zla+HhWdZzj40Vvgh60tzcR5Mqixl5eCofdjbJPL9yq+7vIPBKzu0NcZ6Xt7ieWrx8u/LSw9IAbBTOIFiFqC3Xu9qUPYnN9ix8OYBkNgrIAyiiWAewJEmXEFnxYi5C5HeFqHQzZuqwr2rq3gNLxGFf8THy1x9MNtlnD+7WjIjZg9UA/nSLH1aVt1W6WWCZBZ6bz2ov9esbkX5K1O6SpI/3EjbnKKbHd+sK+WAbAU7/HiLXSVA/DSoAAYuaF84691dUa2bkFYIhmCIrUWY5nR3cQjIDjZP8L1Kc8RFKV6wSnZkZ7JviAJwI+qhOuMjWfzdF+J8rvLMK+sIMUFiNhemPFjHy1yIHc+mr54g60hVUyf9P1kjvCb3V3qRct9mq/ZjL8us/9G6O/bo0bWzoH5VzUqp194C1wCctyyOOp6i/zIWlJsv2hJZ4hEK1Zh5T7G/zD7sCGkuAu/tVz0njjqC25f9uMZva+NB9mqgenbeM6yI3TlGjENkq1en/+3ffzeIqDUAzedvy+t/44uRtRbtzMphpZsf8uC7zpNCHR0PHZM95nsEEykuy3G0EqhwlAZWMRRFepNLg0EesyXV4wUZe8VLtB3GFedm/T/BlmdvFhA6HZWLxHpv0qPQPRSKEvGwO/d0tZRQgR9Tdg4ip2v5kUJBm4BBlJcwBp/8gVliImv/9G9w82kdMuQas2YQUf3qqiRZLKl/RA2SHfgsQazEuiFEzhFOpbhLzTS/01H2UiRv2/rwjLKxKE0qpEqfchkeohfuA2Ls6+HMQ91JSx7+B4rIiSUFJJAOfgSPflCE0ymXHtHrhkh3GgPVNMOsp5kaXGZZa6cutLWWORHmlduXaySl/54ZZWVefRFIlPZAcwMKadGYFN4bdxkGmCobdNng0SQAHUGOxwhy4XvdGYzPxJjqSwlIJ+BndLChtzfEXgkBdED2FH9aEom3FkCX7uHQ6OLVBb8x27OzG2Gh5wSb3HedwThrlflBqH5y7KVdUPMXTq54wPnAAAA==" clip-path="url(#cdd9d5f)"/>
|
||||
</a>
|
||||
<a href="https://github.com/tomyjwu" class="sponsorkit-link" target="_blank" id="tomyjwu">
|
||||
<text x="212.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Tom Wu</text>
|
||||
<text x="250" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Tom Wu</text>
|
||||
|
||||
<clipPath id="ccace6c">
|
||||
<rect x="185" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="222.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="185" y="640" width="55" height="55" href="data:image/webp;base64,UklGRgADAABXRUJQVlA4IPQCAABwEACdASpQAFAAPm0uk0ckIiGhKlYLwIANiWcAyJ67P7fP6YvjEM3gS6Os9MwLlpvpS2TnapT9wYi+k5tvZD2hJD7SEpz8udZhDqM3YLEabQaSOTZoqk4FN8+a94+BHotLJ5rKhjnclCZXpP0TO/Xr7d/AuC0rl5y82vOule8A+kBWHC3pa79bhoELYAD+/JFxE8zRwksETYrcTcdoO3IORdFJbNJX90uZRskx1cu3Ak2Co0lfoqo4mbnnYfe7mRXCbDfxnP0pAt2/i8JKvpUuSaMlLpAKK5nnFUQD61UzrJSPIFQbr8H1WSgFhBJ1PuexQlG2qpsKdmVT5sSxr4YKmjtBB4PKH4nu5wIYdUDH7rfBvosYdIboAPkVmgpc/+BSapcADaLiCj98sK0Fmuku6IEPnW2xbrkWM5i0/eeZvdh54h6bCsBtu+ehe7wj8Hd/VL0HQQ494bYOw6fqw08h5DzhZ7yWxNzMhEBhP6Zc9NJEFEuPJWIP5l32LcKW05emfk/tvhfxyHi8JBHXbqVhjtaqlbSF/VhyfmjE42hsRLJ0aEtYJaiER4lcq6UOPBnCqcvBRX38fhAcD8sPHLR/DH4FFwURM3HwyhIaLIoDQ+guyfS6tHGNBbBVZSx8cp96+wEmrvbro0h3bABz/5iXzWvneng5TPuIy76tUqQvxAYXxiliPsTX+7EmVlKjLXLjKs2Xe8xWjSa136sbEhmUU9LmNXcPGEUAw/JwlvAn9VyvrZgZ1BjAmZfuBesnTtRS4agZvcf2xHH5AAnQ/Ekn64hRzMMylXtBKGYML7JvGPMALqJshnic6++GDoSu5CAhEwuW8FNCauWAxL9ATpIUq7yBZAzbx+Q7fW4q0ioTNcPWPvZFw9J1J4MLKqKLj5MlVnLwHlwq6g4Bp/fqeKn4ZhFyTZRDK2KnDd2lJJF9EJwXY4BybDpmyVt0BVnqyQ9qE351eUjywoCLxrQlMNsu//l0rRdJAlCuNe1jwAAL+d7B0AA=" clip-path="url(#ccace6c)"/>
|
||||
<image x="222.5" y="640" width="55" height="55" href="data:image/webp;base64,UklGRgADAABXRUJQVlA4IPQCAABwEACdASpQAFAAPm0uk0ckIiGhKlYLwIANiWcAyJ67P7fP6YvjEM3gS6Os9MwLlpvpS2TnapT9wYi+k5tvZD2hJD7SEpz8udZhDqM3YLEabQaSOTZoqk4FN8+a94+BHotLJ5rKhjnclCZXpP0TO/Xr7d/AuC0rl5y82vOule8A+kBWHC3pa79bhoELYAD+/JFxE8zRwksETYrcTcdoO3IORdFJbNJX90uZRskx1cu3Ak2Co0lfoqo4mbnnYfe7mRXCbDfxnP0pAt2/i8JKvpUuSaMlLpAKK5nnFUQD61UzrJSPIFQbr8H1WSgFhBJ1PuexQlG2qpsKdmVT5sSxr4YKmjtBB4PKH4nu5wIYdUDH7rfBvosYdIboAPkVmgpc/+BSapcADaLiCj98sK0Fmuku6IEPnW2xbrkWM5i0/eeZvdh54h6bCsBtu+ehe7wj8Hd/VL0HQQ494bYOw6fqw08h5DzhZ7yWxNzMhEBhP6Zc9NJEFEuPJWIP5l32LcKW05emfk/tvhfxyHi8JBHXbqVhjtaqlbSF/VhyfmjE42hsRLJ0aEtYJaiER4lcq6UOPBnCqcvBRX38fhAcD8sPHLR/DH4FFwURM3HwyhIaLIoDQ+guyfS6tHGNBbBVZSx8cp96+wEmrvbro0h3bABz/5iXzWvneng5TPuIy76tUqQvxAYXxiliPsTX+7EmVlKjLXLjKs2Xe8xWjSa136sbEhmUU9LmNXcPGEUAw/JwlvAn9VyvrZgZ1BjAmZfuBesnTtRS4agZvcf2xHH5AAnQ/Ekn64hRzMMylXtBKGYML7JvGPMALqJshnic6++GDoSu5CAhEwuW8FNCauWAxL9ATpIUq7yBZAzbx+Q7fW4q0ioTNcPWPvZFw9J1J4MLKqKLj5MlVnLwHlwq6g4Bp/fqeKn4ZhFyTZRDK2KnDd2lJJF9EJwXY4BybDpmyVt0BVnqyQ9qE351eUjywoCLxrQlMNsu//l0rRdJAlCuNe1jwAAL+d7B0AA=" clip-path="url(#ccace6c)"/>
|
||||
</a>
|
||||
<a href="https://vaa.ski" class="sponsorkit-link" target="_blank" id="vaaski">
|
||||
<text x="287.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">vaaski</text>
|
||||
<text x="325" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">vaaski</text>
|
||||
|
||||
<clipPath id="c8f11f9">
|
||||
<rect x="260" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="297.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="260" y="640" width="55" height="55" href="data:image/webp;base64,UklGRjQEAABXRUJQVlA4ICgEAACwFQCdASpQAFAAPl0mkEWjoiIeCo6oOAXEtIBpljAkq+nHy6g/jdvHZTT9L4d6fnONG/JRmy7HiEQjDe9epIlnBIQPYwdx40rGCPFkw/GYXXVswEwWsrRlj12Mms5Ybeo0OHGF1/yCutpIhXhkwfzlk4eBRUfnDmL7LzORtfKISQj94Q+eapq2D5hW7puK9ksVyAP9hOUXNKC0vsmdINCfWusTz96gDLw68stlUaRgothaN87sAAD+29dKDczRePweoW6FvBOiYkQPwkoFtdiygFqLyEOnU5C5cculV3Cmzfi/ah7qxH0BoONBbOhYYVMrgGM2HIf/9zobuFv6wAY2cvtCvTDrnaZyXn5k97KsyE/DU4HRYvIgsFczT5SRXQ3gyyN4msJqvvl6P9u6EpSaHnRkJAn6bO+vaaPdroeG6sVj5uCjibFxhz5v6rii3tBqiI1UfRnxYqYa2duVCa1GkZTSvqoVVpYk795Ia+aYpr4LUvyXeK+IjQrSvmieOaRXNfUjSS2CeMqxLP6b3BFARnheYSQu2x7iDL3E7PSl3AfxcLW6OeGsbxjSaE66ZzNt1OxNS+mwyoFHIt8uAa5Dr6vj2oYZ5aCO8G4UpsC3BQnGRQzCkKiWuVNE6z+44vUYU9WA/AY6rKAtWYstt5MEYY5lWHexLLp0Dpv0kp/GqYIVGvGtni5etT+cZ1njcFQcr10LBBuMLOiy7KpM81uV9O3RFYHbA3ksotCAfqtdEpx6pZs5CjPPcUQcnQIRut9qqQAZmyt36B2kztHSwn/zEWk5OT4Kj2U2H3KPLmoEqtMhIv2WDzrL/gWb7SjOe0f+lAFn6QpOXbq02AXxXZWI96ZU5TgqCX4zqCDO/0av2wZkX4DDRAa0Z2cFa3vMJoIW+JNL2GKVg0KR4h6JMwmPj8wv4PmqAlWsQkJrKc8X87BWUxPSj43U4DiZo+7kSiKYiBK+B12MFYUl393+/JIPaHJghDS7UyyCV3kkIngYXSjfgGjd30jdgl3utcunxsAJV5renryvJ8neuXoWA5+MFa1nhr2ylICPQ5ZICTg4PyAo+bSA6ifCUor17CuVt794kp3MSCVBJPgvxM7W40rjLlS0SvgN/ibbAVq/HPET+ewUibsbVVsxC76LaPgprxV4BIs3y87SeXgfxqzQ2xJ9OUpoThgBrM9VJKGiif6ePORvd0FDlBtcLlr2NY4rBavuamwWH0yRV7IWG3zDydq/4sum1ML47oXX5QpOqk1Phki49OGrW6b9doYYf/3kKhmAZD8ihRuoxxKYA9mkVzz8FG0C0Eqx3IK7GVBSbVI8wEcET0oO2VX83hd2CGbNuaRzkUka6h25vVAFtzxxMD3QwHauj6QgbcyW5sZ36JccgC/aPB+Q7mT1cMaVXbxwkFNN+Egtf3eAAA==" clip-path="url(#c8f11f9)"/>
|
||||
<image x="297.5" y="640" width="55" height="55" href="data:image/webp;base64,UklGRjQEAABXRUJQVlA4ICgEAACwFQCdASpQAFAAPl0mkEWjoiIeCo6oOAXEtIBpljAkq+nHy6g/jdvHZTT9L4d6fnONG/JRmy7HiEQjDe9epIlnBIQPYwdx40rGCPFkw/GYXXVswEwWsrRlj12Mms5Ybeo0OHGF1/yCutpIhXhkwfzlk4eBRUfnDmL7LzORtfKISQj94Q+eapq2D5hW7puK9ksVyAP9hOUXNKC0vsmdINCfWusTz96gDLw68stlUaRgothaN87sAAD+29dKDczRePweoW6FvBOiYkQPwkoFtdiygFqLyEOnU5C5cculV3Cmzfi/ah7qxH0BoONBbOhYYVMrgGM2HIf/9zobuFv6wAY2cvtCvTDrnaZyXn5k97KsyE/DU4HRYvIgsFczT5SRXQ3gyyN4msJqvvl6P9u6EpSaHnRkJAn6bO+vaaPdroeG6sVj5uCjibFxhz5v6rii3tBqiI1UfRnxYqYa2duVCa1GkZTSvqoVVpYk795Ia+aYpr4LUvyXeK+IjQrSvmieOaRXNfUjSS2CeMqxLP6b3BFARnheYSQu2x7iDL3E7PSl3AfxcLW6OeGsbxjSaE66ZzNt1OxNS+mwyoFHIt8uAa5Dr6vj2oYZ5aCO8G4UpsC3BQnGRQzCkKiWuVNE6z+44vUYU9WA/AY6rKAtWYstt5MEYY5lWHexLLp0Dpv0kp/GqYIVGvGtni5etT+cZ1njcFQcr10LBBuMLOiy7KpM81uV9O3RFYHbA3ksotCAfqtdEpx6pZs5CjPPcUQcnQIRut9qqQAZmyt36B2kztHSwn/zEWk5OT4Kj2U2H3KPLmoEqtMhIv2WDzrL/gWb7SjOe0f+lAFn6QpOXbq02AXxXZWI96ZU5TgqCX4zqCDO/0av2wZkX4DDRAa0Z2cFa3vMJoIW+JNL2GKVg0KR4h6JMwmPj8wv4PmqAlWsQkJrKc8X87BWUxPSj43U4DiZo+7kSiKYiBK+B12MFYUl393+/JIPaHJghDS7UyyCV3kkIngYXSjfgGjd30jdgl3utcunxsAJV5renryvJ8neuXoWA5+MFa1nhr2ylICPQ5ZICTg4PyAo+bSA6ifCUor17CuVt794kp3MSCVBJPgvxM7W40rjLlS0SvgN/ibbAVq/HPET+ewUibsbVVsxC76LaPgprxV4BIs3y87SeXgfxqzQ2xJ9OUpoThgBrM9VJKGiif6ePORvd0FDlBtcLlr2NY4rBavuamwWH0yRV7IWG3zDydq/4sum1ML47oXX5QpOqk1Phki49OGrW6b9doYYf/3kKhmAZD8ihRuoxxKYA9mkVzz8FG0C0Eqx3IK7GVBSbVI8wEcET0oO2VX83hd2CGbNuaRzkUka6h25vVAFtzxxMD3QwHauj6QgbcyW5sZ36JccgC/aPB+Q7mT1cMaVXbxwkFNN+Egtf3eAAA==" clip-path="url(#c8f11f9)"/>
|
||||
</a>
|
||||
<a href="http://steffann.nl" class="sponsorkit-link" target="_blank" id="steffann">
|
||||
<text x="362.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Sander</text>
|
||||
<text x="400" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Sander</text>
|
||||
|
||||
<clipPath id="c39371e">
|
||||
<rect x="335" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="372.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="335" y="640" width="55" height="55" href="data:image/webp;base64,UklGRhIGAABXRUJQVlA4IAYGAAAwGgCdASpQAFAAPmkoj0WkIqEZnEbMQAaEoAvkATkvCCO9B6dvvzwGnQSkPyK8H/JD8Mk8E5+Mfff8TFFV0Sromr+WfCytGf0bAHZQkiUg//t28eSgMqfyb+dkzLZ4w4xiggVNNsBP5N+pKxh4hth3wDOE+bl3rpPJDjewSoj7uLOz5ScXucO99umxzvFuUW3X9W6fa6Y+CNLwmNqCBKjRfu3e0rFO9Pg+XnjDU1Lp7AMYSiAIJsAjWzSYDjDL7noXd+rG0becislReEoAXGYWxjU27qhcH1KpAAD+J79mc94Z5Lc2xOnd7pjSX9TmUSVhafMTKbh+Bun1wpumGn8GrmvCmn/+bfNX7EoWWw9+TX6j0aVi0/6z/E42Ycz/EB7yPsQjZsTSIEuUP77RFgxQc10SD8O5xwaPQ/Gcj7uDTV3Ok2G/tOmb0pHNPbPD10BN9PuJxn6hFNMVhXGCch+xW2sL309s2OF6LtMWCAiaD37wMTxkrxrDIOcJGAjwutE+7QWxMLQ+G1hcf5+Qehho34GTRVluFFrg7DiZ6Pe2X1bE+aJf0Pz8biMf08YmlBNDrRsXZEJn47mbUpQcIklg0kItR9n7OKZZK+Ho7p3T9NQaNxlvH0+b/BXOGU28M8T/Ql/aKKkLrXTl5StwjDG52GpHF46ZV7hlDfhIkMJrKC7yvaE/ZbYdz3BGn8oL1VGSMCKgy/jUdu1Kfw9eYfB4ZPasSJLk54TnuHS/fzgWrjSxYCjk20v63ZzcAKMEeczSN9W2U696vei+t722d+571pR+UFunIcqr+vpONbFXLZL6p8l3gMtLzLjbOJNjHOftLz1Vzx1Cv7xzLpXYu0cXXv8tE+50rg1LuWEORHkImztIgT1cpeLV4l2LipIPOQoZFSBIAwXS/gilH9yQ2gu0zPbHycmvdz3a32VAuCt00YklHt7C+O7rEUeH5Mw2+nHZ7zTI2ZyAuz2qkud3F72z8qznub3fhyMLJU3B5PC6LlLyEETWemPx4RINQ75R+biRlFVBkvtCmZgugABqEr1MixcQsjA9yukPsEOSgloIjzmAhWm8e961g5BR9NAMBX6IYNbCw3q29/caGUTgXIjJVibfox+z04dCGedSdn3SZ2Ooay23qPyMvDBXCgyL9HKP1Pp2uqQjByuvsGZqBSG0YvVBxFm+1KO5QvKdJaI8sk7I8isWqkLZa3UszsnexIpGOqYC1RjtEpojl/KTAqA3Rxp5YXelVNcrM273UPUVdV36Q6p7FDuaR5dNfSKHz32SWC0XubOO0xbP26fkwt9JMRL6Lg7XfwSHbCnFi2B2v7IrV/XcnfK9T3FcWmMZnISp+uzEU2qlPF3AbULEzeetmZn2FIeVqpsNT4KVvow21eYKBQDzidZZetsR0vT6JC4RnKx4b0n9r6lnSx3GpQCV9GUO0ysGh3dgIe6qNTgMPo8IgfhUtnJA6c0WBW5qmABhgAs/4pNq/ocLO9Hz1lQpm4ULh9kIsO6QOlpW6fCdz0kp2WfrF7TyTD2BRKcKzV6H5nF/fyImSEieLP6SlB4gbPcsKFmSvQLvHFAk58qWrnU+3IrWBGUYqClztBTglNpiBn1VpQHsitjglTZWXxUDQHE1H80wQVisD8MDYpM22pFJ8f4TRHihHGKSRtbhTmzYelnXndXwnGHXg7ILZTzZ0JwYp6pmPGvUqFpnS4L11cCv6GFR/GCSrVBup9/YZNB13KyfVAjWScoKDMtKLW91eqg5sKtr3hUceg0UrrhhYXGt3Yn+HaBSJRJRxlhvlFThMnCFeut+uMphtXU+CGjA9W3jTWDXrn65Qvgj6n4jEF0vlzriQlE8aW6v89Tk9i6+OEef8AbGSOxlyxOuRvvO7jmpkVFEZUooRmXQsSRR+UYQ6CAL3L1i2ugJqxJnmaDsY5ehvjCNOmkjXEJqY79hVNCJKK8D1yardECTMkrnfcHuF4Cnlv3K1y0OczWv68xSGhzRz/VdfJx+1ojI2bDFOj7MbAV4Nr+yUcTi6dGgYUU/bVud4VnuPl1b2gh4AQqUUcAAAAA=" clip-path="url(#c39371e)"/>
|
||||
<image x="372.5" y="640" width="55" height="55" href="data:image/webp;base64,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" clip-path="url(#c39371e)"/>
|
||||
</a>
|
||||
<a href="https://github.com/kbrisso" class="sponsorkit-link" target="_blank" id="kbrisso">
|
||||
<text x="437.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Kevin</text>
|
||||
<text x="475" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Kevin</text>
|
||||
|
||||
<clipPath id="c74ea51">
|
||||
<rect x="410" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="447.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="410" y="640" width="55" height="55" href="data:image/webp;base64,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" clip-path="url(#c74ea51)"/>
|
||||
</a>
|
||||
<a href="https://github.com/elapse2039" class="sponsorkit-link" target="_blank" id="elapse2039">
|
||||
<text x="512.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">elapse2039</text>
|
||||
|
||||
<clipPath id="c96de6a">
|
||||
<rect x="485" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="485" y="640" width="55" height="55" href="data:image/webp;base64,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" clip-path="url(#c96de6a)"/>
|
||||
<image x="447.5" y="640" width="55" height="55" href="data:image/webp;base64,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" clip-path="url(#c74ea51)"/>
|
||||
</a>
|
||||
<a href="https://github.com/popaprozac" class="sponsorkit-link" target="_blank" id="popaprozac">
|
||||
<text x="587.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Zach</text>
|
||||
<text x="550" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">Zach</text>
|
||||
|
||||
<clipPath id="cf0244f">
|
||||
<rect x="560" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="522.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="560" y="640" width="55" height="55" href="data:image/webp;base64,UklGRnAGAABXRUJQVlA4IGQGAACQGQCdASpQAFAAPm0qkEWkIqGYXE5UQAbEsYBf8hDouL+ipgVwUNvg3s7LtjbBz609Sbu3fpwOD8lyzKN5fG6HUN3R1vaTlFxKTfVormZ7mETiZ7rf7uuJxFMD4wjkLqyxAbvcYdtBEPuqX5KehWTNVefSJFVq3QaTAMZRU7OtEmcm7e5xB38btXlz7RUut/Rm2IWmaE8xv0gkBLsnqLWDW615uP8aNk2nsKelISUJ23wWhPeMZogJ/tlQJbEMYKr1O6dgNba4gCWeajQWnN9ZXqu9npAA/v/KTqYFjTt8h4coA45nyv7lgbE/9W//MDXc16vUD4eDw7+lv2oZU69/0t/WZcM644yejwNrZxmjEN4FJuu4KZ0Zvu0I4HquRFjTgSRf5AnbPGC0QgbyWlwp8A2M/ZKLiAQPMxpk4J+yCJoX7K0jvwfa/aaMrppHWPvNC+nkqSyX93YVuwPa5ySJ+btz2HQaukoOf+7BqpXDlDA73CDH7z6RuW8hqZiKkX0tF/hPe4RUgIQceZ2HR38idTGaEcaB0tOFCD9oNt2gdWXrJpPblzlkv2hJwtgsijYkTn3CWxNk9eN1Kp1RXs7e/0PKzCmCg25xEUjCEucfQBqMhOj+ArCl2Mu4J2I2/ILhGVWIrnJJe3iL3b4+7JvbYtPFZwPDKNczsh/ad6XHqKLU+h0s3qZTWhChV6A4sdtX1qMfvI7mXTSActyz4iImE+CKTh4UnEG217NX++zq4b2XOkADVp1YKvxS65AbXpi7AqV4N8KvVx45Q61AKbwOt8UxQwG0IeYqjvtFWJbwyaSs6k36eGYgagnV37ngUWfBXZqk2CrtyYUKFY6JSG94UDvayRlTRV9yXKE6q3quYqcyZizYYFJs/p2IeIGEpqDVJl38GxWczPR3J5n9YJTZXo8e8b0o6FbWkolL/oXgpdkr42Ebf5BK+T/KiqC7Jfy92XpV/CUSmPvKpRNhNct5HiLJJeiPyGUCaK6qSUtGkHysZ54amt32AMG+3SGlvLB0W5UtZuSOHYexVWoiGXYRo15ULJIp0qac83Djsna7ietidDPgP+d9k7L7VdQpQdaE7bXqwVw0g6n2l2j4E5H0Y4kVP5ZTUtOS855mak2h/kmVUIaq9rCqlPwr4LvVTQm0j37axDNlaCbIoPXayR2Yn7nO1pp7daTRNQFLUA90OQft9bCNetM/a7EKLBmnpQeNZRBw9OOvXW1SIlzTrtLGeaXMD+ekebSHWC4rUb5dD4k4QGhhTXegx+PWAaM/vvQ/smsAEJivoxRYT2RHIsG4O8gJE5OOugr2WZrIMMpF/y2CGfWzrX/4aBM9Aw2+4nm5WjXN84LX81c/MrGeQWJCbgyB2bLu7VS3HNTji275O+HICnMoqrAT38VevvY3UKdYcvyL8Q7JQylxxTKUBM6hj40HUWScXkciMb4xLPfrCIhcD9YVZteKhdTaB3JZxKs2TSPh0hiU/I9MsYsPifl/Cvg9UwZpPlZKUiSVyfYv/8tnV/inQR0o8H8/IUkT1L5XyFOLytHRItg7iutVtLNuC9hb/T72SZKFPoWzUFZM6ZgiyBNaI3/nNK2W8LLWd2SDZH8DfRVIYjyeg9bt4wClP0QUzZJNt+VNmo4NzBusPdBDQWGr7gHlyF5AUOEvc/7Fy6CbKtQ2u+zrJxfPVkC/6zRPjonYeanXeC/HFmnV6bZav3PkX77Zf+5Xw34yi9VodL5LgPA511hJv8/7xKF8pYJQZ1K24+BJgumcKJSOH1qv6lw8aDUpR066K78vi5CBqhqMW1QQlC5kQ+9LMah3UXQR/4U/uweVW+Uy0UXD9/wuu9FL1x/ObrKOPwUkI0Ce/h5fDu0eK9yWHgcc1IuL5vYZr3ARA3iPlklOKX1iO6ZEj4fAik/24C6XMDIq0Vr9GNTX79vx9qbVcNLwZjDh94sCxLJEUI05MedSsZadTgKvOvBSAvjQ+sNFi33zs5aSKbG2cWktbIF0kK2oKMF7LGrIw37iKc5YzhHl/FXue1oUk7LemiABk6mOL0Zs46/dweeJdn8q7m7XxpTWD8Ea7ey9TExWXRusuJDo8TdpKJ57HxloiWZwHv1D/GBj6WluTYl+cvlGpV7dgpCqlXb0CWWqlpWa5iqwQ0y5MZD2Og/b/oZd+oTBc257HqEaeYt5IAAA" clip-path="url(#cf0244f)"/>
|
||||
<image x="522.5" y="640" width="55" height="55" href="data:image/webp;base64,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" clip-path="url(#cf0244f)"/>
|
||||
</a>
|
||||
<a href="https://github.com/johnwilson" class="sponsorkit-link" target="_blank" id="johnwilson">
|
||||
<text x="662.5" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">John</text>
|
||||
<text x="625" y="713" text-anchor="middle" class="sponsorkit-name" fill="currentColor">John</text>
|
||||
|
||||
<clipPath id="cd6b105">
|
||||
<rect x="635" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
<rect x="597.5" y="640" width="55" height="55" rx="27.5" ry="27.5" />
|
||||
</clipPath>
|
||||
<image x="635" y="640" width="55" height="55" href="data:image/webp;base64,UklGRmwHAABXRUJQVlA4IGAHAADQIACdASpQAFAAPm0skUWkIqGXCjdsQAbEtiYAIws6b7fuP48/kB8rNbfqf4Kyffmw/gfcB8Df8t7GfMA/Tj/UdUTzC/sj+0Xu4f471V+gT/Xv8p1iHoM+W97Nn7hekjWVubX2agY/nvNzvd2rP8xwrPbPN/grvFIoAfnf/geofoG+iPYN/WbrUejF+xTwqQ5AkIDdqwqtQ1f/w6asp14TpKM3VuzmbI0pdCb7LUVtxRiEYeQoAeCZJSjsS4DqIcEjf/flGOKppv1fhodEuRLdlF+94+Nd6GTMfZblVBVjSi16hOdxHQbEuyIB7xFKWzs/rgVG2Exi/Ui8fPrnnD7McOr2wfdXhn3bomCgDNwAAP7min/hWf/z8e2JXJ5GtQ//3L3/12XHb/+7kZ2r4crcftaKq4xjUz1nGGg3rp4viW1nfbugvJj6U+cfwqgmyVpJ5DEv8eM8Mgp6gufGBvGsFToi34bUbI9qRm32AwpDaBwUl8QM5LtYOHUK2Kzi0ulepaqcLyf2d0/RjV8qwNOaUwR6PDnf4oSakUnJHpCps+orWJ+adaapZHaGlHs6G2J0F5ZQ8KHHl96/RmGGBnw5859sQakKXHyhfqe14Tbt0+966wqLQ4jw+yfHdN0eHwb/vPvEWB6x1FJXj2dmFiRr0Qs76FOGvtx76UVPildLmQxNoajStOaax9HmkO5GhBZRsUhrMGqVajaH2PI007efvqjyjxgPvmAfTnuk8aMMUaz0wFpahBPvNXzoZ7lRUZDQGjTL3L+UWj6GyHbtQLd8yF51co28di/hAcgs6FtNggMqLoeUaP/6e8tSRQ+hTT4N/rtIG7UOWG24BtVJu8xqw9pkfpd0y+Qef8yRLDlyBmpelOqS6+gLNIoEeA5g0K1W1tK8PLEFgDHDpnT9UGLupMDb7V4p8exL7rd63XpA3b3lo8FXrPUeH4DBMkXVKVKS3EI8FA5tiUfsXozkKTUOoJGpflWWcKc7r0iid0iUqPdXr3bn6Aohk3oit2WtA90I8PeEA8c1F9WG0YmOaFmGJVF3kI/6yLHd+uKcsnyRWtOXnk90PiZU8iUuJkcFD8jrWQ+jG3XrcXN1E/7pLC0h2qjWpvmrez3IjzgDfDkFfHq5WhOm0dMAElSuIEhPvHMy+v9xONud5s/3USYWOVEV+tJCl03D9Fv8Ph/3ZH4bu9sXPXMFJyxpfrpedVuxDwzcl+xk/ZKalUKF7VMfNejATFAkF8f3PkNRMIn/wqf/bs14kNsqyYuncv90RKeffvDX9ee5m41md38Q7eJGbpI8Q64tqgzSQQIaHzTC+G+d5xY0uAM1jNiH+JB1BgKT/2/f3TP53BTQW0GRfPfT+pJVH0n8d87u/SztMwUmq+lJIumyt2rMbkTMTwpQkN85ceSW++NERhtswolOwwZN7Rg3iyuACObrfhEAhmfxRICQ08aQlQPaFnE4wbzBe5ORLGVgenVoj7VoSErsjvaTAnvfEawGqhobipU5dTz73yqtmmKlHlDKe3BBBvRqVJcO/9p9tnrFiDU6gvtgRY+54wYLV17uvGxRqlemxUhTwz8jbQ6sTTqev5LEth/yfEwm2AhItgc3uC6uCMVgp7xchEcjb6c7qkMTCE3QbsH/bc+TELrlZ+qAXtMM3aehP3Twulzsq2826E+sRs+rLGTcM93rgk4WSsozLjGVrgkMzfkaA6r8n/F6ejqjpeHlCaFwPI9PG25JwojqF/3jNW6/wnEb9F0rfqQgXMIINV74j3J5EoO8bOfrtKlPgDWQpr0tzuB6Fk3dDzF4HQTDq3yCfY1PgMdf8rB3pJ411MO9I0QmD3c5WbWELo8RTxeFGCBN4XpxwWw/aceEm7JFaYqZAyY/FMQj+xRhDKGaaLrOhD0qHVLkfPIGhAbhZn6A6tTydOEGto1XSqbdrO2Mc6LumH7CFJ7Rb1Q2isH5cktJ9qfgLBNQpclrP6yr5GXBXvpbB1zfr6yFAsblDcNoQh8QO4yLozpqI7PBV+nxz+KHBtrCluEUVmbIekaOjHvjHW4gS6OkeeeJtecYnI8/8BOpIeXSlU3P/tZZ0CejGBbhSTWcX2UM2g5Mi8fSXwkDE4beVunUtWYuPqrtowF4HJ8ebxe6Zmgv2X8ePYeE1ZLjkcCoXuBxhL1/5CTEdmZuK027NkBJE21E9lKT4sZgobI1Ihloy3c4x5J2VUGGK9lvlyixH+XWcvC38fym52FHT+P5ja7bCLPumeJ9rsO/Oacysv63KbJq+ucu034Sl3fe+8cjH1Jj5nDB9GmUy2lmcdCV6Z4Jke/fp+CL3BJg/WWeo+uoHyP130aiom2HRfT1DNx7YsCJQkRy45rAPHjG9ivPEJv+5dHMB15JeQNz6M0ZyQvmYc6VAmmilph1xuOp/cvgZ+Tr99L338pKuy9sjIBYEpzOsM30y0QdLGUVS+P4pyDldgb4khV5v6r4SVGP1pwkijNaeL3LWmq7rpTjJMh2zU5SDr/xEG4oTB46ZPIkGAAA" clip-path="url(#cd6b105)"/>
|
||||
<image x="597.5" y="640" width="55" height="55" href="data:image/webp;base64,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" clip-path="url(#cd6b105)"/>
|
||||
</a><text x="400" y="765" text-anchor="middle" class="sponsorkit-tier-title">Buying Coffee</text><a href="https://github.com/tylertravisty" class="sponsorkit-link" target="_blank" id="tylertravisty">
|
||||
|
||||
<clipPath id="cbf0fbf">
|
||||
|
|
@ -184,40 +160,40 @@ text {
|
|||
</clipPath>
|
||||
<image x="180" y="790" width="50" height="50" href="data:image/webp;base64,UklGRkgEAABXRUJQVlA4WAoAAAAQAAAATwAATwAAQUxQSDkAAAABV2CmYRr4kIIi/GdCVhsREYKH3GqDocg2fgUVVFBFBhVUkEHkd+UU0f/U+S6WmGN2boE1NlhhehsAVlA4IOgDAABwEwCdASpQAFAAPm0ulUakIqIhJ7gMMIANiUAZ3ApirgYDbm7hbeUI9x+1+CPh58mH535fyv/u3gz6RvJLuxXCf6X/qOMr6s/2bXypkv9V/4Hpv58Hpb9hvgO/WzrXHQhW6LeE/PlulKBRObtmb6cKypL0/A5+CUVPwEpkSrU5XnfOuYg47OArlkEJXE4n6L8/AidTynL+mBHFP5Ad9w9Pug2HAAD+/PhAAH7PMdY1kMlSSNkZYFxGjECeYsco/wJkvU2mnPfz6lU31v4sdYqNBoWBikx3iTT7jv//EDjGOn+C3INk6KKXz8+hZ8LJEKWgEsUQE5sKxGCNJ7R3TCO71VXlXjOkAEOQEygYPN7pDGoUw07pbMWWbkPOCLks0/GwH84p/82skcUit5D/VkUyK1LWnvZCb+YQ+JcIx/1Pn/5p9JiV0GsbaixHy0BwfR+yzG3wNpUMTXdmex9av6YrG+6TBkym6MFGWUYTvrFwri31FNK9jb/Tl7oBn+fpOp13SyzKImy75FmMa+7cp/PFGtMNJsY6//Blf49xEhTsJ0j+JOEz302cCtZxrRjG7lZQF9WajfF8pRGOBVzTvLkzk953OMLgyBbOn/HRKQDf+LZ4mxglLP5m6OztvO/MGRfhwDddTq98XYpH/gFm5VuN7Jj1HVLpFvbO9LYPcFhu6SqjWQ9ZYZt6IAq/Kz5FXGnsUOqnDHl6h8DHe/9Z+2EDVUWJm1XI6eEvpmJaV+Zk009FxCxFIPGaaSQRvTmYa89S4pqnYljEWsdo+BLB1TYV5WO9Lp1G3Hb2cOtHgPyaEw7vzfV6lHWXHa57Foy+Zg6K5BU1qfATg34fw6Lif+YByNZZ+xPU80TWhYmUVJbhCrb6pLktYf4eRRpTcfT4e0pBrUA33uphKo/4PGCvaIdtv6TQESgAQJmSeAy3E9uvd/vg+Cd/uecaAHulH/1I/0g/48kuHZBBl8fb8NXACPtPWapavFAtfmVJ/TPpRvFOpMVIsRAIc9YcOkoh7U/VNd18iVQ5d0WK1/b4k2R9PobYtS5WaI0A4dlZ6ZBGEy5fN9NUYk+OILRBOfuVnoyuJ/ZI6RTSOmOogm4e9OniOfCqpUymDv8WBllVs9QOtF8bZLELqNOZjT21eGIshbYp88VzjsQB121VhsR/3hYvMfLAtn6ze3WmjiOVksOv+RH0cb2PGWULJg84jkaLqUz9nCwvz6479YPawpcxf+zkxT5P/9zkxJiHXz4EaRQzIaLXMvoD3cVQGBRZ8jLrwSNsWjqX+aMtxvApgf3s5ArYr4BBNqFY2lliUbbSlUwlPi3k9n2VYZIaAAAA" clip-path="url(#ca2ff26)"/>
|
||||
</a>
|
||||
<a href="https://github.com/iaincollins" class="sponsorkit-link" target="_blank" id="iaincollins">
|
||||
|
||||
<clipPath id="c96f165">
|
||||
<rect x="245" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="245" y="790" width="50" height="50" href="data:image/webp;base64,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" clip-path="url(#c96f165)"/>
|
||||
</a>
|
||||
<a href="https://github.com/aexvir" class="sponsorkit-link" target="_blank" id="aexvir">
|
||||
|
||||
<clipPath id="c44ec47">
|
||||
<rect x="245" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
<rect x="310" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="245" y="790" width="50" height="50" href="data:image/webp;base64,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" clip-path="url(#c44ec47)"/>
|
||||
<image x="310" y="790" width="50" height="50" href="data:image/webp;base64,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" clip-path="url(#c44ec47)"/>
|
||||
</a>
|
||||
<a href="http://digital-garage.com.au" class="sponsorkit-link" target="_blank" id="ericfernance">
|
||||
|
||||
<clipPath id="c7655a7">
|
||||
<rect x="310" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
<rect x="375" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="310" y="790" width="50" height="50" href="data:image/webp;base64,UklGRi4EAABXRUJQVlA4ICIEAADwEQCdASpQAFAAPm0skEWkIqGXq1bEQAbEsYBj7i0KuEdVsW7XoftlmIWUOLPSmzS/JU+MVo0vIoTeTnyt193WTrAkvESU7dGE9LXkssxDDQWyi4ETnP87fEW0WAkcVeUSrNUjfJr421EiV0I8+FkkVzqKchXSbcGC8St4sp7MS75mqe2XenNUB7S+vRX77K2q4ntGCtBAAAD+8DOL3mtI7/Buw+I4hEirrjiMCadAcetEAkO24U+DmdM+dQNUQwuPHcd9K58zmdDm1MhIDo7NrddUlKYlqiTCP/fzZ+njbv2LupZGtw8WW+5jA4tcagi077orLEJ6Il2nepwwPLqPq6nCg+BJsIuR/Cqdy8QmsGSvi+QVdKS0k7bl7k6uiA7O6t7LtT9br0hpjj3F/LaRnOUnPTUiE60PnJMC44ProEOhaPTZU0a4PK4jra1vANKd/+OOavvQpmV+83jD9DDlWOHQAlGl7aGnQjJwfyYGU8BvxAHWcwbo6ouCUfiywErIaQuY3UR8rLQ2uJtbbXdxH0QIqoHtWQRp/7oLcG3QbBkGdM1bgnEYTBWDdPefrBptevIw4o0tIneiW/UlV3L++o05LcAhcr6T+TOH/kC5wiTuz843RkBwQnLJk8ZPmI0E81SX5e/NHr3peU3T8ftmDU8xzNCLkCBHt2YjlLSH1kcTr6fAHznGcDDxI9cPx8zSoXJEv3YQWoNAIT5ihZ+dk6IZPy8GwDG15+6P61s1kz7as/QybMKOjH4Zd4ZUxps8OsUT6xVNcf/eUR5nP+Wo9pIKfuv/AniXa5fIebRDMsKyU3lJVpZ7ReQUeV9r0KXx4lLz3MjcRLry3H3VNn20ObOI+Pc0SdhrYOVobQeT476jTK/d/cQ2x6paaq3kqp9nOQL9MYkk7uSG11gIRAxTdQHP82KLyGU5nZ19r36x4rGGyj5QXRUg5a2bI6Rh1o3I84rKxB4jqdztF0pOQ2X5MXUo0qQoon6vjsTs/PcuQ+ExMeVs27jJrUnimEg4tMPKKXNEg2ZaH3B6ccHylCV+uEAU47QwFS7R2Pxvl06+Yg+2RFO0GO6LkCsj8SGTZ8XoAkT2DdQU9+lGFGH01KtVO97zKDepP3DxolF7RsYFQsPzN7IcV2NAI/ueRnBR9YNQhm8RqibbljPdK3z8BMEYO67ZlBnZgIu5xMVttDgIavF+wpdwhG71zd3sl8U9vzlnBJHE+Lg5hwfX6YTuND1VNS4KqWs8MxGKq5xI9L+CAbdUuBX70Hin0/2vrM5vjdiEkyZYF7zIAkQ9+d+vGyTwqOalvBTSFL2lmbvkzsyr5tbEWtTesOtSuf9b8cBHaBKzatqcMWdyo25fhEye4k5pEt9gAPuWKPgFutoBceJm7Peh1D/Vpw51mLxBgiS1erwAAA==" clip-path="url(#c7655a7)"/>
|
||||
<image x="375" y="790" width="50" height="50" href="data:image/webp;base64,UklGRi4EAABXRUJQVlA4ICIEAADwEQCdASpQAFAAPm0skEWkIqGXq1bEQAbEsYBj7i0KuEdVsW7XoftlmIWUOLPSmzS/JU+MVo0vIoTeTnyt193WTrAkvESU7dGE9LXkssxDDQWyi4ETnP87fEW0WAkcVeUSrNUjfJr421EiV0I8+FkkVzqKchXSbcGC8St4sp7MS75mqe2XenNUB7S+vRX77K2q4ntGCtBAAAD+8DOL3mtI7/Buw+I4hEirrjiMCadAcetEAkO24U+DmdM+dQNUQwuPHcd9K58zmdDm1MhIDo7NrddUlKYlqiTCP/fzZ+njbv2LupZGtw8WW+5jA4tcagi077orLEJ6Il2nepwwPLqPq6nCg+BJsIuR/Cqdy8QmsGSvi+QVdKS0k7bl7k6uiA7O6t7LtT9br0hpjj3F/LaRnOUnPTUiE60PnJMC44ProEOhaPTZU0a4PK4jra1vANKd/+OOavvQpmV+83jD9DDlWOHQAlGl7aGnQjJwfyYGU8BvxAHWcwbo6ouCUfiywErIaQuY3UR8rLQ2uJtbbXdxH0QIqoHtWQRp/7oLcG3QbBkGdM1bgnEYTBWDdPefrBptevIw4o0tIneiW/UlV3L++o05LcAhcr6T+TOH/kC5wiTuz843RkBwQnLJk8ZPmI0E81SX5e/NHr3peU3T8ftmDU8xzNCLkCBHt2YjlLSH1kcTr6fAHznGcDDxI9cPx8zSoXJEv3YQWoNAIT5ihZ+dk6IZPy8GwDG15+6P61s1kz7as/QybMKOjH4Zd4ZUxps8OsUT6xVNcf/eUR5nP+Wo9pIKfuv/AniXa5fIebRDMsKyU3lJVpZ7ReQUeV9r0KXx4lLz3MjcRLry3H3VNn20ObOI+Pc0SdhrYOVobQeT476jTK/d/cQ2x6paaq3kqp9nOQL9MYkk7uSG11gIRAxTdQHP82KLyGU5nZ19r36x4rGGyj5QXRUg5a2bI6Rh1o3I84rKxB4jqdztF0pOQ2X5MXUo0qQoon6vjsTs/PcuQ+ExMeVs27jJrUnimEg4tMPKKXNEg2ZaH3B6ccHylCV+uEAU47QwFS7R2Pxvl06+Yg+2RFO0GO6LkCsj8SGTZ8XoAkT2DdQU9+lGFGH01KtVO97zKDepP3DxolF7RsYFQsPzN7IcV2NAI/ueRnBR9YNQhm8RqibbljPdK3z8BMEYO67ZlBnZgIu5xMVttDgIavF+wpdwhG71zd3sl8U9vzlnBJHE+Lg5hwfX6YTuND1VNS4KqWs8MxGKq5xI9L+CAbdUuBX70Hin0/2vrM5vjdiEkyZYF7zIAkQ9+d+vGyTwqOalvBTSFL2lmbvkzsyr5tbEWtTesOtSuf9b8cBHaBKzatqcMWdyo25fhEye4k5pEt9gAPuWKPgFutoBceJm7Peh1D/Vpw51mLxBgiS1erwAAA==" clip-path="url(#c7655a7)"/>
|
||||
</a>
|
||||
<a href="https://github.com/5aaee9" class="sponsorkit-link" target="_blank" id="5aaee9">
|
||||
|
||||
<clipPath id="c73e6c7">
|
||||
<rect x="375" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
<rect x="440" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="375" y="790" width="50" height="50" href="data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAACQBACdASpQAFAAPm02mUmkIqKhIUgAgA2JaQB2APwAABZgQIECBAgQIECA4AAA/umt///xu3GG/Bd//8pV4LG54W2uR3oiebggIAAAAAA=" clip-path="url(#c73e6c7)"/>
|
||||
<image x="440" y="790" width="50" height="50" href="data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAACQBACdASpQAFAAPm02mUmkIqKhIUgAgA2JaQB2APwAABZgQIECBAgQIECA4AAA/umt///xu3GG/Bd//8pV4LG54W2uR3oiebggIAAAAAA=" clip-path="url(#c73e6c7)"/>
|
||||
</a>
|
||||
<a href="https://nasum.dev" class="sponsorkit-link" target="_blank" id="nasum">
|
||||
|
||||
<clipPath id="c30874b">
|
||||
<rect x="440" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="440" y="790" width="50" height="50" href="data:image/webp;base64,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" clip-path="url(#c30874b)"/>
|
||||
</a>
|
||||
<a href="https://cloudysky.software" class="sponsorkit-link" target="_blank" id="praneetloke">
|
||||
|
||||
<clipPath id="cfe0775">
|
||||
<rect x="505" y="790" width="50" height="50" rx="25" ry="25" />
|
||||
</clipPath>
|
||||
<image x="505" y="790" width="50" height="50" href="data:image/webp;base64,UklGRnoCAABXRUJQVlA4IG4CAADQDQCdASpQAFAAPm0ulEYkIqIhL1ap2IANiWNsRFki53ztt0f258Ab2XgYJDzinffPR3rWfY46s0U8PyMmfxaPy7c4nTJuq7kT0bBhJGPQntq+mOjeku4YRSdsF0Y5z7GAqvLf+NjAOQtXadiMJjBUUO71bCx0YAD+7A7nYykf/jeP5Lv276P/w7uzNrx89pwlomOCyUtsKU2tHLx7fXuWK3fDDKnO1ROk+6xxpqQKzuPHTLHD/xm2vWbJebwDofCZLzjBYD3CWRySsz/dX79d4XsCCjxvzirfDxMFJHdYAvD9whq2bf+XvNhtsS5Wc32jir5AmvcwFm6MujLLbMZzMM2+b/3CDgRJdTvb83CnUhWpd3ON9nfIOZphNQa97P1YPhDcQidszNiKFsJU0k4r+wwWIIQPgsb7pI+R1B4F3MiGVoGRXEqZQrF8xP0DwzburIUm8IHnNmWfMiG7/jIpYHpVEEj573y9Pe8Wkz9ZHKWrycU7t44HreCH3g2TG7EL/8PoNM3N02mnotOEvAODe8uzs6hYdORmmRRuGWOWI6Yw6UbnX8lIFdHpQem9w8n8SumHsw34zsyygPjecSz5er7G9vOkWtmFLi+KPLLEKclWraX62T8KvQkH95kbEvNNIKwS2vMhLUIlbvmQIgoZHvUy9y7RJiYxR/cARB0YPR/dm3gdHEwD6t0nDMVsp1bEkquaU04Ix+oH1GNryf3GMHudcVztsDNo/PoBLGkQ0xOhTT9NZ2khH3ePy5JOGQPyAqupPxlnne0eGK8iLOEILqqUK07uIEmEQEiVSInwXWxRLGWrVOH/jvG0ZAAA" clip-path="url(#cfe0775)"/>
|
||||
<image x="505" y="790" width="50" height="50" href="data:image/webp;base64,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" clip-path="url(#c30874b)"/>
|
||||
</a>
|
||||
<a href="https://github.com/lucaono13" class="sponsorkit-link" target="_blank" id="lucaono13">
|
||||
|
||||
|
|
@ -297,71 +273,92 @@ text {
|
|||
</a><text x="400" y="970" text-anchor="middle" class="sponsorkit-tier-title">Helpers</text><a href="https://notes.iansinnott.com" class="sponsorkit-link" target="_blank" id="iansinnott">
|
||||
|
||||
<clipPath id="c19ac04">
|
||||
<rect x="130" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="47.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="130" y="995" width="45" height="45" href="data:image/webp;base64,UklGRrwCAABXRUJQVlA4ILACAADQDQCdASoyADIAPmksk0WkIqIYDP4AQAaEoAxjgKDtfEcdy5z0AbYA/1LsC7X4+vz98+X0bwAPRATC1ul5LJvZI/WE+hC9mG2LtbYJtL92wU4+X8+UOUd7emQGS1hZKDA2AZ4bBK15FB6mazqYrVyoxSbcOpZW4AD+/i6ie5NNFObm5Ll/hzqV+RT98W98hiUHYz/rtG0zg5kKGnCyYrdb1PRK6b6yq7x7tLu/U79jnCHezpaNLHGUCyd9kwL2L2kQAY0L/2P1S3QBfS2GGPCT7Ps8q2FOjR8Zh0ppr1h8v60VbbVNJuEYbNxEqOTVXD5rllfv3myo0RvE1I5V+3Aw6eMjvaf9cofhQjEaIEXYJp9/63Ln3Cc57yskMDPvZ/kB8/0LJW3ULmJBRfNxHhvOsAJ3O1NQv/ekNl04mYwQyg7fi1fMB+i3D77FHg5AiR+xyK/c1f+8n5s/XqMczzwPSMdn+7D2FRxAYMuKhU4/Lq5F0KKKU+zwL9S+o5waoLJVCyeP/LAmA82Tu2eX/srtoHcIUNVRuP9Pg9PO2XC91w3fTHRfumVzg7sVLrST6i2bHufPNAQGPPDD0BSR9WW2MIyp6khvZfG+HF3nSQ1PaLOsMmsnEgVE0/77nXea3DL22fnnMkk9kccZKVT4dk20z3gxEPbwGq+CeeF50ENLso+P4M/s3cPxCeiCBwGZLrFzPl1eaAcv61rwNqVC22Zh3CtCfO9Hu2rKShzeFVWQz8XizCBFTh7bIniDwbX7MJoEcXtLjjR/zH2yKefC7OD9yxrGHmA+IPtssThomhCOua+rYODkwGB/q4IyfJH7moG91X/C0cD+9jDR7kU81b2HhfhNFMGUWJnO5nv4eQ/0Pl4UvmDU2NLLsupGL00wrOxDAeTTwmv5SgQrfKQEAAAA" clip-path="url(#c19ac04)"/>
|
||||
<image x="47.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRrwCAABXRUJQVlA4ILACAADQDQCdASoyADIAPmksk0WkIqIYDP4AQAaEoAxjgKDtfEcdy5z0AbYA/1LsC7X4+vz98+X0bwAPRATC1ul5LJvZI/WE+hC9mG2LtbYJtL92wU4+X8+UOUd7emQGS1hZKDA2AZ4bBK15FB6mazqYrVyoxSbcOpZW4AD+/i6ie5NNFObm5Ll/hzqV+RT98W98hiUHYz/rtG0zg5kKGnCyYrdb1PRK6b6yq7x7tLu/U79jnCHezpaNLHGUCyd9kwL2L2kQAY0L/2P1S3QBfS2GGPCT7Ps8q2FOjR8Zh0ppr1h8v60VbbVNJuEYbNxEqOTVXD5rllfv3myo0RvE1I5V+3Aw6eMjvaf9cofhQjEaIEXYJp9/63Ln3Cc57yskMDPvZ/kB8/0LJW3ULmJBRfNxHhvOsAJ3O1NQv/ekNl04mYwQyg7fi1fMB+i3D77FHg5AiR+xyK/c1f+8n5s/XqMczzwPSMdn+7D2FRxAYMuKhU4/Lq5F0KKKU+zwL9S+o5waoLJVCyeP/LAmA82Tu2eX/srtoHcIUNVRuP9Pg9PO2XC91w3fTHRfumVzg7sVLrST6i2bHufPNAQGPPDD0BSR9WW2MIyp6khvZfG+HF3nSQ1PaLOsMmsnEgVE0/77nXea3DL22fnnMkk9kccZKVT4dk20z3gxEPbwGq+CeeF50ENLso+P4M/s3cPxCeiCBwGZLrFzPl1eaAcv61rwNqVC22Zh3CtCfO9Hu2rKShzeFVWQz8XizCBFTh7bIniDwbX7MJoEcXtLjjR/zH2yKefC7OD9yxrGHmA+IPtssThomhCOua+rYODkwGB/q4IyfJH7moG91X/C0cD+9jDR7kU81b2HhfhNFMGUWJnO5nv4eQ/0Pl4UvmDU2NLLsupGL00wrOxDAeTTwmv5SgQrfKQEAAAA" clip-path="url(#c19ac04)"/>
|
||||
</a>
|
||||
<a href="https://github.com/gmlewis" class="sponsorkit-link" target="_blank" id="gmlewis">
|
||||
|
||||
<clipPath id="cf3ae31">
|
||||
<rect x="185" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="102.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="185" y="995" width="45" height="45" href="data:image/webp;base64,UklGRq4EAABXRUJQVlA4IKIEAABQFACdASoyADIAPm0sjkWkIqEY/HSQQAbEswBbfbHmGkbWdsGRobcnoo8rnojc7npwnoATFrwP8SvuLNSxf2i7LRwKTS3B0mblNR7+jloEnI4WyDnEouyy4ptN6DnN9/WZf4Ymn6w1ChhhG+mH6KmBRX1jc7pk19a7vicAkY3MmW3SDEp5qM1UwvN0IbzcvIfc7Q4sZyqjtnchOH/F/xr7zlfoMgdZ5bqV3UAA/r3uqFROun6AZg6VaOp4oawMAIkq+Iu/is09h+0vJRx1qlb9ZzCFDkv+v7O52Nw2r2d7wE1jRyNV0Bt3+NLvtzKaUXBm4OdOGC4v8S9aV/b4D4jU36nSvr03bT60/YHt8gz++XVeiGF00Q9hSxz+exs5VzaPfyF6lnVk2NYgUeBoAxdLACj9+2JfKVKprIAsSWahxrrsI9mCSPcENjLUSjVW83EUhgyessb7lwIa3jAJHdE9n0FFM2HJ4JkiKgRwmXo9SbqoXNEpFuO6G7jAwHpBQl+ZW146CpsNMJJo5VYV82QXNPMaGeAHWPjRns3qP6d+18eZLzDreKY+gw1K2QqA7eEpcf/hL4ll36yIPosAQChbZ9fbbmgK8Knmus3UfTuGVmGn8CaCwI4h1gDv8hTUG9Q6FLPOm3Yue2zBPC5nBXfBs4J4LWVfCg8YOqnFbbMXrEwybXyXgduPQ9ldUUXcgp/B3cdNRSv/9Sc/7X53LoPP1FJ5yI6Ldn8t4Je0Rgm3xE16eQv1nDH5uB7iHAbr8PxlXQPRXQ59SpzHPl09bVxSoeh4AMEmCp/YIw+8LFTxPCAJAlZXTsFmaty1jsZtDc2eExtFdFZLVqC8XITwxTCzN9Ed1Cg2BJ/WxtsFegNngi3DxHrBsxcveiYquCYWn7ivvPTgLw/2I/D8kHHWIsnOV3Ytn9GA4UCbRWkxdyLIESFu+D4a+96bq8IOCsJA8qSA2StAw3G2xZ/eWbJ+Qj8TjW9RcrMwNVjyNGjXXc5Qm9tMCoRuJNfeb4qgOPLRpLNpwaZ0HeWaqDM2M7dhi+bt7A/BDzrsgooBmowVHdKru/MDeSlhhjnumD2iN5UhAVW+uWz0PGKwPulxU9bnJ2FuBYTUI/T6gW+s2QZNYkuWDR0WWDsfNsLm/Ts7coVLuUJt87hY942TgfQf/lMiHP8wguPyWJATPpxuK38RT3NwwQTklaEcdvemQzEGIUZou2cnt012NdjJFhHCojc3RPnnv3k793qfglzLAcx/eXXLx3wuUA7r3N9PmKDoxxHxjpm1arUvhkLEM/QHZx+NvxslMYEu36uC8Uu66eCJgJb1+esOIUcXabqgZCOGeAKw4YE3S1z2lIX0LK4eskerXwIKcS+vYmexIRbgOOSXkWAzQAlF40JK3Vq7G+Zb/tjtBDtP1U/2jDFAvZtpI1ogFtrFsn7uaPSREyLtba9v0sKMvkrnucemneXVZW0++ZJB1lzjMSS/0f/PJPpP9Ealhd+KJRy5bBLNiUIfcDl5Xp+vSqGBI1u4oxYyksitJ75KDH0EowbW6m7eD5/8vYQZGzlgEVQ70Af/AqfhCHOI659gQAAA" clip-path="url(#cf3ae31)"/>
|
||||
<image x="102.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRq4EAABXRUJQVlA4IKIEAABQFACdASoyADIAPm0sjkWkIqEY/HSQQAbEswBbfbHmGkbWdsGRobcnoo8rnojc7npwnoATFrwP8SvuLNSxf2i7LRwKTS3B0mblNR7+jloEnI4WyDnEouyy4ptN6DnN9/WZf4Ymn6w1ChhhG+mH6KmBRX1jc7pk19a7vicAkY3MmW3SDEp5qM1UwvN0IbzcvIfc7Q4sZyqjtnchOH/F/xr7zlfoMgdZ5bqV3UAA/r3uqFROun6AZg6VaOp4oawMAIkq+Iu/is09h+0vJRx1qlb9ZzCFDkv+v7O52Nw2r2d7wE1jRyNV0Bt3+NLvtzKaUXBm4OdOGC4v8S9aV/b4D4jU36nSvr03bT60/YHt8gz++XVeiGF00Q9hSxz+exs5VzaPfyF6lnVk2NYgUeBoAxdLACj9+2JfKVKprIAsSWahxrrsI9mCSPcENjLUSjVW83EUhgyessb7lwIa3jAJHdE9n0FFM2HJ4JkiKgRwmXo9SbqoXNEpFuO6G7jAwHpBQl+ZW146CpsNMJJo5VYV82QXNPMaGeAHWPjRns3qP6d+18eZLzDreKY+gw1K2QqA7eEpcf/hL4ll36yIPosAQChbZ9fbbmgK8Knmus3UfTuGVmGn8CaCwI4h1gDv8hTUG9Q6FLPOm3Yue2zBPC5nBXfBs4J4LWVfCg8YOqnFbbMXrEwybXyXgduPQ9ldUUXcgp/B3cdNRSv/9Sc/7X53LoPP1FJ5yI6Ldn8t4Je0Rgm3xE16eQv1nDH5uB7iHAbr8PxlXQPRXQ59SpzHPl09bVxSoeh4AMEmCp/YIw+8LFTxPCAJAlZXTsFmaty1jsZtDc2eExtFdFZLVqC8XITwxTCzN9Ed1Cg2BJ/WxtsFegNngi3DxHrBsxcveiYquCYWn7ivvPTgLw/2I/D8kHHWIsnOV3Ytn9GA4UCbRWkxdyLIESFu+D4a+96bq8IOCsJA8qSA2StAw3G2xZ/eWbJ+Qj8TjW9RcrMwNVjyNGjXXc5Qm9tMCoRuJNfeb4qgOPLRpLNpwaZ0HeWaqDM2M7dhi+bt7A/BDzrsgooBmowVHdKru/MDeSlhhjnumD2iN5UhAVW+uWz0PGKwPulxU9bnJ2FuBYTUI/T6gW+s2QZNYkuWDR0WWDsfNsLm/Ts7coVLuUJt87hY942TgfQf/lMiHP8wguPyWJATPpxuK38RT3NwwQTklaEcdvemQzEGIUZou2cnt012NdjJFhHCojc3RPnnv3k793qfglzLAcx/eXXLx3wuUA7r3N9PmKDoxxHxjpm1arUvhkLEM/QHZx+NvxslMYEu36uC8Uu66eCJgJb1+esOIUcXabqgZCOGeAKw4YE3S1z2lIX0LK4eskerXwIKcS+vYmexIRbgOOSXkWAzQAlF40JK3Vq7G+Zb/tjtBDtP1U/2jDFAvZtpI1ogFtrFsn7uaPSREyLtba9v0sKMvkrnucemneXVZW0++ZJB1lzjMSS/0f/PJPpP9Ealhd+KJRy5bBLNiUIfcDl5Xp+vSqGBI1u4oxYyksitJ75KDH0EowbW6m7eD5/8vYQZGzlgEVQ70Af/AqfhCHOI659gQAAA" clip-path="url(#cf3ae31)"/>
|
||||
</a>
|
||||
<a href="https://johannesluebke.com" class="sponsorkit-link" target="_blank" id="johannes-luebke">
|
||||
|
||||
<clipPath id="c6f4c98">
|
||||
<rect x="240" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="157.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="240" y="995" width="45" height="45" href="data:image/webp;base64,UklGRqgBAABXRUJQVlA4IJwBAABQDACdASoyADIAPm0wlEakIyIhKhZroIANiWcAyJB6yUpsbJtBXzE34vR3T5GF9JUEwII5g766/qP3iocUHUMjHmvT7dSJJtWbF1kSF6ZNvwtDC0Vww0xcyJCLRtsGGJKpyih/Hdq7YuxvAAD+gCRlTTmuNccQY4gy/iVRLrzIa6ZE/vnaQvvz1DBXuuQfg2H6qWlnv/R/jRmMOdLFsE7xa9eYjiESthIY+WPrrGdVR8jCvhXA1gzRK9D6Qzj7iMTvi5SvJtSs2Nw5Rj7zWHteRALXg/2biYiOoNdja2xlqIzCK7Gt1pA/qBY1hAPLoWmYHoPAfG9shpEnmIq162yalUPoUVRz/8tBtq8wz0vTHB31g19cma8JdCyPRFUPuQkGc2j6+VcaxYBZcg4gGYrHLvGLZADbRX8F4sl5TJ0b43dkIi94p5kqTHNDWL7uGL8qomdJPORs85tmLItw1lNHTp5SSYC/Bw720TeBboo1+b8zKYOR09KnVD6yROwF6PvOgbUrtaDWndn4AP9RWIht+65NEp6YPmRkGAAA" clip-path="url(#c6f4c98)"/>
|
||||
<image x="157.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRqgBAABXRUJQVlA4IJwBAABQDACdASoyADIAPm0wlEakIyIhKhZroIANiWcAyJB6yUpsbJtBXzE34vR3T5GF9JUEwII5g766/qP3iocUHUMjHmvT7dSJJtWbF1kSF6ZNvwtDC0Vww0xcyJCLRtsGGJKpyih/Hdq7YuxvAAD+gCRlTTmuNccQY4gy/iVRLrzIa6ZE/vnaQvvz1DBXuuQfg2H6qWlnv/R/jRmMOdLFsE7xa9eYjiESthIY+WPrrGdVR8jCvhXA1gzRK9D6Qzj7iMTvi5SvJtSs2Nw5Rj7zWHteRALXg/2biYiOoNdja2xlqIzCK7Gt1pA/qBY1hAPLoWmYHoPAfG9shpEnmIq162yalUPoUVRz/8tBtq8wz0vTHB31g19cma8JdCyPRFUPuQkGc2j6+VcaxYBZcg4gGYrHLvGLZADbRX8F4sl5TJ0b43dkIi94p5kqTHNDWL7uGL8qomdJPORs85tmLItw1lNHTp5SSYC/Bw720TeBboo1+b8zKYOR09KnVD6yROwF6PvOgbUrtaDWndn4AP9RWIht+65NEp6YPmRkGAAA" clip-path="url(#c6f4c98)"/>
|
||||
</a>
|
||||
<a href="http://joeconstant.com" class="sponsorkit-link" target="_blank" id="lazyguru">
|
||||
|
||||
<clipPath id="c63c4c4">
|
||||
<rect x="295" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="212.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="295" y="995" width="45" height="45" href="data:image/webp;base64,UklGRsIEAABXRUJQVlA4ILYEAAAwFACdASoyADIAPm0ukEWkIqGY/VQAQAbEsYBbfcTm9FXfOwaDJAP1VjhjQ58pwKYgXcfhv37/B/JpvQmPuInjg74SPf0e87OoR0kvQlFaN9GxmN0i09+IcTlvkXWTPl/gzhZi16k4EAiaK9U9DUEFWeq5ZpL2PyVfzL5sb0rRPzg+DaT0i76OoqBur4ztYtCaCPPnKb56k1+GBi/CC12A8XRhk9XsnFNCmAD8r8N8OKd9rHHng+xqn/vb0bCkSklc2DdcIhJH2eSkV/FdwQFd0OaWy7TH1nmmYJUso88qPUxlk9rODWoFO0HFtOXDa46xlFC3r0s81N9VAtsbwptttEd5ROkeum3DMm2P8HqZX0baJEF6IGlZ93FEd2giFXLpaimKy1bVTB4Upt/TkfKIm28AWxA2FLl3vpahNMvN53fiRbLZ54Gcxv2jlvi0yze5UTZRGoQMV2uP56awuoL2KMsNHJaRMpKUkeAAVWVHyx4flStuXuziG/dtxQyY3oPFMIeEXAswuHb6XH/EolKUYkVahfVGTqGG1YFUqmIbel+l7yOZGEKYcZ17742xeaTOlkvNIwt+f+om0LTqC7XsWqHmhUvKWH8PeCEH57++VISLKznxIDz1bSe7MtULydlIxdgsHIDPUbKj41HVn0Nbp3VHXk0zezpMyV1QIO7tmMyXTrxZcYjyO36UvpSRB3MAbZ3XNT0DrQ2Stgl2Ud6Oo7fceJ+iyff4fefE7GmlEJfiL1PfHpIxNvAvA5lAxuABDT+SpUI74e3Pcf2IX5jahXnNGQ9mU/UXWPaG4NQ4+Z3sXg2DpLnBWlA0QFWLryD82z5r2CGiB7y2Af2kUYfTtCDFOVUiQszdD9DZ7V4HybvOZuoqHWrlXht5tFY0d9muiyM8e0wEcjwJv3ScUvxZS3mXn8xByoEDdd3xWnwaYa6gnRnQdK7+tQhlCpMeS06M9kbi0PG9AX5kkisou9LtNqAqfYt1erJvtUHcg/opBjx6ngN67JoBJdffvto+8gWtm4ldujMC4Zx9DEtTR2NvrUsR+8Px4a4RuSSXrlGMEahnE7m181Mz0e9TMRE5N94qRR4nbzjk8cYPU68WiTtFC0cyhqeq2pd57nJ4/0IWbhot9K+iwXQz9mapNr72k9ZauDZ+yDUujwtm78+ix5v4eIn3v3VvcCHTb7kDGt2YWUxW5dq9ymZ2Fz+vna+znn7eDDgEyjiBdEf3KHU/Lu2mUOdijp5UNMWwg+p4IMibzHAgpKHAFrG0SsmkRkUzCXV6DJJiBxhUhXfn+Jjlr0bL8Np7AkKHJkai6xVZQDR/mzatFkjDcymqSuWQe/yOZboLWFQrl9K45fhVg/rufmwSl02z/YHObY/1Ljr8JGdvJvXwb3HiRn8lyY96wuzAEQrgSFsPxCBYB5FIEAQA0qiGyPMpAF5HWUNCXRluuP2ls9k17lEuj6VhAJfDqSa7X8QZdmswQ3Ve7fQCDEh4/Zbux85ak78qLXA8N61WoFuA2H2LrhBYCBr8058zyy//6Hd3WiOf8Hd3Wf14IBV29YILu87aXi/b9yvl6GQfmIwT3lfvMRaHvhg5gw3sLkIkBhpEwaEAAAA=" clip-path="url(#c63c4c4)"/>
|
||||
<image x="212.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRsIEAABXRUJQVlA4ILYEAAAwFACdASoyADIAPm0ukEWkIqGY/VQAQAbEsYBbfcTm9FXfOwaDJAP1VjhjQ58pwKYgXcfhv37/B/JpvQmPuInjg74SPf0e87OoR0kvQlFaN9GxmN0i09+IcTlvkXWTPl/gzhZi16k4EAiaK9U9DUEFWeq5ZpL2PyVfzL5sb0rRPzg+DaT0i76OoqBur4ztYtCaCPPnKb56k1+GBi/CC12A8XRhk9XsnFNCmAD8r8N8OKd9rHHng+xqn/vb0bCkSklc2DdcIhJH2eSkV/FdwQFd0OaWy7TH1nmmYJUso88qPUxlk9rODWoFO0HFtOXDa46xlFC3r0s81N9VAtsbwptttEd5ROkeum3DMm2P8HqZX0baJEF6IGlZ93FEd2giFXLpaimKy1bVTB4Upt/TkfKIm28AWxA2FLl3vpahNMvN53fiRbLZ54Gcxv2jlvi0yze5UTZRGoQMV2uP56awuoL2KMsNHJaRMpKUkeAAVWVHyx4flStuXuziG/dtxQyY3oPFMIeEXAswuHb6XH/EolKUYkVahfVGTqGG1YFUqmIbel+l7yOZGEKYcZ17742xeaTOlkvNIwt+f+om0LTqC7XsWqHmhUvKWH8PeCEH57++VISLKznxIDz1bSe7MtULydlIxdgsHIDPUbKj41HVn0Nbp3VHXk0zezpMyV1QIO7tmMyXTrxZcYjyO36UvpSRB3MAbZ3XNT0DrQ2Stgl2Ud6Oo7fceJ+iyff4fefE7GmlEJfiL1PfHpIxNvAvA5lAxuABDT+SpUI74e3Pcf2IX5jahXnNGQ9mU/UXWPaG4NQ4+Z3sXg2DpLnBWlA0QFWLryD82z5r2CGiB7y2Af2kUYfTtCDFOVUiQszdD9DZ7V4HybvOZuoqHWrlXht5tFY0d9muiyM8e0wEcjwJv3ScUvxZS3mXn8xByoEDdd3xWnwaYa6gnRnQdK7+tQhlCpMeS06M9kbi0PG9AX5kkisou9LtNqAqfYt1erJvtUHcg/opBjx6ngN67JoBJdffvto+8gWtm4ldujMC4Zx9DEtTR2NvrUsR+8Px4a4RuSSXrlGMEahnE7m181Mz0e9TMRE5N94qRR4nbzjk8cYPU68WiTtFC0cyhqeq2pd57nJ4/0IWbhot9K+iwXQz9mapNr72k9ZauDZ+yDUujwtm78+ix5v4eIn3v3VvcCHTb7kDGt2YWUxW5dq9ymZ2Fz+vna+znn7eDDgEyjiBdEf3KHU/Lu2mUOdijp5UNMWwg+p4IMibzHAgpKHAFrG0SsmkRkUzCXV6DJJiBxhUhXfn+Jjlr0bL8Np7AkKHJkai6xVZQDR/mzatFkjDcymqSuWQe/yOZboLWFQrl9K45fhVg/rufmwSl02z/YHObY/1Ljr8JGdvJvXwb3HiRn8lyY96wuzAEQrgSFsPxCBYB5FIEAQA0qiGyPMpAF5HWUNCXRluuP2ls9k17lEuj6VhAJfDqSa7X8QZdmswQ3Ve7fQCDEh4/Zbux85ak78qLXA8N61WoFuA2H2LrhBYCBr8058zyy//6Hd3WiOf8Hd3Wf14IBV29YILu87aXi/b9yvl6GQfmIwT3lfvMRaHvhg5gw3sLkIkBhpEwaEAAAA=" clip-path="url(#c63c4c4)"/>
|
||||
</a>
|
||||
<a href="https://01397.dev" class="sponsorkit-link" target="_blank" id="01397">
|
||||
|
||||
<clipPath id="ce77124">
|
||||
<rect x="350" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="267.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="350" y="995" width="45" height="45" href="data:image/webp;base64,UklGRpICAABXRUJQVlA4IIYCAABwDgCdASoyADIAPl0mjkWjoiEc+7aoOAXEtABUG++h8Lj87Rw0WzABuAOgB/xd9N3kn7ZsQifQOyrsDGFc8NSu7SWgJeFhOoH2vJDlpCVKrHAg7jQz+4H7u/Jh6F06WPwOJCNMJ7TZHFf6CLHe5uylZLHet5JeiibObWJqAP3MAJHUw19AHJrnt5wpXb4DLKutpLcocfTCwuftH7/+repOHcbeZGPq/KMUBehylkcInaAfkBULeQY7zmLxpT4GBydpfv8qoh7Pv9iOeezKCa75/9DugKHuTFtvVt+nkdk0fu+8ei7yCXUrMDfbQuj3NhE1RPHMsoBaUEi13ZHsMQgE5aX49VpA6xT5CEIHWMPfN0aroOo0/XlQa78kbkarBmNEOIiC9bFntkkf8E0aVhu5rVL9tN3x50sEy89dtvNvgBgCEMIaB9TrbqIOTLcp79ZPmNukwrxXZ5MlghjKwLpG/MMaN1H4g370ZZe5vyH/1/ykmkY9A8175ZX7StuKoglJd81/VnbMO5lr5mDRt2BmKyn/TCah7gwvS5s1YstYygmh8VXzHMAw9UxmAIq08I1JyIQa7sw2c/xLn0dR3cuxFAUAkAii/GqOHr3v38O2KOUhsleR3HG1+NZR7D2iyy65GLRNLl10cnDB9hqnav6tI8x2PGegcBKef5j5OW7//Q6cKiVnZvVV+RIJzAHgsEkJ/utaC9s8ufCb/UAIErQdidYfyzcmoWPzBxjhuzBUOnjSHJYXGZFJomHynJ3MRxx2oA3SdEbkQPpqWD8Oe2luGIi+80KUNkna70lC2wIANLb5lt/Fc1TPk95Twpxco9JuYMDiJL+X3OT05OprpI+jJ/BnBQAA" clip-path="url(#ce77124)"/>
|
||||
<image x="267.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRpICAABXRUJQVlA4IIYCAABwDgCdASoyADIAPl0mjkWjoiEc+7aoOAXEtABUG++h8Lj87Rw0WzABuAOgB/xd9N3kn7ZsQifQOyrsDGFc8NSu7SWgJeFhOoH2vJDlpCVKrHAg7jQz+4H7u/Jh6F06WPwOJCNMJ7TZHFf6CLHe5uylZLHet5JeiibObWJqAP3MAJHUw19AHJrnt5wpXb4DLKutpLcocfTCwuftH7/+repOHcbeZGPq/KMUBehylkcInaAfkBULeQY7zmLxpT4GBydpfv8qoh7Pv9iOeezKCa75/9DugKHuTFtvVt+nkdk0fu+8ei7yCXUrMDfbQuj3NhE1RPHMsoBaUEi13ZHsMQgE5aX49VpA6xT5CEIHWMPfN0aroOo0/XlQa78kbkarBmNEOIiC9bFntkkf8E0aVhu5rVL9tN3x50sEy89dtvNvgBgCEMIaB9TrbqIOTLcp79ZPmNukwrxXZ5MlghjKwLpG/MMaN1H4g370ZZe5vyH/1/ykmkY9A8175ZX7StuKoglJd81/VnbMO5lr5mDRt2BmKyn/TCah7gwvS5s1YstYygmh8VXzHMAw9UxmAIq08I1JyIQa7sw2c/xLn0dR3cuxFAUAkAii/GqOHr3v38O2KOUhsleR3HG1+NZR7D2iyy65GLRNLl10cnDB9hqnav6tI8x2PGegcBKef5j5OW7//Q6cKiVnZvVV+RIJzAHgsEkJ/utaC9s8ufCb/UAIErQdidYfyzcmoWPzBxjhuzBUOnjSHJYXGZFJomHynJ3MRxx2oA3SdEbkQPpqWD8Oe2luGIi+80KUNkna70lC2wIANLb5lt/Fc1TPk95Twpxco9JuYMDiJL+X3OT05OprpI+jJ/BnBQAA" clip-path="url(#ce77124)"/>
|
||||
</a>
|
||||
<a href="https://github.com/7csc" class="sponsorkit-link" target="_blank" id="7csc">
|
||||
|
||||
<clipPath id="c85a7c2">
|
||||
<rect x="405" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="322.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="405" y="995" width="45" height="45" href="data:image/webp;base64,UklGRsYCAABXRUJQVlA4ILoCAABQDgCdASoyADIAPmEkj0WkIiEb/K4AQAYEsYBdmZVnMkn890RVDsoAPS+subVXXy7Ak7bfZ4N3S/OQZ7qYKjh/z6Pk49aUhLwQTmQuYmxHEZZW4i/oaNYVZjy1Shg1w+89RJREMh21Q8km+8iv5KTJhrsBZv7lAoRPj7AA9Rb2Wvj2HWfJ6PWW7oVOvJPyloictTBlktJ72r3RmCXc5ZCdN9piymO73cmViPpA2eLpD8svGIhTTN/HAd+hCcupPNm7VEr+rf9UFDAPdyzpYFf2q7RUTQgWAMCzeQ+z/yFn3EDSGn7zVgBfgniCVooc29Q2erdrh+phjHXxoYd7GBqDtJPef5c8yp6+ar4AswBVRDiKbUL4T/NLIzCC/FjeZIF930HnvTbY7oWEpTvLafa3jz6zO8QuQS6JuowB/ouHfEwOBJrCi1GxccDckNn2/smtnaNcEbgeGFXqMckHmrA1U/OpPkEeK+BAtmCO5607T7p+43dXGxwv7c7epOOtca9SqsKbQ37oM9ouyIDYD1DQO/Cz1VxRb3JDhuBKySYbURKKUrPfPDMm1MUoQVYZr3jWfQyKSqbnY6d/AWsl1of6Pipb57KGzfceffWfhofh9rdNEvJLIluVxEUzhaVIMfGoNUxhrR0qvUMGKr3ONPU22ZS/UXlaS/dIxlzy9iza9tEY6AfrgxOABm1TErxs/Z//0h4amA5RgbAvz1MJKYegmIqCrhOZEY6qe2tzZveF7ImBi3lcOJfjtShJW3yRss8emynQHNe3zjMMm7U6UsLChtOtAki1UEm/9VKbtnuIYuxomwJvPhqOMfrgrZRnszLWI66hOLEg+XS+vzR09w8ccubO1lBu/kI1bP8DmxQWeuFJpHPOoOUi+PaqYCgtrHcOxHsSt9E/VIHwvIIxFCdk7Ise1jUeyAAAAA==" clip-path="url(#c85a7c2)"/>
|
||||
<image x="322.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRsYCAABXRUJQVlA4ILoCAABQDgCdASoyADIAPmEkj0WkIiEb/K4AQAYEsYBdmZVnMkn890RVDsoAPS+subVXXy7Ak7bfZ4N3S/OQZ7qYKjh/z6Pk49aUhLwQTmQuYmxHEZZW4i/oaNYVZjy1Shg1w+89RJREMh21Q8km+8iv5KTJhrsBZv7lAoRPj7AA9Rb2Wvj2HWfJ6PWW7oVOvJPyloictTBlktJ72r3RmCXc5ZCdN9piymO73cmViPpA2eLpD8svGIhTTN/HAd+hCcupPNm7VEr+rf9UFDAPdyzpYFf2q7RUTQgWAMCzeQ+z/yFn3EDSGn7zVgBfgniCVooc29Q2erdrh+phjHXxoYd7GBqDtJPef5c8yp6+ar4AswBVRDiKbUL4T/NLIzCC/FjeZIF930HnvTbY7oWEpTvLafa3jz6zO8QuQS6JuowB/ouHfEwOBJrCi1GxccDckNn2/smtnaNcEbgeGFXqMckHmrA1U/OpPkEeK+BAtmCO5607T7p+43dXGxwv7c7epOOtca9SqsKbQ37oM9ouyIDYD1DQO/Cz1VxRb3JDhuBKySYbURKKUrPfPDMm1MUoQVYZr3jWfQyKSqbnY6d/AWsl1of6Pipb57KGzfceffWfhofh9rdNEvJLIluVxEUzhaVIMfGoNUxhrR0qvUMGKr3ONPU22ZS/UXlaS/dIxlzy9iza9tEY6AfrgxOABm1TErxs/Z//0h4amA5RgbAvz1MJKYegmIqCrhOZEY6qe2tzZveF7ImBi3lcOJfjtShJW3yRss8emynQHNe3zjMMm7U6UsLChtOtAki1UEm/9VKbtnuIYuxomwJvPhqOMfrgrZRnszLWI66hOLEg+XS+vzR09w8ccubO1lBu/kI1bP8DmxQWeuFJpHPOoOUi+PaqYCgtrHcOxHsSt9E/VIHwvIIxFCdk7Ise1jUeyAAAAA==" clip-path="url(#c85a7c2)"/>
|
||||
</a>
|
||||
<a href="https://andrew.zone" class="sponsorkit-link" target="_blank" id="andrewschreiber">
|
||||
|
||||
<clipPath id="c48204f">
|
||||
<rect x="460" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="377.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="460" y="995" width="45" height="45" href="data:image/webp;base64,UklGRpoDAABXRUJQVlA4II4DAABQEQCdASoyADIAPm00lUekIyIhKhM4uIANiWQAwQ9tTDSRL2+VfMm+o79P+f0NfO52OVQSucuz2ZXwb0x80nywmY9e06Jwu2aAVY3DEko/WUL+rznOGCAqTQfBbpMpVw2XIn6y5C2cVsr3cVeo/cp0sdUuVF8YGd7sIp84tCDDMewL6it7DdPH+2IYGzOUPR/xINgA/vgBy+frJNH6V97fIeahMRbmf5xsvhDXtUeBNkUOffTO9dNv3np30D1XxvfNTncJJbapjc5kbkr0Y//8VmrGwQu/x9zLBHaopG6TQ4wwBFBs0vrRpbUlmzU7SvcTsNeMxTEJXXJnLxRLx3FTXr9vCPf+rK/+ZAY5cjeQ7MTlT5ZdAtAXHmMiiKZsIsMzNwhrklbZaAfxb9vRTxc5+9PwPCD4zVyKYGYDR59y3cvURgs+zwGoKHOji7DLfE0wruxeT7/PV4Vd9+3xZkX4fbyrZVnyJrIsrBnUEfXx9vB/HclfUwVn//WLh9KqKFxHOIfZrWuDkSIvfaqOST/Zf1fql0EXKBm1aX1mpMc70MzEjBtolOsht7/sVlgU2v3tYZOdBAn5P9ln2SVuMSrtDB25jWVl1Z3tP8VV45hBKOYjpbs+uUZBHN/55JufcPTfZF30qlnzPhdU2MyKN1h5YGNpps6/aYPOT1rbMo1MYfF4qFYmr2XHP4N6MezXrMTgLAXEcbM9sdoe/Oy3ANugBhdwdDHBUrRTvnjTs23jrkaP0atTh9RnbkENOeRt95Y0z2inT+IOKQFIqBRYgsu9crcg2/jhbe3GnW+oJOBeLFbBi9ttTnS1v+61YxNIXs7mWuNjuKguQgcW9SGtAFvkQWGBeUWXByVz9uC1LTDIgzqiYlhGo0/HuXjiiWVSon2UW+jQew0LlQd7rEkR128hs3+JaqhVrJJxd3LXodU12z6RsTsPUi/8+EFkMbnQ2qnFQEG+TkVxwNMfCQ2cHmtaRj/DZI5mw6GLa5w2RsGcpYNWt8DvbnynGwwCGyBu2j+9lsrDPCf5MYMDMxpDG95SVa5ttuPV3A5nltvmugfvlptDqPVZrpYqI0hPw3vsF4GngC570aW7oeHNtS9anuIiU+38VzNIvqKAPKiKZQ3eD5iCtBn2/PLLG5+dweBiuL94H00zxT70n2i6rGJz9HyXyqCCSl87iwaDYZGIK4+r5DoKPGNJwjfwATU1AAAA" clip-path="url(#c48204f)"/>
|
||||
<image x="377.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRpoDAABXRUJQVlA4II4DAABQEQCdASoyADIAPm00lUekIyIhKhM4uIANiWQAwQ9tTDSRL2+VfMm+o79P+f0NfO52OVQSucuz2ZXwb0x80nywmY9e06Jwu2aAVY3DEko/WUL+rznOGCAqTQfBbpMpVw2XIn6y5C2cVsr3cVeo/cp0sdUuVF8YGd7sIp84tCDDMewL6it7DdPH+2IYGzOUPR/xINgA/vgBy+frJNH6V97fIeahMRbmf5xsvhDXtUeBNkUOffTO9dNv3np30D1XxvfNTncJJbapjc5kbkr0Y//8VmrGwQu/x9zLBHaopG6TQ4wwBFBs0vrRpbUlmzU7SvcTsNeMxTEJXXJnLxRLx3FTXr9vCPf+rK/+ZAY5cjeQ7MTlT5ZdAtAXHmMiiKZsIsMzNwhrklbZaAfxb9vRTxc5+9PwPCD4zVyKYGYDR59y3cvURgs+zwGoKHOji7DLfE0wruxeT7/PV4Vd9+3xZkX4fbyrZVnyJrIsrBnUEfXx9vB/HclfUwVn//WLh9KqKFxHOIfZrWuDkSIvfaqOST/Zf1fql0EXKBm1aX1mpMc70MzEjBtolOsht7/sVlgU2v3tYZOdBAn5P9ln2SVuMSrtDB25jWVl1Z3tP8VV45hBKOYjpbs+uUZBHN/55JufcPTfZF30qlnzPhdU2MyKN1h5YGNpps6/aYPOT1rbMo1MYfF4qFYmr2XHP4N6MezXrMTgLAXEcbM9sdoe/Oy3ANugBhdwdDHBUrRTvnjTs23jrkaP0atTh9RnbkENOeRt95Y0z2inT+IOKQFIqBRYgsu9crcg2/jhbe3GnW+oJOBeLFbBi9ttTnS1v+61YxNIXs7mWuNjuKguQgcW9SGtAFvkQWGBeUWXByVz9uC1LTDIgzqiYlhGo0/HuXjiiWVSon2UW+jQew0LlQd7rEkR128hs3+JaqhVrJJxd3LXodU12z6RsTsPUi/8+EFkMbnQ2qnFQEG+TkVxwNMfCQ2cHmtaRj/DZI5mw6GLa5w2RsGcpYNWt8DvbnynGwwCGyBu2j+9lsrDPCf5MYMDMxpDG95SVa5ttuPV3A5nltvmugfvlptDqPVZrpYqI0hPw3vsF4GngC570aW7oeHNtS9anuIiU+38VzNIvqKAPKiKZQ3eD5iCtBn2/PLLG5+dweBiuL94H00zxT70n2i6rGJz9HyXyqCCSl87iwaDYZGIK4+r5DoKPGNJwjfwATU1AAAA" clip-path="url(#c48204f)"/>
|
||||
</a>
|
||||
<a href="https://fabienbrocklesby.com" class="sponsorkit-link" target="_blank" id="fabienbrocklesby">
|
||||
|
||||
<clipPath id="c483d5c">
|
||||
<rect x="432.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="432.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRtgDAABXRUJQVlA4IMwDAABQEgCdASoyADIAPm0uk0ckIiGhMfHIAIANiUAX7jga+8yaH1tgO/o827HPC2UZWcPCPx7gJz6ozq3sNKVrd26W8eRyDD0jeQSmC8z5rdADuoV+4wwHFiGbJ62qdl5dEQHL/3zP2vTlEMRWB3zyeAgx+HRDpDoyGWDZCPdO3ta71f9DdJIMYXcL16PNdexeDQ76BqHRZKFSgAzUWAD+9fpfKXz1SCXMM+DslqzHkAcHo0egLBuX70ntEqdJg/yqdpabmQ6OdQDxbLyvzFNxPgpB8V/Yrmz7LK1ykXoM6X/sRgNQngE62WBDlT38VxzZrXZeElrIkb8hif/I+1sUzgogNdesKUgQf8F9FXZ8g3V+jLd3dPmnPdaP0dtrMNvFqrta77Mrjnh4Lx3HlfQauV8E0xCRy6Y6pi45B081j5JIMpgtyV0M3XumsfXlrxHeYXabiDaxCT9EBD9374k6J4W/liuk2GBfeAqugtmCWiV1yma4cP03+90/p/EZbmvAQVDo3EEd2p9cHKw+sud52kuqHJg7i4EoeGYLgZuBIlV4kfDRi3aK9p6TB8CgemwrOJ0nNxHj/vKZgwCO8+RYmeYESf965bPptuNI3b5uXOgI+ZBCBW/PzT0mIMvxjS8gpwV4eMnGIimoDAwh5o+PYLINFe6tTG4iYAvfTgGW1QUW3LqmBwBIPj1q7uoX/AyQCtJZpfvcVB9zWN2PBXLIcY5piCMubtkLnioXioss5nLC5Mf8I9Fj/i31TNdS5td3JPeQvIDGkRw2Rlq5JWM5UvIEAj/h5hNlzmDUG9c0sPtS0YxaRSOLttFuSzTx7/gCp4Kgb4c7hWTLK+ndqiX2X1BTHFAjSPM1ZjpRJXjFL0jK14NneImLp8uqmncZflKRbt/C43tyY8jYs9MjW6RT8zl9aZ6+1Oys+5Q5T5A7I77dE2DNZ6rhxopWN/iNVu4ayfLVR2bGu/Fr3m7pGrFwyQycUndQ53Y+Mw/MhMdT7u7x35g7Uj3EyJOYhfJ3SeZ/eLSePEA0LDiKS4m+qntUbORbn+59LcJf2BpDWDP0QKR6zauRJ5K4s1NXtBeTFWnDpv0tQGplhDw+epyPRUPN+FlAIopys2sTpLw6F5qadlFHXUOGohXFikvtpRsTA5nXb4LOdxCq+sU1pk88AcL6onYR4KMzPBWmpsevBYYhYhOU8uvAYPlBBT3aA4CCXFig4H3oe3tbd7C/6FhcVmvTNzTp8lqU4wa+2+HOXCKMYNbM6/IEnBZKOASoHcsQkUMeKHR+pd7WwArKbhWAAAA=" clip-path="url(#c483d5c)"/>
|
||||
</a>
|
||||
<a href="https://github.com/xenon007" class="sponsorkit-link" target="_blank" id="xenon007">
|
||||
|
||||
<clipPath id="ce31b11">
|
||||
<rect x="515" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="487.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="515" y="995" width="45" height="45" href="data:image/webp;base64,UklGRnAEAABXRUJQVlA4WAoAAAAQAAAAMQAAMQAAQUxQSGYCAAABkCsAkCFZXcdn27b9Ike2bdtKX3aInv1eZCuzrci21q46zFRVzxdEhAO3bSMpkYHMEc3s8Qqj7bSB9xqB8bTThv7Cu/XA0wz+R4QP6nk6/yUq4l4jzwoG/SJy8LA6eDQPChG5aQQe2YgY7tUDj2ws9+t5MLNxybywueFk1jYNNiP0LJpV3CpjQeWLqKrQknRj0eUvaYgutIox1RREVzhiNZ6TCKlnqM38clUuID9zG1l1gf01x34alsZwniO0NINJ7ptuDDDBh/9GAXPxMmpsJXIT+LUzuDI8QET+AcDKZBvkx4nwnZO0CUEqbt/INFYm2UrmpYiK+Nq9CBjrJ2f/GwbsgmDLLZodfOgK6UyI/rOys6ElrC1B5OJ994k+4pqVlRvC24jrrwFiWpKBYCNixqVhCUbG2oR8zFwecyLKWJuQt91MxjIHoky0cXd2AmMylkeIRBlrk+biGJO5FKWFgW4gLy5tuP/RIMoCE9OVtg+tmU8ty/xjQWljf4yMZTJpJitPZXOjkfkmlpRtfHSy4EnZxkYrQ8nWho1aZmPjZVF13ndmo5bZ2NQyhc2i05aFFcXYFGvFXXHkbXnEHb2yoLjFM9mVOszcfX5+xxVHvsSFCr3cOr3vltM5o5qUywC2hl36lkwhYujGhv6bQ2x9mjnn8KckIqairw60Yindbt29JCIRYvDpZ7b+/k45XydwenL9DPFK83W3fCkkQsXl5NeTUyoCqG7M7rj2VkQM4p+jUxqkWUihZKt19wIpZPZ/n5pYy/VNWwyQ0XbDjTAiYerbyUm1mX3bS6U6rXuQuDK/oW7fAFZQOCDkAQAAMA0AnQEqMgAyAD5tKpFFpCKhlwtvGEAGxLSACuJfoAt94wK2dA97U3uH6q+yqntBvpjOCprgqLdAaxOKWi+Fg0jzfmNlv62CnQ9cdrSjcy3Zjlh9XesAKPOfKxHBB0H7uOB7MaJkuyv5Q9xWz2kUQMgAAP6ZJz00jxwoFSPZ6h9+sPG1Sv3m7Ei5BznnKVfvpXVM36C0cNDVpiuQ9bhzQtBgARJsd4HEqEBDnChShJdqUYQ5Fj11279W5hvUlbivmNljUi1dU2y4pJwaGl248dhR1klUf4quZU77DIrIC+r1m5KvIWeHMjmM4sFFs2tvurRGtqfBD8OFMyWBFp9cD1fBio7f5pZXCcn/z6LcKk9ti782/24cfnJ6NbAvUKOnvbLQn58GHm9RWeO7IuIXhBP+OUmRqVl27UdgCedso7D9jDR9Dt8GdfYul8q4ieJWfs61Nue9OyZrCs2BE99SRxSyoG7Te1Lseh4wrsp9ka6p8BvnEMdeJKZW00TIfeATXDhmqiMjRrNvm6/BmKjTHWRSLXOlZGsb4mUi2Ot6SR7cIpgC/Ovyyyo5rN/QYHdHKL//4RGf9YrsRB8nGkrRc25NApdqqHTHb5cYlHfslXsdriID0SE79M///+BqiPGcCYAAAA==" clip-path="url(#ce31b11)"/>
|
||||
<image x="487.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRnAEAABXRUJQVlA4WAoAAAAQAAAAMQAAMQAAQUxQSGYCAAABkCsAkCFZXcdn27b9Ike2bdtKX3aInv1eZCuzrci21q46zFRVzxdEhAO3bSMpkYHMEc3s8Qqj7bSB9xqB8bTThv7Cu/XA0wz+R4QP6nk6/yUq4l4jzwoG/SJy8LA6eDQPChG5aQQe2YgY7tUDj2ws9+t5MLNxybywueFk1jYNNiP0LJpV3CpjQeWLqKrQknRj0eUvaYgutIox1RREVzhiNZ6TCKlnqM38clUuID9zG1l1gf01x34alsZwniO0NINJ7ptuDDDBh/9GAXPxMmpsJXIT+LUzuDI8QET+AcDKZBvkx4nwnZO0CUEqbt/INFYm2UrmpYiK+Nq9CBjrJ2f/GwbsgmDLLZodfOgK6UyI/rOys6ElrC1B5OJ994k+4pqVlRvC24jrrwFiWpKBYCNixqVhCUbG2oR8zFwecyLKWJuQt91MxjIHoky0cXd2AmMylkeIRBlrk+biGJO5FKWFgW4gLy5tuP/RIMoCE9OVtg+tmU8ty/xjQWljf4yMZTJpJitPZXOjkfkmlpRtfHSy4EnZxkYrQ8nWho1aZmPjZVF13ndmo5bZ2NQyhc2i05aFFcXYFGvFXXHkbXnEHb2yoLjFM9mVOszcfX5+xxVHvsSFCr3cOr3vltM5o5qUywC2hl36lkwhYujGhv6bQ2x9mjnn8KckIqairw60Yindbt29JCIRYvDpZ7b+/k45XydwenL9DPFK83W3fCkkQsXl5NeTUyoCqG7M7rj2VkQM4p+jUxqkWUihZKt19wIpZPZ/n5pYy/VNWwyQ0XbDjTAiYerbyUm1mX3bS6U6rXuQuDK/oW7fAFZQOCDkAQAAMA0AnQEqMgAyAD5tKpFFpCKhlwtvGEAGxLSACuJfoAt94wK2dA97U3uH6q+yqntBvpjOCprgqLdAaxOKWi+Fg0jzfmNlv62CnQ9cdrSjcy3Zjlh9XesAKPOfKxHBB0H7uOB7MaJkuyv5Q9xWz2kUQMgAAP6ZJz00jxwoFSPZ6h9+sPG1Sv3m7Ei5BznnKVfvpXVM36C0cNDVpiuQ9bhzQtBgARJsd4HEqEBDnChShJdqUYQ5Fj11279W5hvUlbivmNljUi1dU2y4pJwaGl248dhR1klUf4quZU77DIrIC+r1m5KvIWeHMjmM4sFFs2tvurRGtqfBD8OFMyWBFp9cD1fBio7f5pZXCcn/z6LcKk9ti782/24cfnJ6NbAvUKOnvbLQn58GHm9RWeO7IuIXhBP+OUmRqVl27UdgCedso7D9jDR9Dt8GdfYul8q4ieJWfs61Nue9OyZrCs2BE99SRxSyoG7Te1Lseh4wrsp9ka6p8BvnEMdeJKZW00TIfeATXDhmqiMjRrNvm6/BmKjTHWRSLXOlZGsb4mUi2Ot6SR7cIpgC/Ovyyyo5rN/QYHdHKL//4RGf9YrsRB8nGkrRc25NApdqqHTHb5cYlHfslXsdriID0SE79M///+BqiPGcCYAAAA==" clip-path="url(#ce31b11)"/>
|
||||
</a>
|
||||
<a href="http://digwave.com" class="sponsorkit-link" target="_blank" id="rgehrsitz">
|
||||
|
||||
<clipPath id="cf1b44a">
|
||||
<rect x="570" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="542.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="570" y="995" width="45" height="45" href="data:image/webp;base64,UklGRmoEAABXRUJQVlA4IF4EAAAwFACdASoyADIAPm0qkUYkIiGhMBgKAIANiUAXZm2aLNgQyIoe3257GyjP9dX7v3PwV8e/q+TGSH/qfMTvtl+WUu/l1NZLvMDj39GDQh9YewT0oys2N8yoxpH9EJMPF1xQNtBeazWp9ZqyQUEA7/SFWa2rK+LoUJix+lrmhLsi8tBJEn5NCgfR/G3vDWnNml8h5GGEResVAA8wSHSCNafMKvfgr/CAfRbKAAD+/h3nhCd5YdzWPw4hEjh3pHGxXcfa9vjMSGgfodg8eg7TPKPMKI7XBReC7uoARTpQaYAlbG8btMbQr017ZNEO1RGOiRTztDWVpJo/1FVxUYk1L58TYZ//okuv0ILLoMXzBIj+Fg2zAeT0uyF0uTvtRo+blmHwnS6GSFRt3TlEDxDk6QD06v0MFBpB5XfBrOwMiilzMJsMb6CW0sCGuZaKbjUvtuiRnRmCPrUWBYeU+uzMvOq4I/df/S99/YAdU/9L+Dm/MvF4HucHc76a2v8eRxP9ZJqmOdDD8hSS2XrwMb3L4TWH/3WrGfji+/6KC4ocGBh2sPLZRUT7MJUYA0ZZWeI+Z4DOH5fOo9v4J+4if7I99+UOgUmnhuhVwg54mI0EsX9AAkTwRhilwXnwPWR1i2eLPl+QCa7RVK5RUGEDWuylVn0rfzpW9YOgN5IQhPGxDrNZpQKzWCe3pDv7T93G+pevNihe2DKJUhjp68C235dv8SKWyjbJJUOPdt9eNWqcYVLn7HuQ16J1psNEUEMt3UZrbaKDjNf6SacnkxbtVKWiJCYvP8RD9r06mDE9y/gGuu+Ty1dhOVj3e7liIWr54OG4Or2bne051MKFkcBaSYWpm3hVk9QWN5TD+nzutNljtm2IBjhLuxBxAnx9BWlNh7EASuB19xFplx5pb2mEuvPqrFAg18tdM70nzEnZhDCswwnzxGpWT8/b4L5sbn5Way88y5bKvbMxoqb6BF7WTPrgLMk4Pk+Ym/f04ZvGPGO1IdoNG4D06yk9Z3ekPKTkkGDQ5yN/8/dJJPyBnI1A1i/bAXH+o5aiNwVxkafBXtWCrn7twPB6uv2ZhGdUeheN5BZ+INjKDtq/JsIxLeUdXsZhVynPxKcv/yLHpAnUYvU9A/GmUumxrX1jGiK8+zOqdbxDWiouiIZdhEzw6R7TgMwxqeYmVslYdmTZGgjB8H5kSJzl22W250zkt6gat2FVn0oYC0J9oXuvsg8FoiPzQlUNu0PgxR8lA5gm9ha9JInEgG49w7PzOjYs9n0mNFZ3UC50KYg1x0xCgrG91fMTQP2dASi7wzTEi2u6mUMyetLmgGXIiILEylDFbxxgkAtIl/Jd+sP+zXNKQxyJZviE4+zqrR2OGJJYg3SXIoFWI0E3/40NPf/oV42llF05ll7R+hgALrk6E/4mqc7tY/O1lK9Sxf7vSBWSRk/YEgniH8EPmn32Ub2wJPqj5DgJNrQHOhEjl/jhVrpIdDmgBuli8DgAAA==" clip-path="url(#cf1b44a)"/>
|
||||
<image x="542.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRmoEAABXRUJQVlA4IF4EAAAwFACdASoyADIAPm0qkUYkIiGhMBgKAIANiUAXZm2aLNgQyIoe3257GyjP9dX7v3PwV8e/q+TGSH/qfMTvtl+WUu/l1NZLvMDj39GDQh9YewT0oys2N8yoxpH9EJMPF1xQNtBeazWp9ZqyQUEA7/SFWa2rK+LoUJix+lrmhLsi8tBJEn5NCgfR/G3vDWnNml8h5GGEResVAA8wSHSCNafMKvfgr/CAfRbKAAD+/h3nhCd5YdzWPw4hEjh3pHGxXcfa9vjMSGgfodg8eg7TPKPMKI7XBReC7uoARTpQaYAlbG8btMbQr017ZNEO1RGOiRTztDWVpJo/1FVxUYk1L58TYZ//okuv0ILLoMXzBIj+Fg2zAeT0uyF0uTvtRo+blmHwnS6GSFRt3TlEDxDk6QD06v0MFBpB5XfBrOwMiilzMJsMb6CW0sCGuZaKbjUvtuiRnRmCPrUWBYeU+uzMvOq4I/df/S99/YAdU/9L+Dm/MvF4HucHc76a2v8eRxP9ZJqmOdDD8hSS2XrwMb3L4TWH/3WrGfji+/6KC4ocGBh2sPLZRUT7MJUYA0ZZWeI+Z4DOH5fOo9v4J+4if7I99+UOgUmnhuhVwg54mI0EsX9AAkTwRhilwXnwPWR1i2eLPl+QCa7RVK5RUGEDWuylVn0rfzpW9YOgN5IQhPGxDrNZpQKzWCe3pDv7T93G+pevNihe2DKJUhjp68C235dv8SKWyjbJJUOPdt9eNWqcYVLn7HuQ16J1psNEUEMt3UZrbaKDjNf6SacnkxbtVKWiJCYvP8RD9r06mDE9y/gGuu+Ty1dhOVj3e7liIWr54OG4Or2bne051MKFkcBaSYWpm3hVk9QWN5TD+nzutNljtm2IBjhLuxBxAnx9BWlNh7EASuB19xFplx5pb2mEuvPqrFAg18tdM70nzEnZhDCswwnzxGpWT8/b4L5sbn5Way88y5bKvbMxoqb6BF7WTPrgLMk4Pk+Ym/f04ZvGPGO1IdoNG4D06yk9Z3ekPKTkkGDQ5yN/8/dJJPyBnI1A1i/bAXH+o5aiNwVxkafBXtWCrn7twPB6uv2ZhGdUeheN5BZ+INjKDtq/JsIxLeUdXsZhVynPxKcv/yLHpAnUYvU9A/GmUumxrX1jGiK8+zOqdbxDWiouiIZdhEzw6R7TgMwxqeYmVslYdmTZGgjB8H5kSJzl22W250zkt6gat2FVn0oYC0J9oXuvsg8FoiPzQlUNu0PgxR8lA5gm9ha9JInEgG49w7PzOjYs9n0mNFZ3UC50KYg1x0xCgrG91fMTQP2dASi7wzTEi2u6mUMyetLmgGXIiILEylDFbxxgkAtIl/Jd+sP+zXNKQxyJZviE4+zqrR2OGJJYg3SXIoFWI0E3/40NPf/oV42llF05ll7R+hgALrk6E/4mqc7tY/O1lK9Sxf7vSBWSRk/YEgniH8EPmn32Ub2wJPqj5DgJNrQHOhEjl/jhVrpIdDmgBuli8DgAAA==" clip-path="url(#cf1b44a)"/>
|
||||
</a>
|
||||
<a href="https://nick.rest" class="sponsorkit-link" target="_blank" id="8h9x">
|
||||
|
||||
<clipPath id="c68e6af">
|
||||
<rect x="625" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
<rect x="597.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="625" y="995" width="45" height="45" href="data:image/webp;base64,UklGRv4CAABXRUJQVlA4IPICAADwDwCdASoyADIAPm0sk0YkIiGhLhbbiIANiUAXZmvg0DCZnhf+dAZIBDYfz9UauL6c5ok33Td7FWKSiQz31qlwujuSEbIyjJOeHRTAcehqrpOnerZEdC+UWouESBuwP5cFb3iAsqnfk2lrjbkLVfhBpXu2r1NVz7EbhlxTTIFZPP2Q7HruuFBAAP7+oPkndrUW1IseYRJSwgat90YSDLNFaqMHmd/Jku2HGVB+2SsMaSyxw+smsFcZjnW2EVbJlNoaAv5X92++NZobiskw+y88xoaRgpAzsO6VU2FG5/2civU/4gziy2e5yAAsQx49f4OntF7OPl1AkVMJmjGDLpbGojD8hMouzI9pSSTfWMhovjo+ezBCimKEfVNRBVTWuuGO833xRVb6sNfF8Lb4tnTE4z3TF4MZt5rjmTgKYTY05j98RrvXTVZkPtiWr4h9V6DEjbC6VYNcTDQjR6hyH/9MaUbnckPqyQJIe/zRVNzR+Q/+UzMlXbAyQ/ubx9U4XwfleNeAbHuksh9k8Z08kZ/wG6UCNPhw0WaqaqtVu98hvjJvB4S1SeVFPWbeO4Z36nt8b3dvf3bl92oFtr6lMy9mMzPX7xuqw/ObfaL4Xh2FKjhok3y67yvCDP90BEYoJaIFdlNPxkwiQNT8sYRLFXB0YBI1yXLBA5ES/nPKvIBi6JZqnnNiQi6yaQ5+ykr9b+nwKAysgJsH4JjO0WpKeIZhAdiB3t+i2TqwczYnlgeYU1kHpOv1aoX0HKarLVKzDBKnzXnFqZINmNagasz5Arm+APyCxksaACNeqwiP5E69uEWjWzkDoBuSsYqkSMTuieNn/Fi5X8op1DlEYgAIjDBP+kS1v72muK04DmU1dV93JYY67+gkLXKDai7VuNsz6/nSMTHRhVaKtDR9OeVct/pEY8kTBT/gMeQ3//gSfpM8MrJDb56UxKRwHwp3t1uck1ts7n7+Vwk1JrYByxcuwX7dTcTwpBGyMnGFA5sh+B6UAAAA" clip-path="url(#c68e6af)"/>
|
||||
<image x="597.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRv4CAABXRUJQVlA4IPICAADwDwCdASoyADIAPm0sk0YkIiGhLhbbiIANiUAXZmvg0DCZnhf+dAZIBDYfz9UauL6c5ok33Td7FWKSiQz31qlwujuSEbIyjJOeHRTAcehqrpOnerZEdC+UWouESBuwP5cFb3iAsqnfk2lrjbkLVfhBpXu2r1NVz7EbhlxTTIFZPP2Q7HruuFBAAP7+oPkndrUW1IseYRJSwgat90YSDLNFaqMHmd/Jku2HGVB+2SsMaSyxw+smsFcZjnW2EVbJlNoaAv5X92++NZobiskw+y88xoaRgpAzsO6VU2FG5/2civU/4gziy2e5yAAsQx49f4OntF7OPl1AkVMJmjGDLpbGojD8hMouzI9pSSTfWMhovjo+ezBCimKEfVNRBVTWuuGO833xRVb6sNfF8Lb4tnTE4z3TF4MZt5rjmTgKYTY05j98RrvXTVZkPtiWr4h9V6DEjbC6VYNcTDQjR6hyH/9MaUbnckPqyQJIe/zRVNzR+Q/+UzMlXbAyQ/ubx9U4XwfleNeAbHuksh9k8Z08kZ/wG6UCNPhw0WaqaqtVu98hvjJvB4S1SeVFPWbeO4Z36nt8b3dvf3bl92oFtr6lMy9mMzPX7xuqw/ObfaL4Xh2FKjhok3y67yvCDP90BEYoJaIFdlNPxkwiQNT8sYRLFXB0YBI1yXLBA5ES/nPKvIBi6JZqnnNiQi6yaQ5+ykr9b+nwKAysgJsH4JjO0WpKeIZhAdiB3t+i2TqwczYnlgeYU1kHpOv1aoX0HKarLVKzDBKnzXnFqZINmNagasz5Arm+APyCxksaACNeqwiP5E69uEWjWzkDoBuSsYqkSMTuieNn/Fi5X8op1DlEYgAIjDBP+kS1v72muK04DmU1dV93JYY67+gkLXKDai7VuNsz6/nSMTHRhVaKtDR9OeVct/pEY8kTBT/gMeQ3//gSfpM8MrJDb56UxKRwHwp3t1uck1ts7n7+Vwk1JrYByxcuwX7dTcTwpBGyMnGFA5sh+B6UAAAA" clip-path="url(#c68e6af)"/>
|
||||
</a>
|
||||
<a href="https://debimate.jp" class="sponsorkit-link" target="_blank" id="nao1215">
|
||||
|
||||
<clipPath id="c2b67c3">
|
||||
<rect x="652.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="652.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRrAEAABXRUJQVlA4IKQEAABQFACdASoyADIAPmksj0WkIqEYDP98QAaEoAp0dfC0iQPTn97Zubvn928KfGp6F9ksqe+b4a/frkt3j8AHVQakHd7ne72/6N6gn5f9FfP5qHBmj+bGPtj/nyjIRTh0zDimjWurwlbW5vQzkw8N8F5s1C/2EacjAyx5T0hYw/d7P/KOmEPTVfp6nOcWu9NBdi6q1+2Bpqcx+5SV4NoZr9/IbTiTWBswRWh9CoAA/fLIp3KGMkELy5vwG4odDCapZ/ro77h7FBRmtiBdzjkH3lHfJqXH7L13bSrt3E4PnW96u/iyxbnF2JWQKyadOvVIqb9XHYQgg0WeX8rZz0+VoJKh4Cmv1aaD365IA/Lc67eG0Q3eN5z1cW8l4C9dC39J0DO4zDqZeN5W2Xlj1pYduBrmVFqjVWv5MNwNKkbk4XEo6gPIb30Ls+3zeJqHzfgbMEycQA9e8HZ3RYNrNCKJheShCqxy5hexdEIUxGIb6EehGjg1FkQuahmzpj5Ynzes3g79Nk4ArTNbGbxdDR24yPF2azsgl8yVEeS5m3dq0f/X962aWln7omgo2LMYNKVIoVlP8T3d7IvrEc9zJPk39j1tRf+jwDOgqLPietsqi6LJ5+IMWhryoyJslTc7hWx09ebunkY1l3cj/244ph/okil611GYsJ5S6LW4Q+cmifN3V2GTLcgbpi2J3zkFBW9QtQMUqkV6m9NWv3KDv3Izl6CtXUQ/WnilvV7etGQHwZ5m0ZFK/FxIBvsqfCcU8qtX3ft0pepZFW3R+NlYqfstKDNvtnJwq7VHPY5EHPTHJ2hDiiKTRhir36MP84pfW58CXwOqeMGzO1EwnJt72N8BQXZ6ecT5HN+AoSyMo3jn7jNVSmanYrok+uy+lRWkFTSTdxTBP0prdceV3f+gwZHLuBDs1jsmqhTAPQRdOzKSmUDSeL+uk3cnohUqQUtwJkn4nnshnDGTRLZqZYCKFIE9m0any8UyQ7At18g2BhZKoE1nuS5bbT1aWaYj7wYMVZW7vWUT1j7TnAfYBr0E8TnpCr+qTLUc47XhopugVbqE8V7OBwTosQBK9+BGrXfuzUCf6Upti1S1try4giusCI6IQEyQDJ78ydKUMfuzbbU2O/ciYIlCq7XYzwCkH2Ax/GKLvBlQmcSUrJXytg6UmAmCQX3yY0zY4yaGgeLkWaJlmupfxyTTIOXughvwUGrdrLT75zfMq7nVyWW/xUc6l/U+tZdwinIb/vZ9dIjDmiAVtFKE/2T/H0HkKDw6LWi21UhJseJxMWpV3e2OZX7J2WYcJL5ZFOf4YHyGDoi56iteDVjealU9NJsDmm2CEdcig9pLLmFsL8GcaacaxWnsvr8b8aLct1fWHK/54bjuJCTsVFRT1bLpv+zFNA9D4yoGWw4luJwm/XI4Zb7czMu35PsXZ5CRpRcrcH/44Olv8B7Uf/sDbf4u10t6jmC2+zlASkHMed8kISgzSJIGIt6HVlifx2tCmXl8tclMRYvd/gOI/p2YqkamoCj7/AwxRnTnQA5FIT4I4+69SL3F1QY091R4ZhPirBGqAmgYCJ1fSEmyTQA1ow0QAAA=" clip-path="url(#c2b67c3)"/>
|
||||
</a>
|
||||
<a href="https://brianhubbell.com" class="sponsorkit-link" target="_blank" id="brianhubbell">
|
||||
|
||||
<clipPath id="ceb1d99">
|
||||
<rect x="707.5" y="995" width="45" height="45" rx="22.5" ry="22.5" />
|
||||
</clipPath>
|
||||
<image x="707.5" y="995" width="45" height="45" href="data:image/webp;base64,UklGRnADAABXRUJQVlA4IGQDAAAQEACdASoyADIAPm0ukUYkIqGhLhkriIANiUAYP/QxRhXt+0zeYqeXn2tJRpQ4G5fjCLTctDG+7MydLzv8qpx71piodmy3rs6Norp0gVlzDYz8IKcyZxYQeTfQXMqIdTy1n9CharMWrYbU3bnyA4a+b2jcLPedLWVN7dK3SfN9L5bzjsqCJbHxAAD+/t6/qeiZne8qoxdtWW9IaAPrd39tFtt+tYeACwXHjIv4cxcZOsO+nBS7Uw8ED+CYVpAFHAY7ltPseoE1fmhZKHTEgglHEaPWosythX+jARgjk7i5lb6auGM0AAs1Rh/mvQZRXGL5bTX7RX1acexuaG1xJTiOojGqOCFqtl2mmdM4rzUrt8ORzap95ezVcCVXlatRrVKRNL0lR8FsLFMQL3u9Obg5JqmsNJfrva2Sh1RVbOAHofYrT+XRrp1mnNQgPxizVID7070FyTBrIKDt5+yMZ7Mhm6HCJ2AI8IYhCsTtVhcuyxAteiWHXOa2KsVCJAOwlwinqSV/HvMwEwvSHk/qCnfxDXOpXSbC56oV2W2KITfRBIcT9CPmZiesCKnvsVrueIIyIih5l6bZmw1ZDUsM6iek4sRzrt0SiiYpvmr/Bwf18xpKIjPPV5mUMlcJS+IOjfg8Jz7jJmH62h2PkAKGO1vWqMYlsi1uhOEyYBjR7pr9ciHztR20DdaXu3eLQj4wovPoVqXcgb+u8PYq+41eBXx72Qm/0gC33uNVA3mD55yfey8HkY3PI9qVywe1fii3uztYswKvPOoYUqlBK9l/e2kN5ka1BsBzmt3TzlMN+PnDHMkk8y1HoWxtSkPrEy1cTQTeCFBO96NLn8w6ppY/Evda/DfLkCqhzSoIMAV2wO16ya39riu0ibhMdYyAqXD7l8nb255pKXAWsbBUKqNqcU8zWX2H4Nz8F4/onO2lopWPAn5LU1O6XR+hUkM1JD+fmVuEG5ObDOPj86yT/IdhswiI68kWja28OxMqRqIl66lUCWBz/qtIlnr4JptK8SvpIRLdOBnSzO6ARXMDJ4SpAIVokKVovUQdDQ3nd0VSmdE9oY0YaeIaeIaeIMSAVd4Q4PBv+24Gp5KAtgNKvAIzolHbFA5N3X1da98uYx5DvCPk5+bnVLMEWTHcj1b6PU4kWBRqwAAA" clip-path="url(#ceb1d99)"/>
|
||||
</a>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 105 KiB |
Loading…
Add table
Add a link
Reference in a new issue