目录
p5 art
flow field
flow field
import type p5 from "p5";
import Basic from "@components/react/p5/index.tsx";
import { Slider } from "@shadcn/ui/slider";
import { cn } from "@utils/utils";
import { useDebounce } from "@uidotdev/usehooks";
import { useCallback, useState } from "react";
export default () => {
let [density, setDensity] = useState(30);
let debounceDensity = useDebounce(density, 200);
const sketch = useCallback(
(p: p5) => {
let points: p5.Vector[];
let mult: number;
const setup = () => {
points = [];
mult = 0.005;
p.createCanvas(p.windowHeight / 2, p.windowHeight / 2);
p.noiseDetail(1, 0.5);
// p.angleMode(p.DEGREES);
p.frameRate(120);
p.pixelDensity(3);
p.background(0);
let density = debounceDensity || 200;
let space = p.width / density;
for (let i = 0; i < p.width; i += space) {
for (let j = 0; j < p.height; j += space) {
let point = p.createVector(i, j);
points.push(point);
}
}
};
const draw = () => {
if (p.frameCount > 1200) {
p.noLoop();
return;
} else {
p.noStroke();
p.fill(255);
for (let i = 0; i < points.length; i++) {
let r = p.map(points[i].x, 0, p.width, 50, 255);
let g = p.map(points[i].y, 0, p.height, 255, 50);
let b = p.map(points[i].x, 0, p.width, 255, 50);
p.fill(r, g, b);
let noiseX = points[i].x * mult;
let noiseY = points[i].y * mult;
let angle = p.map(p.noise(noiseX, noiseY), 0, 1, 0, 720);
let walk = p.createVector(p.cos(angle) * 1, p.sin(angle) * 1);
points[i].add(walk);
p.ellipse(points[i].x, points[i].y, 1, 1);
}
}
};
const resize = setup;
p.setup = setup;
p.draw = draw;
p.windowResized = resize;
},
[debounceDensity]
);
return (
<>
密度{density}
<Slider
defaultValue={[30]}
max={40}
min={20}
step={1}
className={cn("w-[100%] m-4")}
onValueChange={value => {
setDensity(value[0]);
}}
value={[density]}
/>
<Basic sketch={sketch}></Basic>
</>
);
};
- after i changed walker angle
error
质数螺旋
prime spiral points
import type p5 from "p5";
import Basic from "@components/react/p5/index.tsx";
import { useCallback, useState } from "react";
import { useDebounce } from "@uidotdev/usehooks";
import { Slider } from "@shadcn/ui/slider";
import { cn } from "@utils/utils";
export default () => {
let [Num, setNum] = useState(5);
let debounceNum = useDebounce(Num, 200);
const sketch = useCallback(
(p: p5) => {
let points: p5.Vector[] = [];
const setup = () => {
p.createCanvas(p.windowWidth / 2, p.windowWidth / 2);
for (let i = 0; i < (p.windowWidth * debounceNum) / p.PI; i++) {
let vector = p.createVector(i, i);
points.push(vector);
}
p.background(255);
p.translate(p.windowWidth / 4, p.windowWidth / 4);
p.stroke(0);
p.fill(0);
p.line(0, p.height / 2, p.width, p.height / 2);
p.line(p.width / 2, 0, p.width / 2, p.height);
p.noStroke();
for (let i = 0; i < points.length; i++) {
let len = points[i].x;
let x1 = p.cos(len) * len;
let y1 = p.sin(len) * len;
x1 = Number(x1.toFixed(2));
y1 = Number(y1.toFixed(2));
p.ellipse(
x1 / debounceNum,
y1 / debounceNum,
debounceNum,
debounceNum
);
}
};
const draw = () => {};
const resize = () => {
p.resizeCanvas(p.windowWidth / 2, 240);
};
p.setup = setup;
p.draw = draw;
p.windowResized = resize;
},
[debounceNum]
);
return (
<>
数量{Num}
<Slider
defaultValue={[5]}
max={10}
min={1}
step={0.1}
className={cn("w-[100%] m-4")}
onValueChange={value => {
setNum(value[0]);
}}
value={[Num]}
/>
<Basic sketch={sketch}></Basic>
</>
);
};
prime spiral curve
prime spiral step
结合tone
tone demo
可视化三角函数(todo)
可参考
Trigonometry(三角函数)
图形融合
Click to expand
核心算法是基于**签名距离函数(SDF)**构建的。这种方法常用于生成 3D 图形对象的体积效果,使用了形状组合、平滑并集、以及不同的形状距离函数。我们会从以下几个方面深入解释:
- Signed Distance Function (SDF)
- Octahedron 和 Sphere 的距离函数
- opSmoothUnion 函数的平滑并集
- 颜色计算和渲染
1. Signed Distance Function (SDF)
签名距离函数 (SDF) 是一种描述空间中任意点到特定形状距离的函数。对于每个点,SDF 返回到达该形状表面的最短距离,同时还会保留符号来区分点是否在形状内部。例如,返回正值表示点在形状外部,负值表示点在形状内部,零值表示点在形状表面。
在 SDF(vec3 p)
函数中,我们根据时间动态地移动两个形状并计算它们的平滑并集,得到一个包含多种形状组合的图形。
2. Octahedron 和 Sphere 的距离函数
Octahedron 距离函数:sdOctahedron
八面体的距离计算基于其几何特性。这个函数接收一个 3D 点 p
和边长 s
,然后执行以下步骤:
- 使用
p = abs(p);
将p
转换为其绝对值,因为八面体具有对称性,所以我们只需要计算一个象限的距离。 - 计算该点到八面体边界的距离。
- 基于不同轴对称性调整距离,使得八面体形状可以被正确定义。
float sdOctahedron(vec3 p, float s) {
p = abs(p);
float m = p.x + p.y + p.z - s;
vec3 q;
if (3.0 * p.x < m) q = p.xyz;
else if (3.0 * p.y < m) q = p.yzx;
else if (3.0 * p.z < m) q = p.zxy;
else return m * 0.57735027;
float k = clamp(0.5 * (q.z - q.y + s), 0.0, s);
return length(vec3(q.x, q.y - s + k, q.z - k));
}
这个算法的关键点在于通过abs
和平移操作来简化八面体的计算,同时通过 q
的比较确保仅需要计算最小距离。最终的结果就是 p
点到八面体表面的距离。
Sphere 距离函数:sdSphere
球体的距离函数要简单得多,只需计算点 p
到球体中心的距离减去球体半径:
float sdSphere(vec3 p, float s) {
return length(p) - s;
}
3. 平滑并集操作: opSmoothUnion
当我们希望将多个形状组合在一起,同时使得它们的边界具有平滑的过渡效果时,可以使用平滑并集。在 opSmoothUnion
中,我们实现了一个平滑距离合并算法,使得八面体和球体之间的过渡更自然。
float opSmoothUnion(float d1, float d2, float k) {
float h = clamp(0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0);
return mix(d2, d1, h) - k * h * (1.0 - h);
}
其中:
d1
和d2
是两种形状的距离值。k
控制平滑过渡的程度(k
越大,边界越平滑)。
平滑并集的基本思路是利用 clamp
限制混合值 h
的范围,然后通过 mix
函数平滑地插值两种形状的距离。mix(d2, d1, h)
表示在 d1
和 d2
之间插值,k * h * (1.0 - h)
调整平滑的边缘效果。
4. 颜色计算与渲染
在 main
函数中,我们基于到形状的距离来计算颜色。此方法模拟一种距离衰减效果,将不同距离的点绘制成不同颜色:
void main(void) {
float minSide = min(res.x, res.y);
vec2 crd = (gl_FragCoord.xy - res * 0.5) / minSide;
// 计算每个像素到形状的距离
float d = SDF(vec3(crd, 0.0));
vec3 color = vec3(d);
// 使用 smoothstep 函数调整颜色,使形状边缘更平滑
color = mix(color, vec3(1.0, 1.0, 0.0), 1.0 - smoothstep(0.0, 1.0 / minSide, abs(d)));
gl_FragColor = vec4(color, 1.0);
}
gl_FragCoord
:当前像素的位置,通过res
归一化以使着色与分辨率无关。SDF(vec3(crd, 0.0))
:计算当前像素到形状的距离。mix
:根据距离值d
混合不同颜色。离形状越近,颜色越接近黄色;越远则越暗。
总结
这个 GLSL 代码使用 SDF 技术来绘制八面体和平滑组合的球体。借助 SDF、平滑并集和基于距离的颜色计算,可以渲染出具有体积感、光滑边缘的 3D 图形。
换座位
Fisher–Yates shuffle
算法,当时要是知道这个算法,就有机会和 crush相邻了
curl
查看天气
curl wttr.in
Weather report: Beijing, China
\ / Sunny
.-. 29 °C
― ( ) ― ↓ 4 km/h
`-’ 7 km
/ \ 0.0 mm
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Thu 11 Jul ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Sunny │ \ / Sunny │ _`/"".-. Patchy rain ne…│ _`/"".-. Patchy rain ne…│
│ .-. +29(33) °C │ .-. +37(38) °C │ ,\_( ). 36 °C │ ,\_( ). +27(29) °C │
│ ― ( ) ― ↓ 4-11 km/h │ ― ( ) ― ↑ 7-8 km/h │ /(___(__) ↗ 9-12 km/h │ /(___(__) ↙ 13-17 km/h │
│ `-’ 7 km │ `-’ 10 km │ ‘ ‘ ‘ ‘ 10 km │ ‘ ‘ ‘ ‘ 10 km │
│ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ ‘ ‘ ‘ ‘ 0.1 mm | 100% │ ‘ ‘ ‘ ‘ 0.0 mm | 70% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Fri 12 Jul ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ _`/"".-. Patchy rain ne…│ \ / Partly Cloudy │ \ / Sunny │ _`/"".-. Patchy rain ne…│
│ ,\_( ). +29(30) °C │ _ /"".-. +33(35) °C │ .-. +34(35) °C │ ,\_( ). +29(31) °C │
│ /(___(__) ↙ 6-8 km/h │ \_( ). ↖ 6-7 km/h │ ― ( ) ― ↗ 14-17 km/h │ /(___(__) ↗ 7-11 km/h │
│ ‘ ‘ ‘ ‘ 9 km │ /(___(__) 10 km │ `-’ 10 km │ ‘ ‘ ‘ ‘ 9 km │
│ ‘ ‘ ‘ ‘ 0.2 mm | 100% │ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ ‘ ‘ ‘ ‘ 0.6 mm | 100% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Sat 13 Jul ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ _`/"".-. Light rain sho…│ .-. Light drizzle │ _`/"".-. Light rain sho…│ _`/"".-. Moderate or he…│
│ ,\_( ). +23(25) °C │ ( ). +26(28) °C │ ,\_( ). +27(29) °C │ ,\_( ). +23(26) °C │
│ /(___(__) ← 7-9 km/h │ (___(__) ← 8-9 km/h │ /(___(__) ← 13-16 km/h │ /(___(__) ← 7-10 km/h │
│ ‘ ‘ ‘ ‘ 10 km │ ‘ ‘ ‘ ‘ 2 km │ ‘ ‘ ‘ ‘ 10 km │ ‚‘‚‘‚‘‚‘ 7 km │
│ ‘ ‘ ‘ ‘ 0.5 mm | 100% │ ‘ ‘ ‘ ‘ 0.7 mm | 100% │ ‘ ‘ ‘ ‘ 0.5 mm | 100% │ ‚’‚’‚’‚’ 2.7 mm | 100% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
Follow @igor_chubin for wttr.in updates
查看新闻
curl rate.sx
_
_ _ __ _| |_ ___ ____ __
| '_/ _` | _/ -_)(_-< \ /
__................................................__________|_| \__,_|\__\___()__/_\_\_____
' ' ' ' '
Market Cap: $2,146,156,882,064 =
24h Vol: $62,100,878,588 =
BTC Dominance: 53.5% =
┌──────┬──────┬─────────────┬──────────────┬─────────────┬──────────────────┬──────────────┐
│ Rank │ Coin │ Price (USD) │ Change (24H) │ Change (1H) │ Market Cap (USD) │ Spark (1H) │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 1 │ BTC │ 57635.1 │ -0.54% │ -2.36% │ 1.137T │ ▁▁▁▁▁▁▁▁▁▁▁▇ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 2 │ ETH │ 3099.46 │ 1.29% │ 0.03% │ 372.577B │ ▇▂▃▂▁▃▂▃▁▅▂▁ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 3 │ USDT │ 0.999982 │ -0.02% │ -0.02% │ 112.258B │ ▃▁▅▇▃▃▅▇▂▁▅▇ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 4 │ BNB │ 523.338 │ 1.35% │ 0.08% │ 77.236B │ ▁▅▂▁▂▇▇▃▃▅▂▂ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 5 │ SOL │ 141.416 │ -0.20% │ -1.75% │ 65.570B │ ▁▁▁▁▁▂▁▂▁▁▁▇ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 6 │ USDC │ 0.999959 │ -0.02% │ -0.01% │ 34.121B │ ▃▅▇▃▅▅▂▃▂▇▇▃ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 7 │ XRP │ 0.438181 │ 0.49% │ -0.22% │ 24.417B │ ▁▅▅▅▁▂▃▁▇▃▃▇ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 8 │ TON │ 7.24703 │ 562.76% │ 551.74% │ 18.167B │ ▇▇▇▇▇▇▇▇▇▇▇▇ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 9 │ DOGE │ 0.107522 │ -0.00% │ -1.95% │ 15.598B │ ▁▁▁▁▁▂▁▁▁▁▁▇ │
├──────┼──────┼─────────────┼──────────────┼─────────────┼──────────────────┼──────────────┤
│ 10 │ ADA │ 0.385592 │ 2.77% │ 0.49% │ 13.832B │ ▁▂▁▇▁▂▃▂▃▂▂▇ │
└──────┴──────┴─────────────┴──────────────┴─────────────┴──────────────────┴──────────────┘
2024-07-11 02:52:06.761841 UTC
NEW FEATURE: to see cryptocurrency exchange rate, do curl rate.sx/eth (or any other coin instead of ETH)
[Follow @igor_chubin for rate.sx updates] [github.com/chubin/rate.sx]
map
npx mapscii
npx: installed 26 in 3.145s
Welcome to MapSCII! Use your cursors to navigate, a/z to zoom, q to quit.
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠛⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠻⠟⠛⠛⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠃⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢻⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀⢀⣠⣿⠿⠛⠛⢿⠏⠈⠻⡄⠀⠀⠀⠀⠀⠀⠶⠖⠺⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠟⠋⠁⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠈⠿⣧⣀⣀⠀⠀⠀⠀⠀⠀⢀⣾⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠁⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠈⣿⠛⠏⠀⠀⠀⠀⠀⣼⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣍⡀⠁⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⢙⡄⠀⠀⠀⠤⣤⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠉⠀⠹⣷⣤⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⢸⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣿⣿⣿⣂⠹⣿⡽⣿⣧⣀⣰⠛⠁⠀⠀⠀⢘⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⠃⢈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣩⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡻⡄⠀⠀⣠⣿⣿⣷⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡦⠀⣿⣿⣨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⢀⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⡙⠿⢿⣟⠁⢀⣀⠈⣻⣿⣿⣿⣿⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠚⡿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣾⣿⠃⠉⢿⣷⠟⣿⣿⣉⠀⣿⣿⣷⠘⣿⣿⡿⠿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢉⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠟⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣟⣡⣤⣶⣿⣿⣿⣶⣿⣍⣿⣄⣀⣀⣀⣀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡯⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣤⣾⣷⣭⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠉⠉⣻⣿⣿⣿⣿⠿⣿⡿⠻⢿⡏⠉⣻⡿⢟⣿⡿⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⡿⠿⢿⣿⣿⡿⠿⣿⣿⣿⣿⣿⣿⣟⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⢠⡞⠁⠛⠻⠹⡇⢰⣿⡛⠀⢻⣇⣾⣿⡇⠘⠏⠀⣹⠖⠾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⣼⣿⣿⣿⣿⣿⣿⠉⢻⣿⣿⠿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠁⠀⢸⣿⣿⣿⣿⣿⠛⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⡟⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣿⡶⢂⡀⠀⠀⠁⠀⢿⣿⣷⣾⠋⢹⣿⡧⠀⠀⠀⠀⠀⠀⠘⠻⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣦⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣄⣻⣿⣿⣿⣿⣿⠃⠀⢺⡝⠇⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⠋⠛⠙⠉⠃⠀⠀⠀⠈⠻⣿⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣻⣿⣿⣿⣿⣿
⣿⣿⠉⠀⠀⠀⠀⠈⠉⠙⠛⠛⡿⣿⣿⡿⡿⠟⠏⢿⣿⠿⢿⣿⣛⠉⠁⠀⠀⡀⢀⣽⡿⢻⡄⠠⢿⣿⣷⡶⢦⣤⣦⣄⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣇⣽⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⣛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢟⠛⠀⡔⣴⡻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⡀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡿⠿⣿⣿⣿⡻⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿
⣉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠈⢙⣿⣶⣶⡛⠹⣷⣿⣿⠓⠿⠀⠘⢹⣿⠃⢠⣿⣿⡿⣦⡄⠀⠚⠿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⡦⠗⢍⠊⠀⢇⠀⠀⠈⠙⢿⣿⣿⠿⣿⡿⠟⠽⠿⠛⠟⠁⠈⠙⠻⠀⢈⣏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠁⠀⠀⠀⠉⢻⣿⣿⣿⣿⣿
⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⡤⠀⠀⠀⠈⠀⠀⠀⠉⠀⠀⠀⠀⠀⠈⠃⣄⣴⣿⣿⣷⣿⠁⠀⢀⡀⠙⢻⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢃⠎⠀⠀⠘⡄⠀⠸⡀⢠⣄⡀⢀⡿⢿⠾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠹⡟⢻⣿⣿
⣀⣀⡤⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠠⠿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠛⠿⣿⣿⢛⡛⠀⠀⠈⢿⣦⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⢠⣶⣿⣿⣿⣿⣿⣿⣿⣶⠈⠈⠀⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⡎⠀⠀⢠⣿⡷⠀⠰⡁⠀⣿⡿⣿⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣼⣷⣆⠀⣶⣿⣿
⡿⠿⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⣀⣄⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣶⣷⣿⣿⣿⣿⣷⣄⢢⣌⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⡜⠁⠀⣠⣿⠋⠀⠀⠀⢣⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⢀⡘⣿⣿⣿⣿⣿⣿⣿
⣧⠀⠀⠀⠀⠀⠀⣠⢀⣀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠦⣼⠿⠋⠁⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⡀⠉⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣀⡀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⢣⠀⠰⣿⣿⠀⠀⢀⡰⣧⡄⢿⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣤⡿⠀⠀⡀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣦⣄⣀⠀⣴⣷⣾⣿⣿⣿⣿⣵⡠⠢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠴⠦⠄⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠈⣿⣿⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⣴⣣⡄⢀⣼⣿⣷⠞⢛⠏⠙⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣴⣶⣠⣾⣿⣿⠏⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⡿⣷⣿⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠹⠿⢿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠈⠁⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠑⣻⣿⣿⣿⣿⣿⢿⣇⢀⣼⣿⣿⢻⣏⠺⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⠉⠁⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀⠀⠈⠛⢻⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠙⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣻⣧⡹⣿⣿⣿⣿⣷⢾⣿⣾⣿⠿⠿⣥⣠⠋⠈⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠤⠒⢲⢄⣀⢤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠋⢧⠀⠀⠀⠀⠀⠀⠘⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣣⣾⣏⠁⠘⣿⣟⣻⠁⠀⠀⢫⠀⠀⠀⢠⡣⠤⣀⡴⠥⡀⠀⠀⠀⠀⠀⠀⢀⣀⡀⠀⠀⠼⡂⠀⠀⠀⠀⠈⠀⠀⢣⡀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⢀⡤⠞⠁⠀⠀⠀⠀⢰⠉⠑⢆⠀⠀⠀⠀⠀⠁⢹⣻⣿⣿⣿⣿⣿⣿⣦⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣗⣤⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣠⡀⠀⢀⣀⠀⠀⠈⠀⠀⠀⠀⠀⣠⣶⣶⣶⣾⡟⠺⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⠿⠋⠢⢇⡀⠀⠲⣉⣓⡢⣠⣔⠁⠀⠀⠀⠀⠑⠲⢤⠀⠀⢀⠦⠇⠀⠈⠉⠉⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠢⢤⡔⠊⠉⠒⠬⠂⠘⠒⠒⠢⣀⡠⠔⢤⠔⠃⠀⠀⠈⠦⢄⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠽⠿⣿⣦⣀⠀⠀⠀⠀⠀⢼⢫⠀⣿⣿⣿⣷⣶⣮⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⠀⠀⠀⣔⣓⠶⠾⡤⡮⣊⣡⠋⠒⠙⣵⣤⣀⣠⣴⠚⠀⠀⠈⠲⣠⣤⡄⠀⢀⣀⠀⠀⠀⠀⠀⠀⡠⠤⡤⠀⡰⠺⠁⠑⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠓⡾⠄⠀⠀⠀⠀⠘⢒⠏⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⣿⠣⣿⣛⣤⡴⠒⠒⣡⣼⣿⣥⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣀⠀⣀⣈⣶⣄⠻⣿⣯⣺⣑⢦⠤⢤⣿⣿⣷⣿⣿⣤⣀⠀⠀⣾⣿⣏⠁⢰⠺⠻⢄⡠⡀⠀⠀⠀⣀⣀⣀⣲⠁⠀⠀⠀⠉⠒⠤⡀⠀⠀⠀⠀⢀⣀⠮⠒⠉⠀⠀⠀⠀⠀⠀⣰⣉⣀⣼⣿⣿⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠐⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠋⠀⠛⠋⠀⠀⢠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡞⡆⠀⠀⢨⣭⣿⣿⣿⣿⣧⣝⣻⣷⡻⣵⣶⣾⡿⠿⠟⠛⠻⠿⠟⢭⣗⠾⣿⣿⡿⠜⠊⠣⢄⡀⠳⢤⣾⡭⢁⣠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠊⠁⠀⠀⠀⠀⠀⢀⣄⣀⠔⣪⣿⣿⣿⣿⣿⡿⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣎⡆⣀⣠⣽⣿⣿⣿⣿⣿⣿⣛⣿⣿⣧⢸⣿⣧⠀⣀⠀⣀⣀⣀⣠⠼⡝⠙⠿⣿⣿⠔⠢⢄⡀⢈⠦⡽⠝⣯⣳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠺⡿⣿⣿⣥⠽⣿⣿⣿⣿⠟⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠙⢟⠉⠀⠀⠀⡎⢼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠄⣀⠇⠀⡜⠀⠀⠀⠀⠀⠀⢰⠑⠁⠀⠀⡬⠂⡤⠵⢢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⣿⣿⣷⣶⣿⡿⣻⣣⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⣯⡒⠒⠒⢢⢀⠀⠀⠀⠀⣀⠀⣀⣀⣀⡀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⣀⡰⠊⠀⠀⠀⠀⠸⡖⠁⠉⠻⢿⠏⠉⡟⠻⠿⠻⠿⡟⢻⠑⠢⣀⠈⣱⣀⠀⠀⠀⠀⢘⣆⠀⢠⠜⠂⢀⠏⠀⠙⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠉⠉⢆⣴⣿⣿⣿⣿⣿⣿⣿⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢻⣥⣏⡀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠰⣯⡁⠀⠀⠀⠉⠙⢿⣧⣄⣤⡀⠀⣑⡍⠁⠀⡔⠊⠀⠀⠀⠑⠪⢕⣒⣖⠶⠊⣉⠗⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣻⣦⡀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡣⡿⠀⠀⡏⠑⠢⡀⠀⠀⠀⠀⣓⠤⣀⠤⣀⠀⠀⢱⠀⠀⠀⠀⢹⣷⡄⠀⠀⠀⠀⠈⢟⣛⡝⠻⣿⣿⣿⣿⣶⡚⠀⠀⠀⠀⠀⠀⠀⠀⢏⣩⣷⠇⠸⣆⢀⡠⢄⡀⠀⠀⢀⣀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣀⠀⠀⠹⣿⣿⡿⢉⣽⣿⣿⣿⣷⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⠉⠁⠀⠀⢱⠀⠀⠈⠑⣤⠔⠊⠀⠀⢈⠆⠀⠉⠒⡼⠉⠉⠉⠉⠉⢻⣷⡄⠀⠀⠀⣀⣀⡠⢇⣾⣿⣿⣿⣿⣿⣷⣿⡀⠀⠀⠀⠀⣠⣾⣿⣿⣧⡀⢀⠜⡍⣳⣄⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣾⣅⠯⡻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠢⢤⠤⠤⠼⠀⣀⣀⠤⠜⠀⠀⠀⠀⡜⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⣖⡻⣿⣏⠒⠊⢀⣸⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⣴⣾⣿⣿⣿⣿⣿⣧⣦⠃⠉⣀⣻⡝⣿⣿⣿⣿⣿⣿⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣡⣿⣿⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡻⠺⠤⣄⣠⠋⣀⣀⠷⡜⠉⠒⠊⠉⣻⠀⠀⠀⣣⢀⠀⢀⠀⣔⡰⠉⠈⢹⡿⣶⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣨⣃⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠻⣁⣀⠀⠁⠈⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣎⠗⡜⠀⢉⠇⠘⣿⣀⠀⢀⣀⡰⢹⠤⠔⠊⠘⢎⡉⠉⠉⠼⡀⠀⠀⠀⠈⠒⡴⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⢸⠀⣖⠬⢳⠸⣉⣏⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣾⣿⣶⣿⣿⣿⣷⣾⣄⣀⠘⡤⡔⠒⠒⠒⠉⠒⣤⠲⡚⠢⠤⡢⠔⢊⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⠻⣧⣿⣿⣿⣿⣿⠟⡗⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠉⢒⢤⠀⢸⠃⠑⠁⠀⠈⠉⠁⠀⠀⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡉⢈⡏⣁⠇⠀⠀⠀⠀⢠⣧⣶⢅⡀⠀⣧⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠹⣿⣿⣿⠓⠉⢀⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠎⠁⠀⡝⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣤⡃⠀⠀⠀⠀⠀⢸⠋⠉⠀⠘⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣸⣿⣿⣿⣷⣾⣿⣾⣿⣿⣿⣿⣿⣿⣿⣍⡀⢹⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠰⣁⡀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠑⠒⠉⡇⠀⠀⡬⠷⢄⠀⠀⢽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣴⣶⣮⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠙⡍⠘⠤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⡭⠏⠒⠷⠀⣜⣷⠒⠉⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⣿⣿⣿⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣘⠆⠀⠀⠀⠓⢆⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡧⠤⠤⢄⣀⣣⣀⣠⠒⠫⡄⠟⢀⣤⣿⣿⡛⠋⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠈⠁⠀⠀⠙⠻⡿⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢇⣀⣀⡔⠉⢺⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⣸⠀⠀⠱⣀⣠⠃⢾⣿⣿⣿⡿⠁⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⡜⠁⠁⠈⠢⢄⠙⡆⠀⠀⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⡇⢀⣀⠔⠁⢘⣤⣼⣿⣿⣿⣷⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢡⠊⠀⠀⠀⠀⠚⡲⠋⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡤⣀⠏⠁⠀⠀⣀⢑⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⡸⠒⢤⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⢘⣡⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⢀⣤⣴⣶⣤⡀⠀⡀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⡸⠀⠀⠀⠀⠀⢳⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣤⣿⣿⣿⣿⣿⣿⣿⣿⣾⣅⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣥⠇⠀⠀⠀⣤⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣶⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠙⣻⣿⣿⣿⣿⣿⣿⣿
center: 52.512, 13.42 zoom: 0.44
生成随机commit message
git commit -m "$(curl -sk whatthecommit.com/index.txt)"
neofetch
curl -sL https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch | bash
生成二维码
printf "ajn404 love from china" \ | curl -F-=\<- qrenco.de
cool thing outside
codepen 2023
- 神奇的悬浮特效
- 10.zembzev
- wvxewXO
- theme button
- QWzeQOK
- qByGqOm
- scroll text
- ghost
- puppy
canvas
- AGgarW