From 62b7ca26ceeac948ef4c20637423ce94ca656b77 Mon Sep 17 00:00:00 2001 From: erfanzar Date: Fri, 15 Nov 2024 19:15:50 +0330 Subject: [PATCH] updating benchmarks (now we can outperforme jax cudnn sdpa attention in every sequence length), caching triton kernels, autotuning --- benchmarks/mha/triton/README.md | 180 --- ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 24305 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 25290 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 25574 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 25331 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 25311 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 24518 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 24784 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 26267 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 24495 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 23837 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 26327 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 23511 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 26765 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 27265 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 26946 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 23785 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 27525 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 26910 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 29543 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 24060 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 29116 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 23453 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 23601 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 23508 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 27812 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 23598 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 23445 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 19463 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 25056 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 25284 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 31672 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 31348 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 29888 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 25325 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 30279 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 29597 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 20209 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 25478 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 24237 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 29835 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 28564 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 28411 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 23765 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 26506 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 27640 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 19001 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 27859 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 29099 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 28601 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 29883 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 28319 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 28453 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 29658 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 29668 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=bwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=bwd.png | Bin 27364 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 23958 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=bwd.png | Bin 29535 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 23324 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=bwd.png | Bin 28018 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 24232 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=bwd.png | Bin 26136 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 23204 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=bwd.png | Bin 29181 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 23269 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=bwd.png | Bin 27426 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 22929 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=bwd.png | Bin 29615 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 23562 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=bwd.png | Bin 29340 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 23081 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=bwd.png | Bin 27768 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 23005 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=bwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=bwd.png | Bin 26549 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 24043 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=bwd.png | Bin 27558 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 24408 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=bwd.png | Bin 26511 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 23889 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=bwd.png | Bin 27057 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 25310 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=bwd.png | Bin 27697 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 24568 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=bwd.png | Bin 26925 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 24701 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=bwd.png | Bin 26990 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 23718 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=bwd.png | Bin 27095 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 24238 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=bwd.png | Bin 26702 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 24205 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=bwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=bwd.png | Bin 26508 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 29687 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=bwd.png | Bin 28049 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 23370 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=bwd.png | Bin 30121 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 27264 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=bwd.png | Bin 25672 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 23399 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=bwd.png | Bin 28411 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 23768 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=bwd.png | Bin 26618 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 23115 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=bwd.png | Bin 24579 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 23749 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=bwd.png | Bin 29353 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 23436 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=bwd.png | Bin 26176 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 22983 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 24992 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 28090 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 26046 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 28002 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 27557 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 27583 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 24861 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 27552 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 28051 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 24291 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 27886 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 23823 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 27958 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 28515 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 28401 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 24717 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 27881 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 27927 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 28688 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 29301 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 31414 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 28574 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 28391 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 28287 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 28779 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 28515 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 29083 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 19628 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 23779 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 24802 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 32357 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 26897 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 30469 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 24966 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 29640 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 30608 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 22494 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 24315 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 25875 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 30305 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 27454 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 27770 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 27860 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 29533 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 29497 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 19099 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 28847 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 30143 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 30688 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 31258 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 29917 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 27494 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 28890 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 28070 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=bwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=bwd.png | Bin 29235 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 26162 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=bwd.png | Bin 29390 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 26572 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=bwd.png | Bin 27683 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 26855 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=bwd.png | Bin 25283 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 26649 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=bwd.png | Bin 28729 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 26290 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=bwd.png | Bin 26317 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 26748 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=bwd.png | Bin 27769 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 25906 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=bwd.png | Bin 30451 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 27152 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=bwd.png | Bin 25881 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 26063 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 24829 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 25649 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 24525 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 25775 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=bwd.png | Bin 27376 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 25649 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 25648 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 24845 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 26262 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 26160 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=bwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=bwd.png | Bin 26822 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 30039 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=bwd.png | Bin 29105 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 29573 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=bwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=bwd.png | Bin 27672 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 30245 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=bwd.png | Bin 26123 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 28733 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=bwd.png | Bin 27937 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 27628 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=bwd.png | Bin 27458 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 27267 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=bwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=bwd.png | Bin 24308 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 27610 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=bwd.png | Bin 27985 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 27727 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=bwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=bwd.png | Bin 26972 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 27472 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 25390 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 26561 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 25171 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 26520 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 26671 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 26393 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 25227 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 26660 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 26576 -> 0 bytes ...ocksize_q=128-blocksize_k=128-mode=fwd.csv | 6 - ...ocksize_q=128-blocksize_k=128-mode=fwd.png | Bin 25736 -> 0 bytes ...locksize_q=128-blocksize_k=32-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=32-mode=fwd.png | Bin 27093 -> 0 bytes ...locksize_q=128-blocksize_k=64-mode=fwd.csv | 6 - ...locksize_q=128-blocksize_k=64-mode=fwd.png | Bin 25877 -> 0 bytes ...locksize_q=32-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=32-blocksize_k=128-mode=fwd.png | Bin 28113 -> 0 bytes ...blocksize_q=32-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=32-mode=fwd.png | Bin 27430 -> 0 bytes ...blocksize_q=32-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=32-blocksize_k=64-mode=fwd.png | Bin 27033 -> 0 bytes ...locksize_q=64-blocksize_k=128-mode=fwd.csv | 6 - ...locksize_q=64-blocksize_k=128-mode=fwd.png | Bin 24906 -> 0 bytes ...blocksize_q=64-blocksize_k=32-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=32-mode=fwd.png | Bin 27991 -> 0 bytes ...blocksize_q=64-blocksize_k=64-mode=fwd.csv | 6 - ...blocksize_q=64-blocksize_k=64-mode=fwd.png | Bin 27547 -> 0 bytes benchmarks/mha/triton/results.html | 154 --- benchmarks/triton-vs-jax-sdpa-cudnn/README.md | 37 + ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19215 bytes ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19123 bytes ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 14978 bytes ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 14976 bytes ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 21185 bytes ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18698 bytes ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 18505 bytes ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 20808 bytes ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 14980 bytes ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 14932 bytes ...1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 18886 bytes ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18570 bytes ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19170 bytes ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18715 bytes ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 14992 bytes ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 14909 bytes ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19089 bytes ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18788 bytes ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 20728 bytes ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19313 bytes ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 14957 bytes ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 14923 bytes ...2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 18559 bytes ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18623 bytes ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 18772 bytes ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18820 bytes ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 14915 bytes ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 14877 bytes ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19143 bytes ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18576 bytes ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19233 bytes ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19329 bytes ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 14951 bytes ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 14914 bytes ...4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 18552 bytes ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18657 bytes .../triton-vs-jax-sdpa-cudnn/results.html | 38 + benchmarks/triton-vs-jax-sdpa/README.md | 18 + ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19501 bytes ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19939 bytes ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19534 bytes ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...b=False-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19972 bytes ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 18931 bytes ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19330 bytes ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19635 bytes ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19917 bytes ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 20027 bytes ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 20527 bytes ...1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19537 bytes ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 19943 bytes ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19897 bytes ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv | 6 + ...ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18566 bytes ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv | 6 + ...-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 20558 bytes ...2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv | 6 + ...2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png | Bin 0 -> 19933 bytes ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv | 6 + ...-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png | Bin 0 -> 18650 bytes benchmarks/triton-vs-jax-sdpa/results.html | 0 jax_flash_attn2/__init__.py | 2 +- jax_flash_attn2/_custom_call_lib/lib.py | 157 ++- jax_flash_attn2/flash_attention.py | 342 +++-- jax_flash_attn2/triton_kernels/__init__.py | 5 +- jax_flash_attn2/triton_kernels/gqa_kernel.py | 352 ++--- jax_flash_attn2/triton_kernels/mha_kernel.py | 1214 ----------------- pyproject.toml | 2 +- tests/benchmark_gqa_triton.py | 82 +- tests/benchmark_gqa_triton_jax_cudnn.py | 103 ++ tests/benchmark_mha_triton.py | 126 -- 574 files changed, 960 insertions(+), 3526 deletions(-) delete mode 100644 benchmarks/mha/triton/README.md delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.png delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv delete mode 100644 benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png delete mode 100644 benchmarks/mha/triton/results.html create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/README.md create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa-cudnn/results.html create mode 100644 benchmarks/triton-vs-jax-sdpa/README.md create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv create mode 100644 benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png create mode 100644 benchmarks/triton-vs-jax-sdpa/results.html delete mode 100644 jax_flash_attn2/triton_kernels/mha_kernel.py create mode 100644 tests/benchmark_gqa_triton_jax_cudnn.py delete mode 100644 tests/benchmark_mha_triton.py diff --git a/benchmarks/mha/triton/README.md b/benchmarks/mha/triton/README.md deleted file mode 100644 index 61a17da..0000000 --- a/benchmarks/mha/triton/README.md +++ /dev/null @@ -1,180 +0,0 @@ -# GPU Attention Mechanism Benchmark - -This benchmark compares the performance between two attention implementations: -1. JAX Flash Attention 2 -2. JAX Scaled Dot-Product Attention (SDPA) via `jax.nn` - -## Methodology -The comparison focuses primarily on Multi-Head Attention (MHA) operations. Note that some backward pass benchmarks are omitted since Flash Attention consistently outperforms across all sizes and block configurations. - -## Error Codes and Limitations - -### Triton Implementation -- **100ms timeout**: Indicates suboptimal BlockSizes leading to CUDA shared memory overflow -- **300ms timeout**: Signals initialization failures in QKV matrices - -### JAX Implementation -- **100ms**: Represents attention computation failure (Out of Memory) -- **300ms**: Indicates function compilation failure - -## Notes -- Backward pass benchmarks are partially excluded due to Flash Attention's consistent superior performance -- All measurements were conducted under identical hardware conditions -- Results are reproducible under specified configurations -- JAX version `0.4.35`, Cuda version `12.6.0`, GPU `RTX 3090 TI` -- JAX SDPA `cuda` impl is not used in benchmark since it crashes, but it will out performe jax-flash-attn2 on context length 1024-8192 (in higher context length such 16384, 32768, etc it will out performe sdpa) -- -| SeqLen | Triton-BlockPtr | Triton-PtrBlock | Jax | -| ------ | --------------- | --------------- | ---------- | -| 1024 | 0.562107 | 0.552132 | 0.218609 | -| 2048 | 0.760125 | 0.698376 | 0.348787 | -| 4096 | 2.849574 | 2.852777 | 1.055904 | -| 6144 | 5.623363 | 5.650944 | 2.545720 | -| 8192 | 9.323959 | 9.507986 | 5.261074 | -| 16384 | 22.478506 | 22.182230 | 27.787031 | -| 32768 | 91.8167 | 108.67813 | 116.942947 | - -**Configuration**: batch_size=1, bias=True, headdim=64, num_heads=8, blocksize_q=64, blocksize_k=64, mode=fwd - -| SeqLen | Triton-BlockPtr | Triton-PtrBlock | Jax | -| ------ | --------------- | --------------- | ---------- | -| 1024 | 0.687853 | 0.682566 | 0.215825 | -| 2048 | 0.779105 | 0.785947 | 0.346689 | -| 4096 | 2.883334 | 2.884543 | 1.055062 | -| 6144 | 5.601369 | 5.609561 | 2.465016 | -| 8192 | 9.477486 | 9.546752 | 5.298415 | -| 16384 | 22.268587 | 22.416725 | 27.895563 | -| 32768 | 96.4800 | 96.4800 | 117.751999 | - -**Configuration**: batch_size=1, bias=True, headdim=64, num_heads=8, blocksize_q=64, blocksize_k=32, mode=fwd - -## Benchmark Code - -```python -import os - -import jax -import jaxlib -import triton -from jax import nn -from jax import numpy as jnp -from jax import random as jrnd - -from jax_flash_attn2 import get_cached_flash_attention - -benchmark_configs = [] -for mode in ["bwd", "fwd"]: - for batch_size in [1, 2, 4]: - for bias in [True, False]: - for headdim in [64, 128, 256]: - for num_heads in [8, 16, 32]: - for blocksize_q in [32, 64, 128]: - for blocksize_k in [32, 64, 128]: - benchmark_configs.append( - triton.testing.Benchmark( - x_names=["seqlen"], - x_vals=[1024, 2048, 4096, 6144, 8192], - line_arg="provider", - line_vals=["triton-block-ptr", "triton-ptr-block", "jax"], - line_names=["Triton-BlockPtr", "Triton-PtrBlock", "Jax"], - styles=[("green", "-"), ("blue", "-."), ("blue", ":")], - ylabel="MS", - plot_name=f"batch_size={batch_size}-bias={bias}-headdim={headdim}-num_heads={num_heads}-blocksize_q={blocksize_q}-blocksize_k={blocksize_k}-mode={mode}", - args={ - "BATCH": batch_size, - "H": num_heads, - "HEAD_DIM": headdim, - "mode": mode, - "BIAS": bias, - "blocksize_k": blocksize_k, - "blocksize_q": blocksize_q, - }, - ) - ) - - -@triton.testing.perf_report(benchmark_configs) -def mha_attention_benchmark( - seqlen, - H, - BATCH, - HEAD_DIM, - mode, - BIAS, - blocksize_k, - blocksize_q, - provider, -): - try: - q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) - query = jax.nn.initializers.normal(2)( - q_key, (BATCH, seqlen, H, HEAD_DIM), dtype=jnp.float16 - ) - key = jax.nn.initializers.normal(2)( - k_key, (BATCH, seqlen, H, HEAD_DIM), dtype=jnp.float16 - ) - value = jax.nn.initializers.normal(2)( - v_key, (BATCH, seqlen, H, HEAD_DIM), dtype=jnp.float16 - ) - bias = ( - jnp.where( - jrnd.randint(v_key, (BATCH, 1, seqlen, seqlen), 0, 4) > 2, - jnp.finfo(jnp.float16).min, - 0, - ) - if BIAS - else None - ) - if mode == "fwd": - if provider == "triton-block-ptr": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "1" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: flash_attn(query, key, value, bias) - elif provider == "triton-ptr-block": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "0" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: flash_attn(query, key, value, bias) - elif provider == "jax": - _fn = jax.jit(nn.dot_product_attention) - fn = lambda: _fn(query, key, value, bias).block_until_ready() - elif mode == "bwd": - if provider == "triton-block-ptr": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "1" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) - elif provider == "triton-ptr-block": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "0" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) - elif provider == "jax": - _fn = jax.jit(nn.dot_product_attention) - fn = lambda: jax.grad(lambda *x: _fn(*x).sum())( - query, key, value, bias - ).block_until_ready() - try: - ms = triton.testing.do_bench(fn) - except jaxlib.xla_extension.XlaRuntimeError: - ms = 100.0000 - return ms - except: # noqa - return 300.0000 - - -if __name__ == "__main__": - mha_attention_benchmark.run( - print_data=True, - save_path="jax-flash-attn2/benchmarks/mha/triton", - ) -``` \ No newline at end of file diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 9bb8727..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.239545,2.246270,0.534121 -2048.000000,2.802878,2.830848,1.863625 -4096.000000,4.071296,4.052608,6.983003 -6144.000000,0.001365,0.002048,15.470117 -8192.000000,0.001536,0.001024,27.271233 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 4e4dd86a617612cb9f1db785b3de2dcc98acdae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24305 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 MwA!ik6NcCS19`?0^#A|> diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 640d124..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.340694,0.356367,0.536380 -2048.000000,0.584720,0.620229,1.750588 -4096.000000,0.858617,0.737234,7.104455 -6144.000000,2.303791,1.034298,15.551141 -8192.000000,6.617468,4.754402,27.075638 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index cf5fba89d71fe9bc30e91bbf523f919795360908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25331 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 0f85521..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.294859,0.237292,0.540099 -2048.000000,0.573222,0.623379,1.740166 -4096.000000,0.974636,0.909623,7.070757 -6144.000000,1.605129,1.223835,15.418086 -8192.000000,7.616804,7.978400,26.985130 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 76baf2ced011c4988274a26fcd32c23a6d6f02f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25311 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 KIMc}P{67GOXH$Ft diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 99c2748..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.243670,0.274491,0.537623 -2048.000000,0.521724,0.531087,1.777017 -4096.000000,0.917019,0.777973,7.014678 -6144.000000,2.103479,1.501221,15.532090 -8192.000000,3.026739,8.555988,27.294037 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index c208336218f010e5ecf0ab05cc08af680f865541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24518 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 IZ(Yv*8-d40E&u=k diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 1c19809..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.268690,0.324626,0.551810 -2048.000000,0.669807,0.695737,1.728888 -4096.000000,0.962905,0.993254,7.070817 -6144.000000,1.448015,1.474580,15.472186 -8192.000000,8.485195,6.763800,25.410240 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index babace80322bf642758a95c76d9e79b0efe4eec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26267 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 K$l7D|=f42aTy|an diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 5f5c26d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.250069,0.270965,0.536178 -2048.000000,0.588549,0.612682,1.740736 -4096.000000,0.851080,0.833411,6.838324 -6144.000000,2.407159,2.345758,15.523211 -8192.000000,4.450627,1.349848,27.101526 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index a80bac21f216b38883293301484eba1a42c52118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24495 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 5de6c6d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.728468,1.726268,0.949476 -2048.000000,3.036570,3.023552,3.590443 -4096.000000,1.823232,1.859328,13.816150 -6144.000000,0.410624,0.001536,30.873941 -8192.000000,0.202752,0.325632,54.324223 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index d53c0f525b8807d87091dbdeb51118d1852dfbd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23837 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%0Dd_F`Q$VrzN3L#?IdPXIDA%r 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%0D<9-{yvT_RlI z@+Ue21@`*RUIsD8J2H0QP|rKoYE9HNOMHp-O{L6E%?4f2WwQB_&O$3#!h#%MsbRin2A2rZguUq4K(HMNTKn7Mny5X>8X6kn{m|Fn zaRHF5GTl0IB?0UF3aB7yY^cp?kx}LBKM(ah+6P-H^7d0j{(eM;0!0B~MMTB|UMraJ zzFewY%lHl(9H4emIv&VIMcV-Ul7S`F*tpG#<&42WEKrD{nt^i?=*Tg=VL1@{sR5d9 zbyPyah<|!3%iO)iRR;B+iDi>Neq6$Axqvigw_$pKM~7E1X6ifW!OO-WT5ABp$7?$2 zVRh-!IP7BMAG8Hb($mm};b}+_W2Rdim4>g(v;55f*Am(bl$^aVC=bC~+_Az~)A`OUN={DmIUl4)ZmN8q421ZR2A6N}T`Mp>c6;v9Jq z1n*@IX$3^kAR+j5MjDvHa3YcLkK{ANiVB5k+;G!Yg1i=0auh+Yg0@vH|HnsN7%qnH zj4`oLfCjJnuKxaG$jIgS0&#yI(Yc=H7z^HZuvXwJP0w8^c>C)mL?*(1?9#3CQ%xpsR*YNTL96gah*T^{_mss|NhG?Y-$vHxkR_7MlOD2hIH((-XYpS^Q->> DGc|cg diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 41d2377..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.644100,2.571638,0.952658 -2048.000000,2.912882,2.799400,3.602687 -4096.000000,2.237235,2.543002,14.042287 -6144.000000,0.001536,0.223232,30.807169 -8192.000000,0.314368,0.294912,55.842976 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 5ce20bfac4c9d534513434cff7c7d1ae7bba5a89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23511 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�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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 626cca0..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.420492,0.410696,0.946157 -2048.000000,0.573895,0.620707,3.593755 -4096.000000,6.201218,5.305306,13.291168 -6144.000000,13.638240,13.751891,30.975113 -8192.000000,22.504395,22.605482,54.190079 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 6a620628d499ea70768f3aee1d71603348ee0fc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26946 zcmeFZWmJ`I6gGGOkrojtDMb*FRHUQ~R1gFNlrE9(?h*+>K|rKSMU-whbP7nfba&?= z4lw)he)G+&Su?Zd&&;o3EtcBc5KG^&4;#0&6KXI|PDM5A%!lOCrq#fiTXImVBt}9KSZ^ zltZ8eoMNaa{JLcPgFGU02DA%ZZM zQ{z5>cgd)}|Nj^Ne_=4v45H@FRY#F$p$w_IweS9!3uLrnHg83j`l7V7^i>{hIzhp~ zRU#!s1ulGsMO1Wj`7Z3&>@7NR_vkAu&sDYjS*{|i9@f6Y#oFOfc<{ixu^;xac~44K zmKi?1&vp3w#b%)ruuTNPnQB)eiEyyre|>Y1HyagoTNzMU`OOAG>^I}SXZR)sm#4Ur2&WVYn;Ucr0dQyqmzk}7W+Lf-trrX=w-!zf773l5O zA8BbK%a;fV^9!Fs09nLdV7k;4LT~3TuK$Nv+kNZF8-0Cxi__E7kWP~N>o;%WczK=}a|T%-I;p*Fv4y?jIbmR!8l^XG&_l$^SgH9pR+u6J!` zn^!zT!600F5TC-2#Js03U%R&KeBt87Hw8ms@) zNISJEci~X6eQE*%f~dXBuiRR(D%vi73}UXAFJG=9mlw5ZH=`mWL#i!fwLS6Iv%bNF zqVn6{*)6v)yBtD&=bh8IOTb-&zY4z;Zak~Ou@iD0%+_MQb?dIpv?PL%io5M_XThXD zo#N%om*)R+eZbV42Q#63#$DHMy@;K4KFK#|#U~=tAIdja9VrQwOSu0MJmqMA%}uMw z;O*PZwUP;Jg^br(9EtiRBlJ^NjX@N!*?iWM5AHiG&z63LyZ2^mi9G#ut+8anQ^wTv zHf&hw^l|0hfJO!Ua%xvZm#>$tq!%3?9oa7Tv0uAqT!Y8x{yEEOuZN)zvv?{U_pt8o z&vXX)g98IciE(Q*?Qg7MpX%FrmF|u<+g;tfZLKlBG8d)u^GPtJis<~tMkwqXJ3IS( zfB*Z#)ra%6;Smvs`y*ED3N@Mfqop>Y2a~=Phx2jo-@iv-%<|_GZ9sXs2nEOMA1~qr zIJL@lW3hN|+^8i>=GLwVOiN=;@;VhZX#H9_eJB&f&2sCOe`%>uU41>)0o?SrVk#l6 zfO)dzSXssXu$k!5;`fT(9+{BAS2@}z`6$=Z!-W`8m%C7olAlN3RzbV^>*d-nDN=H& zH%!+0Zf$S>9VkDNhwq(RN=vF*-U|v8DpyL=oqTXGiBnn^Dvf+`6*1@E_giVfU#Gxq zkUL!^XC2=QK|(9gU|B*=OS^*a{VH9#c5H0SMov|g`p%s@h>Fvr70hplzKGNMg=EN% z=HnGK-b7T~o7HD0p`Is4WOQ_GzNF&Ljq30i^i!nCwsU{M1M}ei%L7@h16dkpMT1*o zP7`zJ!yWU{(lBr!O-FQEl4l(_bYbB=NI6<%_Q+}GSg*1e2^}&rqn(~Vo3rBz<0!iNhSOyP_b$J}%x7n9uIIIwiQz~ZGEGA|wxxEiP8;^GnpKUrB2 zTe7kDKI|-XiePu7zsj(-vnyYZDf1(u`e{8?H|UTJop+hudGsdtG{e032Q z;*iy-GcgqmTQ*MM69f*%Yu>zhpygZY{R9>ryJMI(3=-QV*oI zkW`td?Li$co2f_Z^2ArjT4er&24razByynVL~$P=vmoGQ{0J$2DWzS4AT#Jse+A_x z&$ydOE=l~wSee7pzr366vHY0mDnajEAtxswBD%@R`4Mcm1*X~FZsp-K?fb=%XjL#2 z&1ZB8?llds|AZ&_!mi{`!)GYefm}#*i{>|@v|H#%g?w?(V))D6%An5H$u)k{2Jpkf z4X?A-CPpuJEq+1cE^lz-?%ztRL6ls7HLNNfW~jKCrkM>p{U7>Hu9r`3>Sbiu&R(cw= zs%w3C+arbnqv7BEiGAGGeVU~*IKpI?vA$^BHEg2>gX=laAeR%}*7X*5P9vuw4>}TZ;{a`mebkYn15X4}Nez5w+YO9KhhpHfYMNRaW@D3LBRY zQaqPod#r=f9;VWb>>V8)K_F3xpP_f?(zPWUgip5c?pYFB3_p1Dt-rrH(imTrE`(lW z{=oguN1BR*>EMPxf9?;XPfqBQX#F2PeR>g!{m^jMCiq2fiIooQj|*zdX{qlwxznf( z9?7+PrRyju85uiw23lH~2M-Vsk#EN0i|RaI3N@bGpT$mOlqM}?aPJ63PSp8wTsu54AH*PmxVX4%%-zNMAfH&eI6)$#+dsTUKjR4=fr_oMP-4&Upe`J zFIVj*By}dts;zvm1yyGHKmNZ61jhDUoSi3^mZYJ$e}DR^?2Q=UZ3oTP@{KAP$O&6p zTP*`41cp2d-<|{u0W8{E?k`^+T-LHps>FrsyNF)bqcD?nS0* z>LF;Nv^6X`3}8j&zRFbXwh|z%zWwCE)(lcHuKMhggkfig>&fbn zp~lL<&_s#-Qmc+rc_kp$LgVgt;Ax7b)>B@ZQ4+An&TeiZu9qq+Dx&W@+-_-UaX(%w zQO;72{P`m8uH~rEE&0UwwayCI&5yK#Awd)z+ch|(UGSzkit02DKq5W~dNGCP zP+ugbC)`_ps2LBwvS&Svz*m6S#e}DGrY5q-25_GqcyOp%fnna8M#2yVG0f7qG6lRK z-*=Ey8v zZN_&xB|^d6(BojRR>jsI+Cr1w`JXv+fCKec2C~e@$|8BH(cw^b5}=rC?hQlz%-_3w z5f4u(S`S(zjEbZIU@(NNnlA_-RXu8%IV4<0PrhTd!Eo`t%Pe#WXF{_4J@n; z$81dPhaPxtPI5&$Xc3OC-{3Z@)^ZP78p;R75d1 z=;`fME3r)Yz6Pih^0p!pSRJODH_sf{%FT!JIW>wu3fs-|I&V&Dq^n3WmuTLX&vCX{ z9B407pZz0bfyh+JVTic(VtOIT%dqY}K|^C>cd3njczAeVXlPSwYioCF1UobH`-6jn zj4C7O;68l#FvJk9_5U0df%U^z_Rw+At6XMe?1Xrz1-nE8$_7|eIgNx4ISu}6cWopJ z8oce}jq2Vk4Z-!&nM+M(PebTh{7Go3d36yZ#TNRg^)cCKUZ3jIBaRWbF_(n|%+qaD zpJ@|44wgzp9dB4KBv`kMy$TP72Lq4gCzU|+0*)*+?GJ*=V!gkrX4nz$(z^j|y(%^i z4t?n6=H`fMp55X|2@l0>u5zh=fuugQu+W6bfF4Kp999NW^_xQOnGJljnfarp z*jfEsAq87cPwxwdN(h)Oku}LZJXGTJAbmkTUMLLHSwk|pOhMtNN6o34TXW}!2NWd? zP{!;vbWhyhzI_8&C0DH7CR4o+QB?=A=6tl2W_4QkMAG&jM^1DJL*;&Ke`IreE{(sQ zs+OeXZ;cXe@XIv7bC`wj8Fjo}!R36Fe)Vy{B?HI^D()VzInYLhEWi%E4+x0({P_X= z6x&7o@8DAs9g@N3#Zfs6lS{21(dNWiT`6x0i3kLk$oxGw`Hevgz+zYIPRFxzpoox? z6L8uGY9piFuppbEMVQdrHU@Z@t**zUYFhq)L-Sb^c~J)zgWSj2jMMJtQ1XH|Yts8J z1-tni*VFho>}1W}PKh&FDB}2pgiHW<@EDxEPmWO{Azo1IAnz4Gj(RrYjfL||HIIpk zoBr`-vM|vcy~qEm8P_WZm!C7Iu_M$c(JnhSCMZ|a^r5fewsUqoTE6UD?dCFarzktC z%7GnXM)CMhw1WB21%tJX2eaw-tE;7;b16MLJzg3v;#gW*Y6Gx?DGuyPKLH3i9TS3S z>F#)m(+P*~X-br7`C=#IqEFhJbi53TDo=`s1dJ8-?Sd)zMo8)Zn$k*)n;$O}qI*)? z_qEC`b+Vx3Cwm<4W1WofXnvDviB?jZuWrGH?WnT(vOH<0YU zaA|xcyZKaAISZ(Yz@F3;S(;xeq;++$akdeT*m*TbyZI)W@}VRTO8-l^p#S_9lHv71Nd3s}81#pe%%pS*Drxr~ml*(@gwbv%K`UJ)BLLi^LuHIqU0h-;#>Z8}Q9WMK ziHU|I5>)dQJ;;*j|ML6x#Mx;Sfcuw_`a9xn8PSu zj7X#Str+R0fk&O$Qexh=ui(isZURmdpPS2j3G6(yX$gegSh7M z#o)gA@V?`!@yj_TCR-ME_RX%xxq3Kli6mSa>RMr{PvCAe6$tH;>K=FQA zWcmtn^`8-|>V&n?v_#h+c%aRrl^h&}EOmYi-bi%cmJV4Ac>`X^!qrY^v%SeXcuYQM zz(<_5=TY!~+4Uv450rRLc%WWpYYGGTW8}bYi+gyu@ikDDho8c6!ynT|<#iN!dX*DG zOHm)gXLJDMj4JSOkT6Ti=pcY!?60*RjkdNH)h9(?MKq=WQr%q{3*%T*G0D)*te2=?RCwb}^zN3Lc4 z{ZiVgi0H?Fov{G2zH5vOENDTCL>@ZHO3o^_MuD?$_R6b`d#jfXtE3sMS;;*x@;X8d=2yCVh-Mx(7#QAa?w=q~l>(lHjLT_QV-3@~Q z`Ne8oTUuOPT;Ws84}ou=%L_UkAnfV_nu~yvz8=^96w*AV?cw5TU$$)^08j;$Op+Uz zWnQBYWVIEhYmxFyMnn@q8sC%Akd(A-_^rfi_)&PrX@GNaWNn7^ZfSbwtJg@l zQ&ru>2t8g4&w1Y3MlSca2Q=^X+~tJ~dDxcZ^{Dq}u2oWhq?G5mcoW`9Oo!k4^Sz=X?KH5s$!8&i_7v!&CXza_5$<$S*t) zcbG%t?$m3pbdJ#Oulj_uWMxZji<}DqqS+Q2i(OdDeJ>9pMjm7GFLUV5mQM^H|I}kk z#xYFZ4#!*jhegh6DCT6Rg!nS@?7UBRY5T3zRmM*zZl1j}SYFak@uA>6`%5t>mGbT` z<5Jv?MxA{awLJF+myhiid8&zN1s_@G_V)+!DPpLD7MxYbzz_im!);VaHiOOo_+*XO zDb84V9O>EyhwzK@<&gf;rmv_-e#Ozg9~qyfRs&{od9cvYm77B8`gJtryb1-Ij}b0( z7>KDHM2rF#z{K>%CqX2|M5%OvLCB?N*|eemT-s8Fgl_GGCoj*YP=k4K@%&<kg4?uSKRC)~p1uPuirz~X4yyAkiRrnF;uot-U-=c9H%aLgtT28ga7Oz!qW_Pe) zPtsad__Q19L$M7ho}GPr@e-YswKXqv5B7^)J~K_B8Y({m1BHqTjM~+zS>KFxF&#qs(EiPI!`L(dCFIyrgUUm>m95KM)NgkuBtUW zm!n5?CWt(PPUdhrn1@aI*XQqIKnDS5AA}lr3xz&SvE0!DG==8n{tUHp$1Fbz@R$PW z=YNkX6mFEBd9Ij}waoTmSp(@0*vcQi)yQn3(1hH?#AIj~*j=fXa29Bw+FwoZu(0?w zG&Go#Le0uhD%9dmn`42T1?aa4-q!-!G*N4{F*~NwI>eVkbkIT8N|DAu9Dde>~4rS zezT{tvcwuCmJXuJeZL=rZRwNTTwO7Ry~zwD9gGG7vI6C6ZirDe)7yoXBv#c~H*{J? z;`8xGrxw04>m5SDUOAx|8SgAskI(dS87pbUbwg~M`t1^9G-{3{Y;Eg4Ld{S zahjY${tpNp%^0x6%GT-e#?1Wu(|}9#Qqs~X0JPn=TUcL5fyi~Jy3lc%k(7etHd=bz zkdN3waU!#!K@woPw3O6!5SNy1F@oUzMN~<|_<77~7fLKnaLLCXxFDx+;@Mi=wHFC&UvH@PBv1tJDiStY8)RwKTUPRphn9F z{pqYbLXRlFmzfTlPd59xq-@I%pX-RsX#54iH z%!5dSPYMY$?7#Fhdo75hR_zC=(q=1s=|m)0T4rPLQ5Y3K_>NqiP zOUut+E>u;$R$&e=#}tW%xk7USnXeC2qmhF-ff?uGeUvWsymd}e(qV;-zS#;{Uidm@ zBcpg-3x!)zi!U=c$np{~V!u$OQrhHBr{2nI)v`W#w9K>{x*%M-*4E~_@^h*p#>$}_ z2JW2$bh%c`&Z7!h8tQw^W$KdKS1<*_=D8c{(cW^dOF@5R;H((NveRD@y%>tE0*n&x z7$JhCD9?+8oJkKen=-z(mzGAw2Xw^wSEqU-4wgAGGA_5oozuc{wY(TL=+q5X*K&OR zWbCp@my+DE6GZA6y;QY6Nsa$JUmhW;1TnCJ{H70nD`H~4gdJmArOi!m0`ko4N6cPb zmvbRUYpe{`(^?tFP=(Q^Vp4falw86)0gK6;>Nc8coQtYjVN$2(1)?PiYVWS`FAXZ! zU0^A~&`&U4x1IISS9i~J6IB91@;_esv}^CYAtoi=V!G4SF3Th+d;Y;swZ2nJX({^8 zUZ5`{DKJI|w<XKAqzK2MrYS^AACov&qVKxJq(U0>d=M%8fQW9Yn5x#drQD_R0^0JlaXRB5yw@8?*BR2maQ(?u%}t}Js^~{EehVJs=5Ev{kWy8+?vrqo5cZVhv`&-`+N>sIMzSlwgTE8v2q-ynp&BGfTRmU&sNm``?fO(ED+D`b~;Jg^Hs$9|Jot{XZ&NhlD3uC?zFD z#iKgx=Ckn6pC_H^#NCAgavn%FAl>&U`ZDl3#f%(Sn6le{<4j5ntvSM~e`%EqBqk<; z6x?USDIo9_C=oIW3WxqdHz0w(Mz*+P=0rFYYF1A~T<&I2DM;ET^^W5R+0II-msq|4 zBq06#`5UN-AeO`fzXE!MRFb#{HGD77aJQ~s_pbHDBZnJ~@p;1>#~-mHwo#h^;aRf+ zfKq`gw!;W#U{qaq7i-~}@Ikl&XN22ye|tjoe?wBl%eaevyk;=Iu&`lO%x`IK@d8Ge zRuJQs>d&MkXP1d_mInj&R#G$sqeX|7gCu1^;d+BfzEbNg@l&)k1Uyy7P{nN7)95i8 zmsz}cLeVFUlcQV%qSD{x51Hk=C8QzebFDg3-@#6Q?I)wsqIf{w;h)Va= zUC5D`lDn|%8X5AdC^=#|WJ;^a%#8gy__kKes%41!S#`L`qfFCdRldU+izu|^A! zBs$kY+{~(P%Oc!i6k;e(KVZfMkcG$5ZVCv580`Z7xdRLv5yw@sFt1@GIVESat9JSq zM zI-w%D9V*I4bN~tvOaTZb=BVbq0~Z!a9L&;CaoY$AoV@{99E+Eo;CWOr=6T3me&X>0 zMg!#^0aH9fK*|XSdsVK=vScD`@19OD8*`3V#Tb=8!>K(lgZvilD2O2+@1?x66jtX52~gvCV| zVNY`8RJ?uL_F5^+1Cpn*Xh*yT-!Cls#X4<_86Sy&Q_|?EDhSi6QnvPr1{^ z%KZ(vZ^zVgXlHuM925#}y}i_2ag<)P7udWO2CMlY9l-_!A-~xGbEv~}2+AK;RX$CO z0hVKvD>=1>1&}|HTCj_&5XzA9ZgO*nG%>h+gw1&=WG83?3EQDDD5k(uN$G|d{dO0< z5R+~2b{q5Ot(hjf)qi(DrxXTU{mj`}C{%PCA9QZTP^bpD>LvdCX4mhlPsuk7&Bh?` zC)d_qK$cL;e@g%Z4nIJMAg1Q^hRG#6AQ>}S$;oU?S>>YZE7Rl*ipCtG{5_w% zNH+YYm$(!&lB<$MNGoXCtkOU+8{?NeHag0tmd^}!Y;gRPBrX9Ni~F^Mg}RiYq@|U6p_7Iy_-QKC7 z&U`P2p;sFSREyi<(Kn`_?;eYUzQBeSB)-6msx2CDlH6^j&~#uV23lx7h`DQhc4EDFS^4)H$OdotF?E*Jpd^lQY_u&^tLk*veSJn> z>jhJ|;CUa&YQM!~zfOGf>D!{i12*)BKxqsJmNOo@8!b#ODwblU!=^J1*@l@11Hfz^ zp(aSJs!1G{;iJuSm~V`4SngM-ynmHVSKMo!20&R@g$yPu3Hh)q!55Y}`h6q@$Qf3F zfxHa_l9Jx#A_qt3lt-YH_Bk$N?MlYV)FFM95!+f77^oTSDGLzdF^KC;A=a}}uQlHO zs7ngeWW*qW*~gV`kdta-_;T%k13r-Q#LxiYq#nCu@%M4h$3|d?1cRGq$-PbqSe{2G zJ(H|Se>G2O#l$4|+zG=X*f@%Oyaug$&CeHVYlL3YZQs-b_(P6q^HoRH{0rlr zJTa*<6*asw(xYX!KaTK*xUwv(X{PL8OxNP;xFN8ywbI+<&Tu(-leL4DouKN3a@_Nb z$!isb>)wVlw?OXRsqF8VRTtqfUQqbd=)dKl4_PIjJbZ+GmE$6*xG^|X$zYYoW_J^f z`=P@{s!kWIs>w)v{_3BvM~Xzxyw*%qY_24(C%%qaF2rolcC^SkFKTzJf@XQ}yq$or z9hQi%>uJ=c_7|DFRGU{inDihmyM@@QCu+DcKwayn3d-LqX-vz#CJVR9q1LSs!`L`yA{4)-Jo+d8Q+BUpeu8 zRC!d9Um4qpGZ|UlzoR`~eSc)=#^)RJiB(L8LoGY3hvqX2ACtzzc4sJrDu3KdbP!uo zE+Y43WNg!N8Z~hEz%7sQvo}r?Bru?1&b?g4cHtikLLa=l;$2*Sm}U2BWdt1)ig00Z62!7Xi9Bk zqYuS~z3;R4acM`T4Li(D-6l1Q79_>+BrOI7hA{>1v;yy+1lPz^)3Pw$AwHO+a$Y#O zO379FR={eivb6u~{iTFeQIAe_uJQP$b4Sf5q-Yzegv2UxJ#ZFpq4TkQA<}r~R8^;D zL{wql2z&k1|AyAak29@K#R^>;nUyaq=RV)cbW^YXB19*QrG!V(i{dke7VHdBEyc^D z-MS4s?G*H{L^7)W*|8Yu`TducnW&g)za%Kbzt>29)Go8ALaY zWT(46PNBQ(m`LhqVbC>`Tg@`OomX?FskV=Dcc5hfwmEpnQA(nTYR}K=>JNzF| zc}vE{nlE3j0zjqf1O>yc6ga7z>FMiCb!gFheewM4;ZfB7E^hAv&SA^M9W~D8>dQH8d)U>fytOLmeap z1UJORPlGo20CQm`#p1aEFx{#5zN4?Zs;XK+y^d^xoSt89jrCK`uVh?iUiL3R2P(Uv zahC{jfw&^nGb@%i_tfeOF{g=5YIuYu6XFtdPHQ721u#FS;hF?U{4SugrX8STFg#b0 zD47kDKUTTZWA$s9>X5fwpy2XaRwT$v$gr~45^Z92>I#uPdYk%=7-@#DmF`eG*gLqa z$U-ILfuOr*d|BdTmmH(vvOND{T^Qi+A08X~cc{RqU=N!?!ZW_Bi^J;G%-Y(gk`lxF zADa7-$l4#$n~UGOvJ+ryGWdvrCv--gD9^X=)#R3AX1AyT{$M(ph$S{DE3sVjz-ywH}&0fHT5*rCKDW>7;$1? zegWo@Qy|Dfj*oz{+S=QLhUl}n#}NkC!r-nfj79n4k>0v}d%4UI5gdq!7bST4()y?n zS@0~18)%U1)lEHWiE-UJBNOJt6SwHW8EoaVueMoKTceLrz5LrmXwj2Q?pK`ig{?K3 zSsZRKDY3iUPsB_0&J&d57y*lG|C;`$Oridhb5v<_ea7yihFx zfy3ZH1%7YZ1z4u(Y(tCOMK{Sp6wA@L42jB2qwZO=;Jsf^~tH@G*BF2 z@t?!7E8QO3-ffFDkUPp9x_Zj&G(;kja7_QEqa-zD`=aw(Iz;5{_k2H^w9B4(%3OcMA3U@}fQy@0v5>t1HIl%|hfbSvTE#dxC^+mhniXLsBPogYogE4<+% z9Y4JOc$p+cO_Gmf=dS~%{35X&mTLqj9)vLwdWG+VN3`pWmrTeTE(kD+ns%^MuIVDM zpI_{98*U;_7xd2eYgO0$Ju8S|F3#S}J!jLPtgCBV2o*QA5SvDa(D}%V-=UVc@##HZ zOo0ne__|H32$9O<@1w_yFDvm*wNGD1-9G$+Su;QS;3gnp$)|Ne6bcVYUP)iNLkx2x z=nIiQTe1b(g||`P{asj|onQN= z0pCt%!WXZdMW=6twZvENf&D%AO`E$;ByPb=0pkni+iJ#Lmy^^}m&SynZ@k3$rSRij ze`-)L25ul5My%?)zi$p`5PI3VQTx|!`?k^?nX;v!l;7+aIhLY04TvHQtTO_ZUVW$X z5%+l=#eRN%M{_(;3`RWW7al(3^{Psp3nW)9xg>rK7%^?7L)Xp`bBR3qWEIsW!%n6rL&U)`C9RWrOGyB0B4 ztDBq;I=NG6>{Xm@Q)In$_>JLNr-wu6`Hb`}$1@RZf~?{Uw`6&Zb`r%8QRdpHtH17l zn&#JcE}JXg%^r%oo^(A!hQbE(kWmH&wWT(jH8}H+XP*M#-SGO{k*Owdw`UB?ip}}L zvTU-=@tA1uH$02Ko%LhwW6O$9xG|-k+h9W*+H7s-T4HYo1~AZxqS93PMw{L^7j3(q zHlj{tYG_i)Rb2gZ+BM>2)4cSr1MJ&Y;0O%{%*+pfa@%IU%0+l`tO3u+TJA`5&ounc zQiS$fk{vnL!X+osu{?rGGfyeKi8?T=t=9R47cSO;CZ&}2sN4~#$iv!}2!&jQyS*jy z3-$do!U@|r2j!2)2=2KXvvwA)cKAA-{?gNKaWePUqkc^lrUNtfSAa8taXBok;q+(B zJa>spoypMX{KT|WpQxxJ2kCLg&Fl8g%#oFNJkw$oOkSxCIFk-#_s3!-?-WiU(*2YR zilvYyM<-dp^Vz%sz4>5fUUtHdsJ6GaVncpPKATyLesqjv;1u~4HSp1Br^9LL&5iK= z0CMf22pE?1rONGaK8zKAXKE7Y=_wRv9->c=v$CFT ze~nZqX)xzM{@XBidj_TjPy*ZL-OOX;AD?xmfd4qEy5lUh#4 zyw+M&Sb9dX6O@d(_+Lg&T{ugw6=TDn*aDA6{>m-wD>sw4162--emJfXdmAOQCRCmB zJYFXKwod<@D_eot3etL*`%2N^B$P=p^{LK&^j;LQ#O~dMA?C}JLbI_^)QXj)R!5Q+`Q97I z+`Z67BW@(;I<3d^AZ?lS&Ovr^?OqB z=Pakcs3uK1=CjcBezB5#zdY!V2FGMnYk47cv^aq)F;6(pQP|0peB}bp$2Lf>20EkD z2;!fe-i2SPsVw$IupGp{51(YX>{oG%D$e0mh!y_(-rNpdNtmeFg!sWKpYzTOJ1q%8 zK|cv20h@2Nv>ORVosM2~!2$u6f4EHP=o#dURKK70@oeds#}EM>|3V3K?NS|XLCMDA zOZ-dzWH+Ja+Ws9^a{Dk&*^M!ML8E4mx;mt9k~ym|B=QnE>s@2sEo&b}x@d(Xz|M2xGo z_=m=^Wnos=S8Q!uz(fs8OHJu;o8F(bt3%fFvab;r{HoF1{9L{zRYM&{Np&$lwS;wa z16-~z)9E=e%(YbEE)DMD-#EQ7KzV!m&F=SClD1k;{b}}12mJ%_3oH(-`Osp=nMFk{ zYk8c8R6JEEJhORamKj-xg6U7bI57pU%4HbaJyJtpd1T30U} z8s*GZ)=cp9%7Bpu+lPwb!e3Ta%)~baNUF{l>guzyWGuB5pI?a>?3}6Zlq)cLsdSJL zF{3)QooBz6(9nvLL8h#*f`XY_s9WLR|AY#bSh+2+P>cREFF&>va;GL-)IM`(=eqf+ z@tA6-d$pf4!G)D(gu&ll0x?>_)3tdj;XH?&zV}!*2K-Jr~CJL@Dt1_K@|eDGniPwj+@ll51}VY9!geOS zHzKCmNWA+_H@eW1c8T@xBjhXC2;*U)&(Vz^`m)zM%RjLyeruTE>3ORi=8ie)Vfpv- z4PHw+Vmf2b3w-#VsDvVimc0U6$JY$%(qI@v%d^Dy^iH+@r@19045tJY_fZ;UgP!lF zaf2g9TUOgC$QCepaFB(i5xux(;b}g2sp|9^M(nzU6fT!rXL8lJr}XCMW>XkZZmOX9 zFuu`Ex`lh$O3~Z~0gC924QNjS?J(x`;y1a1UXb85{W3IzXT4Fmxsasr>vL*qi$jnE zRp;(nZ%l>7-MCOo|Hq$n>sN9!ZoYNKx_tF*S4Pw))}(s@`%fBN0L?X5msw+l(EBd+ z7GNj0|J;lkOpq7rTpcUG#C|xAOs>vufW?^ZjG*hZHZb#l9B*q$EGwV5w}( zI?PWGaK=5T?%R9cdeK(g#K1SWwlX?2JUly*I?}7=s>=?>Z5!v0+c8;a$EiNWD|z)j zH!Yf=bC9ac{*JHC+At+0C(~DeO=0HaE=}=$d2UXx5xaYSiDIzP*&V#Z#SK9<=mKzz!|X*K6Qz2=AI&nB-d_2~!IbKMStJf- zRvAB@Sa7~#RZiVsD01;yJ8nn{Zn8QFcJ|t(IwKfu8LxGt@#r*8T-W(x(5l;X$?jqa zY>Sy4=s_^&2PgkJV9qqh8J$%!KK(sZe7aX&!T=6mU1d}7hMA7A`1ttN$RO2)AtM+G zutSB&rpnY$H+EGZ4GdcN<6nrkM#WXnCQ73ej_P~R3sGmee4eD*S0}@6hw`GjksnRb z*zD4{|MK!Vi>pf(@QL5Mtv@Vx2*jUkcwCdEQSuWw9~DtU>Whr-n^Is8i($ z&topo`_OP^6m#?usg^F4-O`LGrxz7#U&vCg4PcD52zN>~{E=_H@#vfWw-_ps&@UgW z2WO?(9xmbJ*g85q8~1GeGeh5geEf|eV7Y&?>X?%gbo6^LEHik8it3rWyJ$Pl(lp3m zKVX~{CVl49v3Oy`=1W^+mp9DW(B-_Eb&L`2)%-gbW7OtWQ!|>q7AkR_vkiR377km^ zck)YG1snbep^2|@9v0OtdAV$_Lx?^l&dX@Exqi4&w{*f2r+{h1kg3wu*&{prd4bbAa|m!Z-@tJ!}1aQznx zrNEF6^EELzA^Vp#C~ng+$c&z;Z#O-(dUibK6vyXMG?5R3Xi>!8f@ZVLVK4+cx+My7 z?dGO65sZ}Nle4y^j16R^yu4YECC|vWDYhRCodFM0a^D+4qjkHko2`U%QuT223OaH__B(W$=zL2}gD4#t zHF-V#@Oi^Yz~02*^a8b0lbLD%UAN==P6C4l(08eE(;(m=9X<((0Sxem)I>!`H~%N* zRu?sX7=6Ds(tccZdRk3V9}qXS@qslnOD4ZH*C=;7ltOk~AZEkKQ(n$7SA_=}fixcy#_pf!^h_NvETeI9hFu
4xA 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 CJ1Io~ diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index d08f14b..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.148229,1.220246,0.958392 -2048.000000,2.376216,2.197991,3.528061 -4096.000000,2.406570,2.420053,13.825354 -6144.000000,0.001536,0.001536,31.423487 -8192.000000,0.350208,0.385024,54.291454 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index e024ba8368497b510935e78bce338aa09bcedcc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23785 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

C-w@bHgj?eD4}qwgIa z3V83V#QiO{MGM&o(L?lJqcL=$@bmNY`S)8Pe-##yoQg{B&K+#`QCAuQ0s;hxIed@r zhLYa!*m%4&P@pCwgR1u4HE(~%L-kj;%Hsx&vCj=GEUdl)<8-5HFUN(R5BJK1ExH)) z+_`hT5B4NYM>-h+0l#Z@|J&9qPL$qd>C=wPKYzC7d;{y^9blho4m1MygP0IV0k}TXf<*Pv$fR#jB{#gD(FzSYKMIO*D-t@&?dC{De31OkBEm%C(vExMG$ zX1Qd*Xc|b?6WAOG)@PPJLmX`Ub!BSg& zhL+KbHv!BchhXzt{<*@gk~E`NYSM@Y@qqG}c#gj}PT}ri@o#q>+R9f zCyGGE<>cg!w%Yk3=>)?I3;E?EFFjbS@$~f6Twoz4Bg+KF0g*((?~N*uemABzReO5O zr>m>WZB&&296GJY4YE6{@W9Go;ZTR=f_e_u>)y$~SUv6SIe*g9S5|Dse0L3{PWGN6 znF0kw_ulf~y#4+8bkX%HOm<2Bw5qSTZB5N=bV2psk&t6G{0-}=vGA7A^6a_QRYQ|8 z^WsStF|12cJ|e;+4uRIX9gfNMjx#7ndi2*>KVRqM;`j5kWx9VT|UP@0*EsvS&H0<51{y{=_>%Avt z4rE3udCK*i`TL>_q)|uvLG7O)8LL=YUW1TxE@2dL2mp+QO^zdTxU;Gz8eR@mms_VW z0Ljh}oavg?pb%%1?H?a|B}g&utQJ?$iBj6pqbgmOo4;H3CJ5UzJ^XT?1&9d|UscS= zhygH_&CN~6?JWjMT3V&K&FO*D3{Y?>DJg_;kNO~){LR(9tEWeIxVxU2kr8w|5N~pR zz9oj`u1=X9BcRUXe+$1yd@!B;eqCl}+bQ=zqa-FK+KktvBBUVw^e7aVXvH5_{qN7} zfoF6Unl$b$W~S>@dkG4Ux=_BN6LgZCug7OL1!NoXoKMZwEe=sh7P?{9c5&x)F{tw$ zkA4y8n-h?6iw!-j8XO}YY(9G*L=VdFR6oRDpDD#cB%Fc&@%DG1q=3RV+}8|9nWZ{l z8=ve5aj2!;S5yqM4uAD3uOWQ25ib9%Kbs2H{FcpN%+ClKN^m?WOt|VjTolZF~J!sbsp(76I(q!$WaiRt**6Pg8HN z;gP&>Tg}Z;IAKaQ@#vCSg+288_3H++ctiQ_G)YmH1@&N~y1hM*=1AH`$=#8Mi#6?oaC0MsGbjl6=;$ch%)d!svG^*hme&N9PFYu#STI#4 zon|m-OC&iRpX^+;L*wjOz_zv-t#}Kh4{qm0S($qxD+}b*B~@rU8=bIO*oE}K|}^% zd2y^-T>A7#07xtD1ZavnyRu$@a6+0FaCB@q@u#DPu3x|AuDB*Eq~hrGpDZz8r)FO5 zmrLiN$Wl^{Zy0rNv`DZ2O@FoDQw+Z+u48!uOiYreyb) zxOA%NN^P)=jREDB-k}{AxogO*oC?hnJ`qDF_ zExD28vvF-YfK+Dow{fM?hyxCR zeyR9+RUAMMAt7Ndr!H7dbuZ32tXG3_$u+Qa71Vfm5ycaeZm-%h9{3s9BG>h7AH&Sz zs=SOQ8!m2%?FtKHYbjWo*#Tq!tAc`5m7`sdpCT{|5yVUq30wtLuVIrv(9>%JCFe1p z>b?iE2F+d$JFfiN){fufA z;f?(ZM9h8MH~!kgFFm=s0?pCP_76%}S)IiG<^{Ge^GRPYD^85_Abo{hDr1zkkJ)3( z*d4`x+8i*DJ{FtHjmfO__e8hG^4nYzVW1iqEnRJL?baHv@qHN`J-=Eu&JGebvsbCo zZIzRkH@|RInOfp1$ITord zr}phFEjEW3!T6{=Yw5MrtsNos(UEHP+K`CD1dx2oqh;gMj~3l&-$Bd*=}avgdwo^e zV<{^W+({uw)R6}mM;q8af-hclSRa?z`%h)bPKoy6aB^tY`uPGsN4Py$m+Wk8(?N}u zKYsi`fO*7q!0_MNXmax_`rZ<2ZG^#{o*eUJ8_3F@v=y2_c$$a4@L=CYwGjY=09`z| z>IU?zE1Zh!*+4!c!b7?xF!zI9A;;P+_2;x?D8->fK*b`)h5LvjKFmkaM;{7`{kW+o z3AeJQ`q?g?NF;lqW^sWP+_E2I2zc}64I!H!R^)WPF=otrJ$2*g+tZetZYzUJJm9dZ zqBkb_U9WQ+*^JF=<4DO$2243E^sv+%EOCMBrwEA_9MmvHDq4w44UL`4$JdSszT&G# zIiqdMzJZwo_tgT4#nx360!5Cu<`SS3)@4@Mj4g?R*6;eSBFFBp2#B2egoWRnr#hMO z5X0pLI5V#~Ak42FBMvy+(KUS4Cx0da9R>3A@7{UgnLdt30x)64cCOCK?I=t)Hv4_| zo3NC7#pWBBZgRTp+sqoGjM(|?V+wqQkH9!~ygFqU<@=?|m4c5#w5!y%(8+AyClHTg z%;?d~CEr`wFB>N>-@5fC_meP&p&Z$9l=k8rYfH?~Ob&m0`v7Rl_LAW_Nu@y2{ zg>*wULLWbU0tfkhMn=<;Qxl1Yw|CCGnyf1Mg(o{ltD{6WZfI$z&zN2VmQWxuKnpTEH9%f%V7kz97}&YceLL%;p2BW}t4{b7|4$&l((aCk&J zv#=E|o4k&8ga_$ap(-NRfPhE8VG4{6*0i%~R1<5ov>oYQ!mVFR_nLaoECZdHMlzET zk-Zs8xUkx%+eqO{u$3QNGG=_-y5ep<{b*#bLQ3k3X}D9qa?|6~7y0CWL%ciYJ5bd; zZs=Zrat!m4c0V)#Qk7LJSSNbsXtF7m_=h!KyQ`1%D-yLG<;; zh67SF7${)&-d!unSEQhD^cG4Mo!Xs>$jg_NNJZn<&9=v5=92CIfGJD3iatoO*>dy-Jj!)?#1&OCWyISSANGmIiK!dTKEJm&XFwKIO?9v=4;ViT0s}gqt^SDyphVExP&o`fhG-=lva)lg(Ij5}8;n>)hBKdAvQ!x(JB8dDl?xSm)3!aq(ne zhB@s}-6IJo}iyEoXKH|8%Ti=`3qViIDX1{EjG2Hpw=&gN^;33)upe&U9Qu zc23IkD8|XDhz}-r74LtCz^YY1%7`<>xaaCqMCYDXs%E?vyT@z@*M2zogEFf2QEqfJ z1cK%nT=}zz(|c{dI60n_KK%v;{pv_@a-Xu1zk6TYt@u$g2`g)Eo>Ip3vvD2$+S}|YV2-3SbG^#ifA?%q zYDq%pLUAhGO5jeHKAgdUzf%k2TwOFZPj0?!hS%A3a51HJ!NIc_LjS2Q1k{?Qc?_+_ z#`4_lTRTf&kV|Lqz*O+{d{tH5IP=jFGQ@*L2AJPX4;o`)<##f7usytyA#R`5PorHX zP;cJIJbEKKo}XH>9oBc{4DF)h(#d=epqv2=7a~Xlb2igV7N>r#Z7)`AFh|mWSqNA% zaY!*y^Mx2zzE`2o$)WhqOP!)1#&KH@k$=^(zwpfY!ltYkGDi{(0^JGKzC<*7hA+dm z&qlxc_FcoskC-?dF2u?X+jcn*mhDJdJWWS3zJNtTr!WjOZ2Romc3k3>N8i%Z8`4{E zAnP;r4yfK-=VYooGCMnGJpg53@6BzWd{Gtb#=02mbavH|KN(7MwqtfRLlQ8Ew#D=y z0IgS3Pd0Y&k~>q@YS2sJvQ`{tH(jP~K$pxrAq!P^VKKYCx!ZwF#`}&?4E_Z zhV`hQc*Yl4jl0jjLRKj!L$X|!CUN7DW%2E5FMjXReI42CD8%zt%zL2oY-gwXzzRVE zMJNlx0QH{E-QQbaD_@rytVS?~sU%!6&9B&Wg&;D=o8In@EF@Nh}F?I|W-s}+Q?y2?nrxUViZDIDm4_q5-@Vg}? zQptjHdLMC)Ng-R|6|_jdqE$AuYaW@*~DgBTU&yZuNaho zuW)b_|Cj6_@j2$jB_t>s7%+fWUQ(z5d8*Wwe#8OC)FQsjb@|H%heq#+7kMkB2qjh3 zFNK9M;N6>dCdonBP^ZL-N=iy9=wz{ID>gRP)Z9GH#T(2%D8K%gb9Qpd&T*ljD0_Oz zVbpbw)7antj9XmTG_V`R8O+w?(#q5OS!C7@wm$CN5MmP$>i*u||7#*N0j;&xX&zWM z9zw($z>!u6!O}hVU>@})BLmT6NP+tQ;AwCzV@1AtwY}hc9%MN&nGcyw>H9jyf;HsPWG!A+U@(anq zRLM8&bUuxGut)hV4V{Lw2g&tMrMo@Yb*-J9v(wSi=1{=zNS98Ji6IXmWo#S#_LP8# zh)qN!0c^CmloX#~HrQA*1#jQhe^GH*AU`_bx@GwU0?#QD{EFOMZYcFb+kiJ@vJbw8 zJII;Zc`JznXpB6tDo0go{f@z-`KVoBR0W}qK?Cc&(% zX`PEf!sEBrHyk^@KIr)x>nixNb^M_<_C&U3&caY}rnMhf@-EANUqMYY8KmJB&?JGU z&BR1p7b!Mv*yN!E?SQtOJNA*wSj!f~+UWUkS5{uWVvYvt^y_2Qh8S?}%%Jl@>kT_A zYh3^qIXNoc@XK>1R#(G3f&hqgs2<{|8yIxh*B)z4)>MHq25qFTnHCnN;3U@0Z0waK zy0!aPKQBi?Hd`JJ(KhnD3I*(W*uXR316{d%IRNa^o)RDEBDrP#x1)hjPFA8F$ik>Z zQBfP3m6e+dj#P&u!9f=R4UM?`2-mIJ{;LoDLgnvj!Rs)9x+t|4C+n2xy?c*GM06^t zp*R5$mytb0{K+k~Eg9;a&<{Zx`svPLeIPyoAz`*==yO*AOA1E|OUsRB`i+0RbH~1N zBf&Mb*1z*6>?&7Fd-cGB8_Suy2Z^+Iva!&Tl0p2qLX*p5@|?2rg;*;Mm}T&N!=j@z zp*N?mNL2}Tc$v5GzZJ_9gCgAF(vk{RiY(Oj}ij^emi5>Lhs5{k(ti*%7MXV}Jmv|z8 z?6+^W0K3l&yZawR%TPgy+(LC4L^ZlBKXX5UbFGdBnA4N`Ik~3=6P2ADZ(PgQR z0Bt;Cc2wLgl~bR6lGMdQ9$WEb2dpE2li+xxBEUZD#luSKZ4^}7_xJ+S!@`by<>X@0 z$(9F_qkVnz@)c!sA6a{$mRXOtT4rX5tsAwkpU?w zTcuq2>U)$F5A#G3??N-vSQ>IWDMJ9Q05ZE)^hoM1|B#vXLMw0LLnv?`Su3`)*Iwe_ zUzQm087avTooJjaEM=$2N=2BHMvG|b#zbIGDUZ##(OCWl2P+4{+%#GkMX`JpqpC}GRZz2*&EQoBovXRSaSjriJ=(}P4 zS7vu@?uWnh$$2FuE$u6;uCE}6D>C+$=6NbaH{5wPHga|f4FIz&oO}1`+KFt0oL$yA z(gUKS*H&0q{i6{Po;6F#6x7Za%8|xtpQEidsU~|O1r#GzZ*952Wb%&39BpeGGRuzm zh@Yd;PC|!EOY6|DNlsw`T4{>(>@JCXH_u(9dfP3%cR9s5%5^&|%p1YbEHfs5hWsCR zAtX4^o(1PnK*(dseWxPPDPfj+5Uovy2tAI~tK;ubu0myGfJ@Pnn^+?FGVD+Tk@!Eg zaswiGU-%xjp)a1uW{4pSUZ-_2NZ(%2eo@G;3IaGR6QTRxVn#`Uy9Hov9AS_NO}hi& zn-M}q)0iYUi+TBy-&YLKR67p%2y%CHE_;QZ`ejU#kEi8fvr(ua)`>>o(ea1xeGTz#g;YmC{Q=Sd&cA@>!I1CYzY{JaMOtXz14og7m^j0@)^BCBa^PdQ zToa?A*EM1$;%Eu%RW!oE!+zP~Oh8xJB~hm3ZN;G zJ`f-q`%rR5I#y7?WInns|AkWZ8`!?MmB>~r-tEV{q*sK zjNzc}|H!E)x=<=XnV6WMa&^AFfQAL=V=-6;3H^V&2RvC1WS44e(H%^6_O-!4%whVo zQWS`>9mP_SqA(F}d4SvMFjh=rA~?ciA3l7b`ui#}@``{!@t;-TCJ!Dxnn~*Z^((71 zNiM^#;=~J+&s6Pw_wjoq79Mr6c_H@2uL{>?pmhhjwia76zo4{R{$+4*@Orko>{9ke z)&zbmC+BuF9x;kcG8;Bd5O^+7=idZ_^BYvbpg(rSDjIqkpi{3gluTR4AJQMx3^gnA zpw}-3CSc$@IQvW7hO$cm$#ySVm;@9K!o&KgpaMwJ__*)ugN`J@i1pgjG`KKfd*xZl z2eA$EOaG^5knfTV{f^Kcsht2kchs9tR<1sb0z4~Lr-P9lhB|1o+uCelM*1?zFJ7Dx zE8x3w1=ru-|Nl_)*|K~EHJ@%xbrcrX+_c^3M6`5=_tDvy&^RJcpeiEn8BmVvZ|@!_ZB+Zt>t&iMV8{o*UlRhWyW<= z)4D3pS#mGCN2jz^PWHqfPu2Z(alMJkJPW3JUi#wZlQdOa`5eU8&@>P+|cD zMm&QVk(Q93LpBo*31zN0=Lw7Q*}<+j6M_msr|YNnSK~R4UWR!i@+i90^rdJ| zSJ+ie#xpVk?#t?Qo$eertLvXq+n5yM>6Z91Pj4=m+Z4o$&5DECGOS?U6!ZQaEXTaVi{sD-KP2oBu>i8DAlWp@e%0gxiwK-g zFDvDR(98hq>)XiJ2QhDOAAWgLmg=29M6@vd)X)%g7?KRQ2Yv_)t`>Tif!q!Az(WT8 zK>1zWY+Vk>^d4Jo7tD%`&9SqXIKzp4iB z=g%9Hq5QsHp8C;D8*7zwoZ|tgWh*!;`x96~Q(Kdv4$FBxUnvZ{Z9VzMZOe4^;~^XH zz?SqVe0^cCy3)sQLS~@{Yptqys^ka?%heDXO?P>Wh+%y;Hwzy>ADUYx;?iEqXM|Pl zvh_y!?@i((WxV_MiJ>nO8pNs^oErH(W?~hP=N87t)8D+gSZXu$MCBVRby$Re!j|12 zDlu_(mCzqf&~1zJ*w0UjQOsoms=hfc`_OCG3H|IH^!8QtpzgnF7cfCv)<@{C4dJ57 z@{^OByJ~Q9yuMXBsIzxqt*AEeGa1Cst4{tX!C#H4xxmzqSgd$HhIAJQto4teNxP-5xVmrC*vLZCe^XutN!! z&|EBBabV_G9CZ9Ss(=vCiofCnG`b^QDA}`I8%*48iJK^SM#*VkNVZhNyKAG%dRmG9 zYreJ0dpPrGYilAabAtJl(;l-Mx?Ur&J`$Vo%+MBWaBojj6f~h+zJ5KtukVqzzN#uI zl&{&4{)%qQ|LCuH^7;61()bi4*zq1#IaR+o#{+M~Kton@krs;X;$^&1X{eD87zJ2x2$;MEm`=X%sL<|&^#Ogo~ zzf+bHy7YFYs=Cfs>s>%l62zZEiz!7k~9Wjx`n;5PBF|2e|`=RBLL~^ z@4Wz^QetSwEAfxqWsUgiRrBOdykhhE3Rff$o!kI&tyn^F#ys)03PPsspE6Quj)8P! z-Ev>dkV|A5NCH?-)mgcsk2f9{A4Aww);%Oq8NF=?J0Q6)t zNCxI2FXbZ)W z*xo`v$v1BkqiuzXEM{wx8R=~ z8W;13TpIrV4arln+0e7WWV@)Lct7Z1yK~?FxSiOaOw!aApqI5@DKy~c(^pKkV>!E@ z7|p`lHH=IZa-3ZY|3tF=dnL+e{cSe%0(eEm zP;cep0w~C01ZRGv>n>S6m3Cba!L03v4-kAk<=@QAAoBX){x#-l@h;NDcaM9p;o>Hk ztnb}shC6rym20up!*!Nx1n@LORi3Z+U~vn>h)MBTa4Fh?f^*f=qCVQ8uR0cb^X^?4 zKE6KaJ!ExmU)Hb?N!_SDy{&TzESXY6f60|Wtg4o~NrB~c6QH3ty zf_}LnY9`XfMX^4B6sOXEn%CciDN4W`2C zjfsq&-p^8w^q|Sc$vCw(v|gD|_ddF!L;{!;xD)FB;e81ZsyjA`iF2)^Pu*wBkDLaJ z&Rw8vA1E1`$gkwS_7D=kzV*bBNFI|S{{fm1CczRp4_`x_VjT4v?I1U-cYMi4r#}VAjN8@y>{)n zO7cXCa~m3p^-_l&#J;xZBwNGEq%w=;-;KlpEq1@CnT;`mNY6bqFgOj9GVtRVn0ycw z+Z~*Ul=AJ^7|7P#uc)bUI6byFp&JSwGBve`iA}w2=g5m{b~FsbYmt;1Hqu3Ju9h6{ z`_GpUDjVzgiML44smClw`1ep?FEiKk6W

?G(C6Y8+cE!IP;%{3KA>mIEN^%_yx0j(nd6&w5^LD;SGPOhL z-bLzM89bJ|m#ysS+fu4;Zij}3Br~BDRq>GCIlY2*LFKQ^&Zq!euH@H0DsULZ;~g5e z-JaZi@{%;N*~I-aE2~9|Im78IHVY^l{Ev+5R-D}JcbGR6I8Y-gaq8pg-TP&ZWn{f3 zuq(COCi!!h#?H)|iT941cB{A$qjmc=PLw|FV6-1Mnc(xl&icZ@UaXMmndnr7d0*%E ztEX+o9@{E0%viSOcNR#CZM84htUcWH%x~fFBuV!v-zty2M#SDQw&QS8OkUPxgLY%# z_L`YNiw#+i_A^B7yxyACFI=Qkq$Nuo=Ne!0ues(wwwPA!Xpf7#Ccxb7N%bx|D1s?i znLWu?*LGrio5S}&X>^F1RfyqO@_v9EC5t7YfotZ_yKz+7koz2((TU&+_bukro7i(T zqjA~8YFm!yIJq~Ed}C}(688zYoiOH-_|b3i4JzU;Is_ZwbS#eD0mo8z=^G(V{-?=8Vq zFbpH1*WY@wU;UWGQEA&U{uVa9(7mX=qK%KURApwu)ywB%~Fhh z4XO!r>&?5%`K|t&>_N+gg?a5o3mw^}hhOnGxch#d-kzCHrqNmJ%c@$PiZJ=j>M{Ll z>p^8GY2v_aqm>fzs?QkbR1v)wG&rI2Byf80XjSgJ9kpWU zyY0o4!GIoeMk{JZZP(4i%Is^XwBU*jEHOV6_|xVI7>oeU*tbfns-v4n-!nkCjjNcV zRdUDQ$qkp<{BdVA8CbhX`gUzb9V2|r^<9#h2S!_@2is2V1)hFK={ZW1-$AvxSHIW9 zB|M{l@IdI}N3ftzmyKuJ%j|+D9t->{e;N?G6mM)$cMv(6JK_?sT{~YSSe?KqZX2}i z6JOozb+br-GeH3B-3ZydB$;-kKzhOed0J<7Ay2X~=?TdW1zqA@)B6;Tjy+W``BwFC ze~W%&c}Y;ex3{2PtZ4X%rlvM08J_0;+R6N$R-i+<7@o|#pRjO6fGj(+<(v4C~cJ z+m9%Y)f~KG2!Fw5k~x-;7a4Sj_h&1G0m8_^PVI|>0)3a7n}cVxIvu`nbN6xwDLO*2 z^K0k$xS$-?2Di>JmY5Un&RTG^G|yD!xt~`Ickp?5Pl6*?h-=cRx?gLb5=609$-8~H zwX*Q?1e5;abLOQqYc96;e!L$hgJosKlx#@4C6--Y)ftquNifhc7pQZrW%lW|y&FwD zdRH1L|IY`rOR1Ff8hkRNqpX6ROY7^yGJ!HyS&ZTxL|p4* z(=)q~5+{SP-BE^DSB7UN>WribF-M#{B5wI{d=u?2%<5y@4}X8*JYRKT>j`J4T>#t2 z?N1Z(d+x2%>RosZZ1=*ViYUehL+2cyf49>}H+S3)3xBcUfKRHhpk%!~_$|rZsOgT8 z8=s!A-Tmd}S05~9muIM`3YT`ruWk6Ir~aT_X&t-0^nw4+J-@o&Rve+#N1_^DLC2NH zCiawsyLbNTeYL47k#vy8n#BLgoTzO2>B-a++kdADysJsFlr$F43TEyJoM)$_p` zuAJ2ilS>Q|PBE`4-HIHPm@NGnOwchi*m^}RZgPHGZJ%t|r`-YpW7Vt>o5?1b8x7ig|Nl8Kmh08AD zO}uQJ+|h;ntqFoD@9~C4q(tBH&g1_6;>b32cl!Kh1d264xlOolG+UB<(+1@IMu0;_ z+4)TGh_-=i*SO4jyHaxp%cEWOodzrN!Xk+WD_i36IzJ62>Nh=S!{;2MA;PCCc3d|X zI@x)*KVxV(v1;6I+|5T{Tj-0cU`|P4sA!XNyO>?-yDgJ!rq-m(vmul*GoVYX(-M{h zQUA7dSc&(*)=ckDpCca{jeO3>YuaNT;#F9!T_NO*;Ip3J|GA$#Sd~03#PIRT2H6&l zP;6{!{V>(-Twi+;IefMW#l0+HQ|GDkT_4fY?mfAV=K=69W~N6NJ3jSFp=teL`_bjA zu0*&OiVD?z&(#ke$qv-anP?ztFF41+>Lk&~KUlMl;u13Z=7ur(b0X5PLmVh6UM*TK z9P{GXjLY5N4ZwG>{XIKTKVtkB<=HBuw>J>e($NEBviAm7Vw zbVVpnp+(E&N=ej}TMJFgp5aIzs~B#FbwPErK)1wQb8~jY2YIV)G&$njT~fiFbn6BO zc#2SMy!G;#Ok5b=zvTz}Vscln=AujE1Z&qD3pPXZiGKK3wl(J;l?*<0i^HF}I2%)Z zPG|fj&N2&$&c^&ejyvjf!#7AaVL;x7!McaFKK|r*<(4hEvTXJF6(L5eciASF<}#KW zw8)~@u#W!qs?kb#@Y`2yA`jzDgQ;!`?UWgxKZD|OY@1*9Cx=SbRs?1!wm8sOcy0FZ z93Hwf{+o4XAdWY7>!^16RNw=3hDZBxt3P4?llU-5?fD+Emv*SS{Fu~#%_n-_K#^fv zsg6tdd4>>0ll+3cnWg|S=d~NiQ;02drs_Hd@+J>xgMWTj@K1WU>>M?rT@a*Uam_N> z#>Qa&uIVRiJ=cyeeY*GRV{g{%afVMl;rMw~UBe2#fr7!85o59Wdw`qgTcWh`heK)V z-peM!SIw?w9FIgAn;R*b=GeM0N<_fffM1%AO2+8L8bl~X_IT#eCA1~y_42S(zcy@6)!?H>^FS-BI!zUuC z`f?W*j3q;p+S@v0W>%*&U@l%32UY8u&CI-|xMZ+Gco&~cbf{=Z^??$t+)q`)h&E1M zAx>ULjYm@%Uk8XM* zqrFMFH}8fyxschkee-ts8c)eIcku(Qr8-@!%$4%TeJ3^E4nZrQVF1nZcYhuDp|<%> zVhXv8KW5|xHRQ^#B>tOL+8GYn*IW4UlcgUk23 zB&WwQORe4?eo8pcmFb&o+pcg9b`;n~RVvKq54`U?eS;o$ea2Vm++BqyDi}=?0FA0h zxeWZSo_?sr!;@1c(8u&vD)Z~tu#X>E2YggjRZ9l0u|5&39F@n&lRO*yiY5HzQE9X4 zy|#OUsg=q0V$7zU%|CHVs)8EFVpm#+>X&R^t`LiaJs`)EW4X9WU^31$SVkw5Qpm%x zGjV@O&h+)xddsGp$Acwqv;ObNzlQn~z6{i;$ux-FOZ~iZxGDjm$RVGFlZkoO{UD1* zK9NR*@se2!lXqY*5wW-jP2JrVL%;b((T&5m4%<9Ei@wD?d1O9Y{j{fPQd>2bdnIh`L!$4quI?1*oT{vXJ#VNk2RC*Ir zrRIH2TV>3UrtTDN$73ZR$ex(1W>Y!lu3A5dX$$u7V@t%W>stiUg zUv93D;_%rwrbr(Qwl5Fjs&p^Q>fC==wPG~$Q=zb6v?WNWBh#{lzyn>qS>*k#dXmON zoMCToaAW)1WAz$NJAoSFNzc^-^^|n2k}*S9e%v z4coX?F-pyCYv80_{5u}i`5>h8K{)&#h2N7+Yn(sVX5qIuU1VFKx2U5?ip#SxB58jP zNc(P#9kUM8o=vIffbyu*ruH>CM-1fp+6FYe^Aw%jn;6H5`RU;F0vuy|foF`#RjVf+LxBd! zmsaQ){o-4|eqZ%8sIq%yz?#luNz*0qX1nK#Xh5a=`WL9Da_bfa!FQ@?AHpNk-B7>Q z0lS=_J1ZBTUr6Zhr*0NVZg=bTA#Eo_BYd=GNs))X(l&Q2k z46}L^SvH!Sa{PQ{@Ip8YgxQ{6YRv7(hhgtvcyrrrV)<#y_yCbHv$&s>(cYogm!+ABw4 zCN$1@ezz5!5MtUp@C6W1iRXofL|LJoF#kb4SUjw2t)Flv0OFpnikAGtu5SPbvj=>UEH?;2g^V%qWZi9MhPy#h;I@-S8){RQ`_Aj0+d+ ze0|q$40}IVu3T_bQX+p9-uOCODa%%BmH0@s_)7sQN>8W04{Nm5v){z>dI%?Bd7$)Y zdssj~VUPOjyc;pXs%Y8(uWx{NM`qp3iBU9jsy%GYN69Hugb5~Q_yJ+e`3blLX3W~p zjzhV#{+8fJT#Lg{$|9$(#d#nvIZqTjgi1z+t>o`NK8rK$Khwz$S&rf8@=ZsXF@a(E zTEQ4NGUtgFzw7*VeE>LUn5AR#(RR;sXM8B6L-k;d%$hs*OSp%w+nxR;EzOCUY3b97 z;ngC-E5hyX-aHu+Du3m6$u`mqO1PD)R^j@yxD~xLI62qk?R9ppuRp(Hwzjq*fG`-U z7fmsbkU^S2&>^&|#Kf*Dr7R2Dk6QZYi`L%+IRbb40m0>AMcVCM8CzgDc3rgL zpZ4~>AT@-o3l~mup8{8s^z4Yo({xj=Rk&CUW|Mny`xl&wVCR#uytJN%3I5T()c)9>FC`9|2UF z2VZmU%RW}|me}QpL>0m8)A~{ML=B)>lWytb7~ccM+RgboI_}3+<9!0S)7WZdwc1=q zM<*G-wY;_B_cKPxfbdYEPAMM3@1wzAX{|AL@tgf{p!h*WNJIRYwdT8c5$#t(b#?U+ z{4K4`{+w&jZVH;S_p%{1(am+tH{(_g@4(olq5jE};Cyp{c~&4<01sptJNdy$3MH92 zp(6>0U%dEN7G47b#6*3J=fSL|f0=1C9e{BLH zgHx6=y3)9M;zhc-*SVs|ks}x~JR6IHFhIAnvr_=!h$cTkGN~$diyeRD{o-cQ^QxF= zsf;HNE8+F4cBh*>^zJClFY;>C7s3nul`tq=e2j0B{L@Tr8Z6#|b!8&=wJxPkA*0!x z3?z+SwOYmVSrR_!l9rmf@AW1%a2HxN&KNi{sj|tc&2Y>!A|lF(_C)vX+qVL=Uu>xL zq_FD*+(Q1~eo#qF;Ahz<=7lhT?KnnM ze)`1{$UYe$f+a%*+FJhR#@PeYnlcq}pzSb#e_G?(+o1HL_DU{8=Y2J#!f-O5rFVmTlyU{oL*Jn+zyrJq84hyB zB#3W2N<@2AtzRr!G=e}3g29qm+%8hZAb3Wgxb_6BfRcCc!6nFal2EFqb4IFo(`VGs zE@ouR{{FRrs%YHf33vjS4csjh!SRF{@|=E$Qnu8MzXJq4%qs&P&REpMb=_E#2QTat zU9DdgDcN1(X6Rywn?lSwJeFO#2ve{Qm6}*kU<{R$7YGE9unGngdWWDBCRCPP9NY0z zp0Y|c_Dmk2Av}d?8lK;uF&>3o{9Av2u8Z8d2BG#4@G0--H)f3VHG0)0&L>{jO0`PK z>YK<{g4baKN)$oobah@0XJK0rEM;5&lAfLjFI6Tz)E#L}lV&k%@QOmbB;p5GR{0%> zpYHjK=>&z6yEEIAP)z_y0RwJCqE@9Xvr8!Se!d)f)-aT$E<|Q8Aa#!#8ynvR9c?Z; zsLg`@^<}<`H4O6^U}S+}v(V9T61H1()w?cP%x2kV(u?r>F)-Ic-F6QQwd?~0>=qJs zU0t2C>kc;jdK!eef_pQ?V)w+=i8Kv0E+tALJ`qLnadvR{d(G?>weXeo?_UU@4M=eD zJy6>&wv8yPrKkEy$ApEy-QANl_Aa*o(LN1v6;`r++qOLrNF#cU^3;7Xn_FTteKTRt z+F2bE^9dOUIv*2?H2_CWfWY(XfFc^6iNl_r&ntqxz*8I?9(ISsuM*&ph{#CL+TOM* z<0_k)zTaQ!`zsV@vQc?-NQecPT-i;n_d|Vz%K~U1R?!OXE#=xAS zJn(=;AX(Ou(gVuVp({s`RLFW_K6GH|nt-g}-&C2SL*GltLrf-ChsGZF?w(Brs; za)cvFqeGhli_mdQI*5wJYiZ$xEajF~+=A395x42;T^0Kf&*dUC9eb;5XP+tnG@e=Y-dM?@aTE00@xW%B56 zzL^#l{pd|sz=i;NCd;c*?$3X>XO(P~wYAW>BIp(=CDTnfajHm#HY%JaE5) z%E*yqpq?C~B2OVxHnx=qW(@%+_(N>uDa4Wn~1`zwfL3YDQRhGgx^ASDfKla9?TU> zm)498^0i(2%ljpC)VO>1%t&b_WE*?u-Uhi6fRbben^v)Y`bfLiRbAj!Ok~ySSRq|D zQN>#TOLZaSl+!mbX=aBLaUNqbe%c_mEipOS0{tBuwhkJW!55{0KpuK@)tmtP^4k2x zi+u_3k>T&}A0O&iaL_MA-YEtj!;)rs^e}`sr1M)ad)SbK*WdL=<1yeKjd}aDGpH2%8%Ldipg7W;VJil<83B>p=x? zPVNfC2q{2#IfWuubt{Cnu&hWZ_H73I0J&llTJdsH?#jzI@R6?oyvZJFveVvIe&FoJ zYPqcL2=%dRl?!RfMVu*z^j`t%)~{ZBpnTrtXJNIIuG>C|=stDVe{{%o>mbuq_go2X zcnBR6x<+)u^^J`)yE4N&ucHwg8y`QPo?edz^x*4?>WSgck)~@K8&gnVQK;k5ieh0J z#ylVu3XY9=Xe6io*Y3{Z}s;wScumV0uHOv#SsT_s?61YZJU zg_V`RsGjI#;P`@1Kjo{BiQDxfPZ@F|P9k5L0jZ=PJH{k*GRpAqaQVBOT<@2+wTv9| z4*g!2B!U1cZafO$j-E3{+-nd}6RHi`^na7@MYvtgasq5bzDPB43WB@V%)M?Fn)RFk z#nRJsRJ;wL32qSsqak)L_%slcNNeFIft*} zvI&spHAjNZh1Tri%AFSnktd)FEEvQRG=-6f(iyAtL;o9A8?54j`AR@Mcrn}s7jZgO zp&uO`?c{u=elG|Jdsi7Q+7` dai^=bW{x6OVlcgvxZ{{>S#lsf7p_%^x$r6dHA4n;zwMM}y5K}1kcLK>u`K{^#d8j)@g5S5nhR6tTvx;r-A zaqh+Y%{RYu=A4=H*ZJ!>$)HPp2gxh*e=D|J03<8%4ek$xLXC?j(VQ$^Ci*2?r+Ov{RcYMZ+d-#l%cE+sZ2{F%Bv zlErmT68`u{VJ7>+pMd8mG7=IJYhHX$|OtVvG-pwPpLK@f}aHiEiEni zbRWek-Gebj`reL}ooSf}Tij98z2L~kN(Yt}r7|0X%F4=K(;EYgJOsD-_=K&eF2Gm4S!z87tUOmqLQPZQ_wYsj z@al(;AE)Q%jqHS{m|Wf5Hnz8Cx>6p#HZ+`?p4PW}%*d#S|NSW0_xs03_;IK5e!k5` z-GYAbu84<+o8H!~zYu%JM9+>Yij0b?W!SPtQ!j)SE*c?2{i-u8(A?zJt^cs)KDW`t zV6@ns9z1Yzv^Sqqv34uc*{Ci0d9t{NhexcSWygTFhb9NwgBQMb=$)CJl?tNfcRW3q zZ|Uf;@6{|eQ+r|xyEyRm{t-U851bZo$B%Y8c=JL~Yfa}dbj=7p<$(S>HPlf{PjT>H40pz@9|9C{j#Hd8< zR}2_#@bM`rRl#P4J|j*R`rzYpm;V0!`~S=YnwG0v_DC;ZuH75=P}rJl-`L$X+*#_o z$c3R0&GRmX&uDYCWc;pkt#XzsMr|;i$U;{NR&{mt1st5Mu7|{-pFdAIqDK-N;1v_{ z@_62Rc~J?NQL3q_MP&(l1o4~p&-|j$ZftK4S{*LY-Zmm)5SJUs(cIYEW98xb1dIRt z>C-cvq>GoxyS_+Wa&>k6_ACX{Vccy`Dr66KRjJr)5K}B=Y-|ixtXTBsr4IqsgADnE zXbBH-cIB*zcR2LdczHJ}6Z@K*Wwab8FRs;`xnp8sIW44oe}pmVqocg`Rt6s`Dw4wX;Uv2rY^Htv+FfRA zq^GC%FHaY%DTHCZ4u|3O{`w?b+pw|K8pX}Z!4Wvy8ntzVuIb5C;RZ*kPrmQPm01ji zGHj2%c(1^)ovSot)WYFIO$58j=Y)jzJl%$czRaj;4RS7x=23_7_EPKVXns@jn3x!j zSA`4jn_PDKRGi@N0ld4(;Llkp)2*GI+1~F;g(f{dCFAZD_t0-n>3fmQ2KU%nDd^Pd z7Y^_hN>$28c6I97E|ZeR$fHa*NS~DWzRw-?HSlRlpi0aG;r^{oiOzPxao0NY)6>)a z!^6*^q4$lAzooj(wZ)`mWbm2xbNmVCU3NS>*(=-X5OJD~P{GB+!${UBv#C5gJwn1R zL!Qo}=EOddOVhap6&)SDfctE|BcY+EC+xdYhGLcT&ZV`Qw~LDQEC23mXwXhhPNLdk z`2!AjmJ4(nuwNA#*FE8`YOLBDYqjkZo8K?{9YmAlkd=|>?B6MV6bKunSmSeqd@ zd;`3gpG>q-eS227y%foaUSBZ&< z={=4&Fo#>i*_5tD&pD(>+#n%Qi44OU9GqA+udZ$^6=7qdzR2Ny>-O!>kTM_xwzh<^ zw*2|?MIlLie}BI#S6jku`cBJcu}X%g@scLluV3@ij>%aw0I?> z*pDA8t4!Y|L#00>q`u=jRAhREj_&C%|Ep>RhJ^0!?#N;wuk=8MbKYLK4~5PN;w<;z zw4BWcXqxD zl~qzoY7*+@bML9ZZHFh4@$GZ%bJKM=0rMwZJ148R-V!6AkgOs;zLHHVmYvm}0%Tj?I1Xjv~%07OlZt*UHJv&Fz=KFuY>3zZ-V|uhUMp$!36kGSl z`5ccbru`22*zj>ORGREm7XQCTC{|amAIvMOTt8T(zgNa`g+(s;aTtqo)blK4Ga;m2 zB9&c{v~mO6b~J=#NeYC4R*G~<_k^yuyq zyV6&J_E>)XwUIKFm!1As+419Zb91?OmIsW$4W(W{$+dk|MNRK9qA_HC;+&Zodg(8- zjHRlP>@~W!O@XOB8|^|d3hqpAs2_T&watT>l!$TBV-yV925hZ z4s_;2g=H)HkYj`sn|}WWGc}jl&a39>U_A68NP*aUyYesp<{t_Y>$~Q|_5boeMO@5& zrKTCA;p>e0b^Xqr-VI!Q{CdLzVJ-A%MHJw}>a$Z9z$n2bC4!kMxm;Fwj_|^5@xo!2 zH7EUl1B&&2;iHh84k>tjXNOrxDEcG4vu}7fS(D5BZf_No(GT9VvsU7Jx{b1_q)60|_2Hd`P#-XVk$Y zCYAun?)g_aD%6#ARDVrvAy-B%v@4By7rltFgghpfD^D^;DbCCBSPdHsGz|!tQIaix-{^0s%nNFU&&a*$kMK%)!@<*)vgW-zFGf3Yn=Bnr@p&Gy1y zOx=529Cz;?`g=gl5W8bB@{i;cHB@XKFlxbV6{34`xC3wLP)T&@(lkUhN-kdLuXRmI zO^pN?+k7* z2@(^BV2XXHtE=nH(ToExLOF?fMs1FtokmGBxP>!6iM)C2C-Z%J-bj9TB=0%_m7X2H zjc|N1&gHh&cN9wpkLBcM!W6_O1GuY`AATf4A^idrnx7V6GcjElHqf#y{Z|IT`y5)CT7vZDf!z7@C@sC_m#4~rUr(CcVg=0qAk`P(m0xgh z^@{Cf5;nHO?RQ#LwGH3Hytk~D=xZUs5v20tW#*$KaW~qkM{xq?jO^?I;5EX#*-9Bi zKq+KtR_uOhYHe=5#>V!&cKS^?o9%4K@!3Ns$7pkp&Z`uMWm9vrvvy-u<^a(QhKtS9 z<|^2%A!(GBl|8SpUv0f>aj-f2{dua-^kgWSIPHNqK6sp0S6A28`yTJ5GDQU1932rx zd3;wd;Tjwq%<2^EtOI=O8x)kTRppGj^QQM(?F(TFz`J$;h&sT6t-d5Ta=vSkgid`* zFyB3#MfX12XBUeXKo!5~^9LNY-astDWAKM;YHG@Oyjl$Uw#KHW>Dk%Yh1r&?q@)jA zU5}+ggiX4c-oJlO8?wH>&L|$x&HDcu{%D7e+d8EJ-h7Z=XU`coBUs7 zVxl~BIZ(Iujb}~SBo8Z?8JVSI|Maz+=@vb4^QgejSj9N5fHJv@9#>FRrEHHAZ0hML zsC84z&(Eh7cZCLu@=_+kos^Mtcpg*K$m;K33F{flIoO{Lv7JwFK)T&vda*wMO#><_ zM4(A$xp~v~9Tv`Q=WXLZQQQhTI@fMI3cSX`^0iqS72xX|{-`zb{@&VUQcTlaw?Xk>x!(2}$TyUltz! zn|rB`K3TGGv88K3P}YBSLH)u<-cDKAZ75!k<7}ibJ#-D@ZHfy*>dpM26~V4KjomAE zJ?LgQZA?37{N^9a-5J=c+IY0T$O?d`{_B6AZmfIe@!%4Cc+;1a1AI#l5hg@*Xr{_n zg0>{$k3?*!yEo2}9|RegOj&y|RiHM)r!Uw{g2zo)~a1Njkbk5uh_K4dqe_NlY zCPQ(4ihU!#nOpZc#-!NbwT7d1g;*{pd#l+Kg|m6L+^YT;k3#6%p|e$k?#IHyV#IB4 z^xv6t7*GUB!xj}m;%^I`1v*g7xb2lmCVU~5HG zp=V9afsoVf+|{Ciw&KZ#OKa-iKM%U^TWJmBFhrYU;gF9A-tIOVFUVMbvpQBKGFom2 zp-6qlr2B({#7Q{xxp~mtHi?7#l0eHb9V$()J5l>i4p<#X#S~g3Kx8r5uXu)&{VVBQ z(YQR2g1Q-12%F%%xAwH?O&=}+0n_chJ&QZTU%aAF`|bH$+wuXOgvF`g*;#ahPhIl;i8U>& zaW9+s;*D+hc>x|e!{yB9dVmd z8ez_;*)M-0*rlzkc!2z1hJ4iUkvPf0Nl;ig=4h=VM4H~|1D9s`vvk?32)&WuF!nfv zUX0_1hNL9dOvyO(WbGIXI7HD{_Zs=3U+K^<8Qxf5uLUj)){tk?!$N(>xHdIJ{EumF zm9ow_G}4NIpMaOZz1QGF7$aoO2oB5Rae9z(bvD4aS?Z24DpR>maQxdw1{~myJSoj;Ti#eWphaZFMKviN@5x>l5wB@Ky&G6_~kd8XS9&+8h~f4e%=w`2pMPiT%Iv+-qLp|&`|&LvWC=gUq`b$=pw>~00p7$IN6b3hR3d0ht#ZJM?FeODt~U*Smt_Xv)xsXc_m+FJRgL^tvu$}jiBS~HN8sOUdv#-sbb@1=}Ms)-Kt zys|M29v?z)@V5tOh@GdxaK;Sz`yuq7;tBXo>(?ihRhZI4osq;V8#uR~%p@^7FAj?JFLDS> z2i_+o^+os=bTjK9&(LWlSFO5>wu`wPyR6_Je6ADyBBF=rnwX2zot1^FRg$07LRu%! ze1Z3>_`?n92YrO)VG4dscaNJHDppq7|E= zy~v1%#E82{<-ym!K3{gla{Eui1Btwg&Ab-=Sbr+ zQf8}GX2UEULZ7Z)VnP0r4d}!i1qR#iB_ZP7q?USO8AP6JY-|9fJ|f8!8e?e}Jw3)G z*G)Xj>H`+whmxVIM$o^u`++wgV>Q)$UtggxiL(#Ay_EymuVS`N{8Zb&V@*I0UwX1T zytrL*UHL!woq5j%xF_Iubf6XerTG=EO9^95(U-OjM}Jp>RV#k#ITd*gImB$NGKP>w zAijiCT$~=b#6OXo>d9hEOdp`v51{7*O#&LmrscG>vcGb=mhwx=m7DhmAdbw0kZ0;5jy{W92b=vBF$NB$=;_3cDr z?n=dI<#t@Ame@D-fpTX_uHS4}I#4eMfeVD)wi5+n8Bk})bQ$EHCsAB>$8u0nprd19 zVVV2Vw6nX*!o!nS`%qGnX+TNget}`0Q3$xUMy!$+CJ`IMZk zkX|en*vl)x+(75x>*tpO7C8qS=^Bcp9I7bk;M%$NrGv1~?QB>Rv;PC8y?*@~cmyLB zg+wzuHAo+_7qMgaj!)LTgy)lF9vkuzG~|{0cHd%S^Gi;?MtbFnov^B8qf~nOI|#Oy z%@JLDC1GO-I8vnT&;9uAX2F0$+MV;DD3e83>UZqy)!`&Bn<&PXu81MJ?!cSh1m84i z=w0NNk7O6WAdzNs(Z;5Bbkuci_F|{Fsks=V%EKs6NJm^fWwu=@UQUZDX?M;;qD-#9 zsNu&;!`yM^$Y2V#jdMb9=C;^6DqaYKm)FWK;-QqRD8kK!dgxHjT_cWb*I0X+R@if% z5S}=q#UQUWcNCYChSsN^C!zo$$IFjG1RAt6Zhrzt+|LjBc$Ary~(+Oz4;Y?pH(Ul@ndU-fl==H#(i0D&iOY2RXQr&esQ9)Q*+ec*Rvdb_-pW1hsQM%! z5o9gaCfwDymNkTeqZbwz5uX-C@3k8 zm3!!3Hpdx~Om@=zM5L-Tem~g17sYj%mY`$=s02o4FC-HS@y8J+deHB#yt``$z&-8t zGbHC_=u`4o(*Ij^GQZ0HN+m?*@wwP9KVLKeRdAuFiNK3d@zeR`3BI`N+aJg|+aQ4} zetLuftx8YXo|f?#?VJ8Wu*c`eh__9V6`O-RT{(d7!ANml9n;6wMy-0Dg4`G{YJ#jL z3AtUkvx&*v68+lR#Iou6hsbM&DstbY?$3I+Ih!I!g*d?hvLR_NWS{Uw*%rFda1Yip~+J4`IE!0wBwNWD>9dXa?- z6uJCKcTU3jZxOSEDgwV#IY0ZSE=cf|vcJst^9CoqK3@1)HZ_N;jvX^&`hSac^uf?} zyZHTko>>fXwfi}>Eh`#FSbaM2#BE*2W8Cz)e;h*?r%cU1G^2O!UB=cX8UMx+LT9{N+H2Dby zE^glWr-yIyBO0pB|y9ihiRc>uzJ;B)Z$e{JQ2GY+aqF{_^}o{VXb*KwKi}niDxc+%H|o`{ zPFgOj{D`muUG2eC0QbV*R2&p^wdnx&fiQ}MhF80P1JPRW@fmq}Lu+emzi?Eor*Q(I5fM^AUD6(b4EqtH=LvQ# z6tdf!qcQQ};V)*2Kz6Mc8&YWSk=*w5JCGDRY>-9Ay7TZ^ojr*u#3=C?_LKHHM01(3w2nIw@00I^yyW)G?Iu9OTrlh1$h$Vs!0CKyOW-){* zbnKSZ@3?C|q&&>dc_bNMjW<|Yt%8CAh`~$$$U&oB@*l;iQfHKO#xIKm?!WxyTv zHl}`!xNfzhDtG$Tf$aMW9(eoqZG@N#V^t_d+-Dw0pF&IG<^KCG!ol3l<7K^~p59Nl zaQ%GAUQ;?nIr81U#(eR;S9bQ}8T9taYU6oSx)NZ4nq)gau`|#vU}?E^osl^N$wL|i z{H7DXDB9=uMzBC&Q4fKN|KI2Ks}r+PDSA@g5~1DqkZhgv=N;CZ4zY*F){c_G`7f(U z`G_Y#tUFk%K;stzJsI%r+f9%{8Xppiz0jf4A|c7|;I6sX8rfALI5VRP8D8T%=@nEG zFz`U4%{o?rUttr`%79x^@);6bBInQnq(rU^WvOgr z*M4QeQOu}=7Ic|kFib!x=6nZTeZ-~hwiDrf)!$bpr$1Y_g;ceS^iM0H@(Pl?h4n+X4 zi;IiMv#m`|z;aAON39r!j$jNW`<4Qf!XRpc4)j1#=Gws(YixMLnEkLhNGCqzQPuo!9|W?>7wYO4K<_W*qp@D2KIGe~G&*TV2qibP^jv zEQVJfTT4qTcs0rWkgdd+-(d~3W=3k>fwpz46(mc?5RCnK?D6QFV3xLCQD=!8!46-olTeI%f& z2Wk|g>1h~PNwyrX4(HY$Tlxt%d?1U@p+zuS5toaFIdOK{ITS0Iwh$iuyq3Xr9Rp!) zT3C}_g9-sEM^Ax~0y(!<7X5wTFvDZ<2egUBoIU4;DXa-$BQYIaTzWtl0_P0a%N0-dX4Di z4^{OrU$P`pKHS$ZB?QXc$Mtn9Yy!$!c=_+oQr`C&`1uMY{8Od8+pE#N8Z0uAQvtwB z(qG*#26qT(5no?i*hYU)T^HQ7Jx=U+mF-MoWfUc4Gl?Ytz*9<$LAh#-SU9S(*u~kA0TYxb~}9$R#q5k=}OdH8#{og3RB7F*#>yf$DM>CV z1YFCOwS=YE7*O&(YAyG(ecUehYoLchFzzrDM%EzEa@XhCjtQ3!G6KI8t8x=NUg z?%hb&K;D3)$#Nro)#D?*%vNhz1mvX4$PebE7|e`@^kmm1C`T=XBe+X8W@9?VQrmVWSH>j5>Q({?x0(J}7Vgi^I|4Lf9e>*j zxWjO&WixMOXK{A5ERyB{fdFG1h7({9?O`)~4@GD5AvgbMmwpm^O#$0+6RF)89y5dB zE4Jf%W+S%mpDN+79bY|XEW&kIt-U|y_LKj*L4~SD$~g_dR(DGoSW@pK_xCsqg@D1>!xGHby9*O4w<1N1cKfgx zF>tdgf>UnvI9ceZSBkz-f0df~lgj5SVbv=b1i5hWVrX=$4=k`ibv{QhIof^434ULW(Habzwx{Mz&9 zFl75@}i9IB`19+j_3Zj%+`%om`LX{rFk(Gge32=Jwv) z7vn>iv;OB-elt}m*vmClvHe34`gty+XhZaHMA!bbm(r#UFLv|~-Ityk2VN(QJADn0 z)YOwTu0m9X>P5!jX=%-EC0|o5Av!+J%6`lw(csx)>puNUrIVzli1#wSr^1Z#8jWkb zAiar#r{zo2fN)c!u~iJ*UG)-K^NiB=sXz-1lbxoe2}N1Ve-|v-XqmazeVSz;Fl6)X zpDVwD_*%z8qPbOp$yGI@5^1_G8(4#kq`~tegO5p%PB#-J-|r>=#s~=L zHjQGRGS)<+mUqmbril#D=^A|!PG!>`RE`bVr4?oBnqSGTWK@OO0>D6oI+z$ifC@~& z0I_cN&aM0Z4)_01m5dK+#}1-?7Z)cyq|%6w$I7=LyrlBy1JnAm&YO|P#h8L|G-A|a z?Fyy}R?em_^yQ28-Vzkkg&0<|ex|GTk&uQi3h3==zMyLYChKyPPj(w4(8p>V0kEoKUJO{KEGUo0z|{>3Ecexrx#XT5Imtg7*^r zuQPqiO5cgNaCmAD`q`B$S1@jBSBs+lr_havPsr>%p(mhhAbfR^n z$*+F?geo#^u0(4@JS|C)iNo_K4tQ@_{1KPjvY$;uMVD#KirJ4JKUd3}QV<^& zjY9J!UT5aJxO8zcKb>6@l=CBfb<*dP_L)z@73)o;F=%}1)+ZZc1TE>IMZ0n9){oj< z5X`0*7h8}4F!TSd-$qYysYuGE^uG94b|skho%t}-$oRpb8>W8rw_`j;-_qHR8$XnN zgim;jf1*drGL%*&?!a>7k)$_1WY%=wo?R3XI6C5IFlrSEfz{;Z2F(ym=fWscW9>UE zDgf!A!6TE>BsU&izH-G@?FImX2M=^69~7|WMHu#cdJq}^xxvVkVry`cLUpg{F77v! zmK$DxoT2O+1c=g`& zmXtRtDvXcI)1m^rPBHyTBN;sI3~UqPdIr&?INL$GH~RV7Tr@RFq`o7G`hKueO__Sx zL(#h@5~5?)*HTWS286Gl$-(umFfN#uS7b@dss14QRWcqbjfWE3mB)yIyUHeb-#iG# zH*+9q@fF>`>Zt$P1=Fnwd`^fNN%>EjJFr7)+?5UwW2-z3{urm_YQ)(t+9x{OiX_Pq zF|KyT8m4l7#BcYQ^J^M$s#H-QF_RaOSCT~`7Y7Kr)0W$N-}lm~MHRG`3#dFFHP0w?`~Ufw44s_mKRt5{j=HVjg%*iMx&&G!RLF_ftqruC zQl*rLxR^1<#K(FiRn4Q&z+mIb7b5W7ISXyxs`f$ zQi?;AK6Rh5o;W(rs1b3k;5~g)rx{b2(;eHi<`h^V{_W#O^&7~=2#vNG6{Yn)Bguy~ z(NjgcsGOS3oK)VB$7p!K^>|p)o_-uJCA)Tu=*@?huYY5i8q@s!y+kTSiy)0tQYw?v zfrf@k*No6=8({&oc*FX}k!ne@_@n6_t0Vb8j*+@Ld&;8g+t#s?OSf~w&xu!$#U7lc zfsZUtL8h1W;`R_~JFBw#jAcsW^_LXY`GGPKy^c>TP5dR^QaFH}tW4Nf12&6xZ7id3iH^Go2plk%vL{=JJs6!luznYMC{8NKiXw{D zlb^$r+Gp=aE3V(f6+iA;@=s$DaT5r59#*_H%bM~!@z9i0YmcCQIQMnEl7UmQZCpUk zeQrfkq!>Q2vGp?PnP_3195e!ML-vQ}(Pv5lUGB{4oS@LL5wmTP#|0t-TOIqa3Nsx7 ziZ1$VApT}e<)hoNOhKwwZPA16eyZjrHsgxZNk5ZdhhAT6*wd33!AI@+AC<12s*W-A z`1|6QsB5G&7a`a_3MMh3N;!hEapvzYtqu{YmO&1vV6Bt(a-81MdlfPE`N7fY6x5>Q9P8JkZ>I9M!Q60nSj?(Jjc zWsv+GklJdQFu#NU_YK`tCGs>A^PvlPcrcAPx7^%Z*^>Cn?xaxQoir=0?tHgTmlIB* z=sn>i8v<$#@B0jf&u*+}Wj-Nevw;p{D!kajdpTDyDOZc|Y22$^{tyWpK0QPv|4)04~(?jkT_n`F@MKM-lJ#*th1uhr`yJlp9$4h$gQVB?kUSxg!#N|$mUW? zYwQA%!y4c1=z&?5@RT42a;?zo*OYR{uW^>Ke&_Ai?iuR8r8MZY*O^Hj3|w{*OI(Zn zBQ^5?Oq168s)inBthu*_%+{v@pyT;<{f3AacX6j~Gu>*lP(SV|Veu=0wI8+=sYl~- z!@dHsrD`(_uu(GK@91L_P+vGXtSdBm)!ly8EI_Q)0Wa)8r{Re9i7<9(?tL3=i?STn zFzHI^oz1>%uIFjJK=p?ze%F(-?X`5iJ2MlV>i+8hGV{R+$?vMSNLV+VNIdA}y@m6_ zu*=bb-eOfsb?_8%+NA}RufE~3CF4Xj$C#YzKlVDQ42)>x;>)8-#%-qC&_x)wDCy=F zt;*end(Qj|-cc1%MNZJUhV#gsFtNq?Nz3p61n+?rwleaN=#X_#F`E^N(C}L#gwvJrzMl<`NzNfp`E)mrHDkgO-u}r zX{2!1jcc`LaXc7n)im^uwcXt_x1g$&OZ4*^Op{d)?Odf2rb0PpCCKik&@5Ox^VuFn z6hX|L7nR70RRPuV-jxlPCANZWHNLIu>C&=>_}VM`@7ZWF^7!4^Y2RFevoG1!bPcZv zQk|Ow+Tt$h{|+xIe?bz3RHa{BH?S%zH(9Kz(c=HAhBZbX$|jAn+VdGSkQtgMNhv-e zr8NmM|3w;jl2E!=r|-J)?3+HUb68Cy%NK?CNZZ$^eB5aHgf}^J7+o2}+bek0)sc}b zD%YR`x7>Aam>~>Pb23gJ+&8-8o~eDqyfcV0x^>Gt9Ir=~laUz_rpPkK-QoOW`?Y8q zl$dBC44hdrZQv>iJ~bGcGhs?&LFtI}$IH@u{ghXB(ZsW&!U;WBYJHi?#H5VThU74U zol%N~|El=$WdIP={B6ZhUzhs$OH=RU)7ZP;UB410C}&t_d5Ko3^a870a{b|+uclJS zg*FrCwF=@yr{Bkcz+{6K6UxYEe7P-=u)@ABBPrG#IHHNV{(k1D`4>ZMhGq$M;Xz9O zJPd16#fDNP=ra?IMnfj!>no!Q6d3sSXFCROGBU>@?-CnMwza9fR^@s_y8dtn#>y&1FzZ8#fp$VCkk z3+H`C2GzpVQ%P9~h@LXNFqS$PU6LcnQq$i(b#jiiJ$T%*Bi+p)H+(0^Bre06W0n$S zAt1Q+%?{_`mygeyw#cVK%AVJCj(F6fw&*)j9=3O?NXCDJtv`mNch^{(XzMQVydmSz zwm4Oh6{yfPT6~u-Hz?$NkiXT!YlHgs;w!0FEa6nj9Pwl#Xp@SL^g-YDnAc0jj=Xa^^8EVbM1$5;k&(6Pw3|t3th!LfsMi;j7p(1vvuIGtsvz-#S$qBaqtNAUIyToEsPAc(jAXz))~`&Ol8CM zg5m3Ic<xqjNgLlF6kQ-AY!i)+Q6dJ`Gf)stJBIt4gR-wqy1Mh3lINs1>xSK$m7 z*F|X~`6tHqpf3~0LjFj>9Yi33hUSx!nysIMW{7xM0TXOI9^aL7G-8kjvWdZi*0Zq@ z`q2k)^aXnlCbSLc1piO$$d65_oIwVUT41{NwySoOwT>)n?zhJ-5#BQCh!<&SGv|x> zX^mf#aM=ELO#F) CLjg*YJ@cHp;On@ZG1&1y#zNrpuq-3($==LOF=3vK5&B z*@-cMp6xsdS~CLsQ~QuMDx5UN-*T z0}l_++N|OeBKz7HJ^6J^@j>SC+X)oy-EhH-VM4*$>5v9GhZ%1PHmVMTgy~jI?b}Wb zuLWpFCyXsszh8f-PLQt9Ab!CShwM1Ub}nrsjOG3VOgPy5G&XwpcM$vUDS&l0Ehxt# zmZ!0eaA?N}&f`ZFzWpv-B&|w$eCjf0JT{=n;+a6zAD@x%4e}F1{<`C%u&+TOkr{#p_m%b5yp~kGONE?qZQx zlXFp_Qonq`B_uRJ&dApSd)x@8f~ju5ZkF=s7#^mvd>YKc+#GrX1eLP)O(7Do=HlXW zH@hZupz4S=eGcI@-@5bFBKA*GiwCAo!*6qbOMRK`%NE(z>}wWl^Cue0_F&h7_~m|f;?T5QS}Ig*F)9nEKj3`74vghh?oS0E|6~9! zp&Z0E-3@OkS*!-n-0It2^*Ne`xePatBQE&p=1ooDBMDQ`rRMr@BH_J@HTa_cdgJSv ze`xex^bioC5kDJ=&pW8aDB$F1BRKNHp3Uw8Nva5rf50)$(74U)H;FEb#UR$h%(NG4 zlI!Q*-WT-F3)edm#h$<{`u^lchC4XP;l?5k^A5dj2;7M!2&${4G^>0|@uQ+~ z^1d0zqDaH`D$a zFf7BY<+8Hl5*y|13ox+u<%^U?_<7JhYouagzQ2b4icOg8=29Sildor}yzwp9GOhON zp+AE7PCIvkcd;X=d6=AW-Dq~0yN;%`xqL9rPPi*i@4`fkd$CUNHX#wV$JrNgaEX^t znwa6dhhb-DvH4{h)8Ng*!M4X9cGERG?h+>z`uI^j^YT~|i*t_=_a+tlU{A8z5m!H} zr{zK@VCE?}{vk?RVEBhJ=Z`;9l5)t+o(=w-JIuzzTi@#J%1?#n+9<)yMc|T$dh<+B z*n#y~Nbs(2GA_0tL!0MUEZmKnZH{3djBz)d0d32iDzkzZ+rw-v!qi7sH}HIYXJC{` z5%c(vo#WMoD=g8uZf?4VZ*4!1!}wE{+?3MPf#X(_YvJOJQ<>YWlLfld{nRD53x7Q; z?_IE|W7F8=BS1#tV~T@l+W%H{it1Y|_qMpg`BYM3m8&0) zu)O@J%Yg7_o=g(oSvDbW(=@ zZ35Nm5dwG9{%AO8&0|I>x*<8HLrg-F38k1UwNY|mjL!Yw;?&e8=6E>U+=-4}Q1*s8 z0{0MH-<$OU1(Z*UWok8nAN_;ruHR8^SuZo&CQ5A54~Cj>u!#jS-X54kW?6qo#ShK>WVI#Kgc|hfLAS|(e?Rfm`e#9+rjY^nq2SSF8 zadFWKU1c@(q3q|wvr|Kt)K=}w5AYuci+z+jB1a5DepXG1Ws8xvUTZ~fams@gN66HB zwv^i`U`cd#5JGjKDM+al#3`7_OZ!CWQzmcuw(wwRfC7{tjh>f1uBtb#Grv%P}*gFDS>K8?`BC~B_VMM`w@Ssd7N;pQA{ldtn%&v?o0L ze+EjIrnxn6$K6e_k6h6F+{-R5?4VjBS-dclAC9zdzb&;&+sml;wth6Ue7eDqQ)0 zh@db9<4Q5FM+rxeA=r-r0_A@hbl?6aT$eky$*wg#Re~h2(}EL;U^b0o(UXOqJYuBK z-^p5hNhc^kp6Eg}*Y*y8*N*emeaU#Q>Y6^Rn>H^KJ;o}>(b*+!MH=^&+{iKlR|rlk zj%wt_gkrRVkEe`tl~RZvrhc^Xm_Eui#*aF7KN~%El{lkau`kGe^HN4$AY%h2GO-~! zoYh(gqK}rkf5E>QQ&4w_J9=wBh~C`JE{Azdj+Vjv&=)aMOJNw4)7DYDHACZol#ypU zKJ1D0%meSRfMww^B?s=q{OmBQOx(67b6FCU`h4i5x$1b5^`%wwF~yGv4tM#7E8g-l zC~n)V2)mvg?I9LI@42C)>(ga*uF}8Ry-Y0N@+r?VFH`(9<>7kw6CSs6;b@#TlB!Oz zD8Vo4l8u89hsQy>Go#A}1$7{gc!_)t%g%1?qg4>=$WRxbZ3tqpxw-Kv^(1ns1PN@1 z-tuYx467D&Gs)KG32Ra`djab0ni+PDa&}IUGfC*@r(XAR-dQl(iQCT2jGjff407{d zz0H@RA#7@DYtI(LmL*;pYhc}~>TV?*7h?X~B3f`VVvn;E>nZ)jnSW>GMFO5XLe=PUT`3 z8D3eem?pv{5*SW&r(Wvwnrz6$_C@ zG*r-9srTs%qSD=zKIk{tbED4^#7}bf{BF;iX1#o(RN?Du+RZ#+n#?uRy$Wn!oMl^) zy0+`zr8n^k5bluW=)_zl7!C({6|{5yU_>ll?t4cR`hRqG=FwEIZ~r$W9g)+KB-4pX zlPQ^}Qc+GQh007(=6Pn5qJgbc8cdxWNf{$DPh}^=P9?OrIb+y{42A7^fBJsc`h9=v zS?hV$dd@$c2A|>n+}Cj5*Y$qgBCmFiZWnLR*%%1v(ATWWGCvu}aEINth^IyWnxoQN zfK$UMfqDK5B3jdUbtnQz4Frp9UAe0EIHv!juU}PLt6HR-FTO8MVA72 z+l#$QDjAM~k=2ZJlHd2qEag|1`ZFkN$M}Xt-p1TgQq{JK(BpB>FXlh0;XtjSxh358 zN>6*RJK#cy<@(~^e|;|V*Wv8$3$n)&;ssbb=^L2YpL$={l7klF#mt+RCPYjLd zE?%7@SGB=574%y@RpR1$I{li$)f}h~U3i3QGETyr#0jpKfux3rCbM0*qa*k4j=8rI zgZrd;H7~fhr0ECisWcK8}r1?vPy{ z{Ij6LBqzDpQ+IyCzDi*It+nVJPnY-HdMwE?GHiv}=Dgc%qfT^gL8ehJ*1ws`uWHsW z_@=a5SeKSICB?VB^rqLgZ7Ugu=)v#V`C78W#7UrITNL>|FX zue@L%O2lC!-tcv8sZHeZT*o!HNsC1v`ps(4At+$JxXU!@5j@4l)+ zNWyLFC#_G99oN3A-0pQ~mARkDFExAB@_a%HpcCfU{NJe%ce^)&w^6i0Z9ZYeINou=H*&x-T~0vm#xo z+CP)O+`ZDMB2<3eAsYGf$&)O1jQW%O8oN?-VtNW`jVF>_U5T#zyJsk_?H#vrYu7KB zh@L%aq+=8wvg>Zf*Wuo8u&L33X97RJHr%U~ZS4BeSxO~czEb@;D_~Jn_1x;JjFY`n zl%_%mdCSkCy&Q$FZ6>ylRr>O$ts1J=3E5kYipbS)^JRnOWNY|Fm92aF)j*=E-?J*s z^C9mZI*l;-e~ubwnr4PmWqXEO)^e89N6s>(RRldfr=>e9mkR@mi_YZR?uMUD+rgrD zt-v!aKrr_&f%_UX=iR2wWm|_G`?uywz9bspQ{Cf23cyud_I3tZS7wXd!-%ir~q zy60I+O=u(>4G)P zS(yv1?}&ShvC>~QB(`@@C|@?;_?U8(q#8IMFJfL-ozDqFnVR%CRzctLjJ@S<>Xf%k z$@=vwD!&Uj%=L`Z9LOcjA|J?X_PdU2aYw)Y#Xa8`fcp&mBX}N(eL)zi(B`?FOmYP4}aK`7t-P90 zTBoz?zO_z+!@W*IEgMNPE802z3m#sFW9X0OX>Rsw%6`WlkVB4T`6ZjlD*}zWp%W7i zBXtk`^ABd5cpjF+C)}DI+A~D=?++6cZ%&j8it%KJdrIJSxQngH(c0(m;t6Dz8rSx< zV;^&k4(jrD&l=~XXBu{BXW1}=?`w9Niv@hzk>BJRHI%&jmDPj2Lso@Zrc~kZ=f@?* z`ykdBc$jteyma~J^jN`-Rb$nQ0|GN$c}wMCyG^x^-}HI8G3xu6_vhuj=9bzbX6)>_ zjlB2GyGc__Y$2gpDZt?(Q+y-4K_7}tP@j|$)Jq~u*z(#3Y_)@&JWt=>V)ihLADEE&Gm6w`2KN5*GtuIq2XPP#Wc zd9a5E8IT6xSVw;ZG037<-X59x(UFf{T}|*Fc9?w@{{3b{n}DeQqlM8u1}byHh1;CH z5L#3VuHR|A!?t+&XOyZ5Z5W38)bqr>kfqy_y`Oe^Ic|{EiWqHe>iTr!H=d?aU77h? zD>K+Z#uDdh7~3QB*Qjv*b9C@2U8#E?4ZR+ZSO+zNi_1fn7xAG0Kq)mG^Zi%+k{@y4 z8avrl6dc~F=*Zbt@%3v%q|Lg^9pyCcRv6XzT7icRbOjeja{OxfFwRx?sn1WTtT4+; zeEtspA+GF!cRR}!R)gC3qnIescL|M38l7cPGCRAU*(wS-ci2YqI9U3%$#T!7bTEc{ z%|we5FMqnswz$fl!~Nh_9*k+^79NlMB+?8j@nR(Ng%9H$`GcBJ@buR`pgOhgT}ilg zB6oiFTMl};y)4Y3RB}pV8MgiKp>afW+DbGSdmMWQ9b1Xsfvkg^Golqjt~(ZHs;l3a zIOeIw`M<^_+2bmx8^_gkdgxp4U!_-laZh`jrb&0T6;cZSZtL2}vYSN?u_{OUwdwRm zt(m3U=B7F8cJ3U!Kwt6~g(Xg=moxxEUR1)w9pXkA;x9jK|eE71movsw=b~#gy9-U+^0(cVq{X`eF zoLLeesHDXkdn4!i)I7fdo!*SnI`q{||D6JLx+c4+DancabL_)5#Wdk@>_?i9*w6O1VjQI?h1SO>yH)kI6Wl`v%${DPldWv`anAq9TjX3A%u#U5 z&tEG#Gu%?9^_P|wG)`X97k#ZK!B!|S*Bj37RbnuCokM^^cygD8t`wZV! zBs&{Inqw$Q>Q?+tTDf%3IYIG?LDKc1V5mihAu7`dOM6%1vJ-_Refqj4W z$5T>f{9!^}VeI>zoh@0$z9`6izjArUFakfCXZQR~7FA&MK0mcnhGq4t`}at@O?{bF zwn}4TsD2+-GnFR|h&gw~8w3V#O}wy9azZ}n2Xp)Ur5pj)%Re}jzi9n!l zetovW8Xd?cwK%H&cxI*~ztrh{vU=`Yw)JmkN^K-}OWxQMwDF9}8I)t=9wr~Q^;8`C zkbji=ZqU5WiYkx)YuutC9~E6GI_RaQqO(rnF|R5)Z>a5EB6(gSvpSSbJNEX2+x6EZ z4vd*~-pq8)kJ_uY_C>x6S=S&wX3Sa1)6=;RquY@EehHE+UroJi`({Z7}mmAy3 z?Po*x8$_(!m&{Aw9sHw-gDRs=e`Kja3wUn(buN1F*@^z?l}5}Y^Y8}FDqhWnur|w} z7y#%tE4elXG0Jt(I3|@fLMmOMl;*GVus-ipr!Q9hq`U`})!Y@F{40;jAL~q7dB7VE6IEGvnP|p^GkHX%WI!D6?KatWULkjoBi6gW^)W0|=uP93^y^rsy>580VYw)G%ih(Kb z`OB2-AF-$K9i}}-E?T1$02+)G0XtyL{e^xd5RyQBVOQGfRPEa~(K8M7w8|Mu_8N5! z7yqD=-huPAw1y^bBTLr>|Kk4ffymf&&aN)kg}|WWb<~*1m@(YAcVw`Bq+he0n|D`K z;2%9h*P;@l0)G4K+WgzFFY^QBR^kSRAFE!u^ID@J5uKd2=zJtADk&+c`i#CtWkM>G z+qTB;>WG+E6Qy{9jg+ooKF243Xksoc#A%SMeiXpBEnBv5d^xDC-CpX);2>@P52^Ip z3Gim&B1gn~`0ww#NWl5Xy8iyJTDQR(ubRu<;|b&6bqbPPXv#0MjiXR;dC|(#~QCNDrf$miuuq#1s)wiEUX}z=mVj3 zl}vsDsahFS;XtBJSF!V+ws?qJAGzf*!qN`zDY|EgY8cQ%=^*MY0o60a!;Sl`_t-A2 z!Q1olgSs}}AT73{(qe(oQvml!G`0QjTtRDIi+^#jb1y^eH`w8j@`gsEjT&7~ z`u~2e=gW}g9~Xbe@DYUJU)aR|fu+4M-1xbP2Y~_t9>rNvs5^K@KYTpWMi%?QH8nM$ z@ui^(HbyJTsnSe0OhJ36CfGzqz+MpAFg-oJ@Q^~tsGz5U#BhtcdLn9vFP|EY$Dz!0 z2!^r->U5(tJp!Whx~^_xyCfiPHnovp`9*_?(pl;!xn;}WRfO7S5HKYQl^Tm7nR?A< z2!@S?H8L2J_nBwp%gW2a(^@TW-?(G+W9dKON4cdf@!>j< zb)$1CnO|6mCW-%mINVyC7SiSzAtgl!EFG4> zeZohI0o0>oMl#|_@&@te|vILlFPme@2d#nO5XW~jdplw zohw}Y(Xd?AITbK7d%>+HTBzI0gNmk5TNMPGtPVt&7~-eXlk z$6c6otH62#YK#Dk8XCwX)oHAjht@c5ctD&ZB}t?FK4!KbUy?xNBtz*1;XDoxuTgADaOS zOb}===|1_AU?7>5SnN=`i?q2vG=et=^{g!qT)rUgs?(*uSvH&O{e8W>Y& z@0&H;+}?@bZX0S|{FGx=Srr6%VFUD`UMEsM@PqJ}I0fc%X=8w-q@)nA)%zf%v!$bx zhRibDIJ5%NGBH0YdK4Wr-D+h?-33l<6OU;YBYvG2+8BVxNBc(&VMkt7k1+eh+!~A@6k{7EgLs%I0VcQo>YoZ_NIX@3^GsL_;s;6fQ*fu$2T1>((g>H9R3fLO3hX}0Yv18ElmrR?6`3g^A)JQG(U^@rnKeMVE(mrO%hL8yXwGYOVa>1stdf zK+)x)t|$6J2r2K-&c3>;(1muoJW#=+#GBQ8$jc8K@o)A34DzUIWuZ97tLP1dax%jx zjg6+Et_~4IaCnHcck~j&W?N}z^V1Wl7ifi2z(KJzmH+__U>B4oE1?rB-j)J1Npu)^ z4K?$>88MH?&TJ3loX{*saPr!Bl?8lyZb}`Y3R(Y~M}mlyRMhl8Gezk29i3UN?B2t2^2xEk0qrJ8y;}}OPQI0hmGv4tR^=1g7J`-!EVAR7%Zu#I z%kv`ExDFjT9@OBRP(VYl_zurI{4t%kM>VBXeloX&#lrxe$_^iZ07)VU=mVWXz#XA1 zSppS04b|XG^WqPqFRs%8ecGhrx%IF3J=GKnWz_S!v1<+|2y8JITA%Ubp$DGlRMfP! zwbi`4p4{mwsjB)AHp}+D;NnRFf*d6ldIT|gPj>b~@N~T-fk}mC-poQTZviOG1^6*S z5C0TeP>@W{qv(zA+mWW}=kQ3h%68-C&0OwXS977Pq!hk?f1E6)WoaGc>#K-ZBArXU zLcX=4k-0Z`!M$Q}LJh1#1Ehw+;}D4hpYI9IHrwLLGJR#FOu7&#x<_eNCD7mE77@@& z5MmM{6$ZAn|NBrmW+^Ui03JG&AXT-s5s0$`3R_016s8Mkyb#;4?>}~o8qd98TV}*+hV=5kT^sJN7<){Fuwx4cQX`#%$J5RE&ozML>BTb8y4L zKrX~e(5{PEDI)H1kZ+Y5PRQwTm3A8F=tO=@@q?82zXN6D@#5h20791nbbk5@9l*+< zu6>4Z>Oy!fj>JVji)^rGU?|%N^tx_BK4}8!tK(em_^>Ea(E9!1q_ z%{0pEVAl4IkGp`i+yXMFlzTK1F+m_26(L2BLCQ$zyk(J-t{uyFp(&;UY(a!Ok4~R9 zK`gyIJ(Bu3EQS+V?SSwlhrqczaEqvZ+JPWM1bu=UScf!#OL(ZKIzs23v;{ZvoK&z% z>+E7R?16p;2pNqmI=8p$a|5)LiiHnHS1lL(u(Z<2a$IZz|M?&-j zSdV?q?Kd%py&9y7-lyvFB4D>ylC;=4*PVO+=m2>+KR+K!Gd61ine6y!jhL7iWe)Vy zzbd+sBD7b8sDb@ZoZ2MI{jU>VK4qB+gdzP_!49?}oVW_o&c74$aWu;>F#;7!U3h79 z1y)WHryw9PmirgqnWYL`3xv(q04=YVMn*>d=&cI)dP}#N2DWLh{{#+Ju!e8J!3tKh zi%`RE#JBX|QiQa`h4!J)#jGw?%nDM55plB?RP9jiiYw-g8`{=-*fCXh)RVE`ozkn-5`b0RCCj9m(P{N>73&ULdaOlSX zn86q|5rW5t)d*i0X=Sk+DK7!&1-ao&!G-l$xcuDK&B#bk?gJv;2B(fVcb446Je|T> zEXhi1u(9}$5tfg40>i_@Gta)fj!Pz>g%8&MPROkcaBB+|cy80Q`A#_U^u%xJ^H4b7ePSUVA<;z*n0pd1rELO6Z5xM$P9 z^s>Z;EoR(Jgjmc=ZM;;bG>SCu2_gTlWi3I6g3*_(0zMUoKmCGb;aBua5F2Lyw?m+q aVj8i02TbxUV{s%F%hAIIhqAS;FZ~x@l?~?r diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 5b7c3c7..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.433008,0.441802,0.946560 -2048.000000,0.633380,0.601894,3.526337 -4096.000000,5.002587,5.816985,14.009102 -6144.000000,12.504795,12.634414,30.791702 -8192.000000,21.693977,21.714382,54.885471 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index ee2ec2ab83f6c196db0a8f2f2b470a61a94217cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26910 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%0AwV-(iDo-J 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 CL#qY= diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 6a9cf35..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.958384,1.934998,0.320536 -2048.000000,3.945316,3.942776,0.944790 -4096.000000,4.544990,4.558117,3.522157 -6144.000000,6.691255,6.519808,7.861914 -8192.000000,2.664960,2.376704,13.630857 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 9ed8f06ce6e25fe8f17f3a8875d389a92ae4ecbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29543 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

qaf+%q3xAZ6gm6dD0^|BNg%*r*`HGy$@t` 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 Hen0#Z7)-R- diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 6b36bdf..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.730391,1.696853,0.323550 -2048.000000,5.271585,5.262336,0.955698 -4096.000000,8.617779,8.639847,3.568900 -6144.000000,7.742692,7.931449,7.616792 -8192.000000,3.658547,3.622707,13.906825 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index b4dd4c77b7179c92e9589ea13dbf81561645a5a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29116 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 G_x}%Y9y?C} diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index adf05e7..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.300364,0.313451,0.310758 -2048.000000,0.431260,0.451925,0.940426 -4096.000000,0.650297,0.672193,3.455024 -6144.000000,0.825722,0.741293,7.913847 -8192.000000,0.879881,0.946141,13.727808 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 6294eaad289f44e5829495340301dc5fa01dd1df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23453 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index f69e994..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.301363,0.307574,0.330263 -2048.000000,0.455921,0.459615,0.948956 -4096.000000,0.759461,0.709308,3.643176 -6144.000000,0.855790,0.862116,7.874294 -8192.000000,0.934822,1.067411,13.695122 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 18b33665fe93ae826c318722d157f7233f6a0ca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23508 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 F_)nOh6*T|= diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index e045d00..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.199489,1.188126,0.320194 -2048.000000,2.732049,2.691692,0.944263 -4096.000000,2.953402,2.968529,3.576501 -6144.000000,6.294714,6.171462,7.698459 -8192.000000,3.475797,3.483989,13.665248 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 15d079a1cd31ef814ea1b76809e8f55104a5a71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27812 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 6f512ed..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.330636,0.319132,0.312371 -2048.000000,0.417799,0.380138,0.973631 -4096.000000,0.808951,0.787719,3.556542 -6144.000000,0.995811,1.010753,7.949232 -8192.000000,1.114297,1.104483,12.924819 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 584451d8751e867e99722a2d86fc68da52b9928c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23445 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 Ax&QzG diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index f2a244c..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,100.000000,100.000000,0.627177 -2048.000000,100.000000,100.000000,2.266261 -4096.000000,100.000000,100.000000,8.579533 -6144.000000,100.000000,100.000000,19.190802 -8192.000000,100.000000,100.000000,33.459198 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 3a41d69916ca9c9e9894c643dfff97fe0cf6374b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19463 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 35ac745..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.770517,3.749226,0.625865 -2048.000000,4.167748,4.096273,2.260407 -4096.000000,2.687744,2.608128,8.657213 -6144.000000,0.189952,0.217600,19.321568 -8192.000000,0.407552,0.381952,34.033310 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 499b6fbabf1ff0546bd4f0df5a67253aaa3ed769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25284 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index c05e0ea..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.526499,0.547620,0.628370 -2048.000000,0.723867,0.755144,2.264489 -4096.000000,3.418806,4.591451,8.766250 -6144.000000,21.938980,23.481184,19.320877 -8192.000000,27.087725,27.141266,33.542881 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 47aba837d60901e3a3991f065b399e44cacdd543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31672 zcmeFZbx@Vz`#yMR5d=Xbq!dsBcap{4g+#>`6 zI{<;en!11wzq#{kd=CB+b&=P0(X=;raW{5)j(BM7;$UO%V)Me}y4!On=NI;N0^Fk9 ze4N)UU0fWT#dvsZ|K|nV_D&W&{WR-0;39+$iqD)82vTFr57rmyoEHd$_ss`#cOQGC zu1&amPz;Ql&e?Am1Vtg!*}u2)NkbS`|IzD+t*Jk^DBoXo!u5_0!KnLxq^+ULot8)9g5r$ zOz>V3iwm>0a)z-EJg&Y1oG|NZ~nvV=TDfqYIpM=WsoDBm5aUF3SrquW) z7QN=bKR;MS)utrhvHlHj`}X*2

vZN}#2X2ay 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 9872884..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.480875,0.504145,0.609149 -2048.000000,0.797078,0.773144,2.209283 -4096.000000,4.941043,6.100704,8.522633 -6144.000000,13.501738,13.587289,19.342388 -8192.000000,23.328512,22.148439,33.728001 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index bd9f03a76f423c18906fdd56c9af661f9bcfa883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31348 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 4d2c5b9..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.779477,1.778627,0.622846 -2048.000000,3.437056,3.412864,2.205383 -4096.000000,1.805824,1.783040,8.804002 -6144.000000,0.001024,0.208384,19.443304 -8192.000000,0.376832,0.442368,34.250336 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 92f5a5c674b2a764b0648686469e649aa371045e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25325 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 z 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 E00LyD0ssI2 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 8c1942a..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.569162,0.581191,0.655471 -2048.000000,0.845935,0.862447,2.230848 -4096.000000,3.489118,3.482038,8.624795 -6144.000000,21.376360,21.504879,19.250439 -8192.000000,29.933382,28.852037,34.966530 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 3007cd0136aa5c7b246875fd1503962c6c057c00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29597 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 0acb616..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,100.000000,100.000000,1.137254 -2048.000000,100.000000,100.000000,4.321752 -4096.000000,100.000000,100.000000,17.474201 -6144.000000,100.000000,100.000000,33.737728 -8192.000000,100.000000,100.000000,69.831711 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index ae4172b77c54ef3937c61568dbeffaf3fefaf729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20209 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 F@t+%qlRy9f diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index a3dcecd..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.622098,2.547598,1.147609 -2048.000000,3.399095,4.370688,4.341678 -4096.000000,0.172032,0.242688,16.865122 -6144.000000,0.378880,0.450560,39.172657 -8192.000000,0.191488,0.200704,65.827873 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 95273a36437ef5f45c3cee6e6738a4e6b5d25364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24237 zcmeFZWmJ`0^f$T*0ck{$1~)1q-5m-Dih=@C5+Vvxo9+~(L_s8_6%c6<=`KN1rKG!C zy6=2A@B4r6xMSR}_tSNZb3A81dp~22x$pXC=|(EMLAUz3fmin z!Wt*QgI5H94^P8iqW1Dy_G(tf_D+VjFHjE*?X4}W>@7^6F+0AnwKKKC@NnA5(Z<5b}Eh#>40^fYTL2%=l?`0w(@@0}`Z>eVCb$K~3i!jFg1Ui5qbFZnM9Is^$yL6^PDUB&%QUgYEWgmR|3Eh~$)iQh6|t)=@8mM{KI zb~eZ4*I?9S0Hmvz31QR@k6=CV{p3EEr<`AHh(Lmmg2#f9uvQEI&U# zjc7DuZF4iefq_9@H3r__nTY*Vw6(3xs6SVaUd+B_QMJ(*7ayOJlG3-PrlvP7Fi`PQ z8cIt!UYRu`BV%uGkDQJ!7_PWlPG?j5-_qA-blX|JA}AR7;~kyb3hoy)+Sc(Rs_iaZ zP)-joEfw+c_08c@kdS-$klfSL(_*ANva(VF8wV$c>#m$!CbI)m1poFgMeXjc2zW+L zj}J&7BcUqFKGhtWZaGw}5pAQoz0^O~blD*L`ynL-MaD})@5yI{1Ip!ZnWRrj`-h#z zJg%~`R`gj_?;Gb<{%a-7a5~spz-;@ye*No{EWXs~(I%nGDP`IIY@D9p{^4Qw*GDXj zUPm^BgoL^d0RaI|bW-3ug-Ng}qV*~q%iz*Rv&6p^mekbL(!txeZ|jDVG$iNezkmOp zykzIithI=)ps|SwzvZAnZq<&C=jpLitdOOdwqCTpD_i%M2Q0$E(V}*?djrB9dz1R|_zj-yB!#K_6XYd^~e z4=ZDZGD#=W@EfnsL>rX5)>3h3p=!$=mgYyR#9=Mv?%c6GTq&_zAHUV_c6pm#>TtQR zv9XbyhUVw`M8nUnE@{(_YvvZirMxOq`&S(+5{k_G6W0ZYiY=$!u;(&gy^0&qP*>Ei z-?lnZF;e_d(oHBq%mK~A^PX1F%)0lnW`eaB3`l5VVge)i2@4AgMy!^nFX>N0cSlwA zf`P~OB_b-0@u(-5EBySMrHQ=<+e@2`lq%NU4}>SIMM{r%hE!aa(da~rIb|N=tgLn2 zMXYQYe?#jVHIuAGMGb{Jm zaH&n@?x@@J%nYwdXT0jJu*<*a*HseRcgMWCMCan|>IZ#%eEybLG3k}tPe2&jFX?d( z_#P}5c0rJYuFt20CjQ|K4s`yUApYqAUFig#^NGtZf$|qBSozott`m#qZ#1PzUA}PPHtdVCvN9wh22I*y>cUtQoMGHwH9E4VdNmEwRFb6b z#|i{}{dxlhIl_6nS94=ysV|2Gb|!2>)TrB4cm&}X;t@52z?Oj`6p|O1?5g_omDVd^;4H9Ht=|Pd7cxr z$KeN%-YWXGPY{0LB5LNl{qo<9?*@f7Q+Ecxn@$mWprgwZ}-1`{rY`UQfT+W z^ubadw*z@cLFe?Crd(t9Uke^XY>6Wt+;iG`?@Uxt*)nyWb@cRZ>tn(k0lS>+y{#Kv zJkrwAB@S^N{@n|>Pv?Jq(sf%Y%AI>=WQ1j>I(_FIZQ0JMlnmRp zogbTux9c=)45ZL?T}azIIItb_*e#PZ$k7ojd8(sodU^+q9?i}t=c*vq$o4)yoG6>i z&TZK=y_g@70o%LKaYaW}RrPO$6Zii9J~6$>``TI=JQCVQxb{)nONvDyWcml4m3_jA zq?*6s`>3cpIy$rf8I_QA+Y`j2*>g)j_pF3}`0%nf^AZj|=`^e}q&ClqFL9VjA0jU6 z1W%8x-wOM%>Mrm%vc3=>Mt@T8Hm_tUMRT=(w*5LGi(ZYf@5)FzdlLFRG*_aZ+sHo;$a`)y-peQGM$eS9xcD zg|i0-A%>S$S1URmRYx1-o=?h2KI4j)Fu$0;K5m1lp_J5=c!x~|jD*msQ*^!G;F8yY z=KV!1ppIdL8$amsUnp&q*C#ogam&=h>Ys2YO~(V-_;&&Qpa1}{Fx?o zKIbsabQdqm1ygZ4!`^JmaHXK=x*IqB6d>^J+wb{i&Oi(Xip(!(Y36-VOIO}n8%w&T6cyhm^>1@iFH{Y72VA5R zvKS8$Uw!&F-w<;}Q%>$)bSxp0`@_oBHL_c``g&Pdzo2e#{r>$s_ZkNWaa_l&&goRB zG?Ms+tZLFAI&g7u^I!f(m#EdkW19SUOXI#j6P>I7{TvY$Djzc<1{qixKqD+HY}oT~ zg*Y>Eqq(hg~AqRvm5Cc9S9wkp5(Lg={R=QK~QtG>{2m*w~NV@HuUmE!Kf=DRt z9ng*#BCb+zh$pEV8+2J3IXdueN+zZ*J*N?QcXx@JlY^!6W2d#RaE9%>AHcGc)6?J2 z)35sb-86hiDEKlr68Tp}L}CI130!xUf4;)Ozc(@l03@rW74zf)8XY-ua{Ma=f7lwQ zayPNJx25JcGda=pbo_}qHg@gqyi-;(%GRz9<8<1V`TbZU%h6acu_cDr$a!bL1d=!w zaOPZZ{Mm)^cXYxZA|so=n|7nV>Q{-0ii&P64}>>1%4uY4-EwsmD;aU5W4ZJ8DWF7d ze^-)pQcMi>Y*$j(Y)9O}SdBF7$rml}ucYfH<>he$1w~*UGhC{=1Oz>ONh{H9Rdle( zT;b_cW;Ql9%po7KZ<*cPH_IU*F{f4c`duV{4SYAHL^uy=fG<9i`};Poink!^S@K@eeua=)1vk3`}?E!H|Nx}w48^ljXUFi0*rkWwYv^!Zl8^*BrvcSjZQX@ zju9l{s{XrZHa&I&r89niR_0)uvUHYqb0b^ZdZlRAujtyp%iBv0qgAVU{BQYlzS+ZC ziCj(^_i|KJBmnX^Jv)1WfnmigiPs2EA%uPc@Hl1gx7@*ER^Fd<6{hPCV&&A;FQQ-q zE8#WZ?7&=Q)<&!DDl1FPpkkt{i&1mP{f~T2+vQZ8 zI`k!Z{rYb2AZhZt?O1S?j{B&I8B>I{)*Ji&3^yDWAs{O$r`;EZ43VBTMe}xQ4AMN% z4;w#e?_9kK_|_5E5#TAWLPJB%C9hxi-`cWAUB4eAqo^2YK2U5KXI_CU01$DI6(0pm zFQ`Z#3jhX4O&RU)&n0OW8j}EIPOOxS86&(RL2UbV^X$^nQlBg}4b5HP<_N5KXW_3u z2g1z1S~kZBL6W}Cihlg#lkECp*0_D_l2BZ|!Q)SiGDH!jTPqRga4$+%FW$6c+A*4R z`$=aJ9c}i)L%9t1f764_d8^1zvH`X$Mg8T8!SCKVNLHVo93oQV{Q2`&Zr&suV(a8{ z{cIEz8p?V!Z)NSWvm2Jysyyn%sQ zO+4d^SrbE6hMUID8}eD~AG(oYsb@JJ1X~4tU0pISW{6|I=cXsWxw|X9I#>)GU;~m! znA#+|sVVrfQOS_$;P(Z#l@j0z0%koeMSD?u_!*B<@ZQl1qQ%4xO2^f8B-7iPn*$mG z$f6H)3ynK&+_>>{|KCh*vB%*~*oP0dH)lJrUXGM+*My)kfAgK~gF;hC+TJcA^VCBO^ofy{ztF&VFYg^P#B_wpBWU!FnN(f%flsO?qZQRkGUgPJ$l zb7QIL>ETgPKl*Z>>~D3exSSsEmQB84zc*40@uq9jbcvXT?=?_YWD;x|NQ56&I9m3b z{|I4d1KL}<*(t7F;m8T%4j*#&i#6WM7DA?fUc-LftT{bap_C0)jO2MqesnBMUxlla zNghh#jZaFSY~G){x4*vuA@$9$0T0O*fNi=%_Y);P!nXbhEGA*5Em{p&6p{o1r#Z4K z&FJ`^6Fi6$N`tL|06i=QB|UxnaGBjejh8gg)=Ai^Ulc+ak^LFfvuOqT@g7hQSeMB< ze5PrDkMT%NebI>>2-y_C1YOVl84y9wsPXJ(+iep5VE&|@AM-kutU2DH1A#&s6cmJ@ z1g0wH+Snn`lIaFA>1l-XZ{l30V8i#v%B#WXA8IyEW;~rC9w1K1ZVu8QHTv<^aAUIR zNcSIC&o$8U78V>p?DNchrrO)@fByVAM#@7BM8Zf-wStBQm7$^Gb7SL4YmwnZaocGE zV0Mko&6L#C&O7*5Z6iF3O5#m5H|)g$xJznUT3AHHv>6c*QHtGMCx>47_a2Yg*;z>WGsTD(5FE@c zq_9s){m`KyDMmsFb#lBr20I%u91v{+yXXfDvI*!mN>ND(M`V@uJE*08yXIIC8#IhM z_Zk;ht~=RnIl0se3xCcDS^9jE&B>MPjB3V{N$ z2#;mI;sG!7*_ysxZVeg>i=4txPg0fljGb2Y)cIO3r2Q)4zMq6~5L68V`I%aMxGD~# zyyNUF0vrk1IY-<52Dx)%upNNOA@n6{rBi(EDu`&bs0$ zVA=A>li{6qe&eA)iq)aM%ooK>RlW?Uyei}35!bB4;_aol6*}Q4y`1BN?G&rAYDngR z#g;?=Rx8%N0V5Q$_&Yv0`%ZZDDVTV}4*hz=u1h)KjU|Gg6ro3fMynbV5{}oLa<0D4 zA87wwGpUEnlaS?Lqc;}LOQ2f7Ye2=}l&)qFlT%RCiLX^QfDvg52_JGq!B-s$3Q?K{ z?<=z7Kj;j5Ze(Rqu$$6S6VXe&^yGB$-#R($IDK2)?5^;qyCd(`ttQKcfVk6F9`3^> zBj0BBEW0$4q&&WA<}q4TZBu~;1}{dZ*a8f~#34uN<1I=lDXHbbqTu*=dT>13atSCX z*eHeQ>{kf+P3q+@gF@H3E9p%IhKR03@uZNKS0N{J@|LC2sPFHtE(`IU>*Q&cZbCaN zLkjoq5t2!6kxRO6B?A$l7qK2MU5Vn*t_Oh*%vT6ZleZ!}60jZBX-h`%;)H#T5C35n zu_7oT_L%wjJ|Nx+>}Z%+$Ki#MyZEau40EBd zE7@snl3&iormv5sPmL^@zInlZa%m}e1T&WsD)p>4^YM3!fe*-THA!^&VL4Q>RvicG zgctTL3KC({>+_VQQz7Di3ycCT%>)N3p3kcx?bpSL)-&!Dxq=O2Qw7LF>`D}%P!=r$r8-w@(52a_( z7P234yq8q=6MTmy9lap+>)@gCIj=tj4qXTQvF(zkuAu`!o2|d+!FgK2n~7s!_n9w+ zwJKme)HRN*q$`DayQ>r>lc!J4V2M{ZSd^2ic#{P@Qz$qv^YR++ng78x>&Y*t&B#8J zdXu*%rwo6i35di!G1_71MJx`JYYOdeBF-J(4{9k;RWt0(oZOC~-mQ2LM6ZOE9}ggl zWj+7vN-#TxirN_EW}+28F@|{?A=$SN^f_@uwEo z){d{+#u7ImmJv)AB_m@H36{J8Y8bMIu{MCvkO_d0pTm-0IDP(pM9mS&a@REy4% zqPi`aB(BFnt>mtjUXU~4e{aoov@GoBzEZb%uTkyg#e5{CJIy6nPx$?+EbEO7Ob3q{ zc}>7eYI>F`kNxPbHt1V0&Yv51_yC&b9g4ey{Ai^7?;H3?@p18D`%li{YU#amM(ZIK zg6hw$d90eFXUba^nwsw-aE`TtVEwVp`|DRnnwC1^;+&4j*~reS4^%^?zn8bgPu=(C zm>@M+o%s#Vc%`KYNQLr_?L^=aD_@C41C(*}eWl>gQK!e2Z;f+BDpwr&PTbi~G%Fb| zWn1aYT7B~}JRS(hj%tSG4P?B?oKq;CaPpARFP`t2*@?%@#>5+ao=$~{ZcZrhrtbh#)+)B30gnhHAAJ*zX3R~ljUO&kx@=daBM6u_7~AOPVox>>?+twS zF71{t9%7h*62;0l>%9qX!QFfJY%SwJmW`A57oZ znuPP3BuweXI0`C7CSO#NIstl{AvNE9@L;BLvy(+!Jns8<0dNb?OV8E^1MT_q=Z|t} zR}dxZ1uCjp9Vi#I?%x2Qrlj_FQ4)^pkT_<4CKzW(?cXb}{uU-g>_2$^)b-wufOL;YcK|!FWNFg1B#m6tZN?p6=2lEyd6Z6tA5=x$IU+%xk)th*Q z|3)@h@x??ziuYQ@niNQX*(%pIYCuuo0nuOE3BX ze1mr=DvB_^up}!_5(1vQW6F&C2(5&9Kt2S*=TV{Y1BB;%d(rk)yYM=SyK)^HN+_Pk z2Vt;CU5Sz(`ChzfdJL2>z4QKyJ}>E73%omo0WzJf>zPY8 zP5j(M_V>sw!LB5A!LyBOl5DD`^}U6Di-OMFK@gn|nH@fTkwFZ1s3dNJEZNgTsf|L^ zs2uO?<>}e_$C|gIx$>X+_4WqFGn{1}HS0Z|=f?G6EKR%nmohT{`=X1l0~#t_z;d=< zwSfDYC`ckt%lec$AEUS7`toaik~7}frzxHH3}22hN*%N;-jizuHxC|^EnfL=`6Zwy zwOA18Y){U31o&QUsDJLg%ghYmO%I9P@EdG0tuWoC8RGiFgKOy!fGq$EUflOL%8t;m`>AJG* zWxB~p#3KW7&Ur_7g_k0?>_=r&TwuvV0ti zY}?Qo`+CcgTj|RAu0_bG7?H)DEFfiky}e|3>iM_00~rrj4dCBHg=UOWKzW$ z@DBj4MV=I2lqMxo+oMD*Re1IYHnrrtlzU^Ru%A=^oy~5jA@!^PIQ{v??~pIiKbuSm z{|>yh8nV-UvaK~MSn9}VBrsE3*+uL7oAGliI*EPJs$$4mXZ)e!_BZYr-)Qbot404? zLx3;!-ji>*qzpc3N}uw7!5A~~&Y&4ENS2!0)^ORkRw<Eg zm+R+s^6GKce*p;}7DF*gIKKyX^IzW+D_}blW?k*=(+N(a6W}A z`OgbcoKK7mn~)67RdsQ;{S}j^_g923pWTKO3Xe$D4%BWRc+?0Cj0{p8U=-J11Tr}ZPQ#0)H+3P zdISPG!8!?2HiHPiw>e`E9cs{m~V$1cVy!RilGcq8XOwvg3p>lPK-hdM~SYj0l9%^-U zH3FaDe$YT00T=}>ZEY+pEDb9Tkmj$0uk`wmLEMq!6Z zCeQEEk(0~7pRztKGBefkqK} zAdKiq-ap+F(FW~@hi@VTA@|QSgQUvPfy7k3_u08hgVRqs>|ZKUlZhJqcJ2b@#Gtuh z9X5jUr21#MU!Bxpsow8${g(%{3+$?oke$SA?(YhZ5#IEi?8~pckAs}?&$ih^ zf2^ryS;H$5`>6v|)GuK&&XjTLZB8BBP-%=*^(5hZ&re7mm0`$ESO2=%>C2kv9V>Y0 zL@xU?GKv{4$&t!x?i($-Uh`MXmnb$IWAW|)qkVjjFy4)8*xJ`+Bq>l!1=~G^}!`$+F;o`yS8fTfNQ|Gtk2#Qwd^*g#x zt`6qr7s4n(UV%`LOc3vQ#c1Alv4rg?NF9UZJ}4i(<+WN9a?T&1yn&8PQpO4nY|(a^ zxg=swkm&MdPar=~9dzDBim>jeSe+vg4q~Z8;>oF;ECo5`P-I;3Q1y9z{lR!JH{?IL z&WN+u_!@W=_NXq_c1b_cdlwkbc9yHs+l_tu^?g&XmL8bFl7;c7AqiD90|&qT6{9>0 zP{xT^bAfT$)SFoXSk?=F(%hjAjj@D+J|h@0J(-V#5gTQAST{J6l43*I#l^broOQq6 z`mh~rHS~+LKe$LyF&?bFk)mo)_6U6e9J?U|DJW)KvEJVds z)(D9-HTy4ditYU&8cNEB<$=P5zXdF)sUPo*ChGk-biNaKBY94N$s+=47Fyb0;-J5x zzP`Sty}c27i}XSQ6+g1Mm{c46Eb2t@Gon{*Fa|kMnvD^Cux5Xt@i_JJ~3eBBP9hW&mtxC+&M5Zlp6d=II|zh zHE#B1pHFhf{`u3o8R0kR8DyGR6P zTOJ_-nfp8y!aG9R!&CD!V=YkAq(6>p)rS~SO~6`7NCk(EEuH=~ry8h>8&r|kQOZeD z31AZ-&gM<+^whw><~Q&B)~fl_JxqVsBTMvIJr*Tm@s~&HXkAuSO|5Ju>PhK@KOGdb z%6ne~1viA)ANeAs0!0rA?QNTs8f7^oQ8 zpGIWAOi<+}s~Zp49{BiX2iv&Oz>1@V5S_o_LoKbBh!OBuiZ&C1W98-p zvT=aRpAdp_P&z_tWnfRILe&XLtg2}bl1L4_NQf@qPLhh9m6y98X^ehZF`^90$h1F~ zp*Z}=^Z<}n^XX&O^q{Nqso(6xCRQs9Yf+mA(iFevgw;Q*)gsQ@Wj%Wez{J;nehJp1 zkHO+k18@PgK~IX0*yGSGl{*(oFIo@%Q9*Ct0^Ym^LSF#*{ZB*yD&O04Nyh6q`9l+t znio&x8uii^usFL(>5=-W&HXX3ThWnDB00ey@t%$}@ODA2c z+$7~U=}d*;pzg;By+hhLEC%>GC3kh%?@>{Rn&Xq!PBg3!S-nppi=5wCK&u9+$EwxN zWI$UQD4sxY&j8-Ei_9*8Z*le7wX$M}@?^|NIr!;4_4nlEIy)Z-fAp0y?$X$!45QqH zQVpaRutNz52$1%c_E^DSD1||F<$qI)Aq9E)u&5}<`s11ZG2^w^q?r<32}v1lVwOgp zOsL2yccwt+!j}g~;jJy2+XQOf#Iyo|kZ9sJPOdA*&kHeMQ|_J*4s60B@d;q`p~FCn z14YI?AXNwd_2G%x&({J40sch7UA1)q>f%tJ1>bg}_!wH#5CJ}M0u>x3W8*L815nf# zWqK9Z@{@!K)4Ad_WT^q$@o`WyDK^`??uDz+cL$Cqlw}p5((^pRy7LUAZSCw91`1i#zT7V;HKPclv=cLIB(QrE9l+%8 zG*$$ZBqLM85k3DV8HxJOmIK%-Qs=pAi0kSg391S%Yz{TxzXC{iP-e9l)~eL6k*Yi{ zu21?;s)gOV$xVi-q!4p_9m$SBtptL=iq~Eg)+I_BlMh!8Ku9)*J1+w}3Cry4A_GY5 z%YL=l1?5?ajjIS+X2|vB3FmFFPg>tN3Q`&5}vj;`K5Cn2U>bz{|T?K zduXoC%Jj8Z!C3|=;10nEg8C6R=q@|j{c2X?zU3)}i>IUaG0>S0fzfAS^|wps7)z%} z`EkKQLvFv1XyJmE*2wi%_SxjnG$mxrl|cxUYo*$m#PBuIFASvxBk4*Q>2l7H87ltx zid$k>w`PhIWGe-C8t4r4rRN>ABD=b!i#J<3ijXHUMhL>CMq^)J{Endt29c*gJ|{a6 zhLY;@-4thY_Ez_orgU$4x$I;>@-W+H)Ib39UF>Y0%yq(IK9dBN6=wVIXp_fP0QBPY zGy+|Uyl1cSSu+b*5IBvI^k#y%f>)7eQ}rh#>Zou*$tg6HJCI*|ZV8PL&8o=U(d-{u zy&R&N?c&CO@(OE3+GbMU-cKZ6>W|yqbr3_Ic)IayXm2a`K8yB`v4nc-dFcl$Ui)J3 z2>OE|@k}Rz15v4>vQTzg8ESZ9rL7kPl@(-mL}mT_X8Tu$a&lzl zrtKGK;Tib1{u&_$VO0f~V}bFE+fZ?d|2$GLF%b}~us3J{534Ge0YZEF;`Cfxm50}n z;po)vPgZbw<)+*JyRf(avAY5u*%uFa-j;#0uL|<x9++N49zd!qR?D!Cw z##HwO;_D)K^r@ND=l1p~3nK0ZikA<{fG^ z>>4t`R2rIB(W*8;y&Ku}oUd#xp4(oMMG7{s-8e!SaQSQ|<-{Bo= zDYwZo4tn5_u3x13eg6C>gBs7}(W;@(Z{$-eXXbnjV?sSVKyf&4KVIJ`DCUB1o-M$# z29kz!q`qj2;B@`(6>}KyH?QSS& zJ|%fS6jZUp|nc$JN6v{)SI z$hL_F9!$JT!r1Qu{rGV!QJ~Xv1>LoOm3hkgp)aZw+D)+R(DQCnJ-D?rG89;Zk+cbz*Qo;ssZKbJo;TnnIKpSy5Cr!2#BV42izH04b05{S)Z5L&z#$ z_go2n5|~Y0(b1aj9tLeu>vKs>YSmD=4RS#sW5dF3?soX~hySR?AaS76k&`Bw^bOvu zNw0IBOf00IZNf#!4`DZ(jeWbM0}j^$gh!z`1Ym=BV41Iduy44;t;Px({(IiB!HPaB zjimk&x5dpZC+w6Si=PCKxD&C~)LlmMXD>R6-;cvnimHX0Hj*%U z(_s@w{^70xGSRezh4m{p0nC#?=L-*TInj}wpJaa(vOa$!GA`QM zChG`p+F0`pJF^^ZU)J?3D{_E~Xv92Inwe|(`siVWkj0q(u#^j*`*D%zo-Cjn;+bi+ zc9DTo)P6rkw6Ii?=U4nXmig)aUFmQ4z$u%w^7H8{YSJw@r3Wn7({7!K)XnD*9tKABDu$kFJxAw$p zKce6ve^SBz3Wvg6uK#`My71+H|3Do~3RUR&ip$AmLwh0m#j_<1YN2-e=||J2CuFl- z0VYXB$VWsI@m_)6qn4odJo+8qH!~C6Q7q=r4s(6;GE9glOGd`*bjQib?7``Al8f2y zpm|P?lAPR00swJ~>0!;O@AU`JXE#~QC^;U$Bv2|VmwFRGD6E_65_HzDw{atc3~h27 zmRQ+r)3|hoN~^N8bY*AA@aF~RL(8Sb3xGuF<|z5;)axojD%-1n4M%fHm~RkVphV_D zuG0r*uylV@g@7zTr>K3qz~~Am38QPvpKnP05=rW%_hV2Uv31=lmrI(O8#E2-MCZQ`jauUV4>+>UFBJveo=p1@K?NCPNsT&OuEb*ylC$5i|4Q$B{_E$xe9aDR7y<#|wW z0|tLLJGVQcIjoTr>vB+H`6Mgz0thhV`@Vkg72&F;c6V>zKm7MEI}47v+(gV8vO*gc zU5_GBFN3f<@1C|%?Je^|g&af7KYjz8GqC03 z`d`!@v_b!d21MwRFBq_Je`Mdee4~NKc{)r1iaJ*y$wA*VbR9f@P=IdMs-zZk@)uuw z?Q!^KXsr|{R-gb0&<$c}jj^+}eF=I1)UQrPm&*TZqt(q)RSGp@omAON4ju+#BU-<%eP}=%^;>q&go{!L^3$^QFUI%{SqbMYJ*gR`pT;s?2M?oIh=M{TwabcZ6-(k{PmelO+7zLPR|JQu zenW9Cic8P6zW;xuQhZJzfmQ*wkd=QVd+-nfgsGLzFHrZPL5cb1&DI=A_}8|sDM%zm z=$17P3JzxP7i;1_KH`_yf4))PfCVqXeA#iG2{Q%kA!i!tJ;+MrT*OI z+6J^8`m!7$*v4WMP7%3N~e(Ssd&huuMeVn5=hZZYa~*F%-#N-qJYB# z{eVdA6NgMfMp>B@T581MaDzQ`*MlPy0{zQb_o8mL^Ncq$P56?HuawkbgrgU_KWXGl zB9Z_d`AV}LM@wHI^!>%3t$bEpQ6JAIc@kA{;|jLk9VqNZCSWJGn6`HKt&SKjsBU&LKbtpx8cpu zQZK(77UbYeG+eqsjPoJ9V;p~c3MW*Wbaw<_)?e#M98}7*0Zv6*d6E^#6z}=uRo}$a z9GE%J(geQwmJ6X7_6kA>UTqn860 zLPoFaAZ=fOR+aUF{W3M4JTLCqJUQH1?@@yoI=ia|;6doLeQb(ru&zs*OO3w4whQD< zNMmy!1&MS@{6+2F4B-)bb3SRmn*a}82{Y^r^mlxBY{KvIn<00PE9m<2Sm>3yNtr+% zelsVZTxuV;Qxu<8NMLBSqAR{_Ew>^&2O82-zk#k&H)Xj~yWQUqu0mA;K4GZDGvx(% z0(7$)D&l5ZKKZ|YZ~Cpu&Sh!_e0gw|9a1wN!Ii13ykr+U=b6aKV!O^)D?^6u)Cf3H zWSCt<%dTyeze(9OlS2PWMy}?P+ZYA z(jM`G(EAxp!wphfcFoxCVmbM`&8`NwwYr>=SR7Fh;#8dN-8Cyi6$WQ#G}60_sjsPg z`MJ>2+KT4jcndw3z#DsK)b9-pVwp=i|F@U$7l4em2uwsJ-H4oSh%<`xAJU^HmfVT zztqh{gX7(_MsX20EbP~pcQhxpl~z_^*d|!oW!lf_e=@fS2Y!8jV_9hTHPwY@`j`I} zq_`aikjdVAa~SWvurNMlM0%a=n-!C;ZP0$HPSKPKi?9{O|1nb%|4BL&fHQi)2dB!M zG$22BZkDa*LEM|XB6gi(j3BFyR38K#KGVgTlP_`YYTu2TV_#v8oS}sJbWvS|l{fS) z3k`>Egwm!G zALMQ?-s&wlZYvuZ))leEt*>w22KJJbClp%qeTk@!xb*z_)lch_!NIaw5N~>qH#RG> z*-(jotw%T!Nn}J+wFX`v(`ADBRL81U({G19&WXKMg?Fy!o%DV65exLva=Jze!|UFm z`q6g!K91aOhAk5 zc~kACc%4SeH=UB(55H*Nk30Wsoq=$X+q!p-Aoq^*_QQJYMRG>!)#BIZUNekQQP1vF zCWSKX`|VqF4R%JohKb9_RKL8{dsTIlKAuHn223 zM0pCgZ!@1iZ_LA`s`WClo{NT1P3;r7^OjO4)KaIF&at#SI1{BdO_KhcIx+n;c;_NV zcJ&}laeT#J=ZNSxAU`BsF;dteC8h6Vb~rRV8Gio$Ae#F$6)&uqGs5Fk?tM`fm7fdN zDtC4THJ%f@zSo-Dx+HPcs(&D-@e_UWJw~j_pm$g=iartk^Oh#x`qMzgU|HdSkll4+`uXaF5sbbUh*tme=hKD8Ay>C1 zx}q+jy6(9gqmB*!o$_uhVDBv$wh&2f_!nabD*7$PG22o$9uZoOHT16@u1R994OV-W zTw|x|oBSC4ZN8_N_R7f>_uZU?(W;5h!2sB8%fD`_Yha?-iKF_0W5Sc{{`4RIb^l7I zQL?vX8)U5|T`BeZ%5Myg`pFUHY&)+Twy=fwm{$M}t0<0sO|>YsabNbN+LnvU_?iJ8 zJ~uR-q@up6)kdmzjK{wAU%n#FebK@Xw^y;5B2M}F%CTI3+x6TNib*;uawe;kJ1-x- zuZUT%H76j7xt(udoq@vwLTZ3-b8Gg2@THQPBlc{4QaVlbl;+=~*}+_VC2;ENHffoz z2sZuqAdGC>yil{G2{oP@*@~dAVNiFgyrGTK52}BJo4S^pAH9a9?lC0W+IW=fnM;Kb zWOpV?7Ek5!4(Hd=Cse)&c43lxr!dk0+jSWA{*Df z(N)9zryE*20z-wxb^K6(k5Tfq3+tLxh>*e>U@v30UB1~=d7phYzpw!rrzZ-zP~Y|5~63; z*K@TWG`y^&H=(yl8s8~O@>D|NAHlFox=WiN56+!9A>)_M`!6<&O>K>pUwF6HuvvQF zd*EjD&q;XlU+`yw^TfDMdu}){q=hfD{*fdXGRNb5a{K;$8iwq^z<`XijSs(9pzhDa z+`!XNMean???pw-p;UbYt{HlI#-QeVv5m7;-a(TI0+E2&>% zrE!`U2Pmr#bDcd}FWT|6%3n@!35AaB^smH8V;X8G38G8KIMen}h{`v@*LBpkaXZ|B z#u!mThgwu2CksxoCBK`GeO6&>dN$tI#&d$#&~v&+J0(}Rb0}zrjP~a8cyi0@K^_Zs z5v`3`?Oecq{^HjBZyR~w-|$laW5;sR?C437i~oiFDT>Bl)H>yB^K5!j`{CRj`HxJ) z^8FrFhq*2f492Qw1$|YEX#DG{8xDtE$&~1lZTYaIUiFX(+mZTng3Nse~p$=|BDsdWDVj6(6k)JNQY#MU<%5iViTppu?^UoGX8)T9EX!2vR%e%JZ^XA2R zb|i2%Y^_r5=)})&TzrQ{9iHbxca&yuA}1q{AUj~rF21=CR5+`^4zD2DP`nE ziGP1--B!g+bqO=2CuXr}UZ#9yX%z~J13)*i-Xq7#po!Wa`W@j| zc>|pHtVhn~-^=SId++>NjWOBw2DYOkZX6a#D5+o@pq+Z_m>c{9p-+;@m^53d}jn4Rgpk>!kIVZv?Fo^#C~=7Bb){e zL#pS{hhmmcf7J!dGOJB19CcMPi!0LnpG%vqtqLcbMIW&aui@lzOvYBfY7A%&PtZ^B zI^o56_IpHy7$=0@hU~nbUs^!Ghn0eYrd!BChIMrCt+%YO%!+4i z{@Y6mIe8lUwTVX4n6|A2AyOux8}_spsTdD??|!1(-ML-*b?#PdiRjyI>wo>%nWPS_ zM8X6&sht(d&1R0>4G0s)?P+KG>r+CNdbG7Zk8ZkJO~nUyn9Dj@63vdVia+G! zi2g+BWxKLlm0rHyHA_IuDnepSHE1nnsURCm(s16t+rOKKNjyPla7$OVgl=|9ApZGE z&X4cn3Qr5g%Z_VQ9=^OdDG=|zyY(RTmI^ejVgH-BTpLye~^~%@C+~bqA zUdQK51e4Ofr_5h4q;LaijoxQXp+yBl9ZFZ7SQJ!c;+GU_e(bCA2IxzGT$U-|X3L=Xm698Q(on zizzf}_#r*yE)rps?r2FD*4wcwX4`njwcIVIx!3c4+=#vdcKKNxIYR6}yTk?@6~G?1 z7Xx{31SLb{7XjdRSD2V7oLK3Szqz>KiK{YDFPv}sWUXS?l1t(w6re+gwQjIO?lLBM zYo#$sRM9~w!Iadx2MOKY1@6{xY$NtPGYr?NLMi!c#7M*x49o_UZ|8N z`|Rm!Xc=7MB6@B|ShVU`e~VmqJz`%ZN3imQ?)9?I;WM~qLSeDy>Uy|xbYYA3g;eL8 zS94CWyEnXg@|@#Br2?dL#j1{rkH~YYN8NSD@l_ZZwxzBUV;8nJ8&sdmvJ$U47TROP zENWLu@#5GvJbi8yIBZdT%!5VsPO|FwPR=XCl{ftcCzLzF{&jlEtEz>T3pZj8>lapp z?eT}7Ozzyb;`a9{mpNtsG!Sh(G`KXeNv3R7v*YfZ+W4SZI{qA+=Ix{_za}gTEjOFi z$JSJ=YGm3eIoC6y{6>uDYEKi#$KO<|*K7%*!$+Gih2bSxyhHjPba5Rhw@>VqQ-mAJ zB@daLe$Gian{fCJl8UY9DBnpM)0ZH)%FP`L2N-!BEjGODp&tQ$_XN81IJX7=@2z%K z%3+z)>Udv|!naj|MjQN6m;ZK1D`XZ5vis}dJB7_j;D%T(6T~+MEJ+I(#4wP=bD+fP zW^vszH0ZtdnVn3>U%pn18-B9{P9i-hStf5n;|acOv2piF1pt{P7&m+ES_tvw!Z%3 z6M@Cfq&`>SZqstux1kVEPMs287SGFu+guRIYFce|)#BGD=-w+>r0C}!uhzJbo(u4V zZim^$j)I}OX40L{jEr#uMlW^_{t^VWUzc!A)wcS?P4h0P0aHTJJAMmxtCSFvt&YVP zp0%_TNj)LWP|XdaLe0#t9m@sSUZ*AbhC4E|`UhNo$~a@*>AXB{9Apk{b1f6Xx{}|o zxv3Hnl4!c!`t+*sm-{lEeaxZ*qxH5c#%)rPkZ8HbY!E-mTNk3*L(ul8$mwIk&>e5F z1o^5@*IXYHDSf9K*W?WTdp){hr=qCKX?lhOo%xvlgaS*1gcUzzx?t=?N;&=bCE5IM z#=g%@`H{|@M`lE=pYO=w^n30KpS*KdAni4qnRt>zrQC2A(?~(u#Esn$GVwk7;8OZX zB}YTPZ+G*Nm#V4^7490=Si|ayltOzywG?Y*_LNqIZLzFjaoLA(va&17;xTpA9$vAQ zZa&PLJyxVH#c%Gk$%5o6E5OVbB&x9Ttr{r&prhkrK;hV*WInVvM- zWGfo6q&uv!vdcUai##64H_W;@_p{N6+W*z73BqvyM@M^OQJ?!SUHrc~In%JF&NK`M zu@n)vxbV8J|UYt2Ss z`o8vc>gP&6jv37k3F^^#ma%R1s_5C9@)y<5dOTcht)ZbAtCoV#P&eFA`{+kOc<`@P zOS1RrOX|c`4|kQW8J8nYvQSRppT!$U!a&pn;%zB#(FMCcYu*z+7XJ0`7p*t)rY3Ek z)4#$b2JFY+th-U$6;pf4R;ElfGftfmw%)xOJ9i{rMCPO;haS`3-oE{BbHQ_lwH^Rb zd-02MkHmSya(N<#YQ*GJ3)>VBP)_1$JapL5c{Rh7DO^3qb>t{2AFwu+o3-hXe4>|^ zmjE2qJwswAxLxn>L+M7|A3mzL7dPoGUA>xzx1IwMzs5Q9eVRv~;_ukpHBZ(3Xzzk` zQD5T&ot15w3qQP!X-+1X|y%eh6dBJ$uo&pNYMDtAg#Bzc2zVTuFJk z+7d&<@@6~yzB)_<3EUP99Zl5&>EE9S_{lirfI65YNQKAqJDS3@jxW|mHz+HFfdVPftp zv+(s~aDJzYdy^TVwz+GEC*5y^SinCJ$L;<*1QWzr^vUem&OQe7xBlsKeZ8zy?mBgH zu8K;@P>TE)@9szt_rLvdrH|1Z*??z4$fejdtsibA0mGB37LCUTyn2S71kv6igkb73 zNbniCNFayEUX>?jHarDXC&?g*?6wcXyjp5lhS>$L%$0>fb&82SL)kACv(nzw zUpakxYRw=&u-?|U`}N})ruEiH9YMkH$o*y1&nq3sXB&NBC$s8RaMIq8gKK)zD1Y)~ zquz-Tmu9Jyq~HOH(ff<$a^%%R)v_G1@$F}2*Vc-urkvP*aBbRQ#vZR$Wwyngcz<}= zs#VWMKnZahPbkVpDngYkWURFz`0-^Q??||+1yh1CLCnW6*Js8vd0Z7$H31(u`Z|!B z+>@#wYjxG6ni4(_Bjpl*DbMtaPFi$TnwvcfJ+lZ@GjF}eD=IRo*9he#Mdl`j9Whha z9p`=#Za5Jltvp}{HSI4F&UKCAEXIRNfbr|ngTNtoR(Y%$-sZ38VjsxP7{z(!A%Mqv z*Ip??2%8JVO>tj;zcKQ+IU0v09 z^u~gwKm<^h4WCcV>)e1e4{iH#r>lH^?=U0I)RV75g{;6-QeSwV6L;_J)n{s1o;v8LFHhu8f+LR3Bqn0gMQaA!5(G2`@ zY;4r92hfn!nBejxyQIBAT-uikNh1g@W4vUD-d4KphK|?q(E(={m_otb}lt~L@P`E9HH_B>aY;G7XBM*FRWs-wY zVNkw|Z>@4aJRu=LMKCTl`oSpB5ETU5PZmSg)wLPRPLg53Ui^8Z&<Q-3eYJx*ptc8#ZtqbOY?634&z8$MB^ArfeH|o zWhcgm954d(uRqQY9zz__6*;zGqzw(XLte8Di8c z#pH57>_B1iu@nXNjFOU)rq&owHM*ir*ZJ8m#(VuFK7d>a4GDypy54;rw%@6_ZHnG$ z!O4c!^eS+$dkRi4U`2YE{gXx&JXtUReC6t@9~Uyb2u{BJAd_}o-PsHOK{<+OS#H3f zx~Ar%>{yMR)m2w0WBo`h2eb7RpUr2g2$QK?dsf zp1n@R;E?^=UnVWYBzD);?Mp33TjpAhG^s+A^9_z-HyBdvX`f;`m_#lHBW(UEb91dG z!5kN&RbVXC)%`XwFuQILqyg%DBRl5B@U{WQy*2xb)bo|^J)r!tN72~Z^Pddqzpe;I zD+!CUl}aUv&I1yqfgK{R5y%eEFU~_62Xeu~jrk0OTcAdJc=YYYeJ4f_k_>26)Iht` z$be3dg;?i)z@TgNM83GFh&YOYEE_l50I=qxb?nTnTKc#GT1a_LpbA!d zF_QTu40*k@b6g%F%Srr>a?crQ0FsYH!qL6->C^qVmp~6qL6`V7lc@%_%8NY+D-?V< z9ramh9x*5mXUE2ZYfP|s;&G3oEbn+;DOjs{YR)ny4fO*rE;gauNcghnzp6rV#1ZqM zRY75_KOX{+np2>I(JW*XM?+rY7iIUvABwpZvSR^OGBz#9wDcH(#4UvtApHTlv=UgK zoT3?{Bb&|r`<6haw-DuAZz4oio8EP-iaw6IRh{H8tFOD!$Cl(_lYdA@10aDryah=CgqKiU5@#fUnfi+~x$} zVT1>3j$zm7bvUOD2)#X7Ss{UStlg34*C{&+0(?qFg zoXF1TMm~ByF#BM_R0g!0%aLh36?4s%{AxLmTytPn$+B9R_497}WXHsFK<{rw{?)Ka5pJMUy4k>ELt_%7#+5l_U6R z#2yZ!(_4flpVpfv-?z-l3il?6J8k54*P}S_aAbnK$oXos^p0TFRP@Q^rtYuq9Y*6I zoUhar9*0Uj4(vPA+4*MW%`a715PWi~()|bIlFLZS6upy> z32}43H;LN*U)p44arj5m@4q=BmNf3PxqWvsG5KfjGX05LTnH0)GIqvKA(y~vz~c(V zA2Ec(kUFB@#pX;q_;g-ojdGyW=n?!+AQ{N52X+EK8UJoQEz5)mj#L52+s>RjN49*g zyv3l{hKRBTK?;3z$cSJJVB^11`rzD|SVQ#rcLs3oije`KqUvdzat=TO@vf(Cp^!F$ zgdM?g{5$U?zJ>`4`*agliz~_q1tPf%P&>t9pGd=Y2qRxb2=0p)as@)!f_E=AchsaV zh79Qs>`Shdw`{po<0tGKVo3xy{}A_dZ|>k$^nqAzc3I;VcobR#IxGtN-_I&ktP``| zEc{7wVJ|0cucQfw?qD)0;)f~DjU`Km_hC?r)Wey4LV}rrd;2-FnT+s<7ABPM@7}V`OQU-NAI#mRuK|mS_=@6u(yW!9c zvyabzp5K3F&6{~Mug3L_wcwmj-1pwszV>zP+b|U+83J5tTm%9^ASWxWia?G8KM3~%a+KpKp>os3UPaj%LoeE6Pn7!^$rO(=JJ)JJ@2ok4_G%@%`L2m@X*lEACy=RP#>W9j9`V|&Ki>;9>K45-=L?%Z$l%VBFIo*zl-aS z`ZCw!|NqPXUo04%I>o!B(G6EZdU1ux8js>pYxTHWu>SWOc<_6Yg`_k!DQ#^FM#;Y- z+-Xpsad-bQ_yV@8jZ@Hh`P!p!vf?Uyc~-<^aE-?<`XZ6ag9rXCgQ(xXm6esfDJnX? zEwmXcxbH&OfviZ!@;ci0=BD#zstBsdvJJdIwa{ zI_l{Aox6N{o@?epHTW?P9ER2jX6J&^%pJt_cyW1ygg$4(S6#DM3va?xR zcQ+@h2g+^6taIG@zsOOo?j9ay!MD0n#YA)_FDL1mY0Y%{Vc! zuvmSgASP}nu|y*a>FZNzy~V?GEvb9a{bDK2FXq0Tek_O9!?)D@$b$p3{nbILDt`lb z{oBf^T@VPgoQCWg1(=4X2OE4A{g|+n0fB)YJMAoT3JT6Ohb^&9MB+#OjX`*%w6qFS zbv|-(a+PM?aYLG46{seCPi@A>$46jYo*OtJrzQV>w+O7Smq0^96W!~RYHn$HA!zn9 z0PD}U=Xmt=^tfcK52{@^3Owt$>(64+)6?-eGbSe|Uk3-P=4sybJls??HD%ge>NQ{J z_$Ugm-rU-1FjS%q`!nge##!aM@#Mh+gtGYYJb$5{baO(>uK*)Wy`WuHJVSwd_<>Gr zqY`Z2)3OY{c1sGr?7Jy`G>!2jmP4-2`G-Mfb7FjBO(Gzkgw-qcL3 zQZsO`iqkYr4-?(`P%%R`>QTe zWto|ocVBdnAvUYl3fSpPD#mWi*bRPr{^je}{t7z-VVBkUAF+=j$bT2;i3HFDp>|SXAvcRsa=L!4=NoGNJ5p<_nVi}5-bgg5 z5W@O|KL=6 zyqGi&SJxO{+S-bO3&U=~@(PzLr-~-vQE>6VQ}4{*U8CeR!_U{LFl!Dae*OA2;vKhv z_^&rqfz{O_u=Jmw=c-FTdZfpT_|@7fg8t`tcWHZX&vg8U!-qT1SHoLn9z81dIYp)H z6(S-W!;TMZ&+;^*31|dVa@9E}J(h0J`5qZfy3Y}`u6bgN?vp>Pt{B4>+4f#Yh32ay}vDbdA6%jt4~a)I1qP4x z2v0Bp&EiOf(~=TmXR*6;u{#M(&~1}e;^OF*vcx&x&!0cP+fJN>m%R=N5ox4<5QKaE z3NEhkaDg5KYy_uHxo*Xv!+cwGvY1!wTblc-C8q722i&?puKD@-sj8|LjcthTwB6F6 zmEJX|*qPFhZXU(NZ0OH?7oUxcdrpQZjZVv=4+|tM^fM%{u`{dWYknc1tlW#=Ya>A8 zT7APmE6q1CgwC_Am>Xb^hvgBMUe$LKua9@0AI*f&Q{FXhzK${d7P-G)yLlHD*Yx+N zN8YC!75LPA%O&TB<4!~-t&uH&I7LM~qN29zer0)QTkMQ6?^DF^tcDv~ly1}0?=omf zq4Cg+T9+%Vg?H!F)YQnz%Xb##dmry8B=Uuon)eE$_ayRL**iH^&qPYydgaQ5^KEDi6u)p?d!uJTz@LY&!0ZIpKZ4mp3s$94SzML z_vN#jq$MIE(s!Q;!av=eZ-37aufO`_@-6TNEysJ#>sLBse`*-~}^e@wbFTY{XX}~#c#SPAP_q; zq6v{ldEb_{GnVtSVv>M{sQA5mF&!V-2jJTRc9UIp_2-Xa4=w&=M}I!uhYT_~*;}bO z_-nQPw=4o8gV(q@w6o`Vp}rV7w|*CmU5$epsT2jbesXiO^rugs1bxp0mwH}YHrynR zPHvvK5q=%Rz<^bwXVp?S5Ix=W8|3NJa%(Nip*%T&Hb4*psA(KJw!LGgvnw5qzi&r(yt6R3S-o`| zULuBB{+`pKLhD_KHnX8Tt*$hQG>G)yU*t%AVe8pb3nc@wIkdlrYUq0ep@1;hvOuGd z4i(EO!Y-c-e+JYXPI}$gLVq=rg(+Z`xc}r}@LOu?g;}ZMp{Sy1M2ZLl z8{4@@ccSHaY4|_-Xj*wgBwZ5Y$EB}R5K(dL|N5CpYuD8@QqsZIIMQW06!~m-JRHZ6 zxWsRX2vo2Ap8B7Ug}uhyO|1{W>Rxi2cwr+JqomgW1Sn>OOV=NVj%Vvs#J*wGa=xAn zu~1%fakBO-SG{}nUdi*hUvH^+3?D>_rG?5WU8BIcd)I#cO0uAl3;&J*uK%oI>1e^R z`}zJbw^uhFcg=%m&pym~9BxinjFsDz59&ezlJW7_nV%`B-ZX}7sd&~4;l`_52mpJX zT^)stTF+`jLwE0};|~=CWy%lkCy}nuJ#Y|ooDZE_OW-xX=e(@)>GS6sV`t~*Hw&$fDpZcOvsL#a2#N#+G3$>&9hTFJgt>?b&5iJ`VTV&zq&!4YexiWor zyvw0k+9wScNv7Dv=J=~e0+blui)c1o0STs zULG%{&37loG0VrQe11$&Q(LQ5>**5AH9c(Lm(u>8h1YIUREGU8yban&osWoOBHz#9 z;kfB(!&L7bITG%KE33xx6FBtV4`v#Jt`ZV{wVSG=3K$(kT@rZ4X3egW`1ziiw~voj zk>SthYoqmk5&}tY;f4FNpWcE@ju&?MHs=kv%E-s}0pbkV#oMd$N%|_JsrTTagv%-! z6lG?EI&WZdfNyvQ>!a^y;`yzH`hGZ=oSmJu#c|UE=+FJhQG?R?=}`o{SeMHCP+42# zq?byaXr7jd3$vpbu0Oe;*TEuvPR>f9vLb&)iiF?!u30%G%Qj?IiPbRIw`VyqMpLl2 z4N^p6(z}b@C{8L9Nt*%LjDmNw?!;&)f&$hf4S8CnN87FRE5n5b!NY}6{%gGsON?7^ zQGDr(+bmX4MXW=;L z$wkd$hyY}D6RjVa(EB1wjDUMUd8|Rv5ud{e4ewqtuLB;x3vbAtxhrvMSxU^JqREv` zOFPqnL_3pSTTe^P6va>1d0W@+sOPzlR-(cRMV$h$@LvAO{!O4)3W+pIe z(%@j*J}aU_F-NO(QL)|(;Qm>@_8{>EVs*GMYQmO9Sokk70w`Q)b#?VzJh0bNU@Qor z1HXXm(Vn_)j>|#3p}8L~#Ca@y)c9dPgAVyvbGljm-Ewd>ws0ZNz?Z>pvIh9}_LyD$ z??MBKouyvot;yO#cN;o7Ix6iefq{W+I^`U|M$o&+8*sS49_AiFv$`bUU4hZNfJU=75aKyuUfH&Sj9XdI=Vo+gap4zk_apUOpa7tb4K9e%J($wb4 zO2SNKw^@^I1qO0&KzX-Mib&`nC@4s%&Ud?oVr8;c1RfJ8n_=}&{@?;vPUa^cZZ1zv znW13l{A9mow?{++-~WE&@bF<(>$5`r6zCgxjT$kbT6r`L--IaYPGY!6B7SzQ%B`Y` zx{|62rw`p@XZ);bE+%_(#>n>6uHZ-iT1iq|-0+LT@{drnASfLVVv%&$ce>}gt{Hi`6x=PcRr4N}7G(pxc6@onjuIPad?u8C_$dh$mB;Ab z4M!)q{iD&67ZAL+vGB-E0W|>simgZQDW!_aL8dK_6yE{}c+nMqH};Q{7%VyJ3Lm)i z5+N)TvQj<6QN{mTt8%hnG&R4a{pI-~DKYUYBT5eanvvg`K1(TXJ559qMJ{XVmcs># z($biKc%6OW9xGm#5LF6k;wkWU7em~-(o7M_5^3TMeP)5?X+i!7E323!bKW;ybS#Oy z$-*w-ut-k5VuyXzZg#lj9Brv$UaYWXnNL2V8$$1ZPcNPfRYVOCUEgQ_dAZ$G51`ie z_IBl_7ZkK>l$5gG-lAxi$1C-aV0Z7{{lNNkHn@k`@$+6OGo!kk0^ioLRUcx~ZwlYP z@^_hdyH$Q# zwAKu$NHVOQQ)K-_^-O~K^i(?~6NTenu4&-2YJe+r-bhK@>vyD4t*?Y{jfo#93dP06 z(vKetmt$dLt7a+P7|Pc%f7A|4LP$G=kjLX5hkhP1ZcNAqFkg1;z9M@ zg%ZZ&v15ubHZeitqInI^GCOi;0F4&Bv8g+79zouwwjb2bhYM6H3S9PO7w!KdURI1% zt`$^M3RqJP=4vdpv!tPFzW2rPQiXTVOj8IcCFQa^bRp)(EvSd+rLlW3R&KwUJor)8 z%<(Tm^M}1rtEe>vDjgw8(FJ3%BO)R??G#;}P ztU09P&^C2F4c~i#$;`haZ5PbqW`npa1?;a3p8{=0!6=l`W+2+XemKmbxVRw~ zuYh3#0woAQKR6eUeVc>h4RCvHof=q?ApBcC;c+MX-64V$SvF{S&vVJ07Q2jqmOuOU zEUaSEGvevz$G?HTx8CKh-6J_aJ^Z&s0HI8`Z!?`LYOxKm95g(2T^=Q^JL_K!FA2UK;5ti=B9fItwzfrvXrd>q-e<*w zgR<(Xh!364Ta$W+lHs90vW;7&*9sYw>2lel^S+?;t=Y!extU3?nTn~r0_l?X=;^ux z0Cg69>1dLYl9)I+PLOV;Zd>}T7Z8fmTU))56|`gUGE$X}3xZi%Qjeq^Ycvdk=>1;z zq%bhItXeWvvm&&o*R^&XR**^arcOGl{U4*s#s(@fzr>Gm>HfGVt}s~B!X~6``}LM4 zEIhoiyZf!{#$Th$Lq(M80gcW|e>F(RJh)Cvr1hkN?8U{WsBgG~txDUi8 zD9P4_T_L_arB_I^b-8ZLoTYb_iA7$4@3QuL$X*MDQ3C>b)ay3C{B+mAU~13C=k#Hr z{`6+*_Q?4ux5R;Kne9X(1o2(pGxx^EM&KE!D4L(2$8SA9+wJ{PUF|gAM%Xq9J$gRd{$A9BWp{*QuqZE|y>R zpm}GS*tLd{vY?vNj~e_Rs|8?o>WUR=iBo(GuUXFzXSQFmm?<^+g)$PtsMZ9tJeAiUvZY!3nOQM~I$ znd6U8*~qy?>@@F~V&aFoz~&e3flvTFHHd7$&ajgNY(A-GJ`siPzvlAdlq%8(cqafb z5tJ>AbjO7bd>Vl_sPf?V{oNP1R*^AQ&4KpGIw`K-C-MiCT~HNK+l+{gj;4BihOS%X zz4!VmDVNtd)JZBqd&41eHc*q9xCsA#f5mG)9Vs&1&XQjs>xd3LU=zd~;1C0dg-rME z^{+ZgOEZzaejTs&mfr?fuNp97o(!cw(usMZ^t4pJ3lC5OO_`@4EXBV1 zWHSrFN(jkcT!jhyg2|%PP-L`thn~Xxjmpt`c{Wt9DM;MpPk6&{@J{I4pd2;S{Ta{2 zz@?a#wia+|w%eXv45w$*_(a~o;kpv472TB%@@{3S*XFC`mrl`W(d>>#*SgA#th4 zVQ=|qKtO=~<(6?D<7~;KAHBXWRoxj$xlOfqj!N{UDx&LQMn(oA@)~Ol6?~9ZLWhyj zknrSa7SDZCC`h6bL}slvv(l#k+^Ev?VXKbYl-2WhF{2>T5 z5VC7hI?~ej21{P3WM6w$Xe+L9^gby=65g7zvg_B|zJeQkw)kTeI9&ma;~aToki zDY?+04!a?{i`wJ)2fd;ghZ9+0smxZ{Sg7xXXjTx$ydOwoKa*4cXD_v*`JS}vj#ao= z3A%y!(meVvIOY*KIny&}7Z=kDFI@O%*PV$#W{@ScpYk!IK&H4QN~$oiugEBXmBn~@ zW>S7|o#Ul=p=!%t&t{iwJP;|G(OHz@^L+_u8h-|=YuqaMWq|?kUmw|R)`?_wYq$Rf zDrp~xxFCXWgTxQy4ODC`&0_GxV&1dNbWzDFC>U%=F;xq?P}qY&bquZIjb1UX%ADEC zrBoAWDo}*8q2a;F{+bNHD(FLRuV=y=N3f}34;AoB85SG=yKfFgdPoQk1W}w#R8-Vb zZeg7<S<@9m-FdKz$ugRz6TFB;DO%w{qyA8lusbexQ312r-q~SfWo2!$did~R=-aoot3vN%V!$P8 zLtaBc_fl_DET{d+_fcF{K<^E7+uxsp=GN{!|E2 zFPenspI`~ENl0kcjq7d$R6?oJO&KUhTxh7MTyvZBVDUTOr-0=EH^T{PDSj)gyWV!{ z&j@THIt6d<%_3bju~xE=zn3)H^b zJUs7UdGFazKTyxp{P|Te38i(0g@*QBG5k+GNjkjXG$^RNU@~|3>xBR`wu9Q&1zX3e zS#*DD(W_VL8VtjqdhJ*?(aGWdwhj(v5mWNq zIh`7g0{?PUp~RYMeFAUF2PaEOOYd#lpwNbxKPEWgm*FMYr|4= zzo2$Hn*4KvZJ)M;FEaJw5VD@hZGJ*Qg5!HtwV!iS%6-@bT_LizpS)0}v2Ek}C_u{D zZq(q%(DDD=p5{X`K6l*}or(Z;qL1SW|1`Y&ZJl_ZJ{j)4bl+7(J*dk+=omJlG%QUp zpx`E?_kC$0#8{#D@595$!zq~ zuJsF_(~Uh_!{~9P|9oy|F^Ekquizn*Qw|Cd=1D9ppd>Gn*fI7z`S%GDwXY5Lryf+; z+8-4S4u+Z%xS+vi>3*`(7^$J67IFIZy!b%s%>w4x3hEMXB=%ZqqIcU z{a++nf2bLuZ8krgYYiN1PtJx=8#)_suo0M*7K}&HU%_@3#{QH7LgdGX?|kmlXkZpP zHE(65p>A@ZhSFbukh!^0icx=457N*tuA(OX57z1`y}!L^+G}fxO-zwV?*k9*nUjN@ zjkrb;SEo3mtefC_1`obcd&CGX)VNon2ViXOzlY8m&LaB2MX*(4GKs-DyZR4&1#9oU z=z3bOuMg-R!}|}+llzAa03cR+uU|;_=b+#{xu-vK@ucqJ0(rWnQu1Z+de}S%YW-%N zSBHX5_A|UaSf4gR3OLfC;?qG`QnJW8VRR#xc~Y7y3l&GrY|=7KH6Exk#y_huZ;1*) zrs0SP-lZd}DLNFNppH&fMs1&C?X=;KEpex+xL^VR8K$KH)Vjs2dAK(mZQHMs&G(|# zTPRKbJE9Kso)K#SY<$Y;5!abUEU;DOfw6(a;=J7V>W4f<7#Z+7PPVIGm9Uz4(#EWD z{TT0etYAz7P#ys{&IU3TyaD|&El@#2(6&%m(iB28Q0Ld`50SyX?I`sNoIGETI2u=;u-H?@)nWC&(6-M$iyC-m(_R z)*z~>&5$ESMV?QxFydfiEDri3Vk)Wxqf>w0a7%zM;$h?a zi+N2;)XzSe#}?eU`3_u(B9C1&&^hf#>%d9@O9(8ljv_H8rq?4QBe|)(Y;0j)zA&}! zg2<$h3uU9guASuNUp^nbDWtvC8gYAmatRg^8cosD^-_ft;p_DDX$m4+$eE_A`1sDE zjr&P5(oAFCy9D2@uM&xZ9}mSYrdsF)V*I-WsZ12z0%+)sO-&d;YT@x)mVbZVMj}CP zd<~|)66g{$E)EV3U|H(#*FdLxTU>l{8-^ED$PEB{b)Tgpj*b)7PCY$=Zpv;he$Z<` z$s|x_smjH`F#f=<5s6YrkVt!&2Y^QE6Vz`6h)(~l2KrD9Km{-T?h0kBWUQ+3rUM3WW6bMdy&cGLJNU(5YNOn!(9kPTl&w%|fg_fP z+rx~9W^42hMoWf{?S@>_MG(L*>U{2SbHd=rGna1*gvH|DMXJ-ci_RFEB&NA1Mq+`$4iT|;#M zjP4G(>?98QsH}^*1@_^eysOW@HQaF1)O#E1^e?+R!Gcp>U0=g{`t%)3)Z#H|yQNYk z3H0yt-hP(^WmdozR=~l4q%Hv`EHqSeHp$MgliYp(xuD-9B(H7+s){s|aMxm9y^5TF zZ+2K1YD$mtk7UcWzF%2)-L<-ZpHe{Kv(KZve;jgj_IPRL;?$_^S}r>=@xLb~f1aC& zA-c0vQAI-h`(NUM@gJmJmhSC=`pmzJ#g5dB>WkM7yP3JCps7SpPEQ|N*hdqXm$ zAnTrE>`_>U)t>PDf~ zV?4%Vw_##JcLF2bRBo36Fy`M+zk?9qy3x=}Bw+g*Mb>4dZG->wi^p%%E!0?_<35Qi z2XL;`5;D8ihOz>nYY4Vc`>K!u>KECaXQ3?65kgW%d?O`}-d+01(^V)YX7m%CQiNRe z&xe~aYxD7lBd`^BTIu}+Q^BK20qO!`V|%(}pe86EfJhZZ4~dC~U641ypQHErP}kjx zV=b^|NfNCSXM#Q*%c=A7@AsU!<2O{i*=kvYfKBGp4X@tNi6w%@Gt`LtNLqKeF{sE# zl&hW()(m;%Qkmu8EI@<$hue&^JD!IEfd)%G@9r0( z)@`HXE~h_yy1BU-@h&;J3sNmdr=q~*63ilKi@tvoB_@tDrbKR3yo)gwuNa+Ph|75S z)M||+x+~fQ-4G-YD!!N3>d$uY02Y4r_C^5&3m@2xmA?fH*3!%f4PA4e!CL-v^<-b3 z{)mCG=T<9b11L*)05kxp&0sK7fldXp29f8aw-u%V`b+<<$?xoFp(>5t(=b7nB%}Gf z`i@Yj_Z+Jsj{vFyrtPW?jB%6e ziR-s&Ft+NfppeDfaO}GI4lLjgw`3xb{qo$!hCk5(VLg^JLNv>*6SOfON#E15ydy1> zB~hq7i2sVqQ{+QvXZu~WYYk&#Nubx3dLKKY3=!yNRtB<&S|TV|?%w^qx&u`k-0Sa_ zSOnA!leK{3jOuMq(U7XPwzg0-!HwtS>_*7|$-yBw$)Z=6dZ0o3@s0L60$PQ5aUWsu zoVZcMeyqaI9F%MjKv07dxt*lM4!FL)JbvP^nJ+z`6Aynd!G48O-Jv*LqoY%bq7y@X z9SfJN2nCv1JYE9H5_XXXSgg7u-l3sZ9d}73t1By?et-EC))6|l>Qx6AW$5|!tw51f zE*!kU-QK<*#iRSDV|FU}iNG~9<jPd-6Q=MB0G6v%O;*E07N z;`SU8(r&Nw@r&945#|@fEj{IZ9j;vCII zNg&)eE0<8|S!&j849Xj=xOY5MbsgO@$d<8sdLTv_QUetpo_Ef|WQ9RCt%(5-c=zIT zYoORf2BpS-w-`V<1qi>3W0r-^IP-}rmp}PBhrvBr^*5!NSQ3S=)A^7!HX61@?v?pG zYW@Q4gDqOkGw_~aHeq^wv=lY_^uKkCYX8$Qa^yXOVLO)<y5x4@SAwnQW9&I8FC*$SIla)b-KX6xegXKQQn<|7O->G{Xd&LjO`wh~&j?EiL> zsGbc0zP*q;@+Jt$8a}lZ758CcZS;9TXxnqD$DSirf36&C40O;jI?h2m36^g>Ij6P? zL?+B*Ho^XARyr~RcELd2|JhEWY(yAigN_r%4QGR85D}r8FU~!|#MA9PG|mcwwI0XM zBJc;UlnL<)Q-iNTO#s8J5yqu{Ku)0@Eq{)JiJi~DZK!SskQ2AJue-XRSd5flK?f8@ z3WAxmBw$=hA^PVgnQ$ws&X`( zke(kx2`ux5SFiSc!s4@r?hHs)s32IDz=6A3TWhw6ZgTbf)s}Ad0451Cfcf+S)|4Mn z2%+T1J1BJMc?k5IDdc!lM9`D$Wbba;QfC&w&m$(Mf7iXaHk@R2QdKFrziR)sa^;b< zZ2}ZQSwhunfxT5Mh>2lFMlDIWg5#GD-^uXtYsPEyxR^UzTBTA&r)P|~whoS$%%G={ zMX5v4wC28h-c`LDJu9V4R}`y~`ZLGbNJ$>Ido$mNA~}Ad(pPx1JOXcaQT6mdGFKhY zK&ZI1`zw-#Q47^0IDXhp`n9|FDXW;qRZu_rmWkhV=+;$VkIDxpl4EpeO$2EHGOYTH zZ$%=oRPXr7J;D5FkJ&sc*|NRASGM`kwlDI=wHpLsVT-GDSa{HEh5kT?MQSI;Z<;>V zqTl`fJzr%)Daump<>oe*Sk_n7o3wOxXSYw4woImSeDcoM2~?wE7txU{$gCx;wu-GO z8NPWP^y5R->^7|@aeL{{elk*N6Ui^K%Vqnq+6t^C{iSn9)Ll?-R?5sMOP53qq1O>; z%d0RseHk5id3hnz<+pZMkmg}lMZMX{C7p}&R;mb&ukT9h;Tn#}g{(=hzDV(9C07xhjW`d%Piz691K1aiB+if%x?X%^qi5PAM1z z$8bx3*H?JgAaKH~KQye^;UZati7Zntr@Hu~U}K%ysbEp{J+^_xVwOF(15qE1ldxfN zoJl-}De;|m+FXPD057|ua5)o)OJNnuY6pebUW@5a# zp&zhL`zI+jb`ss~LbT?rWHjJtc#`j6t0FqtImHX}Jn~_+t%_OBvFHV%pk9D~(dQ3b zt9IB;=`mz@9Fi-ByiDW-932S*`j|N88)ac_gDd}Yx304p?kdrF8EtP$fi(AD-Y((d zQDhZWdHCzDg5F2k&VKecc%>^*_EuIYtJe;zVeAwA&FG}V)mFcq z1H6`-gA|4DYR`(=q8{_(>gWwAMnr|gQ~ucP+4CZkxTKx*>Q$PHWw99cyWyq0IXAIs z6FR1MwnI99KK47)+k&FhK$e4f>q`2wi_Yp;r_MhDj6x~m_16)05x)M?wz}HX-?z$= zj!CyLZyF5pTkC7Tn$6ItH|U|V9>dnFez-krk4*n*;6>2Gq?=_m%8pibKe%YBdr78K z>LD@f9*&XQI|j1F<{TSoM`0gdcElw4IU;PFvdRD3+k?{cxLL&b=z)$v?@L8GyCtjc zCrZI@X<+<^ed|8HpvTTm!9uN<(Uy3i-vxG4(RR-#x#YbO$*vVjb-&TX&z;p$DNp-m zg?6Qv0u7Ht@i{~Fu`V)9HGNxaLq_>wv1|cV6)|oxYIX782NzIw9C(NPbmEKd^=XQk z5!<$Rsxy!X3+t=m&(nkEsxSTLLhFe2HCk(N%i%g}ZVImWfxqJ(=5DS2@otAdhc7Aj zmUl4SDhicR_s&K?Gn{gaE#o_-A z`+iOXLaR%`HVO+Dp&0kqNPqiS@v0BFSe(mv-H!vYC7_! z-O60a^9|?qLPSv&gZBt0$ zP#Hea-bmAT|Ci(&qfbih5{uJ!(F42#IC2b{NB>tMIXt%-dJsZ**(0*#MN8)$Do*s# z+&SX6l0*XX>=?9XvL2sKiX~xJk-T#+{zK*Jw4=GYXLnQs=+ok*Lj6JqGv&AdKvi&p zL&raC&&{NIT@d&&=*+Zh*G!bMnP^8kR3XhNc`QE&`E)!Y5=}?O>5Y%4Oa8|0vMZ%N zv{NsdJAW$e-Jf`#b*Q74C|dxwDLAu2RKTmYj^*WwC4=l7ygo4)xOjbJa3gZ)@R-#1 zz)JN3=k~75NjN|Hdv@Y?s@R96kHW%4o}6FZKb~8rhxRch7syzf%MCHy=x82S4#QHZ z_m?vRl_I;TSI3aq^TX$_ z7hHPUx2y%?#c!ngkfVGh>dM#}52J0y`@*i@11Ipzx~JQR1-3U=-G1vSGTuiWl)ESB zMp$kev@FK9cVx`Rc0fk=?dY0(6$e8f3-W}e?NLlj7yldXjOYPPW`M}huiV0mYNM91H{SVI#Fh>i2U9IAY@iUsvPG1Rb$d;j zbqCCUH?8Vf>G-48`*0@zO(^Zp?8VRar9xAMxG)N@M}2nA-y&~oRtkMZV=Mh-wb6O0 zf_MJi8(D6P4_C3|tw`J3`3Smf`gk1MH%Le`bneHC(VU&(TjG1YHc;wqm{{z2EkL@g zU6wn@Y?d=`Drk@B_yCq%JHA@h!-`GUe$|QeE=KCwBR0IM9;U*IU`P4KAb!r0H=w#a z7_o=L9P$|tgIn*1F7r7(U=|dl1cd=5ypCsDiH8ZoF_oK)jre}4sn}S; zH7(p(=F>|ntpPoF$@k6_Q*gO!-d&7$%FpyBz`2^;rOKI&_t;+A#jE)Y<6`9mt-UuY zs`#R5TfrfQqhiZr72I$Th`lq8n}wM<2%Li`)cJ`>kN@W`Ub9U0;AmSW`#GNLx_aLXgz{ zXvr600v3UJl{1E1dD8Z$x?k~*V1@>z2f_gzhrF6DRMDD}|+#aCkXWy$DFDkXt`L zoEf?6eyC^f^jE?UtE;_6#>XMx1#|9pZ$kZ5qATXdCY>pcgz}Xh|Jj4f@Te%9o1jJ^ ztp9!w`|yE`@z$*yttjaoM8Fbg-`P`dfr$X}2tHBt_-rGVlj7JbjBX^w=qCL^1!sp` z@5VEt{GPw5Rw-O(DS~Km7j`GJ5irk<>sOHO_~OV?fd>*b!`fbpFh%f5bG6v0w`u8M zX4w1{u5GJ6+X`NoGlMB#Wf($4fHjRe0)skA)*Af!^)(tAua;fZR3fy@t+zx)MRVmT z+Q}}@Fx;kWla40?LQTA0zGQ{b>tqnenzsMhB>I)i z%^>3W`}@OMCtFX6|5&06jR<`55&!QS?+}M9VKkni%?EWBmjwEo`s5l3{FXy}I9_=M zM3#AOaQv|742LL|`~J%T(RW|IGyUzg?){Ljy{oJnH-P=1iD!AZkRB#=X5gICClI2k z4u;{?l$Dj?j12AA|EMCPdIhqv;HsY-hPZAFu%7PBDTo?!B_My+(({yz%4Q`_kMeY# zo*rx|PYr!%d;MBdJ!bxu#dp9O>U060=QdJTBZO%53(b7u{WlnY_vriNE ziHEp`xz*3sqkB&cUcGt+6SU~4K~&VK9hh6V0yAcQmludUz3PMDNvY4FOf15#U9|HK zcaM^V;~s?Ajg`(mAWOAPRj}rb=6YVGsbfm+e(nP2(y~?11ndNc!>?Dyyw6%EtL9B@ zo;yyT^uqVp#kb@4AWiBvbFqj~+&kWA=JZF6Mu>~2!eE{nY6{b2u`40cMEqp=)@J>s zFF;Mhgxi!NYz%-wd68xGSgB3Y=>BL%U}Z;3G_TCd9hY0`w4setooSDvI2=2WILKyF zl{`w(!{o*^U7ZVWTYMk3Ht&)H=1GqX%vy>)mhMzD3q8isb_*RuY2Zb`yJWLN+iX1= zT=Li3QyX*J9~DRaJSBp5$c*LUn8%+VaplT)J%a{9&r8FL%aN0mrIECDePm!feO*_$ z=0t3O?xMqDE8?T`zubL5tl_+rQe=A7TfqDl(S=F~unRR|KZ~IQ%{Awlt);Y#XKX*5 z|0=-%6IGN1VQIZv(*Qfcr?H*$cd6f#`w~jq%?mG$qjkYZXQB}Cp{8?h(EYpdNezp9 zz}5FwWSWRlcTr;AN^!92vAmYLiTd$8sh~GyFcFwJ?cFd_wjl9iZYd2Nhnkds?>e>L z-!Qc$W!Q1qSXBgBd#39~fUrwfjuM?8ZA^?|f2^D+&pBF8X7XpP95WPVKJ>uV(zA?> z7bLzol=v}Ut{<(_pG};1G5X#cD~6$5m}crCG?a*Lrj1JRCR-2qKTH(bMGg3V)ow{n zI-+to%Q|ebLn%kw=6 zgnq&0z4v2EzXm1-W-WP@RY{~DKdg4;u}Oq%FTJCNEpWEllCtog;qIGyiPXpW8aPFq zwn+eQrZ5^2t;=|q7>;r1d$i!gv6H68ObYkKxDcvRBYXktHO z(J}aoOHK2Oc#d4&Qk1PSH3fMmpB1ybz0GgDkwKG0ug+A_$H!A4+0@2d-P{cG#EYU( z2$3sU$Z3--3z5&9xrBL*of8pkHd%c+sw}zk-S=EYXhpBIMCj;+{RnVcGVEig7*VO> zuctdDHXt%Eb4yg*?eEU#QoQ#{ynYa!HD>O7kMz&C7s2)Ku4xvdYrCF=RI^NWf5XUa zTl*NttQRZz{D>Dnp6{yX9#1{Cy_4F}`}MgcoX-+_4Bv)DwLjSYJpQmdF5!*I>)KTW zl~y4G!5Sk)h3$QI7g!6N&MH6_JKUPDccR$8{m10=_r~j!ke%H*iGeTDq`95l&$5)I z>U|ewr?g6e!|5i#VM{0aRQZn+ys}9}0X;s4Jg!Zext%1HHb9ev{_HHk8I>=YKR-t$ zLfyPK^xM!FgYXyq7ln&^c^k#CmKlS2T>Irz*y|(F7orB@U?#b5@Gp=2uBwtofEMXq z)EKx(T0gg^H6Bvo=Swpo$y}N6zX)(ijM0NaeU*%W%DRol3B2V!J(ixV)U1OWWm+R1 z3|PBl->bUDTsM=28r{x4k9L)vn7+y??Ty)CNA%S7BuUg?ZSWVypd7VkvK1)HoEJDb zQ^!k}jVv+3Xl_k17_;W_6~(8$VsL)JY-3)&;Jxah9c$69tmo$#j>K84RX^ShjEfs> z;fzrmEU=k->osZktn{h9c<56p`R(O5S#o7r+Iop?is10JGnn{&S?W?2HlA(1CNBSR zP{dG5;%hw;^U!ZJWtVL!pG$uJE6fhgU(1wFx}{fJb5n?_f8AnF>rY4qdk8wumzis~ zMR^!Bl#$7?*ypE74EF2Hhri=Eu4ZHm4Kh2H)}1XA?qD-F&HUw{x%b-ZvD>YShc$yQ z!p3<(QpL-x*pqxqz32nueK_vPOFy-Uc8qwX9qqdhBT~`B`~SL_pB{X?KsIdZCz5H!u6W^{2q4Dj6Um$VaQL-+A8Q zJ_U{8wKV7O)4IwiA-|rVkP&wDXR&omysF2vX;*ETzzV~jt zP*-T=`()B=CijDfg4L6!0f~kCGYu;k>T$On^-$N2=f_(e=ffd2zZj zwzCux&~sPkZ5#jbY10m~xM-jF)pdO)B^u=>aka3&6fdAx)PVW$7=llqyN8M&MKrYH z)E)oAe?mvcbJ$xse!5?qTxXvc%1E5&>&*|;OIvS;e{_S#tzb0V<2Q|6Jg2W+y^R)7 zqMd`_(J9Y?QjL4lkNeM_@~!RTO>HIH!1d$66KFS%ppe@5Yj%Z06;r)XVCe+o$a`+d z`KTO&LX{i&U=-)5cr6O^6iY`3N$_&G$NLRUTwT7>4Va$4(sR5JVM+zv(Pa=tU`YIX zsVtk#j=-rs)5a}QjsgXyTL8@*#*{qXg5!P?OiT~XPZmR`sQKZq-O$(Brmm&f|7AO} z;-bM_=eO*2CVHO7bsD~Yu$QCTQ1jK_|IL_mvuWwiq6#r+zIp<;B3qH-ioM5T$A%j? z5HPba2@!+Ulgh7Ab~JU_^=|Kv8gf8+@efPR!Lw9dwU`YNY1|9PL50T4+$`;AFe+67 zf9t_wzbzdd@_1>nsS^)XRnNN)ypK=gevFPE)eJ7xOdjpiiv8UE_8i$t&*Nx%BEZev z7S~&qDD8-s)cq^eO9ttls>S1SmHxn@XKqSdDp73Xgqytmp-^eNBvahl0FLkF4Ui6k z3A$}qdQ#H&_lELLy>5UMqp-!3Qoit4TWj$}fB*EDUAGW!#C6_^+Ora&#KTeZ{Cq{G z`(B^)Wy}`kW_9Z*Z*QG_D4lBEQLMH@qPkcM5v||RN4P-S1;VnAdzkjrvyN7g} z-b15Sux_ZTA10nBZQf~(UHXBk_6!b zMPK_aVF35ThrOkVssz1i<|mpO@1dOQQ42q}>HQ=_KC_e>xA1w4WZRWqDOtqG#bP!9 zmi?Y&1o@(m!}D*Z<8_vocc_)D+h%w}a#V`Yt-SIwjWfcB$d2iE7bSymk#M+g3`Ps3 zLb_}XV74%t`PPc>0nx}v$c-(Zhi@4$j#*~tp_rlmLLSEmt`y8lInt5pVcm(jS@%d# zK3aXI#$~)!Md4Wu_vdo265&^T9bpIZ<+>HTJ;z(Fz1VI70z`rFNV>h{pa`DaE83%Z zyl)bR*j`HO#Z?>*C`ha@>>y*+>Q5d&{>1pGzn*S)jFK*K|6036`*-%?NEC2+*9{RQ zDJllFzc-qw+OrY!YzU!GBvo6QmTY5GV&l2y8`;rR%h@ZLNYr{eGV^iTUF)z3V^|DE zSPa{TmfwU9^(t(yQJ5=jIkGkJP?GS!zK}mLF+@7Q%}Usx=I|Et$!9wn$(Ffrt`ffXG_)7W;Pd7H_E<#iO-GF-GlKYJUCdl*g!(|4bKwN5pIdvw7)3g%9?7(l8}VU|xk{9R_3R(E++ImegK|GLGC zd~R)~b6m;EW43^WBX_v9HP7WIIt(IAZDv?ZJ#zehNw8yj7MC+J-p}Lfmuwq#bk}jv z9JD?q0QLDh>#n6q6(%xHHdAe~BSmO;G?XN6FFwQHXZf=PJmyxto$sfr$G@wr*Q|5z z3XRgXh&Y*@l>d5bwEAqMth1(9S=up*#nY3=tDL~Cmn_t_6K~=U&&wJ6e0q)qXanYP zNl4OdbllfCcaIxhnGIWBoUOFNra$~YN;?mrrna_ig9;Wvu+fWRL3-#NEQlfkA_{_3 zfq>F$K&pjcp;#!=Q3O6&F-`ZyRCmbGEy!W5XMre=t}E?qgD;Oj>MCd__IptRm$sMjIwt37!6!2w)v0dmr@4%g;fe2GZE$wf zZ5pVrIC%B!i$%dNHVNQ7x+w^)d^@{Zf4&{6#O`P&niQ+xaKC|hdp~8r{Iu+mn&G-b z1%+0G6pQojxHGP-u1<- z++W+Gy8rOV2wANaaCw=TZReldT+aL%!NG&JHd@2E(AI`Nw8Xa;9TTP}M#pM3n=%IS zk8mn>Ib0k6Jy^V#VoMCB+*AG}k@qYQhD^!Z4*Du^hQ@*+@(3#{wh3)D-(SM9!iD_~ zx-LPJVpK&%1sEsuZ6mrYJ!G)7qQ-B(_&=sMU4ILQ_Q-j>uRVFUg?GnrsFQ@EmVmce z0X=n9ZtpvAi&vCu9w{Ihs+(w4_$|zQJ{Mpzp?M{j@6KppyTygwcXeuRo5qdZ0AB+5 z>9jx(vkp$xoZ_AG)j_L2zuFM5WR`hllCsb5)+{3_kmS5rLIHidyI}{*XPw(P?o#U3bB6TX}QwGIi;U_R#meP2V1f^Z1DHXA@hPISsRZ zO!H<6^4?4+XXw+PTYNSvUy4V*-+T@+RLM)YdXRB^btJK(?(Bfm%o{#~&u}ms&C`eo z0g$YMm}_wX&rELhIdb?gkO@vfp8#4hSwiNLv6gRV*39~9;$PD2Y_amH_(mFZ80Rf6 zXu$ShZT>sOPA~mZdiT->rS)@^!c(hNr-eU_e~MTR2^1WkW@lE9TYa=9y&jZ&M&>ww zS$55>ao&G=Z}uPv19?q!UELKzA@sPW!NLK8!E973tcE!`~HMP|$ zt8ayExm6Ab8=9>bYlq0`IbTp&N$S&DOc_D?0ezUx=19)wL@Au7cw$3M3v``ARD4rR zx^z#U<=3e~KgO7?T6GF&S`@q~9o}zTsB6(jA;Y=H*kLga8t0!w-yee;0;3EV8f#BY zx5v<5i<7aOGv3GeEYS+_haz52WLCX7E@dfAkPDlNF3SUk?tA8df*!JYsfT5ne z^DyZFrNCCIP&!&<|Kq**81uL{WzV1XXE!G*8#x=YF*UtZrX5( zT9Id=I-J$h(+hV5NDDI1pFW*6CEm){x&OID-MGkU;_&@1ckt9@m&s$Ce>Adr>Qmi$ zPybA6z(?_-7f-&}zfe&g6gWf^d6ri6PMm2oTlq5UpV?2}dHG-a#0^X~$K4uSqfZFN zfAiT`-0*%djS4Zp%l;ThFxiK@JZRdF|gD3$GOsOU#M09)Nmtv3mEE;j%M zfC?h=f|5;&5s#Yn!Yxi`=5T_93|mxG)CRPSlZuMe^ud#$3#SPM(wj)}u991%A})>k z*H~KY@T4t!0oruEm_d*&w3+NF>&^4HTVl|Bslu{|lo*eM& zdhH~rj^>8Wu&)0@y8o~W3Khz6wt81=sEac=Oql=Cxfd>=Bk#VlO4rEKGdb2N{*k5Qtk%^mKFgbB!; z5jyi+ImzetpSt()2Lt!-M_Fl5-2(%?cl_6=_P=@-WyLS3kIBM=U3~YL?XR~yV_&4= zVQG9{A9;pb$+rS|H68% zetetCK+klQ&u^H*EMDn1zECur%!KTn-*!kuHW)ttrqVs=vZhr&#yef+^UlZJoi5_X zk88#I;On?~GK*f#!#Hd*^lbPwp9rCdh?7+BukhGkbCl+E_tk4psLPf=_N}dr+VkQ5 z(A|rQ=4fy8@%=P3ls4ZoBo7|4CkG(BVc~9>t8DrJFkA~&P@h! zElTqx*HyLeQ~XkPs65*EgUZi@31L)mQr2y3w7SXqe_C70>M9R z-s)1(u_tRGCR=nd3xA|DA{0FKoiURv39vX`j3b+Eft#uZ{WyZmV7=k>m@{gZLcqNI z>a~iHs0~ACvD{W)r5U6jxcG9bIaw}7Us#Xd|IYpCD4ZV?eyCiAB60RU3yrA|#_~e^ ze(w@<|E6#H8I38cvjtPM&NT->cplF4T{}?n*%h&vmyzd49F9hL{R~Cg{;{$@H8ODX zpzv`>`JSiSrBXlle|ePl^}LDIOA#A4uSeyQWNHqS-`Ux=aE!#4sQ z=1bHWlx=v)qmZXhGllf3Yx&}TA2C~DPhc9x#ZcWTcPK9tq8;FnAsEK{Wd+w=g8`&6 zX6NPm`}PIVF<2~ENbNJL&k5W?PVN<00)r&iiMfT7#-G`;lZN3~WGE2>K#V_*n8E#y zq|Y_F>cHzM%n`p59C!JILeMeia`nW?5O>-2*=2K)lGm!#QgrwQa2uSC zvhRxz5L7Ss9X;L@BAROcZdyN8-g7$=ln$)dX(G8#oS_G|UBYC}15bC(Xh%}xcvm(W z8Yp(qYM#_@>3HwK5HP)R1lplvUy2$x_Ec_&ZS}0oS&nMhweb_h5j)rK#fP_ETr95a z&_nh2D&5;Rj=MHg7kd)AB(c|MujiW@$N5kOCX+Lq?K|rd{MIv)8$X%x`us2n9=!_M z%eiE7`s8L3wD&zS`@(#fTkvEeAL`C_bK>J*h7NP90@HE^BX#w5FoJDP1$&o~C1^&r zSKbX8F8BJn<9E{@&2tqf(p%q9-cFOhctw>YFr&@Z#tZ09k5A*bQ zA56E^<%$xDB_yaa*>}f%@ju|t&tEi8oXTU2u&=9FtK7HDY}1=c{CN0A&2+v~{NHwY zFQ{itbmrdIUHNFvM_nd*Cl4;0Tq&=*NLKj)FAYsikEJ&58fYJ5vNYy7R?Tw$D>y?_xzNr2qDwrCQ|9L~G zVGtLWnn{@)>>`3DeZMHBQ~PHLU<^*{bI@lQ(}9(1oQPjrd>OeX?dtbeTJt9=Vi#61 z)nw^}o|oq6&PQzRnb@UM;b@a;LKy!VqT zH_4R0fXD`}9J{X0ke-VH%I&IZux%)9oUgX64Et6pQgR95y25!(gc`OzZFo4O>63w< zU*qY1=sLDlEYFZPx4gl{#8b-iZiT^l2|juxlNd2QVsD;X8iyE+zKwC_-(xdg<{d=_ z=AlQ@ev#6}w$22+TYl_*A`BF_*~-sBwkuq+^KNtppyI$_frb_`^!I zHR=U7W65%IPxX_c`xon2r^^Q7;mGe)kGOnC&PDLSCRwsa+ULd(*b^VM2=e;*9+0A6 zAv8rR^+lPiFKzHM?Rs@b()M84M)vx0BBpw&1#cA*OFNJLX1~{c@lD#YwD9)|q#S9N(?Z>4? zfdpLz&<45f?xgeMGD+L-v*|50bSrBgsfgUO<)^8+Fq1Q}734Ynmb5}hOzGrV&&?<~ zB>z!pQI*ulvv{dWC05Z!t2O_c7IMU48cb=BG2IU)ZjsY;^D}F5!jo*YDK{tE9O7ET z&Ly9FA&gTrT;Hr<^`s@*jEpwXfy`>)G5{ z=E;M7F$s)jW`+T#tMg!95i!~ob^k|!AKC4U=;oW#&MLv>{TP=(K0@BDi=W$(i;cQ> zDUsiE!KH(IoS(nB3Y9`0!u!ecGX@1wJJ$WpRIbvq6%^+a6-bk-Us^MAa($%0nCrJ8 z`XMcr)SMIyov(AWOC>REAXMteh!=JaWw&&aV|?7Bzdu3YNSzg*fBn19VbcVa0$);|jqPAgOLi=9#WY3Nf{k?^GFT7aT>;U}@aM|YJmNLp7} zE9Y)+wQ|3HVfs%Sg|UeiN+W0P*qFiRCxo| zYq;}#^`hk)&9rH8R_={Oyx00 zVIG=HZjrEF3dwq|be?!mG?j2;yOjHt?QVa4XB8Lyo36nM*SkCbPP4SmoH;^1 z4&83!#a2OHR^dtBijqspU%DR>ZV)r^+k<(?v95lVCCl9TV3W8RHyqf2C-~uB&IVi5`Vbt33lRUF<(i8-Zs6dznRJ%xBG{_v zlec|5WHZDQyvmxfVIU4vG+zH4Y|vrd2!>R_a2~0T4^~fv_e-#HRuGBH=4falMgKW7 z-q}K#{UA1E(u``XS{;o*SdP)hha6G=)C8AZ#&52mWDwq1&w*jnVJ@%1)?>U;h47=A^vW#L>|{KP)aD z_jA028)h?hcAKHvNiOE@#w4Fz@8NLXU|ltt-4@1i3YW=vX8aUG#`?tM&&{uxW0^-X zTxR>*7$-mR8V|HJ7*2*OQu%b%)$@NE##g@YUfnHmX6M{8E9tgep?#qaM>^}dZ!{Bj zSj+4@Z&$i-^MHr7Vec%?+mS#vD3RewTW5YexT!FQUFn{p{lV-LO;_9#1ab_`=0!cl zk?Xh=%ZfB1SL_j>)yGLw6(czuz4?}Y7`Za*V$GX3>;A@je?I_+PaF|>;;U<@JPtNw z0M~#f^l!@*WapowN<>JP=!mlfUWrFXYHA<*KKLbUo>FF2|BZTSW^_Ct%CjHAxLUBc z&h`5HZE0%KT!?G5-YC0rfV$Uq-8Yl&x@eF>bQAsM@T!KWi7SK5szKxcoONIc9s41Q zYu2y(xep^kn6Pd|!u3#NwIKL&Y?|@7lYz@a^u8tHU|8$WRT~Fjp8)jBK)(k> z^W^IQYvg+1XdrWamBpIW9{OnUm2}r&A*0`B)4RMDS*sANE8sy?cQ)OTHXOLd5Vi;C5ka9>mtQK& z*L%&RSKM;v@}5DdhhB+?y;E+S($<>iuOi6=UI&|WiDw|{$)k1M_KAl_Z!mYhzxO7w zF|H_S#d8`Oq55u9tW^MmMUdLHn>dX)U|Iq(b9-w;%C0qKrb0Dy`%w>XQKCB5{x4!s+r%STSQSstv-Kp2QY*nnAY~-ANZQNB+sb!VUUB9YDgFrooi1xle-m6qt zQc?o+fO@2TxE2TP!`EWXxJT=|BaaD%+)Q`7GA^P}1Y{i@R=tzrcLJ9_pi?Uq?o4V2 zY%9rk>`neY)HvRoi@*QvLGGa2@ObL3@-X+j+n9B&%c%;7Bmdd8pCwO4Ft7u|uO`FR}^6BF#* zzo-CI2XSbYQQq0Ifx<3d6Wc}-45M~)o>>d2GeD46h1twm!T zY4@s4GHb*exakUF0GLnpl43kGNQM{{$ux zVA1G(xbjLw0Rw3R<2#RUU+T`b$H>5+;k*pXo$3_eZ$$&yO3<^%;FGyp!oeW?K*k3u zWN~F>0(jbZ5{Wc@BOkhg-ShW7=CUz>^dA`N>rOfXIS2oI9SD5nfBIU`5C4x&8CsGU z2?@$RuK|tD!oqS6NI`(1I|U#~yab?`Q!VjW=mCOfxEYxDF+XFxwBf7C0ImcACyZONamqy?rBe+J$OGpQMDWK8? zGsP)!wc$KkKxgMZlAr;;S?l`4gaF&}d0`(=;zAS$BRi@pugNH92OxO_bb*aGC}NxQ z$VNFE@4=rNav5Crz*PoR@+XrLNiI1jk6BC?*%Qpxm9ra81-*#8c&MMe`t_?cg3`Pi zdG;aDr9tC5@}+37AvZm{Ab^}0ej?ThQUq#Wp12s=TVTr-BmrZEaf9r?Y6=e1*0)NS z>^xw8jy?nyHoSsmf?D99>ow3&hCu=31od*}B2m1O9R{{6z=~#jAd|rvbh_-Or5+Mq zvptpo1|0z4yi5haO=e3QiPH96jc?^$-^08(XazP_4fr<(ejg9SQB?>$6Tx$Uz9QO7t zyA=Rlu$7gSi{Qvt3U}?I;0p9;8t?8f1$p5H_AxQZ3t zDsK*~r5Rj#hJ<~W2tfi?FG(6JsAO2nx5K?nO-&$w_T-iVNbSkv$E#ew06X)w9(;U8 z%Fj>w0;%9rH}cn%L-5+QKt-97?Dhw^S1O=PYXMCd1|Ua;T`5xLJNB@b0($cD^Nob{ zQYQSSe+O_QGUqXAWX~4WjVwLDjRTKZX=}9{K9L5v^CcbZ$ra@YuM>|lnb}ApePWQ0 zulex<2QBiGBH!g&+Y;m6K5SAjbjk z+L$(3?A=)7ep^&jGz>J^E>PN`UYSgk0v1LK&=g{sZM`{xaHt4XP%qzF6M)*le%nhs zSvmi|0mN2jZf0wNgFN23;vLwq0d|nFQ_-Di7y&^rUX($mDmWblj=GGf@mCs?$&GnN z$a*kxa1c3%-B}b@tt=LY9S2k&n;y#W@Oiivs6T1$CRAR7e9|10i6B73>BID>%7W|v zN4vhg+LwbdHB>qSSA_(i)QtDP1fKRNgm{4C9O3(e5F1L=0iD1B8Zhr$z?=q|`)0m> zv)>l-RYN9?h-qmgOp(J!j$8yBBv|u9_08p~V5qYL)&OXMmOvav4EDB3K3HHz?#^Dq zIl&5fNl<`THC51S}1{ZE{PPJ)Ix44jjIkAEo=zk zJXvPteXs~htS3<$*t3ZchLR~U>EBU6KD;EJ-q_z?la1Oa}g-SU6d7%&I@2P7^h zILbx^H=qMIl>_*=G|0Qc>mvug@M=vX)A=oc4~2pt3b4C^(nyCzIGBLch;s;wG#MIy?RlAA&jt8^pgM9N}UvhHIvnp(@${IH6AR9@$TjwcV+x zgz_7109$O~B?J`;)LjMR9n;~Bc@bowJv)3Fip^_As>PfXV>b9B4?M z2)7ELP6X>i2#6B_S}q#_6n0xNSFc^O24*@$vh++coF4qqP_C{-na-KNrjxw8`sd!sQ>T7-&*l+A z!7~FnIE^UC84%&&Cxf#9Sww-@V1pGr3|y2+`H88FWLaP+-bcQoTCf0w0sRRQx2p4Y zM*i%B;hvmlLu9oAoRf*hWae6o6K53qt}!$6vAC6U`E6Gwd=nfxpJS``OgDaMZAIz$gw@<`+FBwSLFau6$+%G zetC#0!CDnM4cwQuYpsIKlI(o(=)qC&Lo{V;mAw}>m9jt>-mZ;MX2Vqdsq8QSrQpjB z1+*~-WG~daBmo733#upzwncw07FNcxSAgIcehaj9b`XI`0iY}tVo}iE%)+onzaM3g|rV*C%tE(y}PJBnU6o2Sf>9kX?bIcaIc>My2ioZ@X)LNzudw9p1$XL z0Je2JQNo6`|0Ht2cu??N5uq^;SU(N>6sV{n0Q_C-wN1A1o&!pg2H?%12)~1e9N6*i z1ys(=aC;*(U>j9`?ynEy|A|00=Yf$dX#DjoP>PAK?E%wb z1pEEhGdzGDfho|DdYKvSRt=P*d*ligtR)Ht9rhqk0|4>yAPPW$<~bEqA>bs@AD57L zwLz&&hUuIOP#Gj)4T%D>uOI_8{oY`i0*|7H1i2v1Fkg+)SMi(tV2>|W8@DQZXj8vgf zKr4C97Ln#OV0jIN^>c7#8PpnL%rBNQfW4S${7neZJ!$Y&!)7=Xas5Fi-N^WO4P4Yz zZ-D>=wYYI7LjWG^d1zpR_8!I2eAsq~<6MoRSVC0Z|0!aZhC_r9Av%$UB z-s#reyZpK;%SVCD-DtA`MQVDjucJc>uNvQk9dN1~Uxg?I1hF`B6yzLGc{2jGsEj;{ zk+4C|LpO1PoT&%c_OSCW8JU5Uh8Dn;HbGJm_m?1ePMDD)!}HJlUD%#O>VP70fN@I6 z4j%5t9?W#-*!JXFI`kL60uq;`?}`Hw(g#!9XEaO>Ssha^N1!1)2a$~c4fXeM2;Z)S zx|0!*vGeO^CYusw-WncZ{1(3N?e?ogV11At)ec5CfCyCswhU_cpv_}g&D?~5^>!tj zjfJHOszM{QR{%eo0x4fe@(4h7Xoe;y2{3G0pyXZwS=dK-tb%O-4Zis*e@+!g$IOy8!4UB*+G$ zHHKip$uRzQABkCfJ@pr-{BK#9f03z>iHTr7|9`VF8+T}RKkWILjqZtuU{D&(OFHV= I7c3tAFB)0~yZ`_I diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index e829bfe..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.559732,0.550420,1.139987 -2048.000000,3.346932,3.533494,4.291349 -4096.000000,12.397217,12.419523,16.971603 -6144.000000,25.648642,25.641922,38.407166 -8192.000000,37.331764,36.476246,67.489792 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 1cf4cc1eec426dbf748fa8a9db3c22254073a7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28564 zcmeFZWmHz}+c$UtN{5J)lv0XxgOmYM3I@`h2Hg#cw1Bj&m(?uoCZEtk|n~wijP8}h~(v@pQ2Eh-Y68t6fQQr zBKUi34*nx*FQab%%*xc>$-veG^~k{9+T6bL-weDyH@`xW)*7EE^h@F{R-T^J_L# zP(VOH8TG|Gr0_>L4RsUVpE13Hl7Y9!-eZ1(cLNfhpsv8XHvIVB=U;z-@fhB1?7I2? zfBFA|1!MK^zi1ruSti)_@2}L?BX0ZaU9t=w(uRhN+*N4ILbD!LHnza@M+tl{dztUu zyJvYQvFa$+5=zIUmZLpnUhpT0(11$2%=*pSiv%;%)5#tNLJd5GnZd1u8A?fv zoSa>o?u*??V_s(`99kvs-8QOYb*o+TU;JiFS4vWN{P>c`(Oy$SgOA|rfw3*O$S!A&%<;KmM zt;@C?(*?2KxiN`}or8K_U3G7;@`ugMC#vG2qOQaXyqp=zFdr_s!livsf;lzcQS;`_ zoAW3gelIpzGf#nGJyGS7DCL#RrBi{rL`LRQS}I&$U%#|RfQNUTm36_dMP5OHk&Ufw zQ=E&7i@%*5;=E18(q?g%QqTSF_Cgn%dfpTro!OsnPcB@%C`w;(rVOiDz!Xd3?N3ZM z6RYPr9cPwoQ{?OC7Xf#8xV_l7<~GxackljvE9b21_x&!>(5yJqirO+4wo@R#Ex_f4 z=iDB}cID<{ZwgLLk&#z_zP*W!r3?=bFR~b=@c#DgCNYELLr5>8u=&|ppRlkVi|Sef zsxRs3=``USTY4_8t`SVK#HBS>kfQ5}ia2*F$GfB0p8Xvw=NGlr7VZD^=~{)uN;51} zTjUKASdX2R!7#{TEqatKdqiZUsOParESFAuo>9=j(GeL1gzjbzV%N%^L9$-MleB*}Q z@*g&Mi|zT3s8J>TTa1iO%@zw7orE?vHn47_G&F8q0z83%fzqSHCi2dJ7O+n-hgM)+1wy?BG2_Bx61P%0dJuBeeSh3ZW9wA7_p2hM?4yZ^i6{<@2vVj8AL8Seza6Dy{(=h{ zv&7P0#(C{p-DWZD%Ga-?mo9zCk;uG=jeYx7mGv~{ zv-F44`7QLbVN$1`9>(#-^!I0J@TWhFyZ7|zBJm=eS5-me0%f#GzgGL9_VP z^va52jr*bVT)3>Ib5)PjS>n{xl)Xf%q@?6KKfkB2ovypfGLfv0)bsQ)I%2sOmoidV zg@pFvll!4+Z7n2NZT)$sOiD#17e+5(>ADV8<1E@0Rrmo)l0w@*`P7r@V}5hupAdO* z`9>{ItDJ3Y7rWPRo%MBzC#v0qA%!9 zrmZ0CAgy{clo>`!tu{nrA)Gc_nZnS^nYnx(|Lh@GG^(689m4k4D>t@~zkSM5HV`(G zc|uZBQr(H7_o0#B-E(@>T1Z%Sh2nW>!|@(zXi%D<4H{7&)~{ zjCcP2e)sMj>Vue*C96_mKt{$5la83LaIex29!v;7*kBkJap znTjLX2M-F2T8JSf@kmH;^#AQFseF6j}A@v7&R50eQ3elYn~+?Jgs&Jw9Cc zE0gj)4bDXZO`VXHr>LmWr-i0nqn=&s&9#{5Xee74oWy|X$TS>>|bTVT?$GH{um zejV2fHQy0?Lqz1`c%{=bcnT;=d%4x28`b;to12^FBSnD__IiaU(0i_3yXFn;0s0{1 zM%DVYc&~rlUbT#jIbUQ+4kpj0{ytGJ#xDv`U3iS@ymzX5s!eOVIqB5-ZoliMnt$2* zh57mD_3|#$2Fp^cUxjAM^lq!XEhTTg&PsnlF^phQygkCMmeZ*$b<+6vcUmqD%E~t- zWwLg?@6%l@sOgQulkN>2+_mmqdq?Y)VNiu<*VZ1@zrEO(E#tu-ceu~a7(w@*8q4eC zB7;{JIyUYK-IpGslP9QQUg;Jok-Z1K}ojh$d$tdef~YYXn{o zyoYAQ^WxVh`%$}v&N!}*x@)dpvW$#|w^RuSvY#Dvm|wlfLH*;!@6YCwHA&Eolu{%g zDJbA4-FEmnI2hZVBvxp*s1yT;JE;R; z)HluITOn5kXG$kME7v!d2XlL%*g3Bi4}Rn^_{rI?U23W0y04kAF?Dry_M?}{$O1z{(;*!X{{7Qb zNiAbMF%Jx24-AH0oNBH?B_;XV^~`ebaE;5J1i|R)tUQ+}I5Cx#b^diJR9t}K!>F-* zV544!Znv|t;zubAoMZTK4!cdpq8Aw1n)O95Rn=x|&VfF2$HC#!dwrM#k=`AznF!imfVD&fQZ{vj0s-&n$;H4gF`k&?&#W+#e_AwC?r8>~L#-se7=e zCk&tb78+WS>C;`v{H0Zm7k_Z$h5fe|vvVHg$i{j%P5*D(`Zzw*gZG~RaRZRuoN(Lt zUE|>fzbXy!X>~}&#>N(!oA&uLE+HZF_3LkZ2`GCr)wmU+Zr+97#GmF)N*W7*msSFQ zb8~@7WN0~PE(IQ)I5jmjR2DF`Py(Rto@9x+_UK>+ujBBmg0H4#XB(FLGy8Nf>4nUx zpwStf9v_D47D3^|%7bzaA9b+j4U#og%b7#;&C7s3^g?+{RORT)U&kkB`p7V?^P(_R%a56I2s<~QxMrp>+c1{3MzS?avW zZtJ2!a&Nf9qgV_NGef@~b)5KUgo`92|^#g@lpJ9UN6g$G@6To1Ql4 z{^nUYyU=+!`Kl`X|4jgp!woD0fLA!6^vv8E*KyZSIyI$h$jRJfp2V6x!;LmSK zixB~+5OI)_kDiWttFCy# zP{nSDlWXGQi4bC&f78McFa)js5$mJ)IcFVTd~$eVh_gmm*!G{k1TTm3ra6-e0|E-E zgo#-ny=74>`YG%9NwLmW>(!}0?{THmM!G`utxz=1<6K=}t8Nv#rI1!rOG``6^b{1$ z&@nNnL~Xy!dN#mw107l&vO-VQU$}5#YGb1ZT7=7Dk`rWplb2-d^Gwxzi%}r}1I>#m zUfr$XOmTn{iF!C;yO&&Xfx#)p@tF((jPy>!L7Uc`>}g>WQq=*9%|hQ`9ER=Yv0+@D zBnhU_&WFn7?nHoKL-bD+1Gbw zg1Hekfr*KUi-%Y57`#n5_E#IS=>dAui9-$W7ZHsR8aiNKrdsZ(C>>61W^Ui)o#I#h zLj@)TdY*?YkXKdnc9$SjPEYepi8>SUPX7I$w{^{|d(>;L?ADLPR)dlgel_h42aT@L z(W7{`(e`NemW|porQ_$qY&jZ**d!z*z%cC;Te^S%vM9#bi`#1NQbus=Nh-u}$iH~; zSFnD`b$5&lz}V%>mvbt!p#=gEE-+}omK}}bHwy>~`s{wVg;D`%F|Hyy`0TSZ9u$OT zXsb&ZlgW$`kB(2g>{0jb8%*8l+Ktt@iBj;prCD@ywAAXxty@8T8Oo6n5%)k@K=1B; zwOj079V?H7`23x#Czb5JCEs%5rJ>PNE9$bv%*)G5d)q#s+-`BJUrp~fp!Jn?tsg3E zz&d31*T*%gT?K2;PQ{ePH!nbx*;bjhezVn8s)fmrwF+Ul915^s+jQZ6;mOPYIjY3nR)6-K9or);X zP!L!=Qv6yLDtDZS&1aU~;{-mF_Dd8L585JFsKuRmdL)lH$XFkiO`pPVqyi2W-}!YP zqyT*?Y+!Yc+P%Os1psT2A@}Pv=^+eczY`k24);R;#>q-zc!!OnYg$@fxR0V8Q~EUJ}l+rm_; z6B8if^X`K4sf+WW$xYp{-@)L0+OAC2E)o5uUil!9fVGg7oqeco#>OI!G0w!{+D#tpyYPwo`2(RI->; zC@{k5`S~Uw!L2zumCn#CT9d>|jZ$D`VmD`7wl`ZC3L)H(&JAr&{^7%-JX=_?#Y=P+ zO8d6E?|S0@4hxp8vP}I>lO?04M+6R93*c*Z?iN(o4DM)*-0Hn}qn{H%>Buf${s~OM z`FOLXu*wvE#4J4O0*NH9+uj{pzN(XwescK-w!`#w7YQgHL(QW1*m;6~mcZ&m;qL;qAnT?EJlM;FgOB^i(Kj)w-L!Nwcae57Z>0%6~I_>izpP%+&1-8+$zlV`y9fw?Zx0~E_y4!kiHCiUs@^-T8g z_X`CWzbs3iRl7Po2&I*W`+)Vv0ra|vXa+qkw1Tg$+`W4@6hts*Y*j#VhMW!FJyQO` zl(|KR2kL5J#`JI-z@Y%-OX_Hq+s=!)AMl_6R-h7rGLB2$P)f8mKg#&;;uG1eQeDt| zUW`{1_nQD1qc}p}|2sic61?rSBE8G|sHlhB>zg?gi5ugO} z+bujq2mugKEblJUG_SMMs@(xC4)r`lwm^d}@FY+F?yjef3FO(IT)mX3DgCX5u8#X8 z5{)Tdr%OYUz=olq_I9NVRXSO<$8dJQs-JJpY1(avPPbEC=lW#@=E8DwRMzuMib=0C z34s2e4V!|h4i^&K(e*g?%YWMPdlb2=rGc>^OARYN15}Yiqu_#`-sHnve@x;f0pSgA(8aP z!1`n)`;m9Hz2U^Ss?x-Rpzl-GnE3R5^q!$)masidXvXkINOaEWy&?6Gp1E|Bn! z;04Gh3tHz*-6|0f6R(_z`RdX?#6skVnu8evR^{Y}ftOjF59eb!f2c}JTgtw=b>V_{ zZSC;(jr9f-HB1}RSpPvi58s_8%2Y3}*3Gbu*0#un6i-jJk$*e9vM*g+(R<0y zKLfSni(ELP``)nG6%O@Fpc_EO%PT1}E#WEvFqs*|1E_4K4>4c|rwOrgu6D?-kEvPmUfxed-4u?32S*|_ zBgM1*^yKIe#Bgd6YyAojF72|qNM*@3Ku)p%JK}hauz_Juk6P6he|tqrS{^sukouJ6 zU>YZros^vo)h-C~gsAOY9Y_kpg=U2=+orcvvsz($srXGFR(L@4yFhtt14M&?FlZ*( z(79o=lzE6?)hKR8M&S?f_%uRy?qSkOSvm+BvV>sPV4XQ!$t!$4kVOqm-xwr3)mX;C z@FcGi=|)#Jw!9alW!q7uS1)GK-zjg0mU}Sm&!Ar8F8U~5AishZwCQX4`D!(LTechM z8?3;*{*Dy0OStXL`BLhB0+^*5%f!e?JynNsQ;VWG^ieJ9O_}f`EGA+|x$1rvC@Rfbh7lz3R~`TU z!YHxwe}iSPtdhwdv3ken4q_bel8_wyd;MZ;NPF%6oa#3mFw&S4GF9+A51W>6F^fGx z$h@485f!?f{Svu}151R?xkG2nKigdY?TK}dg!S~>{(d>fFNjeW(FM3@%tN?pmtwBn z#6d8EZiyazym0gMI~eNKSBtKFI96N6fE91U7P0^mz}`cCI;V8*+KH4m_@~McyqKW% zJRM$s)kyyL95O@_;JrCo=a)Sh$gyw`oWVbr2NDy*NC1lF=U<|FfxKvshxB~BuV3pU zSk#i;obRlU4fHeR$RMggV;dE~YyF9BVe^mu{Q>Mx&o}&@%l6wY?D-BYoxn22aV)s? z8Dn!Hs@qpaihc0OvvMA2ho1wKL}`^MmyJmie6I+N|6IC`!RzC*D)E0enVDgc%Wj|h zlsEFcYN?Nvl8Y)X+u&3nYuJca^y*?q%-uM?sYNrm$K~^Hb3`N(%FBOXk3Foi)Oo!^ zx}U082R)2}hY;y~Lhoiy3l3Ws|ophc|=C4c-Vmm=wb2=5@O zgRv6>98Fz4A3ThTM+u*_MTaW-mlYbvp=(|E_Ba)@C5*vI90dNgAtC)b6a|-d>sYy+ z257P1wNj=8z~Bb zsDSCS^lFo#I~hBChXu#3Iib+?Ab${wteO+oI98d}q$EBChur2&)6$>sWd0-!*!obn zzI^%e>x(>DOAVqjTTlPY(kfl|Yf%K|2?p6XK;Ajkix=w~1Cd~0nOO(CH;|)~@cmgv zfpObqq#M}V3lLoum;xTy*w{D)%BQupb;Te^*kHfeH5i3n6$}EH)xsn$E*{wfMZBP} zNZ{`uyqdF#Wd-S8yJ5w;t^{Excb#%u6To7R!Wm@_z(PPDg}q)Sq~?3~1`FqQG5`{` z3qb*`L>`AMory28>;AsL#mlc?B#rFAuJghtCQi3s>Rp|zO#$+pGB;=3og$TzLx~1f zJXmdp<^u@h?(SajNfV0EMP(_X(UQ1KkDJGV{5Ej)GyBaMnbYHKWzYwKCu4)Iehz|U zWn^qX7=Qrc$a)IcM?RDm{aY42WCR2wBDrG^MGS@$&?LkV0d1lASL%I)g5UQi1_$hS zww5q9F|Ay(xC_WdUqDiaYVhI$!1S^3`Hn7fNo*4Ags$aR(m6dQSW|jlCo<4-MeG&` z!BNccJo$%gCD1P{9?LNiShyFXC7kl|@&XnkQGi=Dw2Q&3GP|L4XJz0L4Z-2|{ZdN^ zU|Wy>ySR8KWC=`G{bOg~N%~7q(YwVJSIg-=JlRnbq$jArfY#kFU*BY8^gnM6`MW(D za!xCZ{pO6R#0HMH`Fy2p9M6lo(udZe!J)}uPm-xGk-w(Vq~;UP|bPQmys*3b`ZIGK1MJn1gX`P08WbaDpE0yh0iZg zdi`2m;#@hTmvZ>3+&-cpj``Wn>yO{&$8|-pW~*1)d9Cvb|A0E$({Z7vz%IAdPz!5K zIxjipfe=(fr0X>_s@VkxRpdfdmssX1x^AA01#!dtQlb$?o30M2(jqbk_%4 zRgEcv_dhpEm!YI{IMSm$t*jl4$egWG9D2k}LG^#WBik){UIk7K*0lq|{AGgcc%X(c z&;F2-u)mI`8^4wh}wu@V1Qj`zlzIU z167?-L-~A>wSH&~x(Ado?IJ6#Rc4P@;owty3I&IB<-8GT0rfoCQhf3IUZh0uc_-0w z-hKW}vp;cl_ifu=!~E&QKDj#l*GD6=Ek-W*8F*S0-pw~07+{K^E0aOFgW3e1?9RsI zL(|FtD)mtf%iG?g21* zaAv72MvC&kDUgyLavK`vxMzRYm9|V$JhLlz-ed&3WTvo3k_m*@(7mA{bp&Zoc%6BG z04xor!$&?7{MUmyCcv{O5QbQq=H{fHkIAYm#C;ajnr*X$8Uj;Ov*^WLuwQzMt^teZF{bP*>%G4%3@uv<=oSz(E6g6+b)P?)=D$ zHA$F==?VG`=#RJQp>wt683hNl){a)woE~76SmA_>k{xcqcdVfaAZARA3=Q3-|dMxyYZ1aW)wO7P-B0qJVm<}Yj z!#QGOu#=M)2Cb?(ccE`H^7Y&hL0fvV7vaB}@0MWq4Gr&lkYW6KcEjowqx?7I=kH_z-5Pv7EJ2%B) zFl)@CG@87U3#qkjDl3BxI!XMBO&x=bOx`d-8Z%Ru=@BEz&yDso&9L4gOu2IF%X)nB}tvxs) z{2>-_6g;VHo)scb*7>Q_o^7rbLsu7ldh~&vQsA}eG~R!P58Gf0?Bo7H2m?ufW`adi zu$ES&an6@N%%*FJO+&>-hqHeeyhZb7H-o~q?==#r5M{TA(k*-n&8>N>xNyabL;Hmi zCNcV8mV$hv8EK--4OM$rvox^AD;v@uskve{?ItRV_uNR3oNgduusxo!LD{-2ewGcP z7uP#-xp&eKC&lnj`5n2MscWjC%->PU_1ekLKQCH;MwMBP-v;Zq0R*YJ7YSgv0G?x! zluRDT*5Wt#c>!SLIU2MyJ$9Cp^LCnieqi_9znftOF0(Zp(^K}*oz(knIeu@gqnGQS zzjqDIFQq)*0c6n>cTG3Dfm}NB(GSr1%gN zQ4}r-i5WQaNWv>I3Xt8upw^_pwY89tT zj}!%(Oba)M%}jq)W+~AXmgee+{qhxCoD;x61D65#FOm$?C2tqH62y`Re>@KcJwyFT zJXAku1s|kp4;Ot20M<~miE_pbi<$8|uBkgFj$wFbbVcrwk0N_M_b5lnd^K9JJX@79}M_TO$U;d*NdLns}V zmlr{B?C1{n%YzTd1$~VR#e_MoyyR^R)7epKrF%e;(-CDs_NX%E2nVvtvW0cb@kMM05>t~x~fHP&MrcX zwGj=S@UiccMxJI!988ENsJPuik#DJ;SEiod;XRU@=`#Y~v?yaZc=euryF@Gg;*@PT zwu>k6wM{b8V=yt%J39{tJ@-~MKrEbBiG4Hs--Z(IWOhI$vuE(c^(RT_t2&+?EHWnZ zGeB>@NujQEId} z^m>BXWx}ck6d{&Q47;Z0!;P@RL+4JAaWak;YE$vh845*x<+}r>?KT?T!T>beoD@V?R{1-4pdgmz&bETpEEH_-~#{O&_0`glQ+1=&#@=h8Zn{((ovXTmEvBcWv z*;_tU`21D*P9`bp4%FGSTj2g_S{S6n${(AQjw)E`0+e$xR4QJG8kjg#0)5)+coPS- z2-Vo=P)~2^#%N~dI&Td0PlCrkqWb$=*LVnhAf1tm^h(9v9-*OlDQCA4ZXQork2Vl$ zj};yjws_0nCBVJw=clPshr|BQtPdK*J1b!}1o;gAp35x(Wwq9{66}>-TyuN{(((Gi054GubTg zeTPA=A|mSd`!S2uy=(!Oy?XlgkGB^T=zwvl=ZVlkO2H(cDR_o3yxdp(TFta8UIykG zv$zzc8^6+tg3z-tn3|gBQYd=jFOrdFBTI)RW*BLRadV1Nfxp>ibx_FtBvRN9qu!Ip zG3zkikEqMPwLfuz{to!9_>^1^!B?=nJvCdoQPc7Bho#c~r2sic6DoAK7>_xW%t*|) zg`+OEH;e{DO%_7qz6?D>-CR-&UcS*>`0{j|_F!A#l^6Q%wr)4;qpTkThfCX|fv%_& z@E9^^m)IF+et4eIMMO?7rjVnO!VRc6#LC|DzHZ4gKD#XI=AdP^b;g_cTMQ}o!G!yToFO=9Np{xE!P3D08mUW(+ePj8Mo$8S(0c4H$EtrYR@ za(z?q<1e`4dmsDB+e})xY0ZxPHr=ZZjk<3n<6vzut9|wA6WYn?PZ0NX`Tmbyzpk+7 zUKsu3Zy)-fD>@=zXa@V|&(5Vg1G)Z38>JOjF@_voQNqH`udL~bVLM*g|Dm|7wk_ht z!EoX~)H-jqel+g1@WR5%ihzJ3cBa7RDzzhkyWF&*M$mmc7PCX)vnp z!^k)u3<(2N2Se@W&mb9TKGmm}wJYrB4+BUSmPyL(wA3Oi`3ZgIabo)nO$ly2{81NW z@k~x0ov!OFu~3{M`)BI;!N_)Gl(ErlGkY%klY7(3d@&uwm>Ol)*FmQS^ANv*2N~lv zYJP99GLVf7XZ|lH?*Fnr1%{iURL>N4M-I0$DYN_}E9RB*yjSIE%aDW7u)R4MRoxrb zcWa&rjXuvsU599-r0ga^XngVHmr7ZjY|11TEh-ltTKqjVzaNaR{4b~SGZ?PH)m8=* zo>d+k)?3xyUFua;n@i?m)tl?c*5k805g|^N!VN5M%`c?E7{#_b&1DZpb7>lPPu|eD zpE7A_OQNr-c@=CG1Si4T3Rz7&gbBh&Iq@uo|23-*D75g$GaS>dw_Ee%r&*Wmc>VBb zSb1FfjJsKqeV&MWVE!2mS=zmfV0B9@|Q2n5fKrzJCG^R)U#Vvt?%{kD@pUJdS=wD!)x|lth#xlsb$M0Bm|- zZq703dBm9{=41-&@a)hz?Lmm)0eYGm`m$WJ^Y$ZcK>CdchX;}^$^EaT%x?L3n zIg4(XV7Mm9ZN3(^AA`Z1Ld1fxP2cIyAmpQ$_8`7eIcu>O;}=YUMtJ20K1+K*BxE_( z3L~v@FopzH*a9+x;fkT0C~_C(IEX^A@B0xNOx3*!T?DWBou00Yj&$QaWpRv1*0^eg ztDNzIPuIS?*B-ewXVEn@8!dd$p%MC#=n-sDyTeS~nm}3MxrtWssi4>{{kt10#o>Z=$@7bu84BFGx>_t=5k=*)XHm5ohp&lQ5;a-v?9d< zltazhOW3Mv*F8QfGx$o;H+9tVjMMk@cn4ry*%kkJIt z6*7`tgJxU8$gW(Gh7y2WZvRZ;;%S-9EX>#4#bMZXVD}?OaOp zjiy&}vvXRD*F>xR_Xn$ciY)r%B_Gp#yA$}Tg^G&zgKBk!^`zzBUlYMmS9CmMR~xe7 z2*itcSvlz}+f(tXGs&vG_Oz!d+M4e@*J)*U&NZ) zu=;hAk^4K_)ZsqoGQ#Y z_YJ)4TJ|DXQk5D0_BJ(3rGFrAi$PdaqW1dOuP=DeyhKOT_`2H;BHedJWgn_<3N8*5 z`-Lb@Y2%^Hg?w-rihh@Ji=({2^bM#}R$LabFs^o{^GuhK`9jm<)pt?lAo^6+co z)dP>Kfl^gO366JuNTKTMv2`j({`Pk?Pd;l4Dx*cn@{Py{%pM7xmoL$6H%w7GTTc%< za96C$kDsL_k26UYi->IXf<1=dOQugN}pd}epHv3%i>k+JDZw>_rI$R?VxTN(O3bMWp8&g;Q=#b8biLkGd(h9$*}xFVa&45wuu z3e$vdk8D#&wh{Ck{VH|4RBn5yp`I$YheT3DQ~E>R`%_?LtIZsHj?#3Yb7S*57cX9Z zN>)eWu9%%_Uw>)Bv-}!oJjE{)yYRC+>@-0E#sz;=)N4=MxAS-o_Ox(`igQ@aN&!OC zAAb`r?w~Z@Y|UX#B>Cj3?qFJ+)Ks2SeCXjKPycEm7ky)k0a3u1$(ma3CkW-4Qy>3h zM`ogBx-GWrZ#J7>ZBLY1_(+tRgtyh*HFV_pNo!kkDC$6(?;Wy2tXtbYb$9G6YYWY? zbDCYUCu{;NeTeg%9Ay3;ksaJW!e4W-)Zki<>BXfEe~)Z_M4-61{)oWAw(>WXw&hoe zJux0Fe~*9CJ96dVyp%zGbM+MI!xs8tD`yg%NoJ#iFmh^O=u^41`UlqA<+ZgxC#BXT z?IUjBtm$tb)Wyu0*j2o@XJ%PiI|aEf?2#fo*Bzc(%Q33;@|F?T#78@u zcH)P<6a$^v7v)1RTA$C5Jb0hC?e5=x_0RPP86@@j9(Tp_7zYfm41Rjk-!BqoWH#fx zJpV|#`x`c%DSDf`%Kv)q4Yb1G4`=6_hk?c{kh81vRlOzm~O4iC0%j!{`NF!A%soj<_geemOeRUT6F_ z98Y)E#vDg3SB~o+EYeVKt8!gl?tW+M*1DFE@P^y>cXd3&br<@)3Te`EJY+RTfjL|v zzqnDel04mGDNH41#BN2rJu~yB5(BNi&u6uhrEqrp1aFI|pzI!LIXMy>XET4Fz_|5s zg|Ym>i4znQC;la`QJ4AWV);+{yRdT=|9BcR^|h#cwx1pupt!+U+C=2#8yGMaUnJnX z!~%02C04b)>z312BcFBVGOGe5*KU!~JSP{A{5JCHV(msv>pxK`S6WDeJBdUpWbuREXwV+_%G_acV+OSA-ob483@|%Jyr@?58;U)^w}8_{g{9{`o*TRwP0WwT25| zFwJ^_@Qkj)QDB(GMO-TayqUWdxJ4f4xVUiq$zl6 z)@WkGtg!xzJPb0AFnRQ_CYr2{vXsqoo3J!2ysz zk3Cz$8h)i-qA+!kiJP4(SG4zZAycgV@h;q&WN7(G#nQbAi^(Ma4)OP0bg=@YHg*sr zGbNfu-fYjNCfs!RkCSRYH1_45G#_)f8#E@sG=u+o+Qt;w`}I<9+GH;GBrR#nc9XN+ zFtF@lA~zgPXd#o6z*ho;f)q-X4GkHQV})QZfk5@E#6n9cQN-X$6Jx~is-yFnhltmy zg4Sa9<1YawEG9w0u}}Z*Y`xl=a7cEUrO|I(WRk6UkxW+}QP$Apoa^NQW})z6K`n-A zmik>7olvj!l#n_*=7&QT;^;ao^hpPlU9epO&d44{A{LeFqZ5{?YbnrEs3OV1)7ObpP#TH zuOcAJ8jh~QW5J{_dl^i|1%!mKc%2@1CW=M^QNqYG>!C;Ht6?Pc+p~=BT6+HfKBU{Z z`s`A;Sdm47Xz3&l!^ghrvY;pxF`tRa*17!DFNu7W{1TW(&R<%%YN%9WKPA>ssNI~= z2JHl9p5WXbCg@(}FAhNx1v%(^0M!GgM--=j`dW!X<=9qycww@3Te<&-HTqgv`-WQs zk9w6A@5v2r{WF|}EtZnR3}^Jx+C!I2p+lcBW7gNCDqQlMG{mVE28@+!6i$7O)o;RwnPPK0U$j{%O{aQ! zjJy}I;fdbLbzJd|lFtSnR_S3sWK!Kjvbml}Cnk1GU^y4VcxE1)2Q%$S_K4^7dVXo}2)pPqZaQC|fk|n$*JJcY4Q z+Si7yEr~)-nJ{=ByaB(`2F@jjj@-Y0|D62vH(2!j|)H!xYzTU(5Le7(OZ$jO`FfGk*QW$U~i?(Q(Z@o@hV z>7vcfO%846d6(3C=zlAwRGm4d+$WLff9&56pJ2tT>fH;aO)jG5OL-*L!@E(e`wmW5y9Xn{C@Nt~T6%hVWF`ryalDX4`xp7hg0iQiZMblVAG;1F z>-T@qhu6}5JtB||)b$X4e8v3bm2xxkl&W2hN3Wv`D#S@`NG-(wu$Bix?e z-0$LmLrzm+s|P(c<9lS{64&CtnH1OYc1I$n8gq7)L|-MXW>jQLTC&oEx=db!7XKMm7$hfB`IF*3zuF zve1da&HZ{sl9KU+n;gQ;L;I)qliF3Al6zYiLz4b1T|Mp$s@;O~!N zd3r8v59*bcB#)BXEnL=Hi);KVxM9sYP59?_*yQOA=fhoss)2G?O?*$r2nTIPFk@{v z8Qf7_@p1bnCK;)(<-f}p(c}faotCc>upu|Q-2M2r)yo>sQdY`6wV9BN753vmxtM3D zE8*s;nu4w2SoiMLS(aABd&Ne?{G`;X`Lxs6du-Kr>;1d2gN>#7DAi{NY5NTJKSt=4 zNlx%7NM9pUdm=C%-ci~pXpSr9bT5t%7Sf7~<;(A*?5<oaMZRZibz#tZanE3hI2|a;^Zq>p$u8^M-AE1WtfaA zy6=u*V0vJ2kYPP&%JapV%WsYmfPuS$`gE4h%RjIf}hMaK_oFNs4@D^t|iA zS>M>C3t8Vp&VBXu^q7GgjJEv9Va6D@MVLRPl{`IA&{`V->VE-8OLf438vA`xMZ%|< zBdUpv%Xlq8J{zJ}#ZQ=i|3>$HF?}~rTvG9nG&}*pDe5_QFys{8I;`}TiuEP7`e875 z6^5zlD$XCD)($T0*4)W1dHqqc;+9E6f|eG*8VhL7;T#U=YwxdKv>5$~Me@-?SrU&$ z;bWw@SX$Bzr!DoAq}9_so5K2)%h3#)O-1?S-!!Y@ikkvqW&jDGudENfm8E>wMyF4Y zx^yMEx$WX9%?ghiB_}lbfw!9)yo-86OY$sz=~nuCwnx&U1IE>H0v{Z)L6(WklZwro%KKt%;a?_sHG3|6(rE}HbU)=G{d(mXJbWaC9&Vo= znNF>YkV_tQniCND`VwSkuRI9V5ovCH&UENJq1r2yg%O57c4p3;rbYBcQ(Z8#gN(F| z2f5vs%YS$?6h-ZtkNY&#BuC4(37Je!Te(FmBR|ID`hGG#Ql|brYk6DXUppeh^Cd=} z-lhm&H67$~KDODWukBbK@Re|zs@zEAKVBQ7RNVC!vUQ5SfvJVedAW&><1C%= z%NUWj*Y}XBe-AM4-)1`q3^+n|baZbi1HD@KxK=Vt`(^0D?w(R@gg?Ki&F#Ppy@~FK z+ztcgxcZ*bRw3*v*BDYAnuvzJz8QQO>4F&8nX!mJDy^IQR_`e|JHP7$UEv*E+1)NI zDWMT%h*c<6E8*SfcsfMZsaUP+d-`c#v4yH{QL;*WmmR=bq~}p!>!Xv?N>MYtd_x|W zf?-wg-y{iLwl%dzLxzaNW+}K#ty?O-G!0(3CM$PEnM9=Z;LZN@%JX{U@>z)AE=*2C zpcor3;ki+Tb@#4mCBL5(NXVsT^i~{RK1sZlb!SfE?nW+E8Tq`&p)3QUlYn4Y?O zQ}d6xQ#0C(if6v^ew7Gwc;V40ee1Nxn}82Tas5_QGH-*`A@}8k((Ybkw5;RNKXs=P zURTg^7U_(?`1`lo&lLXn>I3edw>Ca&RWh0$bl3!LWm6V-w#W~7_CA?bmY$PBR*FWw zlvuM=hg26Yz}RT`ze&ln}ab5rfFuES?CXZxhFW~8-h5qIYDtq zfE2d5>nH{er_u!BB~lESiR}N;UHJ;9Za|7_Yv9WXM^bFUfsu^&W3=4$;|aY3=N%n! z^+I3ZVgY3rfG|=PI&q6{;llXS(O%sC&aipji}1sYLU|>{g%%GfKBFU!1xbElE)_vx zXV%M_W-JV$?Hxu$@miW`0RfpH4cYKcPh0P0iH3A^Cq1sN7+!xk&3zh?G&nKYvoEF1 zSn`~#`$h_{uu4|o+2M$Qg@fOqtIB8Be4H#!73oG9*eYYA@85asSfMqfxEq!n9@ba6 zJTA$y%N`4lf0Z};N62*jV_T=ir0wcj*N2Zd?JBHUTlBY8R`2+mt*1SxUmi+i%Z5j} zmS8~T*DqtN27>l~{^=M+ef>}U^8qxs?Qs=i1bn9A1s|8@^pk&eTDt5mDdrcJk-XSb zt;@X6f#+o=Ho0r{STqZhdyk`)NstM>gDxsjC$*vZcdSbCNv;G2!a?{-y1lT?D5F1h zr!^Ai*7Jgrl8%T-gYIKH_k$+95-yUKzz@&@ncuOq0pmqhE>bav+9RJLE=-%&{!8WfpwQz2u?kg-%$eob$X+WuD3P~tqhRimSq1YtKxHEIhu+2lJ=X-TOzvF$L<2~N7zv{@|_P(y` zT<1F1`hGv_>lJk2l)?-c%}}`}+&thAT+MC^m$fr2978X@ipvg`MSs}6;ps2|fayD% z$Q0}8(~>51hb>9M!sbyFbCv};dlIKiPI~TP56;?GVGcU)4Gvp(Q&^2cB`acSx_9`= zakWcEnL|ev50>T(t=K-=_Pn$@Szq3?>HpRGHux!>ngs)QyE{t>l?bhbZ=k5HnFe5Ni}NG<@l zLU0x=L98LcYbv;R?_I)|ywF#uzfV_0nRl0jzd9-&?hq z!|=b^_enx;U!0b()8lG?X8U=n`BKw)3okKr<=Bm?r)FI(CVYAsWvWu8WVI&B`^==r zh4rFW$BMqDnn?w9@7(sOs`C)3>f=Y!*6rJ$q$};+`!RFu7CKY#bUP|Odib#R1zqJp zLZWJL>Duf-9V6TZhT}m&lwVh_nwnI}hJ`E6a{HvRR=#6cckIGp(j!gYPNQXS`JByt zA&xgU%`|@IhC!fAjK14P`bM)5$S$@wcRvYAcpV<*qO!s!W9Lt|p>7WDF<)PiILT~- z!u4I0^X9!_Np1Q3d*;}D%DOr^a_@hbZTT91+#{x7NJN!R)%KPs6d&IDE?a9TcUP5s zs_yR){Q5o?Em3@Of2Q54*4C+g4*fMD|4O^0e?FKSa^mG#c1RjR=eoP=SbaWylJq&o zdG^X4K_NT-^DZ;y6%rdVliZGz4f?GP#;i*1pB&obE;mDQD*k0Gi|le6`@nN0Uo_JM z4j+C7a#ON)+UD>uCt2&(qZx)JwhQvVW&6%uPdf{xWjy@ zWZryyiPQf`_(wr!l`Smw#)I_{qtpdSeGd9{)st_Fea+Jv8cPk<&$EpM1yIB!*5d#v zjpJsNj7=|SAWn*VS#VPk~d2#T1u~JEP zA|IroXZ~joK-tkWyPx$;^!`i-b!Y(LBr&f=XUe$A)cKvY zEaDa9QR&Om{JBeNUuNF&I43vX*S>Zoq*hR8knImRkpA;Lm-U3QQT89dOLEOKXy~i3`0}=jZ*#xsqI#USK=J(Yz%?o!IT>)fA?N>U@%tu-!QlO$VLb^35;u7kf_&xReD( zxFk|e?H#es7Hg?Ts^3y4NlE=_uZJC=lY-3J>0?@HJCY{lH&Z zg-uOcVV@M+?Ax1b=)OTM=+F?2OS#iJ<-)qbhBdotg z)l)}<_P7$z(;20!O9#)z`a{=<-#yuJ#g3_Ba&y0R?bH|wFs`cWE_8l)E@m##_4K@Ik&C%rNA5c-_GcpV zUBT|+J=__dxuFe)*ViwEg@d5N8!0|+q zw^1dESy9neVmVEpk@iSK;9WCIZ!)XtB)RhS-do2OG=&r%6-Dv(5Bs0B)bSQtT%Nwx zUVv-aDU54*dgObA)r_HGd+l%mA5)Oq}) zfnVmeW=$+yoH0nxtZk_BPW9ydXX}nElajR#CYgO&lh|^7wAI9)yj$uLlx|Zh8zd%_ z7zS1Y?B2WQT#pG5OcqT%J-MH=9PT)A7)Y|9c|#HN-h(^ke&r*yK$rN5JfBi`UAL-K zt+~;{<-S<@VsX{BMK`TTjcIdU#fxJHuRM>5-&PFk$P+fwz79#Ig<(OoRH5z4Ro_FL zX(KGs@0N1uaz>oW-cR;XsWmzGMgPV@trurY_7Aydsd2T3uH8W~QEFBZS0fcoy|${? zr@!P$K%7uNVv&tH5Hpv{7}=t}th1oICqk`f$=e(Y&oghDVWNvZuH)rb(E~rSW0P*E z)b;JG-p*<1T+lFV+EaDlP(50%;Zwk(vHnYogaLLLr++-7Rxn>l_Y`TI>!!L=_O-%U(@|Vpx40P0 zeLGqK5g7^Q9vub8_2VTiP~X(fkGRY2w@mD{PX2yB;nKIcoD4}lB9fo5eMN zx8_u~V8(|odaE5fOzOF7!Wv$X2d45LMo9f3%CwwOC|?9e^THqN`?IF&9vfIMSkYUt zr1f=2^mOlJx;A(`L6CG~oGwMT=}pqGyf*Iq$j0wjHuo0B&rq(mE6G%|Z~?XJ)!4jxC*tYfa*!N_s^Y^XE`t|E2lCu=MMCAO$w>J(6Hh*7O znAO?D2=QKB?nY+g-V@Wj_ZBxPYVuicVKWS} z2w~Pr-mUI8mGIU{hvx=6r|M*9il6*hDd69s+dwqCBqhK6bo@$))_KY1l)C%R){VO0 zulfabyrsRB89B7}4YfLn6BQCeZTaO<+12TVhnF-BCseGwSJd^2cT~LfZeScw(SFwc z*Nsa{>Fv-zn~yOfU@WWGFE2*_*-Za89lX8z8uQU2W+R zrw>&@8=oe=*ynhXzbJ2T|L`l7?hXC2uDJ=vYG@bS#1i}tG`+ma==4slLH=2T5h~ve zBcWKJ{B6E;#xhRJ`329ePz!b1{aFLLd;)&W0=`<8n|PM8t$>*;vcYtR>Eg8^?TyaD z4p+I_*g30L>^b`a0*R9G|n%I$a2DL%7H#7 zhFk5K^g?d3rMume-{x}VaQ?$vmE(z*?FE>dk;OPT;Eiv5SdZ@L-&8I`&qnK%D?68$ z`3^U8e+)r0uu!e-M$%%R7E_;gMt=rR*Sq1?{k`+w?`){$(;;cKZID5(%W;z7e4=4x zk=w+$qt+IyxZ9k#7`CU@eL0QOp3_8{zWYAXuf_6U14hqM{>bW$`rY$E1#;P?a%yLk z`Svs~?v6|&@x5%doyrYAJ$6q^K3Df>^h6OOU$2F z*Kt67`9?EgGnh%;poQh;BoeNUt1}zsMBO$Cqzhd*Om%7S^wE5$dRW>@u<_^Z;+%Ay z7``sGqXJu!k*tM`R;AH*qoTlpQxfoa2XPD^1nc)DfMrl55;TU|pY0yz5=G}@Z|9G9 zho~NH6gs1$R9Q0L-#s~a@{Mk?oQxi0?av*=dr{H^@4$H=1Bv!ka4|>#8Gop#AXJ4C zrOQ*LWaaGrPnMMiT?g$tPuzZ8nB((Ou7KX_&}b_z?fAJJ$BG z^M4biVMf%wn2eQw%HOerv|vPd-2dIx)DGK=58&9*Ik(*&N_E&X`e9)oZvRjD=S`!& z--PJ#>VLkZjR&cuq~t9;>mbzx%YdI^X0{iP^DgcEc$+5$ow*EKjj>%hk9S4@De4FV z!ZiFWfa*5D9cgp(I(~{j0@t0u0w1~glg+Mpaw8hX05yh!D55VViLV6fK>n2q`160l#plH^Oq?@_IVLDBUf+8LFYMPgSnYHfikM&{(aL~P zBpgV2`P=cy3k=xB_4x=4_#x4_`!8v}RNJA}OjFTbtmx}>ffDIS|@e3 zxZJ&-YT&Ud?$pqVoRYuyx0&o868=+AW=-IWT3A@PY;fjzQ^80lHK?Atf)_M!buM*A zhx~TSgHrw5JpI3c>KpIBT;RBmpxpqY-3r<$B`VAoAGUb1iVLKXo}nRi_;y>-lrHqD zk5SS9NsVAk0)1;sEpz~{!Fh>*vu;{?{taLzqY|Ufa&!TJne=XDqv5f^^wdvK# zEx@D-UwBE9ATRL0efxHJP8Up=Zz(#})ztxD-GZ##T&G+T6{+ZcC{#qp(`${n_OJW-fn7e@bq>=tL-rA1cFXQS63I}+RIF<7ID)LcNzVYl9DpbK0Ogt z>PivA0r7H`F6?t z;8yGggh+-E=PxnwDz*xNTCzX3F-^gJ>h(Gf5$#lDDvIZcZw|dru$K$%hYhI;5tpe# zvLZVmAYj{$9eu495ICrzKhURdbZdBDyy{<@hkvACS^;tIq?Vr9YT&g&fIW8F)GtA2 zt_Cc1AjnE>maXsN1W1Kbi>y5I&Df_t-^?qRa_912TuKCOL$-7LTNI;$oaVI1p{=2zVG3&#YKYhidSr&E{{R3S z&IYA>uOghsBh;`-7``|cEl;TV%Vrxq;3y?v$pCjgqua3gLfRE+<)u-nY8TfD3c^drv4!cP|0hG^F9h0Tw^;h`T-*>%wN=t zwPl(Tb~OZBg1}9Pb3TVj(58l%B|YY>!3ihOEa`27pNEW!Tx>9<;xj^3I6@SP_lGUN z_(CR@KjTi%EobkGr~49+k_3_(Wn{PUf+50q)2&=Og1B3a=XDs6*Y0)|8VR|;AzW2C z$c`#&Yaap&+gR%31A@-_{Dyhz&i;3WB!{z5yqRDrrW%&C|J2L^aQa$nt_>GLiRaQ- z9}@rixCtjky3z z`48($JB5le2DPS{O?{tzi^cMdl!O?;n*Cmg!~D)>P`q#38Wfv8_&DPvH@ zOFgeHgWGU>UAD9oDw7uY06kt$>n={t&%_G1Ie+%-z-U|c@La)I@o!kex0I)tO5xaFQw{+Y zhl;l%&}MviToW4BZeZZXGjW4R-20;Cc_mTNK-fHztN?L)(YHNcVL4p^BOs85ZD~-P z4veRKE2Uv8dKJ(94loc!05q65B+D9?Xe?c>I&q|M^an%`ZiI*wCl{v}8MFsZoLEmn zwm{(Tzz$NFBcN=V9b?Vu1|69VQ13zO<}f-9Iv>IR1Rgi~q{Y)16At16V84g~ZYLDL zz=RINf1EF0qdl~=*Z@Srs#9eHC{3CWnbtT**nEK}lZ8oM2d0NOE>7Ea z<{!il8pD7Ttd9K#Jf)|7RyxXSDF(%EA$S6wzI!JbwnlDA(V<0NkC_{%Y5;3QYFRaK zZ3Ed-2)nP?l^pw=f?xA1AjrD8y?(?3n;5dxG9@xiyyE9Yq4d8IzN+9l4@%R^O+oLph+!N&{9Pbff;LeDBAk1n@OC)Q`&*M>3;(_0;R=0g&AI**7uf^} zn_R9@3~$eE23|>GTLeh)V@<5e+RY?&x5-NOAfPO{_IS;N3^WN8!vb7|8y1K@iz%W| z6|nf$$awld&pX6aakF7bEuD9RHAlL~Du&tI$@E-w6p)v1znpCzMC_gdMr2Qd2FzSx zPo0)wa{3&LkivoOFEnlB{bb7+xi!SZ zfd|fE^y%Zr#xvv84g!JNL!;R#PSprhfr8q^Gla1VYFI+dNIQOi*)0;q#vpLL?yvx> zL=BE+W;;8(c(=*k;U5*7F(yI!0h{nunB2G!w`4hGZAUlx`1ceJc?qmB`KI4m9qY)G z1-6Qbc+rJ8RW)4lCW_w>^0YQQK0&w>oS>zs;k|<}7yw5wofQKM4u2vYpwA!lWU4?8 zhQ50hmWmx_>a+sjEB%07!nXL=&y?XrD~ADEkx1t5sy~}t9}<~GvcHKE|9$XOKClBT&%uc%@?oTQ*8$>33Qj@=c?jG_79%4g0tX89 z;@6TnQ265^Q3foZ;8GLYg|!S9mSa)RQkr2&B#|oPU63j_D9yjFPlcDXsSI-7A+1-Dn#rkcbgj44AkeMd|~70e@G^v!#L%e(SZuATY~JIKfss5DybU z`VAg)DWW0@`5wf42?b>%SUEx~dY6Uy9jlQ!tAbtg76eLg=mxOnU*a*u6F7~K_!XY@ zLRZ>&tBSOAC^B#olC-msCQQ!G-n7Qdq5R>c6$C2cu(DgqT&|s|0`kTkJUnM{%}GS| zYFb1wC%U~)1<#w;9C>)JlW;zKnp0F#T3j58)h%)nBaq5O4FP!QYe>CG1RNA`eJQeK zS%+Q1@HY|@*;J9a9{!id$iv+|p~F18?On&%+M*Y1EDvxd&0ilyQN!GqH#!--#E}-+ zunD3x7^9CNwfzEi-3U1ykS5RBZ#o#jB7bXLONNn8(|odFi97~syh3Ka+Z!BT-D7|_ z?(OIRv1K xuOn9d{}>kco2H1x|Nk8X@Fo8}Q*Ll=s5mxDgURh4CghP$pFDRWUDf!`e*l8^1k3;c diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 29ccd35..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.526928,0.537197,1.147143 -2048.000000,3.086804,4.748772,4.442635 -4096.000000,17.681963,17.747116,17.319195 -6144.000000,32.575573,28.529755,38.559746 -8192.000000,34.401962,34.441387,66.801666 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 07c46261d960b9409aec3f5dd88f7624039f9719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28411 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 T<%WakNGJZKeKg~+`L+KBs^vw0 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index d2b48b3..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.974837,2.132517,1.147373 -2048.000000,3.062656,3.145728,4.466643 -4096.000000,0.178688,0.189952,16.335476 -6144.000000,0.667648,0.258048,40.501839 -8192.000000,0.185344,0.342016,53.240833 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index b2e3e6893cb6a607dc4f9b6627a2783bba91f6de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23765 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 Dud)e! diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 25cd624..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.668337,0.653787,1.145579 -2048.000000,4.592921,5.123542,4.474135 -4096.000000,21.205673,21.196133,17.430937 -6144.000000,34.289894,34.251892,37.833729 -8192.000000,34.529278,34.291912,66.630653 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 24ec9b54d19db0d47e44fccad2806b4ca2245050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26506 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index cf77599..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.780096,3.750562,0.369498 -2048.000000,6.896679,6.859847,1.143648 -4096.000000,5.990656,5.984385,4.363189 -6144.000000,5.186304,5.313024,9.639249 -8192.000000,0.001536,0.001536,16.952389 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index c7e37bfe4e4d8047c1f019805de5567e4e9e5fae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29099 zcmeFZbx_q&_cux-AuS-Ogn*=?bSmAUbO=aFcZ1R*AV^57h@ePI*HOAfy1S&i;jZKF zdEUAA&fNR=`^U=+!<@tU*4}Hc^@+7lgqn)%bzCZ36cm)}@^VrdC@5%wC@82i*RbH7 zhkX+Z@JG;9TE|t>!NS$U#MvB0*~Hb+*1^@*+VqyYxwDJ4gFP>oAlE&PTUM^FjxIvn z+;;!#16&TymfZa}H*dp9a2(}yT~JU6O_0B+x#Bt2C@4;p@=}sdJkvHNJv_;tj<@b? zePQ_=i^4|qXsZreQbMgd5K}7tZuqO$Iw*J_>R;vN#=II~Qy2_mcy;TRvV@REHWr$K zgx(`uYvC>Wv!dH1L`uoekB+Je>P7_nHyiEmd-QY(wwh9gz6^&Sf$J2d=tRWC#Ifhu z7-~{dQcdlwsATZk>AnJrG`voGLm~k$iCMD#&%gh-8J5&hR5A;#yae&9b5e0}aSrmx z(OHpOpd*pYB@ zaWw59$OTtL9AfSs9W^XoAfrZPXJ-fgjug)Km~-A@5o}|QzGCL0sZq@g+}QK?Al{VlN0t^4f8g0t6N)z$RPXt)@iA=0#_Psq~6bG ztimCn@!;dfkGhEzoO)7uTKTNn1ry3KYfDS+ll2Vn6WueL;Va^@gs+&$VS)%my{g=p zZ4AR9B+N0Wa^C+t82SGFd*ASXv276Y33JxV>&0&?N+a%n?nWzn8DT>CIVa~`Y^;<1S;X_!!ND8+{QNoo z_OPy;dp?pN4%UWUwr3=ldeVKy&#WWQ8jPRHg0rk`w&mc+1T98 zQO&%=#;Jwcp zBX+uSy<%s7zp1}}FEQG(OfMojx@B-MVSC$AL_}o3hEdRz66@>NujdED#!|Afn#HEl zIkbo;aCcu|4smdBboG`#Wo3<)y`Yekl#J&xq$(=vihFu ziW*8rz@?Xv$EMQr=S%^YCoE@M@J!L=J9UL$6JKZ-K`(cgJmCTFX$YcK=K`ZJV@3P!8 znxvX8B;A`KDj0An(i};Vqg!fme!5mj#%&~`ZKjPEwZP|>12dJw5o$tdfvv97+}cV? zL?mHgFyV$SX`R7;8~0DKT-og91u(k7@D5{zLcmk+nmw%adi@GMfayDu?NM-6iWD#r`kKog|rs zh1@WumY3%zC(f7DtK$`gqIU=h3GY71MXVJzsCau3}N;ehAPV*}ubuF*!Lb4d=UxiTVh5c=OZ!RSvx$ZBuCF7Tr`RhwGz_h8~k4 z6&3tHfBwX$dJrBQjB!>~SWZ)awpkM#5<*Nv)AjcDV>v~|8tbm%79EJ6%dM+RLJA5B z_pK?vMn6+i)0IEjc=h%5$7g5#bv_{hW zhK^qPBiP&9n}mu=0U}9NWCz1;?8ofcR)b}C%ESG&;h4(G$~8T$&Um&)YKL0Mt*N@5 zqa(}TA0+wnYr?}BgqXuN zHn8Y)>bxJyM$>$hjiH0-2z!Z+J*8m_bJg|!9(thn!C&*5s6m@DmVg(-19-$; z{?3vm^f652(0x>4Kk0e0n3R0a47uhw467fE&(~cXj@QEP`F_9Z1Dk=B&|)tiAD7E> zuM|GJ4s3egx7lt7W8?$KJMYVq<+bQ~um7zS9#lawD3`VJ$jEa`^!E&Ql`76NF$D$1 zUmm`f(_G4w2@=FH3{}qGhm8Z$Yqsiz$K7BCVAZ{gi+f~cm0RZv^9;E$OkdwQHA{|L?{^zrNWp%Yiw!#e|_w}}KPxI_kP+FRsM@e%R7M@Q` zPM)ln_Ocq+`<9Ov>Xp3~^*JP>rM1g!Hg9=z^9kg27{EU;!&AO{%5>fj z!-*M>VX5lYxN{EXY4;xbhME-F4Bk!THtx|>6%7dslT92NY^Yf)sPWvaTDI3QCMLF= z*(4~n_{m-F` z@VZ~Np~g_XeEE__z%elNI&}%mWq_?)nt&4nR5jc2@+gQQsAysI{)pk>q#r*XeAi+p z6hC(?Pq(_Z(gRqe+Q;9O3ozv-`FoY6ah6~D&E&*&?xr)mX} zH4ci*8ydmg>Vtf}GSiNDHcwAaBB=PO7@IilU2-5e$ z!h-Ga(|o;zcPy&Ty9@F@>@!f&t6Wz}2ERQ;x0PRjxL6r3oW9=Mm#fYQD@CEkeZ$ek zW&UJ2v$v#PE|x);r2mEaQ2-Oe+`3FmXauQAAHzrm;e%_Brv8{E#O1-wH*QYW2zqYc zTJA|_6@mG1n(cUp9StQGwrhi;pjHWJCw55;6jH z>U{+bt6kgO&-m=d)JiRsVF@JT__Me$F z=gHx?!^!2@7Gx&^k4ZNQ{c_v(Lr+M9X6m#TD*4&wTBwbLK1DDXqc~@$f8KO-W74!+GTcY-kYE$rZI0K2$HK5Bdn?2f5?knT(cnnR|G2@0yS^BTpH(eE?;KhNK#?BFl4VTMdLY9*_5yEMyt~@eZcm^$8qpS(@$}$12UfGX^kd9HB}rgFx=x@g6SWbXV>_A?cnd= z{J2BIh4#*O-O@XXesy(qUybU7GW`y9>7=MAZ8TSEApED9M$pZ z-gIGPibmo&pX9>A!izc+%ID9Y&#bMbW>4T3He3op>@h(!0POh#H9;YfLmsBi;e^uK z+WPPan~<()dO8!5D>=7O7pba<e{2m0B~RJ&ndO)WAI@gOL_PLWu(-S z5E)EUQ&Sk&*t}N1Z;_CYtS{G(X&i0VY>|+Y%Q!mnJPyTgk9$8Eo|#DxxckYsClT%M zSmrl2y62iB9VmNu=39$(I3P}w$T{_978jcVqHVOYtAE0PPselWCqm*%DKYOXfuW|( zxPpWBHz!je(&y&qAH#SH`W`zb+QGV!fG7vr@X@O8(+|7x#7GKm3!hqM#Y7?^qPNU< zh+}`7_ zg-MU;Y*<5NoO%NpGcPyXx1mCW$HZ9v9r%iZfr%OW{=M9Ixn0ET*QRSj`Dvm)iLG=# zZ$3T_yKgu4;Or8z%^ePoH&B{f7TSot_g5q#tSAK>XE3{yilXzrAmx%i+d&Qezn59msWX0NXxT{Q3nIkkB1h zh}Nea);6fA@uVYDXk#bBNhC<@E==QDX>|+RzTh2GFW8NSh-byw%(~tiU7QT z`Zg}^)u7G4>jJavI!x0hZMaU&H{u}J3*Zl!C^?rw8$jzeSYygTSl5q_=VLa`o)#Ki zRGTShh$JT&`zIp-A_NQ)>&QuJkjBPyNdDf#Ww{3fA#u>tNvVU&3@lb~%h z3$zbV_U@3rLtn93Yk*-A!1wv(Wm$mKkZw(2z94FLnn+cj>jQJE;NT1fAdF1@u$EDZ zUJP^5)uz-H=SaZ`M~a45R?0+73( z35k;ou!)IFyWgW0)?tZX=1OMZk-DMXlZ<7kxN@$!^VGwoG~q(Du+6^Vd}(&pX|mJ~ z^5SB}v_IocN*EbGRJX`TJfP|I+4ESKnCc%NVV-qvq+Go@#yj6LdCR_$YuAc z>gu?(w6u+CD4=l}89htgsT=0Yy_w51KZBm+X3|IE$xbyu@57WXnzV6%ml^(Fx^{VNU@2DGKEHU+q=7;R5Qia zCu@>mo$d{2s_v|0#f&*zEm?|OEdbhUYH4wvYr?6&IMlDdJbh8^x*E4peuG`>GjJq) z8iBXQ{wE>R{%29LbY8)6%!*@2Hy_%N=~vhHSJFr@iAnVhoPddO~61BQs^j_@siu3v$+GhA{Rs}%Kj}>vX!)_#D ze%3{Kecxb22cNOxEJ7&e_}CN3UwC9>$J8uj2?{ZvKmuBY1ThnN-c6@7rCt5xGBMwHh`xCT-|>3c&9v;HS~I^ zC^~D%yMOv%m3c}|p9e~`dg)1l#drmv|xSzPJ>8Y=(-{vS?^ZzxTCjBEI$ zq?4&*76|^;bmzzF>g7(CB%}%Ff^mME%RnhlZ9QRu!g zb}{e7qM89SWR464K=!tyCCo8409P~wbUENeca(U9N!pb|7*Lgzls>}|N*N+2q2oVZ z3`ZjiwQ;FsZ~f{$fSa8lumA(XhqdwnK87qo@V_PZW4PClj-C1K4tB>4rIeIU6UAh& z^${E66*+!qhy0T*{r&HL|NgBnw&b%_*9tjkb-0ioCDV5o2f+C(tUA+$wphW}+8|^V zDJX{!(9R%G#{~jxPF$3b@{<;zick_}1+^+?^9;{9oSsbafJQq_P0i7IKVblY#Yt6_ zmA}6zQv;-RZM@LX(0~foyGsI+EE64Fx#i_ut>BzYK4GeMc7j-xa(FCw2qcXHP>UEV zdtp6YFM4yh+|YP_qRIsj2oVWMT($@kQ}D>h2z7=fzyu5oj1iz##8rARuRg)hx^9dO zuJeG1$23{fI8~=s@_95?&d4boWBX$m-Q1MVR<=cV3VbMm-v9U|FuM|XX&~C0tDXfx zRob8eNjt9(Nht>?1ZwZxN?+FD0kB>q(SlMs-kIUMD~~Kl z8X9poZ%2l=*`){&XLzFNmHj!d@A-9`6rq`;;so>=@OFve*6gh0#pwZ3sj2I-DJy|7 z`m}5EHmgZ$yp!jCr-r7TIUC!k!;3PD#O&tkh+Q0h@(#dQ}L)`UkyKoWmRVdVMJIN%~-zBQ&4ZVGbLBVc`2wc->PkQ(fIvb*;A(Z+jz+r&Wpxm~96rmm`lG);>Q->7|I(r(eW%OkRg!Ou z2>d>t$Y#ba?s)6SwC?KitO}}guG&X5x4#4bq7$^U_34J``fk8!9RLr#PFHho@;pO9 zs$c#Wr&ScefbqX#U4M4v?{?~VC&ZNU{r?i?V9B7a^yd(2eo;c^W>8YoA+HkC(e;QP zO&}$impM5(ewkUaG0vMQZ}LDUL28R{=tNV1v;hih1YB6KMme`mKrhw>vpZVr#S2TZ zwBo$EsYxwM<~qu2a?TEb0P-*a)?+`uhW3HNiQ&G56%e35k1F9<^mSHFjGYYU8DPhI z1$D-!{J^}fTFsD>Yjp_{%I$9{+n?OJ{qu0E%tOxD6E*ZYdPRdDgLZ57;b9L4^?eL1 z0u1fp@8d@Kb7kX8PvGhx+%7;WWf2jf$s1INqIw9jWOoUqp*2T0w?$B{neN<~TV77` zkpu!$AmmR|FvX-_hWqU)??akHE*R5WY71tHeKAmiA)N)tOGEcNKEI9c*F==OR zWOP+)r;;WfkP(DU2&Ap>H=w?6TKOFSaSF%nK{i%;&+`&q%!BZ!pux$&P|-6<`|E_!tp)}Q{Zz6c|vx8KTTWMEk0#rIsgdAzIm{vlqq z8?P|Ky;MDv=1nM<=i7~hNS4(p(hdo{5|&{osiOSLeb>^g*jEzp@WTxO0p<3S9WK41 zvPoQqT?DeAPDg}ccV!a37=E-i1bh+mC5c3_e$lg+qqkvxxP)A=3J4t5mcA^g-d`mz z0>X+uRz(U)b7#I(Mf5J(KYB^?r^MXxopmi*=3?i zqK-Va>dIecN*834BShvd8#2p3e`b2eNG$7eAiP*Gy~41|&&Iahz&4J$GD(ewu8b#( z%TtE3L=1=-fSKS~L%Xk^uWylo@KI`;-F^HZIJzf8RPoufTLl4`_ef<4f4aJ9qH4aXRzA?>79Gh2e3*qr|@J8tMpwolyXgS>b%z<8Q zro}`+)*?ulL44&Erg1_6Ny+AfG}cyH`ez(-c{IJkN{L0f{ z_3`qh7KV^8p_ec&WE$*R5_wvVm$i`ZP5$|NpNXJiy+pU`uTg&g%>9AJ$UifXEm%Zk zrj>rSPj)tnAMhD2H57iBFS)1rxV#qcX+y|lY>-TzjVbQkM@!X_hUs;=&qbQZs;?ne zyHC=UjGiv^QikGP8VD%=-aEhl!xl#~$Hw2d{pNqpMaGULew8M;nc3EmO%9f0ESl}1 ztxh?Ii*9@70#+GPJs?v{<$t_2RenUxCy^zy)WR737^z6ep+2qPg0cLZ^Ee0#0wP-K zf8Jf3HKAVS7Ns@V|DCwN;Fk{21@|o;#k14>F7rrfQGe#6ub4=?DNs&1gv)Ry$#`bp zno{u3dU%uifBxa<5k^4!!AgB)VszcADfXXS!FG#-obn+q0bTIlK>&d?$^Y=rJ5FQ! zwH2qQJ9A6T3_X(ngpvr0o?!QlnfkK_4TTHz|G>_jyBZj^wI58S4-ON~vy711$(_Gr zH{90)I}*C1rP3nwkf!VI=vPf5ili!ovTs=4iRamcsqm0u)sCo}_0%c+Vd9rO!c
    faz6Q7yX&NM!AQfmpx2C41tcKP5*OBg?jFpvDLCakRhFy=XTJ)`YJjFzb z#!#4E4LLm&2WSu+GwuK(!{h@f&`9|bSx|w_;t&wjZ|_;z;1-tr=#rL|Ed@gR z>eZ`jczE+KvFV-x=|`q#B!mRjK|)Q9i0%r!smbbx5MXA&jZs9d&i9Z|y{%2|@_bJf zq=cZnJa#Yxx~_0xxjs(jLG|^0HY4Ha!7oe|yLRI>h9i{qA2x#>^&%hwp@0q1I8tne zR5?*|0l6h!fOL=4K2eeOB@!1D3cLL!gA*>CpX`Cdmj>`~2dp%WTF;%@{5LQiOpPd! z&4*KiH;e)%Cp@L>TTCfa!k4CB$HcJQx)lgA#Uueav6E>is;c<)=GQ-0`jR6)kSSIB zQ^fttF|XE>jGz5s8i$DdsLlvF;|a^Z`rw@FsaY&6%i88E2#H?YJi%cX7eA!EKfF8D&2>;M=Hi9NV=w0b$@*l&&bF^mLbmNUrw%i z30h@uMwdBrz#Qv84feTNFCAD%RzqEUE2ZI#eVotWNZWW09JjxLdF)TVnnGYyDgH~L ze6L>3B^{`vRWt14&Aq5MvR!`)YbD0_3n?d<=?tmyjwc^e}zurDeP zVY+Mo^^;)m;BOyQMD1voe~0C=!1?dqM@SmD8-nxoKbk8dA4ng0c+*!}foCr+(8nk0 z%WQxh$|1#e1_qTEgLiWcsWbeB4)H&Pm;UFyD}On~p#B`Y`~ZfYNAt+i(C_`1E%!$_4#NNuZE5iTq2VDrQIa zBgN@1F=g=Bfr6Q zD=FN640z5FpV7r4Cj1(u_!NXNF4ZI&WQZ{5S+pNks127k?o14rN&jx1HA}Yf^x$_5 z|L2@kn2w*HkxY9|?T%7W8Coy$rj(9HCAdF{(c;i*MWi*6M88GahU_&-T(sf`<{C}t>%L$~= zI};y=cJTM-o<-_{Zvf z68#Je46ORUbYDM0m6MmhEhZ+`sR(60DJN$mxuH#tk_Ul|hMY&4C@n25X#ZvGP4$~w z0O)09WLoSt(0TmNkvh(LAs{yz835x~ErF7>AA!4Xqs#!8o3|w42mqK2< zpGR*;gbQFc23q&u5(Gj%KK{c|3bzif5E>ea=D5_A%&}Qc{Ot6awrvc<1%34u6H(G@h^i~==Yw_j*7ef7-`@l z+Zced_I=mog(nJ4N=o_`CJ%;i^DeC>8xVRYU@SArg8V=tBq*@I&e4xd!uKX!dVeNzZtwTcEL%dtj#fpk-}j~$-d02S9OT>E zftYx3Crw`e63;@7WyVY4tzcELd%`5d%b$_w-8F2FD-W2T>xz2Zr2CI3E!0pL1#0Dg zFnJ7%)ky_eK4L}q9q3%wuvS;g0W!B|h9@ISh+Kw{5Bcd)SP0&1CpTbVDT#_eX(^_d z1Xk4kFFy+#eg&dJ(qs7W?=pywk7t&!7CS~0={*sLB(bj~|9x0H-d4oM}k1livJLb*ab>rXHYVCA((YQhP{&KjL*jCuEy+ToBF}r3 zEA?@5AK$Wwe*?$+6LirXE(*FV{jPK}6T3Qh2_>ZOf%bqlz<#@P1Mpa_8k*3=!kgsh zH=F8U+j|}%H~W?aX9j3LG+7mM7aG~dsbYa}|@Hna!CW2{jT+LIXj)K@zAXIJ^7#GUcM0actcNE<1X16{UwBvK`W>fiz6#>z}O$XGR`AQ&0j-(fgH)|HZx(WtOD+%0;k z4wHl^F;~kW2o4=fr1$9>aFk*qT#!dQ1`~$|v~p-1K+3f-BD>e1rOnIfE_8QE8~fv+ zV?TOAc79&^#f8-AiPs;T=TOhm#QahyjD2HanxF|x5-`4Qy>FEs2Dm##OWiOr1K%*A z^Rh2o&Zxa#<(783fYU4M{xA2;TJZn$_m5UM(AN|21jf@b+#r^Hn}{`h*e>iv!obiK zDa%y2dYUfF891EY)QlO~{OX@oywJ)fEww-nQJ%mKGHkNB!le|AaRzfB^dNR+h^9g( zPb#}pnmWYEjERQU6|E%I70=y>0E&BA z<4FvLuVrR8$KI~SE(-%eJW3*fipXZ?$rsSyHfk>p0{L3`!R~Iya;~)0E|^S3zJf~W zxUDhB)JVoe;DYA~g+muBd8)>P8+zcK1yZ55a_K3h@KN3$ve2pvxL zoFEy6%b@ZtvIbQ+OjFxyf)4=U%?@UI6aTbt(4b8=1W_9JK%r+yvzDG7S&%i<_BZX; zX8Ow5D+LxDJc!#lz3!8SkB*hwMMC`r>%4x^@6Vq<$R-mcU5cXaig@6@u4B|`@k_~) zPToMOE8#85uu7r-s>afWF>!l_1)39r903g}Mb3)~(CAh?KGqAqG>D$gU|&$%Ln9&U z+}zxHA@u$%Jum?H)66rI74yNg`MaoZ!g)knzGEeZBS^aOtm>~o4wxG92lpBbxUiz4 zB5M2j)zyfGhJeJR@bH@&nkHip0N1DZ%1hZNHSVKfL93Qhx=@0c-|5U!VwnxHRp)to z957_MKxEGvgtro0jVsKWO zkzwX*PFIw?6fR5HI!2uFKG9cjBGZL$-|aZ`Z^X(qo<_oPUc(03?@-H|)CUW$+l{|! zMoYL091hkUlD6RHRtjwIl}4>X4@;?KP*PIMF==dCe<4!8vf47r)h09w5H0O$m4$S* zKyU%+hApt%A4~scaW2S4AH_6B>$wXA2_;pWH-3S{)=NHW?1LC__Nm-B7Fgvgla^MdG zI)jsk8^7@LSQuEpnBRCO;Rd|m^M6|-aCuz!``jH4wk{VmBg2`Wbn zfw?%`m#rUH?p+hYmDZjiAyd{_Wq(qzqLNUgp&QreEZsS~xMXf*E@dBUf~Y(C^>?s5 zS+xGN1K3hi9~){snpwvXn@H8Z{Ix)pLcd3Udl`##@Cj&@mltsO|MZK@JYpVS%eA9t z-)_A!68E4)iwYgrY6|;V?88dzm0{yXnydDJ_uhA+CogxUJLi{IEj5&-OGF3k((3Kl{f{1Jx&Y1hzV#4WOjd9r*W1=luDdt2gCG#Mrc;{eGBlJZ5Z{F&dk$9VvIdnxn2TnLmQ=@o3` zp)55Oalp^Vyw|;Q^poHB@zzKZqle$5=vmNRIgLIb|c6x!X)GaZt!X7UBP%7;M;To zG(+FPeB*s5LEKJX?az+dMeO&|xrGPcNbi8eA^(!7UN=Yc5T&Jfof=F2MC-i1XRKh{2-W^%Bby$Ih@B)cN{}ZbScW>j{Ca zp4C+^yFvvI1Z`vB-g04GK7LsA=h7=R+}12Z0s6IWbmcW-3fE*tifBh)GvPn}-bq=5 z%Z@+fdas_gU|Mj61TI!$W!_?9cQ@pw9_9Bbl9z!m^y!<#+zCH2Lnv@eCo<(~&E#g+z1g%|B9V~Sz&hHg! z|Sblk9ZPZTOR5h zx*zp4yq2#|6}s`7B1|Q{D_Tm*^+F5nJ>x0bWWDPPp~)QBDUp;BSo(1FV2->#`FGoT zkuwt)0XbJNqip{Ag=oZM**}6_zk)g`eC_M!5m;)@H5-1ec<0>ZpL{p^2l6v593IvR zeUEC$sW%Q8^_WI>@GKonmSQt7f@suKwR)PbkBE!W;MG{&9VJSvI~7SQRO*{+ubrrH zWC=h)MJ?B*w&i8FP#FdA3=gtS3CybK=otw%LAK*uC40byZm>_5jmzE1U$c8*5odMO zJE@r_%O^PNuC&&|h()#cXU5m`f>k4UgOgM~8F=A6WIt2OdBl3-m0f<= k(<24YI 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 B&g1|9 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 3235078..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.224335,0.334521,0.352058 -2048.000000,0.663583,0.667566,1.141807 -4096.000000,0.880572,0.841928,4.334485 -6144.000000,2.412283,2.137417,9.139328 -8192.000000,5.922133,12.023428,16.802202 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 313fdddb67abfbba8565d34313858eb53ba0060a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29883 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 D#GniX diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index ed12de9..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.306213,0.299393,0.365252 -2048.000000,0.624072,0.639598,1.142366 -4096.000000,0.911616,0.898196,4.494039 -6144.000000,1.088205,1.079662,9.710712 -8192.000000,5.713388,5.074370,17.145876 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index b1c93ac92ccc47cdd9375d31e8a7b814958f5d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28319 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

    4cw`QXiOQ|t1uCr%4=fqHhQDG<&(2c?h<{?3 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 K4yNokyYe5foTc9Y diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 8377695..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.404796,0.392017,0.368611 -2048.000000,0.860952,0.851063,1.156427 -4096.000000,1.218174,1.266258,4.468285 -6144.000000,1.605363,1.592583,9.476838 -8192.000000,7.188713,10.272725,16.921192 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 03ac13ddb7a1473bbfae321e683bac80975cb206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29658 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 63ad026..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.339307,0.368469,0.377970 -2048.000000,0.776271,0.764972,1.144708 -4096.000000,1.090184,1.113348,4.415763 -6144.000000,1.715121,1.704115,9.832918 -8192.000000,9.347237,7.519969,17.254618 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index d24e2a80b5530d15b1cc500300292595d04f42d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29668 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 z

    qrK!s?tG{}cYjo=wTO#03X8R;9M=A>aX2PbZJuF*9fQ>X{vS_r)%z!ce8C~CJg z{kRo3%22<{*SUQ5_^3?R9TRj3d3+F9Gga^A8@PCCrq6*v9gZ3BgBb-0!vWghprD_P zEF2Tn;EqCkVXUlvpFUj$`$5yM5Sk27pgjFJ88_a$ZoetFOVJkX9^`K!@YCnDUcUpN z-89jgoc5k8O*)Ls#a-EM_;cy_&D~^IeAb6pg8r?F_}u=q*x|ZcWElad$eE@N?mUia zt2pw98^1*t$EQO2ttL%vW}C((Hy-)=ZyY80VRnhVC;wh3v#ALHjV$Q{4$E+3}-u` z8$+$rTr+*Q)YA2`&W4hfJngbk5z}qvh*9B!Ax0l#2^s(sdv9C$u>bMx6K z*1rRw5z{@-Mjsiw?Z)vmdTj)PFd`eR-|^|NYURjt$LXhgz51vbUk!bYi(~CainRl? z+p&(z?a5Br8G2rbSs|Z^n%XW;w%C-{{u^jovQT|=o$iTA(j8x5aAKg^)lg(VRe|>o z6?Qxm52b6n@nl1d7b&hD zwn8_LjSE{#7al+6wJ}HHRX%g1*ks!CArSqM)}gfM0_ zL(`x1E4kP*WK!yQ^tnf9KVD;+v(f31|@GoMxoaq1AJE5|=E2tXD8eftUu z1z8nWGLk5_4_zakp)4du+DdZXvJAe-o;S&BtZD@!?y|=q0Ri+tp{@y!-o1OYc9GkT zyv3|#zQsPK|Mipg^lvIz_?s0S^<(|w1FLpuLTKIzHzmI(X^+RV7)BjfFrQgITcp~e z?)np7ymVgFF~;swAPVmv*qcjMCmM`5sviuhys7fBJ(iFSy_2a5(FlUuyvnQYs{>X{ z<%%G3%F(;7-7TA=|E5hNKRael!#J=v@ZF2=w9Z{jOI&@>?iyu~YV)?6`GjT3QKGon ziA|va&eQK77fZv$5dR8uGz(k&n4X@Jccp1$d2ZthOReI#K-ZT=ySK7lSb3;6BQaBrugf1Tw(F@4M7%5Ypb3FO~J$9{=vfnmdpC@=(URW`Fnl> zK1oj7sE)&l_Wng0zw*~Z->dC2gqvHsc+{+z_U~xdF*26FYB;}n&bIsN+FBm8wG=y9 zlD{m!E76iKZ>UaNF_dp&FBch8Fk-FRW86Ee7hR1peEquI(WS*0iRtolCMIk9bLa&; zJ;&{nMP1NkC(0ViQ;kx88#+>l>WIk?)fI3q zj&}bFGmX0aoU=Qf#C-Jp?wIlFtA^(x#}1qm$2)X6RBC835&tVJrl{fK)1zMZ$P{NA zJ1{0?zrNXscQxln|M0Lg%5?`J*s+K!0pTqm~ znCaC(C)9zoi0Tm*|MC+0=T68K!_zx`hn@x`no1Ta6Zh=$$EdH=)P2B}vRxjg5d>A% zdV?7p$Bn_|jwb9^k)R$;C7^Eac@Gk@*QpsiXe?c=eFAZz$cON-dzG!rdy`Wn@ZMmm zyTMdOznxaA^E|6n^KGONR)%7wIKG|@a#WuHGHi&cF2J>hdZa-b~(4^ z%{8g^$IHvZKbD4`XATFvKty5NbNpJ zIvtuDAEsaOO83FZ{SZ)oRX67TZY@)SlOgiPqk`1(;nxy`jpGs{2bYtrPHE4`sZ#Zt ztCM>N>gC@daw;BNYU&svQe2WwU%j-t-rQTHVVRfwglie@+`-7wGO0P7n>RrsitG3V zJLo>7-cFh|3Uj83t9x;CT~dcTc_!q}EIN^F0OJ;K3_^ZI*z-;NvM$tO2$7>~9hgz;|* z4}q+B$Nt_eBr))Dh2gb{H$#EZWSbUvKm~{WGCCE@;BHN5zWPu{Y6gyUIT*%U}Bf(wmKG?U6yvE*|>M z`<93lM~lN>%mxBkTiV^x%ju<0+AA+9&}-iN;M7g0ZMULzU5)#YgIN9~AsPbGMuVs3 zRgUx8ls_~9m@5a=syk1Kk4T)Tov60d?=*g;i6h+Q$HZxC82ENWZy*54yRLT z{5Sn!nU{-RUc@-H+_5_7Td^A%kXPWxbJf~E*VI9TON2Er`dmN>Ul??`>05uYUgv0c zklg2;@Tw?ih!3bfwmBiG=$tp@-c|jAXC<+Qw$SCc_9J0t71|bmyR`^aX#J2u;a|95 zv?1sv;l34yG=5gxH(Z80U$r%U3?9{7(D`bg@FsY6N8)o=0$5OZ({F98_Z)fJdLVlx z;Y~7w`)*?S@Q*xw*ec8lruT1XqwS}feVIO9xL*I0o?zW^whuyhx=4{7fQl{?3V7E( zY&Akvb4p)jwOaU$c>oZrS0Tx0EYM-kWiKC6*xNn7(Lco{R{p<2I#9VCw6A`8u0PmfRsLFh>W`@RGQwMxh3&!D%!$$~(zzR$jBU<{8AWe}7k)GWRk z?M%)d@GG04sc7Qsl&OuOWoh~7v+10Xiq0TPuqjyYWbNxL{t9`Np|bMpMrflx*&RVa z!Fy6t7Mj-9)}aoP`zUgaQp*mG+^TypHiYY!AFfo!^6KA{xX;Px(lRpQzRJUXK`9yO z^bN!v9%|{F&N^U7m~CFpzEM(rzIvqgEiYey4#|z~I za!3UPaX1GU`C<%I&K|^?Y6x~D15m?U+EdBN@lL{FJEI%T} zgV793Z$P(Y@7(dW07lr{zZl%Se25}uxHxY*aF%`1`V{Z=ZqD zKx|pX=s|lsl(T&q=m7?gmnTb=LJe#cC~E&Bn+t@5skXDNw8FNiiYDlToVnQw5I5Ta z3C}~seGEo|5l5&EwSu2Zue5)-hE`Z3XS=8O2{uT%D&%m-(TgEMpl7wPs*oAksX5T4<5ps_z>qoX~4kEwP=I2PcGm{i3U@E1a=R zwjd`x6t-bpG_$g@%Ri(SUjnN}NLAU9OccZO(EkGc$v>`PO38j;3EN?C#&F$koxR#< z0)|EqPF-Kg_7s^sDz{Y?ycDBQ8Au_WY_b3D!bp28Yt8D0_;&r`#P9vEulSlI zL>a?q6qJ;|*0&QUypwz|YY-Vb;6YEHBPjSFS-(!x>PHOJ%^th4=Om2|uq z{uG{_^kG9F`Y7tmY0aoIsa1xNC>l>N!p3GC32w7DmaRGL?=&Teyak7>=YH|8Dd0%zn{$7)B!!)#*o5T8xy zP6TV7&6o0^jxNb~FN{DG3*;jMC$AF|M8LtHWsI} zdu7aJ@pY-?LY27NCz}^S&KKn)-+;zo(kn)+id}u~I-{fGJlWF>tOpO^uov1C4@2A1 zBS(w0QYhIy$&r89hHsXUNa6NN)256v^^ z$?myJSuTvWE84Nwb8AngCl}nW3_kOPg4QmHVc7xX~HYR@^({YI_M?luk*ABvXOke^%l=Q@9s*`QG+daN#RCIDTjRPQ$= zcsop#&+1g{WV@{vW3OmCy(nk!z;C;^cPdhCvM(d60FNF+ZJ_F%3bXMQY|!I=n));GdaxvBC>GlPqv_~7r?PPbXgZ|Xf- zzaO=|1uC@oc82gRcrPb zWDB2O2kKR}6Qp1NNkhQyV{QPGrla%a`lxt2st_~2(478Cozf)zy2DkeWC^2ziBsCvNS~p?!q(wZ|7y1sJLAJfmhgd{q#=ba7ldagecQy&6>wRu z*v?Y5^Nm;271-5vZ85*l_uEh912{RuXeyjZJCprm`3qY)sU8|$3*}t(H=)V$*ZFz@XsIDn0T?xre7~*3~7#Jlvh;IJ(utv{RxE-(v}bC~#pM4d_Pd zsm$DVlH&c%j+>H_&PO(fzgWU`p&8{#aG1Z{l?@o!`nxGgrLXd@z&513+ZK9V^lRI` zaBj{}K@^+QHoi}eYq~*2r9G@ljgZDD6lF0n4gopXOH*6*WAxb02EfpBcmL@P)%iFP zYMy&Dzl=7h$*>mxuqe#y-N{~k!moP`LyBYKk@<^FSZfZ4 zxh6U#`wojZI6uC;zn3PTXT#K&9iRL-2t^F2rqtTlxb#aSua36S*`Yk3@VT2imk$*Q z)}-#kQ<++kbmQ9Dmco_b)uhAj+AoD zlg~Ns9qA*QL4`n~Wq;-Rj*pe@leu^+XohwSu+|-UvGVeI%}}&FJSgUw#+KN}_9Nt* zW3T)jG&PM??dFr7?(u>=Kb;_&r`z$qCbw2iojA*?zDBx9nRd4^ACoLQ$DA7LUZW2^lqC~AWJpMjqoQK(M-OQWxli#z*cX1AW2_ph&dpE* zJxS}lRTZWW?yOe=X44aI|K_P{##&BPYC;d4__ z8%c`9$6XV!Xo3`!?qD)bOH7;h;sc|L+=Wka*P_BOPmgnjT{bBp_Qsxpigd?&>>fFL z9(p;ssreZb=3eSHTTw>eFGtQB_;I%d(w*`(3Tx%BP0N83SS5h#IhMy^oOab%rE!S- z(qK>0<3I{6&C^l&WE>9+=ar;6=ba>Di>93w-#^(M^I`H)Z)e-4z^p-;AvdmqbzLRk zrO`b&BQS-H4x$5rpXq&!Sy+%<=jZ9qe|Zbfv0r8vQ<*1~Fx?JY9vm)4Gbq{EpuIC@ z+W;p+e*~fUAZUCWlEk|+qhtRrkD4gWOfQ&vTF)O#gwX^mhol4bNO&M3)j=i@+wVYS z$&Hqsta3qrlru3g+FkuD^Jr^$)=P#q2yEBv%#a`>*rpmT2)PSoYPBRchZw5!|J||&Hy3AUuNBnGP@uWquO0zaGV={y^Y*EB64AH^M24#W^GYaB_*Wm=*reg9tM zjh*0!sd+9YjS8HiRfIf(Jf45I5$t<$X)V|5hh5ieu)w8tB@&DeD4n}L{Q;RwjN=ng z`(@LTmF=Yq{oi9}2+O~S*pKQ;oSrk0P?F%Ha8Iu2U4>^=W1*%0SXlZ08Ki zxI|aMp5i`y%lXjaJbr<$IiqiX&7g;U@(3MhlU|7@?_P=gbX+Q*YbUJ@rUH}9-0Z~* zlW<)1GW^DvctI;8=oY7@rz6KI;Gm9u{U#jx4h#(~u>f0Jb9#VG0q|3IG5F0AJIhe_ zrmh78i3A0YIhCcmO3|*ye3zxChbl{Tv&`RL__^yyi6haIh8)_@1kU>#vqL-SN{RA; zWGr9^!-He&x}kH=IjQdT*Rt+6^R_?s+eF7^I;nF`qH+0+A(cR1H?*!Qidh>#T}qMwynN!dvmrRXQJLuOg&OJ-6UR+5oW36+vPva?b$Lqf*a zNH$qn_xsa*+{b<2&+#13ACEukD11Nb`kdE!UFZA#I*kHT?ne8Wb9Qn(l(?|N)N_-m zM}_y4j+$%Z%eJJLB0up-@kz0tnf{v9B9u)@L2}ifzvuRiIgIQ%zI8K5XSYjkemr&T zHbXywgo3*!Qsm!XDUDjNp2B2Dc)=hH0pLYfPfz32soaTLq#Ml4D*x$PA@LL)j)D~O z6!+5nd8C*k|7MZY_(L7OPul%9`^xKIw<{$)t59jzQB{uuA96&1Fr5D=`=ze0UV~G^ zCebHKP%A3q`ur~=&2@_Io}O1m`Qm?BNuj{|5U!X*51x2<#l78jrqr;W4=gUWL5;jAbK?y!j9N#HU;R^C>JtPzP1yWc z>LUd;*MaRx{t()Kf^^6L7G6*WAkC)O4lvQ8*~a4HL|1f#pq4ZMQ4~L}kL{lV zfAbMC1P>He|9Ujc~hy+qWU>b#{8kpdkod7Ti_b(T}3I&9Y>KmnQdy5kUmW%Aotr+{j_e;}f* z&vRzrI05T`G*U%H1@wb33=&N|6uPL*E7Z+(8HUT{k4VHqqgWOYG5e!~0wQR!PQJ=AQLwOOCkgC$e1aY^xy z%&7@1eo>N4WKL5rf0kFUM%q6UEpOXYuD$*#I-hiv|5nhkVrrp?X!X!QHqkvon@iW) z#poFi$uid|b**>Tkmq=V;&m<>&a#c_pZ}h7L(c6$MfS(Hn001lQS(Y7z0>BEy2P+U zl=fYzeMg4clMCmJckH_4-sft6#J6niK24hF+De>*eNj=@(IXE&oIr8myeIrrR#VYt zmmc+aNkBRA@9S?8;+W^dA1klKPTbW9?oZEn?P#VKu=wL<-9zY#yTvg@oiCK8Z)#3j z2sx&v9ow$`zHz)Z;o#6_VU`aOrdltJ+ruy%=&bI3oWLIU>9IZ)k8vr3T#>Xlety~X zOWBR%>``}&t-nQd7%2WZ9#ay|x0_pt)u0B4ZS`{q@o$Qo)!w z(mwu_#(bZKDidDSI!SNwLxbzz*~WK8+^IZ+Ly)H}++OrO8cH}3?BAN&Ki@II9epRe zF5}YnxE-JC=xq*r3{V9nu^gVU+3J_j(5EeCe0Z$Fx`T6oyNsf|i>&Ke9872Z`TIdf z<{)UypL{sM8=K^T;%n*B2QhkjLXC~j+pBR}XSizFmhs79o!2A64aw^oS1%qYI<(2T zuS29NevyAPf_KzKC7g4su)ABSK@+pBd~oWR!k4kd5R@bMiQ3iSTbOEOST9;u*l*$} zSrc*9gHmbVy8KF5BDrZsi$@_=?d#~d=az4tgt+rn&x@Hdg$N$udmNZUv$Vu%{GKl1 zI-}<0gA!SGoU6aT&pY)+gxV?_v(^489u*fSugQ*3#6l^c$4ZRoEC*y?&s1OS9vJsfvcS~5InO?+f)%E&^y)<(b#IzB?>OC(3p5s`7B7On?h|ojV(y=e z+&_9MS$h4PFsrghjHrsrBzQ!9fA}N*5xZ@{xxn~5qvc}Drq+?f%BE-AcQZbC(ARGP z0rKpL3y)O>6Yq|P6_@wF^x)SKbep|;L`sU*E}diZgye&tYBHTim9B^yi!f2|RH?c& zM-`VCG?Zw(F(A%WuxwI(RFbjmc^%EBRK4ecDzVb+f3|50)XN5+={+N62lm2+ub;#> zJytAhqY`558`LB+!2QMzT47^;9OY4(ME1qIOn3q# zjqjOB6>)?2eP8_Z=Vm{Z2Nj>+WxtuQi$2v(*$X8}6}q(I97)hC1TNq1Z);MG7?D<0 z-S**FkC0x=eNF4tm%97H?US|orr2l$ho+SL@9YrKq)2YMbN2?R_h6BGuUDg(=)a$M zy3b}l$I_%WGS+UNyG=uRVycWB4_jlVo`%|5tmb1a`Nai8)vM1t_pgvMHuer_b9K|@ z2q+A2%uyL7-mqqU=jWoeZ^zy00d9xTfc=k8o^cit{Lo_OzF`!&96R-OdH(k^?~h!n zYwJNpY3!wJaKzA@*&4F8(*IDWp2m5}dGoe|pC7H(y)B6Nx`{R*nggQA%-_-X#bTKJ z)NNdcgKym*>DDOdJEmFOYqsB=B3-%3jJuC?&zd@AuFNc<6vkrbLY*tqFyLn}%aAFnXU zQ($>K@m=NQ$B;(0k%-tWBMq@{t85ySuLeINr;59cTSOU_Q+ZVoLXWK627$;5(UyCIr z*Be>Y`MM(0tg83wv43^cY-1Y?0kBvKhaYnE58}PuXTC&cn*M#DcWy->h)bku##rMQ z6;*xI5r6lw)>y?A>9eV=cS18=#oHfgjVNe@&Q)ZXD#TQ561sS$bhKWqSz;{Qfn!gw zlI6o^22>OY$%_N?hf1dA+&r(Qx;D;8HDI~-zDw+rqVSqq z1y{w5KlSN8c~szWGmvI_wxs@{rJn$*fe4rT6y@%?J?QUN7_e^9d?z`QzLF~{wk#b~ zbfIFT8_&_^=|`?&D)MHr2ijj|nL5?WXb*Ls811vw+*GO@)9W#(aFj{Oz4G22JxpNB z_9Lf}5B_YWyT^X;GvlrRVZHjvAEH~H=F7qy#LR5Ft;st)A>q*r>&vt@5-F|=sv;xe zDK1jtH?>@1J^uXDe5Kq;;Kjc1n5d6|BVEj1&xPJ@tO=Sj)1B1Tvg!?JUzKv`bDtdC z>amf#7BXd*C%)@RZelabX6un=a$jzv7=70bE%HX?yPwwgXj55P?9WKohh!xe3-M0s zyn5PH#!~V+aOqHO<@_hL@OOj5O3`;tK7%P~R@+rt?YK(YYeQ?FKQTAuK1JOM-Ss6a zYQII*W{>HL@sa3umZ!2-xvIJmv2UuYxtQqd&|twYo|K4onE@WG%z-K z-|H<~AX|@GT{&amvf^cKHlwdaLgMUSO#b0_{Ri(%x>WF+_V@dZp4#aN8MYY5E#Aw! z{AIAQLpJS=u^gwYxYFKS-b(+k=L(#KZ^q2kRhbrO-_~N`vu^BquV~}#M-rh-~p z>28T|Y+wy9&&w@o`RG1W(9l`nU(1qhKbM%M{_=w4NMw=71JT?q>)wYQ{M>g`op63y zBeuEME~=XS=5JF&_ik}BSv$A6!r&mCtqF>DOYB8z%hF$F=BKM0Tf;uTTlWuJ5#j%& zbTad)K1z-KU3DB~i~4bOPl6dVi4@p_(ZX7o1_MHw?xoQ4Q zGFyy~G9aM7`8|9Crwh*-0Gg+&DLul<`tj;10ltGb3O?U`V@9rC)*3zMbnVVyy+`)( z%buG;$3>32KIazJn0z7N84)$E@yFUpTF*NpWl43oHzM(#(g$*w)kIiG&;ccnbp9Pj z?W5LKc?~w+jnUcG6^Phrl~;>0%T8GpSMm$Dl4WH0=B9^MQx-f7ykCA_Vp3HVBc6_H z;o6R#Db`l&Cwnt8R(*mRB^g?zTOHrp%?RIpa`@4Q<$`lmA1p8TJS&pj z$LjSVwQoP>h6C2p+`p8ZWU-)3-mn**BR39|`^A zYyee{(C$GE=Wsf~d)JxAr|u`FN|f$aS-P&adO7l!o}rndZ|z1gtawm|d~#1t`H*+n zd0ATicevs3Fs)OGbwlxpm)#tE!f}s`}W)0Q$PS;sXD?$K{dVT{)}MBC!%4J3##}WF>xa9NLTli{de6 zW&Moleu9_hQYuRq@|VH}!mv%|n{bJ~GjV94Z`dMPrLdhQ`eRi`PjoiB?0|jxhejqU zYB3tx0+t

    X~~;_vk!zpTFb~3@F|rd?8SoS4rMjiz;kAcda@qJGW%s56bHYagae# z6kOfX-SZ4Q5WjxapPj8wLWeY|Y%^n$uFA-K5&V`;Y*%0TV;W8V<~~kSE53WAcxcZF z37#QkE1sjJz7c~0vOhcc(`J7QIxn%aJ`3-qn7%fbax$D_L@c(zL$LX&8a)+tMMq`y z!^NFXn7$onF4Oj2d$Y96MYB}2ozt98s43(*A}2%C`94i~fHFcJcOVd;7@D%*jqK=5OzF!uhpDWw0^LKD}7T_%%JjVr=U{Q|kNG zyaowuR*T)s`FMqegCi-9JeV8lujcro!qt^$E$Gh2H~jPK+Di7XC=u(^gI*Ur(=7F!&4rxs)K_^a~3@yP6ZR4kIJ>42fFV?8I zvG?oi9cuXtBhw3iL<>qu>)kuc2zOMxI%V&T0Qq}A!<5WtF1qm#P5R|tOHPeTb1*J- z+;^ibEp7;szB+T;mxYOsx1K#qTf}5y)lotJ;<|dj+1z=Ey*}~!C0KmUNH%xB*-=uV zP%UrQESuq=tWOc8-A&clXS7OHUHMShq(*aSHsR}Q7UjyFeCN^(st(nHK<*;1UDBSV8W7YNem$$Q&9*)7D%+$_Ww;3c>TVJ1jl|v8JUilYU)-XngSBBML zUay1Bl-UcJCiItI4yJ+D`GI^gO~!Uj%}+buPy$2CBfnWIDu#7GbvKFkfUSAoL|o0E zBriGl<;@tZmVW}gzLn(+nc2LjCURDC6vK^wrnf2{^9V86{bpqc4)xUgjAy`mHQjt~ zy8s{3@XSNFu}_+wp)$BL-bH8fJ|@Z8=1TzUKYM09_Kmh{%NHAaULH?;GZ*tQQ>*r{ z>$*^ppAlV`_wq9$9OO1!-zs?Ei(XLXp9QF{n_3`8##eO=2f{_H#gC-l_ z`xcWpmVL-xh8(YQcDzZCoZhc8)FSwD`?(t#*GnV4yciFDRy*^|cGJC;uU|!&;59jo zveTrpX^Gkqs3C7(O;a78I_R1{=(UqdN4d|%_~vP5o&@dAS-b95u^U@eE}g%8>p7bc zw*fmZDbe`;DKIoLTK8kl)i^GgH+X$%PHyuLrv9VT`(1A6GRK}1n`$s&qkhS9 z;r6V`kTCDpVCOPtV=?gsMk5T6ty={BH=P-~_jZOWH+1W9QmotHrh}Eet#TWx#PjP; zrOBYMH+aprP3vF|i4$i#@Ra9uuQTv~k?<^lWw!H>5MotEPlih{q-d{ zse@Q$R#+FG!Mx%UL*oo4Cj%Hb;Ob<%jhqGy{uHDVpahp(S;Ib2OWJt}S_aN?(06`* zeZ>mz|3%<>mU#+s&rhzq#+)tR#(n4oh(g*il9Ut>@x!hJh#e0wlLaZhfB~O`u@eZT zyezM&l4t_tTFqhB{Z--MJuq-zOgE3@-^`&%NlpeCi19+6qn)Umi_0^(`y9XLjJ_Yi zpTb5ygouC0fOpS-I}qTiBV)@LpskPf_25ISL|lR+65DRZi%()=VvJrhNn*c^0J7sw zR>jl7&xfS~v=j9b;5Z0~i#O!O%X_vERC&0Nq=RB;_Z>dW2?`Bh?hoIt*2l`gN@2SA z1ju@PR^RC8-PF{Pcsjy=bnygZGu6-jeidw>8Gw)aw%$HB3vhNqR?_2!KO^5NmV+JP z_J%m*SW#^u>j6CEYs5VUxhASy!cWtmGN`5ME@e(l61qSz0fH-wsco6gUvJFiC!TY^%aB`FY;S-b+8)5?NRjjRfB7PTmO?eCq%wnk z8&x5-e%d3@E6F1xLDd&Q)~@-x6G;X&a|%TXCXJKwPv$%0=L?^iD->C9;<;_# zy*uIZ?d>+t*~^di4GgHh(oLQn{En^NYa6^(roYFpU$aTFA(h&Y+DC2&U<3C1Ea{e8 zN(oMz|1_ap#us{R7?cCHCVl<4t-ON5#4gR!*6gv)_>hF2<%Ax?MD8amo%H!1H>#UMmkPYq;q5)^6RIst8GP~dElM@E$mcN=8*X)s|iICknM4pk^e| zynzR`4x{+U$Q>ZbY69RqJwKle)IDI<`;6jWz7zs{6TWUH{B$4CmwbEo?lp>sFpog* zl1E21UY!XCs8oN;cS_6zo0Rqdo)@D%Z?OCcg)#kg@PiF~eeGM4&7I=OimpaPUtqY2Z{+=U4 zrAy+yd&J*%2aQZl$vX`>rRZfO*CF1wq0O&m;u)XZ~LO;+O2p>~R3 z@MU)1wopthDk_qKXw)bk<{VD{OuN>7m6G*?oz>OV!1rag0TLSls*jUbI|3Nkvq|cC zUh_YjD{a9uGF58XzXeAqT^{C6^_&b0q)9@Qs=;-JfN9&sqI|-49TO5a4pllSb;9>b zrKDf)fy>_y)RG&17hOS|RKK;AjUlb=*L3e9u3;zmz*c!#Fer1PmUD=qvaodOR{VSa zIYa0tA(aFfqeUOBB9sX(WsV&y1qea>l9J&F$X&niO%?#`@*F!arn$kY4uPjdS}SPF z1iTLp^SM#GD`GGs`-45Wt8d5Ki)=gw^Y}(W5`| z%fa}S+tAL1sMy%LH-_1m2A|^=oSy4OnlGBTr4rpt1%=g%L$AtE{Wj$^~v{= zPCTWNOsqyN%4&soHbNAv(TI!cs;U9Ulw`{>-^U!VV*x-O`b9Q^9D!hz zfHS9Tm@B#hw>lv|1=x~0bZw4N@?zCyu){TQ%UwvMRJeDGr$5jGa?kCYFjchIIh#Z= z5Q8}S39?IrGT)MtV|B8Gy%0<&c>1KAe#qml)S|#Vu}ePz=tcny14|T{fzItb`o!Bk zxsCcMZsGw*Z>6n2N!m2t)Ug&XCg^ux zuE~QiimAjZ&8@`2*oVo>6HI%VnNkXmo+fg>g=YXT6YwK0%I-V(^E`f|!k7LYa`MDz5$3>+bH}yk(2a z&ylhV;IR@cUC>4tH+-1r>61`s?fitv;nElt>2@!{kmyC9#b3+WnEPB=*ao>vuD6PLEzf8UTB0aGWbED zP4X|N;eA46$n%-_*yxuF!WLjwng#|jm43Z(2kczG9MJJwouNa?o|0#U)Wb%UQ1R-4 z>D{hB{IhovWHn>stW-wGd-3t*a-~y@l|Pcs@SMeH&UEMyC*~4bb8mD!s6nC}4BIE? zZ41T+ObiSMfTy=Y$gllLaF>HVcDyy}AVPhn@7i@D=5^lwX!ibU9Uh7l(cNLZE58x% zQB*&fY}vs#i^97Uve;lkksrs;CnwjbZv$wgIwqkI%!Sp^5*Ib&788WzJo5RJ6CO+b zK_S2ea3d#_g(TRwXO!90bBK+=v(y0cGoh&P;STfOzcCz4>Y4-vuVC<6If>{G^fE)G zbN5I?U0ag>Hq2%l$i^G#{+_&Y1!s6oMW)e46 zYY%%bWk>;$TL}%o5?TUXCMK|W3r_V*mr}rwvm*oVTr?cB*ROYFe#|CP%&_Iqw))lO zxe(01WONS5ZF3pKdvca4h7OHoE>mlaRN zFVqpzvU@6bCwR|lBq0yEjW$?ki#=SD&_y6`uu+m{vCwUHk*4WvVi`D~=zI}F%qher zBNI50=Q+(YU--_T*dx=W!-T|zPgh4|3wc-iN2JT;#F~i>W@ixcsSAcZ87ec&rtm)1 zWLQ)N!#d3kr44cP5TI=px~}dIUG*UeuvZq?|G7dWvMwHkF$7DVy1(ej|5u_58sGo^ z_5;6+OJ8=1v41`|Rs^T2{{JOK=J^1pIl(FfYzhfTFwF50k&!gzz_T8M(E^>1o`ZGn z4b*IB17f4-04n{8e}1r`+8LJc#%=**M~t{)OQ?E6$8>2NCIRYv;Ab@ZAT zCUOBNC?ds89uxONC&5H*P@fP`s!E_^7fio1h;Xib<&+qgpu(9*GTbC$F4FV$xx@|h z9-^#)m6Sjr=Ge7TK=bed%w*8k<98jsCW&59rU*jZKc?^;a?q>_FDn65N1ui-I7uS% zX1A?CcJvD20tS@<3=x8lOyuf~>$_0kdCbSJ`*Gr1W+g>1s48Y|Z$MRs&|W6%QOVju zmwJ+V2*4)6Xj|0+5O0hNhFRAPn1o#ZM3ev%%M$IkXw8j_J(?vMDq(~1mqHUD$BtEG zzXU|L%biFE<=2xHXxb9Q8G2esFZ?(#Wcw+F)oK6#a-QXRktN>!%g~1m{uUBp2ed1Utcw=m^gw6t^^LRY29K&+93e}g(~h;Yj-du5QIuR}&d#yQ)} z3{+EiqtyeZ&gsW)SI$HCq@%QU02$=!!CE3AU-?cT{iW_#2ejFjOrRUjAUgyP1KTke zux@#VdqXq?!K{k`P77kB+_iBcg)5!(#0imsPL@C$CN$dl5+~a`ZAwgN$jnobGZe1# zfLg8sUGR&hE&!e_YeTKERDkG3%5UAfAwfZlu>PQ@4MBWN^!+1D1bB2SLyQ+D0yTyF z!Z%ASkD!eCh&;m(-Q0M+rz>!KzB|0jbRnxJ_$(L_JrA%N0GYq}Ab}3uDncl-pN*h9 z7o7Y{SUVvxN<{?lM%=}KqoqJFAsY1&G56jMVO4l{h$Mgl>A5xT6;>uO_(h0s+=*sJ zm^Ivr&G2*#zzsr2OKW$a%L5A~|G~KX2=(tItas0Gex~h4=e*l~* Bizfg8 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index fec5ca0..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,52.160511,54.205441,1.698163 -2048.000000,51.294209,54.280193,4.249713 -4096.000000,47.785984,45.697025,16.268471 -6144.000000,37.733376,52.141056,37.903423 -8192.000000,36.900864,37.159935,65.060867 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 76e6fbef9e7edea6c7151906ef57f7465686801d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27364 zcmeEu^;^_k_wE1+5`wg}j-+%6$Ph}mfC@;rba#qMha=r8CDI_>AxI7#(hbtmF~iy8 z`+c7GT<81)=ZC{}aVg9&vp@T@_FDJ4*L_deGgZ0Uc+_|h2;{bcytD=cf*A;bU@Y9i z2EP#;nppw=h`7pVyJ|XExOx~nn?qELT^(&5Ty3pP?zx*gyI48c^K*%C@p9aI?dt02 z@|c_3?%yYHIXGK#k5KL22QPx_D6iuJfe;y^zcIc_k;SvQ`6A3J(k|Nq1PuWZY*r3WM@d1TY{lS4N6TjvzN_O`Y-NO)*y9N*lG zU#}=l)8E)g`afdhE0Ga#1xG|-AxC*d#SWniEU=`6+uz^cVAcUVA5Rt6h`8tHPa{Nz z7_Ef=%M_)}h9-WxY=d>xm?>nP{o zpplNk~XcJcO6-2fclJaC&Ol6-{Sm zW_E{+%*;a`3e~{NzxWiIA1sTPTFgdF%*Hya0Pf@8_-6ZH+#Wpi-Ac2*T{!ReSOLF9 zUlNHAjF=d{lzZcu9xY*)2t#}DZP8^hHQ2!oTwL7ZiPISuqUsrErLqoDt6|3Kv!_y0 zR&xy^hW_W~WxlAX85e|DaT2(yuln_m+Czv~*x7r@J*1`I74d>i^ccB!$7!mqkJu>^5Jce19aQr}xV-_}ys9Ni;}V z7gx<2iNE4BXh;GF0h{2iBsiY>>wK02wDyh1FEf00MZ_;Q9)PG#67{gp=<->O*YX74 zXW;E>w#$15sC6A3c|r*3zJQw$NyXn;AI}0!Cz3V`zC3G=2<-xl&Fj?1gWFjcmkr`1m zLc`e#q*{M)26I(t(o|W(!orGgl!9Y@c5zX6lCM|Gw>4gbWz-Q$9C??wt}zi9W?hSb-2mD;R zwnXz4Qj@*sx)};((y?GZ+QBE1An+2XlfRD+5?VsJ&w@V^o?~EOm|0rZ$B&g5W-7!o z!xIwL6de<|^uuFf)SBdeCvY2P{8{Z?w=o1?s%gUT^{R{GtqPk7F87^ZtKV+Ulp15n z#n9(Gd5ayW00j|H1CA)-f+|tpoeB$wa3z?=z6F7ZVaf1pv-3&jGoK+D(Of;gmY43B zj=GD%;D5_yy{*dbL(Ke=2ITikw)fw>kAD~H*C%vzNE6b- zk=_(sdOxLz#5(jnW>>9Ijn5Ly%RKfBPIhONG&D%|nyqrdJ8tAF4#Th{e-mi-Qo+*-8Ke4E2ln+`YaVv?zAjBUZmUgRXuA!_$7#sWKj<; z?xwRPFBJm)MsK%hI#JoDPcdA zX9KB#6I_)|MwiWW6(>3p&et>7cdF+HwEBv4t8*RZn_Tzi(!4qhIh?Hi;&^dD zv_G7|?$;z;)TufqD>y(u1`tGZ0rR7fHJ4ltHfib`;CIj;OB?D*Joi1K3`4LmvFvVl z+pw)ufT9acjK5huhZjN7Y8dcDoI>s+G@BZYLD`)B{Vl>1_xG0=j@d22>Hqs0LvqHw z6t91c?#fI5X93BzF8z<2MIJsc<)-M)`HNb^J6JL$yP_ROR4l%i#L+53awLOq)5vOa z7xXq?{4Sspc>OF)EF)B2LA?p~?ww?N@WP&hhk)}#rog2oN8y3y?b|K zV#{Z@HbghP%){aM_n7`cJey{)5_e-96~BevGgt%#r?cq%!h#X?Bio;sd(DQ@Ltyi( zXdK?n`@fwq;MZ)D@BVCM)L{;Svv@tz|AI{_nBYDy@6ZbhYUT=JN=7ah&zC=+$?d ziDK3^O5y`nQFqDLtkSY66O@Lw4zQ0xV~}tqSJ&@b#Psyh?Te0$bKk8<&3hA8ryZJe zybjlHU}Kk?b(2&xFMzDc>-ER1>EbuL7U!=oG7%7Taz_Ups2|d@vVU5zh#a>kc_%E_ zM@Jh^e%U-P)=U2RQy!GMg@mMZm8o*`u;}Qur3mh|bdS0F!oo=a>tqUMfa1Cgg8XPi zt@ih~f?IfaCOvU%#mfMPhHY%TwjTZ3+D;^)97Qdt-ROO+BXRu`{$R%MbT*D%EBeES zJC9vATGskgXHRtMT-me?{RHpdzmIx1pU=|Ll6INN&CAoh^`^^R(}k8d$|(Zf$Ef%C zlo|lXqLWktr|!mFqbLAdtEkI8goiHxzyO`a!r`p|6((B3>OJ<{(|b3DvaH4nsh&J} zVqckVWG%9e$V5XXtFdomIueHfB^V#B_4^`^C*Hk(e*pH(WjRWy+_)Y43W?OIu(%C! zN|wjoTmwK@XXoc-j*CwL zN+L<4Cm*qCnb~SroxIL(`Lx>JaqNYK>@n?FL3``l-MwBN`@B*D2Jy75;(9KG9e|>s z>cnPbsDj`r@cpyWod)yz7$bfW%6Dy+ZQ2!`1Kul=S}^?US5`<*JUbdm92_6#fVAzp zJqZWd(3d5Uii#?dUMyv0#jF?vOhsp`DX6TjyE9YAk6ADZHFEGEo12@Ucm@+O48&_0 zB(GbpG5RYda=8hLs3r5g2gTT;KjnvA^=v15NyAfc$nFZ+r)~KG=m1;R-fK7{M2MZz zR#+m|z7-VrOo)JMW^~(XLrA3Jg(cms&w{%gY%nhXsFo_a*ANRr6?6zzqhE>HwTfNs zsyQM6u0nSq;J0BhF%nsusxy_Zhn5=VD?o)v5wKcPL_vOiw|YCW>001sGg*4Ssi~=W z0u2VQQAh|HP>jv<2nfWbi+a?Z_yA~w#=MM-@6@wo51Ox$F`$qb?AKm_n^>q*5ezT` zk8#@#*~q)CpkyPw?LmCl3%-NH;Q-qw0wjZ3V+}#99wH>x0gy6p4Z5j_lFoi!#&MQs zd^7Oj3uO?}sa@j`dJ*S$kL-Rq_6ttzgWRuCW+L;*VNSW$c~$SS0VMv0<8fW(3|KNK zh5K#z+=C!`AK6YyK6~~I{=;2yqS{x~t!!J@L9lCIgwt=nsZr8+RVlg6UQ_)2wbjl| z!Vs*y5nRdnCcn+`qEs8*J~j!?Oy55WyS3}|pxFrv4{w7bK3iCdCW6<$Lrjd3l284BGeF02yG zGpNA#UNdcX?%Z*dokwF6e$a^lT&AZmF`T0W>gQ*B@c`z3U`%Zh=r%@+^+o3o(zyS3 zL=zhy{{!G0eU%mfxuLwgaO~UEkii-!Q_xL%0>}y=O{Mji$V6()w7$iuF!_OZak_{2RcSK?O2Beg%=&^A-6H^eOwj3z($M#F*k_sS z=eGzzwM%+TK499A5eK19h1gG5MI9`6f#XiMhR9TF_D6c2Eruk6MgrnDhAlxFn=)U@>~1ZW8U zr19Oj$HVgh{mLN#T?r-gV4Uo{bz1%us9*R)7TlC7tC6+HFu&`oL$z-&3b2zf?hg$O z*>6qeW@nfBo;!nj6)yM^fU4o8F)ia!R{r0oamn@BaR-y?Eg*-p0=Q@anj+V&@hHOp zWIWixOz_RXqZvs+Ef9K*I&DUiErPd|0ha{$j)=zA2tWeeo0_Wa&WIs`9mh2u$hU$6 zJXvn8WHFG|z0mrWO59f%T)k0W67SLW)JP>lQ%y_;^www+0o^dzO;`1$3aKH#0T_u| zbbX4*u&B(3KX@_{=ZzghcSD1AU@Yu8-Eq#>jb9}2rSC=GEq!6TY6DEZSWMXzSDUrP~fg=X5sSc z>bKDdwI(~KmCmE(4VGg!6OUQwEU|(*U`o&r#Ia!+`eLMuwvVVy(?yYyk3o8<(D^Q! zUaSXX?!OF`t>X{!wfh-Lf`I^i8gOymzBqa_TfY-69Ueg;@VH^HnHf|(cLA-dwdw>Go1*deizO6Mc zX|nFYCUl*z)?m_XaG6qqe`_PBfCI#(;*^0Jq?C-vW4DL(sbA_t;=vCD?o?&0(KawG87&v@2`?!o8aENm=)Pl z@S3djb~GLTwOHl*qiz=C!F&6nJKW^~&F2n|j`mZ57>?J-g{`foy^|fwUEOD(iU0Dd z(%N^w6{n-4W5M-t?aD``pFe*(PVWIip<`kq5iI&cLV_$f;s06eb9@TPy}332gK39n zdC?#$oHUyp-tw9EEsy$BU|{5O@bK*UsUgkR_8fYGf>3_*LBg&ZcR;#^fwKotcQmL# zXdudeatTrhm7p~lz$4566}-u-HjN0C4;%hQuIF-l#$R-_*v>=11P4Ty4mkPI0FKNB zT>F8(un%l9;`N-0ippwn{qE9Y2t%$^2;uX5jrZsznXk!G=e}dDxdMeca~T`+cogUJ z41OZo1I>{LfF>OX1Q7!RL#|rp07wKi;Bq~WhUC1C$Fyco{8r#{teUw54`d@Dp8zTW zkR=F*!S@3|MAOmxGSZAh^&agLhU-m)w}dOE;hsbx=2o4V`0;9#sIi~TNrk10BME^QEtcpn%xhA(R70SV8{QcPlJ)b!K8R_0^J^qutq5&_?eAYRKiV zUuc>x8g!H-hKBqh+xXm)t3B>=518JNNIE5pxa7{>2PEhHi(S#0-N*cc?TgR;u+)y; z;DADx-WUYX{i+T@AuF3o(iHx7g*bS4e3kx{)>hvrMPgF|Ba*Onl#E9NnV{!G&COK% zLto(_Mil_r9SWfOUq&d1+sLkJ+t%@M|DopI>ALr>V@(O6^Pg;y&U_a!bBm|m-l&+= z2Qb*_d70@4_+pc@f^2ZI#e#3Njn1<&liePs?rz7W8*!XA(VSkQ{#U{ue4@faS0>AE znwYvYr_u;j3DL9F#z82E0T==4V)7bc(ga!>;ejkdR13yr_1=~E$UMXE@qWKX^9TjZ zf|r67O<1%dnCqev73~p~<4n?^nU%%c>>BJ#y8OpLq z2}&#PQ=Y7+ghKH=lIw?mmUBciNDQEmmtmoyEvH96KFM?xFfp}~Ye^z6cwBNXi9FyV zY#1C*K?Q*nGw%B`vZR`AxO%OA5HW9R%B|w=`Ye@eF)%R!!x8qs>RZm(N)kcDesnfu z5HYbPKHcsXd+A-LfQN8zsEFU2gzILcSVy}oNbZ(tX!NbWQ9wD5i;Da8n>mmW6ED_P zNlQC#&sa5y648GbC1JY_cH(|W`xA8C2fztXY3s*xY0R@hfSfVfKJ-ES@IYvQ{7PTHeXC+&dx29#OWTpm5Wld*?|E}S7_AxE_xRR z+(z5vO>WQM7l}S6N!%*O{^aoCjg{`1^?3GnyXq;*h&Tg9$d4?)>qZ4kHKg0sV#r|b z?a@M9gcuIZqe;rl(4XhpReio5oCdZYj2ged$S-EiF^O>a{{33>%}oo;-#gRB9k=+q z-9~cve;1V6BU1 zK0>^Ji68&zNDG)oefUxrD0?LkwC?XYP{h$8(ZP8ihV(jL_#+*hcJf$QBg|Bs_VEov zU*nIh3;}(dr>6k7EAvg}$NF%72_=hSQtES619!@LQ@1+!V7bvpWx7rKuH+0G#&b;V zdopeqjg?oNb2EzL$uLeYfJPfGCgSr%V5)ru~g99@nq=#7E4VoBNs9N%$|h zd>W@TOtLF0+drAMAn|lKKwa)HynR;1VLNA=Tlq0a6Z7khQc1->e^-#3myvugBSkU; z#{U`SyTmi~^5kZKeW~F-m05)O;@K*T%X5K-B2%j10*?bwVDmZarfu zCmeh5ZF$|)At65f_Pieszhz49!+-!yR3Cq-(Hju*mpjY~WCybK9;st&&L5j*>u0M2 zP$I6ICK;9%DGaLToAd5hHB?t1YS(bIBQj8yMNvP4{uasC)8hi0on2BD7Q6i|>sv7rpA01`wjU%h=#Av+ zpB*TE0g<$-7`uJ(y1WYd`Ldd%1#{@;b4T=;7Va$@we*=ZWHPxSwm(Fu;(XAeigvCo ztdP`FEV?;HLa=wNPX+HYD4+4$+B#har2IZI06nCsr!}o`ezf3=E?9jHL;t90d{K_M`QuWo0Zm2WU+mZ zh-cgqXNkR-XPe_86ro(7mX^P#ZL7}quSuoqD=e0_k!TWSH!0{`uu!=y-F>j6dIgUZ0p?x zu>`Cq22{?9Yje-m5HP1Uv0C3lmC(?@`aQ1MkzD0u%)_xpj|9Mp9IK8~2ewv#*t zz6UbZMB*ZgHs9V`#}3 zoJwS8F%7pfd(02kY}9OIomi4?*>CLnS|A#8PG-D_zcNTOuWcZ`c2!-y)LXElgKT3T zDr2&)I$2Hhs!E_FhCxW5ijQvrA)%6p!-EA23i{;jHvQCXs_Hhi0MAHnUn9x{D{*b>KNWC7_57=meTGO# zlE}zR!|!p<4XTK=<_B_pt{fuBvquh({ElCi49u=?=6%*+8e!DQ|L9kip<=<@a1gA+ ze%j0Ja%~qMtPn>;FW^Gk^e6n~DJ$3CH4EE}a{xBQrLzh!a_E*E%^HG11tj&6-4}o4 z1&3}`WbfhBXKBi3n+eJ3-6vVoQ_h~fRNafMOCe8J?rhNQlai830UE@~$tjXnvs$RzfD%;#l=H{v&cGz~G?Vg^~pp9Vcg5ll?ySP7nHR7njc3F+dn zl1uNrSC>GE+os8dV3^+5ZQGFmZk9#e@(#u~dDesXsu|{AXg#rNWXZUgwi#tTTczZO z6ev;N<;MoX3eN8^5n2oH)O6AQhEV8_AEq`CKw;>jM@oP{0DL$R;9H=8q7mAfD6u@* zo|^I5YqamCZ81;O??g}Y0Pgt%voJv7VU(b5E=H+Zq?>`D_IkvA9sg%SWS)kK)=SnT zNi+8DHtFs+yY4;#Bo?^Mf;@DhYtf8^59wSiBBD5Y89ha?7+;n=df=i)P8thxfz5g{ zQay%_pZyfXh(eH*l<}FP=f>xcLbsG+yD7QHAl{Cco^@a_rBU=s&>#Tm1~^e}R*b#^ zY@SDt#tXRbIeEYig>{J>`YYBP5oKcQz79V=gcq-rzH-DuU7cXR>?>#=@0c-;Ha5;> zUXB*+d)*tX>D$(yw_yoKlr2b7v)f>}ROvuW=9%ou8h( zMfW;~ZZLgGXYpurT7KkhH3b3}gFU6`#M4v`Bf|$hw%&n-mDO;6VUIZP_ln7`&2+o9 zy_swMjq4U%vaeEfUhQ1&^&dU8`<3)(uUW{i$9k0KfvHPeaO)kJ?#*{Z5&|wb^dcrG zL)h89$h+!Sv6X5W1gA5mDOnT6V`c~LgUIO!k`};*t5;gTKsUi928~~}%b+8fQ`Yw=n*=8|e4Bw?NmJKlEAN%&g6lf9%=pM%bG8#Z zC*GSR^8FU`S_c@F?AX^(*d@(4hgPg)v*e|!A}ZcIIX}pmq)8^CuiPf@+pDqBlUeuF zwMJ3H2#RE;Ra7!{0^r0BmLnV<=8ireVHrxbG2h9)tj3AKL~WHcgZT&!S_EP8BmBGF zbOKP;yaxkK%>7OphlS;3sYEXQ8Rj4gHmjbSiCL>MoK{}yN~gE|76%Wc3a4r_s0=L} zJ8DTYFRIZ66*bcsGdh$yNp;CDTJLuMK5OevkvJj4w_vS)7wS|{`u9(dxjXseG?^Ha ze&xTrG1)lnr(5f6(IQ*#p37iZ^h)s_*XWp5`(AUqO-b^r8h{2v7r!V%NJ$qrhGzUj z%zG*N*F#ql0V_{|gADrc(R!RCLf66VS>u3Hux|_W211FE`ECT_OM8Io z;J0>)o>7DD@fC?#?Ci9kkDbO%FD}nCv-F~1HiV|_CI`pr?#^6OQ@gl&dTIG?DX^(R zL;PF?=Ran#07C3EjTe!{#F2e9oM)V0?j-lMTQ==d=0}bfSzzv_nHg?pfg2};5#d>% zBG~_+D}gf?_n@SiR{2`^-6n%juJdXqAU~(@!Gtxr#d9}Trfu%WULy|;p96qo_?p4`EaLLv>)&;O* zaNNsgewx$DRo}-LG+Qs_deqFoKAqe@u#)aIPRmTE0_{z98$S&` z3rTa+U;WCb&Ll1Z^PMEP_cMQWy8MS9kWb_yv{WUUl(>dkqJ}q$s*MKk-Q{WFn5Cfi z-$iD6wjHheF5f;BXVY=LehIpqy1)+2?A*3O9UgN$4s9cAZb)(C_^1iFbOL|Gj$HM+ zj!O-4!#yqGuyD^#yX-#l)zNY>vj;JSb~!3aCxI%e{x#f(w78^%YBL$!eCzi%VG?YO z7svbs9)aiT0u}_WTL~U~4muY0oxG+C%Q0ZyAHlED4U)`X40-QB`tqdJGBY`)^>X*E zxS#U*TqEEIb1nAQQt|UB*dK_#1<(f|HC;jn7ta>kNN<7Y~ZVo$@ENkcVlCo0dF1oieYu;9_ z%+Qv=iI`zN8A0lT#%lwUM9t&(A7h6mtCVuCW|)V{*vKiHvYZhipV#Y~Tr?cy25oUZgy?j}MF|^%{UMwuB@K36Fo6B02-`M8AcQg9%^1i1Jj(Y~0 zydHLoo}?pJ{uc-rL^9Kw`_Ax8WX}8Dc|{1mH01}+*xNLHufD0IwCH;zmp_pEhEuQ0yJJZB%Y+@7|S^N1VGYNRP;-JPJ7{*rpiy(hdh;X`aHbR`}0So9L4RMH-;uX7NJZ zJn#OH7=sXN-UCi zaojKYg^GV5j_Fhy8H@Fkn?N#j`n@QHNe?=mVe$hAGSkG*@cVf>P{ zo2uquL@gIFme18RS=c#Ll&ZjpU{A}*sVVjf0$UL zC&0o+&-7sVO3PiusV$NNp>ukExu-G_%91hokk@_apO9s%NrShG&~3`ai2E?KD#km@ z{jRd{FxIqVq*GWzzS!emtj48<`QL#^Fi1R}*i*iyK-QN3if8gi8kco#Pg#Uji@5Z~ z#Nfj-?8o2EmH!xpMl(3%(tcd}xBP0H0Zt@+E#M3z=xu*LFUw~A%EvaE8hA$hz&ee% zCCEEh4eTDB>)7NpgUvG6B(#%AHD{6B4lb-O*WPZLv3}FB{jZP>x-X={D!fB_<~7#0|HIlr|6h_<5|! zIyzI%A7Vw+{5dUYR=#fIZsI91HC^1PUR+C!IB{u&|C0$rPle}?LvoIk)I$7`MhlXf z>{@!@=496TiN1T+Qf2qPIisrj-}85%>Qy8`yFv4FCvisgIss`#HKL)}E&m2Enb$~e z(22_utUEpyl+WhbKotRA%@rfevpVfKq^sy|mxE7$OT19YOd5*w(&dt=nskZ5#PpqW zQ)eWvi^j>0jR&LU#etkAzpy{-yOpVjKu+qvYlHx~LrK7OPfh&tnJY3c+cFR94l!A4 zqe>;p(duBUq_(#Xd6uPGH^p+?E-sZgcZ<<Ygo20In2an^+S=U_mD&Gp z0=&ZMmFk*9G6F2;JIawwbJXRUoT4}AWT)Rbe7Q@iJ=k6Dx%a;tAn$K0QI~%DvMKL4 zMClV?joWT`9?0w;SBj<_9IRJF1jU{E{HU zhme9ZD1r+;S3e!o+8>kxbhX!PEq}u~^YeTY2R)|vf47?K`JZkxaf3@#bw-yLE$W0Rgvo|SL+Z3E0i4P7sT+y#FveosS}TDn}Ws=KhkFGl zgYv-ap;QBV*W65WCIP`9r_e|2McN^)HI%Qc=3>+ME4HnaNbWBoe zIsID);2&3Pw}=d%pFrttQJ*G?CDPJt*DiWDubC}hHU1jKPGH00ZYDrpCN||9421j} zL2=LL8c>e1!8&tAz%KHDO>DeGC@VMsIo4o5H`7Nq`Q?416FK=mK$w_q(|MeM9-K=h z4^FpupWhelsw^{Zl)mRo%9-}qqVgy+%XS=w7Jfw1E6orrY=XdR6lGicPIR&3CaUPk zJt&l(bCCN(MwCx^_9@9YtR@&IRYIQXn$K3a^v#=jLPiT$0%X%>*DpVt9m2|IW@eJs z->6pZ(At6o6H!v4^MsL?*!x5Pd7~@(z4x&)U(s(UVu>7g0q8m;XbExNV&8U-PX}r~ z3@q$BR8$H;!>(WFY78`ACpX!k8XYOpLW{GhbE|t@sI?tJ2hHZEe#3kto*rZM0$$a) zTFMPUR$IBCuGxEhrQ~4!If??~Bxb*aLrU_SnZB6w0YsFB1U{!vW9SE)#K1(t!&O5Y zCXS&8^pksyr}RMS=FT1fc$;LPUImsLql2X%+jEVnUb+!Sg<#dL-G`0XK5M)x?hAyL%H6Pr1w zLP1yUS)^!+W~jnaP5f*D3y2lhAF8RUu3e+{u04U$vKDAr(JmgK`CM7g3|LDv^e^Kz z0WKgQTdk?P81r?Xw%oq^{VipQKRl_NmsZ$65UwPvaafdcW%(;0soI=gwb#m{#`3tG z=vf|NByGM$PaDPETigvs*kM4#qHqP0uF|H$=GqYMLLdg##$?$8AXBqnEqGZ3<>wzM zY5T`?~YpES$wl-D_S1KLJ8}ZDKYF2 ztJqzfXb#B9R)+H0-u1o6PyRXCWx8j5;v)RX$78aN94KNr1J2FwO3Xz<6NcL#T<359 zs*I4M_j<>snG5__&tG@Z!900@uAsQ9Sic@`XA&3{RA%wqyq1H7&H$`T9<;*j|B?#N zNFP|4XBn}6%KplK@Z+^EGJqBVGuST6$xUH1bavgczz&ojIy^=AWhA{O*+(J!TWHwC zV0;*Qpy@$NbcdC=e*js8goFeIw?Ut-L*x6*Oa^f2z!v6sw4q*o3M9!f8yg!H^g{m? zS>=gNT(qC|H^oF4G>6Kqi@gGQB2(CS{Iv1Xe&mS#BwwEfRP}%eo05J`?)&lW&V=+L z#IC@lCF))iV^9wSF=)#STDewMR`$G58*Vj{JCvhD2_YdRMLz;~%;i75+=z+w*H8uG zgO?&(M9uZT^{eQn)*f<4ABT{V^u;ln_qK(TGvmTPn$C;!2YF8NYz+Sppi2}0^!;nh zq(tD@R&@7rH-8u9AckxF=vr*QUFoo}MQ>QK1Ggiv7flMkPkt_X>=4XB{dA1? z#U{$jgTld3Z{f)U9i3W)L(P+JLxtmEB_6X|H*U04&p&Ms<}rDfvZX{_l8?cGcX9JR z)H(O4(6wpu>?Wwq?B9<=Sd;^aB;J)Y2jh|BiJGwCg@su-{v?t}nmFD{9clxX0|z}Y zBmnbbz_UQ1>nE3U^JoB+S%`f1y-xtrbC$R`(CIPUY#u-@Cx}XXkVM>EY2Eq;YyV;k z3~XiSD#-w<$=6&g>oU6b*BmdPY`A#%yzsT5-aq6G6nY-(%aOsR8PcnmAv9hD4mPY z?|;BzXc|Lrxpsr;U-Yq-n`|bc($xg^t#)tt(zEpZ?SBA-#&iGkn-?eV=L3XFmY0+@ zCcmm5bpA6kWP~~|o@DPDxBbR#sQxX6Qbp46yj6TWzA0ZlDVMx|H5SRR_sQQc6)XN} ze7w0VcJn?attfV;A9nTZ%Ld+mkxVF=9$Tga*RVXU^jk!=@1&mc46WF zZ^eVR#s3eSxaLfk`5nnSxM&<`~#pKm!GZwaCz){>-QLc ze;X;wQ!}$6zl47at^DFtCBBJi|KayY0Sa5)mPOJK5x7@StPYC^+%1SSnMLnfEZJ`u z>1J?wrRmPMm0h&Hw!Gi%aofD@|p_3Agwx3$%5<?A#K4he; zdb>ZC6M4nDF0j&bzrnLV;=MD+e=IQJ`igjcNf>??NfQ_tj$L#ooh!Hi0bn#?+&II& zqv~1aXP>~o)n@(ZP*GmZM_=rVcUgLf&|mY;kB4G(#ZA9lk0hKhu?fGUD+?$QJ=h63 zwnjQY_vKq|i~(#r2NrMMSbVq4QMBkGB4+bPyT`L9#gGDphD80T({y2>9)BG>GF+C? z)f^Q^+=MvbwAsi*4OINlPnD+=hIq{3T3O}p8D68@43#W2|NdFIxp6DzEqtti0QB0gSa}5l z<)UftKYZA8>Y1fb6M6_rW%qlD&u@*`mA z*<_NS4FyoE={fx%FWv!`qa0v80*xjV3OSv{QA&I|QS7ML9u*n~Wn#wg-ONecn5pFl z20U^gf<@280|OxwCqQKV0StQPI&aBHH%v77S?CCbVEOtjX2onr%S+?68S5mNd)&!W z1pYJu0Wu(ytNsJrteRD}QzT;qY5%)6aSG@J<>BB6)@(B0<$(kfR*F)?gGP|`H^v|U z^@ti?`T?c73@y;TrCIk=3p+xZP}CXz)ImXi-|1TiV;~rNp#`G?Hsg^bFWK0jOJnq& zkf67V3A%AtVV>b&!%ns)Vn8W}$HjFtp3e0GYm)*nJnRrENq1~%Qz&N;h7m!nDMJtz?SJa z1YvUrt@WlC^DZ@N#YB5GfJ=1~*b9J3bse~B+(THPOXQE;1ymYA`IAM4hpw~nsVmdp`vPoGszkKL9fAXC}-+C%|$6jN4!f3A#icr~3lm?~l7c}3$C~%EbbvuM8Wfc=g@K`? zUg{3b>=NOsaOSasO zmX+RKD#JC3fB52T{uGiNYzin^Z0&TA<5YhuFMB%H- za9|MuGFtu1(E_a)v@8O+(ktj$fD8iII)Pb0Ug2eNngWEo?w0jvsVFru8=GPu>%x~( z``O396d(+=yx=VMrHRA>ze}k_KQ;KU0-%9+oR)a_Fuc*{G~?J4=yg|qP#SV9eU*{M zi)qK$YqU&xla&STpR^)gOfg2GZZ((9c%d;k1;FwXgZAkH>ma`P954X@Q>nWcFbcm2 z1v+lBXf^RS=vZ$Gq&oY&q9(1nIwTkf{KvqLLlX#0eP~O{9FPM6kE5!rEH-cnxE0)- zsdiu(T0cu503Qj!!&CaTor1X5C@gHSfKoW!aWx(&?I!8qp>fjm`dFTi^F|cFXCVN& zNZ0&)CfcQ01$@NryE6)4m>ES3mY_Ua2Q*<|a8A8{A8NS{To-R~i2ll}LBlmV`aD-P zy$4twlOzJfK|2IAMj>7FK9Rr}L<%gHz;`UIr>EB>2LV(D8H-v9ZibXp|5g`$g%CY4 z+d1qJ#!Pd71lnZmbFzIO221OVqTvUp9H_V-L*_h}fpy(?14JBX>ApM6XE-f)PSI8Z z4W@|iUHjUbPoEl{*pAGrNw3U%j==)os~p}63!Qyg#OH?up}DE?dU9|#R9aCS%<$31 zhYlJ62SP)CTwY#~${DZGAIlNP2S(}&=>;$NOQx%<1!;-d-Zxm2m4?b&o%RbkB98|@ zzumlM0a^U-lc6f9PoInz1Zk0Pnc;4%EBQyl23Ps}Ur2NYK&M4t%zbrT_UY zgCsGWWNqJ=)o>2Rt%==qNk~fwG9xkK3vlzoNz4vRzUohpo~;7iHuSv;P-)BK@_BFp zo*H<=Uwze-4i8TWl#y2a0DsU=#!UqK1Vp}UkAaSyxC}mmo9UmTJH5V)6$AT%!2s3x zj=r$TuO1FHNO#X&5s>$Y9likTZ-*?9?V?c6N-}2Qz&)c5)VJ*}uD>Ii{(b1JLqM$q*}gzmX6WQ!i-=4|xzWDS>tAFi+ufX6;7Z*! z(YqzBp|KFbZPZ1W#NP#=inMb+uC{b`=(~{i2Cq_AHnb)W?Cc5}F=>RJY`@{uT?l9I z+XAz7Dd}uRby9F^?*p#%Rdq0M7LOI6kL1es-*w1;`J!x>nVD&YA}40cM{f(+#}>)6 zKT7gyA&T+n1h=yN_qQ#ePazk_Cg3S~amWJA0jhdpIR1A}-lH9xwPTwxyjR~#MWFy* zpfRBHo8pFH#z1xT!G_wu3(G`5`|v{o_LCi9xx}vY+qZ<3mq;sT2Um)5p1D4T-zGlWu;Cx|L391pU*?qHWP5%SRQni1@8uW&E|20iwWR#5=SAOI>7h$H zXova=2UjB*I6^8-00ef#eg)@dg~7_oaj)@1T%4}^!4I&mjzcu;JMU^IN>y(HhI7?C z^tF-Eq2K7*bCaned;08PA0^uYt*2F(HTzwPO2L~f`|c8%X9=kpRm31pmZ zE;v;UZ@QQRBPh8oz=x@TLcqQii zHNHrpK`9M(qGZ@)C=!_~MM66Y%UmL}%*t3PDrHk-2q`6HiVVwKNLhwT=Aja;By&in zbAQ`s|Nr}3=bRVk^v2bNWv%b z*s4#=cBqYmM^5#=W~3p|8U!SODhnw>r0S)RF*^z-M%5rtq~_4d5c)0MQ{q>s?Jk zv%d>cGYCh)bLdtKlXmUZz=))2SZizRT@F)>i0H3#?`M|nwu$veoEU?bL7~(Fp8?TH ziE1_XKPyQhdpSkyKnbwTFIQz-nGd(e>2qdw=XL_5h;uIeh}oZH%}CLVF$|m&p3vFv z4~@k?V9+k)`t|y8!*l1(VGMqq$4lJM1EGOtC5X?7EqOweJw{Pg7#hRmiI56ZCzx2Q@TKM?&G1?Z(g{19u80NKqae#5F0o>Q9`OgG~tuWNo2vAo{>IjDhAr zFgyljrC4|9>o6;cI-RoOWUJ*(KsN}}=Ioa(c%d;F(2X?nZgOG5Mb5Xic4Dg4k_11x zuHN5vZoi&W`xzt_H8P=AuEjEknHg!v_MMnXw0&Qy1aOFg{hE>fouMYlCue?GMk{ic z{@6PQk8ukD#ck-6P&N^~YV~aN(;pACoMIYNJ^c1p#^ZaPxIV>)Ja;YUVQVp4mLm4! z9=1rkTD; zLCekg!jjM6*i63I%CBqm5I0`){)&y8B{lP3YEv>%Ihu9Ur$SWF` zpW3f~>cEZxx?guP`Sh28qiUMTs6MI82ez08zdK57)2JA-$MDr#wk|?+jn?+S{M^UZ z9bev5XiZ>(=b}1%SS!M-FRh$B9IeIN%*?gpDT#RsQkg6@yo`)ha>e;tD^J>m{i;8Whtwe9PRG z9=Ge_oy{H3S96Yv5`(l~RD6YgS|Eh!nfC7jpIu1OTx-)@+l-X2I0^<@L`uPH@AzjS zb}h~G4}aHF_AMxJfyYxoLq;PhJFS!PwTgu<_6?*2%?&9R!EsNiD?MBnOw@&?f^!*N~towGq!pP-K2eP2P2M;&+ zndOPOe`UG0vFH|N<@$kEQL7hG+LUm1=_CD%i&$Oh=wN`Lk>^O3Moof1>2{|CQVa`L zO%4YiR(?g)=f2-pAd?VHU3n*@pe=`0`3EJzuQ{~aL(by6P2=$Ji;aWVbue;v0l(|= zszz#jVs7GAO!;)Zg7$Qz0eV|F3=%RQLcD4Ff?X45ruQt&zb=$Hn(1V$ftRhs;&_YD z&!1aVC*_EIEJ|fsK#Y3#*(QGe1TAd*Emyf(MSpJY?e_XkXLQO`a9T`o;EF4o(_d#M z`rH`4D*3#pYP)ZNAND|F6a+9%Nhlm~mDY-uACip8ZqJ2pS1X1#V!z_M&vk#s$IqM{ zu>j`_dBDsGT(*ck_%p1q3=a)fTGzf5FPhN*F==emR8v}jO*n}ttmmBQG3J!Uozq~9 z-PU2hqagxr2gZ`@TRulA&1S{4TYa~g=^-z52+5Ns?Uwm2?Ghbf-+7wIvX#Nsb>FTX z!ahr2x9-<|ZL*HZLqPL$nxQ>5^?VtGIQ;zgLlBZ_hF9|if3EvjC+kL+ps}C@`keSt)yTxLE#xzpu9 zx2PrW9B*aWE-rpeNIQ0<9*Qp796%5s)APG~y1d?7A;-80&<`o}k0)m2sF+{Q~DNg9Yy2wA!PuKQv(Mbgo?W z;UCW&)?lqQ&0;7A)YTVd5vbZ2h9PKqeS&{CF&wkQcLkt`lz#!Ac#A>K2UY4jqy$XG8V3CxI4z9Z5b&v#N`Wi!DnxcDq3~ zJVFEG;Oi|uYkg^J)avZaeazjr>@*{O@&)cp1Ru=6*p_X}CWkJH9;+q0sGojEPx#t5 z@C)C7xdLeRC1b-IoeapUJDQ&3;5T4QN%1OK)E0Q(*9^lKZFOckV4%ym}>1x1goRCy|k zn;m}lfpTC^u3gKn$6hQ;pt8gWBW$8CY@z}Dg@L)u_!KotWPD2YfPh24x`R+(ejq!8Qk=FN6rxua=p1}4Xy z9q?vIn#6l**v#g2`MaNv-OHOE$BhXmK9v!}n_0cjk5aW&E}qtK?_SawH|dv_!)C-n z{>pbWQ=_7+e@@Ccu%U??bvS?#0w;9JlagV5Vv&*J^Fp$tF?A<~dj+9x!nXRZ5%2 z7kO~fYMM%dfhUS?2qR;(cplU#g>u@Qmxj(I+eTOVg$vs6aR`tP!PBDz-zDH_MUVCO zwOHc$)c(|g!O3s75sKS${nW3k`WE|*!s2`LH&HahUF45{IxuxGHZg$LDEB;&V8l;L z6fG}wKX*^vjc)uDTqM0~iNw|*&E;AOy{kL@=8nvGoyGv?VY3@7&5uvjNER&@JsMbE z-Z>@DljVD6w3XIGwhezDsrh@)$}gt3m3a6^o~ zwo^$?rqK$r`C_6=k-auO*4DPT-k>6TLC&doM}BRKfp+14?(v!Soa(eZ7rOXRA4bp< z0}5r^cG^vcwI=a1AI=kQ)Hf67YJ8*u3L1uSJ1FRzZPs}y>jp22RAwe2Z<{OXkl`SuW=_N!tQ0hQ^K~%wL$Yvn?u?gj|!6@uFaQ@wXB> z5;MA1Oa+r^(eo#kL-zeIs$vMs!<%&lvxt=#UF)9fBhNv|gQ8_6^TB_t{nGj9SeN?e z(isWgvCD1dI4H$8>?nuiQW|ShS^tb?bL@zXE%uvnRqx#84h(EQ^FD;H$4Dnutp8<`;18`0Mp^_=H-*(!R18{LjLxYXa|3^|+ z(yv$I&eWzzOGz1`*H02rDZmflsi{#p-b1!XfrG0P-62+3}J}lnFRJ;nML80Bd+a`d?z4h1ozAc*>&sGS85CA~g zf4f}HO`GBwKFo_2u`gdPc6|gZqjn{MUxaQ!=z|fkmLXyo@G=I%sFQdxkZ~^OmI^{a_AO|m2%NlL zl!LZ}f%2X#F?zN_$Xn5W=I=QQJow%#)~>RW;w4#kTwPDqv7#xXd$zYTzl6r2#csir z{NMqzjWX(B;kv)e$V4IqEvm@67#p~(yx%?BXUeGtr@!Lk?>8+$kXf~HBOS%+;tV4r zMuuAp&1a>vl9#iR^Y2s!NOh^Hsf4ZZ=~MigyAPLSQBdT3sC!>CoJRpT!O4Klo^NOa zoh8@myJqUUj2kv;*3*3K>&!WZwR}MORV)5CJUA-|3wRP>Ml)LP?RrzjkfZxhx7Sej z+3pWr471g?tH?Hn-1-aOg0IM%V2`Xw84IU{8$KKV%npDq{NukypLMZ)d0p9JmzHzy z1z3QcgF{GJIRQoDqCvMGBgY9~$9gP3pQkWcc>o|q_3_+g(T1R??Hx4Tw)Yp&dPzGJ7 z2Z|IDr4ecdj{RNb61U$}{1u55O8fM0>(^K3zxN+#A4+A!-y$$wM9`?t_ll0c8|MR~ zmm|1h@Cc^JT09Rc4fBxUL9gyJ!T^UMu5NsIWGk>R{rKhg9%vY;d>S4)Ew^F21?59q zz!Z+YnfJ%VVC?MyTNXU49*}BXjrCge7KV7MBlgOA4Vetk7zsJ0vtx&rWr5_=pEnn< zFq62Jm)8khN%~JrxTY`6GF0@z=Szb?s$h}^VnG_BHp8;nv8xk}hgGP#_APn9yL@a< zfS7Lo{{2)iR-QIznmdDqSGSadBd;4LyhpxH8b$E#SUH!wx!`)*&tS+qHpZqy|2 z`7PQ$5%m}&XlL~I?meID+NU{ys#v~JzSCfP0z?g_uCE03eSM23z%8T#ew-@`WiBG- z*4&0X$Br~C`oI$u=FvX0C_#)Lm6@3-W5@H%N^{1 z$^)n9F}jA$N*DzcH!tmM&vT5ELE+yX6~PQY#fc&(5aOHy#uqPJXBe0ZNFP00ab|cP zAIKQn){LH#rJ$f773#MvG^Nt<|Hj;~l=&{DYpcuoJ{65!wYk9MQyS7OD)N*JzXboEwvW+v z-0yo}Iv-TyWmynIIZ&f^9}Wlzutygw!*7>UrwvmxT2W$jsaH8+VPUyQds>u%2Fphm z&4lsuo!((8V0-Q}Y2Y3k!&pmx)svURoyrl?ivA$Oh>r!b8K5X54C#9`9W$V zdGze!fnl@uRQ7^stk3_DgfV3~v`OLC!-8J4PXzE4#>cSKmu8;`Kwt!EFDv6+3Ipec zE*4i~+ihcn43s|lEmjK@D*>%8jQ0Uq?V(ZbqYj#^-MbLb3;+5Rm{XPc9~HR`snsvr zgc%z=>Gk#2Kfm__0Li(2Jwt|}gsLvisrP}<1poOsS!W?3p-aF@zs1`|!-?H{{!9SQ z*;AW0=R2H=uA$oaCXFgh^oA{-&eIw6moGoSA|#>KiQ65vP?Yb~6$=kB4}cfNe__rm zN{qS}bB~na=^`Iy!N4j9Al@iW3nOl342O;)FG&=cT|0&t40WW$U6Zc{Hl+ApiU;u+ zV$Qp`XC}BFftR;!-W(Vb!Uh_d%2a?tX3ijpW6uE!z0%`8W`zM{5Jp#T*q{NWC#h#* zu6^Xk_>yR4KY5_~tN}4P{5I}uJcv&phlda6Sl4aXX|oFE zfu)!+Jj6cxjYCzjF_3AIVVS=YnB-3sZl2J~cQVC{`abL%8ABx)Jct`SgOBy1tyr}+ zO!4{o#mfK@%~rU5B2sUFi6HxM75Brq{rHyCzy@=(Bl|AHU7nzMe}RwirqayI640i* zg}%da zKV#mR;gRQui{((#k5J(cg4L3Bu1A4@L_*G`(+{c>r_j-DMNbi+a}mN11>zIM|L(H` z;-CzmtT6UvT;-UW8Vl*>8|OKU{wVXoZM1!T=bSMWrEyd358WfC`Iglj1Z)j}w6Z}= z%0d?bI2wps0PF6ez;zIt`hW;D=| zjgzVS7G+ZTMnr?FOPidAuYFZp>pqwRwE|)GfjoJo-=UNGzt+jS>XmRI2_-Xr22_X6 zQl52UhN^~!(F4|NaJ4)`Z~M7kKcWi`DB?Gz`QnaT`)d50VUG2+fj58$!eRHH9eTwG zcm!wt#A84o%&c!PALwb^-ci?xV{#C?PidIXpzlCo9L`q_)Ou5^gn2I&5SWyehf*)# zsRDp)k6bS+s?PG^x+1Kpt(^;~r0f7ZZw_Su=0BhO*B-wZWfik!4ADU|XtP%7rbW$# zpiz$V@W01>w#V&jju1SQChzgJU`4nJ8VPIHuC?m&XfbVuATzzcF~u1Am^_Z~;g-x_ zUR2!Z=}X5eL9nSslOVKa9>bvc08naK@Y=RjRaI29^)m){H*Ph7`Dn(`O9M-e3iDp; zb~Z>j(f4h8fy=!K#MQ0JO3$Ifu>@egRZ~+lyE((uUJ2r&sEUtS&{HVD#Y`19e13PN zJgSezSU_9A7?DSIL_|ay+E7M_mGv(!U7I#HGi6MEz>#WQ!v}@z02DxZ0Ejwh$4FHz zWoLh)Jl(sdMLFT8=_x8;Eb)%SKND_yL+j^P0aLg^)b*zB;r72pOP0;PeFSaD1iS=o zavY1d{0TjVfk{eqN^w1R7M^|ZrJYfEd5u2&YdUdt zSnOsL3+)Ema;gXAa6j{LuPqj{vKp@i37R)x)@2(c){cn)^%}uU=0fg}hD9#)yR-@N z7DtG!>Xx#xWnmEB24PHnokmY*CP{J_S#jeEKJ?s?AOQieAnk^ z2+QhsK+!c2aY*6`d7t>KRG`R9J3J51W#ov_V^so57vFYKj_N}UhEm%=xH|6>RL<-c zFJ4SVA?+zJzq|AMjllLBI>-~{QS-fvgt9%Oe?hkYKMz|84|oE;8Xj4}Jx~N;fIf;( zB-sAvQ(P3EL)@+dBLEvIBqbFA?}<($g#ZI523mxHT*v3w;nXRYKQ#~HIFUr%xwF~m zsm-(67-<(d9#l_1rzPeC7X2$!1~eC;GHMu}e!Qxnm~!tpfuWPB2dEelF*~YxWg7LS zYQ4UoOoi(@1AGmZ>IIZX30-%cxRDydWenC3yLN!N3fWFoXp{}XP9->Pc#q?tGCR#&18*3wj@-TM z4Ty`ll@DJqu62u0H1$_gV(AivW`H55m70?{g! zL}~DwCLPsbe9lbGP!f^QOWdU3HFFvw3p_rD>Id2r9zwyCZ#fUbZxo`Z0Xf7NIYY(c zIxU_ljkW+>ze1Gnd#=GiE&0x@L%j<0G-*KY6KWu6>x3&!+P$FrX+ocm2YuW}JCN{O zGv;!#v)NXzWVJv$Z>LjdH1?rovY?>A&A%JxtR86u$of|v*Jg_$0w8R@Omn_K6itir z6nHr9-n-X^Po8u;Cq!cpX(s75fP08gbOdbSaa7eu5jKwFQ6=OIQ%HmY|LO6nA z9eIv`e@Zt@k*5oUsmw>C9bRb16aY<_n}0Ksj~c|&csPn@QX-^EF0auJ5t%?Gx*q#Z z6jusfL%ooj_agtrXG(;d3r8e3)@l?df ziL(g-B~u{s2s6KlV+rt>pp@^!Z6Tomg=nVGj3>`(fEOTz2~@rz?V(duG9l|Bf-pvc z&-HB?1I~_r;KaH+bJQ2J6^P-|* vh<}pzexdLGU0flO1(fCgk56YBU+Dky1iQ(i_>Fkt6y@N49kqfX#!kITm%9^AS)xGf0<0X&x6GWJ z>>LHz*sTBe1+2CXrfhvTH*UjCuG-0HI3f^)2B^Pi-^8-a5eOZ0S&7Fl+>+KO+_hiq zowsZc6>T0 zOcJWTM$+57OS}KUH_y@ACyCFs7nc02b#I6+wIF*bW_)XJWGfmu9!`Io^ zdaUrCBZSdC4mR$xvUaaf|Ni~^;n9(X4uo0%Gq|F8 z+3DlQk8hAjJ_0J<=AIsddJ8M`xqFDYkfqOY_Y24@Hj9I(< zcd6*B*6Rh;JMEO&u8W=V3oCe6ucliL6?mQ>E%EG}w{XGRY6{-o-X&&#-n7v9Bz^u& zuQo9=GZQli>64;B?iVa?VUe@C&6w)h$Pg|puA=hMQcFfAc=fvh1qnGh@r@fQHXaIi zczBKjZiib2CY^B&dqa9Xn{^k8tAqJ0xvM`qSdD&txH-SHwA;lu#ct7m-_y&>{cn2E z!!t@uOw5E8NY9)AO~lW;_wM~F9bR{_;!U(X3l}@T#m)W6w(cyZK&NVUbF-&6Q@+C) zO(}u<-NB?sc!lFqrDi=Dn=XDmL`TKpY{*r7{5uaHz8Bgk_g`DH8uExOp;k=f4ILg< z|NQwg1&;*@1PxL z+fKt}J1Jc0x~cf+5n^v;U@j-OKyYKV=4^lLZBS6G<<-4|1IByz0>3IGayrb*9RFKx ziq-ROoBbJ5v0gUT+TJes)woon*hF}{nRwixgXL{NfPD*%Ytq)Zq{O&}V%Pv_IbSJa z@KzIhD@)#yY`VXve~#6)#;e5l*sVvo6ZmWuB_!T5P5X_|R2z4YQD4L6GU-Iz;^h38 zltg{Jzb$GNsP!551w0kw%Fb(O8+a(eJd!P8;L# zGfhEiIc2l6hLb)QUWjhdlQrCMd%@&_E##}V8;}I3?eWJVa7gYL((~z3Rnz&|{EpcD z;_TqT{rl62wzb(?dnxXVH&K6UFU~!>1(uTL2FWNWWTd39L_GHA1ITsn4^?WGVLFeN zm<#W;G6*04{Sqx`N<`#JdL5yK6yIH(UblAU*^ovn!df6(yuq2dSS4Rf*M4u9tz1rb zb-RUb>7zVrww<1g433|l9|Q|AG4b5!`J~5YWNd89$!49BU6Do$Q(<*uy&rnKp!35& zfBqmKE4JF13a8iC6%u)^DcJQ9c;u|Y28hn~b_dLF4ANoKtE(Nbd|7dE@qiXK?ed6F zDn3YAaY#V~M5yTc7;*_Y<^2U9M|iLQ`M6yZf$;vYQNfb)O8;`)5T%&6FrDWXntTj% zy4T4*X>F)n+Y~m{^@dey(&CMBhz5n{oRdHHqfuZXQoU$duK;A=GI| z5DTB2RtMKVr53{(3OcXM=?eoO}uHwLV(PAS|2&5&gTy z!*wuU%eD7q%TkI*7zD}7d`-#S#jfy?ivcw~q8m5F4GeC>bA8TM^+~}_MeO}iWN~#B6B_w*sFF84I#%XyG)vvovyGO zHshdjWT-Zffa=O(Mk|YEiJkT4@OOqOp9_)aS&I4Wh?i3O`qQ%E71M9<4v$w0kN)*3 z#j_hUa-3Xjhx@R59Xp+#o|+98-4+#%K6#egeW6DbIoioST{fma$gGaMmg3R9@_syV zOc#UGxSa%*g8=&kl-$#B*vzhyO!boFI!>K07#XBKd@D<^;-zZvZs4iypBD)}J3R$J zXGP{)kCo-=)ukkHGQ5su(F%->Rm&{w5B=~VLo$S{U_rvKeQYcd0^~(`AzX>7F%wm; zRb|$b)$yI3Pe)5FvEy$4Si__tg-CZi+#j=z7k20D`>G&h;$vsW4&OKpfVib!^Up7rA-2bpQT{yi(R8fgT~gd|$wC>$s@RjNH&q@wj$`~EzEq7o46m8og5-HiA( zYW_zyHeGrYcj#59LTL%w+J09d2cpZxkOaQFOFgEo5w}Zhr&1J?1vwlSpSrA%{#+Tz z?VuqiA$ehQ90foc^3a74zHXND>L4UR=<(iavDFCYn>TL`;S2G*ZQX(`UmCS6%yiwH zgaXB6dg^^G$RF?;@XLIxjHO59fEvmGKQW_X-j-Wp*RSyk$9KWO(@^s=lu|{xZ6}kI zM30)CJ0TjHO;f#o0shJ^btj{WfkuUcaX_If6uDifM!TCn7m4t0g$mEX+DH@;gA}{j z?^`QFg@s~*63t)oHK7h=u7*--sD&_ozZqztt|Or^TxLxLdG%`US7?&+poZ_!;|o9` zBMK}I4i0>3{)iwt@3^$I_Rx4oerhOMKYsiOyBg;1?w*m6ah;A%>CvM{(W&8XtX{V7 zf~yYK`Th>zb&HTMb_e|ao!~x2?B(r&8(xkB41&|7lcHN_Q&{Z~{cx!6ToQuJ95RE7 z*Gm8NaQn{PyEF$c4UdkF01~SPX|73^4zU8OE%@=H^MUT^X{Y-|#-f`9f*JrEAkc8R zH*=vZwx&-U0wFjw6t%T?7#Y?0!^b~8c;4PczzCc-t5AvVaDm)x5I-ydM?5EfEDVjA z;TfeO`*s*?hqo- zGliULw6__(!&7gKKKU;kEHTbt+UcFVubsnl=Z z?({KsMmj068B zCx)1qnD^lfwyxU@rh|h+a7f5pf@Q(X)Wtaxa{y>ud0imE%#fbJo(2EPoQ6f*7*>5$ zmklvFdCSMU@)qAHp;PFIj#YadZTl1-pF-bSWEKqw5&UtEVdJZMJ+P=!b=h^ul)4|A zJ9bXVvuWtO`;>{eZ~Ce?Ll!FU$O@-LKPo=sIE*aTSKkHq-zzq4dP3N6vZ?i-D_MCH z*WY$z$VP>^cb^?h^)v?H>8w5p#Ge7I%ln>?$YZ&f!^Y1aSKK3-*aL;TWJROe&Awun z03SaCYEt#lV&cGyn&4oMheG&b?APxp1y1X)u0$FE;YATQOZS-oavVH7Cgl40$)+of zB?XqGq~zPTZ?BV*8XF93!PZA5B(wwKEl<`60SB0cJQ2toy3fq)B%&xMN6*6(-Id7a z2vrMcPOHOhH3^BZ!g2~Mf;X;HrIj}Xh%g`7zkB!2p2ek#Cb4T#^I|Ss42OVVVa&EJ z6L{v~$w{%(a<79tprgNg|9&=1XycZU z(AeJOT^47^0tQ~*7&v&TP)b$SI2t9W0FZel76b3q^t__$>mMz4CAyBkc3B(t>oS>( zQW8y9E7Zlnz}WgDO;@2?_}Cw-xw#oK5m03OiKnM9K%&6L37w!*u$E0lKyWY)0MXx} zLOLy^4U22%595yVzn?>JaB(5V-_&}YIQ;#cj;pu1T3GkX1{s?xE0IwU$Ac$&g1=FT z=d%8zl2U*cnT++7x1&v9Z|U&Fzh_D>|1*7S4>lWHvH6)qq1J%H2JyY8`oM=!Kn2fJ zt4A*ua)XY5pZXfGWVA=GUfmH85csz~7Teq`0UVC6x38}P=;ck3*W6sD-A*Dte?Ch# z|N8X%BLeMYz`3|BM5}G>?*rrJ#iwBR4ZtIRDTp8=A=w&t?1_wy{`nIYKK@$n z!%eQh+``(?Qr#N}`Hh>&sj1<8%k!wmLgmQY5|Mv11;_n&q?i#w=k<@s-rnAG`zN`! z>x46^D5FZ%kgiA9UiJR^7~QUBVeRols6ekKtKFfL=Bg|))2oaPTW!rpy;Qr+_=Qzp z;O<1Fv(Unl)yR(kD25e{boK5_$w7U~%tI@KwO$_8H8nb`&^l&hWuddX@4Nyos@+k* zd4@aJ63z%MM_SsguZqd-eM(|ozH*(Mud5x8j+Rn2kTx`MBy;P?sY^yE)bYZ}1`d5e z6X(n4&t?;qJX&Q|Xm+KDlvbaM6FoR(Q8H%rv@J$@=kDH2c7r$Wg?iak{a4KVIG;>C z?3$|kx2>ucUpV9Z!gK2T+=up@Ptz9FA3FY<*Bu?$qROJ(+1^mqK9AM#@4Z7mY+8M& z@hGUEp$Y9W$?ZR(+0+Jjze-4m-Kkt@_!Bqf^~wXOFlzUQS#vkk%TmwzE1i}bfzh}f zOt>xs8_n!_EYWNcA8)r19TAB}Kv_Th{iWKS=ybA2co^8J$FtAx<(wSGjfHiSl8O|5 zg(648RrWv3&7b5y%#A!>3t7;=DkUY=`&kliX!iM{ScY!RYgEG;7Z+#r=DFlv(nDKY z+c0VYm6=+|6qOe*n%|Q$X^(MoassjXtW)KJa9SJQ&QK$Q4KIRpTI^2lm~fr)lG=M8 z+@G;!2j!uB`U(X{Tj5`qb=)jtyY=YHPXy(8X>wANj+)?;hkv zGu)sHI@&eL3$>`dq^GZ63j!@O0s`W>KVs^+)qt&S|C5xIcI=0-d_nmvZXh8YoQ%9i zowo?zgcETnC69y1QhE^WEHof<1yvh{O@RbZ@93VUiYB8=6AW7o8j)Ab~~PPPFOc#hARcE&v(D$uDo-RY2h`m~uHA4Le& zVqJ1y<{v`QK&=>9@HIgB&SW8^Hj~N7!8t56p2w05xPs6bF*#ATl%(Y1e7CV_D*tQs zkNq~hP2W~lB}9UnX6kK_QPI(o>gwthUjHXO@|7fgFVuSw6Rd9CN#V9FSv=<2c4N1F zs&ZZ;bt*;NT?d*w#kRD^iqBI76G>j*vXt6~@U;nClm=o_(w_^l zdWsGXKP*uUR0%p{0C8vQs?~xjv%aqc6%`dPKf%sq8FW*(c5<^F-+u_@Dcc6um#npo zBld@n0Vzq`*v>AK=-@K*#7lKEn~n~lqwl7=me-70!i)!URH3B>^^L8da^+!?PhA@e za$Nl4{Ol(55kM6@0TQaADtZ3OO`SD7w`Jd02 z$wID+kVnQ4M^=;7BhH;vw$+a&VQs6jUTbgfMP8qa_u+dFccXXqc#xPFNvFeHk&%&) zRa9FDb^~Z*BgLl0ulFpv1y`9-)g{Gif5f2$^q3k9Y-}#5 zV+cW~zxDHNQ5C!0LPx-p^6u*aH8h$Kq~O2)@NXv(p%E9p!hu^QNLMaZ$$5Fqjg5`% z>m3~(sLmCX)+=Efx%msMRcoA@C1wqv>=-&fQ1Pogt+`7-_<%L=8ckTjCzy^`{K!Y{=84%oOO zD4rC2Hq>g`_5uI7aP>D@?b+bU!wg=?{#fW()OFr~h6b*0&#+*ulG1@Ngt|+qj05JVZxKkY4chXW8!Y}`%lW`c07HOgDM06MDEf@lhP2> zojR=Pe3j_GqOJfMCt7P)S84eTd%n9<&+kqd(bF44NQj-QR~BqBlKw$T@@((#-vjmL zU!CnD6$#1P{I!}X3B^bQiuuLGk0~jNZf^XO(o^`F62g-OI-qS)3*+c{VaDoOI7_N% zJwUwt5*J5-P{Sd~#s#^yV3UO?@&_e1JKLd*+#AQ9Qh03aUD>iv-a?kBA0c*xb5`?8M5{VQofi%(NPcE{%t?lrxVq*a_GIDV6 zPH8IZ6~M*prh8A>TaHDJzYRpo=zK;QEGp7Bu`n>>!?j9^%E+>{`cW9IB0XZoZhk}C zi^plr4Dc@&4h}LRY^0XveTe)J>G}MNOF6#(c3ayb3EPkkwsaU!$bQvJKy_|i?23rS z6mog=429D=nH(sm#<{iLZ?S~!>ecI%7H~_o|J=YqF>7RkirT6m)u*;}Pi7(u1>cdH z8|No8jd-_t23F*nbuJsUenWHft(l-A69Q&E8)u$bR#dMT&lv!zKuk#~2YpXDC=jx8 zat~df>gv*hc0&(Zazw=Sf{H~-P=lFs)WM8U|MSOW%VU+ru~sZHXSxi{uI=O950pIb z^?c5vG4Vk3Q*X_T)s<6J3|oym*{BM4-(B1uF-`prA}bgl9RtV9H(+)3%gkO$5eVdz zjSkDKw^g74#Y^&M#QU35O0W!dP>#rT-EKq6-CwAe3i?N!Wnm4Ouh{vaKTw+=o<|Pd z(9uNIe*Hg7t8*%Zv0Jd%#aqk5fP+bYR-HT$q9A8NwGiPk(b1TwW&@F{R`|83C_>ch zxID}pDu+S>x51G;mIg=*b9VggEU?Y0>kZfjb5gsrggs_oBNG;h(0>1qM1g_=1hC?u z)KoeMxrMOMurQOUS})StZcrDB#?}kKw<)NUCkOY9+wmU$%`0?1R+F1*89DC%qfqRx zjhOxu{BKpk_+Vo~^+h@)arTy797j_%LLx)3+zUYsJ&>N)9*O{cwx9b|unxT+plw8a zyvD|1NeQ>1q2WVM79SrU6sVvUZraX1?T4-3O`Xd`q%>28_M07FDx9_}Nx<)dkjXo%QpmvYbRDLnu*KT^QWQp{0Wvw zC+JRB2?(4+SBuBiF|e=-=9#fMzvB+~g@ar<1Yn3n9CKkC(LFsy8!{3{< z>4XM*9h%WA)+KMjZj`E;eH+;s${`*1EFKsLW>i6Oo$vJ`2ldB$%5}8^(f{>QHd>&; z2uVD*=WzR5|FM{rw(?4P$`9zFa0!vzvDN>#r3BjZS`gqsy|gj z3jrIkg^%Lher*K0b55) z>~2M{6G?HJC_A|Ok*@CYT>YZ}v23bK0;brPBJ#V8r8CLg`7V9dr71kmU32tRpl!Ff zN8Gy>KKddB%1Ur>(pTB2Tes@h_V*6pbR*j@cT4~i_HhEez60-k^CB-_dfw?9>gn?& z!pHYN&=D$T!Hy@1mZCoYqBoFWtC@IlPM+0I)a&xvODub#(h>$eLqt;E7Nc__YR6k2 zlrP_dx-8&Gi4HsKa7Dy}!7+famI*~F1%6O=c z+Pk?o$g@4pQp_ax2`)#!d~(vGo|Gb!(3@D2;{mnFunS=Td0RtznX9-yvo`-&AdOUh zRc$s-xIQtYe`Tzp6DqT(j4FjPH!lvcOU%*vCUIP-6w=rZ>j%wy=db)lw@Man3%iRf&i9|a)c~YpmH5dL;jX{O$vP#f)4Us2sb8P9(1H!PedogbcS8ln#2HC#VCTjpVgq2EL4^kf^B^BBSu1yY99#Ev`?T z@6tgKd=EtJm|If5Rs;KVE79dEm&euOK7&cYj$o~5h6v4r&J&)2bMvN2E?u1Csm|-{ z#be?gXr}1tZEP>R`46TD^>)@ku4Ic-NEr58re?{iZjy@?IkEKUZ%i zSn6+R%g87n5~HCOZf_(hIlX(pII$3`r4{mDF+CdttNYuBeU0V^?9r$+Dx${~rLcte zDVQ~`KwpRY-l8j4$cTuL#H7Z$huaXRR&kfFqH5u6jGzlQIgvn2C1iUuOGeg{soF*B zNs0MpRM0lFe4r(m@*(7#(th1SNR%D-pR1}*Ir*u#dgUvBCbqU+7C)`vu)w3;`~vX| zo6Ga;*I=u`2qDwZ36Poig4&VnsKuTjk4;QHz2PFX(UR|#^pTZMP>Ws32w{D*THr4g zN^<7(M2Kb^%rnO8y4V0^DX$+S%II>7cdYP0Sy67%`63c%BD2^1~MqCqngAp%}h) zWs5bszM|r_WI^XyaH2#uIAV2NZf0j^7Z?xbY4E56_$TFfolG|o$`934*N=@=zLr>d zh+Mz20qWe@@t)8O$NBj=hRJ6c}tgwOzo%aD0#lE!1 z=$c5IuGUC~w$@hunQf31_^HDjP)PN`7XdW)n;zZqW!_eH8KF-b$LjoomI|f0qAW#} z%?A`2Ty44of#+YJHrODmV#>?QDf84Nnu|xQwuX(0+__533?ML_6T8^QF9HR46GMSU zg216hdk_b9VpK##J(zWmK#yY*z9%M@dV1yt`s4D`c-euhA^z00}8YU#9;NH>Jlk)i+<>#+2+dHCzbi^SN ztk(!=8LX`G1~MV(r#wCDdkAOex?1Q}c*gfz9ta6lXb$>D;M!~nIbwN(au9u5?z zfx;)FsJPgGO^0&CK!hA>%z@&QM`h!?zuqM&krOsnhA7Z1eb1^>`8!jd9PulRMn0BR z$8A1R8Z^iH*~2FzO*9xf9P@Wf!fr{gEpE(ARnUjjjesz;s35ef~njuJa z;gHL0;M}Z6cM*D;Xabm-B8kFG6{Ghd25ldE_gZD*1c+A#iu3Leg=e4;fQMd;?)*q; zS8mF-7TO4+p0Ag$Huex28rDzI?d;?gNHrIuz*;7>Xhi?mNxkAmLG9>@g@o`WUcX2j zDK=PBzhANRDU~kCIi{57U2p;9cBIA5QYw@mfj^Fgx^_QFK?0+PSr!!0F0sH=5+g7- zw>w$@V5B#`ym_>&5+B=6(OB0WHf>QEEm5|5{!R39Abw!bP-M+=p?M+X5qN`=pVhxq}$>pcDP6aS2`sD&)bk0D3Wbf4P|Sc&g8xWFL$j`_2P_s+*D)Uy0WYoG904L=eWe-l6oXQVOr>v2a6 z7#!1I1nx?#eA3)yIB6zUvfCR_>&sPR0~t0>!0{eTz7(8+hsqkO`#Ssbb0+uR1|^15 z@w}Px!FKKr?ib;0x?k~FX*~i|ENH%APH3TwPS`Et_wV1D0|aY!{6KtP85-peicNty1-~eTwV(m?RBZpE(kRkLgIR>H;53ap59x4& zEDFOlxgEsd=FQB&xWw-qQm1w3$mmrDEL0K9(B9)Ec0o%6AgZMk792dr^yaI+Un(NJid-A~2r^NZ-jg z=kO3e_HcLqlOanC()61y6QK?JRG)Kqf|t&Q2{I}Y<87Vs*Ke9nj;S>#FYi{7l_Dm= zGH1m12An7bS+M1R$4tL~@TQ@;0KJO8g#rTliLV29foXiWI3u*FCaQGyr}KI1i^yfV z5t;BJ7u6+4CfE;ZEH-zCQu_6oqc*0`LIK6e`jZCpXOL5A?v7h3&wYbi{)B^Thb^NJ zAnK*x_qErWMf3jYJGX~te?x-Zd`~um0`O+a#^jcch>3bKQRIpcYP#Ja`{|Nc+EsE1 z2^5yuw6g23kM{0;yMMSNFC$Y_aE~Zk1cfZ)PoELt)7dC)bNZmDtBf@Y;ATy#Yr3>5 z(bk3y%pcIJ$eW|Y%Ea#@)1iF&f0aT1hG>l(mASmJ{GUMxIfD75!utBs!O&p z8SC4{E-;4Wkq=Ja$*7{*r)*;|g_2f`S6%?QByvR^Nu=gt%|V)uP#pgss5s3!putHr z8;*>?KuzZA?c2ceE2p1G&9 zuj79PP^AY+nCNMl_{h7(rmFMD7*jzO33kJUi3@NFomTqaf%H|{c-AAli_cc`??z$W zxggWayjx%ogJt#ny%|CytS|-!adh=Spk){hE z6!qP#L!JBf3;2-I&=W!tiI*>9EJtcQkOOz$$@FZ;Zd-t$> zQ5r$Vzp9MPOc+HL9vTzH9@7L7lA_e6FIR4o)2i zx7_BvZ#j&9fiI}k3yu#|X!paJAQKq;oQo?8I92M=?h=q}Yc=P@cRRJ;y%LUz zCx=8m);bGv+W`w4n9ua;mHiO+5)Uu^m8>=sf8-=5qkHYjLjV$@Y++Q>nFLjokL}<6 znax6!H5rcTz8{)Hr?n~E+Wtl=bUH>WuRsQ}7bOv9d|Vj{0x4d%M!z0`x`%*QC2{M` z-%n@hHwwSu?CjnK^_&miF|n|))cIZOa^DgXb-yqsCOpHMv1uUs2CVMfHBv z(hi)^X6fn{nG-v$ymE%_K^4{2%=34Pj#U@hY9|5ol#@Gyknw4|jj_m5ZTXl~E$%TS zaWblJI$hrznhB)pwD%bqLE({#7YaiBaB(|xJx=!gdqly8 zA|kRxA)oZtE*IM&&b2_OMX+<(H0%AT!8T?gt{JaD*x@7^hfKUriyEU#Neg#^}(>-!+=V(Cp;C@!rB6wAv zHw=-l3~&uehm`v2GEy86}AfPT2Mg#pAjQe{#LI zOa<(l+aTCQqvFuH_i+37cLw2$YJqblR3O3} z-^(O#ZB$*SBg7+*v3Y(-Oe7$3y!U{PH==O)*w!pjgr)!6gZ8s zARnpRz^8n5c|%1w_MEO15%BCcYt$;cTChF6@?iu<0(B7YUzsG3J6cWYR<8SDPx}*g zqI5_?9Sle=!(sNrQ^(;Ns>#d=sy%VSx_JfCR1PZLPix(sDyBq5k{p>9%^P zbwswquQ4K@@6U$(&bwK?Ewx;hB4W^lRlcv;(GKs*LEVjfPDX(xH8y@13}6BJr-QhXn05Ek!D``FpVDHD$Jyy+ z3J?>4VGL2Tur^`ovhb@pZuMY_F!yD{+pB|vcVYQ0U#ff=6%yWdnJ^(s%=><={E%SY zJzo7?E$}qqMPf^dpb6+TslH31ZMwhSzCM6gUDGf{=imTN=;$a| zYMQhYn4TrjRD6tzdKVg6T1gVw2cwtcPQ>G`ddp?y{KJ)`wP!B@2qc7s5zzdeF>CyI zOC#j61*WLofU4Te`g#{wz-G?o^jX$JtcQOYpj`Q5%Om;B4RsWN$XB^Jk#D7lc$7mw z1F}$>_t`PZTR(-tWUyGKR(d5Kt{+U@<{>@)$1!xVO?U`MV_D$WDr0F0Au}pV?w5o{ zKu?OsG#4=LT z;wLWn*S&i%IJGxqu)Ej`MUCD;5I{%;4~G7eJXkR>>V46!6C2qSPGdn8qR)DYrkoMe z+Uoo5{;oaJ#_s&+_h(H0|nDX>xa77A7H3v$dyk(93}zzG!or@UO2cI$BK$u4c}QmUpdnmJn33=>01B1Q_k>kWKHMX+8e92bC=IgKAT@3_x(F<_Syf!n_A`E{)Ilt zr0(R))H0c5@D5ZII5|5XX!F`Y2&8#?Ii6S+#*@1T_e%vDL_CjklxkpMVhd@)49d-* zg_}==O)!ddcPvWQq`fwg5q_-y;o7^e-pXF5UZ=SkqLGzyuxSYrQVBXWfoRa68eAti z&v;D{_}Io^L-vW5@tefHZL@qdAw84iB zP3jJs6bAfP`*Y@yBxq(8Khr&tx-xmGo>sr5HFSQxZGG!kIMRgncBj|}L@Gimyo|#~ zlv==WvO|!M92ZYX``2{C;?HOL=eHMDEzgrOzs4wjI3Lt1@)YRL-MsTVCDius?P~FB z%GBlIr@j;O#~XLP*s+<9WcqQ4FecNR{&{c~i*byR!hI)3I1J}QeaF{TCQBhN?_5mf z47vHm#&u+qA3D1w8TeHdXL-dCMLBBT&%C2Ckm5_Sy}$o(CO-0}Ai;WUaEAoz{EQz5 z*Z(Rz{We$Qw(ID&{pdC;Zl=b;l)18$52X2|I+B(44ne<$ z#`OEwai65KS3Xt76MR^XIio}U{;cuf-SYQO>=*1wLOsS^C0RJub`iI2g*R8^l3jMM z@86TAJ~-Vu*KMyXHT6lMHWO8pdqa-&ow%lktQmEF>L#xI2bc`gbDzB1=A)b%@z;A+s{$ZxiY7yowW}>$XA6L}o`|Nf$_4mGU|EQld8Uy}-i@F)2kW&j-YJT}=Ux<=d05PSAYh^w`| zWA?YV54Fea{Vmxbsa$!z!`PFwTN&IRNHJ5`zda+tIok*<7Dcc3S-rI*mY|@2swsFn zh2vPASeIwp2Z92g>`c1 zs|0-YjHyYdBGuKM@5Wb$;P)gmZ4WTvdKXH%+9m1qDeuoh`FD%m3P*mZbGmQ{g`QQM zD7ohu2kW)UvN=3(w>m&tj?Z5GyQ_t^_2Dm7t0Ro7bS7fkR->Wx8ik2it+xJsQv}k6S z-BqOe6l>Z|bMuCZ;D$oZRHZWzBvK@EjIgL%(Wzs5mx7$D_B#2TgBGXYw@c*6TX0e@<>SXA?|fmz$3EXmhfM zz}M$xweFNx;<@)dD+)Qeg#umeo5qgiZOBF zQS1M#zHhIYAh1X@4Kt}Dm1}aVUhpWx7Uhmk?t4)OVi{r z0j@GwQp$n>es}Xj#sprSM4e%Jw6=EDPxl)>YMURAu6QWe%$D)eMRN7OgZB)&--~nX zAssbA+P`DA2J4!;7Sc)=oJ%D05uW!)26U>XuJIyXfmpfzw?zC01VFOe4!Wfb_Bjm@k#!)Xj~mL-JC3 zwx$!QH&0VOwd}9+?ynzL>e9Yp1;8qT;Y>a3k0XSsC6}$6M{e#8 zXKPVp7O_V+CMb*%OkwmK_OHa_G(S96oE0!nx4lU*AVZDV{0_4JCJIfOY=)3&s) ztZBFf(cal#8yI)DmVeE+sgt>s(PIk@GqzUwZ>x2WBV)G{Yey}etKNYIaYjzp?iH`= zbFL!47C%_VX&W<`D!Ap)M=3tmlYZvY#keMbJ*kV9?x8=vd+2e}C;VApIrIm=w%c2* zP{O`EcOnR#zDykoYps)y5r|OAquB-3p3x{$B6)X@*hz&(UbFD;fOEiw-@@js=kzS1-ppQcG1<5SVXt+NRm8e{OY5BZmGpbQlY_U|5n1F4XKl$bH||d=v=Xo6WF0CXbX=bychMUGH9TK{*b9O_{n-!%;W?8 zU-ZN7f8Y!k7w!m;KA!t}RAR9#*}{AKU&Z~16cNjLZfNgGfSKZ{kH4@fa3>OP! zn9u363bbC;Hg@!q(j`wZqFT28Ah*@86I0TD%UwhD7471UGJh8g11Q7ucYKln^Ki8|zD+SDV znF`}}kNgA@&q>ujO{Qc&Bqbp)VsH$y6rK#UJ{dVR6%{HwiKrF&^!Y;_<0H{SrBfvIhMU}T#3#Y^ zjjEZm1B0{IaUx^mWJG9B0;xT$yq}3ah<{K}FxpkMzwMzy`(UgF4h`K$Pt{|Kvo%a) z@klh3_xHM<*vIRUkHjUe=$)0M-kQ=+q1|B;5gOvEvasdQqV)1wAMluk9@`W~^H)A~ zKHb{(i>Rae4eEL{Qy1AI-zU=7Dhj@_RG6->kov7X-Ct7fi@*NKfVTXQNL~2o?ItP3 zN9iULX|qTKjV89e%Tn05+nmGDdCR%|nq$8zh?&lQSJL`#+SXnr6g6Y_Eb&J}7TyK? z@!3#HA8BoRs%c<%l66ik8-kgL=C#S@HM=TnS42AgBXD|A+GZ_L$zYD$Z35| z9MOF5X_+mu-9s_KhW2L>bht+b%KAa4zkI~5VPAx==eDyshr(7$xzCKC3rCGK`e;ZA+#5ayY&x%*a3H2ig4P0NFw6t>H zJmKQZu4fSoxDJWDuZ!7gf{RSXS`Q|qUwV^0p!y=K@yCy0WO9Dt_+#p-l7S6E%3H=< zy~7p<^R~WQqV4r#@(-5U$AQH$4Jj$?W)Dgx%x#3I@e&J#%=2r}Ffjs2u2X0~mH8I6 z?C&!ja5eeR+lB;*-^H-AVpveO0rJ-LFB*1lPiAtxylpp#QB_&ABC^rAvPgG%WU;%> z^`IZ`+Z-sUMezkjbmvVx9PbRpzR?!LbwGd6jmJ!2JL7JrcF;@y+L?IGmJoT4K1-fB z=1qmBm)eNo&dd0?)(?MOl+weOrm8NP&K2Y1cS}P5f+YBTTR5Zett5XBdJTI6v`81d z#zw2R0guhhmT!=O{|Ih{x7EmOOP9@0I4g_8DC z)N?887~#;KZyTf}Y2)Cfie@g2tW}vG%FxfC%?zWj-KpDWc3-ytSGoFp)MYGuVye4A zOsjaiW&drEI}y>wlNubKm4K7JTbvPCk!ZtB)!Ke6+~Be|n+WYW!o(hrC5#S$5{{%1 z#gB|!to=md_`}4PMyQ_smgsr^lr&71yZ{ee6JeQIwl~(BefF}KbMOX*wuIfcsNc#( zK_f-*81sX4-M4gm^jCtz@bBE?jEnoGPtP#>P0vSZ8IOR)ogK7u%=)67!jWa}3zmwl z*`pM7Qu)4}isQ=pi5^Ji zC}IMUGx6sG)wQEe)t9*U|n)NsOn;mNB;Cos`MFSFh?n-pxcS@^Iz1 zt6xLS4MvVi8XS9y4CLX8} zeueR~-6~FQ)q)phJFm<}OFZTEngZG3x11+a%G%nMXKTeXq7`=fX z9i)0;t&b&+RXTBK9sl^zPIodB#G?ly;iaEJ_%RASgsdS&WHEs1?qERxi&m%CU9_#) zkeTVnMXOj;@Lg=cBu z!POf%Wj@|R7@=rR&!2ydGq73d@3n@<8|~Rtwk3V4XwHlUHx`U}sAaIkA^Siy7@`t8 zMZnK(bibipC&vy5Fd4GB%EqQ%JDwm2{zS&UGM+w-iZ(u|{nhT7V^+M5Hx^-T<7bFG z@?tkNA_-s5TVu``rgLRjvdHQ+JD0hahVXFMhhkZ{Hj9X82(q&?5B}0{{aWj-nSRr| z6c`X)Hvtn(!7^9jpKwv>`x^gv^Cu_r?dl(NL&NDL$NHK36W+UBc0)QQ$U?ZRwe1^b zQOwRR*JjywD~)AdAD>+t>boo;;{UHs&OIE;w2$L6*|uvpn+~hS`E6~q)jEWn)mBn( zR$JOua%?s#p)e+gjP1Z~&1Bh}!lszIl;DHgT|Z{BoF1 zK^Xp9kd-?iqal0jkUPw~f`DR~nNULBRBEzSOk=Fn&JbhBvs7D6qKF9$%xk!XtMuc3 zrHCb=HJj(mzz%n3H+%6wMCQ-F>jTd<47SJKasFH$4mVQl02G6AC1{ODLTv0R5=)po z25;Vkwo z3OGSAQ~7h&|NTMxJTdcEj0+rlg?IN~+uPgo2aX*(hJ@$-x5|k0BYNa<10f&;=cJim zh9aQ_1S}e~Z(g=>lFdpjhnsOA|qGAx?nXI`G)qu`rB(VTaGk!B`R(DkxIj7te39huT2Fv^7`IGS)8(buq{u1X@#`$|F3#BxQ&i=b(vM1Drf2s>m3O?X8p#r^6l z;`gs|yF2yNU;f`Y_v9eYo0qnb zD`mzeJL=?b>_y`1@4B=M#p!>D0OM$_R0GaK-T{~&qet#NR{#6CMFb1)0^sE;&JvX*Tf`B^*4MWC@6J0TzJezXI1$_ar zZvnRD_TEl_cn7kspFy8xAhsb2Va_;;(hg?P3kMMZ-pkuT9h_lkYiYe~4_DK$u;4;Z zuzdOQ(;Yu)J`vlB9E%3MDt=x!0a%y@lw99pZrWEy2XPx)uQ}u?JuyV2m$VD<+RNFS zglhE>9^pVvlY5!p|3JtFRIX4o`|j>A!XQde&**qzt5h_LG_ksgNfUH08JQrG=?GK9 zx^oSiT;BEd$5eT!NJudB*r4SVkSx-BH}TpVA(gVn)z$tg1m{IPkrW8M zLEw0QZ{ofO|aR(wjY#@Y+lHd^z$=FH3D*LEpotg4iU%U1(YA!7^V8l%dHgyva zcMei2qMpf^G5lK*Jk-PC?qrrCZeaP`jATxsu&}Tk+`eq-Ny&&s)061+9N5bgu#2ZZ zSTNxv@@JaQVR+Ubl@u04UcLIt9yHYJrq}7+p0u!2Lv3I2urpZ>c7`p#{s65x$J>yE z7wHgOrPEu+n2v#gf&BZEXBRG(Ew=mZC-4c4pF6gFr`DO3O(_wC!qhCHJR`9fVM zgs()pgYOtjLpa&`dni4ACLEx2Qjl5 zjdw&CQ;rj51Ayl*xMrF>$BVEyj$~MB$(h06)-c!ELSyXUMhGOogowm|HFqEm3#L;% z+h>7L4INgCu58CMV-48OIrmBFP}=<<#}utL#h9q55=6*)=I4E}SBh1H>IUaR<Y2dd>^S@ZLj23>*vAQsg zudiM)oj~!xBrsrd8zU1AjF7n*rbzdQGp{o)N|a%b#U#tUMg#LUa#sP1E~Q6<~Bmkijt$ZEl@t z$&Ca*h_R%gd-ww+@2=ypy;!XjoF&G-fpz@Gt~lJYS+bmCE~rZ0oQ$ymYhcO3RSsko z5x>i)W_wGjaovx-c(8_m{g@Ow0rIxPqatJ0%@jj;@s*pK26QphmZ>Qfmy+`zkq95s z3m?KONNf!7&JZC~o3S&K*+yqjJGg{uLn+$j`K318s*i)FA0a&pxf?`27E?v6Rg<)*)>&*t4YnVnyduq?&Bi{6;Brm7Yj=COcsOk0l{-7!eoYPUrW^Dz zJxwo98rfwYUI?=S<#P>$75B`nafMYO{}mU z8O6Mg-BH`(0+uKmqYGrQKI)X3?m0NisCoMIk??M?9|)0hsN%T845rcn=L;Q|m#A5s zNOKfCw-fl^qteid=4bj3*b`X>X2aOW;o;#*zTMRZuspfUTQi(KlK?uQKe{Mi4rc}j zZi^Vfb_+edIs{cWc@<8&(UFud2cN)!K4rIdq?)nMP1l@e4j`b|gwIwR8j2WI@a3^F z^U!d8cw~)J*VV1vX>IK{pdGK;jyr6C6Lv@0N$y}GxKO7~dWdrTCN@I04R3mvX;{a( zAZt>#bJs3ia$rOwfbO7tLc;QqUMt$2HD&7IsnE9`ms)nT);zQq0=KgvJIc^o+q4%%8k#*!&pmZ zF*8gvir|3bpj`R4f0&#eso|huR*=IxyFMCoHczl(VexU|GLbQI;bg@wo| z2ezD2iA2&P7UUqFyMNFC8Wc9X3bkbQ124-ajj>Vi+mn1c={QIhCakEasP@iYbtx)3 zJ=Het8_RB4G(}Y>ReU=iFC%u6jp%;axYk62xpAMZt+1f_vWh7iMXdl|;|`P&8&InP z9GhL2A)kySlG0Kv5J%z7;ZJ0gV13|V%1}fd?f@CW!I%@2B)jIm4p6J9r9N}4VL?^7 z10+*>celI#@%qO!{iEOT1BP10@^=GTs4?nG%aTR+%0oL-4yEHkucG%?jR=lp+u}xa zWhZ9yOqG{Np(rpQml3uW8q8IO8a9b`UU@6$FIj@?mH0v;gx%iqp62|2bitjULp#a_ zOYm|w9q;a<|K2Hgtel;a%>4mG^}X8a2C$pX&Q8h@8c&3q4x#ZS<_>Vb_WbU22YwVF zD@?Ilu*}AxpwUtS!BLr*iP3U=g2iA9^5KYJp+z%KpO88FJWYXkBC(X84-11JV+Di{ zPmdcjNqC5aBAwvRFl;@o4&nse!j~ABahN0(;evt$knmfl(Hb>AIILM;EEkI9@RF)|pz=s! zU35~?Q)1u&%kNuNh|8U;I`!^dOtX8|i<2fvDKmw5m1jxfw}4ip`6JcyeI?OrlS3m0k{_*kc=jy z6=I|~xGdrJIgF4Y(E#^Liju(_zG#$28X!4t#x zkS~hO%p3-%^6=KA%8eH0%2)>ey%Lktj}Z~>7)$dOJ|DaUNF+GP vpC4`KH6M7yC3Ma|J?a90{hzhsldRio^5=eBn{yJ5bjmJEo9*daUC#ao0M*?K diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index a6901e5..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,43.653633,43.868671,1.694281 -2048.000000,41.075714,41.712639,4.043270 -4096.000000,36.769791,37.067265,15.010315 -6144.000000,26.605057,25.541121,33.495552 -8192.000000,12.087296,12.556288,59.853920 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 0f055c0a08b8e87c46e33c5f20deeafd2e98fa00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29535 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 A5C8xG diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 17bff82..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.303373,0.299032,0.492727 -2048.000000,0.430687,0.428421,1.692620 -4096.000000,0.888595,0.914232,6.617262 -6144.000000,1.204659,1.124719,14.414795 -8192.000000,1.398020,1.397843,25.760183 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index c4214ed066005ebdb4e0ee76e69c634b712896f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23324 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 XcyXbs&1pZxXvten>)yz8*tYMV)mh_# diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index da734c0..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.683456,40.755711,1.675731 -2048.000000,39.890945,43.104256,3.993672 -4096.000000,34.370049,34.316799,15.082901 -6144.000000,26.870785,26.437119,33.444862 -8192.000000,14.582272,15.560192,59.865280 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 5d6e436aa62acea4e3bfc85b7d15fdf4a06f4825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29181 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index cfab6f8..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.755234,40.783875,1.714975 -2048.000000,40.426498,42.135551,4.034365 -4096.000000,37.232128,43.988480,18.324589 -6144.000000,30.871040,30.644737,34.408016 -8192.000000,22.926849,22.830080,63.136768 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=bwd.png deleted file mode 100644 index 3c4c92ed1aae3e1ae2e1c2c1b934f139384ed406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27426 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 >dC&IccXFQ$?B_j%rM5#c~X{`vDK$yL+B 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 z z6F|^@ZOy+8_=tUft#kzatd~iylLFvT{hyvxfN)d@2Pd?qB}8P^PH%HWS1Xm3m66Ki zxxoSP_MF~Wf|9$V2 z@8gESwt_hHQS=q=6$C~8xJddy&Jzg==IuSi8c;JTGJEy`nJp8TJkdDlbR^^CE6iGs zlbf)k;sKxGcY)niQHk9b`vSC`UhtDA(2wyw5xtHAA74YEj zlUwny0|Fhh57}zW_|~~*IcL)qP3r(2{is|27iIoE3dv-XK`1oIE|?o+_2xSb9>L0q1LH$26wAqo||Ap39icEgEh)1R#>R(&v`c*2dlRQ7(N2BM<<9APV;;0CM8U)E6f-Wo>4gv;OFmP6|nI;#`0A)P$mI9 z&t*K7D_alYGTC{Zo9%q#E9*RmPrQqUxKGs)Q1mypS)4=PU7dvwhwQK;5UfquT}~t) z&3Z=(#QxAkwiRNZERwHW&B8$iDc4(qaQ$H(QoXYqIPz1;N1m4(X4*s@Krtg}H4DRh zez!~7zjA)Jqt8tZt!bLh7cS%Ar_QjzBVWOD)-4`&qe;CGWIoljqnS1et)6r46-hcSpoRxxFwnpS z+ydg_Ney;0ldS$iDBjY124dN7qt$vyf2DF~4>_YIDRkhXqg@1kNDD7$#4v zZh8)5@+dtz{G>mUtA_*(xC-F722iNM?#7ci#RGrK8;hTC;i3>I4@G>;d2e|3B}N2- zPG3}CUk?pp4B35?EXB5ZH2+!mI0Cl}m|+}<08y@tnDk3VH5TMR1VF9d#>U78oyr4z zNXpTFvV1t2!x9G`!S3&3HBW1>O4pEmjyy1^d~XTHs>Tk%3*ota08dqM{>i{wB=q1K zI@y59JrM}WX`rFn|DbMc_MDs1c5uk(=<2dOm}1;W9&XK~B8de8RJU?C)Qt=`rY9j} zH775^;-Yk6{A=H4zSzgH&MDwz(Rf5Q%e%R|2VsR$1htL z#{>9diz*8F`M-0lfB12!6+%qf?JB2NKT>c;bMqfAeTjf>>KMVSV|4^@S!(s_i!gOi z=#$-ou(q!^ND)Ig){DIB+=b!Pf>~W`6~Nhwf!1$^c7?O~Q!1!X)fkS#*jwMCJd2w~ zBwW8Ll=N}{E9?CsUWbWb|}Xpn;kvmp>{1rX5#1LP7$Q1=0T*)CTWI~Jq(l^B9-(R|iP54pT|cF{WB21SBa4JQwa75zWGDv>Dq2KK z@?2D!8M(wluVfm*BoFS-C;@LgJ_xA3`m`3?EK%eO3TyX8{{AN}LXeh`3mDnYAG+go zbG8C({Um57Q3^TjMHtxC)m8K^MqOCmi~?!n9m_dzv9Wki2)34NZ5TMggQ&blOy?mS ze`?pIjb`g#uSn(0Z6Uxwgv%UvfGZ0g1ltaEUTh!wzu>|NeHyZ@gvyc8(c@Tf2@`A) zw-65chFO23d?~XdadYp%q~&g9K1Uu@g=D)D$Z4lnnFue{V_mU$pGj}DX&4-TJZsD! zdXMn2j4y$$0kJhX+a;Hv{Q2ieQ1tas)P;lOp7U_)-Kv6M=Ty-843sgK2rJ^Yv%c@1eYTbA^*{t;1YN7{*x8@rP$j0(WBoi`F z67&l@kHnAcU@)5?GSY<<8bc@^7d23Dr_D&u?XxVby1xVDNGSH;n{g~zvc&9Nv?>+s z97J;hqM{Y>D)oJO(zI)9D%zY}hk*%w5%G})jq7hku$0{kNy#gW`7C`2f9S{KK(Y}^ zKX~vYmB(c_{L=O~G$9%Bzi(=qM*$);#<3W(-T&v!O_g(;oC-1@_jK=$#C=tiJ-hU@ JQg)bK`VSD2&))z5 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 49d7a1a..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.283083,0.289570,0.495058 -2048.000000,0.414450,0.424834,1.668225 -4096.000000,0.668033,0.643956,6.780261 -6144.000000,0.832643,0.743972,14.482822 -8192.000000,0.890290,0.888354,25.620234 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index aac125cf91c995c2f478f3ddaa9a665d1ea52e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22929 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 LlU?!QbJzY2yuT+e diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index fe31fb8..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,46.689278,47.676414,1.656079 -2048.000000,52.752899,47.375870,4.110466 -4096.000000,42.417152,42.398209,14.973857 -6144.000000,33.818623,34.609154,33.393311 -8192.000000,42.629120,34.408958,59.381920 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 0b1613db6b6c94df61ddb5e8706b0904511203aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29615 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index c852660..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.657344,0.652755,0.531304 -2048.000000,0.974639,0.926502,1.702639 -4096.000000,1.494973,1.497175,6.492184 -6144.000000,1.905828,2.001053,14.037692 -8192.000000,2.419166,2.368512,25.635157 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index f9fae4eb43933c491bb1ae66506d6b23d356fdf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23562 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index 1da9f0f..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,43.619843,43.843071,1.780928 -2048.000000,44.911613,43.822594,4.263554 -4096.000000,36.800003,37.216766,16.327387 -6144.000000,26.360321,25.637888,37.076050 -8192.000000,10.979328,11.812864,64.386047 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 4188d68af10315d3600ba66d8848f5592038bc6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29340 zcmeFZWmJ{h8$G&dkrGfs8Y$_JP6GU3YEI@0|a* z_rv{sKU~IeIM`?VzVBM^6LZdIt`n&!FNyK^`C|wKf*~y>t_*>|2SOllE02)DC!9YQ zHo#xJt`eHADh}qZ9!Ab)kheyzjTg8fS=8Gg+CrkO1shb>%Ptmxw4r`xJtlO!+#{Ft&(2U3C``8TN9 zu-_Au;OW4xYo?zdQQ%h|!vFt2|9@s%7K$;+xnMV6Yq;Gl@7 zP-qp;b8KwvhG!KO74JerXUo<{q)-i!bq~(ZpimW9B*YK$Ko4|AW>1)4QPKVXjEW10 zIa?R2l)O9*HFeLfVmDlUW8>P^*4D&DNkoKH?@PEL(a6ZibUwGJ`g)!sF>I8z^>r~z zOFB|gQuT0f#fDEf?TqoMsROHB;ZAODxr$#zJv}`OCf~4kv!dhR;$H2Qwek2~vYHKi za+*VxlMtse0nZ=T-7T)HqJoNs*45Y7x9iyb+SA8p{qS()XO5(_oLu+d;Nb2@ad9eq zW$0@>6|@hgTp220DN2p;uy+ZI>39l<)+?IH?`ldWWmKJ<#5v(y| z*!*U?FU_IVYtcsEdxu)RSkowAslmm9)c+!*lKO)B~FvjJIbCdgvpnAGg-zx22E z_G}&&S<#i1m5G@+uQvHp&ajopu94fnL^I-Fxs-Rx>=7I(m9S59aHZ|8VxjkmR`S zOB|ijRqs373ei_>FeunjAms?l6r0A_1)|il|6d&NNO5qcV|ah zO6pNh)UzDPSkhN^bDyrD+t5Llwy|7Ud}CwdQX4HM{bnAAwmU8b;k#G<{{8|N3oZ}Z z9@yBD?$_0m*gRY{5c3yZtP!#U_tIbd7W~-lFgss|AfK#;lPOo4O2Z={9H5dWFLwBx z?^AGbC4!xW|Hxt>#B9(iCoYb-y1Ht+P#-s*uK*q57#(Z!aG-gcY8r4i@R

    1H)`{ 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 p#oyLOPJ%o50?AD+3V-BV*5K+Fj| zVM_Z!%V^d1eVTSpFea5_feVzFS2ZOIu0V6MM&mNCT|Yd^EA&6=sw6naSGqcsm-i}c z3M$kkqdXH7#ywK@RCn;>%$Y;|6lN0?Ddd0$_TQI+gvbyo4HU>t$2uFA4h+0FR86S8CP|LQZHqK;=bi-1!iRiV`hx)A z6$GgY%jpd)ncgXr9S{9NNRI=MFjMF5eY*%NUtQS7IT^0+9(eG<7%{7&q~y$c_lA@n zU`yd+{Oj+&2;uNIM3noD!O~rAgQj&_)I0}8(Hoa`Kwe&64hhEIb)w|Ow))+hHs<9; zi>6S1Ao0@t9TQsrF=B#0oTb?6&XZHNgm3U)b$d|^=o(Q$#K?qlI`d3?psv3&^q7Cf zYJGS~TSRSUYgM17Wv$Z-2SFg>;+)T?yfuz&DJO;Ik}SN$1If}Go9DngG%N@YiG!75 zDwwfi%L8BuMWX82Ybn#%C^+VnN-#lxw15`~Zk-i5VD59;RZBq2G$%yK23#>kD0dCO zo7xm7^5?9M{7SNDq$qikN#?seD9v26t>1UU?C9gik4tH*<>(%A>+9>In_TRt9GDg3 zD1mY|LI9nzZ(v|WW3axzGkYcSIWL|!{BG=$DA5ze9mszCuL;^=F?YLfHm7~ct#ytx z;3x=@{bIyswIx^7>FnfXM2;NONe+$2(9kdsFT*TLAEr254-Rj=z&Db(s~X>1q$C^5 z={0g|Yo9Gb6d*=d(`p==#v3k4TUlQVg%4WIS!CtYryl%icu}}kR(InFotZ2if`}Z? zbPoBni1tjtys|>MXQ&m(W{Qi8cXYeO-WR>HXshX! zfkpJ{e4fS84+Uim%6Pu^10kyv7$ehaw1HwM4>z+q!q(3N(e%`!DV`9L9woiEBK}M? zOrzO7^$P^n?&VDr9Y6SP=%5;Ue1t2hp5M}PyIgt}jg3TuEcAa&n1Z6Y~1 zI3_!&9Zx0Je;sWL5uBWqtJ{d{twLu`5OQ7)y<B3{G z5!cpT5tv3_KffRSM;%iG!pNn&w_qM_wnCLklnkW?X{J(aB1sN7A{b-R4@Y>;%p5&_ zang3AxVg&8rkW;dP{~T$p2~EslO~Q5nM?gF>>9}WWJj4KyQ>s2=8ER(S=fw<$;7Gc z=B;!?=V7RU4mBN4o5DxNgJ5g!p|E_Cl{Gwyx#E~0wvD}us#Kbx7w8UNIsnv-YP(WO zQX{~Z0~e66le=W93KJ~FxE9@7Yn&Dd>v~R2Z>aI8*JY3G0>R**l6PJRohJHzI7^5#uv)YcnGeStf zUT@vAv}POYUd}lN=fDw=ai=*X3tqy8kX|Xp@diTLpIQ249Nqq=mF*PCT4H|Z)RVMQ z5R;B_5P($qXF7MYUyGpcT%(T1;22=X3f&dm=<1_<)nnH`=PX%#6jW(!UDm@xXY|F>>O9^bi>B(0%W0v+1<`N9xUV!HiI{gfWF&f($+pnwG z-hg~c6lfy)5LA|cQ6C1U-8zRacz>e;v08lKsAJz9{ynmySW=U~RnfLz1ob4a2ea%# wKKk1@9WuoJ4`<&0`h&obXZVHw(}Nz5CcEEB?=&00HcMWf7xu#5=c7LOH@dPRG5`Po diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index e00de2a..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,44.706306,46.061058,1.769020 -2048.000000,44.637695,44.380672,4.279611 -4096.000000,40.455681,40.014336,16.366161 -6144.000000,33.285118,32.748543,35.928623 -8192.000000,23.710209,24.669184,63.973408 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.png deleted file mode 100644 index b0364899a1795cbbdb6b1f85bbad264f2803c54a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27768 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 aclvQkC6DODX*>mtYwH$slZ;JHr~V&LgjzxX diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 8cdad73..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.298225,0.317259,0.488989 -2048.000000,0.259732,0.273314,1.696744 -4096.000000,0.625925,0.606134,6.562274 -6144.000000,0.638592,0.620856,14.674603 -8192.000000,0.759344,0.909012,24.447786 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index a4614decb967b09ed676dd0fb63e67d874c5d682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23005 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 S*MVA=ESU5DY}I?~cmEscOy_$5 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index 06a5539..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,52.079617,51.291138,2.198667 -2048.000000,49.489922,50.028545,300.000000 -4096.000000,44.910591,54.361088,300.000000 -6144.000000,37.248001,35.458050,300.000000 -8192.000000,39.242752,37.771263,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 659131676845141642b6fa018fcd9afdea3e4ed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26549 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 JlfKI;@So=H+e`oe diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 5380715..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.082441,1.162919,0.901414 -2048.000000,1.988023,1.901289,3.394349 -4096.000000,2.936218,2.928538,13.135702 -6144.000000,1.553664,2.496307,28.691530 -8192.000000,0.003072,0.002048,51.007648 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 0f0701e9f7d9c8c6ec76a5cff0874fc9ee60e391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24043 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 z 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 M*g)gi!P8g%8Zw>1!5EmMJ6vN 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index 8c99656..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.783806,43.025406,2.207317 -2048.000000,40.727043,41.016319,7.793104 -4096.000000,34.960384,37.386238,29.592575 -6144.000000,26.578943,28.072449,300.000000 -8192.000000,15.703552,15.120384,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=bwd.png deleted file mode 100644 index b0a103a297654a0c7ef888281f7a4eb05cf6718b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27057 zcmeFZWmlGM7d1+W(%q$`bayLAsDOZkASobSQqrQNf|PV92qG;aAT1!>A|Tz}(zVy= z^Sm|Q{R8%g%^3H%hg@+Uwbq(*u6Yoqp{9g~O^uC$f`X@_te}a4f);>+f;xQ-6MiGy zKRyrt6Mv?t_e{&t@|lOJiv`Mk(`Qb0j?e6@&91v!xVTz7ItcQJ^YC+BfBNj1ldA+T zul@gg1COJN74IO`<_-7~EGK1sR}>TiQ{+F?PqMkzC@9wSDhl%2o~auXUa4=~E?ako zlYD>LSth+-w#aM6k2XNS^A=jwGv_#wNC zl^F^@ArH`Q!arwC<50rkpPrN~0m#ercmDsE|39-V4Eg9z7Vgz)L01WgiHToyTb4=C z!e+8xY2s79dzXoa2cMU>w*W^A&65b9UP{@=r)J0$_Ok7YnA0?huFrHIK@pOXkzr#$ z|A8`C9zLiPNoxu(8M?Hy&`Sp9g@zi^vIHzJi;7ZIPpJ9$NXg5~>x3{lF!J#c8XFrQ zY>X+vhfq;bbwZdK8F`e4t}fgY7SjCvSCWO1k>aj8@xMXO#b8bU%G0v$|M1HEO61Fz z7vqAoRJWcyVQy?}{JTCHdpiVQ{IU7v#rfam{va6lhYue-&vshddwYwQ zKUCH@&;9KG{E#!hNi1K&ZFT!(tyuTZT3BePwot-76x-hg?R&kly}@`idi8$NX%cR; z?+hGFPY*UwUQ_bF@Y-ACx9XvN$7|fv7<9Gj{9uf3i}&WuOrxINOG`>Yn0S=3el>IGKVMS`ULzo=5V`|w7B+jDB7hCn0>2#9r+f4+r zgmiTG^K}Xn`ApHW?z}M@uXLuDti7YD88dgtV2|hK7cm zlT*pyML0P%^=c?TH}{*B!Ccp+G>Z`=sPqY-(Vkf4;n^O$x?$mUn* zqjHko!_ZGXuA|u^X2g_}BHMO+p%0pY)+uLsl3lCYlvhnltM{;v<;ihyi zdY-Qp*F#YK@R;&dN)fT&K0LHq=!jRl-vFyVmlY*53$MHX3g9;Qh8s|5P%)6F#fFBC z9`^e6lj(-Q?A%<*P2bOp+Y1TCtRf=s+S-(n!(?PMsc+6hJ;#z@_@n;v+_9#nX5@>- z-LS3EdVkr9aTgpoYA=I>U0@Z``xQ+lYrMYN4o3zApnQIq|I@x=LT7e=(*M%;M^jUp z&8_qE^RTe6_wE~iaOtHIc^-e??iQUYu^ScGtiSZr)YRfAvAR%|oRZ zS1nz)d(tFT?%%h7{X>Bi@isbIez@qdin6i^>?*B{PvTVupSSOChX}w?Z9RppQnj<= zx|_hWa5&|kt6OaJ)n+Ih6&*8<tD=zOUE`M=N*rC7vLldK4~L_ zXD;0AteEoag!TEUr7qpl%HV$w!XAg5>*m38-nt`34j~=%w|(JZaY_X^4v>RYHr8kADTxuvK@;v%faXdvL~b_g#tG zn$E%c=-kn$FC-=*`#*7RYrp%89!s*SrM5lxm{^Egudo~4eQo=OS~y%?=J@48XTsoD z>p`VOa*(&uO7D`)J*L(HWHYwYhe7cGSYW zV_EM*X0uxANkby&eu_w1+3%frU85UJOhK?-S};<<$leUu3`j@2ySwn*aX8v7_#eb4 zUY(tWSEev2W!|S5sixqm#$D_U>EsRhbTglc#F+t^b&o?uY;5dpBrELiTeQcpKzSeu zfb4d#HKl&*78(i`7S_E~vFN4{0+RhhY z*`g>#z7(Ad@IS}NxnCwBKy)|*l`oOse0j1~vfO5f5mK;znPn+t5OVHE3VM2!=ck8O z^KH=(zJ%1&9VMns%F4>q;haS%)4?`FG{Kn!PT`|h2?@G+N~?F^Yl(;+e0Hs^t!?k<;5g8O z%qkAR!(Fz;y)tF;Qp4JTkVqEmE+255%o!T+Bw`ZEhA(b<;un>`x--#gS z*8BQ2I?M5oZEX z1U6D%(g`6e|`EO%vHjDW#H9fcgkS3ha-}N05EwizYkd+Db30{c3U4QeYQEC zbh5wZI{erpIwPa^#T6V%VVk(YawKb!bLq()Zce~CH$B>(`50cMmL>u9rVN(o(KkC4 z4UM3$k3l-tggC3*Cyx-SMH0_{HU^KjrT$Rp<^jf`*MlD2!0Lqj@Oi?0Oy5XJUkb z=*;>ReaCj+3T_JNmD15b8Gd}#`#{d8MqErmfhV=I7z2vvX44qW#paOn&x_oQVB6wX z^}5HT(Gi&lO6IC?&Jyo9v^&`syc%{^dy*Y$h=I^2vphVSF02d^;;x*@7*8*2YRc#@ zAO3xy+>H|hL+<> zO$VTA{MemmbRkDDc(V%;(V`Bu+iJs0ERFKdm@h*OZ~l8=*b6kVXV)%_{+!lG?I?`4 zGR>;|x{8dD-@i_LWpBEX!h^1wPC&4em6b^SJ%$EPN2T-J(*;vk0YmSN@{dM`!{KXT zmEo7?1iO1TxYmCZmzts*I$x1G&>L-GnZ*Kb7}RYkxu!Gzy!`*hp)H2FYII6I4?kawq5 z**ZBON#)7}%)X6_n?JfJ>y?=swaQ@O=kG7&6%!lTsWqh}B_$=KrCt9zg+13AWz`UX znw^ug+re4fm#@of^XpS193uTy+xdkB@j7(~R{%i;1zZq$t<#M`dB*iJX_6j1QQL}A zk2>E`9A3aKdQ1k6IRtHQe+gA?7W{;%L2G7aMr#1cP$Z>$=VaK}pM{zEB~;x=fJ)O_ zTfH6eoN37ct#4>rp;R`*>l>dG4IqY43@RKxYUQe7U}6$eQMES&qN}K@dyJoI-=FB@ zt-l9gCptPBmr9_Sou3m>(KUdchR;_%-b)gA1qcB~sB0$WeYn|TS+)an?k_c0LW7VM zcg>l5{@}rb=H_ON3Wvw^en+OOzYF0D&opPx)ldyseWOJqE1$JYCIv{ZFB8id4HDD-q~Jnnd_1ol%<(x>!q#qbC5B!VY-l8qvPV5 zVaZkQ+`)WY?f%hb=yQQVMWndvBEk^(AZ_O!@;?3^H&N|T_H0E{=46@4vMaF>Xh;vI z3*7Zav5<;jwuSDy?4ab74;1B81W8WG1o@Sav73On6LncO?m~OjI9w z#XoL-=(COb>$Ao0@%ZvI$?juR#rgGL7apv+GV)IWLZT{dZ?0 zcn7}O8%(nAezpDcb%km;8M3{)^gb!@pDaMRA34fGIg=$R@EJsuw%&a#H8-7AD06)O z^I=$O8nK)>FO&f3t;6;4s@Qkj1`;u{0r+$hCKY2U_wGGo4gfgSQr#w@QCeDRH}Rb; z0FVGb;Ir0Jpn@9tI@~BQy%r#?_ubt^fYC@@p6vlbnS0T>3#2FN?OQ?szyJ!lfl&hy zf6>^|^{^BU6u{?Hn`=x=Ox7bMHzYkaF}kQ5{L?!o?{2qH7&{$pn*w%Ftajh%p{fq$ z1de{R%6T(q_WVP0YlH!BVKQeWRTOTG>@|bD<5LPh|1tYT;TkpDhN+bE{dR=G#hDOv9HsuNF zN?fJQ5C>4grz0h%c||ltMDoDYX;ajr{og_$^=HbXLoVu3P7RM(^6~Qaj&*w;(pisy ztFtp77~9;42k;tV5)$iyY%CP+M_-+iIda7S>{_i1eEe@sUjHylmRF$4pR@MC)0^{{ zgq@ouKr;uyGqBBoXXcmtvmjaa11^DdvkZ7S*uws&9=M2;as6aFh-&a_H2J_(tUBMw2Oa97R`&YB>^1@rhak2|2h8ln< zWB>DVEpE$x@5`gPD4&y+T&a`gED9s1Xw{rd6q#d;-$mRRRM_Di-LJ^GyI5zg;B*`s zF&1@LQl9ucdk-1|77h**3(G5jJGthgqobfxga9TYCL}a@@NzctZ#7HN>b7a3_@Lo& zR-0$B3%^aAxc85*))ulO3Wigo=~L;q5JaMRD=T?HS5DLfCpB zfyA52DH7OKm=UIiaz4NV^)@d5D#J?|-^{jwS+dpYt?3qu!m0{oi;vVG)3J*xMI{Hx z?(P=or)soc3!HhP?s(&dGwsDMbjaalG)CPN&qLJlb+Wd4`G3*YPVx^B!+3v*mt zFviCtN*}xK#-F5=hcf41XHTz(YrC(agHr6U@poQ5HY4mNDk)L4i_75z2tl;64sOgj z=vOm696tq!FDr6LBcMcc@teb|(XyGUrOcNfzj6XBZ!FNayqA=uqr_y!y^nleV7TOc z)oQC_{loM|iu2Q^?{0jad>B{s>E48v$Dwpk0XA-Jk7YXs5>$Y%s9+eE!7%O`HS|Di z?;!YavP=RyxDfl!XFv9>cbWx{nn-J;k8*jz1f`zdl(z=6nY9 z8<9Yu(uf~O|LwbtNJjVEz7Xw*xmSxHnIG7>?k;uMtZIMKYE8}1XeMDt{VI1SxQZ+- z{JQAyctWh!S(Ur@OkItXtFik*Rd4N)o*<>T3-j7=u@!JbPcJX$G5ZSB%TrcBI}D@CIr%SJS1na9;gi$w>341A!YF)^bTaYucc-k{zRpQYrpy2xuh<{wDZi| zgjl>!tjlDl*GF}f7|rnT(4xyAwkQyZ1fe4g9#`B{Xek;HO1*|{mk5#Qd*TvS$ReDAfE1(w`h z92ofOG#ED!6}^kdUU6f>d$EdQ4XNB9Zq*!4dIO&|tr)ZZT|iZpTfR}CSBeIrNK8yj z8|Zz^%-QQN2#MI0+$GO;alYEyx-m17Dcx@%|D@S69?qjazht$!cgTBTSj;HPZfxvo zEY|>gLXLGewG3TFNvgdzEcx$%NASE-wp?IHLVIC1W*4f6l zG<>>1kKM*AXk#{6FE1N#FDQ17@PQ@C`X`F3YobR>Rm;YMxFb}Q2-?Fp)V56_H zbciTS8<*mkmxHX`p<-@sE(lm^nN_c4Q!t*8?eEt_On0^i?(&MKowhMWX?#>A19b#L z4o00MWKDc|GF*QI`eea1V+F3hZ-wILo!c`-v1e(!zYQ!0KKB;Ps@MfTcqTwB&HzgP z%U7?WV`6SSefnvz6z~fuNVh?w!xF14{1&tJyO0LX(X@SGq7i%5?$*0dWecZoOBK0J zrM=dg>9A&vK$Gzk^FVtoDbG7qyx>uj_^n8BUSIYD<_{UcLZH1RG@i>Nr0@PF~FM*9efnzpkW95P;D)I^h;S>o{QN#0HNMBwa6?r5pYjB3&NmzC^^Jevy3_w>pbZP~K z`SnNNUW(Y8Ov~jnRe8$DY}a2V#VSNpNbo1EGsBt2I?2y$25+3sDGnAq5~7}t<&h#dOJ%&@Mm4h2R*toP2gEUZ;> zUw-k|R$?fb`#PUe*To!z6_4o(zL6*D&nQv0;K`a%!$6hhw8}I8u^YF8OYFx)bczgD zzWSR)V8dB2iKr)vH zxJ}mu1!EBbj-Ed9a3w-MLOV0T=mnKvS9$w{b4MQ$6Lb_@)7(AoIVl>R3_oA)d*20W zAQ`8QMww-IS^5~P5sKgCxd%K8h$Aj29BvXzeeZ9hupH3P3R>baDMdc3QM-SiMMkEs z**pDvPad;IHrLCLkc1;i4$TLvLxQ=!Rfk6TOzaFZGbQeYr^5CTsk1RynWmHomIA%~ z3kYpM-n@Gb?f!hl3K$vDLjfR?24xF8!S(gB7Z(>FBL^+Zh-hf; zYHO2vd3k;G%TQKy ziD#F~C_o=EF}Ystv1JLMaolt64M?Xz%E|A%rfd`*HoOhm7)s?#FwIkdk-jH?X8?RN zi;E{AnG*ITRX0YL8oGMVpF&z>pOcM`|NY|?pAD(c0hN%=6Nn~@CYE6|o;=PF zBL!;SG+;mr0Bld5JRxLY=tYEjU=r?=rc6kkNO_H zV4SrUaS%Ff7Ip*_LAJzj$(ImPed>@X+`0NRn``-a;{%q7#e3uHL_0#m#*k-GwrbFW zt{TwYZ#mi!^*ns+2_?)ivr(fV&t zpoADHln|(uI`sbbVgmsK!_(oO)u#n+Eo3@M*EL0cVQ?`rT9J{Ur--I>H{7_Pqom~p zSYWII#@hDkKM#IVmb7*mzT$rg6k)nY@`mix>QjZDjDP6tff*wysUDr;!eBvC66u(o z({|=ie`u=gKkNna$8sMkPZh?+Q4=ge!smyk$1Y|1H9Fk+Sw!Og)QGax@~4h&-MtL6 z#N9qWE6*ocq+9|m8YlN3dej;Fw!M_W=Sc7A4J*B1LAkw>yO`X_Saj8f1g$^(R==Vkk3TK{tx!K1m6xRh-`3^+D3U9a{KhaGPWv|Q-cBUq;pKF-NEtN z2+?AXaDrTHjIiBPk@&SK6~izaMB8c~`1m&A>dK0$jq2S?wON~ghJ@Jat>B63nT?9V z$mV@!)>~VXPP^IAtw{wnMp0oN*KI91B`)1muGnbtix)rtb_b`960@ej5MpMyZJ9Gf zRLPTq2f4@LJJ!WMFEV#YWPQ*Y-f>%Y4{gs_+P_P!FM8bVMZ#PAYgJjHM-7=D%J%Wn z+jo{l_O@lP*WP_!`84%`-oXoib`3q~w2R@W7V&c882M4vos;VnVK7MBe~kGD%26x} zjhA{J9cOVpv1nW?Zb}wjGz@2qe>m_sUb^KQBe_nlxW?4S1pby43vrW67h#`oc&BsWi+$nE9u> zJb}8#!z64Cd_qc@djA4M`O3=VM5<${vpJk1^;~3B1bYK_`CORSN6p=s z(^c9tv@sF=Q%YG4zvfJ!<{%l{Q`!RGRtK$)e8$#C@Be_&wvYH-g0;c4{dXP${7cmsnl#fE!lac5xtDBJEs~GDeb-A1*}tFen=hT`rcc&pdSweE@AOy<^BlFxPPencSjW@uvIaoI zB?oxW%a<<+$;euOD65*8eHau6)(TSPOXy;Qr(gx>1=8D-u=>Bf5VFGjaGGg8X=gs+GJLUzkx-gnOdQm~jexI`K#-TcIAQ|I z;3hE%0u7)W{Vz|#%#F>=7*7wk*lyfF4FHqQH;0LinWhlBB`%|yM37dJg{(FCuYfjT zH8}}Yl%k`z*N|oe3{l98{{w?AFAnRwl7%BcfCSJA>&ME;i4y>;c5=AY3q3pi@6Xs_ z52r6qk*5TLzXdIT#-TD0m{nh{Is>8zLD$a{1RyGbC!sdS3e6T47L9*b7ImE&j*m;6 z-b3P*bZ)mcv19R}O_uSM0LKk_S6C*4@81V9=YO?8^;`z=eXC|KQfqJX{~h`;WDJzQ zwxz5J)fO4dZ9*q#ut;bO#sgu*;)dw3-M~~O(L3&-NV>wvw*3_VK)xtr7{bPo|@ z9ImrnMMLi%l5O@ax5EO+Hk6+qm1{_ghgNlMRe^&szI|tIk=V)44}y4sT~t?gF5=@- z1p)!agYSes$7J!>BuAQ8&9Ban+0OP8V7bXOHK$8kr{|&|ff+_4=!ZhYPwH0@UU5AX zV$FV;lWRs^SJFMv1Oy@98NNZVfnl6!qHw^KD}6a{hWeEiX@su%9id_p1ZQ3c6rh_0 z?YL&eQM(co)b(+!H`Gw(wS{D5j}~b_z|j4Olpu=X%F-mlsp&ySBf;Lw2Sf8W$j_rRS}#x z`@+WuR=qIt7Ds-qH%MI^|6mNy{E>4$)7uU%K@x}R?o{%pz4Q>t9rq9n6TyeOJVL}% zPwT#30#AI6hJJ$^Z+8!1;J>%{BGYMhtWQdbB4}@MNWrzX1MF)@O5nW&^qv{vN4B8p(rA;OzlvUA;jgdEKmI1~C$rBmu6+{)n znC-yEo^B#|uP>;qj7%I?o1KeMGmI*Dh$s|+B&O4Hlp?t6?#L?0!9ppsxXoV!#5C8M z!YLVQ_^C1Iy}SMLAOMp@H!~f^1FbRj)JWqYH1( zMJm{TPId^vyeCkz^NU`HyTX|n@8>KA`a{C@?-SB!Kuwa^wLqtJl|4m@;mzL%3a8()LVz#z+{)9Iqy$H06R%I0-{~0Nq5~$d5*OC?B#2ae)=iiZN zKwtvnY+y|-*qplh8#4SI+=Mjy|IL?J_Tt*%l%v|<4b923bJIUUiLz5?weXGq_NSS~ zu|af7&WW#P{~fRmw#tj=`AmfQh#H*7d?!jIw*JO#n1R#-HGEnLjB*=&x-jj3J@I&j zTQ91@w7>4J%>a)PApTu|%Iikx>P>dQWCT6Dy`^4{KZiT53|i2Mff7zB=5$?LT%3$7 z5|- z*1v3z?Y>$PO7Vk*-}8g@Ng!}NXwn0m~9yu^we2CXf}_w)dfA5p*yE9kzi z_wx;n?t>d)p?W=h(^HosN*B+)lJ>rY>CGSkD954sY6vA=%=yLg^3&Ee#9CGB?a{gh z5~eda0yQ7owuF<7L&pvgGs{MgK)OziJX{+l0JGs&sCL~esh}_+j*wfoZ(|V<j*SO#aX^&&qQkBa6PlHzco4V}zuNBX&$y$(sBqJzzEicZFK~a4H=0GF4 zcEsM0K=F42hf_D1Zdh(~j(2E+r9 zNsK?+x@}EP6MyY0Z52(_39jW&Yt-|GZheUTzf5IU4f3R8pxrewces& znPUbm*9t%#xRYa3Q}1bO#|?VJP~j}XsjO;VTb!R4yZ9J=vTGjdp&d1#6U437fNZh-VapACKH_zblQrVdw#)Q8KjAX?_8P=4 z<83##|C%oQcfvyF=M&e8dol`u~$#kj^K@yWpiv>>+gv#A@(QABQUTL}8a1nPPir?9e(z?6k2DB4*B;afuou29{cQMXV*@-}oU{CMH zRF}o;l_jtkQ8ebjN-?Fpqd36@ZY;1h#J~c*MPycb>F0eA&<>R|n08A$x_r{o6Aw~` zzq{EQ`R+d~s@{|U-2!%Dx@svs3+&@?{7OJ6O!u6{8W3n&9I0%Olg!zZ7V*fj_>)ShRB_xX4pSrx&`L3^~>Yu7$nwV0JhuObZ{eq<71K{^o zXlEWlKM?HSR^Um1vy-q|3p&=^_q8HPbAM2_lE8}xc5F@>QHObOL_*j*H{pr$!P(9Y z`xM0>+k>E8NK9~25qr7lluy|&{s6x~h50i&S$tvJTRQKmPL%R>fRE35{XHvcV4WTW z$q#Y|G%H`cc(M0VbGFuKSrb_Mc0?qd0- z&@A!XPuB!*8eA+MMohi{{Mw5iFWN8w+r2o~kS{X{i^FLOShu@|3rwa;gX|qjPa=QT z2L~2L%@tZ{Z0<*3(Tb6EwwLty@%9EGg_W8$b5Z-32Y@}(nQt^2?lW{2I$P`U@L3QfOLO2H6%r++7MsigR3$xND}f`SNft%#Y)a8otlp z=uuLx_zVQ_b~GMrSQfUiBmgK?J}w)Z3Fqu;@A37WN%t;@RPIqkpn`a!6cy-T_s_V} z8#{3>j@6abFlA*S=m$!uf;nt?wQX!Tz$=uUolW?;eitA@LG2)0C!4%ZcZ%z;tMwA2^y)Z9U@Y3{x`GtTXjJU{z3_UBs&WGYe0z-vjW$K z5D6s=0gnPt%Ann^qjbZp@NjZ)zAruvfz@$=f1kPX2oXKlUBdqNEzm~Ee86;c0M=!q zJSlvJVEG_WV}Pj)=7BUk&$zJEG;G{t>@RPEXr4yb65|MHKQXy8gj#6EMk(L zNM+C{$OR}m&v>?%(U*1AZo&rIl<{K)`cCaE+oM*%co5^@{0ll6T#!m$Tv^PnVAT8~ zdl4}I#5Gc`G#!!33^PC79H}B9=M~8f0BR7#BqTC_@gVxO%W@(V?W-%TWRi1yx>Ng75CHpi?y=k)O3=h+ycR z!9V4T^WO$@0xK$D6)MS%jYHpD@%JD3(z5zgD&Yjh2xI>S;m$pGNuNvU^*>jdf?*Xx z*HqMk3%EWR3@4wi9Ty_Ow$$B;^W9BQ6!c_%ejwwB21i8HxjtcAl*Rq;ewi}+!h(DP z51$*y{5&Xfp=)E`hf;5ssWXUq_Q9hfkYlTAy=kcT1>>82(8W2Bx8{9eTg-&V5VmiV ztlfmt{~cR)w+(E^8q-L#zi@$wnrPUnEa@(L@T;V$yZ;1wO;uCV?d>Kw9kWJ1nhGNu z1pkS(p?W-`6h^*ebtfIG%2Gkd*1C%M(QeiZu3zRRX(@KJN^Uh|Mg3rkN_53gJw~+D zHt~BI_^yi$j`fW{-vFbXO~=HCzKTiT_5ISqYyTGSy%NDl+0~-TTXaJJt2GD<^s_F_ z$y!)a0(1-X8o>y5&(M%oB;`%9+8Un;B_`5K2Ll!O0|!3dr2v$;@T>=FGMLju!Mh5L zq(LZm1A~K{C8UhA9Mr-uDyD+Hx5_1mi4JvyjOu%RdH&C8*#Id)~`|q?+ zc!47Ll zpG2;WKmk#L{tl{MrPB?>;NX98%;xOu{PBAQc`UiJW3_vu_g3R=0{JuvWa-2~S-QNS z`0gRPgvDk1+^_m6-t<3L4A{s4u+NSlEh-qSKEQtzu=hc4Z#?=8_1Vh66|fUS(@JZ$ z+||WJ`Tl*kKMKvhwR`wAe~EEvEFq%OEq0%P#A?|E+VA0lJC=!yivS9YSM3xOGrCrg zeZs=ST_iT==58w}yqrt@U%D9sgYnP)2xW_ba!x~kXu{4T66NN->z? z98ku{hWnoiN8=g(2<3$@?%ZHp{8u_cK__ev%N!gWJU&01qANaJA8mr06Y$-c;FZH= zkV*BwJe@+W%l#@eNU%!x3a+daYgL{BA~RTMAc~1g*#Or++B!SUq5nA!DD)#eDi`DC zS_=h&m%rHsicSJkCW`*D1UCi1b5jLZ3}}nt79N%y0&w`vG1aAZFhIA(r4@S%1j_}C z+@)aD1n(H_R+6|YD>(coT^sJ4vm<16)NXy}+wk&rnYd!ZC& zd%aW`Pnf_rau`;*qafGo=+uM|OAGn-jL=HK1Utwf>;zDAjf?9Z;S5BCdJkF|5=GZb z?_fMzzc!cyd=kD1Y2=~J&&x%S6Vl^Ldn0t|zrQ>>ZK~e7r5W=s0|E$1#o3{ZWr~1x zzyZfNyYr4WME3Hl1U6B0IHCYaJ@S+JyMhjW>Vc1NWEnO2h45a7dVXyRd2b}$*72e~ z0f&Of*&E`%Ijg0m@r#Ai-%lr(VWCSJkSnff6efeF5ULHA6B%bqe-{ZaU6MeP5_vb% z$85P=H9`ggg!RMVS~Q_j>?l{e%MX1fBt|Q@1vLfvEzE;H&)xtM3O+4L3Ya8-xW0p| z*ld1$BscLLG8&`i4pP}#k2gdCL=%<1gEY2t)BEsN)*Ywg1+bI==uw8!?inX++tAxf zi$YBK6j%e}Z=@*i+^l_`G+3W1W(vog@i)>_q|bfs<_g2qMzVF338m9~C}C zu2n!h99I!($e^=VG{sL*A^R;1*4ftB53Ag^Da8>12FeSF+BNTAY0cvJEUkUd_K(pKl05kCUAH3na_v z4)6jo&bs5GPkIv&lgu=rf;vQ$=Yza)taQ|5RN!d)Hgqcg*KZBN!vfhd{+)#m6+{jD z?*&(9PV=7)=Z8%_X~^_6y^xYx5uJpkmHXp0Rf&H+RLoFqBc%D_z{E#L&hxTYHe{{1 z0*Rjv=N7WHM0PViV@w1!ibfP4Q4xe~eziGENlKz6&O$!LOxM$aavyqIhilQG^l*>^aM0YjXY4+dANXzo{wmKW}QT z5*H`H{VE%q&x5RtzxAuhbM6IB*3L9zA)Dk(=a7Q(&2cInt`s4r@Eq`vrb~NQo~-7p zz@2AtaVofXgxrvv1kcNT(A>j@5hoFV*GO*gYNX!1!DywGPcC&XgiD3?-~kfdvl9R5 z?>!(=OP5jsn~T@}kS-Q3?mW^7U}I}tNd<>}>RM5CBq$&6M{MCjs#qwU<*URv;iLqfNx-ChY*_F%*uQI>ucJx+mL69B2Irna^U>}X&;%>o_iHLZ9|Xy`Q%mZ(JR zD1n_*qjJrnEp`Vb7za}cP8Zihf>;fOK}3wP1|Y>7I$)yUkjsMGm4(D;Ihfd)_n#W|Rm<z?%|F5lzH_mWi+)#FD2*&zicp% zBAZ;w&6qxNemX&I^Na7$;z=TwRsSLTO5B%sF=z}vDCZ~gU@(I~t>lsZ!1;c3%yRF+ zpW(i9)i#2cH4U1+=Yz6g)9upOykGs9`obmazb7@&B zl*}=huw8G6^be4i%WRy#JiDV2Ku|YX$92IGGv$x>;ckUpk#Y&iGL5pk>a|Y)zf636 zcjN++^e{2vYK~8X5?Wu|A4)O!VnoScXZT^S{YId7=$a;)9#+e%=Ki8Wg5!j9g>>nt znio>L>t6F?dvsGvWM}6mTU&VHD;?sWgh`Ly+Ly(q*^3?yc{5=0$P_mV^m0b2fAi7w ze4MdJn9%bgn?SE*_p0kuqf{&j`+uS&1BRzc{V%B2D`P$U zX)tXkMGiM=sVxh{iv497rqFWEOWqz)*S$P?#pi7!P2QWYdWq^KCDlw|>}Y&((pfMh zB^}7c-Y8Wrdjs`FQ1>ZVT2@vF=^cK@s2=C*lYnjRDm}n9NKHBN*D2l$xG{2

    T>e>OCofvRN>7qL)nJ8_RT}1 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 AI KD#^-5_x}ghJbbAD diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index 49e4878..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.035309,40.819710,1.296570 -2048.000000,39.990784,40.225281,2.215243 -4096.000000,38.446079,37.881859,8.184044 -6144.000000,32.667137,32.935425,17.994085 -8192.000000,26.741760,25.692673,32.180950 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 30cf02597ba47428980ecb251d164bc1f770a065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28049 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 67e381d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.318273,0.318949,0.314035 -2048.000000,0.290389,0.283678,0.868269 -4096.000000,0.856528,0.828110,3.297724 -6144.000000,1.193067,1.092842,7.319801 -8192.000000,1.384435,1.284415,12.749312 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index fcb3fd1b8f84b1fa0553485f382d0e301d3ad697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23370 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 E56oGPTmS$7 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 7ba126e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.749852,0.724501,0.293608 -2048.000000,2.074576,2.071059,0.883282 -4096.000000,2.840201,2.829121,3.245122 -6144.000000,7.177380,7.196886,7.207584 -8192.000000,4.920247,4.996974,13.035813 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 1896e382442e33a80a3bd172e3aae7c4f0fd8072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27264 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 IUk2X)0k6t3N&o-= diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index e6642c6..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,39.062706,39.139839,1.392907 -2048.000000,38.938622,39.918083,2.231972 -4096.000000,38.449661,38.187008,7.998953 -6144.000000,37.007362,36.594688,17.431482 -8192.000000,33.146881,33.517056,32.820320 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 0fa595aad124e73c01e7d16f86532896b2f13915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25672 zcmeFZWmHx1+by~Q0i_WTX~jS!r5jNYEKoqYTe`ax2}M9eIu!(w?(XhXy1Qf3d7h2$ z`~J`QaK;_uez>15V=x>p_FC(g^O?__&u@QxB`t}MLy3bxAn>0`iOV7o=$;4!+T>*{ zxWe5tIt%~s+e#?e%2^oLI%r$#BVKCTTAEten!eS!VXtp(^VY(gla-(K0rL$bTU$#T z0X8u`g|#7DAI17jc*qq?DP0avi}p)218inqQ7zH;iF%vNnIO356YCkKD===WVJFrs7Yw>uyb|QuszCYL6CDIhr&nu20i?k z*VQefi^ETnGb7@YpPyeb1?EFy_~A`N+=IVQ8;~L-;LoF<(G%dWe$lTHr0`cOP8`pR z+n=Dlg1^>x-24A;{{LXW8rzo9jq`r|peLXa5RVnG%N{aS2)_jrL8f&bi-LkeTvBpo zYAVi68^<%$atmRp&d0K{R|6=yb4&4_-$N)of_o82TvBRkQ!8$`U6y!h zX{o-xelTceT?#Gx>L;0FENpBh)SUKnth*kDxx^h@LruHx|Ep=Y@<$w;AiH$)h9dZ^ zepIk9F!*lGG?CEKO22wVbnD6I$<3*{zhsQ4hP+f0L1d~H1r|-XM@z>F@E1&YoS!l) zWqUdy=W}!#aG>M$1p^u;uR~GG?@!ZD3@rnLyNOQ%bQ(WXeDL-j8tLopb=;`fKiIE2 z@2GxRalU`dH$YKx`ok*>C z8O_6GJ{rMo@>kv=^5Pw>FzBq`N^BN#wd=6{W~eF}D?fXNBO)U5!N*6SKvG=%%h#{6 z>pV6#HZ2_;1zjmADT>M!>zN6NFy?n&*xK#aH;<6fhsdsM6LKzdQ|X?bKz&pb+|{;U zMSc5LKXHEM5XP+hK0aPE)XZVIKUHYAU+ztzuwr;Lt}j94_ssNERo;Uxk9IpVp6epi zIJnx2uZ#w}P2)M6atJ(qeM{2$h{CwNKSYd>5EBRImgphWs@#QBQ&VkM{&tKjC@D1) zik?)jWL0(kknnGAYnz#E36ZYw^d+Rb%fXR5x+Wbb6!|pd?$APCU*E@%A4_f=zY3wi zq8264);73-ad2XDur9dZ>9DgnR3z8lM}mdVao*A8kk4yD5Uzo9y#HAC>g-(P`Q1A; zzu)LvI4r(WD(-%8-pceUi&o7B{}N{Ggor<&%GGc@&#kR3)1lmk)V0D9^F$bDp_9!z zSag$XYcC%?LWgyLxbfgY@ageB2|2mqy1kp5+t%)GMM8lp3tN_LmU@M=WgE-9bsf9Q zAO}Y~(cfReLzM>j?Gdk?T`DW*-;Vg;KbPr<7R)*xbND&ou~9L9>6QE?U&3hZ?DD0> z*GApdTW6zc_c~W41NqP=`(&cy6*bs&lp>soCB*CPVA#^-Qebu2S{mcx;oTMz8Xb3U zqH$n<+k1QYZ^m;=OZNS77d9&^D>d65359QJW_xR1W+T*7>pR&FvrzWJI_)f&&i4B^3nZXP+oWC!n*H+g5dFdf|jk;5?2r<0u!iq&Tt8WeOE z(h9hj*;91Be`mKbSlT_?Wh*{3knEbObPF6vP5lyzIZ_lYm(!C-gT~HFuA_VNF4onn z)WZI%g%K&)RJ=SGDX5W3x|>V!q=hMGRxK$dh2-khM=C0mH8nMFD&6WlNf=tIK2Gmw zloj(SRSa*PCBN*@$}_+xbug{mr!C)88A{RfXK)~7O_8p7hw)Q}ZGXkk=b`6V*>?%t z&3)cFoh^?nlPvE;WXHhSnPH{!&)2sWh*)5g&pe{5GQlWXLrZV@%K0^N?|sb(o8(uU z-#U-Ej}G|EoA2@1{ib;FOvA*XiDv%x9CF_`jHM%0D1fqtt*Salw^N&+Z%{}gHpUdI zrC!|TzKr;#&osDl$q`5=r);fv6hvhXY^R)L#KfsMIG)_ypYb^lx{hvHE>{_Noxi>; za@mgHQS9Tufjeg`mxXGa*({b{?AEr`#gq$|cMRB+Z|?1|j;&9PYRq$}F6}N{GEiJM=yzrS#UX zOu5|5c+Vx0X*1txdSfjpK0KZRr{ZL7YV$MFPr@B@)+=RrwyDs&!o9^hiHmXT7&U=p_ufwSYQ?(iH`@#}HP$pL`c4 zx<*PCk>&raJoBMTXl2vA^V0=6!>!ztA18U|*d^7bgPpV-Z8#xh_`l}bkDZSMFuTrA zyM#hrkMNlyBj*Or26Z>vIps#P&$qc+Ronxf{i4>>Uj#>=QdquxP<-@FevWCw120`%HN zD7-&=Z~4+k`-@_P!#t5wrr1vY-u7P>j!&%Z()!}nagNz!VofE1d*`d~N#xVRLAUZ>uqy9iV>|(M09;26?znMLr>JZ#)a{BUK1@5 zZtdBPItH)L<)3i|*4`p-)8DJ*rw$_~z2!x}wYQTweQr!oUl8t$U=s5X^NZNtZWj!% zDX%-+YKpZ`;InSEn9X6^J;2D?IYw+k0B-b z)=Ush(D3mj1~PN5jn%8cpJpUgu?z3(yqw9W%RxdCuN)~W?Sgc0MZ~qcMWhcmW{b_p z8I@b8TlvJF8Q@?_7(R`^bLkjM@!mb31D}`yA~AX$VVWv31e1j3jo{z9*8_71c}>~r zQU~%=XIi-V`N`;ZhP%49jOrLtNPBVy9>{XY4OVVkuR4vB5Zg58sBnlD_V?Ihy=!{bep* zGmMlzc4ZCwBTv?PP_vNpOe#Ni4=J)=5oIImXZT(=9O}WSK*4b^d)E|0V2bxsk%TtPm9I;D4k&kQu1&qb(wm^;S-DBvp>xg~tVyOue!h}tXkolAP|+zhFSSRE^9hG9!s?3`1$I}l z1&`^x-KP}aIu7*2s-n1a2KvxM+UjTBnnd&kn)W>9=aq@rIeHe;sd95w7F#+)Jk3HW^^n{P@V-nQavBPNi`m0i`|Qp=LV+rm$M^$Kqf|F7LA zdj0M#Rbfy1>3MW?t=bR0Yd&ZU(%(cH)J{s3Ih#t$9O?pTzCwY9!aJDbK7M-V%@ zI27#P<}tm@LRI4_x{ye9jri66B?&QX{wQ6a+Q$^Wt*grIjLkP$cmwiBx$LROtQy^r z``cOYM#9Sj@J90|!k(cCRX4;h-QcGvwD8@uTpS(h*$c0Vc(=8w&G{-WpaZKdOziw@ z{v?V!TL*Jz8509L%F8=tE}1{pfOTC==ybVW;|?2f;Os z>#YqLkKYbvvjkA`JCm}VA}5}Vwe!SRn-YZcb*Sa?=ICuq_pBz8l9E~8I7MLh62@4G znhpMuF8AX;{m*D7Hw2)SP{ZuLpw#euFKdq8dD zqxvg@r3EKzhsW66zg}}v@|ZqJe8R4e!?j_?D(Ku#%!Au9V>z!aDWgO2?g4+Dnt~DO z*Qn5E#tQeVXwP;(A5$-rt9(yTYDx*rlq1dYltxp0U;0HNsdR3xCR6>Vg%aaXqT{O4 z(!SXQf!Ud>8d6Rs^4(^q;8d(bdto}W!`NI-)3?YH!vL1;^(26@J6jurl6(0@;*;*QoAtZC)eoCW zeY7n(7G^0PLpvy(DD)N#^N#Dy?c)d4=M6`)d+y}oZsly%^ZKV)%v4@Fx)fHD=_eoa zUqB~i_U4sV92Tp4X)C;H*yN`RsZCdJWRWg*zPVXtoXD8#`?g=N=O>4?_LR&=4178^ zEt~o@5V_mA&nDVs>6zDsOTs6DPSR^1~L~7&1jfY1(OD0&ggN_1{_J62)~(;Pt<6i0Ut+amT!-+3=<4yi_VO1gT>)1DZ&pT9U|}~B+%A>2 zU&(&J9CP-= zd3%s=rQuTC&va>(m+r4C`wa6_2O7r(`4W~8wI_AItq6Z61Kj+JDa5I?Z{N;4erl+A ze||{#B1Xv>s5g?-wkxhXRh5+%-($+*TDIx=zNyr>=ewCN3);v8Re4^Q8|B4Y4X{w< zy9hr1v^`Nkq?5Y61I}-AkbRgR8t=h#u3nV6`hdvmeLHP~$Z6h^)r`aK6YV$-X`!&i z{J5YLLN}eGK^gM>&+8wHQXII~0^}L~I{*;}N7b=wb4qbCTq!4!#w*z#1=frKSc;Flb}8gm*9RZ2$2p?#buRoBES0#i>c|58bdD3G%UP z4YWIcd-x_j`)^+J(XU^cL8kWnlx}qdo2_!uXk&uT{h-FxERTZA$QrNf2^IgQ5{j&o?;T=|R`(FC_EBb{3LIPT>hIf!@q|Iga?GdbMw&~CuVYhq_i-LaP0KtG{6 zl~y<6%N@RA!i>Byyedcq`d#rl;X@!<9b)!#@eWtHxu|n zNbpi>v%T;1q-o2*ZX)T!7GT&M9-6MiXNNMybAfnA0jG4Z z9hGw3@O|l?f0(?D{AN{WcZqAP(X&_p&)kqeurJeHP&hY}a_L~L7R|EeJ*K0xb8oKx zbG*7qFG7*Y269cknZ|&8i-|Zi46N?oZjIJs!!iD{hIYobfK&2gXdikCl!gdQ$tlxHRdV0FKrRCj^Og-{^AaT+Y$E3;Nb4eA{Z`UA=jBw{we=Is ztHi;-U%Q61eEKt#etJrHa$GK18+WNN$^6|wQB6SqS8a0xM zFCyela+nwF_ref9C2cRA#^S z1C%g*a~U8z^s-~Jd9qI1p~C4(cAr)&33J%a$!)}HIX7o?_jVuM>Raqd{37P|cxkN7 zYkll{pa4!=66!shwq98HsK=C_?v4Bm)7RH0CMB(Rm~d;Ftnp&X7e)b5Qt2ARnGd2@ z4<`Fa(p7su#GKN!kJt1KnqqaR%vrTai0mxuCmPBu_Fr*rE8giITRgxw=f3><_3L0c zLXD@i&Szkj#C0@M1Ly4L> zO|*i?J|LbO-(w?WbLL%sx$&gp&`^^v)Z^2ir)f_IL#p>ZUQC52b*u`-)pgDYYIoUh z(ms@ab@g0rk9MnLdTFGXEnNLtbER811gG6){j;>_7i#`(dk6*WQ_P!?JhcF+PaiCM z|I;PxYc|8X30eDx_HMsI&^^PaBzure_gYzmZ>xmd4P+n8V<5?G`ixW90mE94ueFev3ahnk(jd535np>^?&;__Qq?-YM7c$3qPACM_4rb zC5*Q)`AJuOV$thmpOO8sB97c0VAu6=axUgW#POlYr3hp)nvM<@Sa77`_k(nCg!>3Q z3ki2^krjfBJnUL-?7xt>FXT%{JDV9f=?JY-wyS#t%(k|5Xw)|Nf1f2P+g%Zy(2^bF zjr>oL@GEQW>@t`;3%z|3T-{soT-n1&7%Na}>R$-Q;-Qi1i%A>Wv?Jun+@BxN{GO1o zvlqog(OIg{&XS0q-#z^p6p*4= z(Z*L$MN^fI)EW~|D(Wn+bL{znD;NEr(A7Ld;Zp$Sg=z{vnbmkLsz4y>d$ycX#R`b(aY{~AUW0? zu4_)5IXiQ&zWF&au%(J21}d=>J_+>e#X3=35Z(Kfls|up?-Hir5`po+KQr_mW|co*U?etMw{@~r4JvfJ9xcheG8Di>*%IVx=9xn)yr$Rn z3{=zuE-bZX%#hFx%0k{+i`m46X}!-Tkp;Kfz`pDDoQp!G)zki?pylT z+LBGngDpv$(lck&#Z+vRx%c};ONuj>>1Ez=BXt(pf5Vb`HLHpsL#3uQR6&v6a3&Yc z@@QwtcDeuK1@=;&;k?3@$7Ix8QhDilWklKY=YU}X_?dD1Yt~`9d8%{sX_4q;7llM zE3;xx#Xk+^Ej3n1cxoj}yAjXv#0pxShw?U+)Wz*mRf|~JDi7!f)E#JcR|X6_WBAn^ z#_SNQgE?M>W+S-<9h9u4i$8G8*o1{+zkDI;?d`oxKv4PRCya2vR7(p;_I6|opuUi= zqcNvuXMX_;2nFwIYSjPSqIfYctf7IoeaZL`j|@7ZxUVVPhXHqSJ!auD!P=;@u)AZO zsV0ChAIkMkNVwtZ=0+iC&x~B?N>MMfPfALfoSAuSWb~`=2v!vQ_gh)T=%`w6UtjE9 zxZqG=L_9lNJ>4*0-6iW%yu;_2p;~0nm;5s6=g+Mn!}tfzJ4OoWN><||(E@h&WrTO- z$rQk_m367u#<5+;ac=f6fro5ah=$S~Z!+nAAc6L#Ic^`s|%rKTByYbjQDgA7`H=C5CV(8N-Q zjliNJ-YZwG?CFDJv^r50UtC;lJ+ZN}VnU~o>iX3bMVfX!sEV;^p*tR(II3XvF z$G!wVt!5ha^z_&bJE_CiG*OP!e5v@s;BO=nWld!H-zxKXx5`QdMOi!B6Z z;(6D2k-vX$k^5w#q0IAY>ft#yk9Y2;?Q&Jqr5FDCCC^)uTKncw(mV`S>i@t1!DWso zdV=sJ5bKJAJx=}=B?yU+DrtWoT2V}YO2Sts_qsvi;`PO;Kj@2(%@=zx{$>`GQl?5@ z0D}2)KjUByMsJ^8pKnK@!{rU0E6El|DM^tw-z|??j4Q?n7^>& z>jTO+(QQ{RpYMCX?pBaRIsR58K4>35&c{|geF}|H=>7M&S_3Z%&dDf~$yO%V#py}3 zsL}!QBD=JqW9-SP@0$!44PgZpXR#NP)~TKtUE-pTo=#6E22ZZP0BW z$cE+8&-o=y;#Y(yYS4DL#@pOx)2?Yx;h5Sc`Rvt2LvF4NJdPK!Tr2nzqHD)3D|b=0 zQ2b@4>89v}Yo&$u_dkE6Uj8J|MzzFxNI%<@BHzSNWd3Cm^F?C{M#n1*2GcYrVm8J` zdaaYLT_Ad}%4#(ll3)T2;|Bi_%y!|$yHXp#r!hIRw&CuKmyfxC-hLfGy&%yj-4h8( zRrP@WYyTelLWPoAK#yP(kBG{|Oj!2#0{o>|zD8bAR6`3_(+NCeuok)Kx^eJ{>%DuP zKj?+W9(Tr93c#!sNGV-sR@Nan?M)4V#+&^_4P!7Rt0>*ybgOpo;ZL5LOWmfxf?qoD zyk5LI>gfgpFHb~T8nNOOKz73?vd?s)aq;d)AMZR5`w}1DH5aZat)LLr=j<@<#L&{x zvbW?-u95xk_VRMbB(?tBzb-PmY+V1Qc=hFt3Ag>&zLRw2JfrReG{D3Z%_{f3Jx@;r z{jFPRWkT>$YYHr8O>>cH{OUdu=iS`=+g1-)M=%^q^Ygh7V5_e5pY=%6z0T4Q7O-8c z26Erh*;)7lZX_-eoB|G&+6&COvjcux=bYuIX{g-4@0osC$61I9A4sfMo5y%^~#a>GS7#GEbjAeWQ^DR(OhjTl?18 zC&rT&@7Y|mZg#x8FCwZ>4w1^Gwv0JsjP(g{q(5kX{rm0frgLDLyGS0f5?vUgg zW2OX1-~ICt!e%8FfJsuaN*)#z4PZNqIQPTCp}E+v@_Cb5zvQs#>2KU?MqONzm4nq{ z{I^m#UBe9Pp{OXVQHKi6cN+S~B_mefxtm=~#|)vYaRs(`v?4$fCV{`yS$1$M*|5L=J}VJkrhI+vgF#3?*5r z{l)%$!z@gLMaYwai3_Nh#D!vh!T0Ak2s@&|P&v$!dYO0uQokdLc-tc}j`zg!3;+dX zqb}g{_d^X@P!j{4WMsTWQ%f#(`Tf*vBJ*!Fh5h>`J{&NVxbH-_@%s?J>BtwDsMNgbS_`c4KV_rFg z=S5%e@!vIod{@`W-sc_Axq^?4s6pT-98klkItR@{N&RDUi5v<_r7+$0C}M<`A`}lo zhM%D@J_%jqgebF$c6#O}XWz21_56y1<7dFVcOE^tOFZcA6 zE`f5EST9{+g$>H`TN>io%eJuY-=X~Dnu$+PLt0?`0^xeJlyV4q∋2 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 M9V6|mJ*Ptc2Wki#ApigX diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 413d845..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.304420,0.315460,0.300184 -2048.000000,0.235732,0.250502,0.903695 -4096.000000,0.650667,0.647369,3.362326 -6144.000000,0.937984,0.936868,7.363729 -8192.000000,1.094707,1.084745,13.023402 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 1e91c06498544063fd71810ee3c0b96fbc65a4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23768 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 z 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

    1b^ zr?x;3xb4_*3zt{pZC&1u;2CT7!tgj#7A(nC?d4=h60n0>E%$|hxX;C24_O#ep@hIp z0V(wm*ddOYxe_KPSLJzMe0oaM${4SWP^lmO3=@D@$ISS+q>RibkY6YG(F&F`WqtO>2PI;spboKNi4J1@5VQ@tM&oedf!SU^F zT|RM*WTX>*2fEwnLF@Fv>+AwGn}Hr6>=)Vyh2&9)G6yL2jLp6YwL>0n7;C+%xS^qa z3mK>I=}+Rl2YqQqw~xrrGNFPBti^f%(ZHYwM<5gJESV?R+AQUTo2d`S(|+vJb3!gL z)p{SMHLpqoQ$>O-v$OtM3xkR%`l)95d5(n^j9MTln928qw);;66ZB@7s1FfbWKCM5~M`Xw8@7!eT}*_d`{ zmG5xdmvQYGTy&c@Z~i8axmtG(k1~fb`mPTUya%mHVPeUA!&3ZFae5)AvUB5apu3{M z&$L*qw0HLnOQGVJ10EvQf3EJ@E=C^q3yzZ^dTR>ac#1~AH7qonF$XP>Zjp_r{GRcO zSmdbG9JiY&a80>(I?#G7jE?ryB4-F?8~4O4z8lvLgSCKKU&Us#yIW44Jc;N4jYS8C z+S;9jnW@p->(?`^U2*@3O`pg$e5xhIlhv&6>&vK@@B=y0iq;3WM1dyQ6kQM-t_{|6 zv%Km)Uj@(wN+LVa8#;_PF0JsY2|hT?!O-aXSTVqJJXI|bR4lc0OwaO=hsV79L|%(We7XYNAqI?uu&A=DJf-JulFhfPWfAW@(k@x&FC877*b=Y4 ztsoN=sO58??W1aooZdb&D+?^7+dt>I1G~q1oxhB4X*i>Ti1?x7qo1u8>_NfU2WBHh z?MMg=)q2N{U81|TDn#ws1kD#U3a_q$xP$YBm8F^LCq4r)s4P2FRa>V+o=&dAy--F6 z(dGasrUx`hZ`z?TUb{n2U;hgDXZHiafxkgpeQ8#Hp@a_c!~wvi8vO1#0EQk2vitd1 zK35m4c&>6P<4#*fS1f|PrHIq(@W`s95#g|e6WJE~d$6w~?TUvzMUhp#nv|3@M(!mb zBn%5rwgZ9@M!1RYCThB5?I;`>PoufR9oHnR8R#89V>Q>;fkx>LzzoCL77-QRJ6N4+ z1YKO%)rq0QIY*E=hvNB;az$f)dgvG7NY&%ZV>J>g5d8Vz7P*67O^@IxEtJo5ZJsq^ zdf*;0$lVo+tfn3c3`-g0Q3X`^b1_9*tZp*{=5NOs&{36y z(Iz*4Ti`%;H7MzA)A^W1dIzUEvZA7bd{_sBkMyurS<2w4_Cs@|&d$yX`+R-pIlJDm zA7kzzinx=%0?5?ErgQ6VkhhvCZs;AP^gpcW1WMk4oi;i)w(p_oW9sB^JKIiN13--v z{kbAZ3D3^YZ$)WSAZ=t6;DKMNop3cKckrdvjtNHsgf%ra#i9kQy>Fg>ue-0$5df$L zPx}$edvDI7m)|bvnM%P3;DF!JXosyD%*+4%*DS<`=3YO6(o(?y8bxXkQvePD;7 zBKp4`u>?D4YVETHcoJRD7#NC=&E4A#ITNAGI|( zd9r@6BK%S4mBhA^CACgtQ?&-9`Sbr9gE(8OFQA!y6;^I^ScBhxY zknmLkM1=!h5gfNl-YDe&{%pr5EMF?9;o<``7gW6m!>U2qOR=o9W+ClYi%VVY0z>!NDDkwJcs8{TzPvA*T;HVn7@_pumC$CkX|>0(AGrbeaKz zl&A=j($e+sc?iuxn_8SyTF>fr&IMf~yM?V;rB!z_8eaC{D!xJJeg zSnP|FXdE;i3GfYjh;%uCTM2?1#kK~ZT?xh9|MTU3z8~&>9v@_}_KG>jc*i^5G3E@ptENOjdVv&$LQ$wFD`=olxV|V9 z&Nwk49J%&;cp83)J1J^A-M2M&ay51^L#Y}&*;&~-Sv@sjbun{rd}?bW#3#-t$iw=? z$;r-9f}h{|e@@`Db+F*?IlsyV7a_4z)^S9ksEm<+IG<#*o}y4XWhx4C58RShMqJ&_ z&W!%pSTpbONWbWZN>`5NV8u1T2@h_mCv_-5g?8iTjLV_#UAJoXe?J-Z-o%SQ@!oXT zS%v4cnab4oCZ9+$IVIOvkYb_yKIXtzp2Jb-DeCmrVmCw*1OvJ zzQ})KcnPkf;gfU^bryaUp8x-U{r}KtY<#Qm-E5n2D6}1uX=rG$6JykjW5-}Hb9Dmb z;Y^Y@Jw2slWVV;d?xU)R54Km>+1TnAuPP`gOye#O76*NKnEgmU@X}cn{|#+zdLwV& zhQ>zTyqoa%4#h{0E|8FrtghKhYQT318fzvdCP;nZ(lf78sK$!s>Pivoc+G_hg&za2 zaNi-nw$IboX_(U!y1Tni&&}!Thq~cp^@QZ-=jTS~qR~-dSt#vL2M33NS|8c-=g(`# zVGJ&ciN%+di5(st%rZSaO-)b# z#90M{(V+Z%@GjZcXHNFtV7~8v-JMgIjQ~mjJ7n{G3l{NS6iEkg^yQ1yDt9uthh)wT%P3BtKHof6cw6AooIr~R>o?_j&^(0 zWzGJ4x@R>~(K~YP!i7a|D|*7cy}g%#f#;s`Tf&&HUWj0l{1L--e}1%Dvi5kN+j*() zTTb3mer+n({g06;DecMPj`YG$kT;gvXgV`j^*TA3QGXEz^H#uf)OTJHkv?hoW!z3| z7+ZU^&0uV7?71`IDr`HN?CXnq%cG-VO6>M;{`Z|Ek=OY(`@cr;N}l}2phRqjmBC_2 zNJ%jq9DxUGwP{n$5tW9O@8;GH}t_`>7k=?N(=DA?Gn>R8H@|A0wZA9n1Vn3`$~ zq+saSO&+Oq?a9>@y&*48LPeG3v9o%()o-ZSmmuvS!mC?yQ9vM)l=g}pwp}#M-eawL zhdC-LO7Zy(JY3x1*RMZ3-&!Q67w`oe-h^)z!xQcQTabVDZ1Jgd_O)k!#s@9ZW>zcL zIHaVK;n_}d4)`#W?M@^k-5;3iuA0&lo-a2$38CC3<14hJ4yPCNk2824l6cLMhL(1Q z(#?pH$ab(O;Okf6k9QJquRA#jFDxuLE&d7V%hfG*n7O5)p;5M0b3iZUCU8GX%~{rG zq9LH^`}ab-i5o7<19B0}(og<=iMo>}lLGTI+m>*DdE3Bkf&lsFy*oj~S9`cA)OYUe z*`{>)peH>aDPS(1MUD1Gd)zgAzHsU0>kHq(R=m^>crcT>heyWEl*)JTvw9YvRYl+$ zo&VL+&g$ejNEOHIGbzS)%yy|L7p!hQ!sjq!z$`sI9iM<8DkVkL$||SQ>+jd6re zUi(frZnQ~os3j}+=jkU17~{rrYZ0@$uoF1%>bD&!1OO zu?YzwX=yAlG<@Hl^ta}lk0H3 zP^Z+Cw?QJL57%A1CtdGwzz(gzI^Oc?7TJtc)UG%qPOYM@ZqfVY;h!8G?AMtwPb>ut z>h$a^+<3RY_W0qlif~p%q>mvQZ5x$DmgYk#?cv{Otmf^lsWp>w7S(#Uz)+w$P3(Aw z`)$M0+n8v1Jr%6vj8A#vMBR)7PFJmuPlfB+s=+xH7OHqU#XSAWlFDlPsUL^yjZ}By z1=0slZhZd!{>LsUE-QaGR!YY}*c7Jy)xSy`2M z9o-*pZ)|Lc&j~qaWMqVdhs$I+r>JozBqV(2%Qmc)@z`EA?o5?lHK=P(5_SAHfA50u z6I48#1I*yRg`T-r`SvhULT>9ud9}ySJ-xi#|NT}9tt~p#A6&ySw&e)Y1 zGC1WL$o@JLe}Tt{>mInX5kLk&VC)Mbsy9hVxAP6EiOI>QQ$1FV0hD?4$|AuyA}d!b zTBQ#?(#acH#l;h*r%l1^+yKcEBwhJNDxA4pjsPvXKiy*o?D!78u3czC;5z0ds%7Z) z&0}|KAuDZmDnfP^eww$w<+U0viy}G0kzA51V*OXZqJuHjeKrAGA>j1-!Zk7PLow`J z=iGSx3)A@rqG)v8GR|-z9-kdbspAFiyO>YjNBj3mZS=tu<-Ui~>Qp#!)z{Y}M%)-g z)dQw)Q@J7{;WS^@6mo`tf2+H@J2)(i9UyamYYDsA$}eQzMt?J$QD=FdGUx^PdFZE4 zm-8wXuSmEoE4L?J+xyp}KC-0e*nZ9PcyG@0Xsch?`ftqk%22V%_fV5k*O^$YO~eMK zqt!QmFxV#FZ@2#YHQndr7*PC0C@uG90~vqvNqAVWTL`Z%D`%En&7*5e&kD~38Pf;$ zD#mC%efktad}LzcEjKr}C^H=$or{+)Ma9P}8yUS*qzx7Awz#cO^*x-)?mKPQC$#6@ zB?ZOU_NCO7gCV{@c$Xn&zTL&D7w@d?+G8txG+ZE_X8kgli~&max}SM_thhBw{YeJ12NbK$JhLs0Gfp z8&BNG=8lT~uS4gB2>Wth)W47`mD^$bUqL?Ojy?=7IfF>s<5Et{q>6#}`TZ@ShyzE7 z+`OBlmrWT1cz0Mdr*AwOpF$lrf_#5G-w33)6qcKe}PpW1_stTgXm zpYCNKkX6YmEd1waK!6s=JC$oPVjHxq%*xWf=akiDPv-FPeb+)wVNwE@NnD2*}#<^QSSy`|o|l zK+Sh*stz|>g)RGD)z#Hus#A=%9pL5S5QYRCT&TtzY-_N_OVZHi=o)Z7au%6n2AeWJ zK-sCex#kMzrTMOOJgWLrOdBLM)p|T?v>_%HcS9Rqc%hGgh-m^cxFNnfqItBQ? z{+fJ!UMSG#aEj$SA5hs#FzL(7Rxm{)D}cc4+}vRcJy~ZQFi~pBVo@-uSB)F+uW03w zUw`o6>={nArUfUBd;{qUr-g>YJ#42qYIb^h9e^$xFa}6ur?$GEabuu;D{pDp92u?= z1X7%qj*cHQ4uXJ$fP7y}42xNJdG#y)NKYSvg+xV0*5&9FmmO^nxlaVpJ^B5fz_xnp z?SVUx1}SS@+nPNNcBOFB?d3te+_6NAhMG9zY(j0IvCO&7>2LCNvd6pZ5Y;cq$S?;r z*29H{TOAx7&&zm<0k~r>UVOQ`>$VC$>e?BZtP^&Qx8pz@W^D+ac^>k~lJX&4#XUXq+~1EgN){?JOW z)~YUh)C5zeU24OG&{~9obZ4qq42v2Xj$x!<3JMDT$<>Vm3XCfAKy}WB@z;!}2QizB zR=JbvTYv5&M`08M zoaXNy?{)eVJ?s6Vk-w5DKh~jh{rbdIlC4PTgySvGv2RQ7e@Sq%U6TIjNh2#;i@{O` z;q`}%aU31&Agp}V3_|{DbA8{`3Zy*qQ8Jk<_2mjb=|cJbc+DULK#s(Dp_-eykG>)BT0Wa-X(y3# zCs}Oc{j+muE^f*ocf+xn*7h^9nV#!^*~YQ4iHV^AojZqTIVB~NzJC3Ri9Y)<<0b`A z%{s^z#NF0e%gf9EE%t`h)m>jLpJN6-(bNz?=DuD}RKAo~Iox~_YbNc(dFfIBaF*lU zDJq$hLr0n2aXc^*&E*Q`#Xsq~r8fVT`Xesgep}#u^nA4ntM=u==SlC5GwM?HFdOH^ z>{uB@tj0^nyb)7kl$!Bvzs*e|HDFjFVPP4-KM`~yVs`Tt9d(;}wWOYKHDI z-nfAa=}DF}KfH2g=0%z_XGqA&c?!MIzk$f)Y-2mSYNUm&h_SQv=fk@;wEshY&K?|D z(;0Y>kC(T!w|_vgQ;-XIv4UNH)N3Z zL)N8*=Is}1_GTF%;Dd5O*jB811medPT?K_Eb~B5{bosk>w0TVmmP=7#Q{OoKavpsP zg)sFyM@I<7?7eFY#P$cm9V%V%qbA`AZJ8B{Q>$)|_dnJ|CU=Yx<`!tm57KdVgwYw57?(1z5izl&kd~cRHu<+Mn0cU#$&M6_IA{q)H_~4AtYK11iWR zE-tRvcL45VFOjl5R-5+kpA%@2xAKU=pzQbdx^fwE^vTYjpEWaVlKF%8#4nQCQDU#+ z*732q?)B>%OZ&XjYZpUR1Fo3U)dhO^>f(QU1?P+6Wb2!sf zUgfF@kWHu6;RN7Zh(J-{vhoX1&ivjC$boz|WjJukzu%l2-itUfJ)q=328$R%w7QHj z7?}2bZ5(HNb;ME;Sh&NvG*8?h zD!LBt!@=lA0jKh2vRFVW1qFOSDwrTTowu>EiW(X;At537sS=t?6G+PZtUs?EQbtfh zL+_=^>S9cC`D=WKY=ds|`O$K-Vj31hbL>mjY%A|ly(?o9cX$arC{Qu%-0#B2O4+TD zFwtn1@?E@Gx79x+dKjX@R6E&MYHO&Or}vXRLh44T%}5TP5~zaO88-`_UsF(mK%ouk z*RXj<@>6FL5J(#+SpwyQ+KRn!u4sNOVcsA=O~W=c1_wc2q&yFz0C@U_+xh zB8g3aU%mNI<=zEcJ~N4*k4}YEhddJ#qk3E{^G2M(Gv{lQDu3{_Zvh`h0dpxRquCH4 zNc-&H86Vv8nUe9cCnF;{L@cc^H;ygTTbisM6;soTT%0zu42+Dgrlvh=Ly|cg1>l>k z5ItL3l#{bY$sZ};7dPiyYGFrfc7`9r9X^8we9y{?$5#?RH0C9owF9s}{UFVo^!)kt zqaC}Q5ydr0evRum1!u(>DZwZ{J@`xmAsdu(gSyU6b!i`rgJv{`T(NmqWobiNasudS zKneD{&!M9K!SFOs*{M+OMyv#X9pk90&3;E{ndr zYw~HU*I4OpNuLVr$~Jt%E)2`VB(zuRe2yPGD{3$UXeuaVGHzgBJnb1@%r^e_1aN)x zzs_%q)oN%6sOT!z6FW_j-NYJw=?r|m4oHX29#5M?JJFb~%8;_lc1a$A z>!!vLH}*f-L{!rF_4N?kMz1&j=gh=w##_&bNsB6IHqJo;iAHZ+uRXCbSj)d|R}g*> z{U!rR?kA1GTKM$e=}Tg*45QwBWHW;JK{W-MqQ85CQuTA>f-ROFD4)X(C2+J`P>BGs z0~jN%jtxCw#?9A=g#7LuD`*}qAZ_GwX+li7h(-%oP#*5GH+=`#c4N<{_;30vI_6nC zFvDN9j+vr0uMbvk)+nhY z;1X}5qZbAWGb(v87=MTjg&+(H$?*R-4}|ZiXjh)o;}f&1TfEgoX>}eI9UYDHNw3@? zY8!Z4WgM-=;qC?q9A#NAU%u4Hy|19KJSBVLmtPw=ms(swQ;4TaSVy+ibVeQ2n8j4c zXHE%)M)-%Uq@6ti>;)hFO8iFp$+j%zv191Y_X9&#iX-ItsEyMGi1C zvZyE=CW$&cs_Qm+;G`o1S5X`s95f6Jtq{&etbz0J0D}j0L9gdyU zk5xlDbd^OphDOVVZ8t`n$gq0NZI`;3gwnzD4#Hh4x@_A_qVbvoqfsfh8QSb@bme`dPRWJm=eIuM3ckPo z=RWd+bKm}B+=(2jZMro8e5bDV;UYg3A?3?xzFTaQ=u=vA>*xG$fv0cW>*toO;A&i% zh^=ef0wJ}PKd9d@$QN~b^f5w#ZmH-o^5}j%I0&8lt)v0|iGQ?7cDVa^qN*Xy4dcaw zoYIn~zuxI{qdC05$PeZvIU&#&IjlVM%dYofWQ-~E0Ve`rr^oI_x+j(Xc|c6@t>QwI zP!DwhP%lLRa_y=zyU}K%_wRGEm8SJhy;<+2MXH}=o?!kSr-s3Q9Xa>Et%I>tl0} zaUutpX;F0B)|v04c=WZPf+or_>lCK2UwvfD^a8M?J{qH^-%AdvJ@yx|hMcXX?JL}t zECX@mC~Uzq+T{^4HBMknao%Vy+tWwvkdNaNuuXMO8zZF!);QhppG&+L)?3F4v4G6_ z?OU)O&nfNO6y;F88gX!2tpslVCLI|?hjY#033MI?-$-SS{wzLIxD|Lh79AKK^0z#G z3q8gy)X3PLKdmzQWVl$<3;kHUqHrtx^fWd5W%^+^_8dc7=S!Fm@~6|6EKjAT0ZFa6BpGD(@W~sKUBy^g>;5Jx{0c>oejwcVdaZX?F()~Tjq^2(nK}Zy zR-d2VcbqSUkj;(e@<3kJM3Rz7>QG>L0H2>fHV^Y<<1uovd8hX+?v{Y07fw{=bvcTFxH$fKmS)yaRJ?FGQ>8H zi1LuELv4q!4l;V3B2yB;@{+QvXmmL}pVq|GuG{=jKMagithEP9=@q>k6s&=zHG&L~ zmex5?_;{f=yZ?MzG*rD@TuMA-RO#N(pf@i29FvHS5})C0IGxnsxgvNei!`qvN-SPY zug(i;7n@VS%T0keXaaRI3(t=Kl{Oa!2Op-~%Ye*@{%YnE^>@K%X9TRC|Fwh+6sWaP z*E_k@lDSlmaDcu@$P{u1=Faxx#YaY7fA;Lk1VKMNj8vQhPS?6UoYTZ1QzTj17m_{a4yT* z0Jb*)pmm^xm0z_<>gD{kAXvG4b1|Fx44&(V8Mw+!5L_22A>UV*{tnr+ii!%Gj7(~( zw8zzFe=bAaz4Ix<;*E3Y!oDK2u8*n{Q`~t4CCpqb|BkGuP}(&AaA?qlZ(9jYj!WGu zOGQUfki>;%N_Fj&z77H;%RIzx_|2seHQwDlBhFG%P5uhzQ(Y+>c+35NSNTEEno~kt zRl}xC&#slX;0bzp)S6HZE$)L5iztW2W}?;d=BiHHG#M~c4R6Hrl*_v-MK4~GoB9En z<$n$ZH|v&lRkbSNB&C*dX_z2j)Re*d2tP$a?qEAI5qKtM^fU#PO6(yqHojY3v3FmA zFSP?HBSiG&G399EY;4Q|cXQbIXQ%>cgW65Pi=1>F{a*;=lNI?fq}h z2$DpAegwN}AfY6Jh6Z^8-HZX)F8+L^xv9)vXT6uCH8GyC%j-4Qa}Q$b&^)jZGqRcb~m> zOb&Uq!m^5d9gOowh*W>SrQhe=ItDB@YjQ|)GQPuf3;If$6VGDCB7*iqNN|hz7j1OS-Vdqmd??Fgqoag2;+gA!tVPGf;9rMU63f1v ziBRr5JAPT0WqN3;(2NC{;=5h>_(GO(y?;Z=ZT^S5XEvOed+^*EDMSU}RXFa%BWg7< zCFMuRk5^|vs(S}y@th_Aan|!CUV0(I_Zh|qF4!#aT^N#1nFAgq<%h!LHArReq)5<0 z^>$|y(NRG#>}Vhb3FE=e2ocngy$-G%hQx4EHm>JL3V!_fk>(+*&i1AS$8)N>1H&ALj=J;q0Xczy? zEr^nLjt>m!1yG~jL(5xu0kTn>Est@>p}O(epjrYX=Eg>eOYj^oWlvrX>tQn^WW1cb z;G|!0k}nS4?(S5C%B@@PL4_FxnL=U7mj+w~*x}t;nPC^iNZn@znRXDR{$OWq4(Oi+ zu-l6lFLqUXxXyN@WHZa5(P36YgpGj-&3k_0!$Z}TfnJKgBqR3u8L6qSLzy{2)Rq~_ z_8%e8kTZ%!Leb6caMwP&^$fZ&_7!>A{xi3gYtTG_%;B5qdpPT+GBPq^jFeCwmX#e_ zbbv_9DMoMboaFCUs0^J!uT9*;5dh|ngdU{Op$F9}L}`I;ha!(18)#F>g#gyHG&6nu z)~yN8e1r9=2)phS3B@Kdw>A}4JR(Y{x5_}y?*~%+CcM!7^cw`(tpJa&W6qXsX)3D+ zrFr{DQbWnAwJ0>0Zatn%?qGNKZtkONpxFgZ@npUA0wL5)yLWKm#v9C}>hUh#qmq}) zR`Ied2uH(2bpxrTTEwY>3RvfbL*SE65A!Jvy$GVBWyrx!q`C?>IiR+pHq8>wKj+m76{k@Ev5TbuA76G(0ap%|7o=}Wb z$emILWu47&I1I@G;;_cY@;Fd7`Il~f%_Tm^Ve>pj1@=@% zdU}kI243#gto8PSN{`nMs3PK1Gcy~Q0)coS>DnOF86W3?1C&?&5W*gMi23L@)Qn1O zMjmBa50zLy$Tt{yj|@vk;p47~Z|)wYp|r;1*MSP5)lG(K@mQYEvw82$&_VtQx|C$R z;A29hqvi!6MNx$?G|8PiXKpZ+Z+5$EfdgzCt^RoEF$xD!j8lQ`g4_wSi$QWLr2lAc zZiyZjy>YR;JTl7IV3eROeGJI>PH71rT0H|&B%->o4^)xCZlUr)?>t-q#DZAbrj8Uc z-S&@5HUuFsk6si%ubCsjV*3}rJyAzDBG?VIQZ$;stANdOgP^HdKI0}tJxppx38x=~ zc8frq{2J1s650~y#mse1%-l_gTbYcB0yxaii7Q;LsUK2hZwg1)hw}NBmdjGvqJroW zTcRWbuNw+dzDPj7HK=8nkZwCt(I5g(R`>=|5M{0_ViW9_2n@V>;p+-_keT_=GU0n( z$f%7zUTW}v4qmcaGr(4O6JXdUK4*a{R`fiK>nzOwHu9<9lO6g3qcWEQD@iKoA?w zj7OAcap->@AJ|dTX`hDP%UJG-A=~z7nG$PcDxw^b1T-oPN;Y>A@l}&_l#cjaMG2?yK`5%Hpm_>Qje&zVy9Q1}LWKJU~Z?azm6?li#u~^mCTgbzLV;GSsjK0X(*l$SJ(fqysCCT`j ztv)oEUP2mNre9Wjq=Q4Ri0m$KB2U64jXX7H(|5V0zPrU75Av*l!D2or#rdJpx{l>- zX)-di!p>Kwr>~o4#y$)Qj^W!vrLIGHXUa~DUc@TC_X8M#in{39yr6@rv94VKc#@m! z77CYJD{nf*bu=A%$Dq3wWA+48$=VYb1Tc5yJ6|g>=%^y&1LivD6%O(ydqt09J@iN`A~=}V zN*ezVs96CNv_NEbS6i~MumD21lB$0DHg|5fLgrbi1D;nG%nW8{iaYBjAjF~3mIEb3 zb`adjpVlQLp7JN=#1hE8`JGO^O zy?_BG9uPwX1_anIe26>u6uN)dI5=j%x}dpyHnHvNrS=)_%VWB>2*?D_6|4ZZPL3q2 zVPB2Oy%>+x0<}b;sd!+UzV6Mt$HWR!t@SSoo}STje2u^uXU|S4_;1tg%q@(OD!__9n(WCXohLWZH zASxN(aigV0fFDhGHk0yay=`Y?`f@>5MWa3LqRvKL{br0e>@At2eQ!X-$k$yfqTir6 zj}MKO{B35Wka_25PImn}U1Tglu|<+K8(Y`c&mYV}f(H=gCgw|Tc01c>C~fM$?Pr15#>mkn`RrF)=|<*1L-py6)U|jfHlhj6bIVkuSN_ero(ncAL<1vX=q%O(BaL zXV6?!aLH-g^Mungv>o6p_=Gp~7^mlSwc`G3y2P{1T2Cto^9?2YTgGb!@xmm@YOS}< zfQF2O9E;dwE9SMG)yl{e{Q+hsYXroQHhaaUc7gHAwQ-*lZmXp}iXY+E)_NJJjr6VI z6&;+;6$F>5rjk=h8Kn+Zf-9gcSkm5edVoN_hX{`hLgdP~xs%s^<4sOY>@T$+Y=K(u zioAnrt~SomK~kLc-XvKuF9!F`8;Ep&|03iUw19yJ%EURkM3OFb^)K$G`w!*;<(NEz zKx%>qQdX;|yMwWAW8kcphwCa2xeq95K%dVR`iVP^Zx6xzLFueTx%kNNr06RTEL{nP znWg*H8FX}z{_LUSaUjDxRR+i}rLwg^mIs_}YRxgEavjF;_MR2=CWv#;DZ*!@%+7{o z0P62*P-y=9xfhm)h#+4cDy1voJ`4#~#v!;K<-o&F^-(RLnT6jfEYyFn*tnnXlWzZ) zUtrA9;E$P%Lq!Dp{{%gDp6`gPjpKmq`}Qr&FS8oX-Au-x?E!{90UuS{p+j=~_y8K6 z9p~X`PG#PhGm@@14z_1=hg??t*X@drQe1g>Zv&NQ0|iq4PV$ss3w;NYxNLtBEm`uI$ou5KE{ zF541H-!M9UbHICOQsZw+5{-a1L#TyHbocb+@~K*_?%LA}Hb^Dy4B3(mE%gd{;DB7s z7uYC3x=%M<=ZA-odq}k%d&QG)Cj6f&CmmztB?p|VLdF{=WykvsC0Yi4b=N_(JLH0} zC_gqPL6R8^;yw!M3}O1I|E<&U^5))Iq*-&B4tC#r8*>(0#22S$QX+d;@C_U$c&BKK zdi^KVok8@<0J4n~WxwYMc^|p~v=86EapT5$Ew0hYY44p+m!JH`rJ*reGgyNDK=eTu z^*RY2Avu_E&EubMEOjdPuG8PcIBtJSBe-Kx-DE1dw%x$R#Aln7$~S@<(8lr~y@o=|CfE4>Rp@Tb2JLJ5fdt7kW}a1pYuurJ{`Y#H zZh@!xpD$)57N+r~HVEn2V1(?zo$8&k%EpG@!|d@cw)m?b3Z%uf0kajPB5>ce5Qw=^ zr@H@Gp5PX6;Q=P}>ilDUz(>qnLm#9Gdc=*sluSmAgv4arRgaa5&1Ww{y>I~-oC75# zGf$OAP$LeN%#*-ssFOn2QkcF0pnv!p(EeF3Bq*dq`~UoUvq8f`z#UzF7jV^wU786j zX|}CFB&%nc1gY>u04Avwx$=`Ukyg6UmQb)zj(HJ9bLeQk1=I=Y2K3}CKk<$iYOZ>R zm0XLrE-bV=+B$_+jW=ge-}_wF0z+xj$2)w~rHn^wOO>cBm*8$(s!;SEx*&bwS%2Wq zXtJTaDjI;`zon%)fFMyCS*Xh;v~)z}L~616H;cb+jNT2O~j7BM)jS z+l$w1tUAVA(+0Q4UyNs~7eoC>{2tZ27zW!~3e}_rc`Dix0>VVs&CA3uVV*a4U<5N} z=ICTAy<)lLT}qszv{g}0yYlMN+`1o+_r zNg<}J{ylp7itEw&5)Y6GyvrX zlO@ggtKX|w)>@*>lWJ?lzb2(nw7!+=&olQ}8?{@ju6R-$oPsPb^QP2s*D;;5h>ne$ zNiD(_jjRM3!>TE}@w(=TDR0jbk)SDs1M#o1vmzZ9l?1ZY_Y9b)XA^w}=nm7#jS{{GHb?@@;(5AN>?>sWm1UXt9cer}Ay$G+i(L2FM8 zu&(e1LH8=jK*b)AJKOH8yHdT`^0@szFGbBQ<2$HmSEDZ! zpY&wa&4f)j__w-utFyH1d>8N>UI}a^VjufClRx~*XWpKXl4vMP=GXCeeU+*iuV*ev z&}2ToyZY#Gb9(47<@Q?gulwx&3!?=dB()*$^9{spn-H+AR*W-C+mixYjhkNdz}EnIxYJUS)rwx$hbg7~26%xq*zl9HxP zM@VzI>0HA7a4faBH<$VDFKiHd$he(cz)AoCa}M6%gn6A{GN*T{aCzv{utU5nwpY{A z7*M*EeiObo)6Utr&V92J-gq_SC~>$UZAKbCq-t7BKu=$`IgzhJHQ}&#H@($T4EL%4 z`HMfaCl?)cE%o?V#LzP2jUiFCHvKL97qrRa_-i&8NXi%N$;m-;T*+M%?9L!r^x_VW zPcdJcj-ZM<=!q11DQvM}YxCi?z~}xZ&4=HOrP*Q zE+p@`#I5O&uyKZOsnp{6W;Xgn#t4sD-5w+gmstba}|Qt;TF9X9x)sSI%(M`J7l9ymPNZSz5+ya!C#y zdcq=v0rn~PYRSm9b(;N9>MBqX zk$%o1gZ@->ezf*V`5xb<+MT`CX2QL^GqPkHaeKuo5jqN@1J^YT&iUkJx6Z1sa%BFs zeXz2XEct2WxRZP{LTS=LT!5UYj4>;Sb;k*#cQhsVd{Q^go?BqAc zF)2|eHf(S4x7~`+>{JZldS5@(x!tX-m!8Md96gB|V;%i_4Puc1RMx(e@X zS;e15No__*;_NQd2T~^npR=t&; z3`>zU3JiR$kKngZs7RZddOZHmd19SwI6R^!pfhAe!c%W|mwwn&>#A5AYn6>6z0V3Z z!zSbL0~INBL4?GfwO4$3O;12X1R0AVUQlB|<3dAoLPVqS_|y{Mz{J!Nu9D2X*sJUI zi9_wb{;|ojBzwDy9c>B%2-T2nFZ>Z{6c|1U=bhB;!qj}ftkem(R+{@#nu`sajo zA3Lmi(Q?Jd{^Anxnri+Jtu>L4E4&Qzi#tpJx{Tt}t(NMqqz=O9rbhlTwB#SlI_Q@d z6v=u@k}Uc(o_ShIm-laL?}WE1fAm?)Nn7%uJ@>`lnRxDmX|HTjt^I5X(+3jyE1D#E zioI8IiT_btWY4<9jm0Cz=GL{Vu5xspSN63>j5i6<=H@$@8Tlp%zcu9MJuDTy3@ zzZ$>g!Sij-Y4lA^4@`$z?(FPKYc}wgn-561J4mS8a>v`0zbA+&5v+X|!5lEyAHO1M z(A~@QH_wuY&BEK65?__8-(@Bv!miAgxm6p^- zu5eVae9LtSe3+=;;_|)cGtoN6t<{j)V<*vv!gbz=IgJP*lf|6Emgd_HXLo1ll<)B9 zsaI(kqz?Az>IE|h)JfG7wUIfir;@vlq;z^wF;6JZqWi4XvJM`qcCHaHx!c+5eyV6l z9{WomGE8u7j&?iHEU0cLKcVrhMapJahiDS+Z^?G+WlKWIyykoM405k)*}XI9@OQ;ktekuYu88CB6TWf2 z80s}-5)$I~qg|+NWuLIX*_yzU+z0pQkoX^#|0==mUMew#;tTbeU$cXoMu7`2i0V7@ z=T9pC{An;K6biV^FP(LL`n`MW&d&F{uqu6K3(sk{U@%E*Je1pL&mmrh36=<2-Bt^n zOA`$mt#B^>sK%v3MAeYybK}k{cXOt?8n5*RGR`2W7kEVaj8eqS-5qwxXVxRM0wYQVMIeyn3m^z&cNj&*DG+A|RskpAhToPvgYz{oe;uhH_jH z2&F!u#`VH$Ur^|b^Eg(pbCi{7ExI2^B!;)XwXyZLm``zf`Pb5pt4cR@!Ry0gNhoka z3ygd@fxHmlXX+ak>bqq&R#p?d15J*Qm|-11PCO_cVV&^}!wcGU$4;$?-Jo;;kFkAK z^O7J<ux%*57{~1z?HyF+Tt*q-tM8$X zwv*h+$CzBNE4&=so=uufh=7i_lVh#2)nBpZ1DD0TZ{N~Bgs^Y>}Dv?<~0q}{CX8*?dz{WmpsGh*{@lP`lBuT5-4+q_+N ztx}HAvzPU{5l-{aLWuS~Zs>MdN;g(>cpnTH~9TQahvEhjux76!oyP z%DMYoO1uS%FlB+3ZC=1p^n_ecvhCv+L%AjPyGNXiV!`CEE*1sy%Vn&xau8m5=%gXY zQx$Jec024}OTccxJUuLD<$8e~bHbbOin>HXoSgCB!{kYa)JS5!et~Onalc=_f_W>}0=NFr^TQB7Iw&U=D_sV!bQ5;V;%XOfVi)T()6 z<1}WrzPcz>`^o3;Q;U2Fd5zCq?liPl=oJVQ(UF>I@2bSUJZR6lWmWgI@sk9fnnIHh zs7lhl%ul;!Uc}Q9o=7_TO&IQq6*oNX%$_%VZLiN6of@rn(}vKttt|GaRx2HwA{qSD zljMB)d8?tJx2j9W$5%4lIX{x4YMtI#R%@57H>MX%5zhB9B&rGxm5iW-YNSh<{{6(U zAQW@_y!$}thCCzw0fFO_?Z=tcWr>eOJ2DNL&890H2Fpt>Fc^4}=n>%jV%a^YB=M{@ zCV06fYSADfAHX~A!)VB2h<(+Q=xsW-`L7!5?_r2>fsfFdxBDvnat&1IGN}~ z*N3<7fmZf{3-$a{oPob>jbCym=e-v#^b)`>N3A2fVRu zRpi}{-Ge2)^~a{f*`B_2@n;W{yG5fHOYqndcTU^{_KIZk+ zk{KI#hrT^0jn1ERK0;$l@W9)Z%6p@pSXJ1;M9#>F6%;O5FHWl&2kHw(d&DeTDb{r@WMg9zjPcnIaTJ}w6EyRebW z&;MzD#)ycN44jtbsj2Utn}L@Pj=385Noekzp9| z`~25+rE+^jX1QX`WyE$p$4iv_#pC91Xv2<(h>(s5yiYZ*xW2KG4huj(6s@eU+qIs& z&{jOi^D1RnsXW>q$vdD(Enah3+2c0q9N>nVnmh(c4L%|nsCi>(Fm!|U*(Aio1r;$@ zv%LCihF))vcpupG9}#-2RdOOq+UdDS0sQ}EAE-JFXqb`h{${BK`%u`6F}5XM%WiRK z6hH>DgF##{OOjUBdzfnpx) zj1tg2`mOkathW@hVGQivfpneqsEQWCs%*>>vWdx)E>@)1g@R(HPuF$^+TyPib*zq5 z!b)5+Fj_>IZf5p)RaI4mS>k#0HMo_p@)h({BI|5GB)aXf)A0<}QwrM*4|w_YfTdtz zU3__*$C5YQ+}>PT^Msv%)qsF&Qt9f+{O=5SC&iDj_~}0ja|-N3#s+3!(_2E|SU#O^H?aj7Gd)`YaFLMAr#h zT&jb&GvewClejH(jCRp!EiMNRT+-6VO$+{iuf4UkH9<#2vhR6|^gf{B*2YJlMZFmx z7ncH?uzCkJ*BtpF)l5NYXFy;%sxPf##%aJT9qHkobp;6_Mco(MYN?4wB_Zw%AuoC? z1>~w8Lkd6o{i?yy{?Ke}XvR`!Ox=79E=u8G#FPsij`2K1D@!z}no{$j$+ndV;xCs; z!$g~G!Cuj+X*YcC$ok!u`=89jUuMitwL%OMV8QnMQ`t=2bvqUL$Vy~ssD;fmiLZ>tY-SQ`D z?6*Tzn75kn7EB;!M3wL4w=_!DI~TYc922#+4inuS%p-^yiBHXZFsHK2T$qLJ5_JOL z0uSoz58v}Sgv5M^%-2%Nlqdt&Ap#54j8q&3Xo5IqpEq8Wibhmivvun(B0#@`gs(qz zJ8w2V1f(UPUVIUglp?p9o3LQFK{8sqTgjz=LD}eq@=syR4y`X-mn{oPwBJ4X4d6tybJK4-GNZ?4E3nl6JX}CrG8X=i z*MN27CoVR`MvT3h(eD0lB025u;Yca8sM}-4*Ted#&C`r6CK6Re<-p=sorM=cZ-TVb ztDED2^01K8s!=S8yK82{>-h203n&)L>@qi&pbH!Z+y<+?7gtJdxZWWq9>i^Vb&+F* zZ>tdtu5iQ}5Itqp+2%*v^EYe`0ju8s0Hcowj)x3-(z^4`5E6r6`Mj7Ayf;WHjc+8*eM_qDST16*5 zC0v9;;3%}1J567|b3a{9O+|3#H>h~LT_^-6|Faw3Z=T*KsZG!vP{&tGyu8RJK0^U# zbXkYX=7MWl%9v46mHBSfzw_B(Une(+*SGrrLTbQ-h95H#Kp0@JOGR%cCLRK~f$Pn& zDLH#UF1H(ebd4V~XRk-4f_8H97eqh8C=J$l+}tsGUWwUCqd!&DDXRgYxG*=POz4HK zQehdAATy4Ay(Mz9JL+2{RK8I!e!AGppNoi+@snUUv^#ikjiqHKfLdG$ECJ4fxKCh{ z*ZvWmZk1I`MrWZDSA3k~t_9E?GPg=RiK^b%+#Jrf2C}dXt@aA(o4aZVZ#!JsIhB>$*$FaaPHd0&O*l1dvHe=gSr;ew zM;RMP?*+J}Qo@^wZ*6F(tuOF93s)uPoLVC#SIn8(__q);19_q03(>q5)keV-mO}ap zEQ9!!dT4_RmTw_M(%wPcock{j5G4f-^uVqrEKXI)sm7(G=rNe-)-mIENC6=ZUvtvb z;#7_6Y(qmi`2`J2^l7yiw`lnMN1iYJ3!sCFaA3be0G()dh9!%1xIBDATR=vhgtcCCDbM9LHu`EAu+)k<7;il>cr<`#Xr5{25`b^qeg{g1^eb09_3?rVkMFal zM<*t>0hSgRBoj#A0ymTb(9Hnm)U)gXOcQ7}7@$*0gT~loefkG_jS>l&=8%72x!T)Z zFs-u7+mp0Fh{mLFt-pcx^)tnJfu7k(KT5$N@%yWx$tg;lE7^J zT{{R7rhpKAxMT?(05`8y=#LFMC^^^ICh z55NiJ`L?1qSd{ZnyjcJ}I+S=a@(^~4H@^CPT$yiJ0A;*uM%kWsQFp}(U-T6NTtaLC zmdWAyj;OwB**usCPQM#TY-|!80H7Jb{I;pI_e6r2%JP7GSWIC`jO*Sg)K;4|HS6y< zd&dE4Y>by}caGn?y#+o2ldQneA+_|zcAbG+qDZg~l9R<9L>K#RIEH@z9Ut=le5j%$ z%)S9SYGk$;0@!QB0tO}~Q8fLI$c#$bEO>h!4Nn(dE1>5vsI0NFGE77xPs5oDcF29G zJyG(z6_<8J;_UXG7-R#^7y)5m0L8qfNMTnX_>nSu!MOy@Lx*bqU?zq_Fls>EjgLsO zI2;;EpAb@q6CVML7$(5UC{Dme2@Ygzo~^q2R{xoy0&|f3%3i;I9G=Lq@@o46mBbM3clKP0H0)YX)~t8MjV39 zgcKl{gwQ~~bX9~^krM+Iqg3^andQ1w&H}w*dz_=YZtY(NJev)^G&%o@T_O!Dq!9*a z2h;dty>O|3#?s0^2i^mQ9tv3$h_$ghFI@4fvizQ)51T~}D_FU7ZZk~>f)x0wz$!2% zlo@W;&Q*&E-fI8;4e9ZEFsu<}nBtQhCMs?{;TT{9sRgj;jsd% z;XS0d61vLj&sf>zQ11sQ>S01*WWu_B(o8(BrWl@M;=pI)YT8dyz6l~20uaRt z1!8I|Xglz}IhC{$WS?=|8!Z6dfb7FbVX%lD{=_?rOy@WPx%6vRn>gwbd|O5=+|<5^ z9^&W&m1=A-%Ps6_trogjEAWkVIGsfUL-(Zow1ELV_!P=JPxa_y%Cy{V4i`!UC4+gm z2_Vuah$CC3Vo<1thjSBr(2EhV{{Tj8tkcOYCxVdT3W)40BNoQxX-u}nkd5)kfgcm@ zdT!Di^MH;`XebS7VnT>Suv=^m_%#{Rzt&$@u6zWj*h^WBHAWcHZ9zu-`UJR8DQq$3 z553KdKb1vS$R(OeqOo$ADK+t5QC6pl$SU(5^W)TSi z{DgC8b`|`?>m;e}q+)C03XXa&QVxze9tTfOn#_F?zG{eQ6gM?Y&IyuS__0?kJ~TnOY(bCZ8+UjL#*^ywCNn z{!b@OJ#r4qw>BxX;8I)_NMS(w?UqKnRYs^{H>Vpm!iolV&`VMBiU4xD?=V-KnN4J# zK9F+(-(7bf?DeZyYyR%Q1)=DYT$To%hQixDQS=*vuG2pDOTkl!kB-kx`F8?c?>Hx& zvq$ivCMI1wJ0+oHzCqDK0rT~J71XkNqu*5!yV!&KWLe;&8(AcHe24`En>%t-@5I3= z>ZFIx#68#@drU)2DUEvLticIxUP~!|sXgx_QTL3eZ=mhZ-ilWFr9V+Q0Y)Nu8@V<; z=Y15r!99m3$E_113AcH=u_+@Vw7BRSdxkxSXUA)u-Pq%d#6I&ge2ynpuwLFrC&w#! z6n&RIZ+Y%XUHv@w`4ztF($!YNvs)!bh9P~|!0Kqs$-uiOdSW*(tOE`>(-dkeYa#R3 zn(p4-XV0DmefWSH5E$6A=U8@9*45cZUdftJ_f_Czp{4GVPKLS0(T?N0jUeOT^A>hI zH%4Ly@yvG7!#=K=;T64s98D;)2}Kte(J{(Z&O`74Oy;u<)d zsR#w+5L4uj8&9Q41_rRDPa=4HdIP;wcG!UxMPr@`f!IzL1MB73m3e8+Q=Sb1SD!NJE3^{u_a#g-f>+j$dJ6 zs=CDnrm$~7DKW6YrnxEX1--QxvH{fwI#jT(Y3qYGnt8@I_%@74ej{&tGC(i8|_IdIEAPaJbS(;nWfSpnUzqt7DgX%X_Uj zlcN6TN~0urc7_n0J0$VfrNrJdKGx*LR+1^<6a5c{`q)OHA5$~}>sIDXi*^=8*^yvT zNl_2#;1q=(8+IgH*SfZfW2D`UIvt&qvIa|G#*_^mX$tx+o7~jj${@*;Q*bPO*qK7( ze;Gx_d$P5WY@TiG+c7kowTjog|6y+NjDGee?<5rGlJAUpoKBAX`*+eic;~~e$lp|z zG-S3K5_=!bzQScqIhLY5c_k49leiIie}iSx%X5A1?v_YV%JanM2)?Z?vB&4nV`Y^u z)-$oqtS+@zhr`_dVPTp|7R=PqZF2sHvPOz{8minG@2?vDrj;COFhxg*2mgpuluWu2kMaj z&@&E&#SkJ3yCF&HEG002dqIy;FRKL~o0&RmA`UAvA>RYR%RiP?dt6l~3S~^Ri0l2% z=uw!M$*Yu|7z_{w)6PVpGX6^VN|+#KoLxNE4f(-lho%MH365~-tC1s3m{PfNxc6hIt>l8-x2X!kWI{fdbwd2$ zG$xXlU6k^$N+C*NZIOvv*>SLmnp~4LN*(UdV7&VkAj{0QQ0rdCE7<=ts@izWDN%oPsMgSCUszmN)}W zf82G)g^t6IJ3D*GsaOJwLMzgb9P0(@!tyaCPxH+Tlnuj*^$}WUbeSGUE5Wc`;z&6% zj@*B)5C1(tMI|eA(TQ1BIW$q3Z9PEh$l=rxwZ8H-VpN=t(t+ZiLnNjZqmOU2YMkl} zyYD@9&EvE?=`%84|iYmb%Mw6_T^fszD`U*b3d)FM^__p+@Nou#fi%RCHCCzZL3;(o) zOJ@6*g2~z+Y_dM523=2iTu}FGP=v19v?gr06)7rhG2jpqvpz_+-Tu8bgQ9{Dy5-0? zAM6tJj#SZ7 zs2q`#-~D=p@Y!kCY@S-u|8?8h-y!AWwz5vfG_=w`DW0$V^BL~-_M?d}+IueLQB|J_ zvJOm6l3An3TopWHV)_GLJ;ef>r{y2D04m5=66x&i=X4B<6M>C8{LFSe9M|kq>Y!BqcQx{JcW?@@sx){7zO#aLN ztln}BYU|=fRwF-r3+MItN43wc!!>s!jTE*goTwg-g!h}upeDd<)X$iXQXHe9sD%%?EXVuz(G`X}V4*D}OcTU@yp9c?^_EmD!# zNRow_E0wT%NoI&oV+!jS-yUf0VIyA{?fb*(UKR-M?wSeR$%Tjs=U%k8;e%~bA;-=$ z;`4b9iGS}xj>#M6t#PeTlg>)TU-|6Ge$_N;kYt0xLG8)@ir1eX?w+yBwkBX|$GLwW z;i%8OYbE@1?#iP@P?K(QY`QwMbSLmxw%5zr>AmkMz9d+rSG3&oi_JmNbw%@!FcZH1 zy%Z%*_wzu=EfKN*VFJmHjNmEJB{932Ivdh@9o!l2;PTN+Gd#;E9-Tk-uCba@gVmpC z(FnhXzFrmkyE54V#;Ybg#k5)#h9tr)WsaMZFyAXDwJ2(F>%5wN_~`XHy>ph{2(h%V z>p9~zA8h(2Lg#?~pNv4MJapH6(_=5V6wB23!^=bSxRSOtgQRJHrMy`8Qk1ZAN;bDZ zaMMx6dYS`8jU1a7{%=gEa@Fc@RJJxAjhv75>bNDw$-+%mvSF?axX{9j4Gh+|{hI8r zSF~B|ZZ9$?8A*m5Kq46M^7x!?Ts}cAZ%zi-9ag1DJvJ$HJoh*u4vvllTvqrhxeC-Q zEYZx`HHZED2TyQtocl8hNTen51L|4?;tys!%iVo{y2V89Sz0)HnWC^iK_K?)_}YY! z&ZTHj5tZZ9H+{OhFS!x%Zm{qzyMUkoSnQZrIV;?5Y2I<$)@$8ybrksm)k2|**pK6eRia5Xo8dVDV?f4$rqNbDTM3Ut8ZDE@_GGHei_3JD1Xg@o|^dMPOx6Cdv~J=8<$e$Hb1kmNX5?paLLUDC_ z1YSFQOqw+U=pq)u)6~nRKYcy*C@m%}tWEj4Luw?ym{K@Z8RD8C=U=A>OBEf9owACJ zyz^*c=q!lx%}3cN*mO2S1VPX9wvn<`mZ7g-DXqAONJ&Y1Q@EqSQb&;rZjYjU>> z-ka3g_8#joI{LalA}Ivymaovpz$p4NN`vn1fE%x{FjigPTTZ8g{kkZ%HXG!XjeEgT zqZq0u9-eL^FKTi|@>Xa#Qx^44zK>czx%dJep#$f}e0P#@zqqv2+{eAJ%Yj)Q7M9wW zNxm_W#@C$6yUrODf!mz_=CvCSDLRJVFE|KN*tD$D4aVwNQcr%6Wa0ER`a$7~#?V0T zK$&p)ud;#6r_#HkD`D+%wW5^F{nj3k=K*&CPcV78lafk}WMs&->IrvUHk`i_9ef)K z<5#b@yM(Pu#29RskjjA{Gaqzhq z7ujsDunj6Lw->eVFG4Y;CY=sX5FuY)ej)_}XpVC(X`30DsX>dekoiwJq*NAq@nUgP zNm`m!_h9z%*|vWrx7Ez2{$V)B#2?NG3paI-44Xq%nB{xj#`qikZ3S?OfpGQ&W5LeZes8$E52N`>~0##DUVu z6Bfmy&ukR_4%whc_?}~fIF+rH__eaS`cK9x6E05XcOvgXYuRq1_@;@1I5S@wV0h4+ zXN#wy*ZBS*8vYO74^t)C+B)2;G&xuV0kJxYiCKDd5$JW@!DwQY);vpwq4eY@!3{ek ztPoS?f@W?jW-_qZ*tWovQJWw5$Rohr}Y@+W;36OWL_-&(9~xB0})1FzIypUYOf2!j zx50h8Ny+Jd)fNV9DN z+ku>N?@XoN;QDi3tqZDMG*hw2R!AFs#}L(z)e0vaQk`*ZmJP|j171!>Mp??uc(qP6 z`>Vhxsjs#FSBX$>Y-)5TeW!hS=yfRnTs(6Vf95etg5zI=gK6&_0z<@=C~CJZ$Ky3w zr)F=nWRJV6-t;LeTw1U^Z3VCXvA&7&>BX^Y4U@KnNKnoUdH-K{Lb*@NjuqZ`jDkYJ zfE-2aKapE(YPv})x4@T{c0JroOC*4DRPLT!nR9)uYVRdomva^owUGHwYaubK=_BNI zSIz6Ux)R;og97m9IZSBMQKQIB%B_gU-1|X0=1XIkb?dG0m)JWMPUHVZM`vES^^RAD zf#QK!0G674`M!kN3#@=)h#CI;pndc*x-%a*7Ny_xxc}Xd7!`VkfVG}JON3m-Q0tl0 zgix;8S8wa@l}9g8zQ-Yps7BItSa0!-?PSjkzajq{Mq#Ou`c30S)KuXKEUr4F*tH3D zAtRl(Coh6-%qy-Q#m&YSE2#x|JAa^8{C5v|bv-Xy3N=jdwMrq#$i3&$jk+z}vt7ND ze1YDcF!xl8X`#`%7->7s-@qxV;oeeE)%zT`R{QARr+$_+q3KPtJV$Og4xcjN-gT-G zO3T0-BVVq-%%-keS6>K;T&*(dAdd}MLMx)LOa9w$he^Aa&GcPk<$h~P=3G<*7_6dy zaYVzn)HzG|S%1*r97GG-J;v~f%+BUGp^{hBzdNani3&Gf96Vn1g=ge!4<*CLLI@+j zHZt|krytx`$X~hq(3ZuQw}#qMEf2$M)HW-eO#fnd%$V-uX2ioO(^99rDOq*K%yFM% zB5zUsEb}Lgj|3u+E--R6S8Pt@cDp#yiifPX6#n~4mqT)|lStmM)!GAc?n;$L}{iSr9FJm4{7ER`Y`jh;zeN#FiPqPka2kLwO9~sBC2Pr8g(BFGUM44hW;6 zyA>L?j}yqHCim}?%n$COAkDywq$F}hVgBy3;B-t8efD3Mhoiy)GE*w@)igjU4fmur zRlaNlGWRB1`#JcMqqdy)!w=!^8H%<<=Vvd zA!H$$DxAn0#V6^}H9`W2Mt!vaufW3RRjGd)5Q%KQo}NH5AJ!6rR9>v%;aBnQZaB+t zd>>y$3Wd_>iXZBLXGrH|h(*%~R^@fckDXUI{X12A92fpVb$x_p0(QNfw;O8>M?{^L zm%Lg61T8KGt?fDX3491K97wi$GIMxhe^U`Rp&;{2Na- zQGYVG^}x`y2r3pAR7!wI^It{NjsH#iVf@mv>>JQ=-d*b=p#=*Pc;esqdL~|Ls35Zt zMGP%*cKmS`-yWtK0%3T3*;6oUz4dPhFZUPMkEe$HiQ{(o?!2Z3%|f;l#Z=s9$YwWa zkBBK+gad5k?;4o2Z!Hfm&MRxINE($Mh!-Gn^&=xM=4NC{qI}mFvAP~0x)M14h`|+2 zDS+kkt#l~iBM(-K%hN>?z4`d!_wJfCtoN+4+y6Cgp6dhOrJMx4R)h_ggGpU_vs3tI z{eGLyZXRyKY+tfgRPECi`QqMY{TsNeqb|F21WGp}itBVM2J=gv^k$c?_=VS4Zn#hk zi?1|WZZd*QBJppg#^kLP57j%jVt>+~hSCw8z<7e%`Stq=)!@4LOHF{HPR)h`)8#z@ zA5-hl$dvY9kGdfiwweFr){Y9eLUv-G<13|OLa*l2qLC|~D_!heE5t}s(LtYmb8if? z*;CQ#@yr!&)gt>TsPs2{bNfY;`$S3gQBS;R3YY%nHHML1ioZY&MYNj9)zgV3ykXm# z`2I6~P3@nu|A>mRZXPXb3H+6umdmm;6|ATJ=(AosqL#>xaD4Du2-{+~n3#F^Auu?c z=n@^abPELxP;IeW6sO@+s_g6kvy{br>{h?`SWBBq1<&oZAEZ*{oZU&7`#*TIE=1Tk z8rqST$3W16s%pdA6QLLLfq{t4;@WR;#2)li#)}@7*SS$wkj;sKVF#`Bp7rgcm5!0G zk|;oQ0mz(&mp93_@pk-&05^9+b08uXCZ?#K9y#}d7yI?aL1n1{xbX#tH=mX>>&s z>gu;@E2LUnknuc~PypxC#|qTSEXEjs(kF4TKX-LDp$p@7xfGhjX^A`XP2TWm`SR1}7uo<7R?DHhiI=xEcapT@Xv8Ndzxye$b? z@6(^FiLF3D<5YX(oNiKWygsyu7@S(9oRU2{SN+ zmzS51_~_{9kh;6OM@@jC;k>BUysO7J{lIWJ%m)4D>pe%R z9Zmm-KJg+WACVPku0Izb3-_`W*A=Q?UqKrbKRA(g`g`G|2tcfbZeq;o^FV zEzQ5wjyg18q|ek;jfA|sdM9k_V5X)_@IU7_7Zt-W+SY^sH$j_*2jA%y92?tVGooIZ zhW1bwppMEcp+Z}CBj!9y2p~Dz4{0O@<@~Uf)#*ELN5-5D_~qgU55j5y8a_l{e_g=0 zCc*aX%fsVV>x_&^1Z!M%|B zDF8N6Xs)jEU^MTo8kO-El_v134hmjgi#;q$GqzuReG3X=e!j+lS{+iyF@&3PGve!_ zA~_L#RDbh(bylnV^T}{`oZa59_04&cK63i5?eOfn2k%5DJvFuHK>FeaVqc1;cI0Q; z2PcKSv~1wJUri$;0)71EPu)CsK9>{>aYC&Zuua1`gZVf&*9+9vLPE&C#nKO%12S1p zbbi47@`_X#OkO$030WN^Nyv$d4TO8{(cRtnI3IJSK57kZRnv_t=d{Q^q@_87x=gAv zF@%Hgbc32i97|ssWsl*=y!i?>94rSQp!!XfEk*HT->n)wBwc2M-^gY&Y0so6CYAI za6K$RUWmy+NQ%vijWf6tr;?V8)aTGEV=QO{=ZNR{Eph9vzKxAZJ7+&!Jtk*H=XFld zn*=8wqOKjO`to5&V@)9E=~Hl+8#FW=Nu5wQP&_O^cKG!go}*8r&0OzDBc*W;bVAC% zIn5xz;edRh6Of)o14NSS*^f_jmuA*tNkL5s9sf? zU8FA_EKD!_@W?m4vMfm#XCwmn;o)F$wPF-tB7ls|#?pW^HN|Rz>gMqd+@11aan%`F zFof>wR(~}L%OygbciyRes;XeXf+R3$wuADrGJ3w1o1t8yBS=X_RSihjuAZKz-J2p>>-=YEDy?a zaEj@D=jZMEI6*|Pv4LZ?-(rFvqVJ3eVPj+KP3DZq&VB|-cUyjp%c9d8ODzjY=)*ydRaBG%wIrOE751B_XW;*(ot?3&X5C zY(eQwWDE53gA`XSBX=C55pfM>io*Rf;aXg#UI_kEST!AUuujEboxJ{R5NQmBamj3unYcQn(HQR3!E_U?OQO0Lt$D-R*#RJ-BsM zz;kfM=!NHMTiFMioG1KCO2Bzc1mj8Nv8Qz28P5UVsy`HD!0w*JeuCq)NF2a=+Urk- zi5VaNY&jb&k!TEv6bt~1%7h={&R;1W3ObykVyV^B{8=!^ zT9-Y8<+k_GRl>%_J>Ds4e2R~6=B%OMgqa5(L?=ix?~O<5ja`@D>&`_l-*Lb&3ge?ryKy!2(!}7n(b3 zK%ap_hT%H@xbY5IM&^J2KBpgGjoUgpMrxcbt+-~)C$6^(N*I3RvyX5-q69q1bCkOJ z=79k(?bmvDn!)=jUN52`|)o;cotSz6P<3t>`ga!kOlUATcjORiF@pa zMXOL=^9bw>`}D7#)KOkRlJkSmO|ydMPpetqSUdswSNctSEbJ#5z^o$sD%aCP6JM&7 z0y-)QawtYZ`J4+;TbugZSn2BTFLM1rfaNFG?gx}K1dOW6pHLP{J`{=EqfwQ?OqiR6 zdkyXP(pSpR64tqZ+Dg0`^HHy%VUyBvFm!*LqFCzTw?%B2Pj?WD-X)FHW2;o*HJtSl1HhZK@vgo;_$?gh)sln)A6;pz^Gt{2S7MoOhCmc21E5d;t9gT>~+tF;8(L}6bcczAd%&%Ix( ztE)WY?*B8CRfk%4z5%3-Aw=g+f(56hYppFv8JE*Ni&FKK1Tg2Fozl=O6Q`ylBPE3Z zCEJ0DGwaa91hJZ{iTfs>^3!VS1yFJ9#s^00A4y8&m)JH2@04(t9BDR^CUcg7LdnSI zQ#(Yr2+UECmey7n^?DCZFtY6IY@Tr$Ik{&-LU-jbtN<<5)d_U$^!D~57r&E`VCZ(9 zNczNAX#p>v0ur(Gn!}VzQ_j?$3shM!PS9?b#M6Ex@~_TPM1+GQ`R?5`y|5`jq5xU* zkb+}`qYYr}=Pdb@%Of8II)RZAJh%ZpriA$6tXJCcB4QL%IzAM*^H89st|2&z7i z$Zif>F-8m22F%^TKn~B(O_~GXqbf#6Rb39|?#D(Z{i!mqUw>SwX#lzY=JxjSp|a}2+D{91GN4s@7><byu}WV%Ko9}ZfYrGI^jfdRQ1 zPxo^<^)tGg_y2&8JeT(9P>nLZLGsT2iW~_m@{Q%_Zw$% z4^3YmWV2;LCp2*WRb?b47q`rX$T*OS>v0LW$}4Cv)xJDDKskz(6VcUa`_a{vNlM?h zLt5o@DEiLszPfR|JbIbP)wlghLhI85{>VXvdt3D4U=3y6*#|hI6t-u7WaZ?%uVQ?_ zA;!lieIF-^(+FTA<{TngGNdIRzY z!IJEHwmCCVQzJ1OSq!>_m{%iZw7nS^FQb~Cmn2#b4ULaKTaJ1_u5s%zFEf3-t8N?$ zo@3hEK1`UR!a7i=zL#D*T-%kzYR=;PQFxg1!xY5i(vU}TTd@=qUC-#&_pG($DGi39 zyROWPj7(0|n%an=H_1BLKtk$Uw;FFlsm%Eu5sa;SH$iuCIpT}&eQbpv0uY`m7`=3~Qb_|r{%2?9y^?4M6SPrY6= zgW8Jf#l~iGEzhl?nGlxB55=IoEbrg1JA1qEXXhq762Z(9dO(%^W>YUtxU7SN*DX`f zO!{6R`fylVSX)y%=s!F@*LfG;X$K(`qcta?rSZFj)X^U1GD7mY{8D^|Wl#NZNvYcp-rqe$w(8pN!&IL^ z;i|o%W<{c)=a(<*JN7G?)|&Vnox?vRvIC&=X_K!%jdj1SFwI~xkBA5iC50s;+u42^ z6P^p|#_~7j8l>=Wy$NPVWm8OhGCp`l%4GypxNnMxzP_8&V^%xUW5m1mUDV^_G?a0Q zAP(Blyl&WL9YLBwOyLg9$e1cVq+L#ju0xw-oKTVHjP+nC#pzboNIm6OXtXAL`ecZH zI9Y*4BmZK?VwBbMuCBhQNM0fz0UCi-081|=nd%)IssH$zt-Yiu5&ke{_}w{_A3xSl zzR54;1J?VBiWMaCQNXswShTP%ZWrip zDR=e+`or~|$1@c{Z%OuWOByS#%MRg8lfKyZsge@RL7+{Q#`)zdJnKqUsG%~}4)A`=v>4?cC z7A8Flbk&vN3w6*EbdVK=G=_1>Fof@r5_D~}wJDdAp$8-1ubks@4e#<${2~8f+B-ud z0k^X|;2{(G3f7%IwVF0k*atU?f#wfsYR!5=n<^MsSiK(HlVsr(G*a);?QV%SZRml? zj^#8rm~UXPs$@736rgsIDbh{#SQkm{=Q{$&BsX={eB*xvN`I5nlR95h3Azt?a2K=ARi z(R_Q+B#~{?gsym&RD2u_<+8-XmG}rCrMMr=^MD-f<6zA9A|RpFhEweg$s23JcQd zEM=Y8&KAxJ=VIF!u9nk09;EL;>lDah!@4_su zzzKTB%UywtqYY&YQUmwrz5pkDKgrb_A0@)^nS=8cZUhh&~g;_74OKJ!q}Kj;_?!*0y+Xp!n()@=S$w**A5}JY`^( zN5BXf%F^HHk97$a#)d9^ZT9`dXE65l?~!CLORKlwHbG?c|%CiuS-*lU?n`r1#oMz)SFUJJIehDAmi zPnPNn{MpQc7#SG>chGO(Kd9cTnCahgWM^jw<(`6yDsXXeF`PkHg5kACjeD}|lGtP^ zjF&e68WIf259Fa64Zq7SITKSPaA&;Kl$J)?o2mSVF9i9aucxO@@xZn*$@TCFraht! zFVZt6CNw|L;^m%$|8)FR0gWsb3(LR}A3J-Q0Wx+BvLQZDrQAEv{Q%F<^imp0%Rczm zFOb%7D|cb)UV}z~>e;ilqp*mGvYKa@ycog3gFmtePJM2EWZ$+E;oM2I)mIrqK14+! zKszplJ;2MlGV;g$H~13U!HzjzTZ8XQ78QZq+yTZbEKI$F2~Mxx<18#H>K};I+bb8( zqN@PVjrqdH&W57lr{C1nl+{AR z+>u8|6iK0GWz^xJ-SWx`0iP4yfWQfABq8TlKMvr`)B6Dg z@1L!9JUTfk%QwQLM+{MNu$}K93msLh+UK*he2ST8F>65D6#mscNFqOK!6)z~Sum+! zCa8$#En+9rAblDD1hoZf>9Pl?QDlbgiC;<*TQb5ryFh};e%C#~U9$Halp0iGqy_KX zL0Zt-{z=A;u`s=I0Pf|mh`@tJ?vksMGfrBk`0ax4-@^g|U<-Pl-~sY9GB-DO%vjYN zpF zEg7RGLcK>)3D#4+b-AijWhCUE{l}lB=3H`Ky(2hB1G7aS-Y_CRky5?QVi7%XtmU}qpFa6eSIP5#5^KKM%fC8 z837=BtMa<=yWI#%6p6x_O`u1Sg&KB%3ev56#OVtI1B0tZS^Ui{gMp6jHADbD5*9ax zfr@=3wUvdU8P!V<{qXWw_VUW~M5tjo*=bs>JLNo&T?Ih99()91A+2LR)+e}(euAEQ z`?ImzNP$vUUH;$^MwiB(BBbXJY6k!u;>**ium%T;O*N4 zdns@X>&~Yw-<+Rhdx6WOa{#+{cbT>7JXf>6vp3U6+Grr?(G;f^uLXSUW0O`D>_Q;F zI1YP~dY>xcGO91S&6Vg1dz@}6(Vr=#@(krQG&PA#mzx86&-)F%@V(QYvz?9aT^${v zA!tM|Tz1uw?;GL$sEPR_0O%OUj=-8^1J|x zSNQsT&r#qW7!V0KEwJx!^mca}v;;kd(hfI( zui-EsZu?nNT)WRlBbO)wx&g=aUVYGox_Np6Cu67M-G`eSpdWZKl)jqCZu}vct%ZY| zTxs}xZpO8X+T^;y8}JLm^VMZ78LGlVLqkz7LFVB~={xe+883PS4}Y{*xiI`qp2*AF zTjQtE`w{v@HpBMAF4_!M$91`v7?WQmBOsGi_Ec$n&MgZI8DU{a`}G$(Kg-HUglnrd z4#C-?p`i%@KSsbH^&02@{<-*vQkIm!NiVybn_H=VYsg50DbR474(8Lqbb&fl4d{!h zM&HH}zA}@(uYl#cyt+~u&K;U=*Okc{%%9mg< zG|J5|T^GE$0jorNR!H;g82|!`juYChn4rn32XtS%b%F}C(0wlO-1k=$@(0HpPlt8p zUAZ4P*HV#%Me_MVt*kt6_4>SoVdmGkAD@L`Qn`UHJx{k$NMBz+$`5gUYmrH_;$u=$ z7l0xVBn%8%p!NV~=*QI5-tM^PympI_3xMLFeIv*d;Un%5$ zlPvfmg;0pId#$WJilm1V5KP_1fZMygzW$Vu@Y2btJnQz8q7Vhp?-Ye^KNE8H^38kf zFoEr8M`5WGQB}nTYK1km||#Pzs&;rr`t2G3TfA72-nl3uwcjigB ztOF+19q$^JD^hG=wPUIF8R_Y_>K4k3dvM=XSZyKsLK3uH2*4YNpuv9$v6`=|9%*X_ zjIPye6{g=tx@Q#l?*Cy0NL&awBR@>~2q9qH?SNPt@V=OPDIxJ_uEv?)mU>QjLa8-M-xDqWZwK?xj>vb;(oUA{KD=RrU!!3~x(aAlH&ZpE0 zGc&YxUWHa2uY0%L8*!ze)y|A<@0{WTet)CV5(t1&g*KCoX$M@JM~T(~SHjuF&2R|^wR z7}u#WwP&~B{V@(64xtH0Epabe&_rj4R$0f2OS3vHq^KLD9y$g=N@O!2sRGImsC6Bf zcJa*G;h~`&ywRg*;QR;(+@y}5ou00`9Wl8oK>fzR0Nt7{=t*4fm%?pJBPf_=;=2%= zD;WXOaH$_Km0p(%XKB~EpaPZ$u#D&|EG*C@ox8?qF=~hWEhlZeG3GNFs4$qc;61HC zj27X0jp6kJ+X}&}Z1rNCpwiZx~@e$0;%|W^SVc3B_?|bhJLhj|oNN-hoY;4PKJY68ydaFZS z#cvB2K{j5_FDQ0M^&t`T;86J{r+>ORWHt3O7*MpwVn>}N%FOkr%21=KilU&i4wg9W zvu7XE(x6HykJILp4kz|Q2dIK_BY2R%a+PA+GMZQFYAbUMXzs}$ueW2#F{?%35Ye+` zKG8g*rd9&tHCWJBA|enFkSm=rROQw)@tQW(!To9cC*zv7aaSA0CMH0E7MGJl1yci& zr=!0+`9t8S4J%h`!K920uXL^<=h>~@x$k3ci4`B**< z$ngfh!*OzN>UvljQ>V&IPY!(VQ-G>+l4{Wal1??)m`#x10QI;GRz%<)En(y*fz*+F z;;I*P06>8S#3Yby-zHEw%&!lG`rglgklw45oqib|a=y2eZ0RJQp;|aQs|6T&QGg;3 z0Vb;rM~@=5tYifugVJ{@O4AkfvwL62yUW!NF6 zitTl(B%_(D0NnbeKK1+c&ncG`PUBdX15n|7uHauSkT5W!0(e3#`)azb4p2{F9|~^> zB_-PU0M26G{Mkd!J5|?SqMjjC>cuOUVggz=g`KdL_<)@cF#lSgxW0`!E*GQ|DH z1uK-tY={mdd`!`N3IUK^V%5w13Fx8A0q{p#uq;VZsqy1=TglB> z98;s9Y#Bb5SQUsQU=Mj)^iD%tDrXz`rhzI{^fO~)ACv{g^D(t`XD?kZrQz{1+S6@g zh55o1&Tv&Gu9UqG(V*<7o~FMf^ZpEvg3F_Gu`>}(D(Ip5t`FdvplU{tGt5qz(>TYdHY68RoA>y{l27(Hxjljs#3~+|5i%Z3dDc;3s zJ*d8*H3dG2X2ABR1x#&$dVxtoA`kj6_v^jNql*jE@j{KDCu0D%2M2m{I0xmWtfKwvZU7>{KH2BX^rr!(m0@syZe1kG!1F@PgHJ94y+|{~ zI+CdM{x*Yp?Y*i7FYm@ZsjlwHc?cvp_+x_U{L1vg{ceWlyrW4JP(KrNeUbpy#lpp1 zM{?6kN1q3E4Qz%SU}XJ3s|Lt$=yQS716sR5nz9=ZykIrzd_tp;y6JY`5{&Zx{d@hT zmSE81r9oXL`EQ&bvyR$c&5(6;w_Ug^7cSFn^s$<$h%9NmO9q<`-Zbb3cAx=}oR0uW4@#}m{%jJEVNO5} zTUlHC4IWR=z`(av2DSS@tKw?cr)od}47k_k00K%HURp8qc}Y-_CIwSp9SUMoXUsaW z4^TSI-6`M92d6UKF5EAY-LqyWW}sKjBdck{=lsNb{Mc@DuDjt*G#Ae~U zBMcp{BgxpM-;eJ&8ZMVn zKo<(!B(ml+6?+<%2_v9uq|Y+$$uxW!_JQM|e&^^S?pKC4g1!9{TobU5W6F6w^ZgoI zylkH59Kx+DLC@!0_Zd|*HVUQS=R=2PW@fg2^_jHVRKfvZb78+zRLK|r8!!#&!snBQ zry%cvM&;|*ucc`#kgs^96UN?I3vpe zo-y!0A2&BQKLw2BZS(4apduFbx%u1!u79PkPtgM$-Q^@gUWowQCUaUMh=6RJ`mLKc z4grm@6rdiE*t&oq_4=E~TpDa%H0}Ob`-ikS2;8x%y94`F(beUmF|iDwwTd; zXRL>Ka47rnjdwe|Ut;1b7Db8tAO3KN!`U)e;4FN9Q-CX*z)Vd}?gxU_ezg;Gy22WG z0cXWPDs~6E&X~7hmCRu-20#-)%SNEv0DtD-ei`Vx0(*b3Xyh^hl$v#0i3E_=5FY`w z-S(-&HnUZ1AZSQ-CQ5PvKm{MM18kM6(>pAD9ZKe-2VQ?dCF0s`;hv40LKVLtsCxb1 z=EBmkHEG_R1u_~rKhJ~Ui}~l~ER0S_;nKajyF}0NFVQhc}vTH`Z$j!#;f1V9T>#en8)VAm!Q1jwiQUy|g zL>mqutHFB!xB|yvykgwKjoG*Uh`qJ;PCF*r)&Q==0r`CSIEsuV37L`{@=cEIpr6fF zM`m$nZU($S6;=h7+Fm1tD+!JV8Tpmev4=-X1dEt7lGB!fwKur@E%-w@2{E7G2nb#a z9C@pLb|>O$1>8+$A-E**AoJF2MEw?>jfbs zG|r9L=Yp(;0Q!{gM+?W7|87gXm;^FuYIn}$cct}T-ZkQ(VXDRet*jmQu+VaFdn`>Ha z8y}_$$IH8(bxPoW<5kAQaxl6Rf2Y7e$2#NSIAA^Zb0Vb`7%*G%-xR2q>cIeS$m#AB z*7bt$Cba7TRW?^KLkQShUU;5c3Edou)5s@Fh=_u)Qjxb*x^Y92o}xsGR|w#K53 zub)q`ZAbzjYN%9S{M|2$-ykFR0#DaeoqL&K8sLSZ0X2NI7>MyguL%NJKXD-Pci**2 zGW)@1qR`(aIM^@)34oW)Ve9q9X4ZPbS_Dgc`PCKhv$XC`neZ@?r)M>2>?>eXDfB03=ZYuY?L+F2WfY8Uj8_%V|h*bz_6S z=wc;WczJ893*htrRm!!8L!Gzp@zz$mY0GYH4$+ouClz6wsZE4pt1YP&QV!+J%#dSS zBu3IE9h6G_CYv*vVQ4C$6kgu|fX6F0( zJkN7K_kBMPSc?@qRGXiz?2*a11MSh4cey`(*3jo}Z;mS`|+^zk#JjyPF(+Zf1EkzABoU5ZfNs z{lR>cyF@PClg?EJ1z}`lbj5(SZlTH8_e&iD<#t`uejl&fb_>w#JZ(7!%1MtDP-{H* zF>d@T{G*aLJ-q4SZ@;CZ%56WiqQA;j{@&TIpG%(qYeNyO|7Ww0C8EyGJdh4O4G+!= z&vl)6zyarR9whT1dV70^*p#O;rGQ4f4bOw|oYoL32}OOSnp$~}zuCr^8Pz-GEMRcH zzsL%&GzWgp+-ULfSM-}ORh{j==M%hY&#t1Wwe4(S`1LbqW~0iu3m+MS&B%c~1eexV zqDGldL$#(|i54n^&OmDw4Gahzvh?dqH;5&&|JNhDUM;o`+(}7gPhz2 zA~$GM!1!|BJaAX0g~i%(a_si0QT10q%lVvd{B+7EE-~!g#_7AgLl!sz{y(tGcK!G~ z@jMkCI54{h3O%nzC7p}mEVQ+?1(Bxgb{IWRPST^Pv(JM!%bvy)_G^DEgP#l-4TMMj zjpIi#0*$hL`*ySK+x5v!=_+qrC%oYwO&1o}__OP_W#(^;Cl>Wd~D+DnQ`VnD=**Yeghu4r+oh2xn7A@9|})z0Uzeh|DOf(zf<=ufJX|97IFTp z6?Xhn8zZILuSI1`q=icG8N}PgOP9<5n1Vp*BJ|$(Lns@_2JjOCK4exOMB6|8-8mSoSxJKli;UJkj#7ufNQJ zEpT8f{oYup6ulKL{oLGKI48S;4h&N+p8~}15OYhoU(MxUiet{9KfBI=rVqzj< z;4~04i$-=tfUU=gpr7#{s@BbqkcP8pFosow^hWKY;J1y?JD@5WWahiqt=w4j@f!## z9&dA2fD+C4quMa-ALB8Vvsq}IL%|H37iAR-Sfo92$$uwr5O_bWdLKIiu3WGLEQ=#Y z?zj{^@Mh$~o*ZY`&jI~456-e8d{X;|$CL20@FulYt5QCPu-|#gsu;=p_6b9vHrSd- zR-s`jgH!{wPt=jUCymk{Ot(3lUm^0YNzt$P*4D^5bhyE8juRM7frkVk?}LjXujTqm zqcPjjr!|nj%N*1kv!gP>u(7DWxR;4EpvapXj2i%FuK=j5O=?`_AY6p1@GOH?P001& z|KI}b8_nbK2HHZz`x;$u-UaxsfP}&Xj8;H9r?~Uja^( z2?b9<*&tAZu%?xRPoMsXjYJzaBQr1`o@i18^4255p1*;F{ z9*Ii4aKVXenMt{u<|`gDsN0NYu<0+Kirx`*P__^=kF zZf{tFmsgYo4>2L&8#ekih>Jmj=uOph)u#GTDnLLiD8p$?R;B7D}7oHcHz72ji#VVI5fij=*RRY2qD)nY7-{ zpizQ;e!=x>*GYWAXnZU~af!>Bs3-+8Cqx4;;ti$n?yu}WT9x&DA5)m+aZ6z?_GYo! zY)vdtsWdoL=&4C@fk+YUeC7SSva+%r*467pxAB41gm{}>fdFJl!Yd~6`r{Owap2tZtC^}EeDjBpwqFvS-*j*omAjK5ZLCZq{ zuFwT3uw2f{`D@KcN};i)X5!db5X*~LLC(d-`e*P_&^Bvnk)bl>-b>TW542d*vg4>F zJ8u{yrKBuF!Nzx;yHMp7g4=gbeAc5WFmI|<>SZ*oe3tEU#Qg%!G(BQ!xC!L^Ktjai zX*hGiU{zzwO8bHSjY1k&oyk$2^j?H?8qu6AEp2VELlU@pI12=(p-INZ z7AY$B6!f2K2`}t35E!7<1QAfOlG>F5AuAF12}y{M_E${8463i`1W5Yk5Cj9x!Wquo z)f;eRm>M%ijyl@kTEtv#dK2dWL!}+IaEj_%7QkT|p@9nm-^?>yctW)j^phGo_+`6^ zkcO1;J+vFh2{Kuwyjf&&qQ#pVkA)y5rKKK%VjYmr_s}gwPE58roWj!2m=lWsaQeQu zsJ1_Oj|bZC|2x9=wkL00E7TzpnZ!E{&1Qe{-t^cIW6Hq-_pQ*;(+{yXN+*O;WO{Z^ zUaT9t#nQ^^Ls8ewS+@WLJev#7K_pH_X+8LhgGd7CP54t(Fudj3X&j8ENBt`BgFC@A z+Oxft@iEn?)W*zkan=^&$Ru?G1I6~ca?Uf3n7H%jJ0G8#W%F|W{Q3I+A7l6itZ`<& zY1umHzwgm>5TX+*U1gmLNMAr3lwF(NR8F5;OBO#9)?d%=txbPf28hazmc#-c$za?a zhj6Z4_Tg&q6`YS3tv?M8K7IKz4naFqq2$vp5^ewa=S$W;5gw>oC`(t6YPgePV@U0w zfAk;fcs0NA`>Iv>Q7^r(xtz$7#-ptr?g7KX36})p&Og2&C9R0yU3krvOQrpvLKsWF zicHEt=pohQLyNUI3UcUBvYe8 z@Qi*E;RI~v^m=VuxVn^Z!e9I{!OeP$+7iQLevDS~_AMwH7f+#2#?+w2T!2V0rtK;` zMzZtpn#FdPl9G;PIB**eaOs&c^4X8Zf6t}&9dv2RazG~B_Ho;`ZShyN+!U3lo*Kmr zad_2=K~PXslIhj$^PaiCxu3{iB>DU~kQ6)8L&TGU201_nAXQy?r77$Q#AcvnaoeV_9(EQi;d6Pyh*_bG+eqT2;54O30s@ zF1Q&Lm_PB7e4YngRs&{#PpEih@SdI4Jo0Q_nQOiRs^*QE8phgta&e9`r+;Lj67>~% z>zNV*b%5kh;-~1qt&PSn(3PU~MG48t$pets6_Luc(6JvS6;wJUj!^F9^f2&0n#1{n znI0e69*%pBql-))&m=v&UzNJ~7D5h*hqIPu~$GSpc#f;E1@-l=E| zi;_3$kaVSHXY4Y%x7SO{30lLG+!|n}c!*2FdGqIM;aM}06BLPyW<2GFAwv=Ln+_mR zJSa{@=)77`cvBj|7T&Id;80dsS$W@)_lRGc^COUZJgMLC3z);2!Nip_e40ugO=`_K znb-T+JYa0|ojaNDJ33t6WI41z<7D%Vf`HG;5pBmvk4!#g;*~4zCE#RiUOEhOYcynC z+Dd}w_|}ieN1u?k!3P+BR^{aLn1lpf^j1t13ni!=XZV2|@H81})Uq`?VQfI*7>AGmkxL;! z3}VTdUMT}wZ-KW!(bUuwbSbG3)a&G4-WciHV4rtpeHQ0$Q20K4_z;AqS=n^q_bXPM zBHjqJncps6Y!(`7B<4xOqdd7W&m~Yl6OW^ogtY>8eHIH-VWG(Z51zr+k=gmY;(b= zjExuAwSvTy6i)yvvXIT(%0nbdw;;2-4c)5?=m?yaIEdHTw>l}o?b+3%q4q7a(8Qy)>6k% zO$Q8bG@r;8L9l;Z6(v~96{23xLcE`gm&^MEkAqfIW zf+jKuol5YBbE~gljE%B9^pgx~h-tU+(shQ0*CVES9f{t!dP7`70>fx@WQ2auHUAy@ z!KIS{@E*s(?8li67c3d?A%E`gPP>nyOZapkA=Bxx(piQlL8twi*IOQIYjSK!)p z$KXdJelzgz5Vak@Xit?+uExDYoy-H;C!PwtOK3%^Zs?eA__V|g8}tZ-c#9b{Ew>sY z=;N@4-h+QWeFSbZ333+kN`Z5^i(?~N8^$Y_L_$A3e6m}Oq+LSW5XR>9?QJqpppQb( zX$5>hWL!h^69vx~Pcn6+>ml4Uq(DPcBN)j^9@tj<7IH^YZqdq>$6T?DKBssd#&3>7 zU?55^nwNUyq6aTA#mFG$=l>n_Gn@?;($7qj{681dUzN@k^gKFhqs1D;LVk+nb{n&- IADw>vJJv?p*8l(j diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 0f45409..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.336947,0.282397,0.299422 -2048.000000,0.920680,0.902962,0.887359 -4096.000000,1.495256,1.456183,3.359261 -6144.000000,1.886525,1.886255,7.241199 -8192.000000,2.268691,2.252764,12.953650 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 45e40fa0da76956fcf46fd4699c1470022a36c65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23749 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index 88cebfc..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,38.834496,38.491646,1.431602 -2048.000000,37.678078,38.115837,2.296343 -4096.000000,34.809341,35.026432,7.842674 -6144.000000,29.389824,30.330879,17.783072 -8192.000000,22.793728,22.497280,31.165781 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=bwd.png deleted file mode 100644 index d2e58f580d587b700f785bbdaf0aa14fad018387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29353 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index a5feb32..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.309407,0.307079,0.284503 -2048.000000,0.280597,0.260318,0.900728 -4096.000000,0.629191,0.629461,3.296050 -6144.000000,0.761119,0.756234,7.309856 -8192.000000,0.996835,0.847737,13.030063 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 660acca288473cbf3b800c2873591809578930fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23436 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index fc68892..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.336735,0.328934,0.301195 -2048.000000,0.379163,0.352202,0.882639 -4096.000000,0.562122,0.576559,3.266600 -6144.000000,0.634808,0.622716,7.243106 -8192.000000,0.846580,0.744171,12.821294 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 9e00b6243082ada19079026f76f3cecf9981e325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22983 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 SCfuV&I(c0ESn3h|+y4cIY);t# diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 609da8b..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.847191,3.821503,0.613257 -2048.000000,7.239095,7.185847,2.246083 -4096.000000,4.123648,4.171435,8.773578 -6144.000000,0.003072,0.003072,19.379322 -8192.000000,0.004096,0.003072,34.126064 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index f7221e96e11877dba1b34800cb180835f1356784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26046 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

    fzPIeaCW(d zg*dbV7NdQz5g=8fM&Y^Os*OHqIXuxROIqG zmXS{CJD7B^69uJ@sPYnJlDC6Ld;gP6 zZ$8~iYAg4{E5sGog#v_~0Llf@-;i$Za0jsKk-M)ye{}^YA~EZmUH;;5Qao;pcOM+a zD|5Uc!RQAO9~n=i2_es>ZJj};bQ$%md6gm+=x{lmrruFE3H~Z#3WQanP9@73d*R@dSN99pFzZQIcl{Jg9gqZ zJBuMTt#5BiK*!yI0Y>^6YXld!HRR<7dhG3cvxoqC5ZkdZ6e`9Xyncdh&#sBbXZz#b z#cm%U-gg@d13RGl%CJJ)Fegtq>%2^=nD~l!@;^9Bys|V{5I%N=S)~z_+f>(L)HSrp z0HTc=i^q>a7-G1g6US10RGB5%0D<<*-@;^&FHJ?83*gupu< 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 494544b..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.311573,2.272879,0.617300 -2048.000000,3.052764,3.055909,2.232784 -4096.000000,3.858091,3.961173,8.664483 -6144.000000,0.003072,0.003072,19.400097 -8192.000000,0.003072,0.004096,34.452095 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 26721e6a2295ff0b0699d36751bc513dd06da9f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24861 zcmeGEWmr{f^gRr3KtM@pkWx^QMrkPn1f>*EKpH8L?gm9k0Z|lbm6q;qk?!u0ZrF4_ zb8&v}@BLrThxh&Ve0t7xd3ny>Yu$U@F~=NZ%(;&LQw3>4yeoJp6pHY%jHD6@h3SPt zVN71cflv6mMrYtJVLK@`J7r5FJ4ZbmLzKLpot2rTo!M*ss}6=Xwy!NMc)5hRZgX5U zv9q(Xz01vQ{=XM+S=tzL_t30egF!A?$*9|+P{ex3AB+@<{H`kL`5^%e(ZjX~(#?r?izf2;DO@bXpg^f|qB`sz4gF&nzc;~6;#QCJuM8fVD1Da8b@j}A!|f0o5pzPQo-5eVivHNfLx4pB|5(#l zyr8AeF3l-q!=T}UPeGj>SDjszUzMa-5M@hlgnjbNLz_)&Z&rsyZ z?YHr~kej(4{l7Q=Ke1p8FQ}e|4y`&6(FxtVcMl~H)wW~?Q{Rd3(BspuHups zBc1PwC}gNmd_1xR2Fitu7?*U78YmbBeOGrSVf^2cBuI9lO=YZ%YCvpmE|8J+Di{C4;m4^Ti5APNSM}8@} zHRjsdnv;`L@wPoX6O+wsv;ayWS}4??j3w7`T^kk2_quj4=hfnPg$PP;)Cy~JbF*F> z-T9DsbF+alT#eA#**PI0!D{-CKj}!aUtApHvuDqooSoIR;6$oCRiH(sJx}|)oK>Yz z;j+U+;LWO>)S0HrEnqfy@5@bj6!l%ZTijL0x&Qb*JUnjfo;sApBqUrP9UJox4*uKH zB3mI~BSlbmm76={p)XNrSePV?qUnICOhQs}2gY{YT~RkXC>YRw1;3xJp7)mob#i>{ z_wggg*S(IGmO6_fGBPsdUo}daQCV5sv9Yl$BSj(Q<)UtGZs}Z)B_-LehA)W2G8p{* zNMm4ZOh!w)Y!WA6e&s8>YSQbTq>nVbbC!yIb8~Z_BO=sSHXVB(GT)GoV})N=QW(Ly znC*-<(tq`;si~=EVj@mG�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 X0rhqRQzQJT0?NVtNB1S}J$Ln=`U{;A diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 4237e76..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.558362,0.584712,0.617515 -2048.000000,1.729792,1.829189,2.323383 -4096.000000,5.447936,5.322167,8.762418 -6144.000000,9.970893,9.932799,19.534885 -8192.000000,12.710229,17.453741,34.451454 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index d611fd414685fcf8272f434d6481eb96bf92941a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27552 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 VTSPYFge(&2_z}&+scNP-{sY~=lBfUx diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 203d06e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.510852,0.559451,0.594321 -2048.000000,1.665068,1.738157,2.323330 -4096.000000,5.622226,5.065240,8.702442 -6144.000000,9.805172,9.890629,19.576332 -8192.000000,12.501845,14.445057,34.137600 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 3b637c31c3659f63e405fa611df82d373c354777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28051 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index a2bb17e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.753764,2.839609,1.106562 -2048.000000,4.863181,4.897792,4.370005 -4096.000000,0.003072,0.004096,16.703783 -6144.000000,0.003072,0.003072,38.594063 -8192.000000,0.003072,0.004096,67.849213 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 67cc04ccd916b20d31f277319eea812902b40098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24291 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 19edf6a..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.025221,1.034738,1.094697 -2048.000000,2.964429,2.840934,4.493396 -4096.000000,13.402670,11.080611,17.136703 -6144.000000,18.417051,18.452890,38.565887 -8192.000000,22.925995,22.885717,67.944450 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 4b7b89d454b5b8f28c7b1ceef695d4499ef12b4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27886 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index bed2809..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.742720,3.900340,1.085318 -2048.000000,4.260864,4.048018,4.566476 -4096.000000,0.003072,0.003072,17.301767 -6144.000000,0.003072,0.003072,38.655487 -8192.000000,0.003072,0.003072,67.994911 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 80e063a80b26c43e0390ec15b4b7f59b62c78b27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23823 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 489ba71..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.957045,0.994006,1.112871 -2048.000000,2.705583,2.577587,4.502679 -4096.000000,10.638615,9.475910,17.381037 -6144.000000,21.745459,21.520794,38.934013 -8192.000000,23.737686,23.342079,68.062210 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index d6321036c86f2ab5f8ad6929b763000a70e853da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27958 zcmeFZ_dk~J|37}&iO2|L)rF8kk-aKA5tY5OviDw*nFtlKGD?yW$=-zQO7`CKvboIf zm^E{8^cpUe~{eFKujx+3`vfR0|m(HS4sB;SP(rPFa zu0INeGk%5;{^fSh@HG5K*jYx?`H`KOvzw8lDe8fdv%R&Qv-LCM%dV!5PS5OY`M8C- zZ(hG_;p}YhB*MdE^M5|TZRcpt^XKB~6}Skoy}Xta3Po;&{NQ|+%zB1GS!XCn-+Anw zv@+u6{J3|pc^#9<{^IdvVoFa8Bg^HpckrjvKcv%MAW(gMjb_}FC!D}q^P!Xsfok|9 z7jF7xX{kG&6z9)Waj?C=(;wFUX*#sNWg(823 z)(S*W6!3>rR}m#6EiFA9K`Dj&E|`J;5Pog!;J~4VUmf`V|Ns5}nQ3v?Vw7?)D;W}Y zoIb;L|6QY5krrblET%3_1Fw+R&UMqacTEiq;s^C_Q2HS(a*^j58EstX&}g*dIWlGm zr838vuVf9Bim3d1tubskn>-I6K78HO0~cs{E3d44RYYWPU3fK8R{-a$<~KAEIaB3_ z!!Y&~!}=G*nORwze;=vbwEB1b)~#Ff-D!AK?8>ZY^kn!Li(9`S2ZucIhtN>@n^T>C zN_1Vvy++Di7{opQu4`7h-$d;WJCUPQB(SWTb6w^;%LCU9s*~X9x^r~|x$e=x>~c~I zH1Lw<1agqx3n81Sz*IloT^(U%XMa@g{LHL9zHY>A>|AYUvS{{`9GV>U+{vHxc9rQ~ zSJ~OA7#Nh))M7l52o5Lq@vX2YAIIL}sMG=8?*JLrSXZ0iQ_6& zWMv62Uc4AN*V@{8vNsxR^g22DfwFSv?IvzV2^AHU%F4=N&(UyL2+0z8lq7bVO2l

    ii#>MBBFA-N;Zq01>Q+8|=Y*8Jr7 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 474b694..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.968704,0.973122,1.091584 -2048.000000,2.630451,2.661146,4.439019 -4096.000000,12.460713,8.881322,17.302126 -6144.000000,21.493555,21.457306,38.924850 -8192.000000,23.603882,23.715498,68.141052 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 4e8e4c29e9189bbaacb085a5ab51c42f3bed95fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28515 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index b8e9c96..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.911812,0.910364,1.089223 -2048.000000,2.741373,2.567629,4.523314 -4096.000000,12.713426,10.677898,17.298477 -6144.000000,22.441986,22.220596,38.669823 -8192.000000,24.245932,24.235689,68.697090 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index ab59446bb9b2e6edcfa3299b2cdfd695fe54b334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28401 zcmeEuWmJ{#_AN*$DI%eif`Cd&NP`Lrh=3x}jdZg~NofQ@RJv49M7q1XyStSR>ALIX zch0$I-0{EP?}zIc4u_k)-~GgT)|zv!`4I42R)PTcIxZR-8iACgxI7x#1rIbd^r?&3 z@Cr}&*c|-BZ~Iu;_NAqPt%Ht@KAMbN>5r%=(`Zp?V#`!k1H0By%{`Nte)H`Df1{MJuxR6`P}S(D zl-oaMe2wpXp-Wvsxw*$u&_yVOzm3}4-i-7^RV=neb&`KL*wA40)uHf5{`6X9JD}0Q zANkzRXz$65%;nRx?x8c7tumAs#|DRbF>s$vkyQqGX`Hkt?zDzCJ zz8=#mOiuN3NpAuHAv3=U8Zoii(~`gk2C9(WFgB zuqC{YnCS=RbNIr#WBLZm)1qCbEByediR(?wj|n!&*cV)`c^!ov*~ ze?Epc|4OJ0MjtD(rvLu^d%^7LXd$YdXV7Z)J?{mpvy;7Cvtdp$Hg*5XN>PVNSKeAb zBE#_#yI0r!bSOT5{;c5tc=pZ-!p^%N zVDO1g-baeMi_l91V`>j(Xu$Voxt+XWtJt4Gl^ELF-#xE5lU7?7Lk1w*Xua9dYIV)Um+v&4GEF^K0|(Ic6IfAX{li4=^--=&(X@kjbFw5eleRN5n?jCacOF0IM;Zr=pGC? zCv4|;H->|Q!<8#n%=DX^o2i5xKm7jvn`@%Ax3{-o+0XurLwKj}rTCL4BZ5J>Cc`-l znH7g7>E#Lj{*p4N-A_~-OS!nMXdGIXtVeXzBqX(6U&TysP3-UQ<8B@t9`+P}G9>`T5)8g=1bMKG|$#uk5ODbuO*9Tg@Lt<_OPJsc_-{#3)lUJ|36y zGC6)*_}#mAd3}NY{t9@07U(OJm7=~nT^SmsFFTx^oHiF?EI)>ZKGf8tNpRgAR%txr z_xkYR@@VbkBy!{hC-P0nca{ei;fsX0{>V^3merrC zgz@3?=em9+t@nk6ybm8f9J3!apIcZMnJ7)0-}oM(Nyp9o`OB9Z5HRA_)|)DNr>G$F z(SrHOvr}F+Ha4@-g4Li*e#ea)V!rs*gM;KS(I@Y(+qJN9NJp@JSIX3c@axXf5%VRW zv~M^n-rwNf3>jj*5;HhOc{v2yIx4D&7VJij%R7lrq)W= z8AU`Ub`M{rDiUA6-ty~J>QJczd!j@LBPZuaHQ44@U1nBR{k5@TG~4xwle|IYbVaqT zLWB0}aH=D@jjzC43;OkkbM)~k?*~cHx_&N3Ey^n>)NReT$~jk(YdXF~{$^I5MhCK$ z{0_=?a&|@??_0AK&t1`U-RZ|oPj$C===$e-gyT#AljBx1Q)fyCGS5esvJ8-Gw8)o$Dg5k0fIDx;&L<1^65k6J)7>{u}>MX56ga_5Bh z##FV?+3_|e4i3iU%a^MtEz91frZQ6t*lKrud3fvAtymuPww9J0hUW(d2Suf&+Z}@I zT_twQy_yLhK0J_@zjEi!odSKAg^oDsWZAeOShMmsJ2RqZ2SmK%wj^?*CwZ%Okcb86 zHHk!zIo2!BL`(^Lc64-9Fw!_lP0g%`#-VYX3fdus zgoH~tj>YmS)37ss@gzD<(4i+?jaO|8rz=^GHcipg=bmqzfL%?0f4@D|_3KaHyb(a_ z{UMY4p7-z0&iquh7aCNzgt|KMDLKCMj6a@>GF32|$tx9I4sCS9}i@q#Fm=Q2xD@RWZkw1%?|7noBb zd0x;yXl6#YA(%QaB7%IjF~sm_cQs8l|DE$%v7eenasB<%^+(ryADWolO-V^fN=n** zz{}FD$Mwa(W;3#Uw6iP`!KOhWXwMSEYq^k|;HC>HK;62Yv|w$JDZ%9<79QEg+$Xsl zINcvVesnxNSd=RsWQb6&fdl7s_$Rs3ROfd%tJ=qy7-^VMV=(pXTyt~+#VtB{%7gu? zM%vn)!BN30jmenLfAysoPCSLt{Ta?>dVifq7s4581u_;+PR`%`spJ3_k}M}H$~GG) z!`v!YR?HrWiCrQfV4$P(yvAj)(ZaDvGUaZVUfx>A5}DfTy<>G+;2xMye7)~SJisC zF98@5U#Y3b`XT4%dEvR=lXiJL1mpKnq>?Ul@}99K&Sfs#LB9%B{yLZ4-5_ebd-ryO z>x%#NQg1eWQK{J3De{sr{`m(ZH)p3?n7=;8bC#GH>pLe3{U)6>``gibPfu6m&KZP4 z%%q!FY6d6mpFg|7Pg-uDKi>qk&oQ?sX2Is@I3#%eP9o;>yYnf@@pPP=Jrg>8KbbSj zJ~n@18XP$a@b6c1 z=lH<4+X_4F9O*}OVq*SMaxLz?eVL~@ z4!3L=VG@kDZq@B>?Cmw`W)B5Btd2ZBIovsbxcbwbh!Y3;0hVpU|;`a7!f576eB-=WY zpy+ygdjq5poN(EefwZJjV*BUXEWgzh8d;zZgswkxM$rX!cJ_t#7{gMn*@pL*E?v4Q zBoynsULFCVcHeTsrD0FhdIl4IM1SK38Z9j?HX&70ys-0K^<0Z_fsC@Pr!Fooa3-{? zJkVqJw-XxOa{$X9pPVq)!D&>wdi8;e5S0Mtq^se&(cH55F#; z)H?Y^czJop#>em6y*mSFPS{+?kBAoPdPC4P@yCy+=jR{W*x2|uU-PYgN6O3xkOw|5 zGV9z>SC?hjNh5N0j5$ygS-Fo^l@vr)rxZc;I#&yCr)qv2S5PW>Sn>#e?fvhi6@5*l$IQh8`|;i zr%s+;Ug$`!0+dkI-ya6lkHe_z1_1RAesq?*cXeUXK!uQ4O1Kx#`H4x+V1Hw}U^WLc zOC{F;?J60WZoaA$faap(tya0Cc>RD$zzs!nAEnVEc`a!Gkgx!U0lX24ARh>btpPR5 zVa-7RwlCLq0K0BM(#)~_BcD+;^A7bZ*I&|HCqJ5i1W?-3Qxicu^j0Ux$cs*u28$hW zw#x(U;m7EI|McRd_N#vFPX~liR8le$EG8x5to^J-amZecM$i=Mhw@v6GEcJ_0&`F|mUl7El^ z9#Cx2?;%$jw2`n%KJ$&G4~g#IuC6A3nu_2(y8?&C}5j{BK|2h_8BBD^xuGJ zAQ1?i{OvV#34!Nv={4XZM_pY*!wF#LT~gRinZv!x_WF3sN{wbMjjwFlDe{2kUyl}; z-(q4ytqk3J7Z`XA>bs_bflD;bpGHJcWun~aQO?jUoFA&zPldn{#_aV z1f@3{5*Q>eGlxs;n8`J4iMzYISyXZ`3wya| z3oIvLrB1>TTvLTXr0xg>|Cfq7RoUUM^285#`uBo<#WO7l0h8I>+hby8#uF8-#9hS2 z#g&wjf_zK`DO&LH?O;h!H9B2OLHh@T8P8R5wOr5_Io2~2`9~KEbGs-WKoIb=6BBc| z3Ybk24r(9?_t8HEcUw2RN{lGVwB4lJvqVY{K?ie|^9wb3#tRk-`k#;cHB8P6b1o-- z(Sd<-4yOH@_ugcogSfoPzkZOTtX+e75!bVHy}*H6p7ft;?{3<3`S<8v&2DbQhy*Jl z9NMU+Dv22w9AtkKZTxyJ63J%kVBk|-bUl3VrUdHuuYaT?+39)x-~&7&KQ6O+HoM3M zM0{+zQ)0)ZhJJD~%`K?(lzOp?)uZz4RFHSlg$r1#qqB4GcWH9B(*wg%r&B9{&6S@4OvU|n4uhwbm@&VDz6;HPC>c00*GE;4@k{s^T&7=sqiXYDECdN{SV z))ArQ)(qq!@}3?xIy!oRsixyJmZtM6&*@&}S+-6s_ELXpqX#<1?c2Ar^yXk*Je?d< z18QFl<&-NYCb}i^66H(z|Tl z3~D%Ze-*=#jTbTw`S4hL?!w$$RWP;HjQ4>$RZK0TM}qq)KWJWaknoeNXB(h=Z34?3 z=}1mW`Vbxcw9@UwOdrIqziZ<$JN?JWa+>i696?(--{^AFvNrw>s;1BD*Vh{iYf;{n zb1D;IwVymM|)hTg=ZrL=B-dii-2<$gDMckWk`qyWB?7g zs*=j1gCw4wN4e#5xyl`4uCtP}2V)(LW z@>$iQ=LH=!pDQQxfI{O-L@Nubj(tas!Y_xitkH&ZZbF$)P|-u>)o z5^EB5`1jBL(a|VU>0VJ-ujWCBLCF+@>b|kPoe0DZjq3R2lj}gb(^PUJ`B9ANYK04- z5;WN_^WYqa*spjfrfW|KIZM#-AdAw~^&BXe@>do*x|;AJKxJs4jVew@=jCya7FYha z)W&wZU`%}*Bo(J&IJ5eeWiK{I{@Ui2Ic;y{NPTL{QOUil={)73LPKo*P$zBxh;nmN z)6}@bq&_5aC@kn6-@bjr9RzOY05#NRu8DZ-^ms7|kiM#ArMX+j@w)qSRg-n2Bu0La zZ-I(`{Pcm8`+GU7iNy&?l{tLE;hli0u1%h7h1n7ArNKy*HdyyG`kfq$x zDkRj#Dc9MnwY-(Q{<*YNWnq42Z&0yebGA`RR(2t~ktPvX6>tu#nYw_N8AsE8v<~IJuvvCRn$OFK{>t)-7fd2q0YTP#1%5V)Pr0KF*k2^R4vP561QV75q^e)I|$P^)DJ7CHdAscYaS$;fw+en*Pbj62{ zHc;oc#MC2wL&MqibvZ;Y8?VN~!U8T0Tco*orNuO}Jp8`-$VP(}&aJ2E&m-Im#Oo>s zGX134?j>ZZDV>fD$F6RVs_>bSXT?^MFv(^?xl_#4Y^Qb@(?J>rN$(y@)H<&}eB!&! z=&lR(@qTu8w%J%wDCjpHH^qF11gSv6!FJaWQ;hut+(;$QD70McGI8kL-Q~=MXOj_H z*p`-X=JS27Af*RKKOfRYmVRLI``^y%!-8}vtW@@7S->!JQP%g=P6g~dnG*7#c*Oj~ z%8EArn6JQd@+_d~plIvqP(k|A{Y#e{ztH-b%&e^uRss84r3&DS&PhngNw`NGS{W@& zDgUxHB<#3ZD+N9cagF58p59*cjm^#Kt;O<5@s3YA6tO~1AOHTfz0Pgqk-BSsCA4>c zL(KoZ4;gD)wmUldZm^^YJ%dO8?OV4ntHLqgDfocsKIB#)E`IvUP|j$S%oqQ~7L(x* z%&hAwEM%YpAS!o#ef=(>1eHf=X{qX|_*~jZ-rEGX3ryovk2*rHR9&B1TKYu<@GIs1 zpFbbMu{BB}8{wHeR4EwTEDEs3gsq)^lolQ$u2Z9ytJLrNNS`9bcPXpp5z3Eeg~tgN#9 zPTjX>N1|QfQ#N1!d8AE!{er5y!z2L%0}yqpx5%D`s#@%rpvJUZ%8JJVCH2o~za*T4T`_sQ5haHz>&9hJEUt?!(oe1@(hsc8L+j^C> zdMG=~_Kwg|8uGEE^N)pZZg_NxaH*jsI5kXk`_uOzC?-_(rv#C5PTj-{|HN~RLXuTG zzlJ{K!P9r;^u&h$d?A_R8o%SIQ_-1yV7PU%1?FCM%PkO4QZnZ)PF);7qFTGbhm#c>?Yyu6vG31=T5w~} zFJAbj(3twx<0Qs^bPwvjRGb7i+{O^G2OcmJ!^HDty{=2KF&i@9n32&{lzlQoy!icm zg1&8$=-u5TlS=>SA(90AZez!TgM$^;{ziz3B1sS>LXAxTxMYPofKSlR9NlFpB^lBj zDGi9YS#j*QZ)^7?Nnv7P0sm?BC#IK_md@3ygO;p+Fb&V%0W0dyckS#Ub{b-j+soPa9wNGCi13J{%^Ick{$m%A@w$sor#HSS*3+@K6mDt?GK~fQ8>09#%j<9^k z*HVx1u`x*d{NII`nFE0W-g7^7$$(}Jnn7p0jJPXE+7U-z?VHB1-?*Me}>?ZLHplbZvi{x0$}5s z$b=5p%E}5Z5$reDHSUWQhq&SFN?T0%fq-s+cY|Ob551yy02@F7tkI9qcmlmmzz>Le z`sJY)ZssLILPj2*ouIu~5my1gIt3ES%E~;0kKlNH`}lEd(e>!jV#jXa<2hTZ`{-1B zRyTMj9O*Sm?e#&aV9~0G1yNMwbbl7FVzDpfWiyE6!oZOge2AeRL+>BR)p+tf88pOD zE(GgkLP~i6@E&O!0Pns^N*Wp!rGixNyx!nzEVF<91SBMA`S`(xMvbZO4_0c|Vn+%N zLP*C(_1^LTiDqTAFa$6F(1y3rxjQef|LK<*2|l?4r!^{*Jxv9JNEnkyNPFE#yrWIW z5M6YC$_t-HC=yDu)&7P~yvvppkTB3C@nOaY#JThG2S_6R2??}7gNcB0M56=524hs)`G6OAoSdv$SwR7fUb$)KSI>c8JMpmZ6`%qDMxVmMzHdU3kzJZ_hT8X4hH|Kw zWQ?l7xZe8r_GrL4qF3-sj`uu0X_umXdYY8c74i#~hXE72<{jy7@T0lo^P@N?Uqv{#_{`L>gsXojIticRtf~?+0;-cyGr!zQmI3&2b7H`Nhaq!ivN9_;Mb(2<05_O zQXe|``F}oM-x0TPg`IZ{t+*I@>(cpG9Ryg~qKUe`CD zaA)Gi^ZbW-o7LwN(^ogw?IH=HqXv5UxIQe{y$eErFN;gmW>$_s{4IfqEiN8Ak*&AU zEwRzczR@d(e9a*!^6;`|tuLgVEE|R~$3#d*DQ@RWn5>^4E=q*wHKcr0PbdHBe4H-@ z94~+S))p=b8SDIsJ&7ST1?C{~Yf~T(G&s+0eBYzEs(VS|U3$jWmFl9-r=2{vjJIBH zxPDuFMNFd#QV+MLBRUyNmcv!L-DD*BS>vWE)z%WlbdDDKt&Oi<5BAqMUxZ|M3*=v{e1Sd$`w=@A z9jVy}rjCy4+T%I1^HJHU+TTw~j-V~HAfTby4U|Y?dyZ5!J4NezLD#X$oohSdkTqQU z*Q;*?R>nuko{x;epCl5Jr0SDu;2;Eg*i-meQ~DCrtydf&dLzh4 zuk0uP^dLYnMr8V+y3x!3clYnG+y%&ap)wDmpU}Iw-bQg z3x0@NfXcq0%vM)d|2uQr85iXC7zCmuC)a869^5B)Rm+A} zc29oO|DL2B$;);Sr?X2CWAuQweKKmXgR})?28rj-Kcu?=MFN9~PgT_eP?(Dr8_WD>j9x4QDoJmVmFPA?#d zPVmgk9Dj7h+6YP2bs4*BK7s7M)m}H*Gt0(wv$dYl1=x)Vv&&>trq z8eIW`F!U;rEX#$T+Z5YyI7mwT*9WA3mGp#^tVYA3x>GbFVrL}x-Ke!{X4u#rotoE&vlIIXsX&tXqxpCOwj2pZ2h}6_(euo@a!4)- zHPNGh_F`8yJ&US>X2zUcT?H~9$^2~Psk%#C#AA8QP`M?q*`Wu*i*F9}DLBx;>;l0p z|6?EzEkmm^9y~|i9u0$DbBTy383Y)_Q~{d#$Q=PV$4Zm#L@$3trn{k8SUf!yH;GaG zgeJ1x#sx|`d%-M-72t7^gd^oR7b>9)d>C9hg?iq|`ICRyK2QOim>;!5{oX%TDqRYV zgoNbJXkq5+KB(SF4(k(TM{A`>tPE;8zYh^T9SSCX=ifAW>C)Rjz0(bp?SB4!viXeY zLeR5;a4(qUF&*HrntCv54J|PU@ejg}NQgsoo0>dk8(Txx%gIF!FD~`x!uHtM!^iLe zQ!y}Lfr3B>y`Q#vaxF8#gioKmfc=!$zz2JW^6}p6`G(SeEgE9URnBV*lr&c|y;8ND zQ5q~kB6&Dg1nCO0XY99nadHPFFLb;%AY(DV?J;WZ}Vv87zOj5%I8+Ud zjiZ8?#Kg%TKfexM4-E2_6Xl6;=)S^E*YS1W7T^u}+^wyt4IQpO($ZdC&z&W1(eXS+ zve2iJeO-{b-|TpPxq-wKkJS4Uz_K%QQjy%3+|J6&Rz^%=<@rD^Kwb_OoJud8YM}gT zpLTYGZWnUL12jRm#-Cl6(#KlBR**ef5n ziKMCMtxJk06<80Qcj}Ptml+gh5QL);^9=|$01_+F&O2Msegju!Q#6k$pUXZ6xGD=# zeROoMYWqpaSU4h_qJ)N#JZJvWboWBWC9qGG?au@TQSpC-Xhi7WlVGY#RUltOiq?kH zr4Aa_qOIsE!)?0!X7H+X!~u8&1tQ75cd_u(vkP~?LN#6E10F17GXIlPG8&DHj7(lx z*+{UXqa$N?=&^W5{q8D<)tBNj>A?)E{#PK;h?{Wv$)bJw_z_Crk1t=)AS(d*5r@8% z)U#)G|8`1>{M#vM2|6v(sOksC(sZyqcFm%4oNC*l8BsCBO$6alqlK1oy1I1WWOM=J z71E6238NqohBnfVXHmMyNT8ah-F-v~08AppGlACeO>|>srN!EEDi0_=>wLBse*fbk zMEeb(iIUf1uJY^zagY7@`P09xtqnKby#EYh}q3}<*4n8}~ zs|)mxW%i51auHBW4Fl}+Uqle~ANT-7@HU-|MNdzguxsTRjcn}s2_57!!u*`zE_ZswjOl)khEi?-6jfvUX{^jpPBO}gEM#s>eeuT=A zIM*sdOBz6m28FEQJ!K;_yTE^tY&w{crkw3*no*4Hp`_`A1&8!W5XD2t2+(7Pu%F05 zVkS8v2Jh^UT*T!KCmzciuX$ z`^d&=cgAnoAU)YvNL}vZWMIg$PAo2KEu0(?yiRN_e&{R@@7~<<1nuZk)jx@B#veiI z@^~y-gs6qjw0^#K4@g3n&czu)wMv?d$_c93!D6nzzjfCA#p}8e)R3JE5G9npom#lW zHXCx`3_kL8L)G1hmnkl0WN2qsl{p#UeF1-UlX%@VM6Zz~I65%&5Av3vWo1V>AP1R8 z0`iF@!DucHA+7Is>6`4GaHRaXN3aao=dWP@`2z~mL75z_ zq%1ZOutq>7Pmt!@tDi*_Yh@(B@uDiArxze;j^wE%T+*vm4wKcP^c$;%$eEb?i*QVN zpQS;+PEkLNQthtu3~2KP!EJZ{YpB+dCEFo!*$XH2N6f?LK98bNP4RI;C7(f zRWe~^NaYA5Ibf1(7kc=_4ZCn&_v9w=xJ$5$HqcQ*cJ8JSdn?GoCq1(2{e3;mt^%pEGHtNZz{urf+TL-N99({kWfKbNgHulKCmzh5*eop`J`G=PwAJyIYhA+$B_x(0tRV)6R z#&E(`OVrVwfqMe`ZDB;^a6rR{{<7nt{ELNeqPX#l9%f}0w51Rt)9R=_+*#R5+kB^12l&@pF{PlPF=DGS1>n9U)gSCCEXLZ6kzapV8Xr@P3_G;{u z_-O!cvpTF}<2I*MXB)$yP2GTMM9vbf4d+s5!YiWL*HyHvHU!hJ@%V-@a4*QZeyTq6 zppjbG{zR?adBZ4H{DZ>>))%A1jvsXgSzM0gzhTP%rc(Bm+&@! z=#ywY@)|cDx_o@hI6K2xeC)c$;%sB>q~gfqIz1PJ9H&@6Xj&y%wox#++qmJ^PQBi2 zewS{I)m=0p9v2uqO)0^AL}+cUn*OjhF`x-sA2$bTIF@ZMFn=YAOp#vv_pX015t zH^#owD!GJ7ED|iaO>N%bq)3kEBoPV3vM6nzco85RrYhac(j>&-l-ebr^n7#QD4IFy zj`?ltW>3Y`7R!PSu_j}!__28$&*?Vio&Sl0D43tu)+34 z$H1_{YWMIf%5+Zpwp}E$MqF9SQvpnE7L%7q z06)eC>rlKVH#n2oQp{f2Z^oB>P5Sb~sve^W`kkpyIujdv@mUOH7v#Towuw$)M#d97 z-sxm6$WH&kvC_;r_+}~ZtE~;y!bP14CT%@6)shSMA zx3R@ZOSjmnOW~`teq-quSTDgh21;yAr(AE}W2(10RRJUmepXSQ7hIbL^3pt66j#)$ zLu2VlOJ1Fgs5*R`!c?p^sc1sm)!2?uEcQ)y{~RtizDrFhZDg7IDuctABOp`wsZpcr z*kOaZn)LX|i9~4VnomebSd}mK`|GMkeO>k8c_;bK`8r}o-4~8|6fzWh77G#b32uEL zV(S%N1e7#{Zt<_%@M1{ z&4bdiX0$y9TN6FW?Jxh6&0^PDAz^~+Jf7Eh>+YF+Rw;1iZ6orqUsc_9R}wZawXeFr zv5jGA8SyKlz#s19TqQmbvo9#l2gRrQ*DDT}BCrAzHaC8Z%C#dz6?V+;>8WJtUoacO zX1Z(f(`CC~xcKl;4`T9T-VfFgcKpQTb&iUoL8-Fwa`fMo7oJKp7u3aN*sGv32}yoJmt86=Jfo#xRxxxK+Ju?F3KzD{o zd$L8m8L(-#@9LE<)Ft@gZ28#TcKHo&VTVabX=!n4%gJ8q&Z~dKhUAY?mk6#$c9xgx z?3iq8rIg8=-eKO$yd`okzP^+!Mx)F_T9#tERFmN@izkt$rB8AUlP~%~X0<7?{KV(CS6JQ|I!0fx)$v}C>!!^GnI1+C zgC}Ul70)-Q91mjx%_dPH)LvxPHiUvLx&U(#hZ0=b>MgR?^ChHyig*=G!6Jm*PXL1q z7*sjI7y(A{m8;qQ3WeU7d~dE!xKXAlI!nAPjB66DZhO!5=S0&|pu9hT+|BVVeX+#F zzh-q+-}W5G_RvPxh8jNqz7s@qrK&DqW7_Ze+423}%b_MSS*=xwM|{k-R|Xlt$B$P| zcQW0xU61U+a`CWS^hek@nAlj<3WE0c9pU^IgFazxZLI@7>&3q`(NEaq3zgG1Mog`i z(_^jeQ({#D^1UnXVA;YZV>Xe2NA=e&Pmps$a9dB3sd z1=vi!6%|E7*J?Q9PuEurfZ(EwfQn2qKVAW^rsPx3gaiu*9RA#(V|=n(tT!M*h|-=8 zD^7GJ-_$D&`tG;GRuS17{3jt=&=M`r(z0Wre4cD$GyCNfosDcP9eSQ>I^t;nXHplK z1<*hp1qtNK!(rPhQLxH@KkiL*=>ve{pz{^XuH=Y1JWd+0MtR}TdNaj$g6zw&ERFn6BUQkBe8?!!(E=i_0nC{{JeL4q;LmK zHkvyCvE{+7p{L`9|DsXu?qB_fd~_bj5`NzK9Yl#kFY$|KY28e2QWo}$*6he5uWT#8 zD)eS(oo(RsS;;Z27Q02Am)CR^`gUxoU=X$G+E90Tj7AMv=u@kG%nk4)Ed;VxOqH%z zBn~Is55m86>FfVVnszlog4GB90<&8&tI4zTkW7F69IbGY5c)uSlMzg=Pfumn_nT)~ zhAKSv>m2V>55H!%oa^<^)@a}qu@Qp76l{&Da~ZSwVgA6ndeYS<){H=oPS6~?jl7s#L+}b!qG`9o<4)gZ@{{36m+nYP0M;^Kz5l`3} z5kn$can!LA{Q2EG>A(XM=!aOoH#FXof0thGFYXm!!hzJeb zsaiYGd({JS%5>h|F>^cJl@yJNGn#kr+U^<4v)y5BUYU_O^!Qt5tLC)VwHCB~KmJ}^ zW7khjdbI=Q%t*aMI=ZO{t+vN8kEsGgDyjL<^J1rY2jHGwz=0l~ho|QSxRC=L8)YPn z{>AD9^vE}~{@_T~RgkejJ^CU+1y)wNiN5duZA@xCMY`p}@q=FYPIC$Hd#g?`5Xzf0CCMsU243G+Jfh*xA2MT0Gk z*ax}GXv>3;nG@VpE2uTay^F1K`%QwkNr)SfKH5@HZ0uI~Yf5g9_mps%E#u~Jdv{r4 zn_RRURHrL1NzCV~cRY)Wm)nsgW~DRo5sp365?!L(3|9$Tz0Qf3FDrfWDcJ!Khx`naUtbc zvqva6PRM|HeK?5;S+|sJnF6*6PB|g;%nFl&=nLFtMj7J{gBq8q)V-<$CDV}(c7!I>+_oGH9PL52-;-LiN8+bX6DEPahN?Dkw8aVCH|N}o1xJ>%gn}!6 zt+w>DDJn74Ya>-*pY0N(Sv8qkjzRwmCFh9JM@j#C<~qaGxT%zPNuZfy~c+P zbq`)Asod9pS4=Y#=P>YWg-(7i1*X~O%_7e;GczT6c5mL zmsV;+w6RR)#>yvNMUzvK^R=gF*|(T2{;|W8Y`b~gx7cm6l|5#>TrstncYUmQ_ot8K zcygyDD1VZyU?<6PuN=K$3uv?iGo{2arop=_Pn5@&@P3#E%BIrjH_Pi z)0EbYqz=p(tCsU`=DtY!M4{~CupQL(sq;SiNaZM!tym-2P*3!6#ZoBk4 zW0KdN#nI^%ib1^Y51`{vlkLN01LnyX%bMTa2E$o83$k#6cHgJx1kX`TdzsT-uH=cQ zmT(wqi5akLDYBSF!h4mnKy-GQAkoEDjED%;0O??@RS-fzE;BdH{WcvBa#2YkCJ3L; zjf#xrwj7#<`jW+#(sTJLsHR+o%TzFZQpH-cjBT53UB^1B1_w&H$&Cubl^HDP-b1gZ zaME|Z((l9NT$cuXRC}$g;l!AjcoK5eDfF)OaZ&N!%Fh>F-vd?bCtbS=%$>HB$l-!X zLoFq8rmJ_cUX#5Z>Cm`he+kYsMZfXYQ_WKlS(TJfTC?TO?Ey5PorOoRy3^CilK`ET z3@bWwb3Ah$DyM{tXDp^&RaB#jxW`>-&_%fXMxiTJeTr4cOYh1ro^7;5A z{zMRZ!3q3oi&@Jwe#2bkbtn+Il z)hfH_c(oiKV<3Y^O)P@tUP$%WcfFRY6kJc1_rQFB9MF!tY=jd|jgUmAv2(*Z`$;p3 zY9>PC;3o6_W+5$7{t~rB=u$aa?bmV^B8Xw)O~Le=aD|0nnux}mn0{(8p|us8kejLI z@3K;%>Z8Z!?aff!kDuD@4r^-LXMrj$D>`memxK)+ho4ZcTe>E|pSzK+4EAu^$BYoE~SBhclTS%SxHcz_PSFg5Ecgb-}N>Y-8M2D9bRlN`* z!a2y-w=Y7R5(xXvS1f8Nr8tltlVG`~JpE?3U)BVxmP7e$^o<(1rM*tU>exIh8`F=N z;d-^n+*7Ra$DXuDdQ)atwqOX{+G6}K8Eulun&8Cp}L(nCZPSR*n(rh$lB{oDTJLOFkqJn z0LpUlAXlj)yX6D(~GEvp>I-Iy0u@UcgxobYNw)kfxekIr{-;{ikfAe?ZW5&q74J137!-?2*Xn z(6i(FmTc^mYXYe0h1ARpwbn8C#RYI_k{D-uyK|w$HeI!Ptk^)M)^~wVbaH#0A)Qz) z*i2_2T%}DqT1kg}f>}+o*}Lfyeh7uzLyaV z3ORAiJp56HdE zbO~lXomd{!YG1Rg^*A~Ds^5CIINhJ`va4Gv*7GFUJFGkoNf!xtLM)4_V~4C)^B0Oo zZdLLnblST;QP-uK{NZBCOtgWkZ5EMT_oV&`>GfABdreIogX@A;Rc1SwM%^_oZo~TE zH4yI*XY~mCQh6hZ(R}2!{r2HeZHQ=ir*gh(J2kTjMlHvX?Q4?U`<=Q-OJsJAEU+ua3n|ua;cx*Y7v-HZ;cMMzfMZyMH7<)$^&pe=YR*AkdeB4BDrr9-^?} zGIMyLMZfRdy3xdo1%`Hd2p*|FQUzP#1ge~{IRJQ*AA6C7y&7;F+Bu@5 zZ{ImmRao1FwkmXDC0P{|FacZ!On|>791ACgM1-y6qDd`n+V=r@Q2QRj{)ot(#_F2h zLyOOd5BkmLIn<<_fm^xcIk0k+`;88zH321FTLUtEu#R{Fs2OR@nkC~(xD=YAMOd<1MATFr6lMt zIzbP+xvecpET9vtBI8Hd$sKJ=1%lvOGZjS$2Ihk<6St}<8F>8xgmIdN^@v1@Jor zSQ5AzE35&B_)hX(E@TKMDs-2WeL<)#`cLtci*8EThoju+h{A zm4S@7sN=^^qQ}b;CA|D3=9lQ{=;r@ruEoG16k6qni&=1?)M+KVk%IH}MKmxuF+iiX zK9C&ME5qCW`sd6X^2-up9VbP8_taNxCe8oYtS%t(mk!cv?4~Z*QbbSpe;=f;UTE!o z;HR;1lCFqq(;O};hbtl~xou<>Ihb%YSm((8_s|RA6ym?UU>yvhRs0Bk&%ntk_m>v9 zE!+YWR+njx0SnKP@!fMohDGFj!P{8F|;%7J^CBRl_Vb6nmehF}M^j zN<(hh*WDxktSpVT0agEXV<-fLjZHx6jJU6_&2HW>0gM9j>dhkp@pr41-si3*8$gAk>6F2%5&e^thjh%CD&kY0XlJ{ zN|E!s(On;0SfYjl7QBP|#48HZ-hN(u!)H$kAW0j$)8* zA*p(c0sT1tKC0wrXzYE^4UXc}f49m9x1zJM@YZoj8Xb=LT+W0)w~OKu@Q_sfkZHG& zb#7v9nV;1XK@$5iVR~*D@0M{LtA?e{qdrUl-Zhtpdm=V<>c0#&b@zAGa_2LjS#jWB z({*Fbs3@_qgNq(5)-9MEa9P3wE-5`~-R(P^<>Tbs3d-CDrR1exb1VPhDzCpkhuZ(@ z>^z{c?*BfHG(=QxlG4t&QI}+t)ucg+J6i}B*|M@Fqao6rWNV^~5Hc^B*(!To*_CnG zJD&H?|31%op65K{oX0txI)_}p>wA5_pY{E`U!TR9VFA7Px##|7vYd!?y6f3WEbsLa zkxq&v8{M`C%xl_NjIKAFS(mZH$A4(P?n6r!o9ujv;)2IgYEQP~h<*!6bbP2Y*HK7I z7b>5H=A?*_ln3etqcanXq-M2@gA8H{Lr?yi4lp&WdA2 zi|t)}c#{?7e_Qrju4&)8!}!tyDbP#KnCF&{cE1H9j|h9HSYPXA!9SwUiSu)dXA=ze;iY9Z5=CN z$BpB_aAR7CkL)rR1B00(uet3Fk*XOX!U|T+3dJ?>uPrR^^uH1%PdEU?xcb>%vC$sf z@ITOcGrHiaH^$=#djX^&yn~_2XvpUQOKWbjPR_3Js(Nc+RoUo6G%BE?x;$U!`8YJR z+%l_Eo=oN?TDSGwr$d_Po-p_PWI`98KWmuob7S_3HEYZd`62fqxmH;WSVdfPxt5c( z^!WWn;z0cscco!A(X)28s`3b*Ez9m}U2ns}m=Y4mFSMW1$)62tzIXRrr-4X7ns8&k z+rKN0I6X29?9>uO*0VlKa%GeGt1BnVhza5c_r)fi2YQYM;=3(Z?tUzh^jJ!Aqq}C4 zuV3b{qZ}Uo%+dRjgNr<}I<{LCY(?BAA8PWEoCN2m)$P8JH~Dh}=b#qA+5rQtd-G)h~PY z)GMhv9m73#(e>kBFAnS%PRgq;E*|dTIsV5wHu2^^(fV8tC2XHiUS74WEu4cDXBO4! zsk+ldmW;cUt#;2X&vv31SFPruIax)xXBZ?RVw~O;7WUpPJG)B$gqJ2cBfKJpBFDmQ z#OvOC%{|V4NL@oCH6!hYDhfIKYL%E`B{NUn1kRmKBmZc*YQ8FGkU8|X$=0@%2i%I-= znh;=YM_US$mO}h!npO=HTU97($i=Ti)mB_NpZ<|{z?li}f6j&4%=K(#dP({>*EeSt zd{|RvUxz-hAK$of&)!dpbFwQtzg9InmwjVjm=>gZBw1vpp+PxXmeR<;f2p#xH1f;P z06B2+T`i-H`7brHWmsw6D`%rVla|U93+IEW!KnyT7Z4WyHML{x{kz2z@`WTDUj4>NrImORk$~Bljn{h3Z`^kcq&9?p}>5 zBTLfjigFxChJN#2Z}n)kW*YP2{n|a5CF8BNb^JoYjD?-0QO|k&w!-g-B_)4qEX^ny zVp;P>Sz>l8{G40Tr%!ik@_nlw7mRkATRk|2K7R`{`b5UxYp+Oc_iJ@%qj=7%@G&uw zAyd8T-s7}qk`DK3C46O*=1nP?6Net=lKvI^zJ9JeUzqn*Wv+i4$O22d+!vnxt=#3t zKAKY{l&)2iY=#4-wXmed94i?+lq_0aoxgYp+%B>vwP4`o+rDjs>Bvp7$Y)Po@J{NW zev3ij9}j&ImGDd^9vmK)&e8`4KUM79^jwZJt_x3b9XpwBG4_38_A;@18xdzVID1+O z3{k1WqcYBEX4G;Li}>zVMFf`v)-lTDlW#_JP|_iyz{Fw_ad|4~k>|Fx{5}UqFVhA@ z*@6*nM=UfN%bAB60?voSaZlTxS5<6k$1yL`&z!Uli z&Ex})mc~r6Sy}V(0l08PO6I4jO-{wuJ^T7B-K`v#BSP1?u*s$@8@FwH&^je)xUM?F z#43Nr1Q{QndvI`g3656AovkMlM4^MJ-Dwx8bMCIDxWk`l#R3_o#&uXOHKtXY%#Laq zHO(_UM8WsWYNC=8@TpGb5lZ9z%I`id&Akj;%Kix3f7(CXd@952s+jFPqsGMa9Wk*$;^3a4wh>t`fM7Yces@yfDFrN|9K&8H*8Lnv7WTo%%K z!5@WfiOZkiA`3bpjgKh1mdKZVjqBcAFkks#{_yFB-Ar-*{;f&c8m6P4;L)zxo}H%c zM%%i|)ql>{g4>cvhf_@UiJOW6nq)3=Pk+Bd_pD5~(-XE#_Y=sl+P`JBS89u!o`>yH z7rWa(cvVR=ucc#uiZ$fm;P~e6Gg5Y=krva!!@riAllQulWPqcJoihY;ZG=?W{jGd1qyj!t5C%Q$9l4GW*B?S_e|>!L{1PxB zS+davTuXE9K}0xMtS5UQi+>y4#d~Z~-m4U`pz>Hy*OX_LgW^MGo7 z@3s5aGdJ_oKe+(=z?pw33i5Cv?GGEGo!43ABuLY=B2Gg( zh~QfsEJ8IkF2^)IPr3)6`PZWDnM^Zzm0br8o~nx;I4DXkl%kn#g_Dpx?9O=MHP<>c z@Q!vuQB{xZ#-r1L+*<#fBZWq#+@z`NXjO;0QVt*x(Hma&#yQ-1ugG%tsGF))S)K4B z8CSRWOTkyWTvJ+07YFa{pr;Rca1uJ$WK{^ym=8rm@k--G2Sbs*iW^?LmHzG2TUkCw9ke{hAF>X|FVcG9*xga0ipu%PI*b*Ja z`ohQ)D&qH`_rG6NiDu!?tpfD+H~r{e%6~$e@Ka$j^X_No8y_Ex%X|YGsBeBy2CUqT>Nj>hsvxd*nFS)o&F@!l;Ols6S+vjp8t$OsInx)<-wCL8SC#s zH}ds0d3L0)f*e-LaO1|Ks7*{v{Y>Anb9CPhik{BGP57rov{p{2cp5hs{JnFbF{G!r zW>5M-BfsK%!Sz24f241q3oRlg>J$gYr+i;t(_D$nnc{^QMIXQTSyeg;8<6~1k@$nSvtAdAw2Tly!zAt=> zZ|3ob)(6ztwbyG*S^0{p*z+UbnB+B|Z64`MP-m;>eZNV`P3y=g*{P_wo4S(R;X%R6 zn5eePQOv!y=y)1>gCa!rce}Dcc_TE`#gkmn7Wq6PhHZK%qThYtFE>jR=>+&xS|Uj0oqg#Aw$AeI1rW$RH8_jJG$85H> zAKJ|$C10Ox=`)g}ESJ=C*c+cy-C)#$G2_>6W)`)#)#GH(4;|&-~e-{wEoa7 zlFrBE8!S=U;%}7ncZf$1SB}1!w>RxQ`%aBhD^rMCE6o2{NjD4cJL7JSm*Dd^5sx+% z>zLEBsNX9EtE!|Nj?8}j-N())QY2JW>0PW~ClGJq_-$0mV0p1uV(%*ptD1_bvVPr+ zgC^AVNoV_Hqwi{;ZZFLIz+_SE?R0trYbMF)+`I}2zu&<($18+R?Sj%0-FEr;5`Sxo zn8~2HH7jzN{;;)SOD6K16^j$5n}hFOY)@&$n#w4sp7We$mi)4D)N<2wV1&f{#MKrX zy;6x(jdAlQO6Sr~Y58jZ=t$nh)4l*vhwqq;o$v|E2;P1B0#7l;=6IPWIZ=I^_54B8 z)o*F(O}x19a9Uf`)`9ZG&{>nwL3!Vz>6#0o;U_(qC(jD2?j>KESGsxUd40^GXo=0O z89w5-Ek9c}giKxYzc>6{d2nXhv~_E^gwvRBqF#y(O)@ zRM-1wOVfHeInO=6g35QF8rhPM?bG0RDT>Zx>Wcy)M_Tz!^CW09>U!=WXl(=~R}u7> z5zgkq%rzA;A9xJ=l&5}hl^oO!uRr=xmh+-}ZYg9p`vQv-a=lz$bVB*FOy2F(G##x^XHYfcw#$vU{jGCCktVzieM) z)s0-QAZ+v-Hw2)5;;6iH=T0jypf~hXH8jo{7(6EmCb?RMNWZouuwH6sxV86k_I8}W_T3%INjP}89A-q`<7bN`Ikf0PO;`5+kFr}8>doPG-JIw0^K zcw!m&;26_^y?a-QDFtQ!5L2LV--5>b8|8Ei#6m%X{Vm-@nOJzBVXsb1OgtkQc;}yH zC!R?hD;fweB*X<11Zx;5A0wj!NcbBC*iRD=xAUHA${Gz#EroM%Hltq#v)GCL2!!Tp z$WZb9$N&`N@x`~Q@dcuLRl&Q(_Q<7t7DeL_rP!wELOi#FLhE3r=wY81jPJLikBsgE zAAxP)c><{y79+p-Ju{I+L8$=Eh$_XyU5N8yNQdZZv55qge4o8Jd&213++U;8kr|`4 zTGsKp4xk}}wE`52_k#y^fqtsY`UgQ%u7~8*EIUh-CYG4BJI6#f@}J|h51CuQ0B1CUb8u)Z!MUMKxZXH*LDIyR#@&GO-l_%C46 zuPSr@H#WV-rUHc8>)3WFg1QW*0*G}Vi~c)!RP@GXBO@ac_&ktbLZ?a(Ma2OLiL4?q z@XUJCsty%{9t)KgFj2n0lG`+uVq~Mhe!PN};g+zf27wyLn`9fMlPBr%O8fZvH$b&Q zs3^3ww0zB3cS(N+u>ho!=THhtPt~6$nC2hJz&V0Z$)l{S436w+kjNa=X^G_8$n((p zS~5qLMF7%TNYUacLt2>@&Xu#B`0tSO7N$~YV6aOAec<`&d~PL22ax4TD1 zEc1TPw2NJ>QH6N5@R^KjCec#3Uqs{!u4RV;z=>D|Tbhr4>}B0ABvcL7Fo}SF^+FXZ zPT+ys=h2Gz5*227C@BNLp5sC@l>{L{Q;a&^=vcG-dvOzRl?2!duPhbNtmoNj8D)9;aB*j6XG?*5t^rq|HjRSfZA<{@t=!PWiJ_HE zRy!L@4{YF3fJBW}K^u}TQ}H8tFPqv)Ec^HGFGkMpyM>+I5ZI(oEfh~mDloH#w66S2 z^PSU9x-Kp*zO?zu5W!7_z?+BQMSi=l)Oju&0`IY1&u!c{`0?ZGLOLJoAq*E=UZk$H zCEGU8a$jCy(5P7sCva5&vzOc&FWqKo3{<;cTwEN1C@LngKpc1}i1Lj)m)T=hfqffl(_1 zb!+hGbZte22vIam)XDw|_M@N$Q|$ic)m6)J7;_6NqcLoc1hHwj{OsJRL&qKHo8Lcq@(21Oe>SJYBvt==t>1;N zDMe2iIQk#0>2V|Ba1Gr+n1M%b(X8V!-;ch(mSh6wjt@Cf()NX)nVloVV05VSGQ7X> zjTfLo!G?UmV~<*Q<(=xxwf}jFfRlw2UMwoA<}hXHdhS5oEPw8s;axLoT3VHm%o7Mw zur@BK(oh!`fyGe0Za=j^YfbkDM!g>BQapFnr#tKE%Ts0tV>~a_MayJEQb_=Xu3Wi7 zNO&_RYbSD((F@5YJLiQ<93jpJ#h%o|*x2}L$#<2Y!x=f{{*kcKb=B_eElHx#cm`;^;&*L2w4(*JSNSJGPU0Cx~v+JL@=- zf17u%BwsVh;e{QCo%MgdAuZvYCB;Lnv!+RX_w6ufp3QR?*PCwa11{1pul)> zyZT=pfiEfn=&T%PYJ6fM%}G-1ZDQk^SZLaaSOo894D@Z-ILq?SZ_yL+8YFVX2=Pr` z@$vjXGS;r39*@}r)`LIHYT>B3Ah5&qj8rFnu^!x?k-PGotHE%E);9Rrv(Fe6apUW& zd#dhKp4(b<<{F@+6$*$Jq2bzM5LXrFl$BF#3SPbP2?z+-*c>^!%hQ9+m1u^Zhs7eM z8PtS}rHA`9~YnJk^IV^d6ax#6$KiS`Zy=B{n=ZGW};a;pdbH=Ht zGItNJ#^|LEq%F4-400bma+tK*M_6-{h@)8=Fz1X4IbuBN8^0HY^f z=G?NyV2HuVkLo~7ilDkpZd#cum$NVqTz2>T@!a1c$xAoK9@So}?&U>VR>rba@oeW6 z3AZccl@yARWg~Zw0li+bw99j17S5muLI>jNlhFo{yeCf1bnR z7>vbMn3r~cC3|~&U)LwPs*XWz7I&&~kXGN~6 zrpB0B;0{XX@uk^(Z235$$q%lxR$3oS=_O}qIY)rFcmt;kKI~_;fgjXaoQ$3x6%hw` zf>N^#hT3s=C$5=j-=4dOf>xaf@X;c4z3{u@nHH_rmw@y1GkB)jx8ta(K46|DEt!@P zB1WGdeY+GKbpQSlaf=pxpqiUZ5hwTxOu#71!*ST7hDvi*_!J*nk5K1VIv8Zud`O=8^1M=e_F=LY3gZse8)Q)q!_nDoU6 zS4ST?!6oOBXTUXZbRM)3V&95O%g8(|a9`wxS>_nE#k2&&>SrQ;DJdz0a9{Bm>C@+m ziUgY);AbCRJe=P!HZ^rLT-?%(5Il=rE&X;}H;UeHX1F!ed}4C)A)2hKKszQOiV6VG zb~_l{2{tjfl;*;pqaa^DB;G5V^q3cLR65<^z{GA34i3geqd!Q~?>5p5*g(INN2J4o z=`F-^%VS?zR>TlXQ`eWm6#KHtbLz(zc~jGPoDKuxEpy4Z*!wz+?ab&hetJmP4A!=l zcu0(e(a!_)lA~7Y7wvd4DS$&zjjK>#T7;#1xxmE4WCuC~Vu(dVP+4W#_%?)ywA3_` zONj+5xz6RORiM2Z>PN3al>T2cnI7Aml76D*6b{rzLHDJ*Whbf6H4~2ob0gpkj#iXjE}R9f#;!xo-JyV75@c6m4?*U*vWq zLLGQemO@FJ?}Y+`1gQcBpK_`d#7A@DEMm$Ku)UdEKz{EV9Bi+xi#+y?Zq-iUJ3xUR zq3bQV$BuuO;jf47R=G(w{I-GnWHy}J+R8U}` z?9iem$jE>ti&%F_Ylj(dVQh(tiV8kHI>H5JP6G0dkuh){?_OctNC-jX{UxoguCA7> zQvpC_A!6bhtZ6NltP-F&`diqVFzK@bDcP67EL$bmBdCjuH1EpG9?8zlb@jF5e6aRi zqsu3n;6Li@(@3n)>EI9j3NFT#>tCE@#=BBL9)ti`4t`x`WC-cnEx?@xfYZ%jK;jW( z;+`_vnVW7{&WbcawSO9y08B($=g@^?`V61C+{%(Dlo@^aAbKJG!Fj-Ci?XQuf<58+ z9BExj7+yl~i(skOeP2P#Fdn1BWhjY&WAs;rP68nxHT|35HbYafo`Ay>V?@$T*e*U5 zI%W*&45ZCat0hb#5}HEk2Jd>-oqGVCi#@U_rC!%&VC*M diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 4d64466..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.777743,1.969821,1.083130 -2048.000000,3.676453,4.038948,4.553192 -4096.000000,1.687552,1.638912,17.356241 -6144.000000,0.003072,0.003072,35.399170 -8192.000000,0.003072,0.003072,68.041725 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 051c1b632e423b8cbd8136f2acd25b427a343b80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24717 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 z z2x!a#s&aCwP;f=L-eSo6g=qJ&0Zy$IBeicrZbh&?Z8PhBux!D9?V-#Og4di$7!kz}9oMD0UGehZ=9KbF5c z5`FT%tO$MgTOgNgZeErs!L6mXn5ZjzH)HmsT)Ic+xzsEJkh0lV&MUsH5eAJH(eKa4 zdQIh)7j*%I@51Z_ZLlRJ zf#TXsG?;XD4FBt{cNu};tC=p@`m2dc6|`}8bI?Wfk8pcW=XHLK({>S(U+mase_nCCH(Jb7L;$WH)vS~MMy zpLXiUS7#SdjsmmhfyX!NP7h3(;?${4^bQvbxrNx>@yLV_CD14F<$mVNvvR zAUH@n5tc1fvyz-y>9xnYzm^Sm>6m>WWhb+Ptt)3Qb0wKsY)UDsXhXMO=08 zS@@BHY*4v%2L@5){=6ytaaNDmsuw)#dEOJ_(}PUk z@sV)wD&8emXJJrrh44!3(DR84Q?GR9XR*gYlf4o5xXzyQH@DKzUpRg*l=FH!4gI~h zR3-{WaxS@(gTmi=kq0~|COUh-{@DY5f6F%uKj?0zJ0Es>!p0f05tBp+*tTn;)X{u= z_Z@AgT5W<24{mhi)6>r>lk{Qb3}k&2}j&6Cnxz2!B6BB?N3# zI5u%SzjBkxS5Hs6wW(bu>#8=?hg4K1{fIkAswnS)^~lfNFje?FFv7Z`Eb(0K0O zNE9-#!N2sf-mg=A?VlCXz<7VPq6UvYWwz;%pI)E^ZR{`eb4g!azLy9=gBDb7l@N-6 z@;iC8wFf6Kfc(K4@fR;*muJbD^z`%1;5O8a<& zlmzh(tH`tK;DL2Mf_Z+M14YIb?+xBS}OdDQK)S8PG9sy z%?!rXpcTKWa!JQy!;-#dobJeq=@2aC?`$BRDtCATF0 zU8E6*o1?b5>#SiaTHh-uT{^aCfBlInKHo}wE zhbX9nHEyKdstNyT+?j-rv=ycw$)Y4{KbFHE6k&g^uQc;-Id8s1&zqZm zJ(^jrIl|R`F|?|1i58}*T1-eP@+ei|#kC8PB=!hw*Tq{4lRTOHoM7`2eDPqIM{eT< z9tRk3Ij=kiV?4r*n3)5BB5SDTlvM%X+MB4_t9HNl^eO?h3DMClt4yVO(e=B2ICjT7 zCi`eKZyq(3=Kdht?N*i#l;!$2`NzN1_s^+<+{#!X&sRHojIXe!bzku<1vEm!(RRZ! zb;vDDxU0RrK9K@;o#f(Ea5T)qHOI+MVG;~HJReMx-Qe;;<#)KH;TiH(HL6AUXeUP4 zMbGTk(Lv_H{y-n;$w}n~t_IkC`##56Zqo@H+TdUG#jFRWJ-EU1-7Zi4>2AtUcc_Bi zi^I0X#4ZuSyN*$2%#QJ?zgQR?EE87`uN6*L8%^1triobFhqfV~5R0Jv~1II2PA zULM-_MVI!&hmNdgC&$;ms_~azGYQZr@Ad5PnCG!3mL%94Q|I%-3;l6Iig8=)j&b$) zIkG!B2q_)Dtge_p_ZjSFxfEznoHuXWcnPLeqz^iRG~WiklEHN^Ra7KHM6yk8YItO% zpa%Lm#nEhb5Ydv38wk;hvIr!Cq4fzTu z{ybIWD-`cgq9P(9ur7*!DpWNy`{Ff$=vn{$H(@mSE`;=H7B&&Qprhl`_x*E-`zuSe zN1O9ji)W*DeDr@kxM-VcT=zgAlSdiLWP^IbTujH(`E306;o*7xv#k+ufBw~gu`H{@ z(pB)x^?jbl{Qj0^t5;ae$)01ES8PiU)gKfxqWe&8oTQ} z^Ud9+O-q!pK;In{px7&yYK~onraoQ^(|P?NpNT4PX0V8fjn;U9{R(dD%vPmP|8Gsi z!X}U-oY!gyd^Gb$zmr6_n60{WetybN61$XFYjYxI&(QzX_(Z$cgYU)MivouUc|(_` zf0*0}jrg*D2{+!mq4FFQFs(65Cv{je)|)UbMn*=EI~WB7e$(xPO0H4kDeQ+!EU~_T z$RBr>eyaU6@6R#{s2N4U-#3{`5@l@Aju4cfOZMm*RjU+GjMZ17&?z*T(#g)BqY$r?SM0Di;2{!`Zbo^`c14=CB58TlmWw^TXu=)UIxE5w{1w80^-w5ddD@ z+Iy6M)7m;e>IEH_fv<6x=64*4%U78jxQ6Twe_;*oLujh!YPa$aY8&~aVE&faPSkY7^M|q|yS@S)jK^;BE?AWx zRywcl!#y;9+*IxGndZ(X)r*VyFD@0?+S-7<&#vpVTawG^>z@?PPVK+12l<#Z}&HL5Fu4lUr zjL~L(604nSHu;gbT-kfY0;zHPrdA<*9P3`#|c%W`t*YMZ^ zo2U`4%P46}yGRR$r(di}I5g?@f*ib!vhBAaj6kB51|YG&Or=ps^S|yYuU=@9*sfUO zsQYy~s3})cX5pAxY*WFn35OPGyH2If%+rQ8Ts|QidAdginl^Lu9*%hPvf3~h-@_K2O29L|75}O<` zvUwK=$+#(5Y*xhw-TT$5>s*kT$eeZ(#*MeA5h~4F)4?4%i4FGP%tW=tC>i@BZwCjL zt30Zz-?|DNbKHJDS2Fb+)o~G5J#!}iSe{<-tIAe7#=wShnKp7`jO&iKCjJ2)OoAD1 z1wmCAqJ~*Ddv|=@g+?y9EGT}?VB4$taHpM1n)CP0{Js%#=_ihR-~_GPQaYvfP?}}D zG;MNtO~u`nd%1EYO_D349U49eaxyA=E3fc;Xcd}^y=WaC6t{F|J-iI_-3I!)kQE%f zYToo$qRQ}(t$uzis>LP`BfN~f*HtaH`55IrQA#2q_3LB|MzK`4(o>(MZ73GS_s9!$ z^yN}|hc!bQ#l|9ByD!+?hzJ_4g+z#jJ>cs-RO6F_`a&d{Yc7_)EL{v!U{@(N9GAA! zN_+L=i&uBKn@pP1z87CseR}zE&gEU=?Cv(5F@wWJkyOW1Deu*0Yub}_*;Z5-xGafs zb6-TIO8jj%f05mdsJ$(1r9}OhXV=2x(o_5aITDZ%D-~)~US-KqCiWpZ<9b)Pd^9%3 z+)H>o?szJzPj~ihjI#E`(K_kPYl~OoP(B)ji`}+et3IWXL~|Z)e`g^h++tyQBtwTq znWnm2Gnx|@r7$A?X^W7(_@~*v8@FUkdABvZF&VfPHmhFdRQ^>l!KtVJq2sb++2?Pj z4nrZUL;r{mfv8>!Lo*Fk*LDL-&7qIaxerbTlpYd!(Kq5ZdHA8!&Iw-=@lO`KtjZDN z1vy1|k|x{P&Ir0H?s>EKw#|;5yyEFEYtmC9%OICLhYq}7ZGl43CpRchdpUY%lw8SU(!JpiS z(VcqqB7v^2xs*>WQEl3~-NN6CUVLPipskP>yK}ol@%I5&d}xb>_+yLwM^XDnSZhSr z`O|Nhp?GqtdwD5_hiP%KrTyuFM^5*42WyN)N#tnih8-p^-{{Q!u)pFFqELvHI(SSM zbt+(&@OsXY%k7^=OT)kA5fl$m1qS7XB)dB+8Rx z?^7C{N_=_{`M7r4KL)K^`ZZyM&D8+`tsI|2jKL=4`MWw4<{H^~AR>K2Z0%3(v*4Zl zmSV9wQ@cr^f9=_)jnR)KI?F)#UzzAeC%En)i#hu8t=f#ln2Mc z-{LYGb+T`^WzFbP{N~pz&EsV-zFZtGk~VK{AL=OG2+e~3>|}trLG#=AAkJIYRwny+ z9d9~0K)b0*U8(S|Ad#S!9EMTl@x1LClS8|J+#Ud@P<`AF?n%)%L3mKw^>PwQ7a!;~ z*T|c`j()7Lx8Y#J0zKFC82P0Gq@XrAmU&C>Pg>Z@ucUl@{WR4wP1&c);_T^sE~7AU zSFAU8%tZ{R4iR8OS@wYQws7^u7)tBWF2W|rF0J_LQR-jkM= zbt_i3*oYa%-|+b2kH$4n!*|LZ`qH2OpQ%pkmzED@UmCSV`+AA*)sJ0W#v~g#NQYZf zv-5n`R-{t)deuTWnpJNXQd&VK56>P6YF3)<$#zT{BUet&b`M{E@8op0x~jG{MVapN zma_-8po&&&ngI4&_2kBjdsD-oSs(y#&oAk$P16iQ=?B`bZ>!p;flV>a*xk_4#$yCs*znz>roy60?cdvgUXXi-#)dd z+&v}b249_p;M~xJ$cBBFa(BFpg!~qH`m#y%%+IVB1+SWVGmLq7(98|&0nTs3g%yq%Sd09m z+St2z1kHKQNR2yGKQdWQ2w4)>j;33GOpXfmx8q9mKO1>}u{L0DiTSH9F3GjkE?>V{SdTvU%X|1n*YP@=_?0xCXVMi zIM$+A2&wBPrlI&fnzA=~OPnSNcX^Rr@`;W4T$FSzFPCWpZ)&u`PUXFEDA^PVcGjcj z+KIa8R8Ud=qSe9jaOw_*qnxLUD6d8APmbP`A%^}Rmkk}t+9%FDeR+mwK@Gu0AHgN0 zsWlMtImYDaxCg~ccE;Oa76l(raFlAN+3u`_Gz1x>MUC>yu&kh>JSUG0Q{B>?aruGG z0d~XJyi<(F+xxsX30bfDlP;2e)>3ryjRh~;RApc9w)z(8i@!>2pqOlbcEy-INtSb` zsvG<4*xR_+I?3jA-Py5giT>DQwon3ZwAte-!Rd?8cW-CJuRl6!8@Es(d?LbZxbSeDK6LQaB*t(6t|Hd(*n zV|X5QQl98XRqu@*Zq^&SIpZQ6wETQmySrUap>BK1HR$QQedx%il49!4in-4+kQGHm zvxw>)ZiyATFF|=ru7>d$>gdUROb5~@s%}K626o%uAXm27g>8K_I-USZfHRv%C|?w< z6sc_|YR!04c_J#ozozycZ|r%cQk~fR_I`vmYBk%M*wonm9RGt-DP}U_Hap|#Y0ho< zOIFUN!|H5%Oonx-RtoFq%qy&?jf{l1N%VSoKC~hHc5s|Axvo%;c=hC%<4lWJiUVrt z64k5DysKd1-LRtE{czo+>xOXZWzsA)v%~f7Iz7!iGqzpSsiDix&*{%+JJ#JDvhmA( zd#c1-o+;Txem0SlnG}{5SA95NSNpl(`8aBewad@De3RB~V3Kk5^fYc^RIkPBEmi!* zyq_s!e*K`48%|;LPYirJ=Mwwi`5!Kf#xIwAq$Q&7xD}s!*6Lg&j8VE%?-E^GFFbR6 zmAZA!ln75nc#Bw^v&p`KV5K*&_w7yJtRKQO!6a`h$yirrRlEkN)DXZYVgXMZ=YL6B z-{)KMn`3qk6>t~q)VS=c+R0!!= zx@#D2bA3F;{61UZ4V$PhseGM55g#)BwiQ};u3j@mvY5#qC+1vg$9HZ==1tlgr|z)Ak31Ca9{jwbo}3}Zl~|(YFMI`{nTt$V8-7UDy4L1ALP_w&Se5Cnlnl68u2~J0}T-b z4#kb{!FyRrmb+0=B+zUKKD2yX*4frav9Tx7*`4{85l!n(w^xpm-6pb0+7rFn6Z|LJ zD)|FzLF7okkiNm*KD(1&Q!Ic5zznr$5$!vJJ+MwbSY|Wb+*>~0`{f(iV1jJ$t15Z0 zr#z!*VaU0qLlp1n>nrRc@$dkQ8?PClQd?k5uMC8V#Pgw`S?_jr2b#d4-dsXkj3!Z zmoNikMtmAbRZSh82PCPGEn-g~8}sz`)&lm!q9s=QbFs%^fXvbWb{<8+Sr(Fg4Zw~ft!M~4*&TeV=SN3=Es52iQezL=fC+a zOsSgzm{$)0o;g!J{7ckae>6bN*f?pbMS;Q#Gl`6S72RT|wDdYhiC_17{7x2 z()_4|+0@rMHCXjSVN`FbQr*3~4mM3W!e|Kyz=t`oS2&D}j0VtJvFz@H8t^TIL0Pkv zU%_4$R5u#}Mx=K1=uIb>q!>~+Sl3Cv(8;of3u7z5P_nwk_I6o;DiZ+#i2pt9? zni&wj^?2D<_a%(Tyoau$K>*#MY~WXq;1dS%ARmBU&j7}=Us#xVS9i6V4$zoKJ;*}F zw!LLvZbw8YBwYQmj|3P2)O{%?ysh38%X#p^!{FB92NXzJ$ZL?B;ci*Ej2bxKI%rjX za~V)~B>LEwKhQ)#$@%qjovc`b%WVc!Pd&`JVQ`-D6179&flU8)K}E-!evc(!=(YwB z05g(gJcG7`_V5GjSPyxZ!>(Psco9Ej;3f`3ulM?e<}Z;ShpjN?R+eD`A)FWV?RpJ~ z%F7h@u?{IxcX#*i-o$>Ic*Fo$bJ-bEs*69PO!7NJ;egp1Xu=DKX%Y9PO_xzx?vC)9 ze!DjeWVB6Ff(B(P**JLvxOsRic>}!?VRWenNNKDAn7&S?PVBJ;CBL7_N#CR<-|}ZO}aj;7%9{ zkzFg3WGKs+(xITkp?EJtK`Fi=~(y%=zMkRuYvs$FWB=zdXhPiWImH@hZM$f7p-Qv+c-b29OMe zb3R$C_3)3&A>w(=Ggu!gdx!%DY5}{ICDmn^;ef>(2JEj`h%7LZF;L$lE@BB8|4dt# z>oTJG>`bC2isP4ZjhQhihQZAq#=+1E{gH{Xe*@OnlrC4SB=dx8>CZCXy5P($cd3YK? zmAi&_kCQJ=-(@=K=s{?rkzcUEVlBTa$dyiI&E|4GJT45{|5*oT||NceG`jKd*HwC7btBQOh`!ug?sy< zL%rW8%Hih2aJ^P&)81tScqRf;!&1Hs#orHr1Y=-r0dmHZS7H)co}MXi8`XKCox!R| zqqvn4i2nb&hai5D<_GFtPmePY?=_zJMWLkE6IIUD~0c}$p`O&hNb^fgQaUoINS zfg*2)GDo*0hs$jrkflNqPup;=R0%+3gbQb+Lsvn19&myLdt40@Krrx)u(EqIvEt!$ zNXQH?kwAy7!|JaQ^o9#`U|e7!i|k=g^4KeY;>Q}mhkk>+PLk*#Gh`p22NZDQY6ME6 z@}XC5DBHpZ*+!h?gy8~;c$cd;0nqH}sPM{{f-SizO`TWH`aTiGiN#~IJx2kSRCA;X z12H&T<{)`ZFnp#XR>*UVR4#+h_xbMvt4MIAjrSXreZCzWEY%nz;Q+W6?hYBLbRbEl zEr4h%nc%={w{G$W{&^$qq`VI$6-l2&Wh`a9zxt9VBEZz zxtt@4K6ANF?FJrvV7IGb95`VEz}FBV?4f7@GAMDJ#Q{!o3TQs{_xEYt8Qt>kyFQJB z7nd>=2)oSxyfT1`N2IS`zs`ZKCg6s0SfK@4^KIJ2Q@m;8fjK!j=c;_X2|_Es1Pk#KnTiwT&^+TVBj9 zBxH{ZM))x0^U9# zTIStB5`mVi0iKw+HzVDsS_LKqQ?RlR&UTpbRFIKnd~3_%N2^VNVf4Y84R!uakcBT^z=5p;-@p^*ciw}Zk{E5rW+x6G9lXbfJz@{S1V>E=!pbFvbz9~Yn5P>|x?vEt z0fz~B9WRKJ+1wj8m}1TBs`AI;$7-B;DZd_Ej^D$YS3N>Vj)Nr0%E4<4gy8%B_z)fm zdC0@ZM$(ZEIw8;Ori~zXgL^|3tE6EcV>9=@Ke$3>(rzEWCWq}bX25%79cAv+Mojkx zyW(DqKOSZGF=OmQ2xjH%K>o{@2pg-6ksQiee_jpl6k`eS#QYDH=x@-S3!W{ z?CcDpU=q9_O!(lNDvCuu_m(a7SUlK=65uB#tU4zTd3bpEE&jTQ-17{9u?4ICG(e1` z1^NuLC&>KRseieYSb83TwXc>Bes`;PMhva7Kft;B63G5{$Oj(Ahk9e@pN2CN|!j|AiQHGn&3Kyl4Qd?zq2cw1hG zIm~m_%M4YJ{RoyYyg6SHBL{IcM^)c1gsBt6g9gGvfi=9d$c~?ab@0+}pRx$VmB-V0 zV8Vv8q897c3D`Ig04k;%MM2^aWFpwpSHJHT@?UVm2IvT83y}mcAw+?!o(Qb`hk`3w zKcMejD^c+$XfCbZl>`z1%QFVN6{YG>pb2i@IE^r2AW)10SmS@}ee2=xb*FY619BZp zO){w0#2rrOzx@U={o7SqgoT)xwuC?Le@x&1TR0&8c$sT;%TMp0FPIB(?HJREW12^^ I|1!S*9~`|skN^Mx diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index df80955..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.951505,0.948169,1.080559 -2048.000000,2.976518,2.638799,4.534225 -4096.000000,10.240512,9.564502,17.289421 -6144.000000,22.150658,20.432896,38.984238 -8192.000000,22.020781,22.278145,68.149246 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index bf2cbc3ff2732621cdea819b5241f0e6350caf71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27927 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 XbKzH&ZDqKmjCA^>>WRc-2KW9Aoe>%H diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 53457d7..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.040020,2.974981,0.348574 -2048.000000,6.084949,5.996487,1.167124 -4096.000000,5.499700,5.457920,4.349885 -6144.000000,1.137664,1.137664,9.901888 -8192.000000,0.003072,0.003072,17.248333 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 80b4742a7657d732f21e2ac28e0cef8423b1ba1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28688 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 85c6686..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.560635,0.555188,0.364574 -2048.000000,1.076938,1.107759,1.200377 -4096.000000,3.644748,3.445171,4.462516 -6144.000000,6.466183,6.513503,9.924298 -8192.000000,10.267090,10.228271,17.215923 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 8350381f3ea59aa0bac73483927b6ccd8754f1d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29301 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 b^cMNTnk7=p+lV6|sWgvjsU;u2cKbg7ag4qU diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 761e591..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.581756,2.529858,0.346759 -2048.000000,7.672044,7.718761,1.186732 -4096.000000,10.138625,10.072649,4.452056 -6144.000000,7.129429,7.067989,9.868782 -8192.000000,0.004096,0.003072,17.150057 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 61f97b10e94605259cbd8673973d050fdb1edfc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31414 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index efb533d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.512348,0.510214,0.358040 -2048.000000,1.105719,1.136913,1.194837 -4096.000000,2.942582,2.856186,4.486412 -6144.000000,5.508301,5.503437,9.821679 -8192.000000,9.229228,9.370795,17.296486 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 5733bf46818f03d7005f44b5c86520ef7c67907f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28574 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 814bc11..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.599912,0.534570,0.347691 -2048.000000,1.093824,1.108057,1.186531 -4096.000000,2.889011,2.905771,4.465289 -6144.000000,5.688320,5.695539,9.976750 -8192.000000,9.623296,9.651883,17.107878 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 6dd62530b21d0ad84e6d5d97216d0fff7649bb14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28391 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%0Dk%{Wk*@vGN;{Xu^nlyX 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 I7jz!{FV-Z%0RR91 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 2def99d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.541245,0.529996,0.354656 -2048.000000,1.152850,1.207438,1.194703 -4096.000000,3.333174,3.271054,4.501976 -6144.000000,5.994927,6.032437,9.939907 -8192.000000,9.582685,9.535302,17.098560 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 9a3f02c0554ad4e01cfe1e63fbed90f89156b31a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28515 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index cf35a41..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.525824,0.522889,0.355479 -2048.000000,1.100346,1.099401,1.181028 -4096.000000,3.237861,3.078695,4.526319 -6144.000000,5.759074,5.770679,9.938994 -8192.000000,9.735083,9.602986,17.277338 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=128-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 56d55eb56f203b7e4354bc88574d8f93fdb9e992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29083 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 G^S=Q4s$UTR diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 7d8fc7c..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,100.000000,100.000000,0.691624 -2048.000000,100.000000,100.000000,2.722255 -4096.000000,100.000000,100.000000,10.320362 -6144.000000,100.000000,100.000000,23.130680 -8192.000000,100.000000,100.000000,40.658432 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index a8b43ca8a11905ffa29bcd5f06bc669e4f579f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19628 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 R=ims4;$4+HxwjrZ`ya}zd%^$! diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 8c70e17..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,4.876773,4.929485,0.698022 -2048.000000,3.847987,3.750912,2.704280 -4096.000000,0.488448,0.453632,10.293716 -6144.000000,0.003072,0.003072,23.290936 -8192.000000,0.003072,0.003072,40.944687 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index d1e8a0ccb6f0ffbf06d1786fc35abb082bf541b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23779 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 I;q?8#0fjd%&;S4c diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 6e89b41..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,4.473233,4.461936,0.704037 -2048.000000,4.178651,4.144274,2.670618 -4096.000000,0.315392,0.572416,10.311595 -6144.000000,0.003072,0.003072,23.181889 -8192.000000,0.004096,0.003072,40.328911 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index f78a9b8117627b5185210f321939df1ca2f9ee19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24802 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 Kzx%D@&;JB=qSw;^ diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 8ef3d36..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.860077,0.876893,0.714357 -2048.000000,1.887624,1.907285,2.703474 -4096.000000,10.163199,12.670791,10.478190 -6144.000000,26.590210,26.660456,23.091064 -8192.000000,3.069952,3.113472,40.281601 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 038a3afde9767678433001c7fd6c158833852261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32357 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

    ZU!^imTTR-5a%6bE1XOhLyyp~lXiIIIGE0ua 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 KeynME{=WcD&!yV{ diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index bcbb2f1..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.667362,2.823798,1.283813 -2048.000000,23.664640,2.624853,5.328611 -4096.000000,0.003072,0.003072,20.488480 -6144.000000,0.003072,0.003072,46.539776 -8192.000000,0.004096,0.003072,80.274429 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 8fd41fa5411c0da04d6c333785d97b493ba68149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27860 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 O(jnbr`_uMXUj7e+GY;nf diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 1c7eb7f..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.080277,1.070151,1.282946 -2048.000000,7.777146,7.711573,5.067273 -4096.000000,23.125845,21.848917,20.461887 -6144.000000,26.096979,26.323626,46.479874 -8192.000000,0.004096,0.004096,81.335617 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index a9156ffd4be05d311fbfe752467e7da48b844338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29533 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

    A?$ZmP= z0QY+tjH*PVvY=87Tx?IY*Xlx2&#zzC^R*Cw0tVvUtDV}-vv}ciDSg1mA*pY`{-n|_ z(|#3KQa3TH<QP&!sUrm8DTBqA3=>6~ku$CQ+&wKcAYbgRWr?%y+oRph7nZJ6gs5dC!$jKvn287=D8TLRjp$hNq@4ik zg+ThZm|@p{5{MQxKpA$P4C_Yk91OxP8eop5kvvY5W2{3|z2G8FJ_%?jEy9x_(fb3* z62j1ZBui3mzi;4_=h`ucg+N5&?l|Yp=U5QjK8J9gBSM7Mxr;}3)bB+gm}NbTYX}90 zK{l|3u47i7OTF6B*@FtZ!aoT0|Ey_(g+Z)s0^{|6SmXbX5b!_!m`wed=Qi88@jNeD QUDBL5s&ypg@U?sY0|*HP%>V!Z diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 74bae2b..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.052016,1.037632,1.280033 -2048.000000,8.745107,8.687523,5.226451 -4096.000000,23.070105,24.140970,20.682049 -6144.000000,3.602432,3.573248,47.135506 -8192.000000,0.004096,0.003072,80.204926 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 304d7a8aab22802cd13bbfc68e39c5263871958e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29497 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 gzc+m(P^gCP>s?zA)TDVX8-^I diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 171a04d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,100.000000,100.000000,0.408813 -2048.000000,100.000000,100.000000,1.355545 -4096.000000,100.000000,100.000000,5.114824 -6144.000000,100.000000,100.000000,11.536039 -8192.000000,100.000000,100.000000,20.098846 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index e9286a5f0d38910dbd007d9d505af1e25706583a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19099 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%0D4qP{4XF>rfC^*ikXgAZHK`XJTI!3(n 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 14f9beb..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,5.189954,5.164364,0.391326 -2048.000000,7.923340,7.836021,1.347659 -4096.000000,0.453120,0.459264,5.204599 -6144.000000,0.003072,0.003072,11.610592 -8192.000000,0.003072,0.003072,20.284737 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 0a5de2c20c0a39e06630926f4e2df1dc4d9c941c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28847 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index dfa6c10..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,4.397952,4.326995,0.399478 -2048.000000,8.233827,8.205313,1.432819 -4096.000000,3.979947,3.919872,5.214045 -6144.000000,0.217088,0.003072,11.678644 -8192.000000,0.004096,0.003072,20.379984 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index b1e12f353261f395b23b9a19bc09e6e86bff7694..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30143 zcmeFZbySt@+by~P5hX+f>5!HX5R@(z6$AkR1*994?gmA=K?!M*P>@!-q@+tqy1Tpg z_3-`9+27vd>~a1(e;vngysxaap7lI;TytJ?&KrMu*{68eLIH(B_e7!4 zCazqDpWN>rnSuWZ*gjUVRkSd)b>!y&+Nm;IKp zt*xbvASb8U|NRCI3u`0JUa~b>xX4vYNmUyZ3SS5LinIIr=fcGxfIn7b=C4R@ z(ZL^8X*78W35oiK+o%9PKfe-EOmXB5B&n#|@amK<5$Z9#tR94(46phHzCaNnAHR$3 ziF}yj$^ZZ1|1SoN`V~o7-1M@l~TVG#) zotSuzKct)vK3wAdkMGtkab#8*e640%i`BR5i;;=PQT*Q~egI|2UB@N)>=~Vaz|fLH z{ne84^6AOR$)159etwciEGWY-A3j`?O%QDO#HO6h@i^WuDT#)bme$e9NmT<@+KfE5 zXKcNBF(Db5e|fo3N=gd6@@?QrPXib3jT<-kUG~_+!^1~h)+;%LJiqz*eGNs|W|ESW ztbvaZ6Z<43CH2kvMQ-fwHuUyJ>NSOghlP2DhKBYr`uj;<`?}^OlTJ4QumKimC@F<@2eSi6bWBOOXO}55^&FR9`BN&N-&*;hggQmZRtKc2>y)K$=yDwkm zs4vE>jg<0)ik&$|{T0${3{u)XJU&*ebhex8OiE%LuKv`KASCo=YisL^(l-TM8qxT# zUm2c`K6vmTsvq`G&U3zZes$jzGbqJ66NI8^ANg2L)Sx|$tFEq|HiFTUm2Dg!7klaQ z3g^ld%fF5=lj(9vvctd34p)oEZ!4w;8Q9%_+aI*pn?XoJ)7g_Iy*O0JoS2x1OMY)5 zWB?vHIYkp@N-+~lp7Ony7gcUejkqaqoZiv?xCgVt+6cSaub`#Atm)O&_AhJ zUQ<#YqYnMa-`*kAd3{;R72Pt?C(X033; zigyZ)yXoHaXZweS;va6$XS~dMRjfX4l;rkAUS9rtqP&HL1>7>r>!RDElp$>$ zS4l+7uGhn3rz3+w(hnF|*Je)l$1^1SZ_G4DHW6&p2vb#foV)Al>c)t=38I{~=NLIS zLeihd-JquKh`OW3Z!?G6DRwSg>Ab7k7(^DbpZoe}Kv>xIS3h1iq&)I99>}4BTTfFf zHg`}`v$p2ea^1v4?Tf?j?dSpWO>|!Sy7(d_il^K{-RaM1{c_a$jEpfS@94J+0@$Ds7ou3`! zl5u~4ZyxIw4fNwrozXWQy#D#Vm({em7mdC!W(~V7<0kf5YT=o!$x5<{wbN`%m>nLh zJYO1j{&uIcv$KPvqZ>3da+a2Pscv&^vFhda!JJhG@6}7&1es)F!~==%kn$MfdSl;2 zza^I_EEB_p=HTGa5_Ly_d2_UUm1`mQO1~ zg}#6ONdEr)8+9-h$eAghg0A+K=HWy@Mab3%kLvaIRjcA3FoKl z9@(meKG-)|zm|&BajBGAGqSzPPIg!ygB_o?q;Zoy)P z z)b0NAxHy}UoxP3V4Am0NDJL&~{dj*JOMAW};oh6S3%`!d8&knlF#BJz^Q3?x1pDuo6XF6bcQWM?^$8P6zWD z_k6v2ytiueAwXHv$(vC+ipye57##y+u`i26PI&Xu@<49&taDQcRqIn4xB9kN9v00C zev8Uo;^%R^2IEz3v0EQ7#pJ|vu^P^f-^b>S23hO*wHiYm`Ic_ROJQG5NR$Kc^r7I&-M8JaHBT{r=u>nwNpo}aw|_04*qVaKc>Dqb zZ7#*{E)Pu4&Dl3OEX}pYMOQd&k98NUt*xn7I^S=H>ux-k&g@-|BZaPKm|1D2GOw z1S}{t9*G?F(g>(UYf;0QFSCfDJbY0tG<0-y+*r!WP5+$4rktZxyYs~4l*-?)q%7sp zWMQXv12(_o^@_?LIe$uL{S<4?iKwXXCazq9f=++;Zg^ubg-{fW+AsFU0Yo~}jlm{4 z^xWJLnVFeN>sN7cze4pWb`3o#*KG*MciA_;M#*1OYBMh>BlGo<@3n)2gRXCi%zJC2 zt>0f}EsU1)b&4KmPajpEw{YQp`SQgtAb<`o#-f;>r`v%2H1j+IzD@C)0;8bqLe1Xl z@Zs)&)*{qVJo0;%@$OWDwzsw1c5lLk4bIO_kxdPg3>y||QJ(Fh!kGKdNnhg)eL46xZJP z+Z(4jk{KUgcmowo!Iut&zb!#%AYZ1=2QQY-f_mKJTm%aEY>F@S6fD{2Hg3C1eR@#P zDh}u3Tu(Ne9F%Ml1nnFb)1r}DkBLpBy)u~ZP(4jYC(GpFelSboI75)dW`)OF_eV8# z#ddux!JsuN-+WYXt#qCmW!Rb6Zqq69)YaAXyTRMO?+sq~qA`Z+?Z6^3)rvVhPIpOw z^@Qxf?$RwBQoww_46j5jb#yI%Nlm?a<%(n<%=>*hdV1Kij_K-hw{xV&?+{oKkGo=^ zp>=(g>Nn?OV)Ch}sks+AoQ zHtz1LYt6}y^B8yCg0G;;C1jTUs%L?a_<{Z(T`3s%EUv}zs%iu;Hxrc&AWKHx4dt{lGvpu#__U z)o0c2r+?!3I04#s)<)wtHa3(TP|QuJ2^k|9?-BblC~w*_un+;cm!6?9m`tvNp(KcAeN zYmAf=m4c-Q)o>R1-=8P%Ft8{cu47c}{d-&A(6IR%htqPghY^@k)7EUOoyI3%uuS|O z)Wn=VvI%V_e0-yuZ$D8w5K7uxmj_DPrBvw?yA?|?Fb9P4C9Rj65C)N9-^i2YB(IiF2XinR|Q$t^C1Yh)4lIev*6Ty5irU%Eh(z>)4jaKu$K;j1q3N5y0 zC;feNEEnAtgQ85L>9y^ivil1J3qyhE$zNOZbm}r+|NP!(p#Ke)PfxMMxM{g4LHNoS z?FZW&7H5x?bxXKMTS`1od_4k-gO^Yr?9()Us9I$!(@ph&Da?SfDQji2RXk7Ff|2Z?5Euj(l zPE2Swv2k%-k87WcIRj3Iz(17#RJdS#?uP~eB%B>kTP;dY0o;4? z^`36cG2*0amS#%%-gZ1!H;d{q_0lu7;9_pe3322( zo_)OiAW_(f5)Hqtw-$&8Gn5J7-56nf7MfF2Q^x;_SfCv<9V+k!!oP8{-PxO^%xTyb zGwFB^2y*4>RUK%9CV&Ea}5=?kSK4=PtgZwZ|>;*YdzK`xhhTu}@WGhJ#05gLfFH+b}Uw`ggr`VZH+Cxc*;xuLpC_RYE49 zFgQRv9szSe{Q$DpP(k-R^lje>f0Pq$z?GW%=}&oh~9lDF>H=H-?JXX&Z{fNCx}_TO6zQa7dT9`gS>7C>3S=j)KFjT#wH_ zt@w>WPTeYvvL&_1=bVBy$($h33|9;}xlW~C-Z;GS(Q7r*oRtzlh^V$fw4f5hC*|@4 zZUI$94kjjV$kd^zQf*ZlfaoeVHhPSLsSJ}6<=aTwfCF8@A+=W_Rzoq zOTWM7NFyPUtxwvOMbegpFCG1Gcj=WfgTphvcPh7(bILuOMy~gX2)F(6mZR5z|9%FRP;e-ySG$WqC;PFqZnzE^k#7oVl$@ayXAigLJLTXXSFT;FV&PAF z**R+M;4ly6%cKLCA0>2rrehUD-S%fEPB1s(ht)}TO3*tgJ(~TRrr#Wq4NW9anVxco zb=y8Rx`>y$dOE#K{4Tt21!)Q&v5;>AVZf;8t5p1P6J}hRbhIJV0N3NyVsg^g64oC^ zN_E=F3$ZqunSbOwS@S_p*3X0@`yyS2?9JcI2k+1^Rba5(-QBZQ^55f-aL7Z40z~dP ztil*Bo%f8pCvn^cE!S_{cnIU>c)B~_wAny%crYDmQF^ko*!vB5MX2b}ZKz75KDE#j zQ)LuERcOZ-JE_UhC`U*(yaZ%{>m}!0@bKB;e9|FM?S=8`bB}Q=f^Zok!pJQfag_e# z!Fj|3Q=jneegCqMm>5#%g#1H7m~P#=)mQO$AcugAObXV|=H_O8=0mF|N9O*1pLoqb z%(d&Z5N(rH3v{oBjORQQK?F?eCeiZ|%5{smwji1}G6f-P=)?pB;X-?h8FSO4&O0bP zl`tC?L>K*I#>ki!^kj1F8pdT6wa~9gvS@+u(>o1Kk0P14bU(-*3KCx6d1)FZj&>ib zu6w2)_&nlcowYtB&Ql=++e4(3~>yonYIqfXynB9rkw8d5d z9;I+Nh2wZ+vVA0GB?}k`NaD+5l$W@9 zG=lYsF~v)z0HjN87jNJYv*(q;hx2Rd@Z&hGG|Mi7pjY4U`0<0`UvrCER(RN+)@rTM zoEe&x&X+JT!#TA?soi#7T%!?Pi8%++Vq$&06N(j;nTYdFGC&CImxh3d#}YFfc1xGG z=VCnq-pZqj#MR>u%d8}JKU^wYO>$7z(CRmrGm)0LH=Lt!yl>E}^_KGVXjgB!|3|iZ z=?y+UK0pxf)AeB6mBH|*)J`9+Q3-~9{8$fIcmQiW=Kfn^SXyMtFk1SbLq*?zzCSq~ z3M8c98BjZz*0jfg#2@@qz%FcIdobxo=+DfzX{I*P#Lf9w#}Ov$MJ7k7deR78 z_h7L_l3uKw*y%^b4B5@CR?gm^Z^JppFHlXHcDpjpYFrDm>O{`<$iPm-^ILUVzd z1ZoGD)l~hx`6NL**1oq;{|8NZ6J58OhjWS_dSibZgLbE^?Y7ucA;*ndtHZ^JIt5TE zpRIBi6*3+sxjoZdhcv)nr6O;u7BGN@Rh0P}!%t3;lQ_ql%m^I}7ct>B>NKZiD&;&&hc29#Q$IEPy%)tdc)R0M@Ob*a7VWb{sC` zuolGjP(p(H@6IBZW1iFA;>3eLN#n2(vu6FMYs#&Tc1%DIcsSsZNb|f7md#Z>yfk<~ z+l4OLm$|PDTRyeAjvfq0MMn?KttRXhnDeVV2}aD3dmoHU>RSb{;#Wa!3HpVtE~qBHfEAq!{~6aY>PfNR2= z^@PP5IlyJwV(xlD8M0jZ%K~kz+0sC6CzMf(A(xw=iJjm%m;guBH(nij4&(_Tf{N)f zNOK87&$zAgJ}^e%%1&=O9w^@FCcWwG(3L@f+l1D8d`l$tX($sHSJx&s4o>UBRv~8j zXo#;b7C;YFbzcxdUgYaO)^wWv6lb0dG!7rI1c7#x(sw0);1Qc3wr#-@dHtdav~ZoK zYbpf{2LD>62Tn`5GnUX!0N;U`qip6oDwp>!V`9DlLJJ$rw$%UtKms}~%3kQaWy#Px z;{_gltG2*=J5plxUC13Rh@vq!me=gx^Y!(CT&?fb%uqG@{RyuV=!A&oThiXMFt>ZG zdms4-!waBrWyjFPmBR!xwphhFRK-* zDeetQ-1g588Up5ide8}c!Q$fO<$c+yuCLDk3yZ;Gtb&L|;S!h2Gy-YR+V`kG1w1kC z`~GSAvN!ZFeOA89S{|njT`7-XO=dtx7+d{lNGX~_W3a#g=k$0#1G@27(e!k5Wc9th z72AA*-Qfqr};rpnzp9~L^S4Gd2Kn>lUL#yc1zlXboV4t0N8ndK6{ z!gUcX79A5?K37u&#zO+&j@#mCLFszcamUgPP}#j0m_BE?P~o`gQAzuF#(bfik?y>aE7`{A080Bb9;raj zQb0lUFjcjNx1z>Hw`gdgHQO>*hq?4Ozl^*&gb2kGE2zSlx+ug*=kUeD<6s(pbd$|Q z5!J?!=n!1nQ4xXm~Anb5F~29Ick$gsn`6`>&JahSDcE9!5kSKwd*2=b>MI&Tv7@x%bacB_oyg(0Y7tefVbv% zIqL6-?@ba{`h+%2%*BqH*YhqJl6uu*mI9JVR5fR#rxZ54$H12sY$cqsiACpc`Q@5#E24xw)@=#P7(2N0&9uSoy&eKd*fqV5?>#Ebv>C_$ZMX=7(Q-kAIF zKj(UZMT8Pa^6HRwrD9barXLnc8os~>dsUJ*-#kHJu(17dsL17?Z&WqH`PmRs5pMd$ z-7QA&W{!s9L1bGRV$4Pa3!hi?-SlJYx{vS};(tX~6P+4Yb_ttVFIYqVpPz3xW+FER zwB)~D2_iSJdpyPZ7g=k%1T-`;_i;YodspiPyF}gp;)&V+=F#3WPM$x0)~|4JC&U4v zzM7S{SXtAaPs$ib}{gc64r}bW8YcIlFy;6IIlX)h6BhXKwckl9C1!UsV z<3t&bEdz3OL1jQ}6~rS!zz;kRK%ubs`1rXkpmy{E05cdcy)|G%S3 z*C`Cyyyek7cGU>()m1!A&Hg_6EjfWHqK#^&rEg$DDg&5+go;QnuW~gJ;?8X<zlacg$Z?$akQ9&-$a6LUeL_-idrl_0 ztU)4#p49}*82TqcHN(Thn~5NM*{qESG})HhuOgN;Vmz_327tg);Ci?fXMW+q^U=7X zPLChuYHoBtHAE3LcUViHOb7F58+Wy`dO)rZ@X%-i&C}w|GWa>*GdzLGEnX~_oLB8j&m`7lLP`))&rmL4d*#Lrh4l4uxk`@+n~TCUlJ-Zk zuqoHcro?q<>5ar%BC>z~Xaoe^!*UgMAzrc1$|5Lrxo8SzI7D`?XRBhQq|6n%Kei^n z*wjK{F~*5&?QsL~Ihv#YoF#f5Wq863oO$cO=8(_0_Vw=f7|D=}gvb`BY?9B*tTrK! z{q^E9^6;Hr7G!Ka2q;0>s7ZegJOXyxVg@x*7t~6e@6XQv_MU_WGwU$}{Y7i_RcH6j z?HB0%xy5BS!hx$==h>nc#K|a_)E@R1Q%+B`^xR_RBU0ZmuSQN#7bX0kf&y4 z8(I=QodWef(^U3Ft>(%-r2v3tl_>DJXz^M<3zJ>O<+3=tZpC;}S)*+i!kqr`36QN- zYsnp6ANYdYFvm9~mV*gZkX~ORG)hV+|)U+gn7%4LMnE> z0T?jl_G!ZF%JnZ7lRW+W`0vzt-qoAv6jS_1bS8m3OTB+E4L%0e!%F9}%||m&ki^bZ z(d(b@xeb!F#5T4IVYXHtU0_x(>nq$}7Rm>NhZ&UJ7$x?ruU`Y(g#1y~_$dFw;8he*ItVaqTIZIf@5_rK-@o zSy@>j)!3hqdF$$nq&JdOWP14P&E1cd7Zq=j$)5KH^V>!17(LI7W_bk@bf zPeW+IL8hs`USFvhz!uGV-lrjumY4YC6e(xNEd&{!>y3a^h{$0wUUh0lvjK{m8K|qZ z&_KlAGr0lTmA|=KNzh~eZ`40X<2sa{>ooY#Vsfv}VuJLi94aZR&4XK)SLRo)Q#f?6 zR=(~CzLdr1=$M#4U|2MRy`>6u!3<+UOry-!AH3MDS}d9_xPg1oQdwAB?Ce1hm?-}j z1%r=UPW7+Y*J)dON@8Jb6q+<2OkowC~MG=+(BU}KNI(Q|Ngc{ z**)KDRAsZ=P{cu6&nQ*`#&pXE4HMhb7waR384R6(uVOrU74_LQYT-Z79!pfY9svYwy7yQFnxW%FBA~t0-JeR#8cAM zr2~)85W1?i&-VjoX7vAKV$#yq=7)f?cUR~4rKX*%+^Uw(_uuk6@7$)~HBAN|4`8Ra z%I!FNOa%I4>2mwnN)Hro+}gp-QZ)qVVCgt*)M8Qfg7koq43rNBzV0YP)Mh^$JKO97=C^cr7QT^8l7UI=;!CTU<{kx>Y5-XJ00E7zx8TptS6@R z_AXt%{8}Sivg4vo4!v&woM(TBf$>3e1hA1QN@UwJs09RLdU$NldjxGU(k*^PN)3aW zl&sI$X?vH$L0(^NQY+tEm3MgTP~L~35MlwSjdWd=_(vVg>&`lTv7XF zx8sNJ(4(Rlr+O}MAa=>0S$k2zFX)3*WOmLI32~&JMl?I`eW-9sdC8W=Mi9Py@kX+> zrI$7;B%V*H@4B3$qi6q+l2Cw16(Co=Yj zo&CAKjlt~{qQ6YvMKJ!zk(5}INLR;z2KWgvr)K>3)j-awWXH`ZgjbSiI=+Jf)iziJ z`#WW+uYIhl%gC3!3G@#^lM~utmrsI9gB=l##>>2r8;Y#sokPJA$6Wv@(^S zN#LVsXjG~wiP^gns^|oy(l6B@B7f!!`lg+D0h>&Xa$eXiX~36UceXzn<(18V1;-ZE<2b zVvCO?tP^FfdWH&bT|oj}U|#5SB|iWk?FEESnob}wrntpnep3xV{m$#6TcBS-5a2x~ zjzT*ht{24YK!kn|ULLS-#F;uT8w2!F0JRNVdgMvL)mo++V4$1Aj)-jUt+X!}Se-Kz zU8HAk`&TBx;0BKuLV6b+A0HpAni`P7Vz~{lH8nLu4iU9SDw4^eqN=2X|GUz+-;f>Y zjTf_DQ4u{_pl6axYy%mi`4bxn;x&U3P^|uc?n{KmUl0&58s8Z`f5K`TtM2NOKiXgKgc`Xt zXb!_0b64*&5{UV{{0*KFIxGF(AFiSxqy}j%BryUbS&{l0f^gtHG6)KOMva~^(aA2f za!xjo=rrQ;;0EwxP*wAo+**JCO6ny3~JSZjx zhCH)jUeK3jjBRXeQo%Sg9Vxjxdf(q~M!&h4#bH-;8yBoiTH5}820Ah}Mf3^CijIBsNZ?h66%FW|e|OiDzz+&7FF)3(#L|YP2x5&B?V##(t-WjWMVNyC

    VND8Mkpu`cKBfy1?yNyD8-3qVw*=?m(?!VGa{Pvumt1_CeCf$Ou?x zq&^RCb!S|^A+rhz%QvpO8@Fy`b7k=kg`>9+gTEC|TSmr4{# zlR;oaB8%V#pmpVHi9rfT0=zZEkpWqh83b-{J~>8@!N(#r9l7#6?sMnHXu;!wBma^J z85~b=TH2Dtl0fl9QZa~;fN(NsWi4&W%R`y~=C>drCYXM_yNo3c1P@uKxs`k5Kn#&g zr#es?c;BUAi#Af(W!lUx7Kbsz_je_#bVRlV2==K6}58}*EKptFxs0%cloeS+MveQ@mC1v%B4hJw#OWd;<3;fx)RL9^5Hv<; z_o-leED~8l($0e71lYmy^Y|;v{k7exUD;%gE@~R#ekzQ;m)`>ztjzu>zQu}tv=6M> z$}W}{Hwb{Sm22X7y44BvmpT%?qcz{BNl$Kf0&$fn5JG^;3PjGDY*o<_eU^9MZ?%g)Jt_Qeu~&!lGlhRaoLnV zKj`Z0geHg~15vdkuL1iO-XqOcjqG_N`0tQV9BSTa`R_D1knqsa2 z(kjp;0;8|+*b(i6reR{$hx3Qq2n=^fLIxWyQRf>cx0|Uk4DDk*8E}V!w1gKzLvGH+ zeFlE|v5e9n(B=)dL)gb#jG$Q<+cRQS=4|%u_xlHtth=GT3!?)E(?%IaGU{CFz_Xir3tHo&1d*BVEqZCW~FvGv2!4huVzTP$AZv z{tr=iCYN3!!>A0y7)4R3%PJyzjO(eq=HXq+iJ$xslS2ENbNOzxFuR6f#-GaQiPxIC zB>1Tg+l@qv++h|T$Jgw1rDY?LMS*_zuH{}fltVu@1r(8VunMm~pJ2aFtk|~cSSaa$ zJ|%D5ojz_}3W<9*(|^uxrMpH+XunhO<7oUAyWU&&*nCMgtI3Cu!aN@{d?iETs!BdO zuZ0iYV}!-2hodK}7_J=UnL8e5^;^e} zXR*P|eDV&jHD0%yHLTCOcm5W+Udp4KQ)AOv+mXOx)|d52KJ4X9f4?k{38aIL42W{i zcLW_Zbh^Iou8hRT6&P4hote+fV_8(s)-|V!o}4|FOU&I9Hs|FdcBPR!WTJ4ipA-M0 zo67BkFR?Zwx{Sb6oc=CL`Y z*SN^l8b7S3T&z=g&!Q>{Hyl#YF_ZOcf6KU;vX*O(JX-r1$z^Xl+4}9l$D>T5N6L7! z)+e)|XwKx|QDN^c)fSmdEF#2#PIl*Z31k33D_n^gD|g@oSDnl3Us36-3%~~w+R{6+ z&!AyE#jTt8WYM^#6WTPPF7P?p^*tYraXjsEj!LF5Tb0k5MFR6=e$t@*-H^$*zC2ca zu0Bt8X3}13Y}yWlD;IREgZEM}*ZJT&DG=qCrA^jl#X9DQZlNJGWi< z*&Iv5VQkXIRx19Bod)HY{b9Z`Jr(W*of--Yac}HAN2_P$P(SpUWeHIhA0bx{v``8v zz4>q!2?d2TIE7bna8khzLin(%O4>3PuGgB)6Rv!txBOaB!nJozhp&q_N5mG2K=;4A z^+UB=m!_0c*%v2GVE6FSzb7B$7lTO-X9qcB3w6S)H7blndmWDLp-mu=ic`E?14;;z z5`<)-YpX%aN0z!GlU|h)OIj`WLq_{@&rAG`}pU?ESi0-IjQNy(M(=AQS_?i7mn&mA#W_Yj;@9CvcmI~vo_9$>LKly zY1}TgM%9MVB17m>yN=N^FPn?byc-m!CLX;%h~8Vcja0!pNP70KYc?cmp;g; zLM)|pSD52)y+7x^+{%WM$Ev?I z?>Y)^pq*;w-!188yX3fR^Re7!>7zj2Hdq(c=e0bYDuAaa6qw@7!kEGk>BJ^xmxL1v z>q~Bs@kT;^pgO2=z}XfkoZ{c3N7#oFWsWaeVDnF)%uYVP791VVg38%&727K5M)56mC(8% z=Y>Q`?Up|HK3yU(7qnmbll;JovKLg}c}Sg2{0XN=#4MvkCm%S0v9iBizSu zr{?VPKv`Ww1W`rP%3-T{Xu0#ogTdn7B-KJ(Y~m2FR&W1PdrCJWxvwYnTdt?W1F+J~ zVRdak30*$g1sc=#pyjcIHF^fNr`YKZVN)ng23W~_?Lr`PAsU&C7W7|8I44J4fZAz> z09gGXAo^@;bZ1LM!m|hw|7%(f24^*imiY|czYB~G$~)Te65anbZq}8O9&2(3CyhNy z(IpXZ-Q-%WGI{!QpW0xzyYE#r%TODQN6qQ}qc~m`x!t@W+tnn$8FpC*JndIK_b;*B zh$M8HD>phgD$cbU?(?3YnjSilHeV}kT54I7HGRlF%^RfG_S;+i)R<7|;Ip6d{M}ze zlB~qp#&%8-cwhW(s$IjpipCyzlE@mF)n%unEZaEZ9COPGtoFJukMj%yp)Sm*188$> zN^J^rr;u!8iG|Mhxx|c{i{5GdRX;qu)Y410}6Nr^X%kau_pw*HtYb3Nu(jQ9Zn~>00 z5~gf8qIv&=gH6#?I6wRqRfo+{^i$f6+h+vp+!YQ2&VQY+T7*(2+Ry$v+PRBmpCgZE zzjg^f!|8pQ-?H`YG#}^-XQ^5K%1*8w)9gY;MC<*W)>@<6t~|X0bu{9RD*UNQZ)L~c zE7O*d=G!p!=Gut_>@NO}ue8adu+NhID8p@e>mw(=UK8tyzu&ezzP4b=lEro98@XLm zt;~mq2i7OTrz#`vckzimx|RwG>OZk<)Sff)Sle?`AbB2N z%!gHOv*Jg>S@F>?&V`%Ow4;ik&}3(ZfcoTs%sy$%%r16|hRkQESGj;8TP?aLXM>rp z17xnX!P$e>dyeOr?rui7>Z}j)skG!dSJ1Lr3nXgaZ!9v%?XBC)cSmh%m(+#KtBzV= zzx?Ok*;}YJC9!iA_UgHIEAe)|xpXwh`+kyh-7FKfmT4R_F$bjN73Xw9<5XDrDIeKg zyo2AK-j=UfYAFDPI(eT>dFU)FcWA=la_H0J?)AgpxZlP6ZYAB4UXBzZA;H2S`Q0n0 z1{c&PRu*(04{%1!YH5_&`#bBE=WmbV-{Sq~(#mpjs+b^{XBWvi?vA6=kX!rdJ;RVL zS-B27qbPeV7KPX?QI@eKZbm#I``4kPy3O> z!y6CV!=zwn!k>9!1C3^`?XJp>Js&GkW=+FelErfmirfFHMGEaZd#LJ${xnC*=ThU6 zqPFM3clDF(zj)$3j+t%c4n>DH97@vttMxa($TVbSYpqIGxxP}4vSApGj4fJY(+n{V zv0}s*?)~s)x8rX5CMh+?VP4uaZ2fj+P`=0*fQ?BbLyQRb9&aHXh#UvNY zo#Ka-PP6z&f7iU87Kn*mBbEMnZM@4}RyjmN(9kZHW3vA0_D72hS;GYkOB?VL2nN7( z`W9d28gTryvSxBqapKtnR;AL$vc9UB_P2Hh0!hVuGyAQb2Zqy588rm_ie&EYz5<-M z88bHYi^ZlWk{r#vGMNnf71EVaoVWcoo6`um>QZ5fTOIJs$&q)M{^|Z{H}MRORk<84 zDmv4wXJ^o1B;JYM_8F6QzrJqvHv?zP?{m8~$?!x@Zu?Oeb?GugJAc`4nj+h;tF=75 zbsG?lS}%z0iC*KsKzJ{v+f%IL{J|h$q@&xQQ~${d@XfwY0?d4THksk{Sd~ueA{ghM z68wt(C5zjRmD6rS9;Z@OgS(i`d-_?@?cEWPlL-zJf4_bF#hfS)0|4i*Lo@}SCFCav zxUP{lcm-@rN8hgyx|j4@i+E%6owC+XEB2m9_tRBJN2W*m^j}0(9%h8_vWA#$u&Y;bwf?0yQ4-$GHGPo!G@>0kS|fo<=cci;c^PLZP#=~R|LOeT(%i9;{s zu`_#{2O~~cmPf_S|4-Ym%5W{5}H9p zWo@Q+1O;d371Aaq9vF|0l{tgyNslQ`VmC2@hRjWKOyox#v5w+Ej>08o3+wq`W!z|) znpFMSTl$L%w-q_weGfguUTba}VEiN4bv(<-ub=}-JAV7%D2i5k13etVR#K) ze2{=tv`OkWt~s43YV{=r2V5F{RBr~9q4u|92PsgAtX-DSWPIayDC+kVhfVmW@Hjlq z?lWAHUw0BFDJT-fv%PXr>Fg zQ?e@iv_|U;aU1v4gXqtY@kgp@z3mINI7!}Y=bd|`XP2YJlCZ9#!8HE~Fu?ZcsA;P6 zooCz0cwKu;dzU1e>UWuPhT?LANl`-YyE>9f!N^MLZY7 z2;IE~ZLJA|pWsfn>{#6DPQoH*$~X1La(92F%tY4AHBr7k(Km3zUwFlYcTULjxXz+y zdPsik%?1;u_07Cre{jRXv=hg6cVs|**%oM}qjO+ormW_Pb4Dc$9!)Ph89P2ZaM_^s z7Bey^j1A=%${UZoN_b1IN`ha@XGUQA;2@2c$mORK#JN7Q)~j}ynN0TY zbjwT<>4~mM0KUoZ`C&2U=0ttFZw_Y1_He}PV2KT)7T^o46QL5iI>W_!_3Llvw4V^) zI5inzh;0ZQxqmAM=PH<&WAEyGN1WCKFyh)hPk#vT*x&4QsD9|ZPhPN4^M%r`$+9;c zaxN5n4_}D%pMgHeBBskMCdVSYpB*NX&Xt`u(@J&cAyU<@Q6y|Jcb^ z67$lSJtza`@&!V>wVz<{CXJZd#hP&A#@uVB96T(WPx9TG{gEXlQLlO%B^W;I8`V3N zMa(cW^gup;`d*;q+%e|b!GVfKtjZ4sMwP0zge3R(#bY5x6NI5t)01_aO&*hHI&Q`y z#Z*|GG_ci`G+pqVcRVu^-_PhHnu8UGECK4jdC4ng<2-Q66^AvnTk#e;bzLO+#= z#FpSBpjQ)(M?CVk(q-RJr-969avjIXb%vSYq$dz)WOD`Y_MfCCX@{pRW}}3b_z87S z!i8#{)c#hM+AI50e}|Ce@P*WqY_bRH57ndktY@y+E?=g9^0nyY5A5)8Lr(C^^w~2= zu`GeTv#aDG2QS9Dw^slCqzBa%4hsqWTdO{I|NiPn3!G+OcPt;$p-i#Zcatvv<|TRN z$j5NZ<)C@POwC0_A#g?pf^h1Tl(L%bo-|l_yERe=hg8@SGII&cW!-77NrXqZ_l0&> zi@VBx4o&aRCmDxXLz;PL^1$qV#v+>Ve;MIOmj}5~%M;#d2~hKqGpiYIAkfSLnt#PA z?-W?${{B+C1wA8`HYWSeg(AGJDST_EqjqWQm=0w*X&!Bk8*u&pq)r!a=;XwZTCnVz zz3uEujF#i(tn^13Wnau{&Ocp3J`O9M6hez?Ki^--lQ++x(7#u_R0EC)k6t5g6sHyv zg$BFmtNZDZdX=j{`)ul$FSnI4<-h-exgxlE({6Y*2#%P*Nx~*Jc6Roo6>6B=YVIIAza@` zSbWa7C<_3;KZ-S4?lpS0Z$H{5e(21iE;4n#w!tN>2Pf5fthBEPi&7&O_^38 z-EqQ}amDkTh=@o6c7cHHg8XMB0WJXD>Gxl7?30j^(sg*(*~NwM`t`7-PkrgDF;C|6 z$A6DlO#Z3+c%+BEX8z1QBHxskCv$aZwZkasLCS=Fi4uBMLY>2@R>p}ZwXN1jLgwJ` z{%4Ef%OES+bfy(yVuG-3D3=_l=?ol6AOqL)f4cqm=6!vA3n2@lWF~fYKo93OR9}pF z>@D`oEehJBwVhsG(JV621DdJm{vqPIqoeph&K%+6Cqbxc_2v!b=PNv~xJ%FJKa!5T z*U9oFhzqk>x+23k=)IL#RbsAcPO8;G1xAyU1dk z+B1Yoh#OA0Hf^~b?dZVKr63Bv5HOAs;50zK-SR6i6b$+}PO|)~WoOd%qiY8Y58e)R zXz!U)Btp`YDd(0lhvW8he(S*mY7saF<|+2ta(DW9#p$mE1)5K~zZ;ufHw|tixkYVN zwR{5gd~!nvBJX8KV5Q%OnfOm=;3JEo4}>Wq;P}LU62mAYhJy6x>{=PJRLI$2cu%H6 z8umE+P6IfVkql|CSF69x+)5T7IlFBTw#8xDb0#{sOtf;EIWG8UHS2m~*Vg-Q3|sKN z{>fcq$y_qyB-@mbzVF+*xRZ^QyCZjtiD@=ul0##HIAIfsb3*OtVpY8x(sfKRW>n)# zF&QVIy+5;@4T1v{CxIzX2#`$sR<9OUp>lH{+ifl z5a2f=F^v+G!cQ)Ab{H+kC9S?X*N$1v+$pTL(LjRjp<5YDks@)GRFFt`RAf;#i&-d9 z$WKmJ=OC3)ZGh;@+0K!$=)Bcl(x`=9DIMJwKDOu3U%&hGq&wZbh4Y;o;B0`q80X_0 zZki%P29Y$^fIqw4Vc4_H?JlX-Rvx2{Wp*vW zl^_HL|IZK_UjlmV7NQa>V+dbbT=UTO5%VlKZ0#wm5jO2^(9xpE2_En8dw0kp`kk22 zJwg1T^}~K-hmJ^~aZxx|*<)2{IR`6i-S_R1KZwk>Jt=XrX|j8n^*bvUeqln~!0Bjk z`g5HD4hjN-%Y!151JMFvhJ=;l2a(p(>w04r+uS>3br1|Svc=}7`s>Z!VYqFWsYL_% zBfX}Yak1(CN^8an!5Z!Pkm~X)7_v297B9BLF)9XTG{}kGhFMV%5|rXmRrg`sp4yt4 zR&>wNqzWLupSvpL!mC%@n@M0g{ASwY+$)dH-tVfHH_srqJ~!St`QyOc*BisJWii$^x(DLiX46K8q|n`Nk8|qRQ&^_Y zFZVD`iH?~c@Oool8<`W(O%>Rlyh6#4xV>XwhSSF@tL4@W6{*Efg0picPn<{vZZOGk zNy-$x>wLW6fM4Z)Id|k7JGaj*SUjmFn^Q(2{&UDUw&&s(&afFGA2jIF`hU#fQ4PSa zD^U7=>6IAfUG5u~@qKFOng-S8$oi?Yu*6Z`i`(KP&_zBHt#<7vW}%aP)MNp_&8VA1 z(mKHH7@UjkkSz?XWPPbDwr6pN)#0^Y#E83He$$1>x#2H`(hYbeZ72jsFVKu7g^f7p z<-so-3K=iEDpAiewEC@Sg-wf^+JjQlmEh!roo!ib$W*&<$T7Q3??X}?`sM?oqL*|W zcSEcwnqHjLP3@@nMCwI{sA_!olMG3xuCeX1xE?`8C3HDd6#K;s%bnXZEe5}|JRUxk z)hVtk9)EaxbXkal(`bg1UbUK*EaYCJ$O&QMk6lu)CA=@TRXwkwS?L6V{;%=Se<~#< zUsmMg)lgs{pAph`(*U=QD^vCS#&G{US`yCnGqk^FG4_4*j;Uu9N*qcHGWL*Zs$R-Pe8n{^;tDIDO9h^B%9)`}KT2UbX$yysOU33-S=X zUn`aJVu%-Bim_uGh!1q?^|$pfZB&p{3NJ{EeD-C|Q*oxz+)kL6qMZ@gvp|;@ z=kirwB^zG>MZfBEW@aXnU6F&gm^w4^YmYu2Zp_KdOz#<6uXUKoYbKifD{|k1-#g~0 zYIBm|iIzW~cc$%osa&E|vtGO*C*Xw2kEH(^(8rpI2gzT1Yx?+0Ki|J(cy8uV9GkJ9 z{mkl>l|@QOY5#U_K8(cT{l|SFp4Yy;HV|#KTZq?Haam%kJ=d-p_?Irpx5ZxbWy zu5#j%uJ(=YvGt=ZdwgLg;M@)|siZ16a|O70`T#ZE7+d*ly)m#vGkU(-LwYzL~#zYW)?;yFCf< z4e>}xC0$!CbVYP!h+k6qBz=e}ZvD`)C$-_xt7qG7+p869w<<2@HgfbT%7%Jz`RseT zYjk~1Z`w1ihc1Else9szBpHX;lJut?<~%IBzrQ=NlRP+=A#fzj&XnfszBn40Y@m3! zj#t5Vp?ah-yvVJ4U77FLO#^u+!HUP;Qw~1^zO^PVdCY4qWDaP&oBZsKo&M9ONfn!x_Y&g)P_wAx|z{8v(D{!BkH87uHHw1;(tTpmik&l8E(1#0S_jvlKWI{ zF&rK=d?V{)GrK*}Sm{j-N7(7--T4eAg#)ZRX^r1gUX6E+Hn3>M`ET5T)%WJL(>|-O zM<%JHr&ZO<-e&8P<`=)RYLP|X@I}xS27VF;UBe0EZ3X(enMZ1# zytNFGkJJbgvV?Kip>W#{4PoIJw{;J>OntY~39N9c7y9l0xwPsUX=kC%@E2QG;}q+& z=WHKvgt4V|=VxNRo%i*%{3XMtS9CDduv22#!~IBQXy0^{j1?TJkG90J`0_lctlS-B z+!CvGur}#uW$HloTUNg~8hHq2N9kZsx`v~qqgA87M&DX*JRNVN6x&=`X-CPgXS>By zCGVwvN_zZ*fE2@e!GkS|&c-_@SHjLZZ*pjFw$@MHckQRw?NfL6UeZqwdj8Km>1p6{Idt0A*mK;A6RgULWBc}4-B;cnRZPWqwLhZPeWj!X;t zcS3&?AsW^$6XM<_wXu|@WU+@+LW1icTe~~spWJu3`wLhF1ilsI%^>}YgG8EX>-^!pB zO@YPf@Ga-QvT$L?xgYfHhBR^7qA6$fQPS<^i$ej8y>%?@&#zX$_~pRoe^w=1n4c8? zoW&7Jo1ZA}L%*X9Z-;>2(sgKh9b0Azw^eN2lc8ScWubjx3Mftf%?V^toO(20+@52F zTv8fApW-ZEx}K@;SBt+QTQ1LumL|r1q@F(0l&GimDSfq#W=8eWGW8vn;NX?f4O{wEsa&H_j2Q8heyaJk5iIw$BrD*84St~ z%uk)ZueSEzNKPaI*g_8`%D8>hgOHF^>+jD%6!@NPp#dIGev3HRQCg=@pMD)BM`}o` z>z}HqOv?@7VWKSxvT>Uk8k+6Xs*jvtd3(ddH*{32{Jn6>WTMLxgBD6hRSe19bdoi4 z;lma|`;{Qkd%EeOdMZ84n$3*X`7ItJ?k3cD}d8Dw@|1$bJM0;`c&1>JHxsW zJzqHkGupY#_Lj0FH1Fxq^~W#|8s#X^w=XCk{{*L!%SXCjaLmBEQ33pf19#7l@aSkY z=$@=8rH5g%P;-u%n{)5FHo$xzB4(hrQb|X?4%90rJ9b76K2(wx5&pxHEO_q zYrL4T@?os~&G~M}ESeJM7ZPhi^Xk8Ax_U25P@P7js{5nr|J*uZ@Q5KPf~gErr+1E> z$MDq%*1-6}GHT`JWb*B-(uJYWC(WEy1zgO?)MYHoUSB**D*c@hXQ%Y~Oo~@ko0^&= zNn?lVi&f=G47w9G6ZBSJiWw6od;Zp*c=+`20B8F{6Pk&}FvoS_L%s^t2mAv}zX7&T zx;Uml2(D>cR>C79egobBDp1VXa zAQuEE0BQ1P*lhS~2*)*Q^71dBdj3k-?ZbAc{wnoRs8^)2LCe$)r+vN|=O>0(S@LGB zGGo8g+>-fScE6t~cnNp6a;@5}74TN_gL_33mDRZ0Z==R)((X80_2%dg7DB?xd)1ro z8p^w`BsE$*2#RpNuU(eUptN7#6JoO$(RWJix$T9-i z$0HCphqlQZjd$a68nf7;r4r35V-eJYzwG{;JN4%TE<~*#c`%!!I61{ny5Ck%dCQ7W zU;NRruHl_-PdcA`N+(LJ%f)5sMmU`{htEx?^<=`)C-}Xu*CKCu;`Y3I)=frO0d0pj zH|Jg5d?)a@+OGqzLkG&TQ>gsZ%TKOWcP!j~b?L*4yBzoBII#?Sw!Ez(U2R=IDb^RHehc*y_x#qBuhSp-IW6evZ%0__lRqOic0Zqsxhn&jzE;T=KHZXiU8y z6am9w+7()5ik_f5owrY2gM-lTGt@rEfepp83G#-*AJ!iKQYU=n&qbTWr#JPpC6xJA zZZga8ob~hcc_Mf@RI?q#O4xWBVh*r=d3+lK_{Yd|O{l) zP?J0R<;3CY3l1gGuJeUX^7D#x!qmtsCM7pr(tm7}aFbva-CDi!- zk()?KSrmG??J?rptCO3#D=fXEo3X^Ryp!BVeRcd;N6#ABQo-5P1xm{i2X%dS?$kBa ztcdIB?Um3TA)5tXk_|xd@Qns%n4KE^S*PH4=E>IQsJk8x3klT@FCV&*n<*Za-h&VH ziamsz6cVBOa-B9Dj+nzEP_<67-SGF?cp}uZzke(*}+3dSHR@&_C ziuO-E+{UZIMC?ILI3t+vK9v)+l;M7znmLzgXrKG)TL8brn90g!jaM87QN)6OYr&AJ zwD&WWqFkTM8kjDwt0I;JrI<7uRfM03_2XEZ$mp4;(ap10J1oPBW>_`AdVn{2u5HlK+B7uv^ zq}(Lg>!0$v&HUCyBX$dqqyfgQ zI%44-n7r&sSHh9)SN1K=bw}oTjo)=>tCgyCSbCr0a`moqSZ!aw)l8|NJi|EY+Dfc~ z)2e`y^LO~K`F;*k-0ktg%&OIXY{_wsg{RiKjIlw`MtAcB#%rDcb1t__YAiZ2N5nrrJcx$mTB<&1o`+ zC?ZBL|1e^W`O2@b)>$4%X|j5+H?hcoErBAtO-TOMKTU({_R31~!t@3XCN1Uo9|8iv z!o|3aDa{&u$qq0LII^+2w5toY7w4qu9ILv#aN*AP$^G*s9coH#Ga^tL(49>_!o=Jx zc)De+{dG6z{I@n?Q`g^jyIm#<$-hZQs;ey@75QegSA@Vai1Mt!p4OEyWus!Q@bHdu zmhF8ba9QttRonHx?%DVs z2mHmqN@hrF8nyP>H^-v$8VrMO37--a$5tdt}91 ze95h}{ClY?H^hzGSGLCm$sZlJC=ppPye-YTB&wn2KiOSpR1RCK@4SN35>L&_(`v8Slg?rb zTy!4Zf4`;O5cF&wJ7YvCe$puR_nK4Jq(X`a-HYRziwqgY?CW@seShXS5Rj&9NSZ5h z?*CbSR;A}q(c#`gW3prxOQ|D0^E%CsFC}B8cvY`=EYZ^~l`IXOOJQ05xOlFL^yu!z z2haDVLGFB;!Q{}Deu-~O^O8P?6z89FkIAyi4adQkH>A_8lZ`<*zB*Hf=6%XjuB~5P0lvttoF)#_dAa zx)})Qt2bFUvF*M1CHsfUr_TnZY@2sQYjGAhmfMMHGq-!zBpt~}^l&4q>F^se`N!6U zr0rGuOvD+-jv8JQYJ#8{IqsEdPV2=RR1qElfxc+(=EKXm^DT2#VH4ku#~1|!Rh~RTxDj>B z*z#vHN#BQT?q-G(PVK<0d}~&v_S( z>$BA!*J=nq!)@RvIsKpstMK}Pwf=?7k}XdUu47(z>vxX!pRocKxMwxv)YkYVVQhb^ z9-%9qWac}(79q38-{|JmTldg49(yeX4W{q#ByYWr?^d^11=00c9XGkzzo8iDE4Rcr z6tSV2=l=TN7pQ&TvW53sKPp_V-o1VQ&!0P_NDl@;NujJ zkDMdplPnTCe#B|tB%rU+AQ5|hIOnq1lF#-VWCz1ZA@L))-92hph0<*QEG607!&$7{ zuqesNf>2|$Qzn!W9Tp?ssO!=b^?Bk-%u~%3r{?61S7m{YEE4UtAd_#CFf&eMA8P|6T*@fqPGw>X^IN0>iza*7yPIxq%&2 z_2V*@&vQ}vxT}%anPOZibG=5ztjpY?NI*8WHsni3Os+hyLgoUS{fD@$a zO@`*Zk^oC}fnRxj>ZusUQ|$a}L!KIUMPzKA^RDbSDE17S>v6|j5x;Ec72O1fgwV4C zy<-+0d!}8epDc4OEjNen8=M=3!WhUKBKrp6j?N^%g;2nPtPEfQo}dL7Mgs#rzzJ{U zw!u_$A>;C6cu6VW4^A^}+Ne%~=>0fLj@yPLvlB9_l_o!hJWP~P%ib;j(IjBSBd})I z&fU*#G}JWTj!BHJw@{II6;-4gaQDZE(~wc+wJL!`l|#b+7Yk7F^|E4KqI8JTUFyHm zA?h9iLZBf~oEB&B-tyP3>hNq7RZ^!&>O=8e$ znfk_IQW|CM%mvutnw0b4q@ z@X;G1C#9<^D1Pl`htj8n1$-P5cPRQQiN(#iTQ_y@E@qI}guATF$GvhN-klzr<-IX7 zqp!8ug)J*EP~q0qzuE6L=x*Ryf7?5-Zf2RiJRxm-?D%8}-NPyM7^4Gh;#=-cuy30h zC;c>cH67MC(i)%De0U9|=`dfiLLMqwkwY+Ckv z|L^m;;*^E4p(wxJE%X!rF*|9$JUbK^%DMMK5K32v>t_Gaa=kBH__;4%#&gP=!0=9S z!X)`>6;t_J({E|)-gC*^tNa%0yi-%pCP&h__pU|Vvc3HkBfy${?yud*mKtmPZxj_6 z`Kw2qfATwb(6eZrBW=;u>r8CGk3w&cN|(e$_?Y`N#Z;@qEnCV2O{<5B-prORnzRi2 z@HYrs@$ku;bq7AwKVPuG(G}4>-*eo!qE_5dcX-{N4QCz}rty_KwU1cIEvl*yom^5c zl{Wpf`?K>%J;72g@z<{7txe;Jo6@f( z*Jb-@*=qJ|p_hCEjQyUAS*F0}n3{T)6$GiB#OxGa?Mn^e4*%gq@exsGVS>@we^J>< zuQ}6==JMRB_q^}Sgk&?T<%i--Lj~&o>9#$W_fO*ns?Yo|wO8Y+ZF?(Qo?CZf)CYC} zyB&vk_CEP~W;?BwF8AvCyH1og&*f#t!6x@y^Fkvwl@mv6o@8l1yYoA5TuJZT*jCXw zcru`yR-f64jE5_4XM)f6AKy0@b_p1V3Mw3XJmGNXiD&rSb9YUFSrhY#t@xoW83qwA zgdemSPCBW^b@7ye#k;h$G}jkM+HNA&cfKLgquRMl4KJueM3fKHU@n!~Je z{3ACM2m&*9YS3mZst%dM{K(2m5WmG|y^oC+%@{6@9WrpG7`l?SdyN*EazShm17Brp zs{z$UjwpM?#`0n;wO*tvpl8Nkzim3-OKmBJAv0~$Gi?`Vd9&+Fi)`vCu9@6kAY`Z* zL=z6^e|=JFEsIM^xB=RRr(P#2yf=6JkDG3ak6Ve4TjMfwbNlSbKVuTna)q!x{l8kT znC#N~|1-M2dQ#xn$pGvZScv{fN!tj@vYnmXYl|D>?PuVKhe{u}Xh?7?EoU;@ns73` z0&5$i^8#R7#g(~k+}mzzlm?tW1^25xHBszJ5ZxaJEU;|jGnBjZ$-fm-L zX4@trBGM@RMmMVu_giF8bO6%>NIbZj&Kn3^Et8@B@eX6o!3`p-l1n3w-4xRMpXx;?;#$o4~bnt#xan4TBMM zqoLmczmChUj@Cpk^kX16_Ylfdf-4P_ptRYipbPasU7PCL2D!pJpNJdUun8#s0zkHu zo{It;>g#y`y)rj)aaludQ}*kgLGV!{!o!2{)p%f6K6qo~mnpz; zKdTazNm7KsL0UDGPYOdGjD^mP;6X-dWzL-3*4Cz1>h1AlY&--lBfJQnc?IsmP4NQD zh?W6tXxv~9ifDkT+_*2T0jLfexKC?eB5(YTtw6OXXN-m|C)!5v(S;n&g7)U^B>ClAKsMgf5_>BY7jD=pB1eYHcrmeN?*1$OS=9|^Q1rU?s(9qZ+2 zzL>GIfD+z@+T|>YA$ao@aL4mg4SQ*YIQmML{%W8ca;whLd7-`phXui9fE;2<9{g%;3%-`UOidvFQv8kw%NqMJdI`hl)K1T6*%eJB$6_=TY@U>jTSAD62|R= zv%Dtwl7vqOj3vtc`j}bLe^DZFxXGYx1=#zqj7dspOmSmqnOP1JJ%Hr9FgXb)IDz|z z%`67|Cx%R_UmF+$M5zR;n>lWAalIs9+zFmTB7{saEp0c9?J1}UfqY5t7+>GU?XG9& zFP8?aXtvw95zr)7t|FH(XQfA43nK8|O6U7{;V$|F!b!TgXhXc*^;=3l3lm`6BUm4Hfszu;gJh2&BIEOkJOoQwEK_{g8L8A8toOGduq@1sYFJyp)bJVm3M$4WF*!M|ju#3avCWT0bMo;4 zNojSyPV3aEF2oP7o~YaM%Q}$v5*>0-EFr+eUaF6klUDqY|^QTX50hInoCeyEGXYWU3X4jHe_pTPb z4}vkEm=~cIL`lfZ?3sBCQCbAj?GeOYVt-BWh>YR@jJPmc?-MQ?u9~qMOBLbDSv^ z*j7VeLVqr=_|c!9F&Gd}UL^3j-tKqMC4dLjT`8=|5PUu_kQMvU&}tG#2v|XVBq`e_ zF>-x<{T!ga{55jJG*^%|;3Pa5CUhbgQqJWU9$%LV+=hNu?=krB)|@LEW=CH9ktOgD zmD2b(1?2pv33@%_hrvdK+!)7}9tv(3h!G0N&(Hr3nhKHsziPU^vgAPo4FTx%wQ<7+ z6Cxh3z%)izEZb)B6jUFHpFamecXyi`rS7%iY3<94Y+R6Xx`{bY4_ySgMSwW#*w7Uv z1=OPo)U?lM^dn$93D!#I@USiMU4h0Xg~4iS6N4Y&#-9V=n+Idde*Pzb0~@i~mVK9h zPW=5Vy>`nU6VP?5HmD zj`CLlw%7aW+hTsPbq9175s~qy!9juz`9JC`xby&X%pBln&r(>9HUAMX|Fv`b7jhG= z3FZEQ>Q6o1i=lx9YTgsaAepmm4C8YESfAO157h1#9x!6>hX6JHwf(1{jVImRKY%wdIhdBn1F@_O z5$Z-O6R&;{eF2*DB;j_U(P?wxlp3=?2sHpC#6p4fqG6sff`q4Nme z5dSAhfrRKXjxJB09(r-gP-kUe{0W9L{`!tkn9yV($An|K3*X6Q^v`4XRpp=HR1rc` z4}UCR?E)tYZy-OYWHR|$Q3(+wpz#qnLcP{9Y>XgMU%9dqrypYygvO!sfYG5N2+s0| z?L_kg0e~~YyTQ4oVz12xbJlmRlZA+lnb`$ufk>l^28$brw9>)Dw2NSnNtDhBNg$v< zLj~=lYwmYLgG{4hY+XQ`1FgP=V`KFmd|uZUG@T)$4Lm8)g$*B*jm`(4KFT93KwhOr z^}z!{L%Ar3B*}S-!QoHtU|vfhate^c1<^L^%LFK#)oY<1RBL;DR;7ZbPLOE`{W^H~K?sm;<1mnfm|JPCgOM)5ci}1?qpi@@9KE}c3q%6iPs?lZ z0+Z=CtO>+1j9nBRMjl}UZ+F=YHtUU402Zq!Vf806MFQG_ZXkGiY0MZR=$fEXyAjBm zm-*B8e0ltUctf~_paWuv;6zE3Ol=}U7a%J^=m{VisXb|VV^AQCt=JT+86-PFvLrz! z$317w{Wgw`>azdASHQin8(UQ>NL7SY0s-M=!_XkLfPWOo|6{HH2X6oA^FOKxzX%Vv796{v?xYjfLf@@<8s+W3SYe zQBSWcn!~LdYdQG8|2^QnZ1azf6nB9RSMCn|+Z?tF1ZLQB*0%;39$#+8Ijm(2BTyhc z|4|_(YFpvr`(JTyu&gE47|eykuiS}MEI>hukBmClS z>|Df>gI`RR?ATXGNlBgg6tV8XpABA<-G)DsQfA>kgg-Vlv;F`7{Qs3@nKpID@=h9c zn4f8j+dn!oFB{6gBoBjgcy3B%@YOB+*RO{oBL-zW$`>c-M7=keOifL-LT|uspMEbf zZ>?G?tjWLBNT!Ij7Kld6m|(EZZ zurV^mwpMLU>lccxbHQ__zQ4tK1)r~?Vh%iuqWj%g76OgD3J)IK5EANJeAslcs-|Xo za&q!_cR^U#kM|lliIK6fv7+vaR}y%PE5)xkGahWt-eh9J<>BGUlO-jMkyN~BB3v@O zB6siJ<$+AhrtyO z81Rn-p7g%Su(w2GE8uy;3yLa{3HA|Z^ zlW#bS{RI)x(ImlylsQTX+#eT0AMZs_9Pdv@ z=NnYV*83fiUAyL^(rp8~Q&fL=tM1tjqUAMp)RuO>&K(7X3mjVc6AjPLxvh=8rxCLGg$_8? zf5jyv^bW>D5U5vSV~C0zb?{^g$kQrdWM&S&6NJ}O=i}L0$EjBy#%=hO*X9pf{ox`9 zoB*9#uMPL2y?%Yi4diz_587#O)N`Cy7#6%MT}BO7Hc`-8J!h=%wbZAz+O11j^3fI@ ziF_!xZbrr~n^l8B6v>$XwUN<+sFnjb0(TPPc&0`8=0laHV3szPLBm3G6mthCq2_XEz~WuklY(_6{$5QCDq<&B46)Sb2{MPKhmd*+Kw00 z0~RdWoG1ki4MF0)7#P~ppmBkokpICf<(ThQ=MqaG>ifXJ9>cJp&7Uwh9UCjCaelL= zFxw~*`@e5LYvfMN&fbHZNl%a3RpXL4^}i?QBG4H4E$GHAg8CB*oO1^Y9Pmi!l~aW6*Vor4 z4(8Ll-6R7r$4O+puM77)nHZ-QFVVd?Js~MHcussRLz5%#ri(-Jc~0G1l9H)(5+0YS zsoSbu=M_{{b1b{l_V@RH)p$C3to()e!21mOQ z!e^-3l@)@2PH4d9R|a+jC6C2Ol`~3{N*u z=qKPa_`ZRt6Y$=gk?==Db%tkLxOg$stoc>#(Q3_W2AQ-+S@#W5b)6RGnB#*hY!3tB zucIlr^d5e7v$p6?Te0f>_<($_BdHM*n?fXwkX3&^HLObQ>JE*t-H#9VBD@Y}6As|4 zIC0$?RAQbKbdL@_l0-9 zy`}j|+sHc@R<6{to8H&g7sFQwGlZfQ9vR7e{rdIZ5=d8MSFhgtte)+#pvQ<(l+kCL z;{5O-!&oL!n(lj}>#CpQ?!n5fO*x!>PY9T7tDX<}dKIsbC4j8;>I(b!jwAu^^>6st zgD6Las~lQSP7ZfQT)U+P3>tZf?#jw~uU5~~b~`q=w5aFn@Ij{i2D3Vjb_TS|@y}98 zF7;lXR*Mfg98s3@c0;AXGc!;0%B?1?G&1j=SA5I%?QmzQ z$R`qz%7?5hf%oK8R0>e99K50cEIoO@(3>fXzklqSchgzQ+kv8Z)WP!KugnpjwYtZj z)z1h1`)5^KTYG_k;OC!8of0z$aN|93>!VZYi<1`fOe`$1iHZLPqaq@XP$&R%Q=6|S zL(dcDM|~HXt)_2)np0vszzv1{-SnE2^OPJcBVEz!=9d8GXVO)YahLja>4IlI<2u29 za2iy-fyHndF!U7L#mC2wd;3;SSy?$}H&-pae$_?adj4ZYb)W0~DB1^hcKOrp%Y!8n zRo4JB4U{_FkUZiPw6*9zAzzva$Nj}i1n0eDq}ughXTX?U^ULF$=?dF{764&TAS8D0 z-M{YwfB@=iz^H9J?D)jQgz|h-b90GlW5~6%>6I0g+qZA$Bp~23IY%W^gVpQMx~l6| za%|9MlRzMpLo65Zs7ct(gO%?p*NQV>-1zTz}eL`%XXj;7XLS(1nI+nS;{LnZ{DO62*Wn=-MB|a zM&>mY&WdD0m=33Isa&=Y;PBEP)vm=hSKU@@9BOLxuSF+rKA~$Ex$BPAOmH|v7E{Z} zN17}WT46icNMgEfl6RB;^Cc5{Z@h;tMF64Hv+fh;HU4;{k}PNngRkCw#>iM5oXaX` zh4uXTToXx~6kzY5PK%laTiBL?)UD&KZp&l^05s{eej)slk|U(XkO@9(=25uLbsT7K z0E*)8Jvlr)RIhe<3Lqz5r6(dxR76C?Yl&;H4F8s9sW?rW!o>{HRB`v88_9y!WU!t| zyV+bx_;Vf0Z{J=47y+Q~P4J_}{f%icfbheW_E`W*5jf2t${3aw?v_N<|gcY2j+OHjE;HjrBiV zV6_=2j6|VCZ2R-u1aT!jmUZfnH2BP z)2+Sl*VyZlSi4L{b~p2GFqNRy!Xyd$6gT#D5;J6$Ph`Q=``<2I?=RK7i#3zhS(?MEuNOf(V2)3@Tdq;_nc*Us zFIy=g2f$bqE=kAaM4itb86{;aL?yOs-Q3HUxOylD706;k<<{huU8$2BtqhiMqyZx~ zI%A+rLUk~Oa!D)d6u3HCqXE%$xVIM2zTxfVHLwe@{2T4}7G`ErVnzec* z=mj=5Hg53q^Y>N|HBKPa=U-3OpFHigkhP&)HHO`_@ouDe+`f$k7%tba#sl&^zM7g^ zrQ^8j)?DYpKoP?l`c#^po<3ivTlL9d_J^aN4T%-Y z_he__WpFT`)^#08MCyE;nPu)8ws&Bo<}e!f9(J!Ib|Xhx+^bU*XUq8s@?zY~9~e z|MHj}pf#2N`)IN0xgs>?(4D+Ne=@~66@zC3#~zUR!Bhm#Cym@LuJNF-u)bxFvVpak z2Z=HauP7?S8LO`*l$h?w`NuBmZ_ZCs*9 zurND2yWL>%w~{qziJ_rTUnok(@B5;8)T-MAZ4Yv=pcbX)ru!d8O5sI$(umeEIU_Ls-KQ5{9lgHR-lc27j-{T_`%afa~1;{dx|-$D9fe zK(q&uHBdZh#{LJvGMN1!NH8hzZvxN+DAy%Yj~@*f2h74zovfZuJK7WBW{mB`JiCh@ z7uHz6!0LMyHbiHwTCvr0*tcd`+xJMY-fS*7|Y$Uw~&I}aZrBOQ8+O^a6$=~q2D~0e>E*c@&H}5y7$>`FB zKe>8FUAbtC`{6s*Uwkh<+wtLC?1>;QCwx$(?=$)Kf_c|IF$oHaBf%LZI+IgdI}yQ? zA9c4hHY5;%RW$NZ4Y}z#j>C3yN~uB55Z;t2u00{s&u6gi+SJr-LUJ*N9fT-TV5zTP z|CjZ!R@80D!d)n#k_f0G0Pce6T;H@dPQCR zH_Fg0$shs#%E6{BmRZnl@J&X>b$~c>p_k}Hz1B0P_qC1vf*~Uu?X7t(`z(IW{q!&s z2O-%QpOBIsP|kHc*DC0UBp{~j}o5xQVBt)540XvA}8 zQ3h4Fr9)07Y)6$M;%EV#2;lafY$eL&fVu}oMs-#Lg>=wGGXcYaw4g(l=^KFg;&_bf z^9d2u^DZ~{VA;6ZWo|%AfGB7%uS6?!vivQUUPE`c?|X@a`n45Qr(Y1hrGtL?r|Q#x zJ==a7If+N~KAf(@>rSqxV|BWekZ=vXC!XW8!3hwRdMzeQ+^j~JP^rnUk&z&(ruD(BuZ&J0={$U%yY5)tsBq(?#rL(2h zdyAhAHDov7S9h{IEK)lMRBe&9F~B^#`ncL}4k#d)pF@%_v*9rFc6Bn$>`o2 zvLSC|0{mH&6R~bX_DjK@C zO|B-1g0T{D+T3{7XISK9WS@-c!~tkcKgXx9n%jpM;kQ499YkW!ZRPJy&OiYmYk0A% zozL+Jwj`zdTnF{fcrL=*5fohfo%`oqZTypY>i4ITw?c`pA-zhehyuLaK2Pi0&FBWt z@jG?TwB+N4CKDT9>x$t8dg|55PWlFO0aG&@{yG=XX1V?FZb)lTP>_IqH&h+K?&{Fh zq!c-tqyWNC%oWMtI+!8_5XJ-P2(ma5~Rh(+9J@@wjj!Gr3% z)3K2YhIOdE8)9{mF<4_!kh;qNt^&wz53s8VIQ55S7*JrQ|H+|ps%Q*Aj*((Nz!c%s zhh5Vyy&7e@8OCUTgx;G^^N9iqPL~dv+9x+si03+k28=^{vI?SD%GUP$yQfYfHr%#m zrY|v=w~H#Nmj?GT2SPPq#$Yf5bho--Ri6P^h5CL0p3+?9JZ<&o6KRdd%2(5ialonY zJB(BDRh3`5Ec#q}7^I&l)Q29~S7XDq&(Z;=Ii! zfkW8-G8SQxovce2tJFp=+W^~SH(vi9;NQ8+SFbh$q!TERzXm-*s+gil%~I>Ej+O2 zH%&|>J+c^9_>>Bd4!!W>!%0L{(TrdIavgtbK>A7VJc{E7xm2L{yG{#Gr(Oa*7Mq%C z=Po*h3*>j-7AvF3%sf61nkbIt8*y4#=?IBWfJqPLo<%2m_sfALU<$E@(NRN&zfh8H z9`1>xA8c)wipSbE8%548q^IGT$TgBa=2Y*Q3Nz47OT>i$WE9!m8F1RMIrMN)#$Xv? zcAly>r+={fR$BY#A9G%#GssW?D>jRxrC-R?Kac0SAtGa6zR`3)$1WMC;m@vy=2o}a z|M&>O)$6>M|5gT%=+WJ3PWyhAU?*a1qJMpGBg~U^@qUH};E9O@)E$qtkY5jxh$j*D zZP@*{a%G*pp{8K0LY(%_8Bp@>3MXIJPSVACMcF+nbZVr#L15B<%#n=#)J%HuObBk% z;5K}*yE2*PV=^wCmsKs+$V+wHYr@THobxFB{&vC8z~Y-3p8p2+#&y2qMRx*EkQ#To zJfG*d0R^V|SN_4kr1^-QqJ#^f)Hy_741Ig+Jo?n((z(!3eY(!bX66<#8%&+oTEyd9 z>TOeDOgGQ)ns-BU#KVlh1NX`Aa~vW*2LlOW-V01m3ErAM&UyqHFd(a52P7~9hgAbM zLz;N*3h`L|vV|rV7ROYgM4?k(DL<|#1&r#&3`i{87F4|UG)+wn(K32;oign@TSb)EyQz69$=OM4)@I^6#6Sx-4Z+lY!2dWFtcVfI22ITpT@>!7)m6H_bnvHGLlSu zIfF|RZ>4}vKFPoIz~SzH&)Vt~S>Nhj|4!(%`LVBOB-#6Du4JP7yjPX?y0cH;ar?@D zV{6}DeA<7IXC&oWw2?BWK9#+l96)UJ(WU1ng*?+Kv~S29&C9+i@#xYu7x+AF=18q_ zd-40c;?|}gk3L=02+mG7fYTWq+ks?qDRqs4sF__m>FOjB5&sLH=8TO#&?63ji00-y z3EWP*oL4yT8ewaC3LfMgSc)tk=Pm|VY397^yV1s_P6F==YsSIp5D$o?`8M%QOWt(} zmb{~1L;vFD#i=^2F9!(;{{_x@`ezrk3SJx^!0Y;HBcxi|(aGIMbwg7suMV!3i85Bx zokb0&3Dx?TkJEzsp>#^;S1*SF0j0DXH^iRfnG$=|_D{oBqX5{!ThAN$T}|`3lq?+l z_6h`|)YfjN`B=R-vRDs7)gbwj{Pt7^0|Soza5A|x-X+{A2c~3 z9wH^TZ?XcVD!JGn{6paaQMq{Ru)wostEg5w?M}3$>e-#wrxBQLu0qRT=p9vJO>@XdFwlfhelOHv=oBdY`rLn^ zfZf(MvF6yd-ATA~gc*ISqA}=VL->5``7vrIpx~1H>cjs%8d`&<8YG-vLDPzuSKtT}?h;nQ5^H!f zVk;{sWB|DZ{Mc-WJwoRLz@aTd^pKo^R4E_f#t>q2sMElNy#r077wAvO&vAW|5n*A3 z5+0l8KlO2X#PvZ0iQWP>dm=xu(>|!sU^R;);TVc zUVSw8WiCC=IeBdg1U^J>fye}o@eNd%@nU-*we&0PGNCJp@^f%-D7Wf)v9mNVFINSN zF++4Np7VL0w&|WjUe{wN8Cm=)VdPu=KNQZ|{tl0antX_(iG_#jH?XT1r_6le`g19phI!%r2 zCBn9R3_1@1C3gofK7~HDPLtoEz`H_kseA-R1r?|DNK4^JTCrG=Lt2+~T3CJV$u-R~ zGd0xheYY)2l5OzT{37*^l|uUYXmM|yi|60BC-XmPVo{<`alDTAoe@b|LE(pcw2!y< zBLFX;iLDM=qJ}{k7K0T=PrBFD)m^-B;m0;ODjsZ&dKNz=tUayQ-4`o5wCa_IY@!R} z)JdblfgtVvlS26)USS8){yZTCGEqR%??9ctL@)URnmvV~(x=v=;&qC!7@Z5hvk8On zQ%K4#T@!u{dL8f^bcnzR)T`XxyEtHK=-fC0tH%7V8WDqfqQ1Pwae9Gn0sj7DpRDF< zFZYen0{1p6Aru|PYLfswi&p{;$Gg2YR+l91eoMk*c>?5jp!P$+F9RZeGf3F4Jpam4 zHT+K)Q{%I@3P&NnC+kdV1o2F#^hui#xhz61v^G4~l6SHU;iUea{ZVPebwEn;(b2`c z#uz&@f!DRiZ(meQO-+IR#Uw1O)%XpZRyN;oT>p9gE#Gcq@a}u@^E6ia#IoD5KI2z zMTcGhi4?AEhz?!nd+Hh&PI>caGWsiB|5~yjhmMVgUkp&&c9IOIe!w%^Tuea$Y|r4r0)C!SUTE|XCn$IwkBU5 zimP8CY8(G9L%De}w&skg-hy=QRL0Ki#C+%gNoYjw@fEj!Sj04mOUL3tFF)eqana*8 z6dyKzqBj@?ypU^sK?gV*mgAF512Nag@vsYdS#31dLZ^y&@lTYe`Cz~lXU--U@?gTo z(x;ax@%{agc~#0g&ZE(%l!4KI^XAg?eqSyI2h%te-tu5f{mS&Ydl7n+YFceNTWgt$ zBt3-&5_z&@5oe|CAO-p$y^4vl?))ewTff=^bK$f>tNvqKfwo1brn_fljh~lj5IxSh znHp>6E~q;{lO0#Pou|9yc(?50%fnDeMmi6=5yt3=N!hp8)W6DD%Wa;*2QB}_W;QXm zID2l?P(QQ`1glf?A0$|Cnp$!K?90ToH&Oq(?{y3bv_9JE9_5PWF=g~rM#^JVt?PV- zDxKG=*u2iTNY-ni)3myIT^rniV&Us;SIbZ8hQChk#{${_=$$;JPa*mvh{^1C0FRBOGm#Wkk z=O+`4CzgsPKj-F0u`Cgv4CNnai&swW>od_RM`R^mVHgBu{w*L7%G50dvUqWqdW^`u_$D&h4hDRpiX6%Ua z*{&+FJ;D*TbLyJub{IrjyN`n!UKvy8++P2)a#x6L7n_th2X(EN2i?#TxiH+7c#N$) z%pW-(eHw*MkYOl4XjpV&B60d1K!6l^0P%%}nGfPR9%Ph>xi4I~8J`4D-EsFT42tV) zbwsntm?!FwCVpQ1^r&&ssvD{9tEg@g}yvWP>gC9gn-%x+e-WP7vO<}$HM_XUI_?Dlo|K+ z_SU6S+0}6|xmf1e-O@SN!b&Ios8go;>Hi&UB%1>{X#ve>?dDGo1YI!r?>`5kY88Eo z38-}dCLSclx6>7%WG`PZmXmW)P$bCLdsn|QY0C1V>z~W!(=@#&yZgkSMPBONr~ve~ z87s+$J5p({|F_cKXVe@NVot-ag1z-^ajdT3twQ{0pv*frE~BBHMSI?^NS%wSAKc^l?A~IcnS4aSEqIW@KcfR1Tv9 zWHK`|5kDFDUqILHNvTu=1i;PB-Kzv6#c$;GIkppK)BO#LJxM;0084NZy}23)cp?3X85aDAHdB47S4r`d4z>&Xt>?V z!O6)f;c!Pz4s%{aBvJ5Ur5&H;sW?ZC>3mzTTCAB`rcyBX2*XBqv}E}4`%Ye>#>MLn zp|FpuBh_G2JV-|N5-GAEY?XnLCxs<2fRdbC7U)RtwYoj8<&xIIVHU86f&A6#0nRuu zi-JZr*6#zx$$l|soV&7}X)@aDZF6c=#a3AUM*homLjPDi9K8bx%UcJ;R$2yz^v{;uw{E=xqC^AyOyHdH0w)OK3L>QBW&$t=h6^lk zIfV@vH>V>UX#%$)m82Ih7Er>HKtq0f(iWR4=^YC@Gy#@W*fbXm9#~I}7y5}`yvQ)S z=d^n#DV^lFL!_o20=2AB%|s$kYrd}w`z~Yf_k4nqgE;hs13SS zY&HX`{`}|OTN!E$$ZAvDV%!UVC8=Ho1~69iBGQ$|<~}a8t2g*IuPql zbUBlgInlOldWYfQ@HHr~dbEFFnV0oLOgpwn)CMEvx7YjSfOY6Dl7uRg0hPgTa96hP zIL_|O7w_`UVbo;T&NW;_TM@Gy@*X<^?~R?>9472&!635?%*W&!hAi7^(5X1|Q!_+}I;9XL?m?91OGZZCyXU?zmE1P| zZiYj$VxJugua8dd{V#D~6AJI1c3vipp^Zzn=~^8{k@)(V{$|R%S=#?{oW*J4JNDfZ zS?_`&Ti7RVIiy*RH6IzBJlX5q*_(`Sm;O2Yl}JWg%6XcB0CG50(Fha znYQf}tpbx?7RZ}l6Z0)ZmJtLRyVB;yIUd7(^{WnD?0-J;h^YSvob7}>c5P}%$k5c+)a;KUd&CKY0s$5=vbF9) z>4yHbz`O>GI<%03B*ygQd5ce2#^}z1OOz#7}fIe5*qqYJLaR#%}b;j?$t2~jR^tSCyU?JnA zxm_xibZJ&%{dO}xFkwtSWDTHeUL_$Rp%HQD0KNTZxpnXQ=B5knDX;`qK<@vKM-}Mb z5T>x`#;X~HMaiWewk$sUVFQ$mxr;uW(vfc#R3R~jl+lrq;H)RvLl><3O@2QQI@{JU zuM<=|Knqaq$S!9v`^q)#P~rJv#3Tdz`PtUsbql;F5`nR{IwzqY?I_qAU5nk1&G@6oJLH;-Q$p*Hu!Ivw|r zKiACMMHw%_Qg?y$5zDNkUS^?ES`zdKP{Tt-0zqpWpS|Spaogk{&ot2YPkw3#_|ASh zm|sXk$=5YiKT*O#Je7!b73|jkhEY6-4FDQw*c`}qv{RGV=B?k`d1SlOkX4qV&DGnnhjO7zK+V{)rsToBWR_pO*}6LQtBLF_5(lSaW6Lv52t`?SnRf-4lXQNKzrUGSzjO_ z0fz*pvhdxTH@AVxO5%SCj$`yrzrHV2Y+ukcz?1>bk1d3T0=W9D(Y7m1Dh196ST?CD z9Yz)5hpb1x3V|W2x?m7aUf(;8^&dCqiXB^whm)6`U5~m}%%^Bvt9wcQB8g9RC?3n= z8M%mvo$$2~(>KY<&xYqw{}*9p;M&1U1T;ev5CqELYWt*BKx6E;a}`0rIk~)9|9k#Q zkPpBC4<&cQ=4`PgNxm)+#@<0d^XecypmrghA%{nWI8)5h&q`cg09-(|g~W5|tJnK_ zd#sMMfg4}!*)|(kW`G5H^ym@TKYPK;+*%I+3-+e<%vq}XAJf(576rN|mtJ|*q?q;I z6(FA$m>H+?f%fy>nn*CtP`L()?^^xww2~H`Zg5d3kH%jW1ff)vJ|+8sI7UFR0oQ&O zgfY0wMXqogh)RsT0yq??Y)g`BpG$XC<2v6J1Ise%`XAAiEb7b%{9;XG7&yy|hRSY8 z(k`9|S>9;8m9|OJWhmXcg-&$GvGqHw+CUSf9R>*pyj8kXF@QHA!uPuau8UGtI)KupQI;Qy-ic4bjZTOOnbX9hTr*by}qsHvxLCk45`f^r%o;4FV~e6xwPnyIv6u$JH8%R6^xJy4lL^3Y^BEK zAqzE=6k#p-Xja1jA^s`@6PIXL5t`xDZMH=OJ>Hb=k%eGwdzFItOZOkyl;vloL*CiiTB zg7yT=O349Vie3A~0}c@8F|oxQ*pk#22%6vg^pR=+nh2#A`r+C~(iuKJDMl@%qDybU0Td?CNkTEl3}1vKzZ>Ed1~!Qa1yDZQ#lrO3Tf2WzLp}~X z_qHf!BPkqp=%N%Vdl6Qx*?%89Stv;L{q-B)7Of1rpA+JHx$op*DccmltZ9(Z>EwIZ zUm)ODs{J&j(Df6P)29pZk_NM;5N>UxNVt^*jyiNLp9jVpfc>Mp7fn=Cs$E&yFL5=t zHimv)$%QIhb=H2&6w90n`kV+ms*Y=yeuTR<9+N-M%Xgx+SABx{&$mObpwI=^z8GU0 zTOxy2h9{FO8+c)!?!?C8sbvY>>Yo*u(;U}tN-F zqi^Mkz-q0dODq%bpoQ)~=h-9lp87UB6qnY7hgnUF^NA_W_Uv^6i z#N8$#VGgMN2DF9gLT0vCjSukLRg$^XI9+V)?BSh6W@ZK!;BMk! z5KGpZDUHF?A_U$W@A>zhR&d>_#&d11ux9n^s#thI<>E9C1k8pmKns^?Hu|0)1U zJ% zG=*U^&V-cTK~f7MN#4OQc|K57nF4kWXI-bW_3d%^aq|LM1KcUmD7Sj_7v&hBKcAhG zQwoQM6(%!&0G)Q-5!1 zhg8^Rsxv!zBA(WN6Tv~Rjiu-V_w>-Y$pMVih}8)wH&MW#V0x>W8wAx0VPegXrkW$R z;hq}YE%;q%C;_UL4$6V<-7U?ZZEx-|MT>b5C5wo(*M9u0r`cxg00l^mOV}18#M76W zrs<;x$+U3lZQN~_SM-cmoux=5O}H2Oi*Mu`y*FCcbxF{zvFMpTqK6nPbDdEAdG(eh z5aAL3wuak~%wIbE=QF5N4E~>Hcu-%xW*KD@h|ZgU(?by>SJ?RZ>?3+Mw~jGBhv2I& zHo<-ws!tJn92C2?RWfokHuFHoTXX???9OD}YegK0YPFeQKRofk6*oq!Aj4Y2b~;A?Y~i21;$YXd()vOj{n)2z@r{AH z;;V!7+$H8`tf~g5sV7I7T3lO8;0K;5iqTqXCq<@;Q7>b8O?}SD=-0<^WK9k|_E5*Z z>z1`6b%}rdZwdF!w`oC7Q)oE1Rbt&X+>`Y%=XDb982IQflVZ=drxb-u%*-92`26{Y32N%aSkb$vuh*!*WbBZr(f1GVp;Yriq4{&A+c;k;L?BvZ6z^5>5LXr zD54=IIPY>w?p!(EL&M#?xq6?q3SpK5Pt4I#z>v2EYw*_9xs`ZFeLB@B1x0>x6q;lJ zbHFMmpJLCV^5Vwa&6q1(Hqz~$>n3wcwWrcE?UpP)nVB@D?wZK9Jl$TxC!|a+qe|d` z^M8Q)z<7>W#rXcxH*#a(Nn=*n1) z+Vqja-@ZR_PBeg?MXget>;MJVg+4b!wj|Ow2~f>%=~!Fr`rxHY?)<>F)LHz1NuaP zKeqiHsms~#^hv8VkQuWxvn0#byUr&+Fz!sA^Y`q^ z>_$>C42GSZ*ET+Bq;B(7wHZ;v`s8|__JB-l_gYJEjDTWF)s0wnOkCgEMeTg{*DGWz zHNSjh4HUk%y=)z?vazk~xb>ZIPKk*JIZ~>o)AzmhO}Avf8cFr-xw3#iped?Xf^9}W z49v)`O7jM_RxF25st^KDz|zidCl{KOEuW+6BaF_KIB&aM?f<)It7$~~bd0Y0LjT#8F` zKdTuZ?|8jYLhsBa@%#?8kEZ2QItd(VAIMcZ+(Y|%yLy-J?{6=;|HC@kllAhN8>(b1 zR5-DHwc$4w8oBoGibx&B=2%~ZSUMAA|@@dbsox|(Nw z2E!B+HEV?`n=f9J*B2lom(>`>T8i5Vt%PD*4Y(9xUuDo5`RpZJ7wXH#mI?0H}!;QJ`Ca8Si!BcQrB*b8k2_wH4+BWWYox~0OGd4GOVt(4(eu7a| z0a~C~*6n|A**%3^hJv$LoTggy;zjs|1-SoR?35{HFrG7Rv8*Cr!f128EqwJ?8Q-ot zTAee1Z#B9qU6u5`mC;u*X?n$DxzY&mgtU>5c{MJJ(Ma?!D$JxeH6^xFMFWTs>sC{WSfc|N~7-E#x~0F%U*%HSUr ze5(6nx`JMNlQmXJRE5L@NKf5LyCn1BX_k8#0Al35t1l61qo3OkY%wRu*JuKENxg!z-%A@$?*gK5#Aw0Wuynbbm<# zT_P@$cxGwHv5IT&zYJlfnVOsvWZ+{|ZMDX@|0jU^D%p<*ocbY_KSG{btOgK4e!@4+ zBuRSn17YXv5yH+GU{3X`oZW8Rp>T@V?Nc>ci;E-6#XbZ(MI=SQQ^K>voTEMoOsRZZ zc7lUBB^&DwqF?a>^)f5|ZQs4{o`W;PrsvCGIc!6a5EcG z<3}sOS!X#|Y?`!N;V_yEcCXQGDKc_$Fx0u(wKg}8I>Y9&3HKXR-?Trdyc1;dn~6=o zfANQbw#}F7S|rT&WTV6~*a$z2%fFf%K_#%lCv!rxccCCD>o}L~Nzx4lc z6M-|*u&EEOkvP^{v(RwqB_18_2K%3MSe`P?GqE=Qd^fjewkj!MshaC|&TfL5WR}8J z%#I#J@^X%WDCE2V?R!W14#j;gM%{1hWDS+n^kfiIG(cBpfx7H_w1PselK|rjUs=@g z$CV2D4;>wycthi+t8kg9aFNf|;u+4Tp*peoMa}(LN>?w>vE#>P=D#tUqYV;xjQ%eb z$H@)+Sl{QB=V%1yTGL?8jnR*3g~01N;B{z10)h{42^uZ~Pkco#l8E^oy5;!6RdGzK zT5q! zIVef$X#W%1R}Y(nw*QaH&ODsT_U-pd*;^E@=E2&qKo zWN1XmJeH8mQD!Sc3mKMq$h5zAzdiikW54fv?EM_a(;sEs)_vdCbzbLno!{^09J3be zbQ|YLuFIgKg|j9TM<5Q9NsI26lCIDx-6KVDNhe4fx;aUkNN?b{8KiKmf-5g~uggmh zg}6iN&uos%-8$HJ2qFO=@R*2t1+UtZ0UVv<-EM-hzzebM*uQUxzC73qt9O(;$v2Yl zNm&2jm$2`tMJ?$~5kt5vrAvBZnmVEMiGy$NMkz0y6eA}CpL4Qd#U8Qw3FphQexG<) z=qAkQakEu>zOleWxIkw}{mv9gi^reI`X)1zn$)SkDoOm-kBifT2hSz{!@w>vFi-MN zQ(>BBL9VRqSTo_`NkDz1o%e&kBXXp8W*g=|p|W|k?tl}`>e3}vxn27;ZhgF2=L_j{ zjxAaJQZ;8)=+lPjy68uW-FN(coei(%Kl{&d!GbVaUZaF+z^R$bl1?4M}Rf6~QzVprTD zmn5g~uNWWuB$JWk*>zfHprlzwDUER*peib^>rtrQg`gtwaa8)Ck0@Wbw(=CU#2$q_ z-jgpcIcCU)DZLf^Ha1=fb<4gA>LA12Id=z$Ez1B`oV1yI)qJa2cG1L*e4V!GhM0Rn zGSTmU+&;|W;rA&)-G7X;_EIzFPe10bf*;d5G(Xte4?gPB0Vr(>Vt%dQU9u&EMHs4g{T$fR*v2yiJd1dSuVzN=r|*%bx#!C?Sv+tElkztk%i|4Xs7)Qk=%1h-ubO@z(d};r^U>N zES;*}7R35IjqK^HiqsAYH?rMD>sl2<6U0)c`$~YB{nV7Dq`w!b_5Rj1?>7v((3SqZ z(#68sh@(C}m)kODZqzd$HelDYv&bz!^4d(QOp`x2zU~N(fA80V5(gW)HiNA#L)0>l zDaX?8YJA|lMB`6M)xE>N&q)mzl6ux()%zuUroB+WpzPO5UepV zxfW;AJk`f@k)Lk2?up&gyF(A_K47&xB#E@Jn&82L1kBkijr8FOrJKG3B}vQY6Jjv)aF_C?v^fAfUF5Qb+{4# zLE56C+Kj{JZ|oA^vxmymta!UjwB^xkEww=FPhZl0gC|y} zW5@z8j*fG<>)CD*%M~+b3h%;nP!V)lm4zn5`bX4jR}YVA6oQwE;6OjM^B^`hs5M+@Wi%39 z>~x>glwbDSK20ugbTX5>I~?oRD0gonn#N=3xO@DVcHjfk2>xJg#lJhrhnumF!U?Eo zLsaMDba~55bK${F3~xdN(kl2WvgU>i{6hXjWR#vJe~um8TawnFS2ul#c|>{A(p_QG z@}S_28;@sTJru;C*$Ir6PstJCCiS`BEyD8(3yIl|zaD?MMTtq6&st`&*I-@=YAIZe z{v6&x-*<9y;!I+tFW(R;YmXe)0rk~ogU|Yk0~**lzB^`Q^vA)j_fzBBnEY#Za&vK+ zTQI5Uav3zdNugP2w%%`8zpN1?w{fQrz2TpeD^j0cbEKX2*d9$H?V`~1<(GzV_4Gs+ zV+0W~V<7R?23FZNpAt&hI?+XHFr1w0j4gH~>}asp8hKhgs;T=Xz|8;gN2zaH9~yo# zyL3XIj+a{PT+S@BAahU>>3P`H0Cz*mr9^T_2Kbq4p%?)ikB=lszm}BP>9@@EXI6Cn zsP+^Kt{2Tcvf$>)Q@Tp0ymr8Lzt24Z(d_BD($D?Od=txNDYT4qx%=U8V*&MmhkcC1 znBYgZoewVc3txYgGuFKqbSK%mx?JFvKN#;?^+VXA!uW|muJb_HIaaOtkKc8lc6k2M zOmym=cCm>|NFSrqN(oZ1v#a9|GEn@SjUrJskeZE|&lYVih3uM0Sc_Vk{`1Dz`CFw7 z*}koQ?)7w=i_@b;dQ#d*?`OGCxA+ph7dnF+V}`%dtP5}GWW;m1yMHHdXR2nvBfIkK z5ntUmfy?PXg|Gbc=8}E=RNd=s54Y)i+Xx(H%)n`8gpF)oLJOn&u@j=KtGgDG&+g0I zu#r7skM!>iV}|7Z>uwugTW4EMgpMq$r11JE*mZn; zc=aAfm%)1OSHho@H9ImrFZG2-{%C$v>nlcUe`3o26YXYdu7tUrN`zhhi8fDw+7tfj z4{|8Z15X57xnUlVEp{I9Fs4dLNfnlF=lkG(1b&R7CBYs1mgC-I;vT&lQJ?N;TRm;? zDc51d+|R%*g4*y??Jdd)@`VD4`5mfyCC5f~8oStSS7}bY^fP>po%=u)Qpa%qfgQ9z z|67~bR->b@L&Pu)&I@Y@!EqWNCtoz=?Q1)e(`N#ZHULQNRPlw~vt~zVVu`0EN^ni|!Z z+fhR8(BnWXnF2E?U_$84wlwZ;?^AtcQl-sn9`uy`Cp|bR9>)gx{&9v7X!EC?EqsL z@M+QF)=m(3u;;KzJMqAb=S*yinRcd%u+$5RwQ$UJ7fHMG1kj$QeWOqke`zk=tZ9mM z&X%siZ%AHBoQ~ezGVX-_2*t|a)xq!Mc2zki99^vRg45$lU5uXVIB&K;1~uT|4%$Q$ zRsx+?3qD80VLcFfUUrr!UAuOOpltzGBWVLd8_aw2akmcTccBI#>Wf2%^RJ_q0_m>{ zUQ9F)w>DK(TX>?BZqhUrJlehEzT9tlDdBCSPg@@x_R{0f6z8fKdPYfUxMpvCyb;>W z*V3ofOIbGVF|Us$sI!yv^L#Qgy8@tbg2rs!5L^a;8d&rxW<6<#ha8L;Zvq7(EG%3E z13yYxx1f&cdcU-FB!r!Y@xqlr)GYwGAY8MZDdjW z;CN*1O*PVOQZv`l182pqSDqPlvAnw9Cq;E}&?phM4Y63eZ7LeyP9}SHqBhiNA5-l2 zTzRl-DV5jfaFXu(-(OT=8d7;L$0pykdGPSD406}`e$D7W$&{gC&e5e5rrm~vX%|G< zuhx)5`o2NW@KnAuE}7=+013fTJyj#VwrBpd+Jc{4UQmU#MyB&g6GZR)l8KoO4x)L7 ze+m}8itVrE((}yjRS%Rk7F%H}S=Y`E1Z5s4Z$RHRs5QL*c+HCNxlqY2?9s{Cf+PAd z?~58GwSUY;E;w2;2eN_c#Jv(=XJpQNpgY~dlmbt{W?^B=3%SYF- zbzeV*DmzZAo2tI%F;Egqa=HFZ(KSb_NXo-|Bq0J)Si3*T4`pqa+_KCs-P~lJ!F3Fk ziY&j1U{Z&;$bO&F<#&$+M%JsywfvLhRbKI)YC*^F%gwmp=Hx5ecSYKKdSkk2cEsE9 zQk;CU>qLZL-0VDD%nx_#&`fN35&B>jl9-=O%Fisdq}=F>?0P2)4p-~x`!8qQvagcJ zc{9)b>oWJeFx zC#tw6K5v)QSj9IZmhctw;ba@X9a|JOSX5eEv(94Ec@wQNLhcc>w|lO|ExCTZ&J&;u zVsTPjEh@jp!RgO&?fVTZ#TKiwvbEo3MZQK&2y|xMJ2T>Y`d}V4-EJ}VSl_J@^8J=v zS_i{*>xwZFDt+hM59ptz#R!#>=#QI zY-DmDUh#hDInmjknZ~|q+e2R6@88H%M0?&_tiR^drn=~M%P!WS9g{g^GBgSN&>uOa za4Y|;=6j|uyfCHad?|dN!^{DXKjtb6`&zRcZ_*s3VLze6F11J}d;WIgxk)hw`yj^@ zsgZ4uJW{_y;dAVdsL!nY`=Lr)&1v14_4(9Zcg3uY3O0#p3fY(4pJiRfMEyPc zD>=TNdEF^#y1{3LiJonJMrlM@cpEpzdu6Rs!>!fgspq_ACQHqSC2sd~@2!w*p1pDM zkyU%w&D1lt5ODSOehf83m0VFV9hsuj{q8O9t!h_Cc1p?{=G=I_x+I12%vb3Wz*11 zuW9L$)i+!9?g!s;PpDljr{$2Ndv|AbvywEY_deP~wzoSHP6jY=#!%TO+@1~VU%SSn z$|9)oD=9*{rz|q=^*PHPF}dE?XFr}K-tCv&sLAH?B55rbzOy@nTUfcRcunN!6TN|? z71qc{f+uZQV_&V)I$!qW>km%`s`*+LnYO?OH?F(99)#XhikG^4Sb_U#(y8u+*~zR8 zYvMudBs!o)&ZdKapo>cVQzO-)&vGH`#EHMqqXPaVBxD>Z1aekXEqX`TJzi@ z`|xtTWad)u$fZW1?Fx*VM?XHRe$3yiG3>wy&4}CBAKAv#lIK>DqOI}cgOR)44q^Qqn$B=-qW?L&L8Y3e;qmnwcUB9^E;@V&@AtABf4Q*HxT3R4 zDdo_?mRIC6`QLhC^VfI9J(u3zV}ouoBzWjx1x&OBVS+iHvO{m#iGP*pUq61J2b8|1t;%M7I{J5 zF#b9rY$DO2UhHs1YBrP#(qil!qZ*w#ix&!ZaC*^hVh}mP%tEtnode1DO0=V4flKHz zGY zx*dgz4wE}nBV4$XT>M@|Fz!pbf5gNDl#(M7F%;Jfu(~HI*&AO)Eb<-m$a^}pxDaLi z`-y<{IG5Og;z7WJ6k`*%l^MOzn>C(^4$nD1z}4CCl=`r4ST|`yf_p#XS}>C zhGA~}_KDkP_g=-9U`d@S@T~1E&%Ab?>$}Rm&^{R45G!IWmNI|tAlY}HBS%7nljyN|H#|hOL^;xFW_eW zc4kQ7^l2PzDqI?`#eoexqF>_h9@K6JrZx;Q6Q5Sqn5F*-Y9@sLRVWO>2Kf$(wV0d) zQ48c8I%W7f7+Br|SjG{ggNuHa(Rf7lUrYY&mOy&KX*(mQ_oy(y6H3re4|nB@f-3d3 z_X`#wMW-kKvPQl?0Uq-U!(72fe43le>~gp7+*#SIsZe*9i96kj1ZY28hWdF9&&)`2 z^Ia$5_+LOD0{dY(h|~V%<$nUH)|-6X15>pwVWi_ML)(QMoAwicesL^yb#)OoAk?-> z$EERSLknjjzM7;BQN0cU7vXe1s;b6>-; zb^A49RiH!bXWqHfZ4g@(WC}v4VmW{P63z`cwrdgmH0G`kfV`gMyzGi;P8K?$SK* zr^Pi!STnw{=U_+1Hb@`SCMxGOl^xqCN#5n3k4yW~`GX07eY0A`eG= z*?-C&>^*7Ol_!insvsoo7H~4zfVyDSoO;2No%ovV^;X-;{!#GH21ccY8k;Y#4;8!J>tJsy8eiy()xI6Gq+DmH7jo+Doo2d4lSsdf}>#M%|)~ArEg%@#;Id?`R+|XX{K?4xUhD2reo16Rn*?`o4_}s^Aik##(=*I9L%k#f5p8uvDPnk`o*X%Wd zG>AR`a4e&wdR4}bbrUu<`_X3w=OqA@e?&1>G&|p+cRc}e1PKu^Nn*}m!!MfM{?3dB zBmNU6A9^7Ga{G3)Bs+$1eqab!kVpxjVSUSYw%Etbjca(#9ztC!2`=!3#l@y{}(Q$zN zIf7OtsAhJ{bDj1|;Fg5oxIikjsDTk8*KCEa4;;-XlJq7wu+KYuOyV&uQW9redUTZVJ4pHlG;ADY6d zSb>Ln`<-p4gxO?Yg%Vh{ArPs`ba2SHd?9+^2xGFE0fkoyKC2}_Fzm!3Qqxl15Vp-? zVDevChT97?yX47lYDd`O&G-;|CJ zw4h<{5*WRxg>>KOo3I8t`;#vDued(Pkf}s_1A>xohMx*V_nXPpCCbqbsge2ab~H6H z_t(S`Q6aR;HpI3+)EE2zK+KRybPr&~FUP@~FqIizLZ}2zZ5|)@h@DyGvQj$ z|8oP%(`3Fd(Mxb(B}h$gk2;g@uVV#qM})q-2_M_X5S(L27G0sXfJ%KK;#J*g}p9F5}L}1m$VfSvt$@_4(vAPv@50_F9DkTwi zBdti(P{z)Twl@pWxBe*^bltVS-sC?wfvwYref9Y92f{oD zBNmR_I-B+nGZeL#+Zz1(OtxHL|Wwker^9cgP5%{k4Xr<9c;pKemGl9QDM^Z#(n$;wW19ZzalTKPoFLXY{>KT=g*A*rkeoSg72M56J79zVf(fb2a`Dup{WfvQ%{1DMN34cLg;Bj(W^G*R~I^;*Drlum< zYfHsz&A#0)(C{H3g{#2W*qD&1gWyYOfO z$a3mjC^%WIovAUwN8w74lDEOsN*LZ{W&15X+z`!#pn-~8EdhVI9=7uK65qo9^LUF` zO@CN^FD!U~m8GJhau*W_0FNH)ud*w6nUDD|Y;zbVxmu-aCTKJzox&nq{P)&@ zXTBd}NN)Mq-Mzc8drMyBe7BXp+~x|liv=##Z8^3v#A-q>$0kR9e#SVc>ZSqnxcX z*Ip7h6w@6C&kYp(Vlu{yGXqAW5}O77BVj`DmYd-%D(UDvMz4%5W@zyhSZ6LuG)gKL zik&a9=jrFaOsr@AXzX$yN7}m(MJqALLa_R=qVt#p#+Dgt;B-%}NffU?0QvXvRl3_s z{Ywd$H9N+DD2~lm8=5LF__v}wker&j3m#S>U|am^ge_J}&_Jvcev7>4^tG_EUPk8K z<}q2pvfDOxacNxrF_rmEbXH+46VHIP65e8sNB+Me^!`4ho}L~hV9i3leEFi@D&@ag zMC@3~8yXtGf)V;NH-@7lmxJ0daGR6^1oEtRY|M7Y5#ufoBtuTWcV>)u&C|2O?CSmj z3sTTzi?${kPN#(sKrN86R}lS6Qb#!CecA}$e=mZ-->*hIhJk?rbz5Q$ZUF}fCVCOo zNWr*axi^i7#DokjFfuYy3!K*H$aX>p8vZ`V0SawmR*ygKmLNTs*VNPyH;uMt^Xje> zv9l%3{Q8+?FV3X|5nmH($&XPIwg##F^?wTM!Ga|+fdK3ADxuh=B~BI=3k0ptM3U2s zs0DmZ2f8Kbq&f-IFZ;Uhmni>ow!{$gNHI44FKFs-W=w3_{(pK<4sfB*$+nm}x4J*+ z`}TQ8KyLCkZHDd$Dfi#*m1zJ9lC-j~okywRAiCJWKaIXu>jE0&m+m8UAflc`kX{&i z9wri3=-97>o&@)RR&@Q{Vgi^BT=7WP{L1GIu}TqXGV)HO$?=|KwyGrD`D)nqH|S6FOb=)5HGh9<~@W!ILcC4EZ~W(i(l0k*f;2u6X{h^c9U;PbSj z7+CLkTG~#6GR)`VlP($wu4zrBpnFzeF*NKYifdV zS5s|fVNIp}{>n?}JA?dt9npskKUt1b0>>h-sd4i}R{_v@CNN!(&anl8$;AiA4_@GU z!eUnC7*nT&wF)BM>WAJtnew+o&cf5+?Cx%XkW18Y;GVusn9z~(ze7_(Dk4FF!QQ=2 zdQI2IN0tDEH^@%cidR9W+Pl!v+$`EG98(wAZMW7+`JZxtyV}^D5Ph47{|QC{mfrX1 zq=D5`+GS`f_EtsXo(Ka2M87+{jM4P~G{SnKF^xeo{@B5^>6 zyKl$`s1Q!7&{3og(%@r68zCf!DAjHR!#@nn2%){kX6VRp`Gi9)ExPSeoj#?Zn115&jsF4cd#Pan diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 1e0d55e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.464293,0.439179,0.398813 -2048.000000,1.169309,1.187471,1.366740 -4096.000000,3.069688,3.095618,5.305968 -6144.000000,6.436864,6.092663,11.511468 -8192.000000,13.475043,10.831758,20.265728 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index fba803784fccec9e390e4748fe809c8784699bbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31258 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 Q^NO^0x1sK{UAE`{1AKP^#{d8T diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index a443792..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.605080,0.534350,0.417140 -2048.000000,1.549294,1.525876,1.371455 -4096.000000,3.491560,3.459157,5.380148 -6144.000000,6.330181,6.282985,11.807929 -8192.000000,7.697749,11.263489,20.547647 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 363b5bf9e5479d3830bb1bb549b8ae108f8ef082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28890 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 7dbf0e8..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.565877,0.630195,0.416326 -2048.000000,1.450925,1.375041,1.366572 -4096.000000,3.452975,3.360628,5.296370 -6144.000000,6.097715,6.055834,11.776964 -8192.000000,7.642965,7.594326,20.600969 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 3d07ae2cba795f4db92d799726ed28c07fd5ab5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28070 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 D`w5gN diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index 4b27dca..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,62.163967,63.096832,1.729190 -2048.000000,60.447742,59.672577,4.540411 -4096.000000,50.568192,55.342079,16.777344 -6144.000000,44.912640,42.561535,37.622787 -8192.000000,51.596287,46.752769,66.763107 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 7f4fef3ace16e2a4b9eb2b785b59526bc37415de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29235 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
    BFTIhoxe|$GozpFC2 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 FzW_;H=nen? diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 642077b..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.613093,0.599950,0.595466 -2048.000000,1.648303,1.665210,2.244574 -4096.000000,5.320917,5.406336,8.255507 -6144.000000,10.563584,10.496256,18.506752 -8192.000000,13.491200,13.719844,32.638046 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index d666d1acb1b088d6a8251348af9697dcec85bcaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26572 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 Q)*&6(XS6qWx9$1=0?b#v!vFvP diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index 9b4cc3d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,53.300224,52.809727,1.753490 -2048.000000,52.349953,52.049919,4.460530 -4096.000000,54.665215,52.781055,16.821861 -6144.000000,37.277695,38.212608,37.349678 -8192.000000,42.204159,42.647552,66.748573 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=64-mode=bwd.png deleted file mode 100644 index 50e0ffcb3c96658a0faf90d033e15c48b9c36324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27683 zcmeFZ^-CaY^ z0Qb!M6W@F9A8>!Vyk5Sf=HYqH*=O&y*IsKPHPjS|31|o)5D2ldlAI<4f*AyXU@YR} zg6{~9&aQ(0MBU`|+_W4m-8@ZQEFiB;-JI+k-RwS?J@l|}asA-vz|Sqp{fzUWwVRuh zs~8WD{r~;~x1);{&)9?gN8loNoRr?WLLelj=zkbLq>Da4AhutWVK}_JoK>R-y`1fYGA7o*^7jey5{0a;zGq@)K00)QwesS$ z8;H29;=g|VS|{ZZ*e~J5kv!Q%F8#@EKF&NyDq&AF72cq*hK9zMo(c5pYn4<~n4UiU zb0oSSO963R>in>foBI&G=*AT2jJUtV&9? zxV06Tl9HltTn~P~u?UhH_jhbe)aQhaot<4Lg^By|!-qi;5%_+7ekI%>f}+@P+WpMx z;WPD)jM>@QataE|D=XiPX#4MX@hYjSZ(JO$?858ge!VGf+QTknVoDGv2)cYMDM{Zv zr>3n%@nAU z{Z9xt^4W~D(FjF(((?cK@uPslY-$?66=mO!asNu3^!|_j-rn%1Z+`LmoLKYm z^V7SBfBK~N?mIX=!o--Q;olYG#9D9nn-8d;nPE43?77t7;Npt43KNBZwZp{1%KAt6 z4(!PH-(V-7sAs?27|yx`m;GVX(q!R2=YKx;GFu|8rbd90Q}6lh&GpgQndQad(iAlA z-eO+8vGk8wSe|(wzlW$KvUN1N zZdk+XxJE}uON`sH&3j{y$^);XF|crXE&fpSB2u{Y73Acw2a>r~VA8kwswvz8)+0eu z{#OQC_HW<5eVHY8KS&{lX00J+&cX9j+kFn5FKKDYU|+WW7DTV;t;2F);7R+Ud0P9% ze`+bKt6Oyhv*lPZ^3zQBqS!w6#fp`0(LVc)0k#Hq^1Irj}NknETV7s5JM_jMCX>dvL^W zTE}~ol(^5Wt=U$3<9f%&zS0QVI32W{SH15~D8_B??v_&w5(~VMn4h12nJy6dCy8UD z;Tl9jM0B+ILaV==ygUZ4`?j{tRN2tg>CT6LHSFarXEbpV$N1&Y64l3Y# z5@*xqqIbVFj>n*oQ4tO45%_wIWNKNO7Xv&5K{#yf;z3|SIt!ruOk0;CW?DO$PLmuLgURLP|BN|o7;w0#X6;_ z(t%P7fwz)fVZ_b5N8ZCvOLr3;F>ZQcvNOYd@m>9Ek6#cwsNQLMw&P86@2%$cWKZlvoM0|Ge>92}?f zInR}~wVrC2)Xs@lrCCpA@K%q@l`t8pvuBP!?lm&QxY@J5iDs(kb$de5Q|%w^lcoAI zwYF5OYMBq2nM1%HE^llo!m=f2>g;LJClBPULf`ZK*s(U@KfFZXQ6uBxtU%PEBM}`s z?N}tM4gN1*5`p|vU^`W2H`@>oJ{|q8NaE1EC)B$&70;~5Xa7$?A(pNm#0&`9l^Egq z20P=S3}N(vgdYFlm=b*E7D{km#P^I7JknBkBzb;51*-iaX?$ll?_!GaLrMCx{n{p) z^IQm<_b>GvDeZEjtS7J1HJaQ$=#(41dj1>|P06(kPC3YOiQx=B5#X`-15g(RZAO}! z=$ZqNk_K4vc@RhnaSTHsC#0^N31!4E2BP9eMl>8+PIb)8%s_CFE%={jnP05}@&x3NQL?2qF)YZ{BX zZ~GGujY$c*?dv-dSk}8?W?cVucdeI;SP^ls*78GL5jKcQ*=HKTC|qJ1Jwt_$P1k4e z2NGURd2=}tN~X^~kP*>f*Uw^F!QL6h7yvXwXD0-I@6rfF9cCWS;tfb(o1>Zo@M zAf}HK2H+qm`u9ZL{|?~5VCu7#uW zxQlJxM8v$g;P^a_#dddTX(?78Y_CwpkaHlYz7#x0nK=Phk-uYTS9W#=0Eo&|!-xZG z!_$UJ0I@eZ8eQji=>l0^UT#1Piyxhz7lEWNak=_6vt`q-Jv6(ie%>bTh9 z6oC*Uq7(TNb)TckdF3}p>&@0!(bnj9yu7?TY;5e2GDGpR-I1<18@9-Lqf7_$Vl0r#?ps0H0&aKqIa6wI+ZX+FgJz`Z@KvSk(X&{ zmhb}d59=pTs1QH^MuFGv9=p>rEk382488zxY|S?EdoK73E5c#s%iR>@a_|}@X5y!`!aCpYa z$qC1#>ro{UjX(swxW@>%+krC+YFt7p?p1(<1Z*dFqslKYR^qBnyKvVB)4I|HZ2?aA z-EZtAH4=85f4MVR`twaOrR`*i>BO%$HI56}B_$;TXQzAh3&)$^Pdv#X1K&p6$|z0LLVO&B5ReKzaSEcZ7kW zBcrEB4FMYiAOeHBy1LEykB*k}`2kS#H^+)#f)mNv*~1`1y)rXn@|^eHxWChAa=6&x zwmUuQeA~ITUu7|X`6W3yY|g<7jYWKRN<~}Ovn72~`K|62>y~?b8UU~-?8gr_OIY?$ z7m4&>gY$~@-~2n|PhL7nl!FSMvbXa+PHMS_%J@A%j6b`yK~b3A^8goF!w&*W_j_z?tnw8a4Fu*WQuA99 zng9OmEK%o=^Z+;pubq$w+OEpeA_wvyfb-CstDRW@!G!%d+itEn09;_@;)(&~v}vC@I=A$S<4-RWoOnlM)Q>bBAYR1h{1 zYD(@;bIo}^?#0FN#jhbX?J-25=chwAHywCG{$2(yn1Q!921)L(xbHf955eK^t=1vS zE{A$7G(HjY+~4)$;>I`nu*CnQ&ZFFvLmyv9Q3LnGu^p!2V+p9$z$)G zk?&qD9oAy);raP(uRV>BT^~64m&?&SV0rrm8ACtCeUyIpsGt$lvX2j?ETFDhA{3y^|=hrK?i{xek;gd5yVY|j4$6Ev=AZsj;%f5U$B zOWS!C%6)~${^l12_~Ma-1gdH=QA=`a01X~=^%|j;L+S4=EvvwtDZ=}|vZ5<}t<3~x zu2GARn%3HCzRTJlPW`&i=qgy06CkF08Wlm2FKC->Cci&F z@H?H*MYkoQ4*In=Zy3B5F+fh~0vT)?Jlb57`$}PkgNuX}=%vt&KvA|&RH=S_mFtGu z6Sd5~NLB9X5}i^SbP~9|Ik**gRue(-pxRPKg@9AP5Tcg|>P`0cSP{uYv2Ky_*C&bG zhUwr_@_YB%zsX07xNlRu$`D%13upKS0tuX``2?REWw4Zy5fQnd8-gBo5~7d`x9cEw zpvz}pS=9?cew+nKN={MH9OM#8PN&SjW#9&+Z&CdEb#_bZ8IDiH#M05}`zIA*dCI8C zjU7arIcQCV0~VQ>a8_f47o&L=cglI%1e6JQGECXZ7k=dDKL+_z`Q^*UY;1j7mE+^u z0Q@V0=s7|ls(-w2miKXtjF{No~ILtNKO;>arHJDO=rhXO- zN(k!u8la9wyE{DK68)1Ej|MaE9JCf6>LxbYK_vXI1i0SSw1cFIu2*~TdIYG3}0U)LX^QPFJT18}(l)raps=Zg^6$zl00Ah5qNip0Y7^|mvM5ecG z9`iKVkt}A4x}sAOi8Kl{gNb>jU15G8!eV>R!J>h{0!?ac-QuDNNa(-8KbKjnckgJF zm6g?m!NciVQXfv6^Lq11+%!x~C>c4=KpH#`j6g6cfh_;F#+nr5D)YtmkA9bHDUj~o zUMvG4QfEEA)Rjur7<%z!aNS-m6%IpCc%!Rl7E9}M9So_3hrz9tH|(;T0OI58lUL|m zW>Qw$WDggTy16j-IotJ?Mbb(6iO7Z#InS!AsA%E?_>?mBgVb)mBr@ADa^QxInTd(c zw$ccVMDH?4;6L~B5`lo^p$32a_^}8>b7FZpkBp4We?5bMuh1?$#ou@dR@<-}R}IoC z8o&IsKi{8A@7r1eG0!l|p-kD_hP&uZ z8RUnJ0GtYrqAWlqZ|fcC!4sH)P7X3{CxlDFFc^4?H2$SissiHC8!SrX=g;}F;ddt~ z9V>eo12aL#!Rvcw2iPT2QbO$#eE03=1uBQ0ZIKPsDa1kGcv(!Ayd`3k$^@`qtI|v! zkU5ed9d1vrUvA`V%r?6I2hoVSh9z_9S2-=cC@p^q_|3h-jKwMAA&iG&r#tBeSG_&} zdXrL7DS}#nZvOx%Q;P##8o=wXz>b4Ti2{6ycCpUTHygsDP(rG|RTio*Uc6v?TlE;U zJ&XV-q^umFT42__YvU26O_u$ZAJa|xHp?Y?0*7NXTdy~)Oz(zL+ zXUT9DzhhYZTynNUT|vPbv~(_eE;-(`&alZuSq;A4I_XOEfbSDAtxyG6X$c7lFK`el zZ?BmE5we)=yPpU0AV{!$031mncllc{*J&|NGGyiQm3WCZ7Z#xF2h9g1WeNnrn7KHZ zSVQng@)>)_)(>^W)QeF2G(Jn@LP!e6#U^ugsi)(HJ%=_g+;g|D`JK4?wjAI}ergsF z5Yq^NT+)i>hQOf|uLICfT?CMMSa^5yJrCy5I2)9h4MS4E%$4);EnYYyY%9%lbeVBv zFf__+Kqn`0wfSB9mv$te6G6iVSxi;KLnAxT-)4ejuG#2f0orQI*R@PcF3f&@i?=r< z$vol6{puzfc6@Ge{Cr+<-$|6u(SyGm*&!Vv9Xkm*eU;|xx`DU5bvM^}>WqgcZu1_u zHv{!Ur68kewfcEWU7u)ycDfS22RgEFz>O8{>695n78S9gVIK$w0AVE#qV9p_B0e>> zrLH_2ug1p0UQ*L({6DpDFk>irZhghP?(%9Ky4Ul)0@^ZEr;5k1QDg6rDdC-9*z9ri zSCwb9$=%jwvZNmXSswU){Xzh`u`~gI1+ZUyi+>T*pwHQ)ld@Ag<+Djd2yQJiP(aqA z0M29w5d-3X87#qjz!j;fE@3=oWgTnr^~AkPrv!Mx3y|V308MzY6wb)`>z$ljSZLkaI;|c@MIr4294aLK@TLTlCmAR`M!KHac9w- zW`nHr6IUfe3(pfH42tt)m#)wAUeQ*-OTif+2R!rg-X8ID6_u!-q=@3i!|bL*26EEI zgrb}<8o|XF;bVs+HfQ1{T;3cnA0IL@vd+pjDg-e;e*5}9IgfG~b(oBb3IRA5%#R;q z!&Iq4C`lXTYHcdqiyJ@v=Bo%F6YoWB2XU^ZPfC zSpjq1XITwyS_U*l0LD}_(K%xPT5bE1Jf1_$4S&BGW&rm*GP9l>+>Xkx(1dV80407k zLJ1<3>YhpVnWR6B%|sPA8G~T@lCSZMD5SeaPAxw(*U!ltD(QZsvidHG^TQb`OAMzc zTHi2+!V=7KG#?HZ;emWI5ciB9D;X@RR1^AP!Q=OS;(ZD7R*qm|fnMC#W}U z&h>Fe_%bq%Sacq%gFmqvR$x_-fw6CgvRK;xi?kYp8BMjeNI<83eRxWr)SGz?EPaOB z=lfvEyBzkjjMZ-BwW&TLtOL7M4fElh5 zy;Q_?JMUkZ!!6IfV_H;AzM;wI1nUzgs>?(F) z$@d#fL9xNc!~2?=ssxyFF#9lwH>J*0lib@ZZPu)amZpUrC9X`z*c$V-4|MJPk=ai` zew6w+CCRw{S=w^MGr(9aOFA?sh0$^T^vQL`*%UOLDUhEiRTxHhU3^P9rI52g5Y+fh z_>112-PO$Q&L($D-TpVH6esSFCnYDg^X0^}1<^^ZK0I>^=d#zbM-^)aWLSy`aU(mu zMkv%23{vxRHmslI<&!F}_pPmEN~THa1Yj7U``T>_p^w3#V;%B~Nt;PD2RS=6VqFG#c8`uILrA74N=H}wgbnf(vaS-)^3llnRIDq72(KO9 zm7$4I!1h4nFKRome@YdOr9!q#TQZ^t0S_{MsWl~ld3MpbLT!Ky6m%pxD9#RO5t+rg z!d_o_O{uo^cI&gzv-Ha1-)6$QiGg7F`!FK1vMJ%4GKR+Y zAi{!^5;qhS1(t=SE4yQ~T2a*JY*SErVW2CT?1m*Xcu6|+_r10+er>VEY`jEW&W3Z+ zF+s0HGMYH%ewRXqR9RG>OOLdIkiFi|NG8y;4i%LAaD3C17k;!90E8mxq zb%^651&lcpA=0^3(v_(q*&mrmo~a}%qoVMKxFtJ$Xr*eztF~S5X)Z-xK%SQmMGVWn zCcjqs2W-2}#!ovp!kkOS%YRzjsA`i4*xtOqX*rHEeQsIkJ)~)~y=Kf~Z#$0vCy76& z*^?(zlJIof@LCY;^n)sE{2co$qM$3&)61rnsd08K)|@!C{6*A__-9%?t-@5vzy$Ga z3~k6@63P!Nh87Rd@i4fzw~SJRHy1#qyspFEYT45L{fS@w&MF!2u=4$I->{TW-CqHr zbho$2bu}WUnju`YD?klS;v~d>6lPOn$~-Q8a_qDjxHh8K*(R4w%-vUG<+3|l8Ayjg z8z_|BU9%(p`*}`#pcIZi=V!j2KNNrFpL7L%CPG{<9eMWd|I~6i`Ozpb9{MFI-qc9l ztsuywp#1idM8M8^-~7yuT9DvfO;DWFpRz{+6bT9K0ek#^c-^169XJF?TitcrgxuZ; zzf3)Zjp?Hr5Qd)}89%F7W9|!ZlYd-ly&$_ZLV)@Vc50-Wk3gErR^e zY7f;}`ORy6@9~rLufFRif*b?8hN8}$(94UUwt8ucmH|znADkSPFAV57_cg*(+jwHG zPPDv^SvIDg8qMZ@%=AL9NxEw=g#=Lf)k67h@KL_I&Vp=@W{Ptu=<7Q=Vzc_d*+S*m*Fj#wcf zH+K2X9jy-^Mt*9YHDyIpbyZo6KpRENsoIZL4#%}b&(jUJicQ=9)jA=D)}^Fw>9PYE zd`^Nup9kmTbJ*3^jANL=;AOv4XZNv!cf+2KpNAyS$Y^oLR?RqmY-(g=*ZvwcXnuGC zt!o@&_;CcOPizUDclF^9g!zTtNF;hUZyZ^K^F$KFHr<3!us?>jnEocB79}(CpV+qP zego!Bnx*;~^&HQLL_CK@DU7ZjT~3>?8-Kq4^nLw|-8xNtWTev#bS62|j#+eu{16)z zbg$_8Q+U@EtXXuw-o_&P+s#Qazg)fOU_XNOZ9{uBk5PH3XC;Ni_16v_(&mE?eEw=* z)|1-3VP3<&3>aZ^!O5&f_$L9EEn0>-<2q zalG|g-P>}MpA+8pxruy-Z)yIHgwA=TZJ=}fi$Z1cROyB7r`<_lZC?w~V&kUQS6R5u zTTWLDz;8}@5V)2iN-v>4JS%DZiw6hLIJ2HXt>OF3FMb$4!45Js`r>qtn>bE)WhJBM z(?X#W(;7A_EN8V>_<$wAlOmqvW%my;Ds>Wd)Xh{fGs1T%?F|u0v-JBbQ`lig_R=eb zCaMQpLTUy7M0{S493Ard=5S*#$I6;aa;A!qUY!ZTJ@!AbW;d*B(rao~VU2H%IW0mm zCDN`N4p^*0c!;0tUTv>@z0RcM8a(ub%VWKhl^q%@o+AH?LRHDKq!wx3UOR4FNl2QW zZtvWBHt4<2_iom{JZ^;ZJReA&S)dJjP!o8G!{B#sK0th9i^oogR$V9{LHy~g%=z27 zx4vFnhE^UH`}>VA8>}$%Zt_y3mGkfUAYN_GiaOr#L>j0}LDqxI9`$+brat)PLhwbG zASEEcGN@^BQh$gc=b$Y-oKXmFIV_+aXH|Tv^(l@-mN-3Pr4pO)X9a}8U5)HQAb-0I5joMoZpJo2T zYR|O{p@#c#-pt>KO3QSch2Ks4Dk*)nSxbzcxbq$62xK0kv`XDHVW!!WjAG-^;roLO ztLF>hxWq02!;L4d67?6NPaIP5pO^lvy}0Tq|3E!j@!W>8(P#sf5jbw6G6F4vIci8p zMo@?fWq6APAU&uh|4DGQxfF;(ij1XQwNV98mlWomE#!KK)0mxDT{8iG;zLrlzjum_ zSO>D-9O6B4iTs4ESI>=XZENeySw#0c`vU41@V&#M-u286E4>+0?~Q&L zPIz>mMz3_xkR+JGOfC|ZW^dN^cEwxD+jpoM7g64TnyY5@-8U#MCiMivHYRzaMwi1m z&kDcBMwh;=vGv6qE`68zR_*8PH|2=iXO|!QDbCr4e}xqPxOMg~w95`Iiz4NCZvpW2 zy?YQr8!-85zycHjnC^61R*TNr7@V{{6%>jW(r4TmFpWtol~&o_VPM9}Xa1W=r$ny<%px~`Ow`IpN$~I> z#M+}%2CjB^BBFwIjT%ukPCX-0oCl4Wm8HGQdrLzlS=B$pE4iijE`OR3Qq{X{YMh;C zXRogjGU0R-VCANyQ2l4x1DbS*(#w~t2$=K+7!xiHiy!0z0uikg0b}bJFfE>2{w4po z-2bw``<>UsuS{L$qm#q;dIP2<*HiCol7A_qX1w+<&ls*?2kI&cDjigu4yF@NtLq(4 ztX{4M_Lz-wE;YGK2Cv$`e0chX5kC(sGEV_|N@# zKQK^T$6h&T%aQzbJkIV~x*IL{*;;A$YbBA55Pr}d+9xB2U&BhIp{+q2l%5rCKO33G zlDPa^kk18CV{1nEdco~YjH_|ILBK*zxOW~5}m{uzIK5A%$_i|}ZU zBEL_MHQ$~n5eH?X46{ONVCu`PU;R4;i;cVbVEpVMfjaCOFV>9%ymFOE2j+05XxI5d zU|<)LPTYgDqoX5MUt3$70fY-qk3;xM?@)XSIateUj0g#8;K)lB5vZ^HHI6nv|8+I_ZMiZi77!Rgvp@1jK4!HUN2|(`E+XfJq zval_S#WIGc7zL|K3;Nn%VlGPGKAWOFL-5yE(t6AzuO-8H9;o@~h!tR|AZD&}oC8mh zrCdf)pN#`P&NVOnEGjAMZrMV>L$MZ_<0Lx4*hkd+_;G=1N}IKyb zySZ(r4#Y=zcc|HZp`gLhIr!l0xo$a}r)-0_)haBmOg7t;g?1`~-&vXkeH<{TC|A8?wrhfnjWIYOf z7kj&Jsl_LuMms6SRlX2nW+d`HQg_7MgXHcLhVHKQj>F`x2i|ZcsANkihXFxM^FH5# z`1vdrVgnEX2DvatVH#|}v9(}gE!9q$94+s*r(_Zl)1*=%;CoK`q44Q{o*Z*K?!6Av z-g{G15jPU)^u3;X@0uy@GWtP=(mTQ#-x)?m@PqswALw-SxP|-)5N{k_?R)`rB@PmY z|Fq+$-|fixC(z6K3M4ChrFj-G=k_Az5+oi)40LLdpe-fE$3#FtYu6|F`! zz;kr;T7S@h+~2K>Bp;fPoA<&}xt#A-Hw;`3X_jt>4aCU@a(&zHZbDUD7P$A`RAo^vg< zMqV8fuTW#^mX3?jU4CAz{ef>UFI1j}>MTEB#&F1S5r^>vWY-J|6sx94e97L2)?}3P zTp;yzKYtcq+OwB*E}^f^b(#SfGl|c zkF~FEvg^m`3JSQ+wNQ1nc^Log1(0+;j(byTlTDc|y?~N>gyC}mMyAnp<#o&Iq;O944-gi<{8($7r5F}X;epm1U-tFl zW%~|8r7En{*>vyzs|&4Y=UtZ)OHtoPeu5l8lJ|@i<|5rMh4%G}Rg-OF_038Nn(A0j80Dk<;mtWlCWV@WNP+;;u=KzIICbw+x8YO>N)nxXf}EyLQ$2Lv;Yw9ZjFiqueLy=p}y4Jp5h95ZzY4exLm%pf?m^a$n#SbHvkv)bU@SPVV@h zy0pwe;LOj{P3>gtGfdj?r-spvVga%thqyW^8*cCMnr9yEhT~k{~cb z-$hfd6EJ;!BJ)$z=|)NZVw=itVaROVk@n|*A*B9oK0~#4G+>VEbeKDl6tPNzK3p$` z$H=cvp6QZ55E+3w?rsL{eb4GHx9^u+n3ui1yjJcX$#?T!3#A$ynJbKW;!8P|5AuSh z+^4WkK>?tig-J>3eCN~_ zd$b^0W=9QqhdZnDUzhENLuD+f8D8bF9)pk&ygYy3hCLy@#=jsik8{xKd_sUQx5n%_ z({*A>uj^cVL*dGzWbzA0+A-7`m9j{NiF;(|J8L!pdz)-c$7vv50g3=cRLc=6f|E`a!W_{utcJ%V8F;Ez+8gmk ztR2bn|0eM^$Ld&O7&E$#x~p|kbgk{?Gp}2UiaK)|(ECG5_2wJ)OXRo5JHqct-yEp- zomj2ZAR|lM!ltC=Lz{DMK@mi_9ZXm1=rU;@qEDxR!B+(-x@m*Z_?6ps{#D+zqCdx) zZQI&*H7PL}{3YBlKIGY3!;dI(&s$~|=`EUegAqY&Ce3j=$)vuy>*Ol;^|>!wBn)Y8 zdr5l}t|uC8`QzAMhRWlOc)hq%gv zQqKNM>dIRRMl{4^4!?#_5K6(uc~G0vqqSc(T==kYpB}#58+mlGUA&uHZ>u}3x-W_3 zgkDqvKU}V(yj|@VdKra% zGxJS24e-?^armt)>$5~Kcv|ttin`ABEH4O&Lv>1b-L~96JKSC-;Vsbh{&lHGTr)1{ z>p}^~#ALuwbGtA%Lr-|!U8=zm6Ba0z>7I@FA%3KaCXVgI8J5>GhAwdodw#vC2xyss zyIt^V|9bB(U-pQ9%pm!2S*t$B50jL1eWh5pt2=VtgI+w{UeLCaInMHRRVOJv{Ljza z`@1iVI}du7`zmhz4Yx%Rb?X|kVpIEe{gsV;S(w8(?vJ7)il;%7IA`f$u7!FcV#olC zY(6?Ywp>x5oha5fG@QS@v^qQs6W^}@Y;G^_!$(WUJ12FHZBWJ2qMXJ3=AnbY>-(0s zsWRFj(nn==i7|@8Xh0zydn*I@v#O~(r-TKs<(O#{1qz+tn>(=k60QXgtZh~Pcdo!h zXUT=zQ}J@nz|czR;l~_y^lw`kx{;QeS^A~iJi0{8$n-WL`;yXvAN_qn8#%DMzP)i9 zP{T?yjiS5b#ds4oh0fe;u_Ti>>-fIn!5&{ubtzG6C}_eB%LlrdX(C_Jm=6@A5d@F! zS8Op2`4usMC^Nptv>c_wXz;2&ZEl7!kRT(F3?>wq{D|1d!X(gGAtv};ZAsbTzfvRO z?+P6?AJSJZbL^%ej!@GZ@mHCta}1QYy|HNvzFyCho?4C+>r?%jlpry6raQfgd3C3< zn<3I-BQlHHfPw1|1;+}$PYm-=1=W2D3+3st|IH$0Per-XItcL)J?lIWw%TJ3HO{@T zB36lOfzNbz9zB|zyin)kAF>^~L5-DMhLDt$^}Q=nGYq&o+bYVl)kPe=Db9VvfoOt- z;8o`cn_^xdWqWL_L>XxY&iH8~BxzK4NA*A-^VNJhnv)^TpXU4^yQObAKD5wE{eLDV z5e-c<;#Ol;4vcCj9(*|Lz-(8bD2CmT=J)51MlFLZ;{?TfaMN!5i(^%UK!LcDdU%$2 zR)~>7rs(0CW(aPF??KuED@#XFPI`-P%)3l8EtEnp`|LDxCCdG(e83YTha)fAX#~KT zK&;(MFB7jDdJ~5Kns}hI=>EeSJBizL1kd_G8cE>1e0zervgkX8px-e=*|qCKT-=&~ z`AL<869uNF#FavFUxe|$3cnpJnrgGbDn$w44wpNgFBqI=dfGmGP$ zFUK)J3-cJ#3dCV(je$%E?$P{0;C6mtAs=YUfp}95Xg}=XbrzkU?tBUjHADoQ;*ybi zno{F_HDi6Yy74GKzi_2~>#f~@@e=ASBc#clznn4pb4`<)*Xf(h*#|b`6?Mtb_w^Z5 z3mBPF#PnjRV>3Wc8*78RIYVBkCfG)DclfS16{c~PnA1G-$La5tYLdR;33t~n(vxI4 z#AANjQ_p`%z+ge#nh*woTYU&A11ctD99^719!=dy01IHSmeN3WuN z*S^${778W0NjZ@&%5FhtoIs(Qs_W^B*Wa~?!FO<%i1Clz%VE4g4}BpKbd5aU02&jP zCr`rA_LtbR>1jRS1&D}@bgubtHpEaDfFx%{BL<_-Q2)oCx{Vn?(NGzx{w0L>@iha;@KIkDPNWPtV>D^f@M z9e}9qrm7cc=Z}t#9<3&b68(ojX+!Z868;4YO0#tn0yrWhigo4ke|*rXdysL{5@{6} zkQ`?&ZTZ?n_?I-2VNT0(w8i&ruSaF2M(xv8T}4$tiQVb=mZsj&+&3e;9{l5mdYHtE zt;oSQ&jPO4n-v8fw$Bb*hWtt5A@NCin#NpA++}jG)zZxnvsOAZBk7AC2k+K`QSuMN zraGaV^ARHb{5U(~as z*2r1iJt-g9)==3hF?8c~WI|iZpX#BUHNPm<^94sEc%3!rczI5Jc}@c6`2q=$tW6oq zrf_>V-*Sk$t{;!pJ3CwcP<=UQAxMOFA?K8b|Pd0 z`7AT0JkPj}s;17)4htRh3~54zU0(h$;3;7UF!Db4W-WuUlw)K{`U;UqT|CUDdZm_> zloSdioLyZZKsH56PTmD1B3V8dz+?pj+?n@!nw86}qncz8aOXMr6Mu~8!|8?5Z}fYs z^Z9PrLEa_V_6!IXjkfi^dT)_7Rll~huo~2eYkx3b;gt8_*HhhL__fvh)bI8@pP+;? z2O7gzR!2u4{gG9QvIldvVeN;9yBet$Ff(wb)uwjs#hM~lPgV!cHg>jDTPl1&?r{Gz z-Z3@s?X?j1iz!HxHRPq5+Iss(EH!%|ll}%AO=w9XaP_$LQIxG<-nLEU*i@_~AB?!I=p!;{>>m#*G*7+8ZQiO8u>Sa^e? z`!3aSgi~Bb_>QzfsR&xj_p7K(mo;u_fBn*Q#A$fi*-MY?=`8^oPgj&BdK_*S7+@42 zfbY0CUai~gW)GDl9L0&@evz}lO#^Xt0SQ4|0V70|crX};FqO}O00`D3u204wD4-Xd zf~vQCl#_F*J3le<8QkvJmR%ozM{nz~`V}da2RLJ?t3IMY&?pzX5z%>FPwib_7K#45 zP{~zhdXB27pZ5A^;7Wd(;aV5@B>?x8$0xK2~i#6!v1)5 zJxc)L20zSLM>fb4Lfl0w7W2FG^)Fl_25xT)ojkzIQ?=k8zJnt7n}I|JjPqEFB6H>C z9-o7b-mGVZgSy^_jyXBbWIZ+w<*_N;+HgylE@ZDbR#*`rDRG|Jh?)j1$egD!yj8dC zQ!2G9J=}Sv3`$|Blk81!_Sg3G=4xQ~NWT_LNO|i^b%yAE`d+!6A;178yXVIbP}!*R ztqQ7-Hiba$D!rqxJfO0o31kogQP!(qRa@S>OGpwN(fBMM&lckGN^kPu15T&zXj7qS zX!mz4xj4k@SHBjN6!C<=mDpsO*Hua)=xlE(%k!qu>LAN=Q1k}4&>a&Ke2nkwacZekRH)a{V|xbf z?1%SOVbTJgOuzyWddwZ=72EK6?O})jXp_lYmdd zbxh|aT)CE7e5>o*Dr|lOsheORu&cz-bS(E+vSGXC?@#F5DygYj0&rbz#S_2`u*;0M z87po|Aa>Y&LUet7%BErp3k7)iKY|l7(#B_DriZU)g-?t}a`I~)M|o4N%+(znmn+;d zaSi=$KIjBkUkUEJ|M7gDUv?fQ-Ie8OB*nI3W~B+M*xGyoVn~wpe3kl)DO%AouKT*# zil@pezcV}f|DewVaXfO8zpftY$p^-FpCfJdE^DrfKH-Fk+Mgp2))!-?{4;X`w^8i; ztA^v%=Tlp4E`Fsya@mSL=+ejwFiG%|JYh;?QvBbwQQDs&7C$KQ4yQ_KRr-H2yIFPO z@h-st6@om5gzdtdbMC)*Dq>hY#ry4%MUmqQ=1V5v|#ooXijpM~q!|C#m^3O%uy--c73^*k@= z8TlTwa%96&Y&cmBgd=8#9h#5-N7zF~+Rr$qdp+EaVN|nw%Tl_n{SEXd=!)E@+h)sh z{y($8$cWXL&qUKzIOzgF*5r(Lg~ENM%gw};tfD3~h0%JdGuTJYHrbnCA7^dZF0 ze@Hnijsej3r00tk?ifG-HxH(&{{%$b@VCb+(ceao%9wEe@GkDvKjJ43Bj$$(hYV#z zP!OTpY<3ORlulPz+5%AV0mJhLQ6>iBbbQ9twCH~1Y(Z)+Ng)_VpA18W@_ z+4I2OXo|a`PaqESP_(m2d>@E!vw(Tv2-yGl-uK;;x>&?&y}j`z zDAFNbFv)XXU@Qu_KGh8)VN?UoztVTLE)uQ4p72z+%nton$Le-M7bw?;YY(p-E-=W9 z=U^8YYlmKK7Xyb(Jlvr<23SXd`7$^zE^g(Br}ZLO$o`+6ULNqkJ?1C(*bDwwJA?$1 z!LO2VyU9rwCS6PZ&z*v7($Aj7gBMEhG@^%FT0p}J)yTqC1Gaq;kyK#P1s<^yZbjg} z%M!&Rk;Ja7tnermoyt)%ErK1q7{|KkCRaBY^Dy>1l9$p27QCrHFp}Y{5DKGdN zKiC8?oPfUxJ)Qx2T+Kc)7J0c<0zmRja*B8mZBGC_E@`6<*rT(ZsW@PbMK7Jt>9%~m z!yFsn_$DkOBl_ftuz)!^I0UG2tGOg*pfHENO@S>$^SvxEssTNXPzLdT%ym^wbfl#9wXUq%r8Z@&rqvy~ z#_Si76z-wx6ui$ty9Ne5D`n05-`>^QbocZ;1J)-Xh}YZnxdrcN(ee4g$PZE?#_YMm zLsrd``{@krXiEsdaOA*PK&~zUI`}cRH@_0m&)iU3!YLBSaC6a>c{o!%;%5_~8?wf30??BL5UWZ7=(Fr>o|abO>3DX%X|2~n^X*$nvGRX2f*E4|H2-Qt zlDU=+mv%i2W4V^E(EQqLVhR`g<7DvJ}A(fP19udH^xmBA>9zUS9#8oC&Aj z!WRPkx=H{o;u8=s0YCocrggy87HjVc5Xqk$EaU)d6cE8H0pO^lq*PI1MjDT@pgx?` zKMcH0nbY~1(3uktFwEHcIW~1@=S#(7O;}Bl1LmvK-R#6pry>fnP&kk10{Nu z!C+!IQfaOjT}(;ZFAdl*SC~v3gVSOVc-Dv{f+3ZMIC*lBWYEj?40OAQw%|CnT_*!4 zE`Cs!xThvCJODj$7Z*6=uaILemzgvZ-&=NKk+jcwb_HS3>^|C8%~^18AvV#`p+q|X zfkqs-Z^&tBRTUI)(OwUG;DM8AbXhB-fuM)Zs;aJNi^ZSwfAVrJ<_AVU^hSw%jf{9b z%h1`SK{(|`@E&jy0H+ps!-bPQc*@&q%h$j&{og&<4{)!ShIJ82*}+)A3XK~$gWLt2379RvE;A5K z`1y+EkD25&@{ zBY{vmaR9d+G=gYvH!#+!0G}(cQJIf^lSjYZ0p$ONwLw>leq#sVC#-0&0R>}a4dpBq6q?MA8Y^1L_FX)K zFQKIbq0*#{lvi&aF==93Sa$BuIj!P%_W&1S1ce~CFEOap92|x;>w_3wL06|hZ7vr@ zgJ#4jFv2hnpjfIYmh}_GMTe|R!V2hlhJ5=*PS;4@JsJXWkLP-+K=Q8ix{v`(ESPfj zg{|l5jJ$FFB%%vD`!-P4GifT(OJz#-MCar*7MAOr-iwFkqJR0tCh{Q9=FP=&^sW%N zy?ze#3@vmdmfq>c?@Y;2dvV%JNdt_$r@=VM7=ru}!0Ue~6`(R{tNXY+H*_nq^z5RQ9OQlebCL~0o zqeMlfXh5Y>=~q<7jFnAhGAl!wqM|4bI2z0x^Hd6DPTIC@rmc+IP>8ti<(&JwzdJt9 z{pXzLNp0V~zH5EP_vf|9`m2(4p6Z&kK^uKWS*}UxSAVxL^|+WA-*b$RZw#%zZ&4t$QZj6@xx%7tV&Ua&E*zH|eU#l3=l_h%q`!}6=jdqE zuKuP^DJXbiZNM7O%#wtcKSiEe5~|$#dbG6BMe<@htG!Wdw08daxV*iQRx{&jP@6!< zRE$PwK|KnlW(O`_{PD}1y>p`dsjhrK=9_bc$qLdsv4Ru&U+dU*?yQ1ab93Lm9Rme< z^Zjp-WID6k4O|0fopw6wZ^7GNDQvIBK}jY|AQ-X!bMsZQ-l z*nw)%cncM03cg3kS9H%#S2yleRn_&L|FiM0M#=q*6p@7sp_>Xg+*T)p=ZHiPv%_#~ zI#p`2n};=#owb>4Eb=M>XISiackoD@HOUsAxfy`T)>XW@6;%(+csk;apl2f%?rD#< zM~@iD567eKv#a12-NR0Lnc_sd(gYx1J-@lh}-m=df5)W&1(m(!XZ`p01Lsm+<4Eo!Hy zRK}`yRXtLS1c@Q_;ycceb@B%={;@sryy|EJ)R4o4bxDFvgJ#kG{+pfG@JR%%{= z&()bp8-!A&n03$j{`mrCF8{Aure}*e7!gnw!IlG>bGO}py;yFh)gzaev`Vhe$-W8> zH11N?%gROs1#yEKv5xWSp9-v~brWF`5$al6;SI-CZ-qo# z`=u1^JTdh<-jAYPAjKk^pb(@mY5An4z4$v6Riq?H+!5n1cVyR6+mvR!bop|}mS@kN zjpp0)5~)C_ieIUJ21CI~mctz^qg~mkC{ItAGqR}19xLzFo)*B^A!a*67>Kw>pC90T z&y!NP81f|l<+mfu$Y%HTujD8pU>)l=CCuQdW29JU5Pl~vA;FGWC6F)(BMeADt&IVE z(85KFy*H<&372o8=1-UN|=LBkS5UU4@}|5nvyyVyBKEA*+UO7^C+ zUF~{%6Yq_brB?FtcIJT5SZKKerz}n<)Mlx zgAzDgcF``BvFl9U72>)z551SJ?3n7U&c)%ieK!BPSMk!ESnH2HigH)kxDX?%F!N!a z&kXK}X>EL0ez4&Wrg(e!rs_>?s;WKB#ID_nV_p5)#M{@{@KP8i(|T~kC+(Zjk?a;!+YusP1+z?TEgkWXRsT>fa}Gx zJGZ!C?5Q9gnQg>{!nI|=*Gu+&rSWLom13;M0*(4>vIQRY4h-Fs;E>zl&GE$i#C_Ri z2M#8^I;#3skE{jfCxCARMt0GuY;pH#l=Q7q2s)A9q4EJ%1RC;0(a(vF1 zWVTf{>}_p^{7fo6{jW!vz$bS3z=j?Y_U`E!$lB9>W03LG+MvI01*X3DlMF1Vb@|?F zB}1)ssiFleAG&^0)SnJF0}gjSg@@yV8aSqH5sT#&w&AJv4$x_?^pk&x>Pg%ZL?^8M z79SU`*;ZlYIUqgR#r0g5p4W_T!9wmO{>D=F`T5la1y%ji0M;a99PTi0x}`v-)iPke zT7MuC(DkU@Yp#d0sFjJYy-L)&XesJ6O=)!MrlSXZImw0uz)qblaFv!H+tG-9_L;et zIqqLq{Qb-aVLEJw?FQW}j;mij+#}eKii*R~&u5s|I$mp$;#Lph-w$;suu*T{zDqXx2u$k8YYq|oRS}YO zz>TTH)E_y1e0zt6+A+SfeK{R9imz*Vw6sV@sj7RYT1s-Z!sa-5M#yvOpC05W8Tb_# z6l4M-fztFq28DPw4Bg)qKkba6`{YZ-|2o8X(&OF^E5mv*^k>lzwP1XW%3FAM` z+qQs$78f5cKeT1jrY|SFyFPNWGpoFRe$O~GtUOmBFzL7a&&=I`U#_&GvpdJ4LUr`& z)zt1a@e(6n7Nd!daif&Nh}Jd2%dHF8Oh4$HjesBI&F1!k6Qhvn`9HUi5&Fvatj<#S zd;6B<7;#N;xOF9!QQbc!={$aF3HObP!z8@ponS_=A)L7N_x${!3vmCKq^jsW)@EbOYA<<~G5)ts z$@w>Ea?xIzLL0Rb_yUlwz!nk)P*FjhGqA_^puZtQ)=siGu$<9v&B4o?7GAl0!F=A` zV&mUEdt3A%ql4#<6ApL!NgPQ8BY8MRWupujDY z*xXf%V4LRFZ(vuR=KkY&rB(j-vy*)iO}P!+*HI8rBX)P@I>MhrBN5xVgcN;JQs`|- z(d2jsv}{Fetc&XR!{<{z$$C$1j3FoO%|!`D_15p?MDO+vBI9IP1eXUzO(Ima~beX00Bpko?v(qJASv8OSd6d1h4XUjqw3n~h?o&Mb zVYw$Bg=Ab^Sun->uUDNeD0Dq&5=Zx_=k&pkBw_TuM0 zlFhHm8NT32jxQXLo}yh%(O%b*^74Y@VTN^5@-Y~i4j5n?E}1Jn{v6KN-W0hLe=0Ul z#Hy5cT~ik7pL8L^b#msH(fbv4*Z8*6Hj9Z3q3hUXtNG9?(m*!S>O#J3e&N~eh$?t_ zk^AL%y;ar8UOtppSzz$gM}Q)6cDFVQ6(C-7sPp4cnp!4!;POiss)2J3UHRgTc$B{a zR$Yc$QLA~^KN7J61eEAPcfOQ%SSK-Uh-}r$=ox0U`rTzjBTToHa+Q7i?wfrI!HsHB z?uwO`vMWz5l%@Kd%SdM+Yx$;!uiVp&xo+`HJR-`1H@8$xv$3&i6qzP9JjxbS_){@8 zNN-nZphor3-MnTWG!bLfX0Ej4hzJlqyH+6M*p_X#1x2zJcPGaSCx267dC9-ov#Wua zW>wv=Yn1qX)tGy4Mq-6=YfFi<+{_x8lYq>#S(v{!-+js!WnG=r_4!Gb=k80fVcyHlEu9g#`ZU=B?|J&z?&=;ry6X^g?PAqK z=Gji)E^5}zU_MUQoifOX7EPft1_mu zXMd$yK5)rjzj2|*tUy=yQ;ywb5Go+2C`(SNQ@B-3cI|u3=EMiZBNQp zP?`G@$(4K-YbpM46@@D|ahu)E-BKK;sQJs!>ASi8C<#Qa)Ls54rT^7GmU_$;cJ!|% zWSA4z_i?_!q2^rO@tu~z_+4A}puPs@#*HS~#nX}ltz3Iu*Em1GGiWV*!I649ozYps zW|vyF$ipMm*k6Eq$2g}?ZnNJ!Usub1Yn+0E&$aJQj;!qc@!?+5i$i2X`Y$jPUA@{A z5jFVkb@Es3I-fL)t$x00vyrA)Rgyc&kD$rTS%?IzmLY; zWnLn`R;+@`-Vx0IFIi!tBmxCgFLDP}>*6);y#XNVMj&6~B2X4c-ZvtTyl?X7&o!zp ze?O5c#of(~5NipJFOxp#7_sf#0ekyQ-+S1=0X;ji2iX?#?=)Gm*YyW@pqpFV#;OY@ z+FTzhI)wl(bxtpeJaCasKcxxf&JYom8n9F`G?V~U$u`{_R=PKVB8w%zHRJa)a^O`v z^RFqmiGw_TX1fffK;~YrTnACbE6V7jg+1$j)0?F@;Vn*K9BVHn+Y6x)>Ntsg88#z`>andHcJ9qfmZ+eOi8dT7JLH!A^Ncr@^WG zlD)>TqX7Yeqz?DjmhlZj4Ht!S`^rtd_V_hUvBplt#!j^E#S_Xu-W6`D!ip2uMBg&Ldrj1N{&mr2=f2Kn2I?TYIqz z2+JF#q;6|IQV6?!yCbt2lSsLEpTGb-h=&DW zC~HA9+*a3J*o3$;XlkriFyCod7Dav2nO+QIp;+P5E2-7 zsZ?o(zrR1Ph{$l08LC6-z?5|B0QT%c7CmDR%>kHI3RQ>lR1jNk_C5L+&%?%5;%eR zGqt~qsXfwU<4eV6z~h`ab}T4%J9;kYtCLwx3OZt# zr(AM8YPXH$%9Sgx!|)&taj>-OPs&D3th?zCJSL!DfshgM)z$0j{g={Xf^o{J*u_Xd z?G%21{DusVIsZ=x$`sTtxvX4g5x%V4RGwF+rl!)M6hV@D2qv7d&Iu?{a=LfCs&5SS z#5^LB6s;Fpo3PnG;NY{-REE%=s*5|aQrKgX9P)zz9#4T1EfktxIh+Tg6U4Yz$oB>R zzH+VwsZb5NQcZ=fdnh2}&9gMG(3W3){5W6YBxRc+ikuY9xse?$#Vj4bTx+SU z3;9>wGJBGg0bC8q_KY#gq+B7Rtcv?k>b}#FQhDH}^gi|(hw2h!) zVY6XK@*5+2M}}GTGmy|FJzFS$3oe6%6n~_b>rPEZ0}lslr;~G4bmbOJ6KvGX%Z<07 zF^E*Q@`5O0Ckz*`XCD9xL|iDs&au1)oY93Xy-uwl)L{*{Lse$wI+}-_yr7*Jsn`&D zGFE*V&fBG?R8g3&$JXcgH;$&&L z4W@%od!1ceIsv6d9b>ZNIuC1fRBYR}s`${ki=v{U;JF0@tl03ya|mwq)5|lJFOqOT zLQZ!KvGRw|BqPu_D2L~4Gjo5|{>tr*u^V3i2NyZinvd>4t=zS_*3RCc-w{;m5ELg5 zk2wg4Az5(yFlR^Y?RQg9j)vLvgGRVq7MSLDR@n_$<#JgG?c|LcHk77ScfAXIpgxBQ8Iy;QPl#?E}>j-k5y21c6LMB@Lye51tC{m-G>c3{6Q#%$h&7U z6;r#8&E>vS$${8ZAjwhb$epo)XN$_ok;6+E$dS49@dnD{3Pny|x{I5@^`GibDTY74 zI`!BUdtNe{dFgMm-_^l(2R<@BzSHyr!N4mt>;CGE2@gkLVrS19AAbun>ClLslfc(XvHykg+Hw-%RZl;NrZ3y5?+T~e8z7~a$T=N0qG>1o0F$Y8n9 zWfKz&-PQhF!&{E$(4r2t(P#bGxL|P+KlA3AN+RQu4UFr}ztpV?w zd~F6VK^oySw}^-c;jHe=v;Wq$n$`jY2MxAG#S@D*{==-1~)E|h}DYMCu$Zk`4vL}GOFkTNsDwz9r*8nm_+#h zk6UaiRCFLrz|9}&-}Tf`2O`?J|9s!g+f9H2@E}a&^PImU1D2H=N+$LW@a|(_HGrgr zxmmXP*!_<27DAy5ZET zSdeLvi(N3LUXH|O^h=YPYH}oLoVXBpVf`VIF9f0o%SJ$Z*wq*L7q`2OE!&_T)bS@x z9~)DM+>QIM5) zLeNMd#7P8yj&wV#PsFwo*dlz#4p*d7wjslXg@uoVGw7C0gFgg4^w8Bpi$qNFwOIzV zD_rL@El6&))u0Fy7%7`~?hHp@@Db?hb&s{7TPph5CxIMEsL-o;Zg%>N0g@MW%l4v2 zxG17$$_DRZA#Rol6SIaOhrD>W=&P)b{m4Pyk93#6IG3>*mvC^B@d+GoLzs9XcSGI) zY_||a*mXb}`H}n2aU%r#+jLUBfP3$MnKJQ)YX=M8lk5iK!olt)R(yvblxA8wgu#ES z0GI|qHQ$4leF(WTZfog<&;J9FCk2+91v5C>Vpn@AQAfHD07}FFY%o%U=1tU4L|}*w z+2-8645^6yI~u;YFkB!d0f&?6*fxoh2cQX}7kjFp?`s16 z9xh{<2S|%s34<(Kwt(U z5Ezq}ao`n!zR_9upNOlhw(BED3s(sCEhm1EOg2-gmWlEgL2!cGV?wH)a`!O)eTot{0BP2yS@JsqZG!G3@_J(=v*u+BBKJQ6aS@l7Z@j}ld`%q)5aP+@Ur!r9l z3H)Q#Rzk?i$jIouB9%t}O!*c|9e!+Sy^TQzKRWaL|G)nK%(i%H(@8(Hs2CCPJ>+hE zN!e~urb8D6hpBg|nOhh&PiX!lzOlPoV5BJ?G2b-R92OBCULr~ew_k~YOH7}uSLvb| zW{k%aSgBs)>D*8gh>3~G9wi5-T_o$`!VB+^!^Oo_ zKCDng6?#`!m%2TQ&UB*A?{T4Szd0p0IZ4duL(C+#U%!5pjI6q4 z{Ouz?`JK&yr;g;q2iG7UtdtO~jTUA4dpssB;mQU(qo`gI8k!Z)@wf8C>vbpVm=PY! ze?Evz?;ITD8#jk`rHPbDOI|2>?=DV-cXW2Xyz}HEx6Pm1yu7@$&bZjvI@E8&!@mit zV3LI0l8+MhKc7!^q!P5Fa&~r(;tdE0XzvX*ew~~gQC}YrwH-up_3C8!R#!6LgJj<4 zCmZ#dQWvLj@893?jEtm`vuVyQV$$=NU}XlJi=gJa zoWBHe=#*jway-y+*SQSLpw~O-=5$|2ADAAqy?zhe}ZHI@4 z>ZN9iRjx}etp_KwacY%F@^c9LS!+0|t> z{KXo>LyMMxW92d4o<-ao2xwf<^1gxT=-v*~p)_fIo_ zzuJ!=(0M>3Xor{_twfz3uN3bt{SJHm`l_hgvg?pGtb-P=7D+7tQE76rzsBz{nxv8{ zcxGEL(-Lt_QBlztz7T?GDRxHcbo0{r`FU=BzG=mX*JdLwmsrGnro-$-ad>!{_1~+S zg+V5*@uzc?Oo7sIg(tN`C6C`|K zxyjW2w8Ei# zwj*w9dpid{?dhpEB2|8RdclU&NHRB*HbI`A?Wy*E9B7+ajYm-2NbOFr)c^eaO=2P? zV717Pk6Oh&e?B~dl{qsCvuPEzba$_%SS}|(UXU^=={?f-@bKu#lnNL!?Jv+;m~0HD z75DtvhyTrfL{K$TQU!Jj!58r=GIH*7JAL)EC4_Pa#w8r5leLPOsi{U(uSDXE=Vy~v z7shv#)uR`;NJz9SsD2hRz}}tiUemMq6FJL6R1h!zB>Nt=pyT)hJw4j?Xa*JuiS+fc z>Y16D=C{$3KL!e)>eP7hs7W3%5=)(yygfOPgSfeO4-*h-b)+IXTJkvjIRWJ_K#a}- z$H5}Ha@)aoJ_qY|e@mWC_@6||(|d(z7V3&r8HN!v^uT6cm-H1Lsc^LHOyGFMAax#l zU^DRPI)u07?Dv?#a&Fh>_~gPq`|O`Tf2Ni4PeU!>`U^qfG%Ynw5WMreNAXCu#krOTY410YhOkEvH)|UQr9YxOqQR?`vJRg=tTk2o^5x?^1K+;c{E~Jf$~>P$X#G z94hB1EV_~!AznXd71P@ff0?S7@ULDyDYxniVhA{m$-W=9yV5|43H$cmIR2?+}+)#c8_=7Wj*7;8+E+jgPZPuv|IL#==I>=`2y6Uo)9uV?a_jY_VNw!H=lxFtapFbp7w+UXXetev{_&ox(pi38FtMQKj zU^{G^2|Hs-9xI6XYu_yk1R|N+;J1zUxBy2@0^940&Ko^kra;IojT^jtH*ISJh>1Oq z%x!0!&6hDL;F7+H8CN{U@vbqy@2ucf|98nFhxrHEB?!5wkVDUcwQ)Ab zt}qC;pS|I7bmPzY$58QG_T`S7R)EI0+ZgeB*P*`cE%%p+ zzQT0tZ7JA#UaE z>^{wSMbk@st40X9d{WO2x>aY=`l2uE?j<-4=lfgiI;D*50NTeIWfm%u$BS=$Ul_== zcs&nk5SnPXL@Yf~rzwByB9|v{+6jnHd+&tr4pDO`(JfBSo`>@ReW8*6XT^76LkGfm ztxsH9S{LBV(m)}Nd1peNPMO8vDg6@Vo*Ez<98<&5&O)+~Bfa0rexA$Rk1vpfQcaX3 z&boABDa5S4e=u)fnVOo4k~cECA(+~|f-HF|p0a+`k7joO3Fy*=~s8ZWI^mKWz|f9(Y8j^=4}%Wa-VM-veD8a>ZxwfJ1Y&&7>x_F&KBJjmA;^g9cMja4;PnebQJXq(6&@NHXiAcL?YhO}wSsbj7q4UdoZ@I79 zW5YJ8x4HR}ni`smQt_I7H=hAkUNWP{teU29cDx5vsH1Nf&w_0MFd-s3Iv*&2)@c{L zgm;PUAm@Bfy0Wx10$mm9#N5qBzS?_wdzV`OW*+`(uiTp<;RPtVwYh1uHQj1vVFC5i z&~K02?|65rptx?jM{J{JeusjDmC$>ipT&Q5=+a9H9lA)pNK$EnQHAKGiisw_gJh}R z6zqcu;zHd<*&|BwI}KYiB8G{B1%=TNZ@@D4O50D*&bIdUm;?mgY;HQqA3?$C0VqHh z^Vaho1s0VQnS9lBDk*<)V`F0k;1i$qFUHZav52Us`6#jV8-jxSDc2gleBnp0SVMyp z;HlC?TnFb0t-@fDK3#7aX#+$m#_N=n7h?{VKuf;Z4Q-cZCcil>)T{i}H+MRhXh=#z z(g-B8a-;4fiQ5Ms54+oA;9-@C$XztKOkt(GTPzgXqMJ zrez9l#RSZJ(Qk-jQG=rr#lph6diAO_a5><*aWjXol*Ng9DWI%}Cnu2A2Tr?-4+(B@ zQd0}qxQ-PM)%l6Jtqiy^1|WdDwmVcTSh*GGlrgXCq{?9CDJL@X@Q?(4HfG1^Xe1MXx|YG&3EB_0uw?o+0qIB<_u3}!?QU+q zB~M_ipm6!&!-sYgb#x7Vn4SU?eg|~D;yZ-(r`s=MrASyyZ3aTRQ?vd3{<9#CK%iJN z<%0%qZTde_g*L*ms4n!R4}EjKh2~hvmKjq(EX{yrVd3ELLY!8)ul@M(hHXdU>&wtO zeLlyH)y!&Fo{8o)hNYA9vr7Dx6td10$+?#hVgJvxBPtVwfEVbOXZ7_`aMpkAzSqjGgK7U`w)ckhlE9@V%X%f>LJ1u7y@Et)p6oud z8mG;9+r2<}M#uF$={Iv=x~SWaE#Iyro(CD?$#DPbMS3EVXS*hIwN78b-tjq4%b;-wqC1)2TBFDW;_NbNzF{W%egvsSr{Pekraa@| z59{hcu7u>|jzPl!6(uEnfQ(Ou^%=Xnu28iX-e04mQ!z7REYK?c%Ka;+_}+7TyYZT2 z_{t~-DOGQ8(Xna|D6e5aqT>snR+NIc$nf1(r1w8GZa=IKdbKbC*c1EuHAq<8Bpy>7 zG+SOAt=utR0Rr;|)bsCZ4@b>U+Ko{78}AcK$PAU5(-nIytjxWyV=ef$`$7GO8 z@08x$sX3f}d3sQPF*oKhQEPGr==-z8`2Kp$j;e`?2{&Od)HkuJF9lBu+Mqmj!5Z&^ z90`wzFa~bqsrT->(49LkWM5M7_#L}u`0WqT0K197RR2iEZa{c(5RetaCi}9Rd)qt1 zY6^swoUgAq@LJ!4F%RGE4i{=bEq1%h>UOfjPKcR3SM^F?%+es$LE;>b+kaz;jz<{J}5O&^{j zYHMoVYvkcWT{9c~=KQDdX(Dj6R6tay3&L=>QOEMp^tG!lH+2lWmzY4$(nbg463_2k z2hu`DpRd}uR*@P#R8|-z=hFP)T0=nT$Xf2ZcfVkB#3dw9tHv~xl=83~2sSO>+KP$_ zQ=Q~bVer|4&7ENHy&LR=)Pi3`sXK`B)3Hx~DRcE@-^WGXx&`%}5M48r6WEQXnw|qx z{3_7m!XcuTfpoci`SK))E{Heg2}=a!+yH_%AEnWmkX)_ytP-a%wmzr#1Ix47 ziUJ~JzqDTmSJhXU+#9v~)HS=LHK)9E_YvX{Pn3+njP#zt?Eel@K* z)cISYqA4h9abUQM*Ku}NaD^ra!-${KMUs&*1yU#|@-R?xHKr$6B;>s_s4E)F&`-#4 zNYMYbx#5Olu*DC?Au<6~+0xcFJwGp($f;j)adtCWeETwxf?SX>W@cuaKz$&DGdH1H zg2G7jc!s9K!Y)|zJc?!<%f^Vs6VV9dRs2K+bfk-8lf$v2Sp2 zaLCsJTb^29?}@o3ub`;dQH=l>thZ2~ps%mQIJiG1{7F1QH%psm$GFTq(aS5@e0)5y zc*VWX@yGAq>^oaW2UV5MV7*LFPg9Ay-Uhvv2lNh2I%B;HGz(2YfOn+|5rd(Hb6Upm zR7M8>P4@k6?9BGaGEvgcFA|=`u;E|1!pz7Rf>xrx@|3SJFa#(btS9qXdLB-Nc`bj) zU;LSU2`W0;07LsNKxqbZzRSwY+SHv~2_*{VG5r)J^C^cyx-w+Up&b|{)V8|wW7~mZ zLp9($p7Y6;o@aZ5s6T$kOZlvtpQudRqp-8w*M?uwi6vZ|AJo%|x_*DL2^Zw$H1I-l zUmf=!NfW+Zq{tEI64BBk^YQTqOzCR(HJ7eKY;MkDilf!CUQVyGth>Qf{8sAcIIKwI zAUg-qdNnb3fUY2k;ra z_g6bM>MweL11JMSDZC;tBeShAQFoORmrit6@7X=QL{e$zBmvum{+kfAl1?6B9uwuF z_^c29ptF2B#G*S$%dlJI=sx31U33p3?SXGiWm)@k0`(8E?nkecSuwgSL(g|(#oyT~ z$(*a0G1hG1w6ryy9ia0|ZW*(OB_ksPktXKRGp*1vWTyW}XD})J``qpZ@k9VIz0Gn= z=TGw(H7M%9VvxY+5K>Z7c9a`u%r5DK&1e@05RjCNETp=+y8mW`!p+!ttZU3kV!mef zY#&FW^di8SCZngnGO2(myM0ex{q+pUVhmJ{e1$`a)6LZpTth!|HyMq;aGUaisgdZ@ zr>0i&_O9xm3ct3wyZg8^GhDC9BG@t$GIjE30U-VbCRjpXk?RZD!qk0b87WRbcsK0{?O4vxdvFeZ5ct z6InL^0dnL_(Hr<8Ytc%(;!03(`RGeMsq%jxC)wKCT*w^iRZhU_=831tMr-HX%feoy z4)t`pUjq9J(6=S}Po&F2ahTj7CLz(3N6MzR{rflulTrg$eZy3f5# z5^W{0hS&)nuJSDobf=xM#U_G!1^f(WWVX1lD`P#1JN?g1zW!T1I6A#HWZCFYAxiCR z0d*;gMkuN+lI9V#FF;yWo~&0#ynNaDa3SHT16cNRp5XAb=Y-43wDfZr*nLH`wKY|u zK#TWuS+^rNfdznT{`;G=DR}dqM{|jlYhOpe8KeQ8i~6%NRxR{aF49H(U}vWcsRzvv z@4cWvgw^<{-lh&?y|6vzH>1WN+FsB^N>*04R|bpo0eYfbAf~`@ClD2fPat@CyDq#> z{p9O5Bv(vG2B$!tT*Sx6V@X5Rb%_sv?~G^Hi3N$g1*O_~{f_-Q*t3i*EDN4c2S;x= z2l}67p)3^?Kf`*NR7Ws9d8)^HfDu}c*NA}Tc8QldoD7cVGR)vL|54(#V`1RCB@5V< z1m)g*!V>rgc&?>cO<=9CP*UO=`eJ6DE-{4D zH{N^|#L2-%FQuVxqn4qcEJ$NT1%(?oZ$1P2?otWVX1Qqk?&H0cq51$R)I!f3Gz+rf zguvo#pI(HJxIVPDIdReCSl_rg1u;>Cj)~#Y;eiWdXb0>r_60+o+WvW;__N!JCYSA=F*H;zLg=UMyy{0o?%2zO#{tYYjnJ1PYK(i|C)K(e@X9@UE-p z;!V_Qrh@UmFlJ-`;^TY7Onvu8ZbZl+}yZULji*G(Ry3TJZr*Ki0JrA9gj0{I7 z&7+k=E9VhpIRE^y4%0G=#@(f%-Z!U;#&7>+p7`!U=4QjC`SUs^<)*?4UAma>dH--? zHha0hyEWrrBW$1$QhIj#Kd;^t67pQ(`2HP1JZ7Hv`WF>Cd-ar*f)wL!*xF*J5{XL` zMk>zQ>{dXpP=V9T;@)6UiB(Kx_ecmHXrAqjf4Lb;u)e;Tc_FR-8o)aD_P=D0Rj&1E z9CVAjGsVTMrKyD+<}Nj2(;7iyvhsae+Z@r2Lmep#4Ar}KBpHc8^fs& zYY1@OW(11ZozhsO51)_q`FGKCSq;+Mykz3YqidE~JZR(bBF98lyBuFNEin8te0hh& zf36v7++Y}BE=5fAe7V2yr92}S*nq%LUTw`}%Mpb~mWz_c)a0WNWtM@L*J$dVFbe0Z zL%Aq5y!xNZPEKJEP&6D&GzUX;Mk1SRmrCHvp8^vX#s>)J^ET>m(=7`_~Dk z9#QdsUk;bS53Pa#YhePKxpYZQ!kjq>StP>&Yn+Z9D0;3YCGhmT$|Ee*p;QzZ6ZEf% zulGwusBzG+dFi*(dCT6vetx3c#hIr34HKe&-<$Z^ox^p>#9@nh`p3U;QC3hBO7u*Y zpa~@cqnpI`->xK1F5&T6NVi9Edw=Qg3)fag*P0e{ej6;Qb1OG8^Bl;>|T)J7_%(xjeTy)eKfff75$e8ODnF zu4hjQN;9jgpHjY5FgE8Sgid03kkjg49w;q3(5He97b7cc1o-J&(B*UnzZ0{>wEYUY zZ?fE9P`O0CkFBJt%FNCEIyaXQ8lKxHWDqZgpPu4!=q8<<6zSm+QESu1kjYgAh&dBX zN`ZfYfp#1bXl@6F08lH`A8^x{d3j@@EAW&Q8pX4!k<{}c(IXDQqHdp}ViLgdi{^1goZ|2HiY;DD)qR-dU&izk&7$ikuGmlGX>-7*y-sfS8R2Jk+MO* zSpqNN5Ke|M_@j-;cs8w`hxB0nLRUUtEwkt01sn*p77h1n|1ZkcauJE#=KA$3OPO+U zn4DRq6tX6#+4`DvGdC5t5u(hZ+oUf?7QA4d_ARtGy|knVhWlG~PR^*qLr-u6I8QRh z$H&oP99U% zfOB6k1C_vAMfZ#l1)K&_lXv)ED#+wI3431UzawAtW_?064KZx@wKG8tdhB4xBIfV? z?3FxW2NQ$^%uwhN?|>6*_?h4^(-k8kT-)@>1#GR+w66@x+j0LsO@XB^jYMK^0I)s7 z&GPX$JVkNrvJa{qII_@R0xr|T%F+Gc_})DLPnWk}lwyI!u||ty3fSJO^`4JnK)Rgm zR>Z-J-eJVem8hX!8o|ed#R?AS42`+BHmhhg*yEcfZ0yF5?753hBr=^Y>-8!_Z&%`Ol9xKR@5{^pt)aFS4)pKd|-rkBZRUuq*1Nj56}* z3)}vy7TBDuc$k=7wZ3CxQ`H*{oytBZFUZKcp$Qa&S#D3mZ-sa(Z<*-j!*+CyRRIm< zxzbSleGZxyGMk6W0N|%n{)q4}6VdmkhlWXo3=tm+$-@S{`MH-|kfkz3 zGWrehb(SwE!@PEkwoFj(io?lN(aT`e5_A--_8Ivqkf~MdASsi(d52%W0X)Ka$g1xT z!7}Ct=A!_FQcZjd3uqUGEDI8uSmrOmZ;PW}ozhtouF$7$McM!+>lRqSq8W}urO#mu zp|40^42PJ$3($>9$RX`H$&2vsQvDyX_g3!Dv|XjPf!J{=#8;u*e5aC1<=59UX&7)O z04CTR_z5^SkjNky58^Xvx%?6dbuVz&b#s?LV1Hk*{gj+7L7y4<+%Vf3L)>kd4E*4z z1;Ea{`(an27SN4N=mcwqFe8xx$_jxA9LC$TtEE{tm;#WpD%pyN=B6feFA-sFZH?~1 zraDx0IG@5ei{~jxqXGxM8E<9#DN=h0?QKG+1y~pS?;e6fxGU!(=8+x z%?{1&Gr8rMhE$VB`yeG_S5->i?)ilL+_<>q7VMpaFb~l@$+^J?KLeZ6;KR z*1d&y;R?^Zr|}MFuR(!1tiM1P!49_P%oxz5SPZ7@%;Ip)FbKznM+nGyc`=UMetH;jw8)KnV5RHA0??_FJA(Cf)}UA#&w zflox8)SJrB!+@L~h127fhQb5Dxd8K1d7x|TAUYM}m`NBI3>S4TK#^A2j{tlx{w4YH z`(3y#D?e1BKI64$hHPCRbfVEE3)$QPv?>KDTp(DFbby6?6$T)twy zGU|V_1_KqXTcaZ*V!e`vGPxy+iqGgJChJZn0Ru}*%{hn^W!N>~EWs(6UpjGv2Idty zQN8l0iV7jrH5>386 zhB!=Fqzc-bfKWuBCpiF`AZU7r$}GLkj}|}_5`oxbfjJ}Sd_2liB8NFGNBc=6Qpl?R z&bI~nZ&tZ4pm|ow4ytgl@Toim)dy%vA;3}1@jp8zq!A>9@fDaW>C*QYlLhI#*k3@2 z_UMnc=X43wWnSc>7J#56iCi=A>4wsfTY`#Eym2HOtRS1qeRO0A2#~~!{em0-Af`$A zz!6QCSxbA;p0&ul*BkQnAF+orI6EP1kFJ`0FQdaOy1PO)4xM4Uz>I;Ktw1unV7b2L zvrbDZX$M%R@#j4VoZQQIbV%oWaRUNwYxSVN_WeVsKnf(_kMv65)}O}eQ_vO8s>wK@ zhjC+&lVcvn(=v+#M5^h)qDWYm(bb0x!|&u?wfp8&*j3v9T-h3IbcLJcK0=Q_n4GV! z*%$3tmg&&Mg$v`N#SYm$h5*9;f@XOJ^F-F8YcVzG@rm54N)JL_5o&+N{9+gvJ}ZDG z3S{@V>cKQ|U&=|4BI)o!`|hk*?rTB$8N7);7<@}B!%sRg!)J-n7u8;E!nPWtzCstI zkvI89>r<41OjNz1ma>8L~5=JM}M6nwi=X+aUrjFH*j}NplB4cII*YUDz#C)$! zQgGv>V`(L&{T=_a$!Mu8IU@8XR?`3b&3&6YyQ|h;_w(}16HiW_QpN!i zpyzX3=&sO*B=Z^1DQSQ0f@p)VVn*8-VRxQPjyQHZOuDb3*~@Gjns^>j?#$oq|9F+o zUea-5d>CYbi!z$kXz}=ox~>zZi~hS8;Y;ZA)av`nAtML&gH29YxG*s~cuw!@>h5#W zXJ?oAON4}IL-Z*aXuwjw%L>{DE%zJu<*f1oNtm`nhp^u4*@5wf0hK7fkE0=sHooOF zB8hofvvUOttKs!cBbaKA3|BZule2GMb{1ghp)~X4uz|)=8hiyFD7Zq9^@$u$<-m)( z{pcMbn6H2v3&IXmI51}O7C`6l`1ltPB(TZNRZ5U15nuQrSV0}DNr8qZi3ytdf@cIB zTo?eDt34R6UfqHbq)nKsfLT6<68AM-u*T$|gj70B-NTT-gVfyG<~`UYx)Q4N2EAdq zlYa@DkHSPo>;$1{+6o;_qNKtA7`~nwvdo;TT*$a|19W3a2{%ZQ9|7k(nYP{&v$JN< zNmEo(f=0=W`XnB-8|$tZ^5g0164kAqRL7RDWKlNofPWy(b?v3zfjC^_qL51*iVX^j%3f znICAXt?7Bj=ue6a;Dof`O~Sk>^mfZTe8tGWPxK!0d1qrVSZ?51 z{4B`^yihRCJE?dX1v#^@`-82-B~PT|e!wt9b@Fd_$b=QI6MIxdBHp#q>SxfF(EuEc zL3TQXYS3=0sp)cn z?5K2yB+vcsy~2SuJv_jk|DRWq1c{D!J2IwLrZC)=|7G06T%87_2IJ~Dk%Z4Z3uf@g z^sB&ufXku{#up)w_ZR2HQS{HDTZ4{ct4Dwm&j-%W!1ZTRPU+3`{q@TU`Y@s3{VQaD z@fP5Bu;bi|O|Ss0MfRX^nM?@-0~+LvEMO{uDnm}A1(5%7VT zr|KJACkCz)KIgt3A{W^(MkneXqV%R~n_1;kBv4%)@RnjQEvc?D5YKg{_7*$|7F!RT zG;(@W9|8?d^o?OJPu@il)gOAI5{ff3btEmLhTv7O(E@B=Dm=TRPpz5}5>JL2HKYJw zL1N3p?aihVP)-ID14~0WOziIsI!z)*eap(XBErAj0pN;tjEyt?c_WFZIjt`>Pcd$_ zH64`ZB)WdiCO^tI8Y*2a9KLtocv1bf0d0yvnV=w0{dcf++buD-z{gwYX z?aqWyCJ<`bfLxWvl$>T4dR6@V_V@xe4WCWXRSbEd3iqQ|@hCsbQtiDic~539=f$z@ z-!C1b%~}xeXnW9Q?DWjI4|%x4l_VuqEzT%IAOckw`}iY8OhCD}fcS;)z6NJT2DewK zj(@MjKpRlzLA5w(nc0u9azXp9Eq^+(dn*GLUSU@T+Td=4&|f)gRM9-&tzMjQR3n48 z_`6;2Hf9`Kx$*Pl-dLl3R!eKl3TH(CF^k2+`d ziY*`h65g`auFxy~-_fpN*-55I+2)S#;Z5JI=aoKT(a}0}meE6NG_-d1zCCRYe;tKC zR3*%IZS4@%NH%8}?_FdRxKvdBerrG+T23uzW|WI=sQo;9if2@`h#8v$?aGgjp9SMi z%|uUawHHR+J~&S{n-ly{HGMMLu)-Jlpy1*_k55fVtwy3|%jKYHNLbUOCj~BwT(x0|0HWXREG-%>vt_ zPfbZ?GUwA*WG1sdy=aAzigF;@q^3Pno)Jt%zW)^{b> zf~#(Nj(<`wT+#V^XCpzUXKbR2FMCk$Q5mn6I! z(mhi49zB{GG|bi)+ti$iI=%00A^J#A#rV&!hqR)o%YimG`>Dpf`40xZQ3|EHi@#A` zIxocH)&g&^pRoDCuH@;}cMm#LUkloCUyNkkJ@?yRBFNYAb1FAI9Us1LTlw1graYaa zhhs{-{j|cq$&c38{>({4G)8CMd_C5`v;IyrSKtr^9*m>=#6siTo&Luiqd`TU&hQMz z;;+`x&?3*RQ!yb{@1Fcj%k8R;SNf6(*A~O!A5O^07)oAyUhU%4T&_`mK6oL3Dd zVb{x&$Ctei0Cso?gAa2(k!?EgkKHV5Ce1omfN?aMlu)k2{a{+x2# zp?Lg(4|8g?Ll2MftpcAllPAiL^SsPZx-ws~td}TO&uXb@gobH5#;2MS>ngf&`aj-n z4xOK=JL$UqL(8-xHDcQ6PyOuJrvO zEVOoZH6b6Xe}kBR!Fi*@(OvADK7Z(01dCA{Au4S&n0Wl~gkA&{@&;E+l-bTsymTv8 zHvUr0rEu24SGwbLm&J!dqlBKkGuAgm_#ZZ|dKc$Vb9e-YX4 z#j(FG@D#_gC*(;%S1BZYex_i6q#yP4Ot!oIn)T|B{q*7X?|HY5Cgv}Ug;xKTY^kS* zQ8{;BzJsk*Dk{!uR25L|i75_P8#Dn=Hz27Tt7>fQKT_Hjf{MTxq6l6WP zUUvGI2gRDWVtp41$8=PCvVLViZ%?RKhiln(e~o4iop%mP zj9>5d&V47bnxIeN=c$NcV~^;cYMy7GR!z^+6DeE$t=4Vsyk0l*fULFLUhHe6@yoES zv;7T>GV_zI<7mDwbLu~EtWE<9exA|j`Df?C6F}QwE{SINcz!#*AZ5iG9qp2tZ@@sg zz+Ig8Epy0waZzMj9YX)p!ts^0s}+#n~e`rXau`B#ZWi~-W_QVM@yMJy(#R{Owy_I zY&OTvCO)rkiiUDh|7emRI5IlJeQ;)a=MpvXWGe-i#;@Yse&ZLjVu_9zX%aqyz;dgy z2UoZ*cd*GvB}I%Yb3IE;)cI<69j3a8C0zHg=2|MReG>ilgU8r(Y|1Uy;+=&Scf-j8 zHxrw%-^gES=_gyAg-8COgG?K9QyAqo<{ndmc9+4ojq(dZ&8+I6UYV%BJ~|z7ENj1v zgWIg{ksPPsP)qLX$3gIjy=1k4Ha34k9#c5tVsjHh?|K^GsE=Zepm4jSZM!=!6E zJV^*d89j;#b`#KXgRlPonoUDO15oC{jnq5Fj2$f-$+mfdVjs!Ryw{tdRb)$rbE3L| z>gq!8@ko??^S=WDXDOny45)44gSO_WO3DLi9o@j z>)9psI^X@Bh-=+*Ds55EpE`7K_Lf+duo^##+B+caVNSwb6BO1VzaqqVxLfGSB6!O> zK=z|%S($Zuh3V9Ys9P7u6b1Wt{|!FNE}7nyUvkokvB}mw?|V{YU|st>TwJKi^dkLk zil(3HE7S2okX&7(l5yEDLrFc5SGX(g_~y;A?S7iL#^phIfjc7;kErs*JXC|`+B@H) z?HYLAYj?SSC3eOJBYu>ZuuR$G*cF8_n?zM6&i9-4z(a72(Dqz+CaL7}esOtjZhqhx zk?P~%W+G>0t5+8h33`VGqSgzXYpF!|yidy^k{1Hbu#JtW7xoZ3`Q}eOonk zaF`c;In$;?nMsyL=!0WucOFEdEa!A%34wSM#KyCo5F@U>f-yQa$`PgR0*~M^KbyTu zMkWK6+F!q|J7ttx`}=Jp}OvZ1Vpw|00e2<;{uzT)?!m@|hy zDX7@9hEFc+7Nff zMS|ma&J;wosiXKqnu(?q?%R!t^<`;br^xeLUc9R7N+(sxl$^)H4kV!Lx?Z5ukx}iP zf&ZMrpL@`%W~FG=+>-QKH|JSTdUrx&64hB2uCpLdNP6O)jdzeHrewRUg7_UWh&em!bo zav`(ZIe2G2`RPw{JVJgCmZjnT(Yvj^y`|ht#B>itzb~4r1%Z-QX<2njI?!RYq^HSHPAYXycL%Gj4!~R9J#< z$u-m-q_lr^5MYUiLE+sMOY5XqWq_^b*RuDuzc`X0{4@Ls?L=QMq)5n@IF_{b;VqsM z{rh_LKG%6WX1>JLsjxhG?fUV_VmjkomdDsLzxE#2T3B^M2!4H+SWLlk+Mm{4`k`q=zWjB;j5iO)W!US55jr|yeFh#=n} z&+H)r@%~-b7hdGB^1*liLs=gm=H)glPxRhzvC+IJk0r;|Dp}kcH?yldh^?Y;Rny=+ zz8y(D{Ozr|uzdVKgx&fuk7tQ{(CgEkLBn~^Mw|Yw2qfZUKlwghPEHq3Ftl=; z3E~MU=t7OTg&a8VQxcooPHQ6Wy?o9)JAd=EVk%&3|K~iW=6_Z09X;qZgkaq^5PkM$ zi%sXNBU9YE7rDj3&wqzgE@4q3LA5fzcV_70{ojxTATm=U!_%0 zSZWn1e(Znaz%4ee+iho{kWahjPO{qyQB)i5BzfJ-FBfu_TBn`@jPmNsQ_sHG&M3b8 zPQlMHmga44qwg-&+s*)f>+_4V-qAA3FV(@?Y$Dg^dxhc}k9N8>*Vyxvk_ps2mN4x{ zg4{o{pZ?qei&83 zI>tI*S?JCrF0RAhsI!eKz$_~Vs*CD+qhOqnaRr{2=zu@5;B;7`FiIustYY()e{<#y2ZRw)soPnu(^6Sc6 zBVHR4!6zq<`NMQOL;k*Eo&I92W*z1^iZM@Rbb_(c&W%<^UBQ9 zy4M(w_$jyV7WQa>l<$s;L3*-6W7!BiWZY#|@`wdBP1^AB$5VzbpRt}UJ(gnmq3FDWK^Vw0Zz#H~!ZLe`An4z5<+`g+V4 ze!ijV70%l_zt~5<5=mar;t&OK7xvvzwQ9mb3Ew|hpWh?4P(GRM09~q{_o95OBQGjV zq$z36^w8=|K6m6d#vfE;?^F&8eT|Zm;5g=fQsFcrPfcFaQ4GZ`H!@mvfZm#OUWRf6NULew#Jh-03viko8sSskR~ujba07u%MGpp~WpjjS2xfh1?IYJO z^1i4`0zb-WpI~uRq%8G|_IE|qDo4xqEjr(WH&O)5?#*1@*D2|(BF9Qn-%JP-E(B-) zalbqk^z<+@{)0}%_8_Bj@J9-+Q?Ja#oDVsd7x zIk4@L=jYa!UcZ#5ZPL!p{W#!{+ys^BNhc>?t>BAmwT&)w(dT_y(ex}GgOMd3vzbVA zFElhW=?(EXR%TIXIQh>N3(VR}5uDdmu)5zHGNq+VJ(Nj&^-jYnk0vE4hSI=~+`y}~ z#>;xL`g=VzA1TTY!XJ_V66umHphA973et{XV5 zgvf^K#qluwl(Nx!)O|c7PO?@4E5}n2icjKQANMTJRd+EJj|&Lpj>%KnPD!)-t&onX z%B~$&AF=y$U8ISYWi@YBneiL9HnHm$+iV!1vV1Zn!NJvWKjv>~OPNXe6UpS_r}3ye zK&s3lxwDg2>I!s=i|ZZe)s*?7-4+qDv$nlU@T@54O)rssb3tZ1tQ%nQG;-klu6GXb zl_)Mz{U}V!Uw^F2&n@Py*zlPhMgrcSG>e>#s|75*Gd*Y0uk;@HFKkXISs z^PLgFn4J1i{cS^zWL<%5ueXR4xhGk=3g!2zosaGlHzpdwL&l926EOT5j_UZ%ebC7H zRM4kwv*|hf1qk)Jno6zD%u(9y4u6v?{g{i{{h!0t5$a&_g^r8I8xVO<&G|of9@4Pd zn7~#{C8jW5N?ux37;T<*3)8MWXJ;96fBo2kLM&?I#*!7HhMd@8X>&V$(wLJ)`jC0_ zcktzNvAzQR5xE^Xj8P4#*cXjNP9AKdD=LMC#N=!iTy`hZFD(dKzS8Cmx}=D^ zDD;0+cINR=u74j#QI<9;+tBHhPOELonpV+ivD7J)EqhtV*h$Js$x>0aY^74kei)3X zgk(#yGj_5sQz6SdpIhhmd(QKEJ+Ei+Pk(64%za40AKQ&9g;}x)HzY3Et|J!;#Q7+;DF6ibE)_6$@)~D)j zt!oO<^i>Q{uy&8URQJ-qX5ABu$CG7#nnJH^cB`Kb=Fm#`V}+sZ{B~FM_T-UXNzg-> z5JHRuKWfswO$Mun8gsVz6uK;chza-Emys(e>?Tc%=yK= zXV+-zH4I^fbcK4oLV+;316f9+{cinY)}{h?ZMeCmFXt)xoAn-Jw%dl`FeE(u`FS0K z63&ehyRQFUc+zCsc<*sfvtC`;wFn(pch6zOCyH!Rb( zqgMZtWAp2}M^&e2AUNb#c7<)(_{TG2YMxYGqpn*gC$lE`fnHc7_r!z+&e7Lu;Jqz_ zBl#rHnFVjEIF(+D~?^x3K!d-^~6xj)y|G|G?dF*^~lw5f#3lZYDw$of|H`-^PZE< z5A5G&R!7PEpGkTdgy2QR^V2}?EM#+xuPS;=mnYMrhE^S0IDX>yo~(7L6ANQwp;3`M zuf@)cb=1kFo|4Ls&3dD!${oMBhwo&{x5-jotN2!*oMYh}$4GOeIfY^o{>g{E$#d$~ z(VF`qCRM-0?kU&z`O#!q`AzAK{tbuMY*dai1J~!~(uJh|T!xs5^vOxLU2-w)*|o`k zyD(;b&VSGPKX8_-x!*RWmgeE?0!>AlS8i^VZbQmhBnLSqc2!2Jp32Xe@haiVVR=)Z zN5&{;vJRX$$vO5&o?fD%)sJ7Yc&ZIQ|5a3u&$IgyEOpG%>#k2_91(k$AS@5Lq;YQp**Xt>9Z#6-uM&E8nhHoQJKfXt#(6Pt=0B$Qnb)xGGe=3O6AeV*pmoW;AP z@6k>d`<=vyKk_h(ZK=ny$wN#*w-*Dar#)xRlMEO?ze!FrC(?058YFXUgqB&Z>?|vP zht(tSrLH`0TJ_zYXys+dOhpNew(%l))y6SBUIgA2kvl$do3N3lCDr@mGJB=B^Bg+# zm)gdN^Zr#Winno`leUMlgY9AQAz?@6>V=l^!Xw_7n|8v;Qb0m~@2C*G)3)+~yl>%^ z@8a=vmq?>9LqiMxFa6;L;zAKB1)8dlr6cw>=^Mlw6%McCLTtuTly%x+{7GAxwszl? zQN3%-j&xC%f~FrUio*Czr^?#cRF|qs=hr!iCr@n^w>#qbo1SIC6{8(L-%G1L+ZxSo zL9k+!;XPkr$5^)EPm|)8fm*6PKStWDQ%+7-OZFzUahHe7vp!Z{(wk#yQY$}A_P%K= zqcxqZK4Cfd^m(AZQpjP;mF!x(9*ZQ{2^U}9Ggef2cK0%>GIM_R95^~o%N(DKkUUOa z<1&6G?+W7RtyfRnlaFz^;lpyIZW?Bo;V#=siz9EJPOKO!o}bMeqFpkVG-UOL_iZRL zt~bb)rT37i^v*@i7+JQuvK~PlTgPpsjM)`R%PHwhj#spS2Y- zeKAaI9Txn!U+}y^W=ZS0T?&o*p;AdhCT}>X6-MP@eG&U{x}R5ZBJ;YGwPKPmxx(Lp zLSZqU=%++Su4Xt11PX^5EL0nW@MMPeYsy~eUCPj#UD;2rP+7q6yMs6mqBNDPSDzZ= znVqNqvX#B!`dcq{0=)jQ9SI0NQHwB$p%ThdaV zSEWQ|hU$^XD-l;%uX1BIMkL=h*2vfqSk`%$tS&_N+PNWxb;rq5i48MP<(K+|=j+au zcYR5DDcxSkdyDvTe1dl_L>SNt7kD;!8M`R6;m{Yf3L+f!OsvIJ(GvafT#PmDjj(!IckUF#6< zdi$Q2OSN#W-P6zcwOG(Xeza&+k$`4|xn)&EQk_of%JOjE0K-fG6|~UbGDF|I>>1B) ziFdVUy47trXxj7X9c((etx#{#9F4KY{%r1a$=JMhq>$rD5+h1w}jut zM;u)0cHULs^v?;B$swY=-jDC9q=9i?#qeZpVrJn#E*zmYDc~wmb_C zH%0SuL+|_x*LgZ9OGJHs)|kQ>R?Bg|$`=2pJvW#9h7+tU^ApUS)5&M=v2ACsxIdTg z)74dRU9Ba{_trY**JQv##UqXEEi|L%WUt}I`$lB5o4I*QBSQ5os&;!mKKEBncJ*#P z-^dnAS*Hmt7g9U>fs3q9`JX1&dF=UeJ>2unuDwaPNWTEU5l<~#P=fo5&@8yNUk=}L zGD^SJ+8LC_O|qi%;H2pa*U{ZNQEokJG7W8BHXT^A&U{O#9_sp5S*fJnv`clvSyq{5 zjpS)ZW;mabY&5Dowr4_r-2J=6>lzJX%?|zCo|SL+DuSZu?XnGC1kLC^luRQqB4``` z^z&O7!r>R*bVpiCWpQfe_rr$iZ}s2hdAXBimQtTOI!JGp==HLVlvSjMWO_>q-2Kph zeqU!@Z)%8x9J>z=iKO$sS>>s^mNks@F79il!74xq=MbG{H>S1VFB5_Wv+-hIiIf9^ zcYwic+q8t?Meg_hpfhyp`?$1DmeBqQ4rSl=PLw5-L8mQ`XKT{VDVAi56(!%ds|;7w znz9$vV5|M~X`IRIrjHeL1FUknw;!@9A^-(+Mt?Hu^XESh6ceis4GqOR5=SB!?2c)~ z$Xfnt6us8Md0U*k>mAcFeycj35XsFG<7r1KJYVtt@ql-g%hNM6XNl3xVvRdJ?IHhx zoU1c?t2(DAx}huL|2v2lC?>edD(8I;rCUhR(d^)#02@yAa4tI>x}~q%1WRzeH&rpf z2ldu}5jdL3Z!ld`8L#2QolW=5{QCOTQ~Su+e(rdm?>BQ+{xf!#yb=!2$L}dr-dCY z3rbpAMD6Xzt}WLDWGVqG!0iJcCKklT&Wi=tIyS9800F6poXt^!N~*A<35bdwKXD@P z`dwV3n>|wDw(LuR&aVdWk4?Zmk8sQKztx|A{P^)W{33c{QTSg+3n&9i)1c=gDZ2z- zDDt~|=gxsw9^Z5kI+GBB}=d)=#l9_}f)jmMXdXg;GhE=ydBIAY3o(bfHvH-sLHtZwW+uJ7{-sbRMUgv8a=Xqf<{YzXHB9Z$) zUY;4GxXcOD0uX8A%%%txPnY0s?7G@CN<-!u1S2N6J5v~{6bGaCx`#kEC;)Agmey+A zpe|q@ii3o<=Yf5J@P-YD6#fb?)gkY=<}*Z6^1nmRq4y%_Lpajl(?a&sQ(@703jbFt zrBnkmEdD}c+i&%${ixqj(liTd!p-^zZF)&oEoMkCes6nair3i zZ~0RFus{`AWXd4_s2-Ua%YvaUt;t4Fyr!lmxVy@Op$F#R9f6O)Fa>?v=M;knNVF;j zD-XFEKx8O6^9l)7nA=t>7tyW6nY^3f=GXLoa^UY7-@qLw-kZA zNhVCn$nKBlr;6RMiX@eWhJ*wn|C#`YNeLW|K@hNr;uDqtdeYTOboWQVRrK`J6EfL$ zZI^KBRraMZJz)`c0UO>bo|^zcTMet4;ZIE?}7C{n81)H0vS{ZOfEcMy`agQlbHFGFENIHJ(7)Lzf#B4u}U0+H4;)}X2vtVkf z0bP!u+>~$~2r(c;xwYE;T~qI0gnko03(;>6K`Ti}T#twl3RfJ1LV{W<=Bm%1kQv8< z1&9cs!+-M#_a6GpB~@1#kPkcouGfkJ1*HPPF6~>GHZ7&-%%mJYe!M$CsvzF7Iu^Rb zMAj>L>-s?Cq|qX|abPz02Azu##&jqZx?09BP4kgJu)AmaM%=f(L%K+W0~=Bd_H=Ut zM(j^=mYfn7yyABs1NT4hVCnA3$;n^0Zr!Thb|rSUFs9-DAOsWCg}IqIg&6A$^YZnC z_wW1nr|4xBQF{WQ!&8`dUqV2^1hEGy*ub$Ovbqoz$q6uRoV@F$-6zcmSglgN9VDM+ z^pAY@@1t$ygx%*{)^>2(kKt`5{El8AcYKDt8Y*K|9-y_>LYVzJH`UdLNQ=j@=5D|& z45t;r=@6e67tCj9juCV9MjiW2>L6Twm@v%|@IHIvlri*fjc`HyE%DlmvIP>a&x2`` zZTMsEXg^SC7>!R%q$@>p+^-vC*Gkk7i;}ZF2E2#xlfY6bJQ3RU{Yqk_f8>JW5w#Xg>|zow_^h z*5DygcPXjQ|LdLrZ`Spw{RVX}JWRW78t>r3Yt!ru7~ZqCiTlUC4K;*DL>vXqgo@>L zQIRit?IZw&j?T`5y1Egk<51!n+FSI&EF&`BSKH-yj} z6He=3SxeR{G;C(@+1D66nJ{%QE6CLf=U4`vQ=>aE1E-_N$R|P8ttl#z4j#m5E#nb9BFl*e6jU9c)1ac1w`-p>s1AEL#4NSC95)xFzqay*& zbkj|Oy9w=hZ7sPpw-hGR4IARRTWK~;A>HMj;YQxDdB3J)LcCozA+G0~!AMAh6dC$6 zrFnOnZOfu#8h4?TPz*YaG1?|FF|HIN*;5X35JK|5YFP|e@4U-oHI-dQA7d!?pB=s2F^8abdTpA=`defrYF}VFrCZIkyCjIqm%=gsad#CDk8EE>q$vu5rbQKB;`@eFqjp`oOESd9JcOW8@#*`xeV3b;^YW4j zlb8pGYgbo2v zvvL~X;0mj~UB?n8_Nf>pKv+ap_R2CSZJ3D+`ebf)}btI(jO9MUnm_ zoKr}A-@nP$RN16=VUuZ%VM#2k!S=GE92a)_CY?pQZ_hxHO=Ud^< zxm2z|r~?%SA$VkbX-JJ*gINgITG$}ZNhX-27}9gHdtQCgQmD$4p)*;%^rK#N zAqFKibgmUx6cArpjb_*8_|mukWq%BzzEy*xiw{*RG;qz+UlMLRl3eS@5P}MXepKYO zM8By})x0Mt966$x*d#0a31gNFo)BOLEBxkC$6Zx(o~~QuigK)G>`;@hp?HW8{(!}z z`2SSz|6@7uzL4;B$vqeenKwA1dh5SiNN9k)FGv6t1wM+OpC1(A2&8H39if{09>RMD z-{ER8u}b2x1KnAL^WQ}=3K7amIM-#s*xJa65^=?@{$$ITUfDQ=n8 z!$X`U!D0kOyA7gs>p{$ywPG`7~?sb zdjkSjAmi<6=#yN0LU$4vh$|7}zNoz2W1~XvuOlttXmMV%tY3b0tmFe%X@}vA%XqlG zkQHJIbGIC9q)8-mJYhi2#KZ(mJ`l3;kIT8aW#B&_Q`m?3Z;7;=U8@yFg`I}^jckFi zkqX16ge8M4o<-nK8q4*XaV$dVG_emdSb1@eFB?lK^fo)p{~{>vtG>mJh4W>T=hxYLWs+S9)n^>`;~_?8>*dd1*qkhuUhpRjFFmEda9e{7eS+b zIP&m8eANv*$m7$#5hF2_wE`5WBJboEddl0>wdtGi~s(6k^KK14~SRK bT)E@#&J`G4xepH=V*CAwhHA7ySoG=6%dfFLrK@6 z-*xys_kBO(9q;|&{qq0xcMM~AIM=nWz1N;=?z!f=!XBvJA;hD_Lm&`@ca;>>5eUox z1Oj8~A`bkI(9f|s_)E-1QQJks-ps|_#K{z)V&dXpWA9>P`Q(b5sgtv%y`2D$7|%`a zD;6#;4$k7dyte=T0UmoNbKZWMHDa|ljE9n+ zST1s6-h0n-`2v;_JKiNB3U&7hneR5F7pbpwT&><;s6zf&D=sdsziEv`dYYva(gd4a zVS!&f&E3nG3h*o4iUScI8X8(bjV((8zo!{r`UX|Gd5(qqO*5NPIH`Nt3B7pq1kG0j1l}$# zT8xe97xUi7*ubP0bqI)$r_S!YOhOW~UEqJ_xBNTT+Lb2u0ip&`YBh-2#rwe6IIVRM zR#nOK*|TSt$;f6!qpDf38}J_p{-vX){)UbK_2!DLCA~bcjT`7_X!?Ie!%wk*_g#Dh zczAg1+}tHqi6;S5AXo+$$&L0RSO@%*4CD&4~nm&qeIa4&wwc#9|cJa z{%3^tUHG72bhV|WWolu;+*NGms*kVl=FZNu^@-ZK`T6PD*{7~|VdPkuM`>>|LvC{> z)@i_CKDt~*2R1r%o#ehpF({9g+2-=h=FkdSG|Y9p&0gJunaoPWOcNcpDJ$lA+7>0X zDitk#$gUjA?I_74>A@#5;qmnSfW*`9k?OnH7cTUDl*g4mJKp9zI2NFh^eFgzotKw4 zQP8pppSMOmBS48Cg!$RGPXPc(0b;PnG@v>r2U_-@Y;3 zjDF&-_?z<+w+#(bzIwqb-}}fY>lhjt>B221CpT;(+_pXGcl1iP)M~R^WD-5vn%Y{O z!Y7KE%u|I=+qR}dn6~EQjKsYfVsGf-$Ub?(GG67{JTw&7*Y{wpcHgk5sE9t*V89vm zgDd|s1%;x81$%P{F`JCcS&mR#PN8N0*BaDJL`7v~p=oEVK%Mzyo$r`KGvS2`7cNs% zx965m+_SQ>%5+8crmAJAe%RRDWaj3MOtPz5iX8P`uid{$M8q>lw!FHk^6c5w-IXEp z;R2JL#h-!sb%)__LB}Bj_n4FvKiyudKpaBUQ2lA^2lt7)#>Q9nC%o5n_6-zT5*Vay zT(NspqyjYC`3O|!v`*6d{8IcVgmI_es!4Zn<=5Q$eEZeKOP3rkNb-dQmfKIN-oA~~ zpP`1E=C=ChnYnp?vAG&4DXDh39YY8a!%T|znn_D22~2A9=IIyZI8q9V)?Z(gM@p@! zPLB37Y)8uo7{p8TODQNR`JIvX5r4|(=d832ysbVW@rj!U2Zx7FJBtr_D(6VAtEK2? zxtBg8UWTzZ757SaI`>Lx<@r*QI6jV`YW}Li=g3k~t!MCR`ynFd7TcEEWxkKgAf`rNp31z}`lc~6z53$5KEbV1G?#8J3a3*8f%Iv*YY{ z)4cj;9i*gWWUyhcU%!qMkRV|GtH@OOcdp(YSY&DuJNoi*H@aS#vzl37+dm~@wt8xk zn-`dTcSt(pcr##KP5n|#sNn`LTO+8prviy*=I1rD+;<;A?9Im9VHBG^4G*mdAGHrz zv=DW~v>Gg`qFn%JT}X!wxp17aI$91xp}T{^TKrSWS(=w;q+*oO;GTiwC~|N9p(G?BUz6z zN-Tc9fZbXKAp(yvTw>WjxhGx+QwdR0?04ctD`e&JXT`|>L9MK%HICyoSQoS^-r$(*eP<*%y1@VWSD0z z2qzI%j}tYV>`(T>E?M@tAudkK$EIlaD?RM9l(cjTIyS<{*kWlAov2a{R~>EZ$e)chCr{yyief7$mS zo6E@#Jrc8G&EW?&uJiNriY6u|nPn9fqGnz3a&B&AtW!Dqm82pf&0FD&nxo`{f=IJ#E5HxC)fy9wKjU}_ndx+?alXkjP^ zS@or1=#|+pb8v*Q-idmhn%dj&9BXrP)1)s=&St#oJ#4})h!LkY26xe5|K2zg>h$#V z*Kgk3a&qE_FnGE-(~5>1)4a*gcZhY%?YiOXBe2vmXU78W6P|2Z`i?CxWm)$7;!9cNnl%UnCI#T7VA-%9a6J#bE>u96GHd1h)_2oWAdFV+-Brs;3; zI#kKEzv5<&{v{^g^bIWva>SQggbd>EkljiBg-`D+4`ep~c+a)Dy^S6Vy@Xq&>Id>4v_$nuZ?J*ePDinfycLBQ`z<^Kr2M9N@2h zcm{~G7PeHM8SMoC-DhiKl|H+JS|zrlv3BECo7=rIah0{oytVJJ@hLZU`qj3-)7ihv zMk@1EzJ$0=Jv}+n$WUc4^gEb$o^&K3VcQ%^kVcf)Tq++oGq{o0Vn!Wo;z}Z<2_Ogw zB0VF6jG9_|ximSM{>|IBmcs?i(u(HA;g1l$ea;Sm+}=X!y4+wS67`1j zDKTNc^F^iis3|Oul^dw~v%q)ca5Y<6OiIXOoQ_AU8_mQ>Nq^HZ zB7>~g=hXAjC3}0+x_>vmY>VzcKX$L!lI(uc<755le6I(@XnOi6ob^tcyS=CbVr*Ly$EgiSp;p4F`pWzDw#ho0xw(E`E`ytcsT7F2)0TB1XwYZGiXt#>U2(Ww1d8 z3iC{;$;rttU%o7BVeu_Uvl&=JLt`K=1cK4xKqeVv9P_~}&4rRz$HzWxvjB5&jdsAZ ziuJl9YGE7g%-2A%%+09ztSQMUDa#KIb+w}3sldHhSXmjAA3V4W>~QnAeA4gp<6K>z z?QRj5#Xbysd;7;Z+7GQRdcZUKKvqDf zsdfiyw|;ObC@PZB(*6MAp^RNDkO}NFCMHJE`gf$rqz@US8c6g0-@W$!js$j_%|iN} z4(G~iXlo16DK--;qhe%Kg)C1mc?mZeR{f}HJc!LF!#0w9z@V;AQUco zrvb}Z)C14}s4w41zW32UoaJE{=)EvfLhYD>+h2df&C6;94 z)$Zo)ubFH1{#XO8E`R~xDW7hmc#F+@k&wpBVZQbKPj=@g>`7vlKbb0T$Gdh5Rn3%( zYamKwWg9B%7y8wvWA(b)wvmmwt_{%7Zk=Z-jsGVgm#* z&`TEOu8jlWhJXppT?qo4XIwF=3H(8jE%_X06aWGcz^F`qyyK{-t|p_SQwG+pQ}pa^ zC6+NTeIRd~OG`^GE5BDGcgbmltjHleif286ujrNYASx>>hgaRucjc)+-r|=jW=G}f zSH1xNyAS|@LPAE?47sH7M)_D%CvW}zwkQVAmE3arb?cF$dCO5R2x8CW%#3&$e`!E= z#mYS$h4iY*dCJ8xn&rXbDpD~zY*{fj1_?LGg?*dJx(~v(e?*&@WFey!j;>z4c1;Y^ zxHI;Kqr1C%4%z<)Q@CAQe_AEE*+M3HveOTA3HD|KpsfNtVXwE5-{BIQ)nJyQogEK4 zy+FQ0vq%Cu;hZkt?TrogL3wIg+I!o`?vXlQ2}F{x?M&>a9Y35@-#r>2mrv$@ymwh1 zShBaKBFR*J^X3XC9wt`z0-pb1DrOq?z2w8kb`uk=(e_mxW5J^w<_>Ek&T^*jBm5Pk zIpU_4mUNaYyUm*I%CQ{IPWGK)PQ(o(qN3a+{r(oVQNz&$SP7h7jJX!#n-liF!2Y^$ z=31!>535t{c4PMYD=q;2&BkDuL89s`|--CQ8CbQ&Xj zir5?Gt^S7nb6q7-lroz1Os=V^$>LY~C4h(w?2MviF)cV3CQEu2bq&qT%&@bw8?XK; zjVk+mC;H91cM1`dHxQxG(PyLCp)j;Apxg&roxGkKjkvtu3`t_LTu^*-3rP{t(Sw6Z zo*amK|37I%c2P>b^I{*fy1M#swL7o#LeKo?Xz7_?Iy-jf@vkaLPR)cOd@hR*02mt~ ztyiAxjaDvxilASIO;3Qvf# z)oul5gxvZUnVBDJvCe-%uv1tq_I(tzpGb~kkWh!T{5VfPEH#xWf{GUj`3Pbm%&m=0W<--bmOY-TC)lMsN>b6^&c*v?Sfn}a&mG~QdRv50fhRdrqB7hPLJhDDV1SBIU0J? zLOPbM;19C3QEkUHjfwE8kQcxGiq8KzIC z-miAnwVBUjZ^S$-JiG}|hEd8Z*$o#WkAwp`izRbFMbb>!B$3N#CJOFW{gY92{_D zZT?9~PObnru2bt(N^va$h=}rAw&tD>8)MF2yfMEZo&GR30Fn#1EE{<(3L*_1E+`x8i?DrBO@b!jA8&IvYPo4*U(S4Ry%ae zA(YyWBU?SL3gF1FA8iZ!S+Cq~ezknk3`p}rY4;_v>l?@0y;{!_;A(>@)e`S27^+1v zG8izU!o!`$!n2k1_30t+VO`MSyaJ@LNLG9-Y>4`qTr>3)x9LZ5wpz(KJK4qNfUwzLT0q*uVq zHfJJuf0bBj&vOAI@An) zwla(}f`G}+6+@muSFA6JBhW69W5wI3FR zh9^=Se9V~#!e6GK zo!!PvL|^))NSddvLh5jQxpDcjG0&YS@^Y2LXJxObA9{^%I251ck60r-wpEH(*Q%BC zN7J4|4)bmuL<<~tbq8i3YTW|0>;R5pO84(SgMUW3PIxXbpcyFyam%>-WH(^i5)h_V z3T76T_iKsPU9)#S-+rvcqA7>*pvMX}2LUx-!0lJGB-GSO5b+55Z4OL0_-p`+LGKG% z0DfSNmJdros^c;1;U1@%o*vM`QM!Amsdt5|^H|5}qTJIn!FFQ8G=JssjL7_w zW!VRDJr!7w(0|faOTU_o%KqATSVY7uYI8Otx7=!w^SWws`|-i{rHdDhTQX;d0a8{= zY^_toU1ne5`R6G~1vuSiW@ZL(V$-ZF~>Fr$(=s=o#nxZD%X`? znHp^9$Eo)_;m*=mP&if9PafH(B7Nd|?FsfS;)ms5Hwi{YMo`~wn)lEP+YHNQKhE_4 zLZ2XLsh;V2CyG9-zFubbtV-DfFqlThPZB1D3C_706!Q_G?KJd~+K0Cq`})G^gx(~! zno(DEZy)?0-Y={o=a5%9wF?V% zEh?JY>SPw9LH33y^OjbztR%0ZRyp4twNAr?_yAIK>y<(1dTAR(!Ca@+NN%&psi}pA zgQioM*n>eH!Ym(LU^gz#=s8DXS22x~-3eHS_o!N!Tj$9hLfFp6Rp^Njwya~kh<(c7 zHOM#Eqs47Cf2g`fSZ8K(a&Bkg6Jh`?h-Quyf7B81IP=ZsidjA{NwnNO*$DJJLy@|# zlVb>8&|h+iDSag9o1u_iGvP~Bj$I-mLiQPnZ0~MwH$UE*uxD97tB%Q{jc@`0G4uP$ zK$2WUXlLh-7hL&*adAeEH{J?pAaWFd1Rv#XN;L@-R=fQwV!ctJ>Kyl&`$GO1W( z$>w^qd=I05bi_s&BH|)3T4J4Cc51og;pLUJpr+9C%}6F*2%lC+9rd;tE{N9H#VsO2 zmA>30*!GbL@IP+;qnmElH-Z5mB{ZBY28sysz@G(8LLdO;zhpEQnDF`6iOokSd0Jl7 zhI&CT9^Q)}e3L^LYO!C-R_WKzt2&vDq@-PnbNUwNKZ4WI13Sa`%n#-?@jklDla50p zMrzjcQrfq{uDpsiGxNL{VD;KOx#gh{*Ol;v6EZQT!}35_ zIidZ71+zu2PaAAh_s)fc!Qnrpe8vb5kA^JGzOSzaDZ&IEpleH+-*rm@?8Y0~aCJ)| zP8=!E6^23WT-}X9tp^VfRk<~f$Uk7ApRD_tdGja5)?O*8#-X7qua<*zRpAk9P!Lkg zzt*cU$sTgJC>Oe*6=U`FA?wCoFi8G+3d!%$ih`2R%o@>KHu)zkE~{3qLNht%kCXM> z$RE3z-EX2K)3r2oTLV3$!r^cV}(RPH1xbaDKx0=nsWaezqZb$DZh=T zL)tbQ#umeu#a(~t`>P9`Uyj>h=H8BW1P zpD%U1(cG0PlUnJ#P~>yqL_{yz06M>o2_WbUr`uo1wE?OA!Rc4gL!KLuZveP}e4X+; zB_*W?wfg}6 z2cU~>?(RzE+eXm{1poYeMe=iO93=}BPq7BfYx%FWiK7VNf20V=nh^$b2>;_Os z{LW6?Vc!DT$AXy!WxHk5OI@857#6FX`D}Qo(zT1kA(s6OlatH$6p}>|(ua$mxsB?Q zrM&kFAY(v1u=s!5bu zP{iwbvivCiCYJOO0cgZ%ftZxTOn{)dpei(xla)0vE$zy${(e_!*dXuTyv33aj@PK& zS+@u7@Fr?fbqu}lo?K&MiWlmvLBQeL@sBgQKAiO@Q3x5ts7QXAUZswf;*_wJ?mn0H zooXl9*bS0cE2v_L5zzSOgV4|bT&9;%4AaP@+`QX!e_cr0vHR|(L)y<8)8E)DtHKkb zW2hfQ-^pp>uUowIc=C3BXjAIIg>xiWSlVps&NRd!DybrkaXv4)I;Dua@@IHgLIU9; z5fiDx1BjcG++8P*Gr;-z6F7*I-N5mzZ=P;Oevn4c z3Kf+x#)PLa8w1=FdmKAj3=#Pqw8EluMxpVho#vToWBFuLV_<=A_26LWBl`2?l`JQV zINl-i*(MxwOFIAW^P^QVi%2=j@xkk+R8gjL03&r<4@P#IOi02rW=fvl``Y~!0`L8% z3daZ97BJ5D^8bu;W8FWgxvn|*dG+~ii2nJyq~w&*Sy2^U%#SbV5juLRNyAAYz(m_1 zOlk03KCLLx%r>4;*xr1vb?erPFY}>~E}_5bXc?!EnO{#tLxbl(BaTM3mU$^u+8{;f zqZ{Wq%)=%|b35u~4SHmS!CvSe_(D$EL?|Nrgk^Yj<2xPfH1%CbqJ;D0bFV+dseCjL zcpV=4NYLFqUhop2{mrMKzP8XVW8?%I>g?k6a{J;Sh((BfBz=C=SEM#q&1;X13*u*m zil(MWnRHUB>~QBPV-(Q-;Anq7$7O78k4HeKGu+N^V_bnD%x7bIwj+fzp2{=Px0NyN zLGF@35EEuLI-zWG;w!7Vw4Z7+Dm><}&wT|Ib;R(I&-bT=(|#E<@=v8g=}35V2=Pcq z?(k`c?3hDau!LQON%6^UKm3!$k^ZAo}&a<*mv6f%jKyUQnUgDvlV$SP;WgKrS)HHwib3v?Jk=h?+WJaj zrLjjDRoYQ~th?e}Y#YK*c3(8Z3!_S99b;ky`PM$8IkqtpwZn0nK3*X}3$fdO)|gK= z>6o)VZ`xN;*iCX#ndjrjh2u?@8I}oe;Hc7ToYS zN~j(f&uLinwmI}>sGT)O8CN=0^5UMkWH=^~-{KL!r7B0nfjd52#*^&h&4|6{v$g6u zN9RdC?A#%;)n2|3V=m&49Nli`?PBdsi7?+@?+_~L-ex?rP*~f1@VB&FzMZjn3TxH4 z^{qpR7`-hHcAfdLJteI!Jx<1b3>lf?alWn-Qj(!kTe_WP?ENvUUP(CnJSqJl={H1< z7eFOzl=kDHG4GX(D1@pXJ8DiI(#YD~-F7EY{ihE-QXrb7CRdg}Z4SIE1QB4fsRZxb$!j9e!9=)gY18O0PbWqcyTEAAJFIfea` z>f5sEoLRwc-(yk@GPpx~?7)qyjQ6hIU?q+c7Q!-7<#S2Kk%a{c(hzpsl6@MiavFXr za^a`=C!vV?Z{0Gd7|)+)5ML9qCsIjzv7R77rt#kA`AW#Y z%)(@X?U6!O{cPJuYb{Za%XJ4hRW5~9ESah<$Bz*;R}L{X?GJ(u{)$$89^i9=+41h* zKP`PBLT^1oeY=d|RjWiTVNeL&+f)XJKYLG}njG!TESw#)d3ZJTeSA=EN3r@Y^j&8R z>xTas?$Lg8qL9N+MZkc;u&7Cxeg&hn#HGmQb}>sN9?olnHWC7J`#G0Db7uaBw^6@dUb?k81>Cd38+)C*0Rp) zFmm%)$=&E+YwfK+z@ZfprrMYiT$>$?lvrR-m^8^y*hb2^QSejzbkN)wuvC}s! zX(rx`>W(8VWX`YtHOPM27)41GI~F=lSWk8%v}0XvHRr-ubX$yX0T1r}g&3#4SMBXH zn$b)lD|tsN0{m%@Z)|VYcsl&mcFZ@?j{jP8nWKZxc-M-Zov-(ZET-5wjIjaKjj)?f zzw-Z7@mFfzNp!w+i=_t&5n*V-$8>j$H%-LDpUJ4#2z zV2o6MyNNZGGub!AKQ~9QF{j|jS^*T}5&^+nR(77#g$7WE3XK~v(N$)sMS)u0(B1v& zJ(pIj_vj(!UC-ndzM|^x4_`}@NSH}M~2ILCHvmDc6Zkp zIc+2PJPO2W2wGQG(%5^hbKzsE)>|0O<+vQXZ6V^{zgGmRg)S3#Y_?KCneWD1Hnr;rll&8&{8@HgmM5(8rScOV$C3}W)M8w`5kmesCf!Wd0V3TZ6>=`s z7P|X3-L=!31J3I&?Y;DzH0T`W=To9quU|`$x~8M^#kvAXyPefh<*KaaWl+-6vY5s> zIMft`980F5*%*F`lrd9C_W_NoCqW?O6`e>Cl$84omG9nd?Cgw~nwnBy{oj;(3Uu83 zMRi4b8(}(EtQB>U0-oB$J*Sd5p~z$p_82KkZ_(GD0ayvR+Q&yv+78!*-4kzE-(Fco z@;TY)OHSt5-3c`pG`?Q-0&_d19pQg$!lNAfF0XB9sOE;@HnJ}#;b1!}TX3`V5iu5S zqKsatI*Lq8OO*z(zdqU99>aP7@;5k!G7DD!H;V_0nuf_JmDpS7N?Ng-LNT*qZ6kiq zBu1lc7W$23TyvPFC}gu$axEAp5>cTZ(mMT#5t1`vCA=*+BlS!E{xMZeuQrXSBu|i_ zIu&<*F_>-gouFa{57j1omvVfh4xCvABYN|-$V@J3J_cjwn0Hb#~>%( zhdLP8R^G=^qJf0N`|($cpz%G9Xg2j9@6thb-P=e$i8%Kg;I@Mi-oPP2-tvD376_nZAg1Qnw!6llzuwnCd zyQ;eRaJR24_uzQQs5{U%N!Z~>X4TBh<9y-uWH_~0=(39Wi~C6|U3Tz1UXVF!1k|YW zJ&H}dsM|95Xot_~Azux5ozQ-8>-4Hgig3&aLJ9X2MuLdE2X?~+9(wlmgc@HPsshxpPpLh z-lMEL`07bKCuBV})!08tNB+$4k-AH(<3dksZHW3NkS%6;u(Tk%;h38I{@*LNJbTL< zUoWIhBcp(!nrvlbyI1&ko)BAxwCC1Nuh*)ObJQ)g`5E8-cXq^NnD-H&X5lI%z7nW7j3?47kV7TS`;$N;Mr4xM+W?F;{d1RT-Mt2YR?a|7F`n4D+! z-6YR`lIBI)-_zHo=T+N4j+i%2GKsr!`%0U*xD2joc!G6xB3q2}2gn2Az!(3Ss+euf zqVj@gd}EF-Z8W_%2y_mvxB1ruzIa=gQEOOkwK+vC(EKvaavZ+H^fBb#wS0`WH8m+^V*XHF^-!*Q<%XY79HBQ zs&KV@(vFoGBgMbY>U!2hK_h|R$B*yNbU<#Nbr-@50FH$OMG9R*iz)+m=oVOLVxSE7 zN@Sv)&c5ckyHFyloY57M!e3#>WI#Z>Yo^j$#)2%xEMNP@&|GLPlSjEBF!u?rKK<^W zX}}xg?_U`&9Ag`bA2IvIapD4YLUY^dpM?JYJhv@D9|I zE=eT{sGbh=J-!*~vt4tGSWO~Vm#R;w@hy*mjmsK=O5(fxa$x=@GYZ9R>*bTl{;Kks zl`hA5w=wv@+jp?Nfc66-z}UwDX5b!BXc6%e?mWFx`}9yRD=z9%hrJM!I1^bLMB`at z_HH)$RuQYJcfS7vBHKR;KUeu>s;+w^Z$45amML~i5 zY+9$zN37Os*GY063}R5FE&n7)5<}YyHq)q|3`^AGAa)JtX_H?R`O@{Ix$N^*d%`x< z=eIO?#AR#};~|>LzS^ZF9^R~9yXOwGSuS>1-sz86o?5qO6&+5V&FAd7K^}vzVT)-D zWpOawgWmc&F0SqSD>_do>NDhc}f9a7K2Uv0i5nj!&cZ5?NWb;2qIJbuy(E zTKNjs+Y-&prTj)JUbiHSf8!&gAzjT>w;pU>yv}}ng2%(OMHslQmZ9>D?uq>D#@@zb zYVyplSt^Jc&^bM}I@l7xkc=+K`}z6lyN#Ge4VBxB+yeK?jhqJxEkf^>Z`cqY8!b&V zmDc+!s{cOQTvelbYqo#&OqP4jyZCQA8~2eD5yH;9dU~&3E!3he?(u3-<)>_7-|C^y zmM#~BzuY3})J$?lM1#2#l=3cEql-|e11Wk;-{p)o&3k{%W$9NC*qn8=O)bSkWEJ#v z{G@&OMWW5(?5C?;JO1+O_uA`Nqf^%GByrF>Tgn!Z#2U%nmm-t$on<=ueqkcDRlh&G zrjO{ct81ReMuC!-mpHg{DyrjB26muGI*_HAtxJftf`64IZ*ItFx?in3LbB&~m^n30 zwffmyr|FS)6@OC8tJCzWgREy3{Pu|xh5V62=zyygqi<}dTo$8 z$N60xz#}%VyAGzFZ*%v4s6l8uQnW?Of4+@;U)TS&vG3zT-76{o ziE;h1l})1jH}Q7k8V$6>QV#8DR4md&RCp$pJd7`z)R~}=gP+UPs9jeskW!G|VmRYl zMh!9#@RIYo=i^VPITD_4w?z<{L3FnS7lJt#bSijiY7dSqoj=>;S#W;ci(YAg^>y!$ zf8B=b#*Kd#&H9{aTxX2Ai!wUINYW5_yVJ%T85fnvCB2Hxcz~Qe^SuyOo)kU4)yPFw zBhVm$A0p_beMFi3k8eWNd?BxTZ3c`o8E!gcDw?c^m|>v;ot=Si*`VUeq{{a;m!0yfuMHDMQbzqq|-lamw1 z#QJDwU@=*Tdg|oV)sZh`WpJ{DGI)h~MHUQYss5*8Ogv;@a>pW$tkmWuFQiWBBEW0IWwD^_wC6%1=4Y+$H951ti3~dZ0py@Q(KHc^^-FtuA1s$>8H>v3T)Z( zU~{8MK7yj{VzFdfoZHTqX4}L3ozatM&cr+)C?V>?9paMD7lj-a^O|A5os@97v{1nz zM^jvZ@`k5>>B5D=y>=%SqsnH-o|&xF`s*?h0YkrQZg0#smyP~+6>Qtte{q>`v@@XDFJgz8P~TjZiCw=O;N*4&b9f@i{m zMWVH9;?jGDcw%yW8@L1d;#w=F+u-v*9ZA2 zBeAhKccNq0-j_hBXpkKtz0rUL2GS7dLJKCKX##8hrR>noF3uQqh;Uz5dC|rcGOVp# z&v<-tb}FU5>4fhj=C!rRA@%BxDsjxUlm!ap``Vk;gj<;5-ZU6Z3V~2u& zPo;i7v>VvWmS4`wK5+f{g*Khn-Ai=Ca_K(hOPp^!ddZ6h zRSoSi8yn5y<~d*a2m*6za{4i!=t#X%?2Y~)8QdsFe@K|tK(~MV=ViqpTPQVVqy=Uq zyANLTrM>;xtrhjmS*;MhdOm5dYbnkC15d^x)=KQ3y6x6(M~Mw2e=s1^qA(%8io9saJ@Lkf*IPB&qvDSEt+!hv0?%DX(xVD3YqNVuXHptNIpl?@e@th z7UT$P7I;9YdX-#Ut09v)_7hEfM)6k4D49x{O9-V>>Rs)aK<`~uxv zKJKgh8I#naeaqnrEmni}Zu5BjAY{zU&Vn>~m5=ZB%a<4G4v=(hD`H||1WeM&(Ch{_ ztwoSfGT*z_R)&TKSq;9>vwMz1n7kfq$KvFd>~_)P^!NbW&i!CZBWRv#CYE{jEB)>< zcvMSlM&A5aq4P*!Ac&h~@V$ww+;dMlK1B6+4W0bzpV-)I>Ngfqt1TD>+@;n-W^k#U zm7(bWCRfJs%>PM2GjoRdh2}uw#Dx>ztxJ!ZB`m|W(XtF9CQoKT!D}&R<`~xgX}YJVz%%wc7fiKqs(F5z9;T#|e8}>;r9}Y>%W?dsHN1_GlVj za{*U=C=Vq};RRVAM9`9i9H9VQn!NhY;& ztZW43WeQX2`dK3IM8qt2XNCmS*3_UK!wljs#!W9TfhRC{$j}>va3%0>DJd&+mHJs( zaYB9Gd~D)>`xNJ-E|VO17n{lTrZ~*La@b0T5~`BQ)BwiDBWMl-7bQ4n1E7Bm-NacF z`|e!}h)GIHN}{tzwY9Yj{XfW|B>s41jON9QD?F-HKA}nnqN|rT;0}v}*;KpBgRIb2 zJ5p?3Y%{`7$!mBYq--#Mihu*`E5HTXvk#uQH?LnmSmT10mz-zR#>ENINrKN`(S0qDQ2^;-HmP4 zj0iohWsooi^+>wbf1uM$9MBIW;mW<3Kg-tig8_ZK1P2(E3=9hOtI|a?m z5nW&}P825e@iqB%HAsd;Oh(*5TOmCW%!C=99HgX}0_L|AUb+f}DRqAZ4~zOMuAtU>V85M=}Pw4jYN36MeN&VGx z^9fXbU}(TW@BWC@KiDQFm+5V!{pU!O!2m{;hPD)Nm-vY3``p}FC&tD`4=oQpw3b_P za<7x{mzIG1pa;Pzc!8Vc$;UEVXje#6q1)IjtfB?xy9^$r%v+Y0V5#^!VK4?Qs%R2H@Uahk+Tsz zpc7M^D*V%QlzBBMh|lRNv{Yq3rYPq+4htPb&jV*zH_p+1lKZZ9dC#(yf zqO$Q0Q=^(pW9bmuE~0c3UDX4+{y(=xMgdWz@IqJ9DmN($*O{{F$%GP0fcm8;3M zI6ey4rSRi?h2#>r`XViND510xx#{0k|8N%lC^&HH-S&4PWC^V$PZVQ zR-i|h{2YA=8nAf?;YTsR`K16>FeV&rQHbHMs7%nPIo_||=#xi>fO;X?#jzDPUftcG zbyaYnW<%b6?=p$`XLNU2SGAYRnhnuGa7eSzkhVcgsM0*z)Yh0h@kNbkxCmRftOR}K zA81b;Pj0~58{5TI{OHeM=q=YwpT(Cu(g|f%bayJl2=xPDgca#f zENH}Z&a0pF2kRU3B%nv=cvs51=^aO3CYd1GstAFk4A!<8eq>J&2>T1flEyeNGOgJX z3b-+JX)9_h??L4;g zy8h__)SQMI)yt5OV(^VYCyo;UHaM|}psVPsQN14m-RaN*jh|k-R#h%bTjir&|8j<& zTLQeP6z1qhR=+e)r1~drpM-^4_iv7dfs^X}=}?#q^x5)sb$1 zjvejo?4_YfyHBY%P_qTLbdo0}0QRAeWOzsrA;e5QV5tYasR!HE9A^6hHnv!7e0)4! z)&m93H{CeU$hbd_yIz9^FP6dRe%uBU*4rD;b&N$=V>kC@4sS2N|KoeMK#*s#!wPg zFsd@j9B*KOF^+rJ3)+4*ph+LyLs$m=d+4?=Xmm>$-Pzl_&c|0Uz{2ud!s$YlTaaOG zmxK>Eghs?xKgb5dqkuIJ-2ww$cCoWHb>PW@Hym8T!<&Jsm>D!2pj*`%8e|!LHsm0A z|8NC+*dwM=YdG&ap!m)k#9^8iO8Oh%O$Pj<8EUCL@a_Q&XO_h~jGix}WlrNEFQS|3 z^z3V0zcWv1Eb%*$SknZ1)-lOGrcD2mAYTuig`a23$#5I8(s*Bo3jK9MEyy&s;eL-Q zh3L<;gwpE_dIK0v`V*6}B}O0Z2G*OolLB%;4`mGP0@%M98z^s(p8{fq!2TJyNGBZs zymx5GN7^pAbT>3~;F+ofVPvRiw3zeM8)fL#?827;(^eBWIF(ANNK6b-jx!hL=5^4p z*^S1e%)PuSyvI2KsvjCu&TJ@1Dvb{{I9UdJw&wdXi0Q>2{SV43DgI2=Ajxz~@n@_% zrCqD;1$|W^`7I1V+wRD%z59lrv>iPG9gcmiseuZZ;m~l(z1u>D)c5QEN>L7FqG?{v zA5~TGr3CbsvL3Q-<4qd*msXL&YaGy-P!qZM5Cp)C)bLR-gzm0Pua@U#D=V}NTF_FH zWb&UKQq}Cy=IC1n%O(*@O2JDPvbo4e9B)8Qin;gpEtaKaYcG@km}I?u7j@@7xG2DI z`kSs)VwI#O4K<2##XHU5hpjFjIbwtGfK(K7?_oA2IQ_T{^}WKO%cU>{#-+~(6@g=9 zH%bOLcAoaY+&mWn{Pc3x~3so9HBk004 zwhWZxWZh*teD{enTHIz{#tFzMFZ;Q{0xe zr08mw=T)xVZRqBlH?V0Dkc~N7`NG*O?f#HMeat60!4kb9>V+^N7x?m*eP;<#I~v=D zwT6afmy>0fFtJ=0h=7fJ0+7CdsAf1lv4^9h^l3$f6uT0Pq-6v$X^SESWfQSX!=P4D z@5%AhpcXSPF*pUwgkd!L;F;rLmthijg$jsCE8gOtL7THSnVei@@Gk}j2Po>l&R_$f zmzfzU$O{%)T^NXd!;klU*;MK2xb|Dau2F z-q5Dfw6Sii1D!pwfF$R3$SLx{Z)~hZOp=y(B5FT^1HjnSMPqL zD|%gaA+lzkv9NZFo&3&)Mn)KJ9$dz%phVDPnZtPt$pXd4KwroPj;)*FITR|Z=)hPJ7jaBnrxbGu8glH%b8M3gh6Om#vU9G~r1 zVxG=1D|rGLZX-plHSd!Eu?~JIUSS#Ri=^Ruc2UrdV6;5xd9PU@+VIH_&Osd2Q7ouW z%lyhvV}jQd6hgZ@cr?Bk!okoy)i)O20|U6W^z$>Wg!@{_S8bAe#48g{_yhUGBIC~t zQP4=D9s|&71~2M>S3XQY4>P}!|9|TNOXkdbq;KHFzq4WAD#-9Esd}7RPN+JzkyQB zoqy}i8%$Yf&&=El4ZYZAZ3>p$YvnDMbZBU3-fN_Z=7M)l^+Okj0XRIN7sq#)&w2&! zI5hJ{Dqz9-Ke>!LTlo!b+8l$pZV6u;%0twxt11z?>`N=3A)rz0!WAK*(nsD_R#~&9 zMUh~A-q~?!D}o;7d$}4`Wy$oYUjM1A?6iVDo8pnK%9F==FM+SGkimWC-(VE{)5}!^ z{Y7{5{@u+r9l5^!uT9|=>XcvLD z*H3UTLg)Mc-pl2xsQk*TJW0ws&cIBX81F@#kucN#in)OSY?2J8KZpu=;YME7GH2U1 z*tfCxEc&j1i>MLeNY%|v7~cNE3-6%N_geY_2J(wcOibDLVrjYAa7jsx`>zjIkU+eT zu2;7GDuNmR@k}7{O~$v*%JzQ~7(!fpaGdm4-%r9Rp8(%KxQwrh`&BQB1+Y+At?F(I z+qOkhmDg^Ci;2;@|~x{Z8Jg$TJ2v zUTY(Y4mS|DxprSyHx~8=G(D3a&_&A-btk@0`2jREUYdbcupoyU0%QCCsqD<7nmpSy z9^g|t7No896O7V=MJiUxA|N2>sGvftm5Kx?2&96tihu!GOBI&}6lGs68ltjFMD|4@ zi>yMB9Rh+u0a-*A4a-~)o#~nLojG%6_*0XY_kEw|x!3Fdf$0977Ag(FqVrP+A)LiF zm4<;(xXb2xG{w%1?ND=!kXh>UX&P>N6%{e0WNpOdCWPIPcz~7LPBAh^41tQ{T-&(pC5Iqm#$R=#=hUKu&CrOr%)m!AM~+ z<;!TVmlw6&r^h;fqS1O>Ip$`!pxZWu%Zav;o_w2^?QHIDSr#zas4FP(?d{#M{YPA} z7FRU(p0j%0xlYzEJ3p_fp&_BBlh5z!!dl62vm>e)Mn9WEB_J%k}l!a2CT4rl-T*!vazw zHfDG^-7}LC6|GMyPl4}3K!aDVVd$EvomiJ*K*nKgIYqjN)eamuE$V?4BdY!&Y*1I&_Gm!xNqcd`|~&T*SA zRk^IExMr~Zq?~4(^HT7_S*f(x;oJ zEcJp+4oh$)&Mpg+eUwjzGx~lLj&CnDpziH0JUiDr*#Z*8Pd(OINn|e{I`tgSDA&Rp z=um~k$IqH}Iw_Cw?i**mwclF)db60}nOs+^1?zapKHscbW7tl2bI`IH-%U3pCnX7* zIynQg-2)?Owo`VT2CkS6L-VpHujLxQn|&RHvnyA;kdF@!h3S5+@>%KP(elZ>nHZ8*t%NWc7nb9mjV-S}{9!mD|IInPfR za;sJeUgT{#7&rG~M~)*RNJ*VVw)tg% zFOJ*FjdhASwF3__56YLIS0g3GC~w2eYAnN*h0T&8WULLqCvvo7ouzK0EJ`YrB&E{?hYtuO6ce+v5$wR(zsk`I zqM$TL2C+TII>N#Cig|WRkqjYQF?vt^*ORftY?hZ6wSl%HAUMoC5sHYxAOB1|Z;RW3 zZ6|HBg4aqb{0Gh6dEna4CR%G-=Y2K6Z8J_S`J4bM#kl|uZ4AI_K2rayhYU1 z)kSuGMW$~gBVuC@|Mb(17pG|Z_LpzKyq-sYxd`YLmm2KTZn)U5(EhmK1zBZUS_m`! z+e?eqn)Ncwdfo0>3tgpGV;=Ru!GnX)2dzuFCq5~P66Gg`FENDzQoYz zVzhU!d`Vw8{y;C#;1~5-va#}2NMUbf)6g2ceSN1P0Vx>TG5lzvi(z)hpHbq^c(J&; zy>D*h(1zd06X#2>%)IC1Q51@9LC%9tv|%T zswWbhBBuL$KwKbG?iPxQikAntm)8O5v3D z)_pHr+7SOWH9MOMl?k@kogBtQdg_rxBR{`ldNA+rrbA;P|CG-gRy6vN%#9kg&4P5{ z9_Ue=H7)NeXlk}i6>`QI;lPXB>UJwjL~8=^@tNL2jnVcjM)7!h;3!~)XS*gany!kO z!SaH@2`E!{PuHvObnf^J5FRo`UA8onWir?5)y6O4sot&F@k{=5Z$ML+IHx@nCQAH~ z7ZzF3)@s4Q!At~1*F`bR5a-K`)11H?9g3 z7m|T?Kx?&>taG|mQCmleZ{9<&d+314gn1>*xbAY^z+@PcT6ZRM|0&aJA zH_`G+;&%fyC=>J$bJ5j0d}Lj=oK7aT1W!eRi{XPjCg4R|(2052xDLHz07i;$&fQyp zRQXp*)w@@9xWF6_KM)^f(i4HpqXv;W9#^G)a!eqw$4up}wpbmn2bjZu-O&z4NY7~? ztnN3B@XN}YQ2?y%V|k#cWLJzpTbaX$B``$x6^fE$WB$u)+c$|kkDXfvNKL&9-7tYu zV=+I(cB!P`eT#9^eBt)R4663IyUqFTbiitK7bi+^SgLNw?KjHpMfyf|jU@MM2H*Eb zwp_nb)c=@GNtVONW7awqOAzJ-qyJlcJQa8euXGROeuF^R(b(`PIHm4D{3&(CbBvGv zMRcS%uL$iIOoX!F5LGYAWfC%K|A=o8yf2$0U^eXZYu|2S76Vq=@R0ng*;ZWS zS$hZ;CwdCh)$QwT(Cs5co1vj!m5avI;6D;Cl!=_5=xe}0>6xxa+W@Pv2bPm?2?#7K zXmlY%2tEh;arDXlCqW*8e32x-cZXez-fCi)8AQ^%pk2YRUBep_&7AgStd>2o;p@gT zs9O`9AA}4vE2Bv0gtU<;%40|a9*~JM`4DyJw7LhL(6l)W)r9+jRRCrd&FV;`(#Q;9 z1F=EvY0WyBe00y^m#}l6Zcp<=dk{E^HLAaa3nR1h^o`0Frioy1B%}5D z`DXMrwwb;JtKn2zx_Nz)UOa4d4tkV8Q5bl7J~CeHOGE;dMgyL#{EXQ}7D1u>!DJ4B zWx=xk{@ZW+;Z0a=+nlHhd$>vjayXh*X8)#z)tX`1-YhF4a~RYsX7tr-3>1ug|dul|7nq||kUYBM!C`L(=! z#r?UmyC6} zR1ySxEC|yb??*T6{QIS%iiuwHZz(4phDcIT%tpv!yvYS&6RcSjb~^=!oU9{^ewbIl z{D3$%8rjYXw7G@es3X;2^h=jJg@E>wiI>Fy7==VMp5bAJ zXgcS|YG4*NUr+Q|Hm`0e>watQ%zpT09RlxEJ zv5kqY5f>Myo(%ZF0=xE~g9HUN{ly0qE@W`dGysCK1#G<0d-`duUA13C>Rd!0fb5Ov2&*#f!2jI*sGT=&RTL+ z5*TGocZW>NLk5b4%QaiBOM^CukPo;>3nKPl=D#Z6eUOQj z-G~`?HR3~wjaqSGiMG;)kVGBB*#6*E#iU(tH5`^oq&DuX$tUfpHj!#G-5BZwD;V~aS|dh2q%dXqFlf{?ttJc6^@vTfV_R?RS3Jx35<%8Bzs zP8*6yzpkdf{=3{pXaqtrtKK>}JFBT&_*#At!N`LLR^R<>E|ic4i-3{t@owlafo`dw zTOzS%&z`~5cvm$v&uNajzO!ShDC3=)|M+nuK&DmTTiKz}6m8*vBWZ}pKoaNf4oXif zeeRn5Arh)1?OASM3Xu1$3MS|HCxPVM_-|#e-s{kdFkDDIcI;S4bab?Pv%v-#Bn97V zNF|XV41!)Nz_DszCWm%((CBb?ENezvnOBIdG|ZxA5O20xB|$is6drEN+@#$?mYtxd z;V)`Pyk+!b`^$RRc{_FH7d!^C$17KOJQSJmqx}D;rhlMfsk!!?#Pfk>$a##=w)hw9 zy89YJnu7_b0$>Y~BOE92u9_5(mSur#gE{?-O07f3$8@BG@ay1XxWF?K6AFM5R5!55 zI)lR*w1>fU%0&_|vWU~XU;lY|Q?fYn88Jd^f+Ht!GGr0tbwuV&AX_B2;#drcwHnk4 zMCXMzm-%C78F2s9QECN@D9L};94g{!{0HICH0_?200v5qVs36uRN@4^i+-63!eCkd z_syJuzKOEsMi@(D&;vZPD6 zn{wclyL4nfp)f&LNSL*Nb~qI3jc7+9_|d1n`Q{rCP^Bk|r^A4S(k%5kubvnE~*KDQpk7?Uz&gx!1Otq115tRa5%ts5{xpoKs9tgjfk@dHVHF^ zq*q(K^l=n8(%<0{Qqij{TV8adEKOYx#9c`1cz%mhO_Bk^?sQlzR!s5^HcdOBYWMUL z_>ZTJiMpgydbH>hr06T`iB@k+rL9csCGC!7G9|ENO^DizvaCxefQ*ued-rSyeO@T! z6?!=#3|O@nG1K&L6G=|kcx196fnRO`nn^vt8jFL@`!J}UFLUaYu`iHg{Q$#}X2-y4 z$21@+ACX4|=N5L{^K9Gw#LIL&c5(93mX}|Dgvd+&+ksy}>l}DmNkkw2a(@5Hmr0@W g|N1u<7WVwg&@Y|&?qDYVpakWx!I1-*`)q>$1AJtw;s5{u diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 4cdf998..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.504862,0.494933,0.586700 -2048.000000,1.612068,1.638999,2.234193 -4096.000000,4.973824,5.077852,8.239625 -6144.000000,9.955157,10.071211,18.509209 -8192.000000,12.850615,13.077504,32.731594 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 6791bc10abd06fdea20ae6c1bb1f089acf40d7bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26649 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index 2e2c9f9..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,40.612865,40.147457,1.699963 -2048.000000,37.400574,37.740028,4.427035 -4096.000000,30.267904,30.043137,16.745203 -6144.000000,29.196800,28.625919,37.960255 -8192.000000,0.002048,0.001024,67.354622 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=bwd.png deleted file mode 100644 index a19372560bfd12124b05b114b76edf272c1c5bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28729 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

    &KI~aZlexTm0ayk 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 918f273..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.536712,0.555312,0.589842 -2048.000000,1.632353,1.616723,2.174691 -4096.000000,4.805317,4.841039,8.331352 -6144.000000,10.009770,10.014464,18.563822 -8192.000000,13.030985,13.155328,32.861183 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index b76c114574f97e3674595307174288fea2c92080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26290 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

    2JZSNqt|Rg!}`34GPWs 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

    v|pgv1$M0?=~?uhK|eZr3)Yyi9ZT^9e7fW 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 GJpVuM`H-~$ diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 57f22f2..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.708902,0.700407,1.044036 -2048.000000,2.740203,2.607936,4.228782 -4096.000000,9.416547,9.364795,17.520128 -6144.000000,13.611861,13.559636,36.651520 -8192.000000,19.022079,14.713515,65.922050 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 4e7beda060d6fdb72d1e1764d7b4927c687c8cbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26262 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 VG>RgQcf^o(?=;!L+;-x^e*vLNYBvA? diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 0175b1c..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.697885,0.691014,1.054027 -2048.000000,2.747819,2.552127,4.263107 -4096.000000,9.142271,9.166776,16.167019 -6144.000000,13.440000,14.201709,36.599297 -8192.000000,19.050240,14.466048,65.029411 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 7dc475900c37bd9a589c9efe7afeadfbd3baadf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26160 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 1967d60..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.602459,2.490644,0.344058 -2048.000000,7.456237,7.448722,1.120765 -4096.000000,6.392685,6.435547,4.236637 -6144.000000,9.776128,9.794902,9.237079 -8192.000000,1.684480,1.734144,16.682266 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 739c47c32761b383d35eef1de9703c12ad32bae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30039 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 k(IlT(z!9aWi(+XgTG7iH`|VE_OC diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index 2b30b05..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.853951,41.547775,1.411192 -2048.000000,40.596992,40.745472,2.399296 -4096.000000,37.636608,38.649857,8.613574 -6144.000000,32.667648,32.721409,18.973766 -8192.000000,25.736193,26.100735,33.609726 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 54e73f78e28ca3b8c89f109f50b87b384ad517fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29105 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 oYyVcyM?2AL)_;{X5v diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index b521e1f..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,50.859009,50.534401,1.410580 -2048.000000,51.761150,52.281345,2.357782 -4096.000000,48.677887,48.444416,8.476134 -6144.000000,53.513214,54.030334,18.859066 -8192.000000,36.483070,37.648384,33.277550 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=bwd.png deleted file mode 100644 index 50f6db41dbb42b2e412ab9f46b773a8e8a28bd86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27672 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 3f19aa9..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.723079,1.697655,0.342277 -2048.000000,4.616704,4.653780,1.125893 -4096.000000,5.810269,5.742592,4.256475 -6144.000000,12.641278,12.547072,9.258146 -8192.000000,6.558720,6.664533,16.576769 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 55f87c8688ae55ad5adddbd0ebb08f4ef1823d81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30245 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

    ~sWu2HRJIXKsIX^%LfN` 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 531e2be..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.520714,0.523802,0.344201 -2048.000000,0.815578,0.854716,1.119187 -4096.000000,2.947140,2.932112,4.329190 -6144.000000,5.419055,5.407166,9.223536 -8192.000000,9.406306,9.235140,16.996210 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 178974277f2352c2daa6fca37ec5fea8f29536b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28733 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%0DiPp1T=n3>IAXBwGyDuW)i}j5<)&mJ5D@yFI^> z^QQRznh1%>Z&Oj0NauTtAA`SBsc22g(~(>IOV=WYrkDO^Abxf5AR{N25Z?l@na!Fm zt0QP}yz}<%wZH-$lYwC_ZJpa;MeRutMRfAd0Li)N`>iXRc5RH#Nc0^8~$ll8{fkW3F?j9=SC+8;&I)d5=!+Rvy)iW@#wk z9M=^Gxoe~43-uh`|913LA>;A;4=?;%vTgiP2Ud?BJql;nihQsmaH~@ zBz*sV zc+m^K3gNe2p6`0p8N+GE%7aMe7CVxQ2q+POiS+1C4M-3gm`jb%77y2gCiNNWWCkyt|;V?O!DIo zq(CxJ5Jah<)qW!93j#He+jdR{Ia>k^$1HOnzmX3@&Ph6=YL%q7c#Fzo;udQMFUgGY zMrU}+%np3e&$HvE$dwBb%iTV@EjskV{Ha%oSqqvkEOK;jrq6EiUWJlyv72oCeMTCu8yk(c$`B+kns`BYpO9eC6cj=1-(} zzw`~L8rrp_UdDx0*TkoQ16?yXG4YVUg!XC2{4p`BvAx9LILM98o@erIXQ}bM`CD*UuJFmh<<3Kmq^ zo@*2x+|f7qL`z9=?6wv6ZB}WX?9k?Ns`SmDIgq^RAuPGjlv7a+7e=I9vA?*8To<{f>(G{8K=a4X?E2Y1D`MlWX<RrC|=pjM4dS7@C^*zbl7P+b#lhIv6DJ1 zti>E%LbsDw{v5wG=;E;gE`Q_3=y`7XllU(6W#=%tg0gb+n3r>@kTNS;2g5a5^7|<{ zl_izXNuz|&7NxG*_|+dT$n@Cw!)DS;vzDs#+56ef6nB*>vfDgQa+TA;7P?DeSKY8*lH@D1v z&;083dV_Th>7VIar~hU@#XEf#jr{ASA5VE~L&7gRj6*{9uY^@1AhHlyx_o$t#^(tM z8-1#C@4E_(#L_)o^0!JCR_KnqDRdi)bfS+fwAoKLucq)`shvxx7Y+>CcsZ_1WfnR9 zN8>Jy4I?rK((!^udwatBaf21}vsb9yU$2=Bg3X@QmU)(7+&sGbi}j}X`4C>0gX2oO z>JI;Cd3}<0@=SN`qJ}t~KEMjeNI*<&ksrbsp?wC(Ze;97#7}#5gXPU^xBOkK>d{TM z{A(n7n~J4sc#eqy_ucOM;B)xe>clHVRbjLL=V{@3@yy>jnxy0S7!HC(uxRa%Rog~& zZ621dlkO*AGCD?hTPD7XeI#Ce^{#NuM<4q2RHJmanXc?H5wOZ2;m6$5(@{rB$WWUm zi$`T?>3M9yeYLzyT|-BufZW03)a*(aZO!Yogfcq%A>BS}$?IS5d~;qM91>DkK^rk= z-|?lPi3Fk+A~U&$Q*(BmQLdImr?w?zZf~S4JDY`tQpEFpiQ!qtr^RYber1C4ZWOsP zyJmF3Y4Miv&s##fjb=eq&*2mhg7C?v>aQG}*e;BcS5|deSk>IX#C^Q{FETPRHMBSM z&|&)dSo8s(t7irlW4XZI&mC9a{sa%NrR2W+vL&83_^rgSBr`c=7+}*BDevqjaoOc6 z>CdrX&(WR#IQr>JrH=%+x71J{c25V<%3O3~74BK*@@c*C(80~9@*Oss!6*o-kr3&q z9GM~W!bkgS8?B6Z#D*4H>WhziuAEs7()^P5pI`Wad1ueLxq2ehv$wE<#Jz&#wmj91 z1-y`zrvLuXhro;f^W=@Ly#S5+Tm$Z8cFDx?`sCShrv)?fTrG}KV$uL7HqvHp;qaL6 zkG?52+)v6`u`6WTygf0UPWneQE~amH-7Exgrh(KQA_zK7oX8Cw4`+JRgX4!jVb>U= zi3Q?YLv#xEceK?G8CG2Jya@Iwre;ad7mw`ls;fPSRqxVljU$tiMnEvpE1&Fs%o63O z<9>7L?^_(otZcTz)FCDHa!+Pj#ubC!5f=qd`tU)dSlwU7lU}>)>-^1%pI-Wjn${2C zM4-Zi#JU`r986;J+g%ko8yHbZX^Ak}d+_bl2#3>o_;s2^Vp~2|^TfXOn<8H4J)DVn zwBX*HSAyu3TH6I7e*Bog5TxdN=;2Sa*huX+k?1w!d{^%sD(4zT%7u1?AFhaCr%pS0 zJ#EdSP5qhe&ZpZsQZt@RKC0Tr;&0y2W=h}0FEfLHo#M2=i%og`+mq;TF5npP`OY+7 z)x5q>t3h@+Yjtv>#h>B&^4+Mp@xa?;w}WT$R4m)1V^m}Rh?!|Z>yS-9dE)H%@ojER zH37D!w(;;#-9q{n7SVN<1L_4vH?2I1W5z02Igm}o4;jubDzxCE9WQ= z)ZYaW3dvXjF1s(l={Awm1ye*Wksb8*;0!kS z-5Og{Qoi(-&9r063+Y+99_StHX>8l%`VyY#fYZ$EtEc|VyoMT2?q!oTwBLJtBNl5y zFH2~g-5vg%wsMVVEWb!EFJhw!Rg9a+d?=p7YeKNIc&RBsEP!~9h@Cg~kf|hY?RCA> z*ts6QjvOz4#iXL-cm1_D@`g^?xQpsFlprl{g#WY$)y)wWRY3FE^*BMyD_Akh@q)2; z@}x;@-#nFzGL<)|+cWrdXfCQjqUznC>cf0|xoPY5G5^?t26O|CUaF<~Np?Zb3iZy` zw!o;enbrM6W2>{iV~8_ z%t%&96Ae--$w=u!_8ys)(J)#@okoRRl9dprt(?iKtaRceJK3_w{rYs>-~0FbKJLeT z|MC0vcwB$f#V<>hCav?8dssH})qvN;vqh=3x6fvN38+f)GEIiIe-PYtHr`Hd9M!0tX)0NbF_{ z69~MG=Tfk>(&_)2DTJ)++BNr{(kHh z17zHAcEj))Y7n(M0s+sAT zYA$d{2{nt?OlN7doKh5Y?Kqxxd~WyaGXVD}AEh$_xP+j(0AG{%^5q0jCKI0zvuDA6 z>_qFSn?>ym6pO7x3hkGrHf2&TPuqNZyS6e^E^lsubW272d_atY*YU>jijdfX(4#Dc z%3KD_591tuO-`w6rd3h~8k8T42v*%owlH9k*vP@*@R07^)vAXsLr}^knU>uoygdtm zS_EZex7vW?a@EaqyP|6+o$AutR_aWRoNn6F{31JJ>!Eq+U^8|(i-36*pW9Wo3Qc)Hm7u!C_+~Q|hyFJ=(tNxnJ6NXLcse zcEw5uEj+FKoN+>_R`6pui6k|Sk*Keu$QIIW*PlfZ=!Rqw#`x(VitV?|8`%1s#4%2&sKj zo@0w_$MWK-Na^)I%8NhwlkyYXJx4N5`z!QP$F#nPh?(dKT&S{;v)e?ak=nPhyu zC?-ArWuw0gW&g?#vPb8G$q-*prii=NPUajO7C*S@GXa|NUKq{;vV;y4I>HnHn;1a` z^M|P6%-^~~Fpjd6f=}=c6&Jz~4M}Ey(M(78=jVr2XWE=2a|qE5gyhf7wVlDHHQf&XNj*`uQYotcRt&lJAkb8 z8TtAx(nm;;s0%ZBx#`tmmHfTrcAD%&{=OL6Ilftod0|8GgMSHoj(uS%{GPD&+==r< z;f~#LpP{*F z+P#hDowuN3J{ny;Ureh=`hLIfM%ug3g}ZH<4VUvhU;McCi6>=}Cc*`81Jc#~ws)-F%?vdf!%GJG-$yQl?wl+^X=`kq;TNdE(5=r+5{1OCPcF zrtgfmqnOF(XM~B^O1$l@ii$rwz{T-k=&PE)`@xwFO6nECoi3Ul-qqO#AB5+xqjdsKb&-E36~O{v^TqVk9=JM*ocx zogW{(_8ARWHS5-4us_!Ksrq@IUAx5u@7K3ISy&|`-_r0ZqU_oF9MQFx*dT%}-#>xP1#WWV|wQRRK^Wpm$+j4iTS~#eDYhU2dXREUthF^K;?)doQ7!xF?g9Dsn z#=1OCbpwEGnP=H;G$=(*YHYY> z$8tx!;Mj^q*5UV7cbnVGvxgTw)4M9T*S;pn+9Mb_1#{DV5L=q&bS%8YG-9{E5)qgTN88*FmZp>UlMXM{?z zrxR+v6xQ!&X-FnfCwgzK_I$C_ z-UPi^O)<{d&+R3sqiF5In2qp>z@#x*?Z20?UpBeSg zp^;xPDJgx6{+DVCKNfnf9_MM3Ssn3yEJTsrQYq%4=ZS_SSJ!=K1+|ap9;w_5$H9(! zqIAc@a(z^AIEjiBoYxSBOjFtXs;c_7J;<;yzEb9`b^AAy(-W1V`iiPIjjwvmby~mX z$sfIS*W5@L>hm|z&>o5!<~>z&$+3De#J>-^s?XW|5o7MDQpPvq{etYxjjwz;q$u^l zi?O&*ht{BLCy+EWns_30P28(Jn#ACU!8WId7i#F1blrs2i_2tB`}kny!j?$hNvSKzq0rd=-Tx&7Jxw)8E1b^aB)%U++FY1;jplCBwM$$yxb zs*9<_7hUB-AEQ-HDA<_>?BSzT%QTzF?q+ioZdfhT28bsCbq_Y zNUhAAqVP9^8%?i|p8bQKP~jSWQsXn%IY#b!JymBu%&dou7y^-5)aR##A?3zgd~vjP z`1jAU*9Lv>Yol6i%tZ_11}tZny`q&x0(X~O5||(QYgxpFMZ-v@=^oE>+rZqnQnWvl zyyp`7KyPtQH&6W9N6gq&5AWtMqe{%qRyUV-9JzOD|h+J$+Y z*gX}3(Oe4swbnr;hMq^L@ItouGm^NCf@F;7?Qch)>TS(2bi=V8I z>rhlm;Jfd8sc~HRi0$IQryz}to0Od&U01^cBF?1$Lc3cNi;w)y$;g_=ZmryDLJYsq*yR5%pNEwIbhEl9`7(W(74K z3flRIo7R_5Rlj_?oavM}muT2^@%Qg3V@--F zk}>>87LTe}=*(_#{~rFfC)KOZMky|oC2Wo-YgO2a-RnT3~uquP8WTH)7D>0n$mn5L4+^(cQJ)KR;Xw=4$oX z7U>hrspO%=S6D2a%8Y;biH! zz80F;#?#|3b+XC~cu z5mM|4Y-6f-s1l(kb?F4=W{aI3SLFy)6WjQJH0I5;W}0Q!`wUekXT|rFivE2OSXge$ z0VxpFacO1$XvlcL#squs`@7i|uVgZ9r8Lwsx|0Qu{`~dg^6&n&b^J9#hCVNA$CHej zSR}V7#&))q^-O=Ny<>+p(k3_Epk*6D>N^iQ<@0j-z$(71(8dYAH6H~}6?g79bm&(= zFqxx=OUvKFqpUcgrl^dHB|E>KdKSf!nAne;!KWAdq6GogJKv4V5tGp+M)Jv-E_n>mD-3)))?W}9NF_!ubolp zztM$C2FIQIYMx_jO;{bl$Jiuo5_1%%FK`}Et}%21#W+AKQO8*s!3-sM)&#c>dy64~ z5>P(~D>=|D-*RpFz!glydHOGGNA5{L`OHyuQAdvLB)n%S2HCrCPRm>hILMNlk;7==yO5q`H$P!yf%ZI=62IgV!*X2 zBuB5_<+r?uV@qd{MqQ|e(o+X33^#qj;21{Ml{^c7;}LG5|#o&$O~dL|79FU zGwefg6@PfT_s-B=?3!qDR^uSvxc}W^(eNktGJ?Dglq2219pY=0KjSah8^0}JJz=@w zqcNZ~|AlTh42qHa$Nmqb>JKNym#>Dc$lpiy8RZP8f4BQ+VypNsrhBAa&<6b%0;S~6 zzCH~=_~d%q;Kz(yVZX95$Jo|g-ikbw(|(T1)|!k@PP#v_t~B}ch<`kYe;EDQo9*rG zfejAJ%gbv@x~lwdA4_ka{-t#bF^}N*6Vmnnjpr}J_1dK9DNu$4YaTR6NT>&=`GU$Y z64$V?eE?sQ7?yy|xKLu$ydt4J-T;yipaty(uEM~Dx64xV?2~<$<}uGUU={!oNNUw4 zr$7#J298~zC&eygZo?$nAucZ7E(_=kbnqllazNCifTvb^iiy0d)Y0L1mXxnqKmH^`)stW+mCV3)ee* z7i?`5_#jAewsCHr4u=YdR2yk0W|;f>&kwu-;gDnz=NUx&`k|o{Nyj6;6?$gl|1GCW zTzoqqA5X3|Pe3um-`Q^jGmPM25b!lrACEs4ErS=eK~1m4K;1prOe@F`(6{mL))|{& z_>reGBe;XpB}>y(4FI-e!ApcEZdpda>z8Z->O+;NRc`$QGt+=OI)vuCPh8a0K*AHq44NUM5ERQOYD03=Lt5}oSDrD;7)T}Wa zdGQ(w3U+Olix4MNqL3SkCr}ALnE}@Xn0oy97fnHBe5}45Bp35He#{5R?RKc3@9To`t4#~QGnLg5~`>U7Vpz3Pz&TPe8K z5tn(*Rn*kfLLs?O3Tw@_2&d5j%&-h!DNmRmgWNrGsAuSNP; zx{LRSas~L+QVzP<{3R@Bim==}wfoey*;UB+ z(Hc|rM}roO2i=W9@(ShLd7Kv<@q9v$Sge4_Iz-DT|U|%n|pH<0^?1zDd z2RleouqEa{Xkp!eS-JmmkD$5Y#scr9-z|{yZzR?BO~rd*(rbU;Qj!%~uD zkZtZia-YJfIC z+A%*kWQHatCbo-;ineF1*e&?w3~5k6n{fouvBt7)cWagzGkBhehr~?7w`c+%7hBv; zhuaAVZVtQ*(@)W5%fJ-K!Jii?X;2Pj)19!emsl8$-Z_+|P}#;{LXky<6L^FV81aCV z@<iCj?y{aNEH)fb;Qa4_4S%nBd<6273VLI;_3u-I^pk<1>L$$xWP`3=XxoGr^2gnhp#I za6pFTvY@A@r;Lvln5DairP3+ex>SI1O5DBxq5+|PBk&ZOf<8S{!yRw_V!_h!Cs=^>i{1vx<^z_lkl4p_dY{_s=7PIRV^kw;L?mNd)_!TkVrS+%X|GZ1bmU#FKi z_v$^d3?seyHL&C!Sl@1d#Rf#zyBwUH<$tmvsI0%ea}-8+qJM^zi0~jG;wgpAVR_4< z4x^Q+jx~5@oOw8Iox~UE0w9T|cyu)FSiKA@xV064wa((Faf`);f+gSrDGd#B#?%C` z(?QiJ$Q?z-)Gi$iYF{7@qbN~-a<16!3E8On2gYE{LxmVq+)mub0Wlg-g8L%3$Xnrk zm?`xbm#H5p6oRw@DqZZdbIEA&Li&@w!Fu%-T=l`=FhX;U(uP9^V9T$Cp3W2niabI6u&dYf-?sHR^VD-*P_ukfR2we=@l!ec4cRYw1E@_AEt`OmZCfEL0&=BQyb- zUnRaLWSE-AhX6S18vIc|^?WT_Cm{>BQV>htV9>{Sb-#`^>(?v9`Ai%933tf)LJ^1z z_8lpPCzlAJSs0xzdceYYd~w7cS&i^)@|G;mrxF1!0gbGI0lsxX`c(KBPU11-Tm=?3ak~LR3Bme za0Ug|e%lp)dd3hOv}^%(wG!s}5F|gm7>9~Lj9%jnn#`rj)QI^3%NK$R5UL44<~ZP@ zyZ}({DPEqprpVUKlj~$yg<+HtJ(GA_)?=*GdRlq1zavFYBmu6cuxqA$b+Ohx_3<>1 z-U$7z6s5`j5wOYR$^iFc?R=VqSQ&IVx}t{$zJ{=p(zmhcX$1f_Y>pf~nxsMjEGYzL zay~3Z8ki4Xl1}h+W5x`I5zN^T5J@*fN2vkrVF*}CDydIBj9aYbOyR!z;8=qUB!tJr zqwM1&k?;o~-6cRcTS;8s6Wfn?r-4~bBpkxn5L6P4@c8j#7YY%82`YORuCBplJ*w?q z7oKCaMd32w&p(OkmRh#G%MxDPjHX%8SmvjT%~`_ENDc#y4ci6cl{F9mzt-OBe?44m zgIrewqF^E@Ctzz<2_59uVRuA*glCW%<^8R{oAK5y4oLO$v3oLl;1DSLiCsfaPq}2MxNL@Q3Ev;y{&{gn$Nw;0}kHk5SU`h?qMm%S0OFPo$eL zp_rk+SDVJDxMNyW3^b>aKxGYg={G|5+tt_Cr-VXaz<7;Zz0x#w*ewC4;gyJ-qXk89 zfmB!gSQOjt)Phz15FRn*YzimRjo#Q2?h_30~2lw+2Ug>zB?DA;i3pgR?#tzeQ9l(9KzagCX4}FLITp1o6fwUVOxEF9XwD=ff8JUIj zKHMGj}A=8#DcuvM&? zvQUlVw6+?duLjRqg#%pTnjt~&F?zaF>Pvg^7|4UOp=>}!qz1ABzlIq;RS%h=mJAT| z_ak(?!L>~=%{tWL7eUDe&-KG@rd6vl!63v%8ix_PA#3@0 zn^S+CHs;DeONJmFRwzlMclXg5XVNape~OZ>hjya^`#sN!nN+Yt0Sx+)(_)f zAmKFzH}w2o{Ubf;1cl6Q{nFGxsABc%ueB3uNd8|g0TZV-?LX-TEK8>B;t3(_s!UGv=c z{l0Hzt(kvk{u;)!$4-uvu_Pz8A@T&%}f5C{ZUMp{A<0zvkHK#&$O(7-3W zzh+m#e}ayZYK}@a#*WVV_C^pneMehM8%Iks1KLkU_6}w?*4*rZ?9W+gO&uL=9bRy7 zSpDx8*lp}hIL65Lo`9QR+DfZCKp^<~h<`{0V)*I^KXD`=K_$VK{K7!%*8!6(^U+ogGsr6N`Ih+&L!1cZ9Ft9=rBy4qW=gD3VxP(w2IhYN`RlEMC8m6 z@DuwULQF_VXvc-+gZKscH%JQL+paz)NErB5fE@KD_?D0{8^VOR{39_$5`3Nd`TxK8 z|BDHmEn?5)9O&&`yf|FBxV+S_oGxOQ0`p(uum6aio}S?0L%;BFhnhfU$a>r1N)IM3 zZgm3=Sgv|ZsYuGKcgb8TiTaqRZIlPc$0&pNUs_vRyC=Y^_MV1BMKSX5jC)Zzzrpem zw7sk;1>YgoRQk!v;9PC$@y}Ys<{(n~e_?afscZXuw7GS=SVAvQ#(bv2lQ^ni>r~yq z1zwzahZurgFj2Tv4X-G1a1OR#s|e~~X+1lx%uz;s4fY>)!J7!ZUIGDI$k~3dKl&41 zlCxdz#GP5M#%X((X?(GlFMV8#ppr-V)`$x(5Es-~4Xst2I0|^p;`pQEePmD6%@DV?RnC26sH0zCf{?zn$c7)CUDcM>&jm#+&v!Gc=X^BgJQ)^c)zP^T zxh|a1!SC=5z8oa%GcyWZnhr%`J_8FY?4oWb@DPZn^RdC$7IrI9e+mh)02q zq}=b*gCxS=WBe#c--$5rgNKJO5)x8ZclVO_+AUl-?rVBKc-T%mXXDya(X*uDQ-Tv|gBhPY2zrIU-NKn4jteU9cY zbB>EdtG<$;tCTIbVSO8xNUn`CvjH9S|E*bIITa=O|B{?mUrp4eRIM* zP+_!gx`Iwq)!+sK8^iGyEjZ26@akl9{JRpmx3~Ar?JXuY_R0ne!w-vzA0&J!Yy(`j zi!ZTR61Ly-WwLs1oi7czx6-d~KB~c;{W+7Sn``Lq?C}Cdn`{j@XX%*?qIgOt|!#Pqcj_Bqm=$#LN#j_jF=~Z7uu~<0ubYTm&0Ymb56G5 zQ7Xk6?@M(=7+~ohV?AT&1$sgmj_JI?lZfe0pi#3vqj?}OOZ=@tUuYDGF7H#q{^6mo zN--CDoN{T&uWl$b@(tXE5z}XLbCXrA%%_Li{WF_pjY6fd92h|NaGKC_9RJKr+J;ZN z{n#8$K2cF4yiu{KsqgIVD{h@Y$Yy0_$=@P9dl%V7^<-Hu!1HBaUsvoGf|L8~@R?-a z1M$h}yn(pq{(1{7>$CnKzg#dwUbsL$fBsC*%KAAchu*`}Gg-))J?(`Pvfj_np33&)?TTxgKf#TL~9ulULH zOK8_*(CzNv%SUs_bVE%v!mj4fPINM)!RYSy@7H$?@bOtj#3dxGgOD@*(c9wUh`(iL zhlYo*q}a49#ll4OhraTT7pWir@Ki0)l1bsSnyR&-iGTK?|IEc4$x$ou8ehknYSzV) zZj*V>wyvHWty479E`qj$B_Q@d(?&E&Auy6^29)%iM6jeTr*7~P9lu0xWK$%W0v_d4ZCLQf==p7M zTE10xP24xWT7J7MD@})&GA;rS&@@z9LPBn^wOiYVwvdmM-n@B}K-$D&HP=Amv$(kE zQ6!D^15yfU_^|(`c54nI@Yp*p1ci`QtSps8a^0??&;2HCul?`Z`bMA4$jgV{@{c$3 z4>t3SW%W9PlKo{mIvg9-BqXr#f~}A!g+8%T34O`|+Zf;qPUk%>9q(JG1UAh#-C-oV zw@4@`DAO&TLNJk2Vx#^z#N@$msjsj*1j&Qihn0kOv%}$(8m|ou&?NY4&uQrSw*M|e zB^QTcel%#aLJdg%*~e#K`-X&I$fpXtdifIKv^BmoZIY2|HB&<=Xde(vVqv6F_b+V?W!F>^T(lC;-T?4}C*_{7mReJud{yTpbydu5RtO@!&260Qdi(PNM zfy|>74nmzLsWtI`j#~HT>f-*I?+Z=k;SzILpQ?w15L-8Ru|U>CL|?`zfph`V@UOd@ zWn3x#FV;CJ6da`f&XKRbCVG0O3}xCGric*CdkNJwYAQDY%$ED#C)cxy3L;WL(%2BC zTKnEg@S<%vNH+J6w0E{GY&X)9eaqgG%(0V3cW^u>M8ow{)$y$`a=5?v-;?2y-82J7 zH_JplR>|4n=e2?1xfMIQC6q-5q zmLFU6qAaM3E}mlPb z=N)m(#;S?4dH)@T%3C>@QD-^s*<|}EdQGfdp6~<7uRGt@<5mor9CK9LA2~v#Ts{MWY09!z#!Cla9^WtdQXtmh9jx`Sl zJQaIEZu#7XLZPMU)l3cF_1|TK?jlhXLOWxdW}{*M$D|48`~RC!)ak>374ROQyxA^y zU^;Z3XSAIKKbaeADGisM{M9Y@)zq;(WHkd7J5vh(;LumZeK7y&+SC73H(F*^FfHes zbBJlVa;FP*r}%hABm9A7;I73Bt+@1&cF{~XG$!#O(NfFxV$FNx`z+e%-i#)X>n|oRW|;K6j4X;O{N~b732pIAy=`qbB0RrS+@r=yv9? zo88v#-M6oB-Bz1I7WX${i9fXeDpq6bozd`Q=n97$HC{Pz8Ho+xOH|yn*vKv zPow5c2*N;p4x4_)>0IL4Sf}_DvAw*VS1|yNH5v9vBy-%ic9I;HVgq2Mm9~pqYuekk z+n1zhwjr@gM4#YFC=QUxlco05R6!CS`?WE%g<%gbyY0!xAZw@&^!h~84TWygLEGT` z-V3__9b@WybGK*S)c0c`Lc}8PUTG)`6uF~)OA!wW_S7XK^M4b8`=ZJ@OIxVYzxEAT zI7ZU(jdsJw$eSUX|L%0?moKSprNQ1tm%eMPGu4qIDY8ajWwhxAS|o3Nn~nVmJlnOb zvay+GCnemlT|ypA$Mr|oT#%Fa?<=gDGd`4`%Fw+zUQg??E;S5lM_ICE9&ORR6~aH- ztyRcULxn6a)6%y6_#sKpVf683PvpS>$HB?idd`T-@Bi%5hnLPl`ehp@)G8ocIj*5< zm)C;qduHZn9Ss?;{YMJail7l9G^^X~97K~m5eq7f8(01dl3i{YUgklqx?ay4{ncdt z_d-9l_QXuRy$*k!<{0I)*97bT+EB3O#l7bbI|y3}P{r9e_?i$<`zc>bu#kl;de-)g z6=WVKk_IpTf50Gp3^yoyC4jO#O>sUr|D}fU$J$z02{Ui6eWDvMB{UA<{e+FE;D^z( zyxyXY+i3IiDylK@|IL`vdkq!$i&5KW4#rCY0;8l5{&Pp_eVc<02kU?UHLZe>oBZ!e z`hOKne<7T~VUK>4a(4KKyj78LA=cK6icuecpX$ zeI8eElh4U^@152KR$qLGeM%A^6#U? ze}YH1*WxZuRl$-POo@DNuU?Mo(v!`-4bEVB?zEyD^E*ZwR@N9Oha99YL4a&(pl7z*>+@n>gzViY)m zmbNDMcZaK}K2xmA&H3oHyJ4bDW$yswrmiR2>7vF9vDZnHW{H}DmcCMRuU_iN{FlV>?Gjow75{xIvuDW0;n*4SWu8idnkwQ+U?T; zCbxx02T=@raU3vQXT~}$WTm`Z>hbR=WBHoep{sF-D@nkW=}jw`2J3Q* zw;73wRo4!S&Yv9^Z(Zy|gxc3uE^XgD`~Dp<%(6#lH@CHy`_q-+eFbyhw+Uvxmw*Q9 z+G}ue^9}0HYDx*V8qjKCpk-P{#O_R!`qVZu5E9o9a_Vg={vFM-6Ln;q3!`?h9Y?s~4YGXP02_ z@F*bpunc(s!w=5SdlnWl%E~ys?k-KP&j3ab!XX#e)1z%^X>r`2Pm5)QX{eQlsP%zO zt3O1|xISZ&d~%W=>2y(9gY5R7qLEUvPUdTBLl`6S~G6AbHDtYnv&GFfy!SudhC5vE*6P9!$Ae#X9fGvMZM94G z&SeG1uC@h9a+qM5OuV$s*=*IF|9oLPYes*0l$0aLcqmitc_B-mNQ0Mle((9nRuz;f4PV?`w;Onm&>eWhkMr~U-CfveMPwjyN-tjCDmU_KEQD~4m@7Nv@D ziofR4VK+~y>z97+s!;QWb-^pq@A!t9Et36-FYB?vr`;_z#L`ef=;-JUPfxqY#$tU@ z&?`)TLCq(NWZu2Qp{AxLX4BvqxXYDIWME)e|JoxfFV7$(9J{WFK7F$l0 z`M&Z;JDf6%Dz|`_q=?Sv$i!k`V3ctH!dI_W3`ov;Wl#p~*#@J_alXx=g$V8}QRuw( z*TzOSg>rcuF}4rj=4NpAsVYo9>wwq6MI~>JVw6siaPaZ-0a-rTnU3YN`eVB{ThChT zv(_JP*cC!3d^)Z)?d5H6&()_|72ea+L-hFZ*0?8zM5;E3gZ<*v9+ub`8MSMs99I;D z@;$q}<_~^nOVp&QO!kI+R(@R)rqjQ--X29>0g8#eC}#BW;}^hGJA-iToShk=(2f?i zXV1d^{x$9B=qS0oO;1lhGc#i6fG*Dp&k4KcY1_!N?GIUmlP%8NDA~#_x7855s5;Fw z@60Yz%SFePZBIx_x^&8Z6G?T~wOWQ`yE9dObG2Pc`NA=zw^#aSB-OyyMB(N{AsJAy z5X3y1PO8Fu;u)XK{JRWMPYi7A#y!F|C{*_=IQSw24{``6LH#zO+Xc=TpL`u^2X>=bxsLNz0P?h_bw>4V%3+=1mfrU zGg$4P$h=a(3hI(b;zB*!^{4SFYk1rTlb=B6to@Gf8*-DlTJ=#>O(g1^uE&o44g(@8 zE0*6R%PpEg`p&;09nARf-qiDpEf$w8<_*^_P{;lyN+DXM;6h{Tw7vn^e0z_MH`2#> zU8B}b7t)&4HU|O#qN^k_$dL2_ZJa3SEaZ+??!GizeNsWp-5ETnA9i< zn5zyKai4%P@$db9YC1z|JY3cAkXahhOu-@mBhuM*65FV)`8c>^bNGW0iQM|8ypDnQ zN8{*DI@OKm%VUiG(-c7>l@cDC>vT~oCtgJbM0t2?C71l^$TGo1Kiy#nXrM z8Ei=YHcxX*&3^Jx3>a3^^o(d8W4u)f%6df&|F&JLfp}3wQJmj#=C^Bnd_1YTjmbvZ z0jQDiWhYZuyvT4GzV*|yB8>;#CqF3=Aa@Zzdgq^)go2k8p3B2`&zK!J86Ly@yeDM=RB%r97fc^ut*U-HoV?}xmbLuTE;yE$t##fq~>Ppb9R!od~*E< zfjY}2Pg)(Wn*1{9Y@LHSS_3AF^*bJbW$XCwvgMT3C8Z9Q)p{GAxv$BD7vuQIMsqvv zR;Ivo%_Q`Et}sYHeLdg5+Po?z1&zD>#g)xI#(Qi=_7`!YL@LWF%e3U7z8+$^bw3;w(uiB&OlDCQPR^K4jOn{IE1{0-#e?68GcX6D3rWGy~tFvp7uJJtX z?Y`==KQ7G|TbWm7nG~XwqSrVLj=w&R`~%e_QWXd}V8*bz*kdVK?#pU}fU978;U$4i z<9ZM0akUh-ym3 z5|Rz7w(iu{Vm!kj6*d~^$del_N}h<9*3W%KE0`&t16?*`6=*TEKq#VMm6@xG( zPlef@Z(RPp%)4;4C=2;8?~ZTXO7)eeydkCo_AglKCAkTA;o6Tdru4AmrTKLCMd4mS z{#GE)m1stRl_w~;hiyYVM&rTpOh+K6L4e@Iz)~lGXOS-vUC|Qz%RZ<#{@j2km7m?A zh}>23k;kRIW>^sQ#xKkP>31pwgB-hmk_Qf!6iQMjCPL^&*%m1kh$=z^!Yl3igzq{? zTkeaVk%x98*|Jq9N~O<^jGJgItz>C-y0Y<-%+B)6$y$$|YO;Y%Vow!@?ox4ZJ0s|t zgW-%n?-PFR`rELOb2||4L7b3utBh=2(l^rf*(z7=!IZ?yKXckkF#9OPw$!S9*e$Hi zQ;qpt%Jc74SH@J+vUK?Oc9Z*UiI;)5C*H?W?77b{*2jNkkCxL3pM06VhtbzEgGKMf zWl^8?rxCS$H~8M>g;)!DiV3n=kHujhw>Hx+`l2ux4v-Y5#0}M2V7e(mA8;`M@Sl|D^%+;z~n1bmiB- z1B}7;d+S!VI);`iyw@J=Ps0G<9TAy4r~M!*@{b+8RYvS_=mpI~BK<2z09vOPU`w#0 zFvR#)zs7WnxP1FXv_nx7h2J6e(`b7ohuXTUk;O#musN)O*8>+w>-V>uE}Wkq8#(bV z;~=suJ>0dq`8r@8Yk^Ii6CYMrg0zHBhz>@{;>b6+(AC1lu$7HxpBSZtIcLYJeHH0k>16U$_;wR6KMk$ZL(*!9yVL*! z3;$7|&W&qXnR4)c ze28okv;RZoNN?AfcdA;*zl{C8o-CuQv*!HPEkts=czt?gL(qeuNCo%iHp|uF-~g0- zJ3avX8Rfo8to)2PJU-4={;oLdc|Ip0DQPsF|DjN2%Cd%apv@PB?T4B~*X4M@R{MT< zAz?jt8Uximpa0@8Uen=Ue_{)Q_AbeV#RBaK&6WgJu7=O+iCM`j4V>y@J?+>GV@~l7Tc>(F3j@f4`zJ&6j9@0OAo$hBz zweGh!dTVc)bmzCiQi0-&H;a4$v$L~<5Oe4V4_tAy-o!k7`qp;4xR&eFjvBj8lc}UD z2+2Sb6T71-$Qs0iLcd&3JBz24F88Jw2GQ+T)$d5&Idd+H%{a4$J?0e}ya{L|TU%$KS@; zTeg*qkFfQC_aJIL8pe1apAQF0bltjKXeg4ZDw8_Ezo{u2kTiM--eaB+02Py~E#QiI z?~*O{YVFtFBJg92=XHVd_un68dZK7X0x*e6H1-E+XbGclj%I=$?75%dl*i8pF(_f2 z;H?&avN=?n>nS4{jdUbqZ)^8gXsnrt?~Nyhq%D#jjAp&QJnW%SuQs1(4HENVkoyWL zvsq}dtc{`)N~o(7xVB&Ijn*nvm5``_H-*wLeo8diJ<%Cw|B%9+I6S(s>l#p_-Ia&p zUd+D#jG1}eaPBK#;6x!vCiEDk7xO=kk#SsH3GOI5(XaL@TbQ7 ze8#)GJ9Sb*!agx}_R*@@T}$e+`&)#zT0{KUjmWypBsr@!`%CQp96* z?NBWMK+y4g;9K}y4(spS&i94@A#k}^3Z5=EL`RUtpdkAZk@JI_;}PBS;8$P;2)BVM zdGNO&&ExnziS+pcIQ`c7MKVo(4Q-Cv9e(XxGllth?|E%JMdo%b3VPd3CjOTY>GpD0 zDd9P4!Jp;D##i=i^@+bqsSTD_mM;0EKmOryIg&{dr9#8$O{|SeL0oo@1pGZ4zYkQr zBX2(VV=8^KJr{3E%QxLe|-+v*>ke`AQs_*eI3WT&mv&6MMBW?AE3E3V%}w z2l1$|r7`N)UH;zJ8WWqYK*85GU0G(AEw~2M?JQBCJc~YnLIX$s{H=D}Noo(&X3IQO z{v&!R0)&Np#lu1xBsYtJtGulog5-NGGn9Yrmc;KSSYl=n1**&J17=ajkyOI5d~D#9!S)xAZ(OhU zO65*#wx^s|Z$4b_|3US>LE46cV7}BXmA3xJwv}&OIqmXeMdYTrC*FKl1%;sc8}o-k z6V8LRh@5o$TdUjU;PLBOHhuC+thN}C*d>q6e1}UZQ+TgsC;gm znKiI8iqQm}eQZ!@rAc2mz&8e4j;bh5uwAqkXBTSiVJ;Z@&iCDy7s`bLM13UxSjO%b z0d}h}+f}Q0K}r@y-}aMcfj?6@P;LHebE({wP~BF1+U z8-2%&E#)Rd78CX^b?x+Cxqqxim%&w4gQWv;<>jC3jPUkO*C*Y*kQ0^h7_9QnqCQG2`o_1E7qesldUxkHOa zmj36}u_}$*%k+UjHDx)yzp}R89U#P5Rkom`x4B z^bkmW;dI=?{2_d~Zv{&cdMf)%7Rkpk>*MQ_JqKp{;jg_~_46MO}l2cG@v$XCP4PasUG?=zTUV9i7d>Mok#6Kt&Nc zhsPmGNmfd)^wC-|S^q;ty05&gjO)88;Wz(A^0P+g&fe&Qvzdc2nCrb4J0F>j+h6K$ zbg#{X7r76FVLS5`Rp#q*8^QPl`HcOcsQ(1Z_wfRKyqib7SPhPSt>?IyOhZ4TuDF~h zNW*w;@NmcyJk+BfTiq|3-u${@k$7;5G)Q>*gn%$Q#qRkjGzym9)5LERd`;cPe?m}N z;}!oTB6xA@+pw?ee+1PKqL9x4I?apAl7%eKFYB&3ogKw$toZA)qs7P+**QHnZN>M$ zc4z)#l$Nh)5Vv#uXJSVcm6p=o_4c$L2~BR9SNtGyWNAIUjKCN24zUpzk!N-NjK6@D z2N$BTf3oH`u@;K*&wdYH-@~gkc|DN8sqZ&2p*7UK-a!U3H>d#0>Y3N46kA?(m<6A*U;{(4!l4=zHaPPKQfZ+Cu4&-YVl~B2+P0h zmC2H)yNE>1{d+Z8qw;Hb7Fy^r}4 zwsCn>NY4|UGRryyfc94@X^EW0x3He9^jdeo8S$I=Vi)qnAREt+MhlEsbw^kw1F=ZS zRD1vaOKt54l=3@%MkJR~G2b8sTm&9$7mgebZ86=9~4D(6LJ#`RX;AHXA=##?2KFzsp$K|PIuampK+684{C&VxYxr2PI)5@Eg8iG$Q z#IgdGkW?PChY=L~KSxHQfQV^#KIcqCLK1J3@&722E0>3a%oa@+KM|$`vJ2SpB@FwQ zZWmm~hbGfaHB2N|kti8z26&_!hxPY#M;~)0)?}V6mU%*i9RIeV;0wP5m|R9ycE$Vt znnvi;jvl;3o0wVgfe%8K9fOHIx0qx_Mn-=0!jXxcoxMo2b`QW4AmvD4MaB_3{NCu` z0t8ZKM0%q*1m=3^-zsB$z-L`zElhRBgCE$`TRhQ>eM+0u1oRw$CAwbeY5or2<;p)RcV6HYd)@bdv!YNb-jD<`p(lwLZYbBiehIPMZ{f0Tc+KX z=Z>kzw4kty;$EUe3_UaVFgn80o$T?Sa>)}Ch#snEa#h&$H$dB zIy-l-l}mNffSy_5b$ewQ6%7Pi4-bz7kkF3+0vT-)5x$`HxGtWUAjUDe87M2;5O3MO zqLrE*kT_jni=BYKMi}#Bt?=!rb zy{LnUbdG}O)o4m^?~V~!UTKMU@`R9J9P*AxDxoAXZ?DKmZa@o`mzQ@20KT*TE)M*7 zgzW4Gch?6qHUtEEPQ0j58Tm9cV#1MP87VUUi)g?|HZr<_H}*Xn+v-I(5tWrwpg}b< z5d>bUI}#;!mt-`TD(Fz4kcEs`k2W79dPc^D1G`{6s($co?~f0KOiFp5Jv|i^2$-3f zQ$gop;EoZNPXG6D+EZZ>k;C)zkqS_+@9G@;Jep?K(zp32E-uwIm0rO)bDmI8FSIr8 zE_BbWQM@$AO%>q!tU#q!>syo5x6r?#>(@vmRMKqF-BCIFZo z;g5m@rwrR5k3{}#nPZXhlkvZq74^HtrpcPHpv&5^$zgEi0!_*vaGAx&bMxKpBuS7u zr)?ELQw+UDyze}|@|bn>(0C8_M$@_8-=1Fry}k6><#iCwQaDG89%vo_A2cBm(QD8P z0X<4&T3T8ku#KMEuSx@3T=)7=%H~);zP`RboEI6Gn~tJ}(9(onM?-Dl+A69_0)c1& z73L@C9@od@VP`Inn?`K)qG+6Fk)qC;yAX{yrpxbb?@(6O*1G4L-FHz~0LOgO6G`Q| zSHA%faQsUEs1?JLCrb^HCXGKO6u3=>bDa0*eFO53^j4*UtbqwL$c2NL7G2_;RyyWO3d-%TVf=nI`7?@xt$< zIh(=7Q=5d9`8!nG#@?S!k_8`xB6OiAG;`75rWZ#894qVVZw3ts^_!a;>%V-qI!XYZM9&&MQqNd(KcJ1{*!LJY zuMX3H@SfJ#1&q>V3OgP&=apE zhDdMrBMaWITfI2l`IL)Hop^`Y*qI|YR788K#Paov+#e^j%Jgv^Qi}ZzPSIR~tu%On z%+Xe9JY)dqB#6p%&}`Ip0H*UE9?M5X+Sspyf!_7N1(h>*jCk@~6Bhq7cqu_lV8T{l zNq1Iee3PkgAXZC3Pvf850`?A*Y6+$1)ydLQFijrFm@0{gt^EZ{%KA5MCG6Nm;mhXxN|F^cK;v1Nai3=Qh68?%PMhy%_u5c0<5c&fxSd zzWL-^la2@es~-ys?n}{T+~|xF5V-QXDU2qM5rDZ5`Q@jwjm-3~T-Jb-DlIkk5Sl?GtFn7S>uTaS}wp zbNzINtOtF0HEFjH785|^&@_EhqP8PVrBzvxfloi zEd3piJ9mcRE9~?1D4%^yyuEW;VM=NbCeTa=iMJ%T?F7lu&MpfWF2_rC?{(2Vz;bcY z6ka+1t2nk?VNtt4`s4k3rH?Ubmeuf5h1yoI(~T$ci}hCs+E8^{dFDMjBal!sX{*qbZ>MATmdiZq5Y#zDgTqjUW>O;AjB=m}7wNR+V;Gl;}pjPi8nLN+O zi-Pdk>F3GjYhmiz-?XyYsvx9qfR{#s-aQyExz;@&2Dj2NaoqbY_=ba`GoM?yjm|el zF7d$n+S#?>>^1$)ReXHQ>VlEfcd+_Y0Ji2M0X66D%{^vgmmt-*ZPfWY?35#Vo8`>sB1Z0Tx%4RARL zOchq+1&@hkoON+-cLN%15&OvZO;TID0!(#@F2^e#N+C3-ZQ~N|&mE_Z7=4=8!+Y8H z9r{IgKlo<(0yS!t7qi)E-nSPsKYi;HEOj^WpGFpa@Y&Aue3#8}Oanu1ILl36{4=uB z!G15X!^@d!=J(^kiu>vJ&e%GSX=TPAr?JaZ)j}3W_J3ZM&Zr;wq3ctHOh6Cr3)q>| zCC8lZK|5Kxw_dg-P{yc>qjPFijhX;aPaOHQiiWovAVUadGJGVoQ!z7J{M0RBfR6W4 zkM_X>HPu*RQDD-G?`fqTnlHU-Tla+!vn32`+BE#mhs_UB75qyKSJ7^7`FTtss>1`i z<=;9oX6s1TGzc!oOPfy4m}jqQeSXgfcn`<-&;+j!aff`aY7p8(nuHNV)l z(u+L>Z$_ag3tE~o&&DCq|SS4}&3xb5L>ZS=GmA076ZzCK3b-%X4 zz^kcYw-e?|iICbB?VsOJ{q4T|5M%yrb(^_L;@X#!+7!^77|WF%&B3G;M83N_SdCRt zr60}=fMFVcO6mLZ^R?-t+0iX~${2)_wEDHFS$~|V?o`EeVSdZJYnlhkEI^Lv?K&m` z$oD}-MYjWnVWODccbFdvHB@6mR@o6>l+V-?J?8bh-t!+jO9q|T zG?;Ee1zsTT&dBG+19%q-+Q;EzMrb6g)<;qzbt;beOAK->V~W3sM3-OzFgtaHrV64g zc%@u6C^KK|2?3q?N0>wx7GejgkLC__E(3q!LMzRHJgkdC= z4UY-SV}OpX>wOzvqTToq9Pt`5UTNHK8K`ImSOX!?%K~Ir#H=DgAEnh~dUl9X8MP2h z1NvhM`H|I5p&`}4Kme>EinZ3-dGcv)L!K`Hy9gy>+!+8x=BQkpFuJMQnFE}c68wG6 zMMDD|9wiKf%#SEP5!(W&vpH41(z>^@xhbQdpdk8z9vaj7?HeuE@15)O4(zWpFbOU} zOYFr{wPrV7fL6bOBLg@J6s~f|F4P0M>x2`S``B9ceeWE8bR<-#Ic59z2*z9336?C{mMHT>v|)+5NSa)_Q~2 zEiHXlMT|s_PX&3<%E+yC<+NIrDWUU%=Q;1WpzR_Ac=io|N4?5yjA6zzCN@?^UcRO^ z@}J{vae&i+Lm>{0mf*;X@gv(Fs)HVygM-e4%MGye6m7eK-GqQ(aU5=wZ-sP|A4bBW z_)P*603hcf&;Juw6F=aiXu22Wu{1q9Cjv?co)E_B8!8dEI51`cN=i#7W+)W?R1{zw zZboM`)7eLNH%d{CMA7%_Wk?6$B!jxfF&?#WFA%bsb(#bKsy68ez(lyJfOX?+e_@1s zMEEsm3z#jmGzWeN57Eka9h|8xB;br!W9iFfGU)el~|9&{QCG^(EgzLu@u8FX_tW8>oHrlD0I((BEl{n*2^eTG6l18Cud z%$BJJ1kyV185IE#`zI-Rru;Q^FffrjgxVWA-hNs{bdIGSQsK&_bfgL$iNe^Q~P7I$C36la-(hKm<4z=#86B;+*Y(CI&(>0TJ>G5j;6QcFw`Sva=MQ z{vGezGMDHgM1%-2;z&*?QF7_^Ss*C4*4o?V4+;OtbOz$p&)}?Qzz6-~Kz-_C~;R+FoFF6}o#axYhnW(X7TXUAfp_(v zTNHlF&XUA_Bs_)V3rSB0n?$h;(Yjy#c6+Tq#sJce06Z}qaha$IkaqT!|4W`HUxm=TwSNaFzteshGKDrh)=MncGpgUE?7C^pTg z)fSxrn7{%7wZBDtW{<+I6QJFg`JV3BY4=Z=Qz7*x12iz)%P2HNE1!sQF;a+Dc$RY4 zJsC_DG2d17Q>c9!GD>?-Pbz$WRR)m&>s=9}IpX*|Hbg3#f-5Yn*N*IP%T}wVnHVB1 zkJu2akLA;OY|iB~((CsUG(kGaIY6v#eUMFy??j>gtUyQ<=+*)fkd4@LaM1Uq6vgqp z_KOwe(2<~wL+rIXU2){5Bdna<mlfOsow+{^0PcgfnWTizXB^YH$9z^?8&@d; zzra3}IEqAk&M9>j`54ux|0TQxH~^qAwP5YL%yM(u$_APqr_S8MEAZ$MKqZr0MECdf+T@6GII@1$uFGDYi1U}kmkMb zJwSLpj-|pEK6vSs@CCmt1 z58A+xICkw916M$rnW;5m6ckKeUHy2y?IJ>{oYU6ehzZ=5)FOlMmX>u304jfzwx#fz z{iX-1*N&{IX~D$PP-(uH7_hGfU2j`1e`TWzjXVT1Y^<8^NLU+{TV)BXhvim<^swZ{KY_QGH_xnmapTw{C{jubm7iy9ZhsTgmz1y$^YRRn_Wg9mT4jk@tkFK4mb^^@ z5}kFrS0MPDlmH?b1_1fwD;jX?V@GT?39MAvL|R^wo7?sY5`bf+?ow+ zm~a;VB3!(9l-;7N#8t$MI z3K}p#a9Sp5T!V0p1<8P3_cJx_>!2jqVO^2w`-_9u$KR>JZN0&5>0uI*$^L@u6v9)K zeKQT!i1HI61LEF(&SB)$>DIx#d-AsVgkQ7!5G}yvlZp`HXi8aG?!Nx52dB5!dV}@cpk^DliH2$-z|ARdkiw-SLDfaa?=Z<|@5E2p z*3uqQV6vwJUSt_LIdJUX4zjnm2lNpQ?Ki%NiVU}cv%73ixh!Lv&Q58acM+|d&i7DP zR`D=*;dIh6Fa#ZMjA&|y34Hk`8UB!%I6%(foe=^jm&|OJrqp^6JzOj-9dzmr@63D! zFm&L|+JWj1WoDq%I<_ZJf+M2gWE>AED6n7J+Lm>bkh}x4A5&b#qgDp_Q{}6eJLm)x zvkGcm>MSmnqm%;NUgQQ94NXHkQUJro#s*?wXvqBGN1Qdf$!q_Y67-rP?j5i3+sD5r zZ*Pr1r3c%4@*|uW#tM zcg`k^rhF{sC49OyQQ7d>`$LO|D>ziEr5DABU<_S-gBkdz+nwt}$=g9VzG8Pi_+nKh z?9m+^#+A3*TwXU9g)Jt)R1P5RlgY`Rkh`Tk)@GMAePGJd~QM0hye}c!Up5!ht9E z6;wfKeY@o@%xk!==P3zj570e(*55J=hr{ox^&jQr=dWyUrxbmQSv8K92HCa~)Fet814M4(?!ZHvBn`xXmmbFON+hKeAT zQH1Otq`RWYr}b;`yYakB#n^AL(AI_qsw*gb@x%mP3D9fS1*a9z#l*xA=L8<}S%v^l z2C%ja*<-uhfa5XgA}RZ=_w)0}HEyTo5GWm;*<1rJC}t1P(75#4AnaOodfxj3Y{53o zr=;!e?TC**_I|mi+;lUF`0zt{DPC2ly}KLWyIS32cW_*HbF!EMXnq&h*JIgI`10w( z$wnC<&yLmE88$UFF}?rx0Gts8hm+6y7&8<=4}+C03pl(VprXDn(Go<%eJtVPA|Q5i zfKsShng`1e1@%CCqCx{KvX0lK5w+*Zdq56AYHe#xZ~O=Yi3YDo3jcVrq?F?`g-J=F zCR_{HjXOE(lH7j9oS)f^G|Lq90J&7trdbjY4rZ02B#}j5S0NX$^nmqnAK%j?X*app zfqV_HyaZ!R}7x`2}#=%C!d*aDW@=>85^tOzM72Z5-MIB_iEewL%t>~^xhaNl4q z3xk;eiUi>?9i^S|qfHTyehW<1)H-q26ah|n92SsuCcY~V|_7-^i?mD{_m&0zd z((TkWa}c(89h|gKWQ}U%+WUJk_X}GG+Tiuw*p6j`ElCeXb%(-}jwx*7L#7y(9=FZh zL|{U^ID@|hK;<^yHL9wgIus@F3araL=T-Q4d)Oi$zBDLp0 zjPoljWSJ;b%?C0m2$>rT$mj6zO7sHRME0etK};DU3)sla%qP^eODxiG?s1OCc{ zT8$++O!Sf->~M7r)%)*G+mph#Cu4A7-Afz9pubsZazlnQY~+`5)?4v~^{lj^!v*iN z-|*jvG&=9+S0|Lxqy?{qP60oK9_4Nglz&oQM{`&Rq5`HFFesFRlZm!W8v4Lx>=dLn}BZ2nL z2b@8OQ!(H&o$6cA`sjkg6G5j8JlExKR&WKC#4(KjctN!SR1W4Ga8NXC`@v8Oz$yp# zQLPVN9%sJQUs>7f3@j(RbMFy$+n=>J3K_5hwLo2G#*z=*1%h}R5x0{v8*EHWq&5&? zz+N>2hksWJ*7dp!1gj)6191^)Dm6?m0R59=(8@SGh3j$~4<;4XEVyo@fx`?``1tq$ z$k;kGwy4D<-g~A23$*kT!$<3Fk@#W()fU{>#}SY8=Z_|eFcp)gEo-zIaW%iVy10A+ z0coTi@t8M>*Mbxb^vtKydhP|#d`sMOtif3wX0NoUeLE+oHLy>ntqb30qx~P1eR(|8 z|GV~R( zK|oglO zwiy-9)LgZ#ML#}uy=9&Tv<)dtgnUiJ-jB$=DHgf?gM&ZPK7c2?x$?P5`VFaAuiLxD zJl^_nM(u_DwgcD#vOQJKqcpUb73Sjpe-8>3`JAk{F=Gv-5vWZEC!^!-~ zi64QR6r3A1EW8GGx%D;fx3yi9l0P+ZkUV7lmhSG@cf%{yIW2qC3`CEKK&=-*=uT@7H#+;7v_FJ^DffxAU=W z(QOF83s4;~r2iiAcd|Z99^$mPW9=(z#Gjf^{@B=g5Z7}SEO??5ERr+Ht|Ns<11Ynn z*O^f>HpS^f4x`GLyjq2=1vq_!m4=ozqbIRCW8Sij=#qUN;sd^NYKVmVZSR?b^GihN z0l3$OUh|8a8J3dFGM#@x{PFUbyBm#ft2CZ(eXnmuFS4idyw=|}OTh&IxCaCV7B)3C zb)9+3Cp-&GrfKGz;!RPn_1}iBS-aM?zj^y#hm*i0grnb`KAu?~MsLz7JAn_ZheMIO*!E zm~tM+t=_yO+g+u~y)R}w9jbzp%fu__QenT>+>sc!E*HzH|Jl=ZDq~Q_!aWGZh#az!(Fm5~WdSt8zy5`aFHF~RL1kgU8`gT!T{M|Tr2s}YWUhcVc;Jj8^7o|G> z@5Q(`?{I=6G`-dN1;yeaqhX7JEsM-Gp{F-q7TP_+8+tXZBd&ID*bH~~tTPo4{QcKC zF9Q|V`He3Xr?1|ZH;Fwa{-AOgwndA|VztUi`usihFX`HBJYYrW>A(NJ6mD_()4i5@ zX30oOE`fusA*P0)R#l}E7hL2Wes#it>>q*S^JRnPKV<4b=8g?P^$jg`&ZVg;o^Blz zH1dk8aiV#DxEU6< z7Kr)Up-hSxxHEonuUmL-pHbJRO`ksA8lr`1z4*$6zgN2sJXUiow$s#`w(&c+zTVmWhE_PJ-s0$sk5ZIRc#ACF+gl5h6bUS(}sT~qx<+Q?UV#DDVr_3ECZo5y7&v@!9+xj6SzsnP$0pr2d$#Z>;xlGQW z%w?|w00^GmyKXFb1lt7`q%=S2GR83s8yaD=pFm?Sxi2pn@+>^3`5WJXHXU=d8&&0k zkxGg?t@Z^0`|p`jcl~kII|98ZajSkutbWQ%0aQy!XzA|OwX%A6?MNX}+)+EKU)s$> zY&}8za1o6vXM>RTIaLM*1`kwSFC+a8yj`p>ccS9q#?^*%m1k}X?RJ^cz)Vzoag?Q{ zvdt{a>^s&P9ljsX#v)aC(ZYonOYIr?jj(R``1o)UsGA+C7wYTle@C)vU)GQN6tUG) z8G2xD?ovm9UW&Gk&X??Sr-2ma%%5)y=Yd(4%j>DeaMP~F3*9m#d*Gje8I3R3q!ZnJ z$r5d7onRgQ0<7C;kuw%Kf?>GXQKjzN<0O%oFFkY!7vNxT${Ue ztUD#2K0ei17Tt>VC<#Vs$HvCSD$;CrvjLs$Vo{&T@*MOR>yed!0XysO`FdEkB*yx{ zy0J=k|Cvd2TlAgVC_PPr0|PGa;^OAa-z?s;PJ$^dKkz;rzQI0yUBxQQ#(94zb+maO z^k?K0;0$3URh)s+PEH%Ra4Tn}9OPoK7V(hkmq;HCBH&`?yk)7!-p%!!vYEIDjF#rh z^C5-;sO%9aUEr&;A5GNP*Slb@aP8Xm$PqIS*+PH8<9Pj7)sBD@jS~Jt@zRBrl^I)?a{?e4T>AqKk+= z1=kK?3XK0Ma zkJpw9uG=RUTP!N($gBlfnt`ja1WzUbj}MhtFO57uq3%g82!e$_~w_>ZQsQ3qfb+ zK3;tyyfR#XJ1=(4@y(~c{md@kP6t___q$p?$y`)H;h{OJq>feSZwmUAQGC+p3{5e- zUen2Gpua!snX~CXfLulTzXQ1>w`gzu8_PH8;kGaujzU2B%aHEXFjBwX(9lqJlJT{j zM_?WN0vIrU?K5u-9V&)R42F18`(GSNTmZkszWZ`5k$nbF53X(W;Wz?jUqh#G=*hk! zgVM5nSGK)<8lQmWWf3XP%y(WUAC@+lf|W5FA8aQZiAb{4^o~U0yfD&rEj)aA$W}I$ zc;}F(G{)QRXbgUoWY^`78<+cD4-Q@n+5=I`0LiS$XJ3zev4L&6ogM)&E*)G**qaPC!&S9vu_xR@mr?jy|pF3mvi# zqG=xDyEUWENfKMO(1wd;Iz*mHK9c+%U_U~|SxjGRa=0`$YcWGu$0@}7jM#tE8uloE z`J&)F9cxNnm|!I$x@HK3>FL*J|DQk_gcJUyi>E`Ti_@|1pUzMmb8p&y_7$kX096$n z_C1=K9U4}38L#iTD?B?gT}c5*mvM-4cgH5BrFmo1-Uk(#b@mB}G z7XLkW`pj(`4l6q=^Sg{qL|#$ja!W?A6c9}vZ2#9MD0?s2Q#%40i@U1)_ueb<)sKEj zm&GEyH~VBR9<&nxf*O|q*6z75T~!)tm)N;p87eu;X63&j_hOan(Ni7St{M~ z7CtrH%)jrHoP$!6ud&k%_vTEf38g&}>?Yszl4Y#o3`fN)P4hO{He~Kyy53x5(ISPa z2Dd1W)9!T{&pD0f!kKs1haOJ|3}{Qnih(cBjTLV!li6!!wF-sRnzwY)tfM62N=nKm z&y=yi^O&h2UQSSfCI&B6)n;y!x*HjpZrK>KwSsPLU)*3fZ#m3-g|O*%KQmM@?Tu8% zN4`9>|$>Avl=M zF7?R09<)O3HgY-=#-+f(d1O79FpsAbqB*f1we_)KiUly%pAH3dP=9;4<&QYa+sF83 zZsWffYJD?ia&q)}x43Wpd|O(FEq!SCYI||1DeKp-h;C2zX444~l`=EKCqZfg#fh=@ zTj^2ii{V5X98n7Yny6TnJN|^}^t0kQC+x3#YHD1&Ly3{y6C=gh&f|j}6AdiIs?x}N zLl;0Bl;w^#>O#zYYM3HM9B&{BdTP^)^U8ONdlSS*Rd%34p|t^9252VN=`4F@@!1+T z3c|!s;6O@@N8Qrq0=}V)=b0)X%gSQ;?UT(+Ouh?c*%e1#>K#-(yXh@ID3IgW;~ ziqi^`-;s~lVfol`;FLRZl!8X+Js=a=IL8FYp(@%3-CG-Y=MZJ1_M$~rU)HF4QS-*$ zJfI4f)V+d%no({)t6;FbG}SQUx!OWWxe7C0iK5(v%~!A5id9usK8W0<9sdxRkURQ` z6&JU=FhIz#$u%HYi8sP7GgGmhJ>2I!<-_{&Xs2Oc9m~C}8)S$yK7T6!{W{FK1qIC~ zS9S2Wy+6BE@88|#_I;vwJT z=U`GNeP(%S>4V#L@L}}xyA;cGIGQb=Y}*x2kv{m=OqTa(UUQ2zo@I$oleBLNlNHsS zlS6lIdY}s03xz?0#~p$%zz@iPY@JAEb0$ZdJSIn~jDaXXEY6?o%ykI$ieFYRt&8hH zv&fyhRG|usS*z3RAF>9QH%o@xFV@=7c0Hgi7Zw8{D)l2sDuN)?)hC|SvEa)j)n&e@ zauA%sn79)bQE}P_&o;B~(`TB*xHezv#q4fb*gB^2y8{}eQ;ZH__nqy%(9la!QKE2g zm&9ttLaTR$ZJFeJBHf%<##>x zj!(E9&}-s%>H7ARY_fd&_U!>!R5Zt$r#rE@8cJ~W96|?4II?POr6yGv2tyHogZM6rYhwLy{5%wYax1h)4v?+DvDCpigvwFS9i;{l0L? zk{MQlmn4{vFeu6{4>K!$Ds|cEOZ*&kT^ag6B0@vAW6>a3!nPwJ14TF2-G&!nE7oGh zKY3ze?x#v|cOUh29RE5}cioh7=-|QX91lgb>gg#oSJ&0xOaSbUbG8CX102>_VtGlY zM>Mvuys4}_lG&|2h{a0N)VwD);|2dy^IQx+`tQ+wk(;kyyh!0J5)p|MPau1?+x~(@ zM#bhIs-=-R=A1B;O{+C6SiARbL1pDVu(&Y44z?AYb`u#H9)A1vtD@E?wBtfWih81y ztr{99pg7>KWS;k;+HCCFz5HmWzeSb2Y)GtuB}^TmZ(0Y>)m{JaTHTp4gQ|9B4FOBQ zbUy$aZ1B496T^HK+dVOL_38}D$V?oO4OhX3kS#FT^L16vQP2)aCF(^VtIu*J&ktKj zvEK4RWx=h}hz7#jp-XJ9eVYJuL8cwsJ_;p@M$&0j%u?IZb8$6}$oX z#EmZs_v&pGwA$WQLRuRduPk@&fe#p0%hL4Gee9HY{sot4gt3 zp&S)S71G3cPtV0-Vr9s(j2;@?#spjD=WD?NpJ18qgC==(u_m!egXlT$;UOd<@(I*? zXjLLR1t;-;nyi-Eu;KdZoqh|c)Bw~@aKN2yMR$zZ*Kgi@f;Iz<@BwIRIzaO#CMIFt zM^h~JUzsJ)KRg@{y{IHoNjgQp&vJjPCJJ3wb6;Nwu7&6e=uImCou_0JCRhh7qkieUP<5$RZ-X+yVcAI_G@hd(wu=VqX22c|!{s zhvr2GWGv9O8xxY%@)tQM23Bs9;7m|g<#GLTs@4&rYH$Zzrf{g9GV1=p`ZaWqJ zfX!~dYwZBA`TdfUlhbf1UR#@_C()?B2WGbAqGsqEK74l|A6rz={i{GbgI%XJW>m|u zKI=0`Uub;U47Zr)zurdhT4n6MK7jdjZmT73Qp$~1P>8BwfC3=IRPTN!YI}1 z5}2gZIcT=o-YZ5rdrvH(3{`7Qx6;w^13_a;ax42B>;fwAF$Cj;3ggXLZod^Mt&mAx z^$iV`Yl$jHm8!b++{XuzcdXqU2Qo$n>wUdrA*Os!0`DOf`*|cVI9Q2d0|Cm<`hMrH z-d-n=VFh{Ry$vjZ0;7DNTx+WRc{f*A`D4e9^>CmOG+>WdW^6b7Y&KAAq>DXAdTPGH zh~jM#`$d4rWdi_as-+%MYt~TFbID^pfYU37nlECMmE&AX(B*LuU22?YZ9~fQher2< za-lODB7CX@#5L<74c!KqYU$S+g_T_tyiMuL-bT+pB}Aqj)sHq=KW|IJw6f!1Uy;Q8 z`uklt*~qYDm;^ivA1-$*30{yuY;TMpp4T%aP)O)CI6Q%Z497YnFh~fR84o%; zduQVu7(=nx7RDRcl%JO)gByW44!fFO%wv%5yys4XJl#uB8mx@mvA44$l^s95$ZVW@ z{~UyxKl&+WYN(#qokLI8$C_tM*L({6%9O=zADfu?@#|L+OcBQLUP5R)J2o^6qfnZ@ zlOxMPP-mZtl8p7mABf6>?$i!Txp7u+K~1`I>sE6`r+^C%J2Y55xHX9|hvaq)F#yF_ z)Fr0r95EUZe+!wVvGHx>BU34491iIVd%Or|L3}k(BlyaOXznxMbzgP!Bxp%Q@)fk~ zCgywdh%SOAeyyzRO+vnqrPjDkBlDv%Th6r2CQKa&1LSIBbG^Lm`Yyf$h*_MD9iXqr z;75g+nUVT3Cme_%PAB-js;dNrRClOCUYOt4U{~8LGYt3DoE$zxT&sKb1XL!p1wz+} zB+DXjXbvLcA?bYz5R#ldXO8Q$SeE30c~+Y9=FXj#bxOM$%PD@>5vx&faOumfGBUx8 zQY;&@aj~PqnCH`)8k2;0N!AXqM_^`(kB@hm;*M|R@c!e8Am!&LEH{S?2YQ7p zIE%nsA~@4_bR4v?p+-QHw6ruR#}pM674Vcs40{2v0HAK106uCTmGkzJ000fqQc@JwI&?JwES6^&E#$@x1c`bv zbGMF;{djvSw(UT&|GhjaH8pkPhpe3PcAF(jF#iYqwT0`E38;^;4?KobmiSQGC@4La zTL#B1f5C;@)07|E+-&8~W2!jT4nI2?Gd0C=#`W>5viq`&i9_P)!GxdnOon%K9It+p zMNR;=`~Gb1>e{QLGpl)pmb<_8$oeI_@7}s)MT!Zi`#?TwAHHxP&8~P^Ykx~2lH|^| zz-2P0yfC%)9_b_)+01T>b{dqoP`c(6k{zrG{{6QvQ8SN`&tdn*Kf z{IYrwk)Z(5EC@pR@d$|);9j=(tOYAh+?6r?Zp1v3kOrF=7@iW`XNGgW#?~Fk>_K3a zMG$sMV3#6(56_O<9ij~B(Q#k2dgb6RAw-i6rgq+AlI39}pY?(}zAe|52SHI2g?_Aq?d(BGNl6<&psx!WXucvSg67Q+ z0r5FeUtAJID8Lw44b1A<109NxHyWrtozh;l!Csn0n-vtHc)WI$dG^_iN{{_NGqMHfoz~UDw%Kod+$jC^$Sa5v8NJ5Gl8X7_9tnEDnrH6ml zRbf)=0W@H1sGeU=e0>tUl?!ir%xF4Sk)qx;K8mu3E>W5MlBpB(-A|~qVIKV}0K-gk z&Zm)fPlS9dyl^mNW!oBp!f@LlPUL$q5e|@3Ppg53baH&13Yn%?A>>e2d`L8eVV`1KS zhv=y)dN4!-zz{TvckbVxT>zbY2O0;c=Z{f=G43c+JnB@R6^deu;mKXdp~R&RV2z_` zF*FGQN*9%sSVlH)zKhaZ(cPRs*Vz{g->lH1V-1V!{j z-0^TAW(G_}y}6?n=mvpDZP9_`OmrppH0DO3Pab?TZ<8F<3}Q0chRT&>%vcwt;%pBf z93-ODW!dBm?ffhnVW1a6LOrtR8o z*}}Ln^(bTl1(^S=I8p~ZY+Dk&MWr}9+|s88VW@~lr#bOcQc_N?A`6Gin*&Bhpnzlu zz$*gerpp1d9LIN_U`J#*RnBT#n9UU4(l0PDa8ea)i6Y^fIc$(6WE<0a{5s7mPeMYi z-QINy9cdbX^B>WuioPGT&dDnJN+R^b*g}#T(#z+3Uti7?7kTms~(A zPBJxsMl^AWK$*HoJVyXU)BCXk=qr|kCg*k9n`gOPl8QNh8PC)_{RL7ZJEftaf#JZY zalrf34|8BiUxwKkSJGvH$^BZ(3fMPye6a-_^mRtZa=rD$uZ~7GGCJ O`Foe1HhqWH<$nXTb0!P` diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index d125447..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.647896,0.517666,0.341431 -2048.000000,0.804695,0.814930,1.122615 -4096.000000,2.859736,2.862675,4.369193 -6144.000000,5.633426,5.611075,9.307389 -8192.000000,9.312256,9.455694,15.958285 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index d97488f5c5665c2e2a74ece71f64840ffd9c3707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27628 zcmeFZWmMJc+cmlXkr1RyN)ZH6N$C;==@5}lMOwNWX%G-l0cjOMI;6WBM5MdByWeZ^ zf6jTIXN>dVe0o2ZsZxM3(c2?$=cIGCpZ#%rTu{E)@;AG)rVSjkr*v`(% zmYFBgmB{!S? zxXRr9v0mx<;h|VCrqsP*cj3h~se|sd4aF&wHOwvYlp%5kD)ZM1qKD(dH4{Ahi7o@#!Eyc2BUoZ zZ9&1Y6%N>^ITk7*mrrNMyPDem48({{(Sx;NlwC5W+qY|HOp(8r7n6`6qM_M1qH+|+ z_Bxze$+LX�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 PQ`9D_tsD3Z*U*0e+0Y7Q diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 883ccd2..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.860796,0.832957,0.350747 -2048.000000,1.870602,1.900544,1.138429 -4096.000000,4.201408,4.197858,4.254879 -6144.000000,7.111424,7.113984,9.273764 -8192.000000,6.915840,6.910720,16.820019 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 08256c1151d593a2e89dae474c557e51f023b3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27610 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

    9dYY6)f{+md?1st4JqpYNunp?`=oU7a8v6;@J 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

    ;t1$K%wiu0VYF%N1n&v8*+#gbej#77(?HVU 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%0A<=P^wLjuuPee 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�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�|OQ-S6>;mm^ytTnP24* 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 EFAJJ=nE(I) diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index ca61ee6..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,39.700096,40.035278,1.382476 -2048.000000,40.352768,40.001534,2.420520 -4096.000000,38.114815,37.777920,8.479310 -6144.000000,35.771393,35.728897,18.966349 -8192.000000,30.152704,31.441919,33.163776 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=bwd.png deleted file mode 100644 index e73ca30a59e40ed9b81410d7d9534be03ad8649c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26972 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 U`)&M5N2FhWG25HG+xF6b0VQQ&6aWAK diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index a721dc0..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.519706,0.541197,0.349492 -2048.000000,0.785792,0.792366,1.128300 -4096.000000,2.982607,2.973717,4.243594 -6144.000000,5.667371,5.605760,9.169615 -8192.000000,9.369600,9.438426,16.558758 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index b66400e0f333ba827a5339649088443777971f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27472 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 QbSu&cHLatmhfQw$4{?bcp8x;= diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 05336c7..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.016448,2.718542,1.108554 -2048.000000,4.776374,4.713472,4.471820 -4096.000000,1.587200,1.765888,16.994169 -6144.000000,0.004096,0.003072,39.430237 -8192.000000,0.609280,0.546816,70.395363 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index dfd42567ca298b20285f68c366014bc0e1c52ba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25390 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 DkgK}( diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index e1eb741..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.815368,0.806767,1.081670 -2048.000000,2.774706,2.834364,4.351111 -4096.000000,9.429071,9.525248,16.589849 -6144.000000,14.187520,15.814313,36.553886 -8192.000000,18.838186,16.232790,69.380447 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=128-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 6e8ee099e2c93e5e3a22b0762cf53513eaf6ba25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26561 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 C`tc9| diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index b5fa6f8..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.791671,0.786922,1.106653 -2048.000000,2.779336,2.588974,4.389463 -4096.000000,8.780406,9.031168,16.431162 -6144.000000,14.875134,14.510079,38.387711 -8192.000000,19.375788,15.981910,70.879906 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 76e6b38046df9f423b6b16cc9e77c25788ab5cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26520 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 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 97ed856..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.767275,0.813129,1.086443 -2048.000000,2.711290,2.778112,4.553719 -4096.000000,9.293532,9.213781,17.360691 -6144.000000,14.882474,13.861888,36.494415 -8192.000000,18.230272,18.602325,70.261757 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 3f03d2c5793a3175e94c114c881befd166e96bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26671 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 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 5f71510..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.773839,0.778123,1.134479 -2048.000000,2.807117,2.708676,4.576355 -4096.000000,9.447424,9.421824,17.078535 -6144.000000,13.849427,14.191958,39.379471 -8192.000000,19.350868,14.856534,70.892700 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 9c0a328bf075605e663e9c1b7eed8357af6fccc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26393 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 GT>LjZrN7(& diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index c090e0a..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.446932,1.361579,1.164321 -2048.000000,3.849088,4.349473,4.559613 -4096.000000,6.429440,6.547456,16.471294 -6144.000000,3.458048,3.225600,37.546127 -8192.000000,0.003072,0.722944,69.769539 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index ad269ce4f0b168e096f59fbfc9b38bcc8cc3eaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25227 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 u6_Rb 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 LL+$JX7Qz1kmoz4} diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 83f6b00..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,4.057088,4.245180,0.624358 -2048.000000,4.851318,4.914761,2.331070 -4096.000000,6.615040,6.592768,8.467351 -6144.000000,0.002048,0.004096,19.303846 -8192.000000,0.003072,0.004096,33.620193 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index f4680528993897f0ad7518d4f5b82e68951a2ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25736 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�y%Ss9n%^IT;Z%jg?eEqsTmllwFq?eRnNIKG zItyk23ut_oo$AZ)FfSS{Hjr}LR!2K=^E$_Iw0na5&4qX31A!?*3y℘}7cZ2f1z? z_?@`c{;w@nbLJayvDsPj%*>h{Z=6g@m1 zq02O@yU<-6*I}~i<=o!V>yfY1EooB~wlPJ_vi7{CpZY442_MAXij`mcFXLh4|nX?(IKsboep*~#WvIjosK^Z_J8O8 z#pW7PK(5yOQvWA`0mGvq<>e{r6v~%bzp<>e#6+(@FJ3UcjH@sbN+MFrHjgxf(u^M1 zuUr-sl;CSYNjiG{wEvgp^Kn1Z&LDg$9ZCvz*+chUo2Y4*u)z5Baw)qj4t0NYR#s1r z3YYzn6CnFiX~Qd8xQN%nhN5>z=1uycRLPZ$7d2kGhEVw!85w=~@&$GUF=I38wdZ?_ zixIrvYqfW@PmVv>6t_$A1tVbf<{zk+uzlw1TjjR*VBGuq-wqwnhz;aQT>OdYIzR%X zf%XPEjxb$-B!>V58As!|=tiNowoj(udiiH&&*f~3_fiv*f^wBjMa{o= zUDNY*AKp>>z}D1n-#Yh0rc*0iaoGCEqGUHH4x**>90HC78-WbfwM(rtUC9O-!0T7y zo;U0>R^i4TY*}7L8s3^2nKUimMN3yLt!{WQt*{~b;}`C85fw14Xfztu_nS4mhd$c# zaR`}Ym}m=VLv-Okw6r<^@|aC6-mvc4a)S*C4>*I0lc)97!av+2`K;vpd}92n)8J%S z!ad$~8r3|V%sI!Z-1kWES~cX5P^|QB%ct_Wz)FdL;`1(xB>Vz;e2N@i3O5WX?y2zW zJDl}q35hvp#^mngn7fgWYs9GYCRV9aJO%_Oop;SLd|#?t=Jz!II>;}D1G?=w{?+J<^gZz%3x;gO9VIvP7TUhO4-D$D? z_r?~TakC&2vCDVNLW@zxNuBDN%M^xtZ_B;@dQ|hVCtsQA6%{ZeDsz(Y!v)9u8`6ne z_9gv5nVs-ZTNK=7=_O*kD{zJi#?8Nvu3_GuKHa$!8&9yWM@jeMSntN`A8ED$O>z77 z)xG9^rp3$!Y7U^*4N) zJaCQ^AS+O{vA8%FI<8>LX_~g2j94wUsk8B$S&8730g{PqCe26G=jR<9LHm+wT5dO& z=h7}RGgoBe;4GfvSQS|3JF{|}?;Uw8r1w7Ezu?dOeIqq<^c=0NE>*MRpHr43I%UU8 z{MKuYzx7&#mInpt4u;ln6L$aT)cWG2qEPL(#pwnd{@n6yZ5#T1NGqgyB3eGfYc?Ld z(FF#{x=owd^|LP()1Sf-4Y$4T3qL|)a*ZPRUc2Usvef~t>q5z1>6pD8O>WHQGyTRN zobD}cjICI1`YO(1xU2T?`{wAvyLDsZwRgIUOytrjN|!cu$Ix!d@*dcKa3C?cORc6a zJyN9i9AvaOjh5p}&P{7TCAUeDOmc%}a9-Z9Im%_K1p#0{*fqvj#d5 ze7ChEsHD0h@$ht7Kyz`y5@6JhceqqpOhe)V^x#?;=P8utLRkat;2gqbdTryOzL(iz zVq)9o7Fw<376>{T?K{m}I?cRF*3JzTBnxKZ`)_9)$L-6{{hJC}>d)qIVgWAe;&Pq6 z6nqVEGlp6lqnSh8%#|BZ7YQ03@qa45>c{^Z6x8Dx9>Kn|SR3ySn#@DP!~|zRa|nnI zfJ)%gIJ9PNgx|O-yB3aE*u@qToPmW4$Hp5Buiv9NnssenU^}tcIHXS%{;4ZK>zlVi^$zuqI?_UHvY_{nYcymEnFvr}sGMYNQkkz7R z+MU(Ou#<_#P4_2&LI7R%fm=IH6J7!hjoUfz&MI=Wz2ZOj^E}00xWSg3JOZ;Z8Lm5) zhzvBg)!8#0j7~LZg~B0fB9qmfRCq-b=J%oLW`pl0H%N$5k?S6!Jr?yqZ>x%TveO!^ zTF>l-=vfyUpa{^lWMIov$IhJ%up+W>gda2K_HBfu$r->xc1xizONvZB(;hIluUd$4w@GPKsOFMDL1db=LR5^LCL*oa<^D-?bymr=F9 zVjYhuxe7L1U1)A1kbq_31H9GEOrTf1E&}cg=!6S zILU;K@g^!DD>|*Se?RCoZ&l3wNA~L#uy}LWFAaxpS{6r9?pm1AeJ6M+)6OzsZlfO# z-1i)KqYL6wIK*1A=<*!^XPy~q&uhqFvS!mX&yL$?Cr-kzBT;%H*Y&QYOs&u(2xu;% z&#VPQt!(fCBjAjd1t5+cG&{DsQloatg8}nv-q3rJeGVrA+9d+6>Y5e5JD_b?Ao$vr za4R}>j>Nzy1m|kdg zH1$_Cj-3~;z11F}kqHUrp0&sw4@r zPPAFyD>PRhKNiEl)Gbd@nC3T9AszAYqkS1YM^ji=gpOk$G1R`9$^{mblJ7ZSB@=c= z*uGdJUbNQwKdaGpk?_2msnnRWpFiztA|^GSJH<5bO@;x+?#Sq zV#HfQxV+u{L)D?EU1PHp``5u>Tkf!{mD7!sufbT&gKYw^i|`|SN@3=YJ*L_sl`eCWmUBM?lBV#|Xr};m!ReHv! zi(tQI%4;8t*YJWcy%fC-73UZz8t=Qi_aL;!pPf@)At$GQZqZ5<8c7Xv7!YNMpa-+F z5r#Dlek*v+&oA1p7E2Zba3JK0=F)~e7~d@l_Dw;f zL1syyy7Ww}tkx+WPs5m55DXTwLE`Qj^w{@~b*qX*S)W1?^s` zX#592Y`$5P)>Z$f5zdw~0gxSXW3+Q81*Su8bQvP!w+JzEPMBGl&OI|4{W(`Ha0eij z;{!`fvh1IMbBMz#FD=-)^`e!`ei zr&mAWcE<3jPczfhi)GEVgDrPC)U$;b#4p0$RRFU&G#--po9P+ZDZhD@QW0`uqEx^@)48+BC44uGz`Ma=WhUOS3) zl{&y@bb>p{#t0)|8)Rgns3lkVt*j)e6)SAE{+hLgv*KGo?z~bO0Mxz@OC%e&vjm}x zec|H8?PvhG>N>+nLiWF2UA+kyIHpmSeSNh-4Cb{Ev4rbjbV3>6tft9N_$eY7Mu;Z&o2F0z*ba=Ci3y~Bf~AG zg20Ua#=#yNtU4<=q{yhl*f1(N07AWqqd}A#w^bdii0@;aq5_^%M`2q|}ogk?PRcY<$B`4n-2j8;R8#v$_eTj@qRa3RXbGmi|P9{91fB0#Jli z=H}+QaEq`4!d51n{iHx-@i0K7(cnh+L3?5j+x^v!ZY0kpA-_G3B_%IUhbMIv@hln) zUYxVMmR$#b4C(DO0&WeFm=Q#62!mK_l;$8`qf8|nRg!G!#%XIJ=^N_ns}cnT(eGdz zMj9bu^nlJ)r*3w6=UjXI#Tpf*m|_#6%8g6-YW@CS)&Ny%7-!$a)_A`Vn(fzF^aJFd z`1}*NU#>8NN*CnQ?-3v2J0>#cix)3Q{wR5mrkSn+1{?2D4sYmHZV~vn_rSEn{>Wiu zGt5L-wJx6uEoq0>VBq zmlJ|!eF^B5si|q2P#exi%07U^O$xkIMP&R0LwPnQ;Q-w3_P*T78O-P?spZS9QC|6j z?x$;S|HuvS%*s(9@X5i%#b8vk29{{SsW=U6UTKv82g@xqrqZv5)dtd-$=NekZ`jc8!s)C_W^W48Nf(i zTyx-EQGvA(^gEQ_q?T-FG78dC5LYv_;P`!#m}6PCfFNZ6xFP2pW_c=yLjZ13f-blN z(-gB8Mg-K2nB=$DPj6l4t_Z>MAEh1)hTZJUBy4~&|9SRP?S-U6@#1<6mlh2uwNXQy3YaVy9C|AI|75g)*mGg_TI zfzLy|KMLIRX!rTm=AXxiq8A)(WekR&VNb<+?-a4`B@T|oi*#ahW4<{I)P%GE5ohi8 z?N^sl)xkTO!h`A9DO87^bx4&B*dtlXPUMGthfjD98&Efe$j+H@^k+C z{>Dc}U-L5-P#%~__)UcR`g%_c9c6FydQ_`;nM#V%UYK-X$z2M2oFx`7po3R`a)&o1 zj_@S^^XD3$_R;9m%_iM21$=>Pm0wB&#y{6D{<(KjdJRdL$o?U@M|{3;0P Nz~{_k_1@s9C+c)y%a=N`jxkFnXmx~{e6nscu8+kpyl()c)3I0ys+|EY|mA_9T# zjXczecX;eP`5Qfl@}Rz~(tdbWm$7kc*A=2rIRrusJ>4Q=gAtt@#s1UT;B zyJ=!?Z*3>Y$!YQ5U*NE^HRkN2TxWojT(g!@w?iNZ^-%xNeu!n5A`qsJo=Qq6JIAk$ zJGp;cxM@E zzo3^?Y)@p(uQBY5)reUVu)e<4nh?L^DN466H8$vxbmDFqXg862Qk^?$MB(=?0RAh* zG}Cs4?P@jRlSXgDoH6RbuB;GC(U;vZu<(!k1(^^@;{(YzPft#DxzKITWzg)a29Iw zWy2E_<&>2pX57X|SrOX4JQ*Gs7#O6eNO(q}TJ7G(EAJkR+HbB5d~bv1&@}BT*U*Ww z!$W7IuEaGpWVwTxIiE&#vo{*Xy=*lIkW`b0Ypjzvq<1&B+c=4diGB1ao=0=NNXf>exv2vEp#4z)p1>7`V&gqwmsKIi`L!M z6}Gv#`6#D>3(wZhuC=X=?cV{>;N<#xsK39ztWF6mfohj2#$?&{_V(d=#YRg@%S}A?#<;)9xrBt`JWlp)wr5+>M>7JFlIY>u&Mq$MS`g9^ z3Uagve)A!5cX#2Kn3%(p6CT6AByanFV%BOojZ39Hiwp<}d2@EWhesL)YB=-qWW~Q`6G6&JK`$6;4)U?5`zrUKf>aRG-j{_UC9s1q56jDYj_a zUmML-$r-^s;CJ0Mc@j$F@^m91A>re=CClBr&j!h!z1!N`YwGL!qE+D-4xfjGh4nK9 z2FP5S{Wp%St*tF7E!|gYWAG%5?giYx%gI^^XQ@S@Q3qnE*kV-bfZzSly0^ENCJaL5 z)EIv`IsAP(l9h<4?6urD#-Y4pg$R;$%#MkP2@UYVrf1O2&246FO^YHe5CVgQGGpx- zg{b?(U~*0)SZed3{C86g{)N_4k6d>b>)_5^wwlP*t6X`7oYvor{5IWP?hjVUdHpg^ zTO>=C^W~Ee3JD)9{A`XHomaVhq7YsxFgRrWNyauRcCKJ2M?C-Krs&WySG0-nIE>KhOPvT-*8G*qEmD zcwJrH*8zaV+zwNDG_T{O400`UQqrarso%YLCzbq~{5Hm&gH4YinyLpO=?c zvt0vMOIuq55-FzR_7WEl&;FnD>7mV^kJQa;CCE;CuTu$g^K3&0hsEx9HZy-9Zkn>y z3n?C$Tu)3)#G@BI{d@qsmy@XtPp|OMg7BMW_2#B^^Q}8~uEurDtDWz3iCw#TRd;`N z_<`jZg_V`n*L&)pH%K-Eh;Bu5>7grS$T{qKvul=K=gOEh?Muh6uCD&@;e$2OK@ccR6#R>Al+Rn}Z0)*V7V|~10sW%Px z{QUe17M3jpOrh7sx%=qzB+&%s7qOEwGmnRV8J5j`)!-QBqRgzJ2>TJ$)CPR{(Q!U>c5{T@cS}jD+;zX4YKGlP7 z@E}pj8rs@)NnYmyh>ujf<&%7l72`zbsN}P>u>k$E+JL2airpW>!{YRa8`} zHCA5$Znn2S7ri*Odlt#P;=ECHusBx6lUKQoqo=2bh~UtQh36%7a&mh6?}voGJ|o2W z#ULX3>(}|K3K?<<^?(RrqQ{FVb^@JAVoCVae4hYreX?@t5e3}mZg)V6+MIXYTMqU6#= zFfcGIj1wL|XMg$fW#}fhLY4~qdmo?SN*A6Nu@4wnS(n7zXpzn{_}tvwYDI5JA!J0X z&O#`8HV+P1SXi(t#ybJR9qJ?=T-Y;t)i5%4GV+s`JNYxoPWsb-^Ki>zv(?7&mTKwh z3nOljKRxjC-K@r(8@sOBEi59k!#--x2bC9rfrU4@KWgQa9UKyJrTuC6_wV0n*Y=kC zXEKsJrz2Ih%XATyB#?6#WgSI>+HLJIJTVVUZ@}{jSwYt6bPW|4Y;A8da&zAx43j;{ zP>Dv}Nz-_y(x*sF7Z-)}kpBLM{Ft?jZwiNTR+Y_d=H}+40KBVmuD$L&y!-sMs;IRA;bFe>K{R=>NzHt|wH0Naci@1l5tI;!}J#dc( z=ch+wc3mRm9%1k~xAUg1p#7q^zdts>qjU8h6t}yIXMCm*WKFYX8(yQw?dnlC#VGTArx&HcS5c`JabEf zipR?v`R|{yqN3vA;`gvP9Eyv4u7khko%?374Hfs6+2y!dd1)G-! z7m~aZA!lMy|A#y;)N8=fcA1OZ+3!!0!ZqrMZE6X>#c8I$2&rxdcsAda)Rp|$|DnsT zMQp6V01_5#!bFetIm{QaYO29m3Wx~w{u(bYeFKBQ;Nb6?Ww!UU%1Ok;#83q!{Fbyy zZ|XHvs#=T|&s7~vR4gCJ%FDAbGQJ1Ecsr2YN^MnHhs#-6+b1vPQMYEnM-AwTf}!7U z`-32SUlzT6ReiRv(ae{lQ8Hh#QEdR(@W7C`Do@rc zqLl4|$=E3%n8z!eGT?qHkC(Heye1hL<)#mi$!}kkHijv%-sA(OlNEd?v$wDB8V(L4 zJNw7l+FJJ&ZXOs{Jy>U{Eh?j`lBlpUF(lX{tw$IA_BCdY6HQy?!J}L52Eu_kfyBGG8 z2IQiFRtSGoc5G=cbOu~@mOg(msAuHNG&z}cl9f~Pm4?zTR0C1qN&cP@NC7PF@R{H zYJRJk-WVb~bWYUc*xHUrdt9T;)==65!Z`)-#Qk90NmaS4-WPX=HZL!a6A*9ydzk3m z)MY8j_(6aAN6-Ea8^(2%zn*n3$5NmHs;J`_kAJ3<ks$wqxV@;P&>a2Z-0lbY0 zf{Z<68!p=Egsk&MyH15e&Ht#(Rz>ypMJk=R%~e7|C*k++-{%jTht5H<_yPzB?E1yb zpO0Jn`$nywnU3Vp!YJ;)zedc=<*=+Q%{cC<%}zoK&S52u_r zctjjfr3dyAsy~-W_c!;tRef}Hbhu20>)tZJB9@Mh4&0t+kE`SQSYU_I%&1k(T=`0F z1LSmG_3__=n(l6e`i6!~#WWm3k=^UBek$vA#PX7RTzr=fLzV7lQ5+wEJ<|#~zF8T_ zIVx5!w`YY!_ycskH%<1-r%$y#-=#TAYhrkeZ;+5gOcH5t0@dZ2R1mirIG zK^?DzpRckM%k532YcY20 zH=&$7m6tajE44vHuqye5gy7w{aU&os%oyqz%|mN%w~eZ(Iv;Ev0L$hT@_TCHl9E?& z$?oZn7F*bFOeA38Q+3yPUC8EkH8fzz%gg^NEOY^8$Enr@Kt|iVjoQ(Cy~pnE?%R8g z?}yt2oYplRHzr;HQ|35M1dgZ&5Bofh4^mRxkAU_Wl-Qx)ro=$rZZk3U6kBK<@2|DN zQho$nh0EULtf(bX_;jkf%i-SODe|Ra za;nnsfE*W+?pH{kPYS|`-hh(VQkV`xZ3 zN4IX01k4ZQiu?J|LWE#~4AN~wM9^uyoh`5Ok(wF>B26}G9`LPUd^~}Q_wA?X=$6x? z9Zms+k+CrlVaE`a00npu1Fec`j+J``VE0eJr$ zst$?#(Ee(%rHGqT*!y+wPw&%|YHii0r>8kic;oo3(ml_Pp|V?d@DA#hjPC4}_vdO+ z1G8zig+0V3ph4*V`|&b#1^?{qY`Ds;#GnG8e|lph45ARlhd66axdQ_ORo(B^oFB6R zRKkvIwX!5}z5RCw)TCRF!OrGp%iv>*8#f+->VgYmS??mw<2Gt85~b-qB3yRnSx*CH z0>8wVPKvNCAy$l97q z*RPk9O=YuJmh-;#WNn)O4K`BtA$BhWA26Q=<0OwKnwn!w^gaPHHo7HogU3h5kM@>T zRBuH+67eRx^J;mUo^CUJ##VZP^?>-p)9Jjymm_R`D;vFU)~B!pt8-vX1RQY9ZAw124((wx3nN~8GyNel{8 z6EAL1Q_DgW_Vo0iq(4;mBqz{RDWhT3{GlN3>}Edl-=L=t1Ckue+h+5u0zme3w@*G> zqa+l_7W}E}U#8N|o_^xVM9t|ou8!9kZw2X|HSy@??GZiuE>FI;-k{G8V*@;*Q&JV<#_th6CXqn}N zFUohPSCQ2%Wuu*Jok?{J>lF0rNrSzJ!VY9dFCXbz>71*Lx#5AQY?*Qfu-UP_9IY5gYQbM@M_ zIwUd)m}7z0g(of>8Bi4MpQ`>bJPfxRm!GA61FIlgAsHQo0$HkgM*Tlu{Wk6MgA~|o zruRZ@0te;xIJU1oSr-D4*9d68^plbuZLu$dkRJ*B#SrckQ`>X6a$i0^t}hgQeXPu` zdJd(E3JjWmxgXiyRsK;6EdOs~AhD^Ps|=VaGe6V|ncJc`GXObMBJMFV>SuCRdrviV zTrV}m{owanE1ZNZV+~DM6@(_zeFq>7?e zX8`Bm#3gP_tpaC!-1e3I8UX<_sC3|=;b3wI4R`^-1C|sztf)wjVh{?8gK~Z7vYkrG z6dce(`t11!l^lQ^lJockCG1*|dXoT-B_;eIT6F(Lu>Sk`Di{cPWo6}60)oyG4=4?p znVIC{$i<%Tz%y-y0nc-PqZ~H4tEs%X(7W^poxNjgsL;5JbgdbQbf*!t zFJ3DeY%i|!*|DOgdRx3P;ZbbSPEnYnQ*%11l51XUHQ_F0sHIS1Ileej#0GhaV&Yw* zCn2y7vnOt+n+=4+C06t(Dg*WgiaUaVQaTxQ9VqM00diiM)7aT1=9YI;8Qj<|Xf#2= zSV(LhFx!>~^SYpPE!$nhR>|KwnUMOgSWZVG*2f`m$X#h!tPULK0xP5_ z5M(Gsbns|%e$Dj0^8}Kek^T3I~I_JM}3siYn!lOuT(L$H=&CHIUDv1BVTqU7 z0@JxEC`jcEEGmKDcI2V)c`U^7YULmyCHDu0ayzIP1-}ja1@P5XzCJlA=f)JbdFZ-( z2ja|ds@@lmf~$5J2vh2H;q3sI;}SzzOmWq8#2o@Ky$yjQU)rQgy-k^;odM~>?O>f!Idfrng1;%DRdNm?_$s7Pk(`>+>I z;KGuIL%gs{@AR|A;rOG3?aJ;oT}erAq?f-@hwdN;h`i}%BHq4@KuRVjbqQ!5BD{g) z@qH|b%F?C4Vv$dr1yOYc8+&Gb-O}MHqaq$979P!2vw_;3u7<-ckW@|K=(-FzgoN1E zAH>7oU#Fp2JsiJ5bi@*epDyP+)i5>gl#}};h%GJ|Hz-%_e^=T=&Y9(%?d_JwyEgzKdC=u!sSvxrmMirwHroo#f=|ip-gXjd5wAiFM?EDcBdh79;(iwGjaVF`luP_T zK%1TW_@okMXK)NpbSJB#ozV^8Lp{PPcAIyB{cX$PgD{o_R>aRWhT4lJyN9C$DGAR zWDHRWD~3mbg-82V`{cmu!q|a#di8QCg3#jd0q*?i-a8?S%BgG|LB+!@Mc>gNoA4Z6 zzS~Ip0~-~zjE+LPE7*1mueAb8sV?I+*!}dr`#z=p8V)vrn%2kC8wu#ZDGFLd4x;VO ziY#!GlVK5aB`-ssQCpkKv$FqH09!AL_tCu#WD;b! z03B%epHid{4u!GYn6`FZ94ANWs=-$uZt;5C&9}Ff2!k+w^!PEV83VlD_V>xr5ok#5 ze{*2O20LGPP&~LQ=;TN5b%j4;%{BaUqoF5$UvDqs&Q6%<0h~MNmtmV?h8(RQA$=#9 zvz+B&P_MwK+7UtV!xw54hlk=j^Eh6L?n8JDT-h8c`NM0DmgP&#p|nDOfWOnM(R=I? zMc#b{9_VK$=!Zg6nGjRC!bc@sK2V8s+$Av=LtF8#|S z2BRD0w4x;Ge|luWS>#}z{4{!@R)9`G_d#~i?Rvq7K5Yz>ik8S?aEQKx#)OsdPZV+c z1zs#rw1A+X>8~1=Q!&PgWwR@2_V}O(;%&B5=MUIechA-uMZ7N}&Az9ksQos1N%ZO# zxZ&m_4|d3`#Lln2h9TIlS#M?`>no#yceF8JQyG&>*Ze z-$R*r`MtdkK1sMl$@7Mu@7-mEE>%f2V#2$h`bh&dY4=cfdFtPrrZ+1S5X^(^84zKA z2|-c1wFtH1_Ej_z)}>1T;i%=B?2~6;TQQIG=ZL?-l8nL{TQtrZyn_i`T0wE`#Qy#O zl6#l8jcd|-1s!8*K%>J{M>0N8un;=r9N)BrWaRudtpTW5oiB||0d^*)i=1(i^G5Yc zU`0rWiZ_Q|r?;Azf6*ATM3N8wvJs-a({D`k>eYOB(E7{i3v@~8hV41)LoP{4z$2Nd zOQ^9i^(Rd7prgX!HG8cZEc5bmAR}sTF3PA2d3vOx%Bc7o^%#vzlvpA3gw3IKl`a5V ziofmg0hUT{!!~sS1@yzFLtQ5&4Q1`xusWU$FHB5uIdhdRjVfq{c+SBI4Br?%8ZF+O z@`rQkv!fo@hBC>E0GGVJJNanikYW1mf1NVq{H$Y=oZd?Ah;jPo<)saW%s1P4R8$%C zMJ^#UW511a^Kj-gAkD$@?`O1|m*Qu!fcJL#ggL(D`%Pnr-C60*RE1x%;Rje5dx3G|?Ktabi}kd)W^ z%E8FE@NnS@9vxlxcmMS*Hrq5nWGcV9$vU4HZbKYY`2d%@wWJyv^UkiW++OGI(i*n5 z+!an6%%Y;_?@xC3_nEo4xR8$}C2^2}#N8>FAykHm=w#tpGrtG_U)WAFxQB^}IR%Z} z|1ZhJX?g{afF$AR7u^o3!xhfb18o%UF@}HcfRF*Xh-NZg?ohoCchi$0Pmchtb500$ zUb(}{6IfJ`Ht&aga zDA)xDRb=rLLtG zMh6N`0g1Y^)p^UaIEkx{$|UJR;s0 z8$%0(Dwf}BUCj#yTA(SOa~DQ*IHr^Rb$3ll*NO`V!93qmfkU7tLIHytC>I_Quo)Uc zW_eWu1>o-Q0Wa&Q$B_c@>qp>w_f@;Lc!~Z_4kP15`q1+$XQ-i&A~RJ~FBp1llwzL3 z;Aw~MC3);qg8x;L|A>ePjSFw*yo&d2bXz1_T$|w2TZ*IcIf2eD zOt{@q$#};b_9>t=w*C3yAR)87pJCgBmdDSSJ-o=j)74gcoM`tt!kN_>RDtJ^&&(Ni z?nHgTc={A*0@Ev4=$YoQ48^o(56p)?=?}27GBReAmDPc6N`C7r_F)!e1|W?8|~MxUx&vld1atme`r?;QuCQlLbu2OOsA&Y19{0t zN|8Mh7=gi~GlzPv7#;M2a1y-7T5wGt!yE~Sj=7b*nsn$Ws6;U_PAlft&}qBj-&J|Q z;$A$Qohu`W^SGc4s~gOcAW}9|d&B%6JsoYfWA5geV50L z>PsgT6nlvM<^B~NpCrJddktK98z++(YSlE49<@9AiV-cSn!6%o8P5nGNk02E)10jL zc&K_D?|qo)TgYvx$4F$;rRWP%5%+eHM>5IkUXqLOlvLn$(~r`h-_JW(8S2r@Rqb*Q z2rxron+;K4y2N1absD^65ZTTaZ5X)2>zXrS?r!yl7pl7p3+ISR@=}P=V1c!EIbZ3GPF(oCc$qH6KFtR3~9l{n1xBk%BresgoKy|451T=g|sDm6$ntU z941yfN}ck(V{U!C!#{urGJa~lci}E>*!gSutk*?%4coq=G#>f5(c$J4bVvl~0LEBR zu+kaJPZ-O~gYEq04T?h7wY1)s&LN~k@6T!wW8VCPKKl!V&o1{ff0|PEH&z_|`kKsl+qVN>GKn9_4K3we~gvxQSqG3KwO|2-PrD<-~J0s&r znEQt38R=bBEW(Vl+vLVYPMq%NWt7KX*)b~4Rt3Yn8)jAFaQcn&vqpr|&t3As%F3to zvy&q%hxN(@RNWbY*|ZMW@3N!$IQ0rgc4(a30yz!C3#hre8)RgTtsAJBUSJ+T4#A8j zdjmmwbWa1zX&jT7CH7#Ol=bPaUpLu1RtvDyig02d2vkgn=wrC_C^0w+O6E4sW4&nO zPcyKWw#;5jx-8vEbtS|f*3G9QGBp(%B`5Spx)r5EHWHeA7^xVTQ zgklfmPed;&QR*;SueRJ_-gJC_E!kA*q3!Zjp^)3$+#{QFV`9+?Wy8bd_8Jlmn|^Sn z7a7rV57?0;g#1mPQ&MV7ft{E%6YSIHB`~#Ef!ZlfN{N&SlE%+Acw=N7250(7GhtqU04#_sKL84iE$3`t!ADARRZ> zi72m?jOhci7_W`H@ok=+7E+>j<+~&{{x~LX8>{{xB8&Ee_+_x%VDWdQ_PE~xZ{KB9 zWJpD}m7xG6D5hJXbb;=0t>l#aZ?IaOr9ZEk?y)`3ZjSm+82)?5$9qc(9#~K2d=HPx zdUD?i2}*g1H%EsmDkUHhS;w$&{mYXpaZpkg?iQAxu_&ExU%`GhxebMe#uI_F0Ft0rU{aWDRS zm9%?|;k=FeGa^SEcFaDAQhw!c&eqOu;cw3}L6jmVGaJ59eKB#$16{ngjWKB%aXT`d z(P%uz^>seh$gIMnic<>Dr$@d@PhOcs$vjzoAUrNymb>kM+A%nzGGS(Dhf(42^;B=v zO9>{^dzV zX!9b;4!6b6-wd@vwJAT-@==VIq+p_|V~OY2ulDdrMod=z!Agh8nC=qOzA`fl1*0qh z=Ua|~mXTj=EF$OagIs(=duTI>UrSfHb36jtn;P(u62s%9KF$iN@xwU&3GbKR@j__? zSQ>|IlY8?*Ghf%U(PzM-3O3=TX!WyRIk}>tlBXt(I`os_o9L33w>|Zmx!SazXZprhM;pCwo))c;VVVSyC zwHk_kr(RD>ugB*Xe-0Vu9@OQ%4{9V79q1Ig%!t2^Fh6a zQ;F9i0*9YvP^~RdjQj5Q|4|so%XaXUEkG4L#elzGeQoC^yBX}Rq_@mLy_#>o?{++Y zW^Vj1g8p!CQhDAyu3@UT>f2jsN9r21>*SOR6b01el>QZQ6;1uJHby*n4f*8(pYMu@ zBz*gJ69gytd%w$Rh*+7ow`)7r%sG*DKJ&guMCBV*r`QeN9dR9X)O{J$r~A}HYYX<| zP8Gzdf{ zUJoPB?u)p@=FSKn5vL3vouTr+60JCiswe8V{}5y-J!gqkH3{{PtNt_hcadLOG8OS6 z0Y~iYN?X+9BvF*}O8V4hZ>?l=+zHEWex&uG4fAf9j~kit5#~?%=Dht!H>d``!AS%q zy`+6>alQ`R>wJt_d&IaMp*fOZyn^ktRozdovspEZEWSmw^EBcJ&x<7}0!f9jK3PMk zZ}e!@{_TTdS^b2SMG`wUcD8EYsEVlmxnN>cZ@mmhU464tXmhh+a?Viu;GkDlMU|=P zsa&Xpy*WXJQl*LLF`deSyHuzM_FbndT}IA>r!kJ~vR~AyZqXV{q}y5>X33I~qxucD zzIYgx<*mYVCxbeh`=e0bR7Oj>Dx25KKML48PqG+UBs67P6b`NJqd9A~Z5J&mu=&4D z%L*Uj@sqpX0r{rjF6^Gop>_FUPz&j=Vckt#C>($Yj{pTxpKcTdGdoN=9uAzDd;{_@( zZ39E;`LSKHbqLv16Y)K8ygIGA=yv|Cr?#@F{~8L8zem`fr$D$VjMnd2pY!M5be`DX z4x26ept9gtL!HKSjcS?uDD%xW5cJ(>8DxxAjYM-OtdB1{3#Y%16MLH7%%6B+GQ?pF z+j~dYt-lWrKXR=3lobr%|IRvQem9XTkeMGLjDoVLADRNu!o!tW(l8I8ddqieQo`A~ z<>}WP;iog<2Rl2VE;L=D1g}KjJuVp1H}3t`j~sK=dT}GmDMfoocW?V?;N=4mm6d^= z)?F>~+ti@AsYzYq3rTha$xsmsdDmaIXaH&+zAl5ak{WS2b;pZe#EfCYukS{DF!p3B zC>LAH5_xKh>{W?kx9vxj4vy)ZlF3Nb$-*w(Q9kP)4L`w1s2?2c$mgB9fB(^(Ptb*E zl+g}h7YSFqZ1&G2T5GVNwVFzQP2YPbg~*bRebQU z-Ku~i^K-%al%%tVk?Yv;bm3-gP3t95x*C{*1Jz$)pJbec-`S?wV;I|5qK?m?!~!+S zF7JeObX=bzHSg}F_{)48=S%t)!t(0YmfwK4u?h%gNIiZ^r#tArU%;i>vU4BubkB^a@2gR+LM+;q$(0f#c zHSM71tHw11Qp+VJIXU?RmAqtjC}GB*-5IK4JyVbR0LOv<3wDIg*U5QfI)<`sl`C*Q*OH7*g&-uTr^N04kQ^$V?`&iS7Y3VuSi@0;{ z<*26KM&VDCa+RR_A;awKol{cslYL6zi+K)axjRyS>TJdH%Tko@o;#5BE&DweG4lvAc=Y_p+U=%vOkYluz5sSX|EcJhHXah*l#zNJXWu zRTvRCjhR||E&Ta+$0^RTj9Jke!nTpAa)&_pG~eYTGOy-6yvIb^`dN(M#vtxj>KZQQ zPqaz0qIk1%%Qydg@J-d%rf-zn-_JX$n8Mop_x$EpF1(@mcqzqB!VoRq zuS^wD-lMjg+YCR3?bmAv{Tx;#O_B2|QFo_zQ5Qtn(`mACU2L!3&%U{O4OoL}k?W|X z;P0LJ?g<11_f_|>DNDPIwHcjlg$j)&7lw{8^-o1Y%e zgdGh~`_;jiy)=xA!Hni_v%ydpi+v3`kK|5+_rV0uW8_GY@hIteP^g~x-%ep8%b3=W z#8$W0+y2rB7SVHE75G{ku<|5-C0wiBV^-_Nie|o#Vju?ap2Ht# zF>(kXf@HSt+cBF@;ALFMOIve|dDWyb2~>Sy(W{TjaNbL>cRVM;l8k11be^hTF)Vza zE5wt%x4eTCu|i@td@N2mrdT;t!v{>_kYP#PyZEr>kz}Z&8f+a(9VRhW**yF znXICN{}~nB0a-!CN~>qC;rWsu$>EVqgEb<^3{b5TaI8VqlXk zabT0d<|f!&ij{Xco52gccR_D%b&Zf>OkoWR>koeF4sODhwcSV_0a4V{?~5SSoYzfY zv~8$~+ASBu6e-FLg8{S8At89Ev3GDIp1{N$44V^(9y1fMeuY+~J%`086r1i8U)S?o z6-$oxXuZvC4e5fx!*{9MJ}m_c;`Rtpi}#DeLcuJ=CD(~>7&v4yDtc?`)793exO|Wd z`jaBHIr{}h!wlP?Cu#>CJ;ja$8NGXaLjlIQk-;GqMR#=iTpTx-<;`(3r$G{q>4^Vo zu0qRrdmCIQyU-e}OA;+}pT~{wHuEEe>)Ed{dwNtpw*cMx2o25>?{I8(6czXTNCi)@K1eINo82=&q zg!LkBz(_!zKc^G^$(MIF7^XBXdHrcYGS^VdR!Sc!Y9}tOLe|(Mk@MQ<#G*u9L)9iK z;>t!?$4oHi+MC4PEADk7#Bb$OY@JQ%o;n9l;JcdPkQ0^NgGE#{S=}!zc^e$Sh3!lu zd{sbTVBpnQg7CF3%ypw1hM#|rU|aLkGqjfS9z{2f66`GQRhekHq{9Y=v!%erF*$^& zCtR9^t4>Zfu3y(J_S(XXxa+W=Sp6B9{sQ_rj-qj&WS^9iPhwaOE7)-xYMj;jlnj3N znrRNW8jxSEOvE~cT8LUOx~1vs269l&;bwzTMNLhS1F7+MaSH~Ezf?^43D z^?4FHQ#W#cm5bL(FqHPLCnGRGv#3%yS^#G1_}mVJg(o}sr@9#yhx?Y7gEDe782AS# zKOt{S=YpDK6=p0hLCA}wA~bkBG$$f#Y(Oa~MZ=yJ-%{2K1Ld|TAgb2r}r{fFn z1blI6gg^UKbok`*TIuPIiN990%z@b9D53WBr4ar|g=ed(Ca=oTkJ9I5k>q4V^$ z!km}4D1-(^%7cQ>PC862MGx;pjSGn&;*Ng&zDngKQ$gKFN#e!HucGtq@&r9Bp93_N z_m+(|2EMYZs47;@&Oho(#1ebX*U}*{KDuB>vg{?-&5N|PdW5@fC9H@FfC7|~@)j^g zvgL{U6Lc5n3=b5t{L3=lKQ1eWsbUW1CG{ouf^}S@Y%>{4IovxnG}EFt*ZoN7%!k89 z-*y0gGAgbD0A5ApRpaE+sB?r8YDqrJ>Q)&dA0&FZ7s~9-Sn!eZf`th7&5b5{Shn=Yl+#W;BWC^o=Z* zw*VtHg2&3lHnsp52~M#Y&O%On(!bsxjrGS18lHQ=q($BKoU!Z4*v;FNu<6!2rekg$ z>|^x&?-sdxz7E`l_71E-e0L!6 zC*IL|{Q#}wwb8ctmv>_-D@-q@z)zQeXAd+V#qz<9L)#qG>B!Wqtc32iwOwJk;L7t8 z2W+bvEz*1mYn%t?*OBSSUY>KP^;J(B0{m2>z-3BBT^)XtK_LGYm~Q@7Ya>P#Y`!%K zLQ`i4$(m{eMEve;Cu~UL;ap^LowS16je-tGo*zr%>$x>55P<=0pjue#z))b4g;x&j z1h{Yf3G-)u@$Ky^S=qw&e@O>BBW8L-=!ANyduRYp!Xk^uyP7~Y`XKZe!9R>p8!eXT zh@Iat%R_Z17se|zRFz(i7U7DXQ~Zr8QA+N3jsh<`M|SU#nfuFfsgD#e*R5z zef}0+2=xz$UrCNfNg<3(@Y3^ql`G2&ZfyI*!{{}!a}(`@1)TG9YSA+i(et6nyqeDV z`XY(Qq}Je*PrcO)yJr9VPiEFp>BD#d8<2Vh^lg`@kBA$X^izp$?T*HTUXDWTamI2( z!WOX-+7nBxn(l-W4L03}w_*o5+iFWu8)%2xK-)mrfuLm2oc9~z8wlI!;PnhXd9OrM zJEJ)Mh6q-pFk~pL@oNhOoBNF(0ajJRyXN+67&FYK5PIQkPyiL%XJ^H$TtCI*K`FHu zja>ul+(OH@m8)FmP6xc!+^1 z9vdKHa7+-dJ zqdP`{dH_XnbHAyd{Ql*x|9k31SNB{0oXoX16kNsxm4_(;wcj6M7M=~=-yxvubo{9E z499%@E!Nl<0hXAW8S-_Lp3h&T-zQ5;2gJ+_6|~N9q^S$SzlO#A3~G?T#0-G zjpn}om0QxG?So`6_YLpTo4%Bq4uWZguk1V*?i(V7><@=}KjVaq6VzM~^kp>sHqE!W z6@eotm33fgT$h{F+TQWOvBdkrvyzRaC-*gD;QhecD)OoN3Q}2Zkj1Y#Xc1`eLn$55 z@Lg5g-?ToexxxCzY(P9g(1Z|LYo;H08y1kFXazCAZP_>LsOrB+Bn}mopT~l<;+1dFzU2dPO;sZKo#Gg># z`v&a`h(S#Q(PzJ^+&W&i!9910QNJ-tvZvWrb?O#mzHS zzJdolZS1;d*I?bUrrkr zK*C0KWqKNIGYKUvpz-Ov)4{(qn1^&(;rxd|K}tH;TO)33gMl4;kX5xV$n!8#(y_vY z{D!x0*1nC$m#gOM0?vea;_1z3c1_jC&e-(dEviPwDC}-Qhvp?~>1S|415RObJ^{Ux z<>ABV<^HTfm|exqJ=ov>GdfxkkoEa9BYOwlbFd}aX$!I^QG`^ zzJ&v;V!itrFCNvK#C4Aa+QOVin061$ZKC3EYtD@1`nG3&3m02Ch*kZ;(w=C~yAX7q zoiwt$bzWvH=U-j+4?iahjRq##BV@5_p_LsEjcwE~eeAD~x4{pSgu(AQI8C@@^rt<& zrj$!VBZ5EXew@X_E?R!0={UClmW3&gi%f`B6E zp?%=}ShDdc$xdD-jHg4Fb|JyZ7CN=?w!bupJN0UJ0eFL1k*A6vVrHqJUEy=7Iu zx!EWgOgVnIV(oNsFsQ*KLJRg_X5Y5j@0KT)p-?GN9I3JW{gCNDlVX34y*!rt^90l1 zCk7A%L_{p95;s*P$ivIiVM_93-6x1tuZ`?ZZj|rHn)TxK4}SGJOJ4u0wDS&%Dr@s_ zBZ?yuL`TUmh+$9!Bug9&prW9lfPezF14veK#sH!cbWlN>pbLrt36itWBqf?iO|+p= za*hJ~yZCL@R_#~&$L=3iQ5JotetZYyIc-*1*`8EsynJ=Y-Ap=R?hkC_357s=XE@{c-Vqufg zovnXN&IbRf_s@Z+&R6b5+jItsO7$wvL_Mx;SBl`>8=>gt#GJT(e0F5GrO>`yt0H1< zKx{MF>$K#MD-i`(poH4KQr5s}kSw*{b*Oyr$X_w=eaN{+OHwVA#Eix+|c7Kv=c8(bN?q58@bgEYXTP3#5(Mj%1uM7ggyBWOs zL;6#G{_0Un)K9WRL=wZP+tI9+Ng#=8Hox^$pOwu+8QsB7qa{t_!&!|)qv!p>z9x?~ zKln@Dj-46_ny5(WOsV_uZar#WYopgi?27O0_Y}Hh=@EPW#}(FB_0$B0opH8yg30G? zJ1TeRJ#*PQ$cp9`nOb@Sa{fwxeXC)KTBbEqPmg86*@+=fA4N}@8wJf}X$4G4qiLu2 zY`vJI|GZSsVFbdJ{Nc+ceXEUfzXnu{gxEgz3m!~<3mck}nRIn0^NZvC<-JLFKMDK4 zyA^MFwQQF2D!tQkCc9NY$!&8xheqq0P0F!K%_H42{I5RcX>OmUj(lDHN_$uXzWswr z<@Yh10#c*iw5->y7k=-NR23X@yWxAlUz%LQhSgVHys$dEg;4kOI+6yHM&@$2NPb1u ze;k_feX#f0`}Zhz??x7)U0p4enp7|>@7&rY-09mKLz5JFI@aYs>wxy_)S%R2-Tqs`&U3cfzjbej(oYvS`SPZrz9ez%OUya`g(t(P+#ai+8hK)YqwHwT~ITPE4I1)R-@=HG^Gd{yY6HxLog% zOiXt>c5dQr(KRXOz~(E#afh-Pl)N|EVh)aN;2#6*#ctI zZX<_8lrP1-N2(>h=!R>nepH_8uDjeG7gzdrJKuQM;n5U*$cJ`lYC!Kk#b)QJlrQ${ zCK)LHSO>P_c;Pecy1@lJx0j}{Xgm_XrX{>DceeUN-Nlb7N7%f}BC_;TZZSSTp>AP( zxFhtSXndcN+goSdTbh~49^oubKtIwEMmyVL-OCiZ-p!3S7UZ-xWxtuv<#DlNrQbXS+Nz zl(*n(-)du3%k3Sd)KQ-@ecD`-{XtNzxpjobP5-rm4jYq}BGjG9u?1tZ`J)3}X8^dY z$>$zB+gP;rZd10s)YTnqycb#210r^d$ZdUPQ1o-DukSIlVx`}-!p44yUJYB%oX$9&Bhda@{8@dL@^??$O-06L+SV_kqem<2B z6YgFM!Y!uE8lWeBGR}@;097VDav$vOh6VA;NDNOehK~AVlmm-*@ z<4mXSoNI==rYR z@`I!6PW>%M%G%`vL0`EpXhK|bf88fr!F|AXxPPHlbcsS>r8Va8t^4WFHN zx)0j~l|)5l&{$Z?POd1**z!mX=EN4R^qGmz=gIz{*<5NpYheIbtL6Y;4mIf!pJ2qt7XS z>?pURW%LiNt+QJ5gu;<27OPB0N1f`SVP7{|^-*lAOy*he*ePe;<<)ji z>&|hJ-{E<+yXBb9u1>$1b*~Ld!3epF9;~rylqwX-vVE8^bBK~xpf4ULwD0baA_$Ne z)YzCdes~DN#j_@>U__d>=Zuurn57jZ$#<`zJk89r&yJ_|eT@aR^OEIqc0@&ubW3LE zttFGa_i|F@d(WyZvN*Kf>pqfo^|Wk=b#PU{`NQ)CpXtx{e+h5uW=B|*VH}T9T37Q( z!$)OqA=Kk}nKK-j6L^SQV&F;56KP2b9 zVMCgyjLVRc7NLxArRfao zj_m>UZ$w{mZ3&>5)NNNfPM83o2jzbI_eN~$3MjLbEV*SD9oeYpxtT*)KDC*4#by2A z+olMbxq3rGHM#Nm?6Er9B?pxi|FOZ(jg2hli+7Z%UtefGoc{Olwt=RM&oj~HO4+Q> zjK7lXvPpY6^bt18H`Y9fXv-!@B;&05nSqBA_SsB;MN36m?bLD~=c-W@&-n}M>gIf$ z{Q9={=UGk;7Z&neWT5{ypEOxQ?blY1| zI}i9=|Mb#$@K0t(uUIt&!^*C~sdh=ptv#iH>yBR2CyDp4F%L8asxJq?uW-8H#&DXtsHBA3vw*2J?Z>{ZDSUGt2 zyV8TbXTu_9DG~BF%HnXRuix?pSs0x^eC(`|LWEAuiG=1N-V=*^{u$U%a?fONubac3 z8%wD{X`)Ozfu>`w(FYyWr-ovF ziIWuhqQvHH2HbBgc!oOdMGx@u$z4Zi+cgtKq`FA~rF8>qlBdA6OJAzq6z9L}35Uxe z)Vm)$dbArg;*XmC&S-scWuLdiy`893GENN|&Z^p<(8 zjbGvtla=5nWn^R!s3xRo&Y5|6C=oobOvoZin+e{XkVS~#4)i|d+L2UTzHjpM^t>4u z*k{YRaigf5-1PNSUcjc%h=ggKIdkUp12{*w>pd}*CtbJ=J!b?QfgZpHs|NnTS3fL4 zsnKE9&$c^9$N^wYE1p?eoFxn~rOf~#3EAiG1S1OeIdYf@f`tD7mqMH^ezeS?Jy!Qu z8y_FvX0VI+3%RD*>o=K05im8MZx(^L-A&6pl}jl%@{W`C;d)QpoOtDPBV`e7vn`r zy-uO<13&%qf$w@27UN~k@;yp!f(5TXrWbUk7YtlEG=9L%aClysDo0L5;{|Wj$5GcW zqjE(E+#J~7Q2}ad5UJPeGNj~Ym_T+fBD;U3vox#Cd^@@dVZ+9}$~pcoR_3%#;{UVE zyi+4)EskrEarw%V3LTeFUQwawI`Du@LD4=Bz-5I; zl4cG+!A)qoxMUI=6-rG>&z|u@$_d4;YDg%*0v{wlSpdLnedc;@9dV87$6z3ZB7Q6E zTYW^yxHO~@m(C;`eZ&K}Nv1#$#)FoxgqtfA@=D%1ih_c1rge`|JcVKlysnBc#-zia zOvc!v2`DcVeONiWHJyB`r@!BdjaRxHCbEceoQCs_jEq#q9B{rf<|H0YgB;tqp)3agfMOIDT(PD59c0Lw-tl~aAl8tqKDWadfl--7;pa!wEqh;5nhvG2^Dmwkq)!+ltk;NRY zsCQCq{mXeJQ=haoj~)%)57b(8=gtbk)Xaw9p<~c=v!f@gyIUoYjH;J;NyBahAkrNQ zXWDGTvJoY`=pU8X4Z`2HuxrbFPYQwaNhzBM8HQS-nPkPhmJDpgAdg(yonfU4x-|B@$>(T+hDQ9Z47b#*91akZ0i8!{rW zuPe!@-A_CXf345xS1A5OMMR#aasGG<;cDAlZ-lNXBR5=F-J!g^oClDl41p|Zkz5$R znr&fv(99`TMmWbJDqaB&$inYlh6~Bw2!l{y54t+olje4@_y`E#N$bXwBK~GiCzxE~E5|fn*9e z@gAr`TXu-dneh@qV1f(y@O$8sU&bztEoB7S}1SwQunQ>sLp$MQW;gUtmkkTAF zl%Oy^2!w&Dc|K2>8S>Ld(b25;MunFj_sI-m65hbhUYFBJrQQH)-%Dd0TvVJ@O}>;v zBkD|Y8PT>c^piNun+Q{?lao`i{fg(%imNF%Z5Jwy;Un5w*<k+m=$M7mEWaVP;*fq^#T+v=4k>WgU<4%kg6Ac+u5B($bkEg zdQ|>s5WCnrwI3OsKYsuAFCP+W3X4~ky$K%@5Z`2p*Nww~`)>*RML{&xL#LBn4;&dd zk-8q|EYsFa$-GbxT>O-HY;Iw}*yvnO25q>!qGCU!cO*V}yJ`$L^Ehz+-cgWK@pWq~ zM8*%Wp}m=x_p+Qh>~&ml)8I*G>nX*^o3XQ5c@AdsDb@)UWoTbeO;E#*ALBv z@vchD$#5>2mSwwY1cwnhHKDH6e?(Vh{AL0-Vl02v`vcZGtkd6cE>C$Q!ps1)CO94B zF2xD^5G)wWV3Fn|-0z4+GK{%l_I~qy-0=P)ES&8!AWj1MEkLWKD1^7P7(sw}{;*a= zyaf;O^@073)kv0{!byS8Apfes$*P#F`^(-mALa|pb6!mV_DU@rN6~8l6svWq)!R8+ z3ReWe;l6h-;;{fH0E9aowNzE25)$afUW#$bljHG&K#d6Q3Ke5XD|u$%t@}?-X8v8X zZO_?PYZYg$I(T7$Ao^W-`C-hOEA6^*Dz_;n%ijr0euu+)Q+of1Y_d?`w-BT+4$0>W znv4qE-Z1e%U-W!+N&#MoVenAzjT<*Yq4wj0yH6qC<;T@hkqPu2S%YLF3-NPr%Y$#< zey?zN8J$2AkK_tGef;>Uvcyn9ZD?rtBr<`)Ru=GVNZ>|p24#B>v>svhENndH#5^|# z8Gi^dwINm1^zkVqFFpRj)t2Mv2vH+1${i!;EF@N0vV%fB}hr}cp(c&PEm<< zHw0RJLQP(Yp2dcj9}s@MAPdFOD`vHM2?6X>&+wJ>Dj^xjIII&B6M5i6l0!^eJ=kZ` zr0CQgV8K)G-5zA2Gf(g7u_(lBR0&ODD4{wXo1By>{yCvtC11aA&Wb1Keq^K-albt9 zBYO_U%=dRf%b!3P2QQn$_-{vC(PQHMZb6#jWJAZ}KS|rJ!)M6z&NCcVIesh~Bm9wc zgr=oQQE4=qH7)xMOtLYK!nZhuifnmHv%Fy4!Kn73=?9!Z=fQTD*$m`oi#{4lqli}R2lYn_L2!7ks z$lvKiD@z^eC&2L@6d4%_Tk%()QHwwzg?tz=q@jTefzz26A?JEio$Ay{FOKqO z`O8Xm8Qyn(q^PSOD)#YA0BknTD0N2aMaJN!8LQ;V2JbxjDPJYwC~+h*FD&tDW0jjp z^~yq2r;&JXFR%P@7}xmGr(|&|7y^YWABG;6;vdFn&yf>$L09UhI*^)f|2DPimH0os zYh;-U2QJEP`#ZYM9!^XoN|t}6*2INZUse)RHrwT|izE&&N7xCK9w=*+vNF9x_Lzt_hcM>DuwUKpishuY@!Q-Olu>OS1c{mqVeJnf$Su~WmeNMv)w>k!~}xMRUX z47tRbhloPE&O+iU<3kw@(x?+6;h3{DRH5@Ii8;-bVmDT~fv3SNhQ5#G8QXvzU1B_5~Hk z^9Y0xRBkeCz2Vplg=P^o^jPGp%N{&RXb{*lG0)MB;JRE%9fi|R ziCCV%CD>;z!^T|Dp>zB=geXmGpAc^%nU<$u%5cKuaq5pM@$FaTP{NQ{?(FVPxHf*m z)=mr*gns*9Hd?^|!ifi&cZNvrLx~r7oz$q2$}_ zRxYtWaeDUccRP9hW>aT&;vZr3CnjA;=J3*$x8y1gyyoIc>8gBPvUu(~g#D1O!_u@e zT?E5pIjn}kVPO(ubR5XC@~y=IYA2E~9yy!e35_BWs1tE2k0JFSv>kY}$9pt3!p6M? zI}D()&EYyO#LA1*?%I4FAxW4}am6S(+ij_!K}(9e8lN7TM;gte;voe+0G4?VF^0z} z{DyUNt{(IX4?M12yGE=KVLQKzWDm1OIi!*RT?Cmhme7&o&TVCmE0##d Nj_4dtIcR?UKLMtJ+K&JL diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 7d50cf1..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.478391,2.474656,0.613245 -2048.000000,3.561742,3.650398,2.413515 -4096.000000,6.082150,6.158165,8.622825 -6144.000000,1.751552,1.756160,19.270195 -8192.000000,0.920576,0.003072,36.294174 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index a004714146009808f30ea4eb8192943a3c7d5b21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25877 zcmeFZWmJ`2_ddD-2}w6dH>iljMiGz@3>pQckrn~zPDzmv1VlwZT1rB?q*IVqy1Tm@ z{&Vx5_cwmyjPvPyIG@flbm+sq_qx};)?C-T=5@{6_s`^|i12Cf5eNj4jI_8S0)gp; zKwwPZ;lNM${*KJRAAh?-jM)pqnwuXqO`u5i5R`%v5FPR(-ZS72~EP1&Fxo>ka zy|%Zvwi803EdJ*M+*Y>6sBY>tW*FqMwX}vE0zsmW{*CcNEX@Rgc=c9B{GqaQ%<8C< z^VQk0-<#{HY{|I)nCzt&nA-7PVmwqPekvg$@$l*;@;t;+W`fj}MguXrRwM_-J-oO0 zEGk#RzP_Wu@JaY0E$7n{yB``xM1aA{{&{6Aet9UUjkln@nmM{H*4QYn$%x9&I{^MG zB_hcrxPn9?!&*`hH(6L%ri`v4B*ewVM?PRCpg$1(9B~yc+wkIh!BrMZNsMQ3wW0kc zA`ty`YU~Ga6)BMP|9|=aiv>ev68z{`aTGq@UuU~{6EC{m$UzWxMG@am|6_Q#gt<8< z1H;-NWhz1)2mKLl?vAB9uw65lE5jwBLJmvn+J4usB3hZ?yF6kKYHMpL)L7yBDPd7j zGFnd>;`Jp{ZK}pEpcHsC#d1Zwp#aAlT$%a?7sTFk@g~G&D3!Oivp)u*1ZkvLjTl zl#j~4ctH~v7uWFn_tf-sk`669Sv^m4XXkvV*clTSSMZIe-%3{zsqlGzd@u5AVq%Q& z6)i0~7)&*SmAh_yoYBh4%Hwob4eqwNyv4Zp+w+)p_Gvsj63Na%F9S<) z5!he;G`uG>87}_WYZ#+;dbI0uI2)0T3JD%Ve^r zG>3iIJ!@|H*SXOLG64MLK z6t#=4}Ea{7F%fgkud6H3j-iJh#NlYvr zHmt0n|IOLqybJt3+#9x9>`CtyG~3?apKlIh)w2C_z2ao6RlYJaZ9hRCCeIe{_9-pS zHADHBlZC~W`6`0r@B6o8m*mq=x>E+p^3x}klC*S|7t`YBGBUGo*=XzOF`b>A&CJds z>FHNrd!C=}|7mZZg}Wz65*38>>w3nDx*zd4EGd8g{vClwKrp@AuiMn!{rTOyOWBos zFTQeW*p4A0!@?%iQS_lyjX!O(FY*jgt5R_hZMQ zLX&AcPlR@veXV85XE-x>UR*BAM^XEyN$Y7r3aIppA5;k_8 z&9o#!KIUF6+^s19$qIp+pb#&5y^oZVavlbQNN2ly_X`||?mPpjPoF-W<@awkQtDn~ zWAoo#?(fdkuP^9Bspopt)I7k)$Il&J9kFfYx;`dumr8JWPL8x8_rqY7svE1^7&N}Z zVCf){Er*dyitUX1@jml$jzE^zJ{Ky@zjSMEb#=ASykHOpKzyLO{T9yi-#l)9ehMC3 z3CoevyrfEpZWC|NYW;x**b8_6j-XU2fd0uxhnf7KhZg+~E?>lLUH%PoP ztR)ht$<|g?o6<4&)2C9Ue6DS1WJF3z`bbg|2jEhE+1AcZMoumXknG^_P(wMfl*PSR zydiwVU7+HWztH^hpFeZ-HRP*qO;%2m`S-oL(-hJmFfZZalF`vUdHIqBvPZDNDZsKv zpRzHl{O9A|gg~~|qryR_7uYt#?$oCt zw}$~gJGvFbR-NS^JUATX;sAEw$#nzgE4Q!hx10yEe+;oEq8@vR9Iq5Si5HD!^gQ{C zL||cJ%F=yMgPeU!UXk>b@#FsNx%@iaS-YT)KA;<-r#ngj<sJ{YV(?g*QB4-bQED7IQNkiqjqS5Cf`P_22zNI(x`Nw z+qd#qV7K~9?Ah;{;Y>Hx$17C?HNpy5*S)*Evo;!C=CJ%JJiM_jidUn`O)!Xp>m|f> zTa4gmv+Q4f0Rec5ii*yF`il^~Kt_to>|wNst?AHb>Uhh(_KV{BBPpQ7IEtuVs^LcXp#UK7qP zTe^jqnwnD2dxLG|81K0|J)whufp? z%l}#v+So72X0Vyd$9Q&Dg@sFej{#MEatD3BEJ(yoat$==d4L971M&lFMv&>37Vq&5 zK9+0JeFKdb2@ib$DjCoE%z!`LtCD~EbhgGD%Y3*v_|4ic|1ef5Azv*d^3aTotu9#L zk$gyRxU|gG|2JgrJDSY#G`*?-G}+wWXJcV`TfSZuy|QB7^d^2OJ(}Nw=JxH|aHe=n zdv2!bIdVUI_)uI*s=LrcY0P<==;ZV?O3d?2aCxx6n1nw%xKs4_Lo0VVA>g&>*?~dR zvV^20DLwsD9~`36^Rr`37YIJjxJuWv<#-9RGt3yfl(~Zq&xL*uKr_yRyqulw(i>D z5-T=d-p|y$Mu;nr+~nnnD_wV4Zr=`rLlhPl*P-n++PLsH$z{EApRQ9E(he*Hr)Kd7 z?Q+N4fU85r7OfkT^>W(r5fPMQV`DS(^Vi;HacLOk0Z>}v$%W2dhWy}h4QL?4>cE@;%oPG@=Gc)YdO~eZ( zo{e>}`R&e0KiamO>Vvu!)#{Zy_qaTtS62z<&MmgQiCl+>8?xb=jl#sjLT@|@)oBtk zyFcz3KQf{vdN6@ydJ-kA>v`&Mw6jI$dIbdqNEoGiLuMNJuVm7( z^gKL7QB?;l)YQ~kF0(#1hN%}T=&__?FVdXHOA+MDTM0cXH#h%?a$ZAXpt zJq_{XjHQ2#ZqmKUN;O+0_6uE;R$|7$MG8&2eR)#^Mx=<#9dB>%kfyQ9H}u27v;rYO*&zHPg&b~m-ruL|*Lkywz1|9oprEKoDkCFP zvE3mITrp~~J1yRB90*K|D;^ZU0imJj+aW?2YPO^9zu_klJzxr=M5!K-g_*L8F|JiJ zo{9WnQHgOya9IzfSfw}~UAlI99Gx?1Bk49?koLqdTsC-1G|i0$s?apU=yt!;PUK^$ z4^*|m0%Hs6l(e+V2S;I243ijNJ!Fb zrhkX{_nVwE!-taLe*g#K$zx_07^Q@B8aG(~JZbM{g$&dwzskXR+-0 zfrLOd7^`qWGke1fHSq>~R;fp=UpMLq@I8CI(M$>e_w%Puk4#N(`I9iFCM0;(`ruB_ z&o_N!emszGNC4lT20WiG9=5d8I#-L@JqZVdCuR_7hN`J0OQYamqn>0Dj`sUuev^Oi zs@#w7xE)xl{(K=}YkLQ(6pkXZen$~wNM`6_4tQ<^a81XRf!dwLZb7%-*wIg;`3<3# zJ6ZQU@2=@$QCz)iNf^!lkUhI5?A8N}XDz*O=HG{gqJy+2LnWv;Q;qD(m74DoLHAsD zZqf@o&Kxc0q`@h#I6GSY+Ow?&0tHl#iLhKBAl}gEjgGRI;ZCU7K@hMTb?6U^j117H zaszG{qBI2ep9NsNE+`lU+!-!4SGa7)xZYOqTu+gU*!sg3ztQ!WMEf8lC_wpb;azDN zb{+1?{%^|9`Ri}4AB&Gl0a;*XW(IB%!xtoNX~_+h*xlD%2teeZTUXVRJHG}fV-F5m z|GB==isEtN-dWIhkVtW=nl34SMuL{`PAssouTYy1TYUYf=fJn+lwP0;@PAgE%cEY} zMdv-$IjNLF^ZeqYUxpUQ>8C1NbAVx$)^Pt*;W-Fzvy97i8aoI*ApTx&Mvmdqi$YTTr1T+g) z9;OPmYkE{cdUH|y&n;h{dpJ*EG`IRRh?kx^W^#Pm`hKA$UJnfR9W0n^MNJkDXJt#a ze8xIl7%tCU0zP zBzT^m4V=4uMrT4ae}Y(7Qde(Amvh4F74=Pwo=+YC0Van93;*t9^+S{L_Xi9sD**Yx z?}*plH4nCJj@$xK6?(iq<*G^?uytK8ol_6k`~JisBO zdI0DEG8Wf*)iF1e!bZTQLM+DIwx1Hy-K#m>AMb=xHWH*BD0NZQEaKwH{|e1;HA~{$ zKOp;ImFJ7>=H)G`4vlE|&84lad7${k)mt}te;3li`PqIonu>!6aNFa=IVgi1^cI^L zyyO&e6fVvSwIF5UQEYSX74z-!?#_>*TLFWk9&OEW+3DKmFk3Zo@ z%XA%kuERH5`)9WFEgt~iXGwmCxr2ejZfF;#vI>*zCLh{aEbd~ zw(|P=`Vh4neVSHCGO~KeDV;)<(ZG!@N=ARfYAOK5PghDK22e-_JweO!beBSf8`M*k zf*V;{m!kz92T}ZYEQ<2c5J>Y33=D2i3Yrh(dP8Zl1=`V89Rcc|#c>T5$+IL$q8kcv zgby-Rf1(rF{)in(_4!#j`7BJ2Jx27?yJ|7}rB~WqiibT|H;rW!6wrW;*je~nzZjy6 zm@eEj8v`kogwAdT&^r-66bThsEd zUgw%D#xuIAgDHYcxhu#p*@;Pg`TZMfa%o;rgpAZg=+==bd|9_oRCNDkj))O;7lLBp z#=U!yAO(_=ksU()Lbq&ZXGhIvinbF#?Ysja3&(-y$3Y*ka5WtnkR}Gp95@i@{JcHiY225kk)@vZ7UVWwy&5muoar55 zBZ(FtQ6-iwCke^A<($XsW7hMr7bCV?Cnd=^JKsZ9Y+wTCxnE@3`w~c3NNpfmB!#+N zy}*cwQrFEUT?Yj$^5e%Vpg!Ue6Fa_8Q&w((di%+%SD-2*XRA8R(4F;28qn-}&dCnzbsoc!ZQfJT8)*yqoWp@OF6H%~}Ns4@A0R@|2Qejb-# zP8>SBx{}h+$R5RiKE%0nNv~TW_KUYZRm?q`w~zpV6p){Z&!F6Qkc3pvMD{C)AKM1X z;nsk5^*J&Uod$sSxPj7e*J>;VDm~DK@Q8>UhD2}O3IzEiZhLoYYpc1n)sEBH$S7|A zG$|JmyptTliTz79E19i_s4boIwt2Zf@4wTNxyzzVnWp zLse^I`DxT0UzyK0!d>4)w@ZTR78VwE^>y-7c3hygONV4(iY7hHG4uOn%U924%q<;= z^gD-dSA4igA*iKyu_ zncLb}3w2Hy5e*>rMMOveC)?cHLrXOw4(aLXE2HHRptIPCj`#QX-_B}FhvHsZ#b)YK zjOcfbCm-tKzqA=DU?@cLc*EIMDzVhg&(Dtpe%%^@G6wbW-Me=@<^w!%ROBEI&`L6p z7SI5`wh}R+0lA&0&FoC|=UbQUiSI#K+0q$zB8a>e7Z*o7j#ugKS$jc9yeP432Wn8d zl#z*WUQCGq$k&^w@doAfZ>AdR>~!5zQ>zFPov)znB@pF&aG5z;mrRp0>@v*|tg)ZQd!9NrgN(Kbuqc6cy#MP3|R^aY$jfuzXlV=os9u z4i)(fTNaejq<366f*F^ii5T3j^kw_jJb-+)bYTT02SO=+^X5&Ry}jaW3LBz}d8!Pk z=|1d?v)=8U`-ozheTepqlJN_M6D5gWkEk1*${haHM$bq^Jzg}|(dOBD)6&V2J z0QeiPl0Q^c-L!S95L^k8cDZmL(_j7$_K}a(o0rezK&oB%l#0G|!Z`8nIKqw(Z1a12 z12X?zun-k#b*d~)r@OEg*|PV&&^LNwf0vNf$bo#S<>FB|9k;G&InleFSN4Vn zly|Y~!72vb-;Z%=ajM5Tn5BeLzl_Dk;o@N^Xa$HJ*ZmUVI40X(n4apKObF4V=A~N= zvH#&61j(s&ZBeRf%xnL-T{tH%+1Vz^!J)C;@6b1Ec`%m15(dCt`YUhmIVw*Zo35OA zn6t1V+FDJ2#lWz!QjqJyD=wj-9bC$KVY|tGiXn7-vuP_G;7}CsM(N^%m&8sl#R}IG z2}ELv1*ywiEGy~B76BE`)vI1PIWS^*_r=17PozdC=s%X0=E=dhn)m4<9S=?tyTd)GtHw=GktJQijCD*eW7UJH2?t+Ml;xP<#*=~x^eW4v3z#EH60h2`3 z*5(=!xt-)09evD@y14b*yQY^EL`@vXS&Z!lm1>kypClSIg+K;JQd7%Rdz_-HQTHW3Q0YGhs8<{%C$9}a&UtmRs6+wE1Hzz{2#=FZDGHR%lZOv6&{7c_Ta!sS zXs~t@H5g6PP(zmd0L?LdO~(y6=0@ha zpg5sh1!oYd88t^2aJ1k0k@#Pin+OqR;^|s474K*_e1qux5*CK>z}dM}=@?DQfGeO0 z3E7P&6W|Q0egWBpn~9T8ESu>yB=tAa8?aho&#(PV1@Q@)=ild|_7te?`%^A5_!c$2tsz zba-NCc%X=lxTN)xzyA`_8jlIm_+0`DPCck}pthf{7jL%@nOy^3!us5@fIvOrCY4e! zJYn0`^dRq#xGw)RAI$fSiJ=44Z(+PzOhIJx5`cJ$D_ZA$^ym?!t(&`c05z_|MFc_) zZ)q*P`gM5UV5GSI-5mCPgE+s{|GTj{aCEe&0PF!P z$R|65nQ!0>6=H~qL5Th0xj=ywJ*q~76K(gRqN0E=;jJWCAQ~vD#(S9hRT(s8Ws4`f zT|h&Olsxf>6QkQPSHaS*MLaehxg@MZ9C0X%Xe&}=COg-j7d$xYgbQ^i+4wOO3CyQ5e(Lc^ECl+#i z_t1ywS_67SFfGtOeQD56Eq1p(y7bn?vBkKlArdj=_?057IKAtbcz_>-uCGf^KXxCzkM#Q73&H_r@_L| zh{AJqGI4`#?J*h$MigCz3Qe&?#Vi5Er{vK9+rZTxOYmmDZe{RetObk~E_X4SX4$bN ztb~xg*MuJW##$FQF2*4#F2h8cEuf#PG}y4UZSxG>D?o}g16m5>*Zuiy-O6RX!F1Og zPeIJWL4u|4Vzo-KJv|RrcuVJKB6(_I4YDq>mksS`SriGEIVE`GzP*g?}mhl)(UK>g;(^q70MhunsqpAx5CNkvEE21T7$(@|~NS@f) z6%bUqH$~nCzD@1nk^36SsY|S;Z3t_k5`kXLJFX-EV+O^?F9@_plrHc8X5rZj+Q6N}+z+pd>|W*6z?_^!Q=QN=VpjOw^L<8n=952l9B20Zbcm?J|&57Ne~uI;&?f zHmrkKBc&UygBarhtMd$7DZrKLzEjx&jTwMP)*_$?smYTE1~eaLX_@RDIjj--lc1w) zcYdqB<^#k1Z`cGBxljTx^`uX~4h;#p0qp|QO`*cOm<&Sp0SgNYq`IyD0pCDw4RP^~ zD_1YwzTH*)^Y;-MI|=tN)@v%9B&pCjSTViDe<`2~)tG?k_CKt-xTi;XZ*5c#a*AOD zq>uT(+4NbOxa(DBA;)YihSOm8p_33GbX&AQXhH&0lY={mO$W!vWTd2ZpdL^OJ917= zPJ$U|2R061p*;*;+${^2D*LS$ilHFwS8zT#kMoJn6pP7dw z3)B$&$q|PL$Z;HK2v-0NNqTp7+F~x1%$wqtJWSGIFwO;{(x25*ouLH@5w?A zm$=CwH1f{0n?0V425}w#{sRr%xK%p!2RlsVj z4VDWc4;Qx2`0V8HNz|RjI(%5Fine$XO6^NYQj{f!2d_PJ!&(##J$isKK$b5zI0Own z1;lc+GV+05_$x?7;ZSUj{O7Bea2`4GuZ%2?5Zq)5PioP^a$Xs@{av1R&b={^9NfF% zyb)+&fFLuLFo8)D6DB#+lyGEwH3m)oldByb9x4+bc^G>*U0Z-*RN( z?sZL7Rf@4AE@l=*E-oEHdZ8Ld&#NWcE-7{K0V)|!5EbBEP>FenjC-En2U5fY=C>TG zvL{dU`gLDWgf!F>0|K-H>K=h|H&BX%oCSD}{P8HwE8b;}8ic7D!w79j@KwQTVGtD+ z4cSF2RQLIKz5u{Y&td~{KR*Of#uN|^Q^lHl0uC_Rwt&LdR19QS@T63h?&i*sUPZDG zhKkkY8G!6Q!lL3AGOqFi*BZ3&l%cgzr}3W?vXJjNtIo$Ns&XWW268d%cSEFml?*W_ z&>at8|Ge(crdP>Q03puY#^;D z(A?OBg@>26;6W~Vo?x&k)P0wj)9YkW+*OHEsxjW$*r+io(7)&rgI+f{!W$DlbGsh> zx;Z*xVN2g-cM)^5vzs6zTlcD{{RJD3A3||Cr@8}b;LC)Bg=Hd0BnGHx0LU0|wS?{h zV|WZIO93#DlA$XCHb@6;q{Aan3EAI_ciXxQWx9>!{Yy!tU5+p3y~RqBOy z7;O11-YbRv{#wuxG~w1wkF!6?estdp z+P02eeBuKF)D8ZS{?Mi+C2gCfwYtm5qUf#?g*X5KRzv$OpuyyHC`i2tE_Ma|u$ORJ z!?qIS93{kOV#=KSf84ZlBpIDyo)XG{B{OgsBowVsbOODXrGdpJ56AU|_WJ+F<{Wx>g~;A|0C6&%*Fv-yV)qo$joIiAk?(6)wJ|Y1X&c{qnXZ#@^CSa zCEdZ{!xBqCBbIP4TA&u#tRn!L0f;6z6BJO2LUTg_ zo5hrgRf~>gO=UFidU+i^H5>iG!MWHmZ~uLkm%K z`|puocCmfqHcj*c=KN_*;HO$V&0}GiZL{?M^EuH(X`s5gRC`iEyv7$x53Eq=&6)%^ z>fSs*APgV66;TAbWj@PhJrhr!nwhVkkFWQ};;~BwK$KRQ&QJ3K;pQm_o}J~vIXS4m zfB%LnhXqK_Zf^U4D1W@pm+2o6gD#}x3=X$u0W6_Qu@idP1Z`&mdau6^(7ICZ<#|pk zFBbN)EilV=FAS{LU>ieaFqhZFkmR&J200%`L7|g09de26i>coH;i!ZekveXW!alS4%mw>k~np%VnEuDIEZ0a zO67q*pO#zC#glt*2zi0YyKi~QLL;KM+9AY|Yd;7cSNB=9um;!R{&Qfn{ zU513XY?=mdK^jV+ADDl#P(HPvSqI)P=t#&eoeC@%@`qL_@Us^Ca~Q$Ep8^L2YR-QJ z#tLx&x6sokd&&SUNI+3OhJ_`LJwT>gA0AFj8+ceyef)%JF{G~f8C0O@5(3BS$nW)eY$Hs^$sE` zfCDXcq`#E>;C0~4d+F#HC{REt3p&>GBK1Mj>Z+>zMaMuKE#Om9QsnSHVEMuv^2H~Z z?9)s%kW#NGy@=&o7g~mIMFsRV+R>D3Kat>OQOvf-R~K)<1hr(OGN%f^-tXajM_=DH zmbJ%d5)gh9MIsse_RSi*<@UA`7`hjI?uzgGa{L#&Cu5zM*#AImG-#vCD(UM>|FBb^ z`n-EL^)OCC{8luYqThO^pD38S9md*dVbEl1M1suw3Wy?&O>-Ob#uKk$D}knCGGsbF z8VzoBx$gs~1!kgG08&msfDF3s`NCT7HCmo%V_^5|DXp{|Z_^Qc{uWy8Qk1{Lo2V;h zry5#VIOXUohD zb0fpH(X~)BcFP}c=EoDOB|*bWeJb#j849pNGnnl$ml-`?hb%iC;18yr4GP>QRYhU*B~Q($Q5|@>Rn6m@11! zMQH_p<2X>XzzjlHSYe8}gL(rzcmzH{sABX``4`g>yhaKXet^SuqinkK?pdJ0L@ zc+mudT^Bt7MhK%nt<^g|v%ujp`{yu1{{?XCO^HYH5%62SqZh7`tEQJ|@I_DjlJk+t zLN9^nsWLzzy0tH$G=+?8vTx8|7KFYK3m0l*tSXRm9Z(*^8xd(_ z^ej`3n3#|w?6Ru6o}uTE?gp&86c{_SQ9Oozd+3q*WqcB4MTMgvdUy>wN`O0eCrOcj z{$c`ntT?%~&CHhO?6RaRE$`QgD#-#5p|#W;(e~$0BG?BNz#Fb-d!k!|cYDVLt5OlSl0tmd<#Hk_RGiUG39lvKxS6lg{wQLe8V*t6>D& zEgW6xWFqGkpiu@WKeePr(B6Ih0ALiFifsy^*D>F5^#yoLorfa-gUT-}KM)?A9Z$_3 zI3H|Ey&fAu?=tB5l?3;Mg`H_vg$9a%5X`hSCdDcricr z+WB`!--`DK2&a2; ze{4DZPvfSaJZ_Nk_Ytj)U9PoRIR#t=g@AxuIPU2T_9u?rW(bMoqoH49LQa03rTvxAx&&vL5(3CdZaFx0+TK~4kEblzT_rHu&P0)Ey(huzv7p43ti}=X@oEflCK^i61>mc+R@J2gD9u-hkZKDMqrp6jk69^Dl#( z?w%g;s;#NKE}UFCxTWG6Ar^E+N6_-WJ8_eiwH@miuU16UeKB@;xL-#nb_GuB-3md& zNBaW)wozi^Ww6f|^3j(}?Q*?kRp>~b;#W{u==p;VsfH*34z1kP;r2w$z8sWg`8-1; zKT*}mKlImTPVQ3X!c}&qiFy)d4g%4`2J@f*FMo!7SZ1W47)+Ku{KRd$tSU3duUWca zwHB9Im{u}4znCAy!8ho%CTlqHfa=brR0Wi!SwHby8(Oi=l!IbM6#eDD9kI`zJ*#kA z{&|H~a|8-{mfi@MPmJM#bwH^9`Dsq6#l!=66)cSP;!7?5aPgV?LIoYAG4Wi5iIPop z1m(ejvZXeZj<;c_Mn>dN4^NMBZ47LNe>~4Mz=aA;Ljx{)UtB!e-8f#~*c)!NKqBWZ z6tSnUqLy_$db_4nckzfBxh)yR7>wGyB6N$h?!tnnw$L$3_Q*}(9(K#*4Mk^G&@(9p|Wu}uc`(L=g|LSBQ#V`mKnKMpqL2f zU}nEORCs&X&aU0&SR`X2-bF%U?g=Y9`xSC*ZEmiac~-Fk>s3pJrEXl3b&;u5{xr+i z7Dv~2ruTFFp4GFyJv&Xb(A>5!2BYuarY5L}87Xy-?DULy&Vxg6tgO^avhN{|4mH%q z7enZ7`;4VG{Z7U#w%BD7>m>8)A|?6_!1}D}jHgh-^iX_gBRP+ds-^y>py1>1Y zVPn@fl1i?1Izo4%iLpH)BF5a4;y*S<(gmHQw_`P`x8|JCz-of zay~VVmVKB@2J~-ERvl+$0^AgYBtA~8VT+yd`SZl%&X-wU;kZhh0m}ec8<8dc_5}AJ zo+0s)*Z_ zQvC#hejS3Nu&ZHqe>XKTa-ZyAd;$FW(yqtgb?#NQ$il z-t6S(>m3BRIns?i+^T)Gwmup?jcZEk*!du&vF&zzt^?D_0h9Rk$IAE^HsvOxEj~d@ zeCUOM=_MMzlEZYzM3ts~#%9y_RQwKA%&FJ$y`FB|UT|drSHppB*x7|LkA0Vii&i{* zRqTPd)~Aqhd@sZABp;QN$-oLB4q@;Ww1fViz&EIRuhZk8oNhUJ{((s4=8pLLd6ZG? z-SuK*!v}bQAH;AePL9Z%L%iiu^)m}XZXlo1rCBRLZyrIq|4+>Ift&f1d3*asZh00A z@!VsLR%XIAduJ2wn39F_Q$m#8s4B*C<53B>Q9R4)Q924K@sa5N&g4tl>G5Q=mEJ(^ zRB^h}l(M5nOD-X#h+tdvP};Nu3g?1#{X*sDgQT;bio*>LM*4( zjBM18qUgo5`ZUQya%T*}dcEVx)wbc=p@Y#?2Ge;dbAc5PoX>c!9^Tnm^|VpT5f|!T zYSesaL!J2 z-t3yH7ZY+<_9Xm~z-^=Ds1p4>Ofs@kk@)k9>6*1xnsLzBBcB7#AvW>u8yWXj8nK&H zUgzkz48|A5qm-&&?WIa^MypXCSM7Cq;tenf@qDA%o(n5T!xkXknf3G5xpreI7%}BExICj{Q+@c3Y_cmim30NX_i2(ghuBb`<(_d@dE8u4+_f6v zi4!X=-$tCqJKyW^B<-ml{l&8l)Pc)2wqe&y5FY#a9!CdcUi! zKk_~B<@qtogi}N(?(tl-b)VB%b$R|^{KP!OqKwd^Dx@t*-;D=LG!nyuZ)?HDf!W6@ z>*4y?m8-9I8K7oBm5_KrFZVT29iZnBh*lJs3LpS+*$jiK4s9lMtx$Z1tE4L1rIC!# zksA^Ztt?)S=8w|9B1`P~>(@qyu+e~=Y;l20!Navb-JME9)+bcBr)vv;3yx18mU`Z^ z_&(H?YUln!iu~`5Bb#r%CwQLgrgsIjus1e$5{;AMcFcP|3*Zh6=6YhC4{xDFHLSfV z#dIzSAB9EJw?>?A&$ga>M<_5y*bCQM_`EG$yg}48-MJzkT2{Rofkc7a#M#_%>z zC%kz8Mk*;ZSqWH%CoI z!~6#a26!X_rIXq2$#k;%-Rta6mUek0utghbU1Q%hbA{y2BP+viwA-4Dm&SDmQ{VQ! z%{`i_hIC{Y{6jfBzqu(OETi!kuXx`l>1lg-F^iJs*#gEwYWf5xOqluyom z7QZ|G1VVML9W|9H!@3bL7Uf2?cK>0U z&8|M%W1dUno=8fe)hPNwA<>kS*eQ)L#p!8SK3%_@E5$oaFIJ}g{n|~%*qex@tGS=M zx}JUGw`hR|Wm&ED<>jE9Y{Ce;=62sG-gdqHlkK^u4D9S(MI0xa{fIUsoNYKDaY+ zSyY3knE1f3?knxYYq9{@L{%T3Lb-qh3wxU`xgSwpC21wSNljQT_`$;+-j>PDRYwY>PM1XE*5v=g{c+U#=k|K@Q+aL% zH5B`xywPuJrAIwyNSqNIq^AyJ+0<=yF;dMZ`0eY?vBd2xv97zOyW3qkoyNf@on+U5He>-3C2Wdm#UKh+DBd+QQA9!c-42#F$ zs<-|ZYb9T)hnt13J*4zo+nurLlbQ-|7Y5&ctm7t4`=ZzKyUzVXIW_|MeCK_qiv3j_ z3NE|}aao0XJrp8#n^DiA8QQs1b=|~RLJ1R0wB8x`Q6bZ*ggiJ9U*C&9P#HG}t=%HW z2|cqz`95Ek7W`5-LSir|Vj#XL$wy3~n@Jh_!Ksb-MZ@vGY#pT`@uEbVV8@Y>A`Wjp z5%o$Mn!CA{p2Jhs!BV`?C++ z$pmLh+QuVePsqnlg#1%X&iLwtOO8lSau7py*6vqbbpE}D=*{amg)gI{`bZ& zEyjsS#LRUvOU|7-KM8CJP2T0AdCuNr@hhIch%BZ~XL{qev+KR;-_X?|QtpQlDxx@Y z_M5h=vYh&oM3$|{{=M;)6Tfq}BM!5w;6%M)KI`uXb1Vw+BHU$nWA#hKtqsl*b#$E}%Q?%ev9Tu>HAFP)Xsv2Eawu#J$H#vid`(%oSK(8n`A_3)qP$T7|Fn^P;jnj5 zX89dW;d_(Co=nOm$`=_l5R}lR@#qm`@|*fc#$mUZb9h469Z}OiQN{T)%S^V4u8$<$ zn_Q!fnKxHSte1nmM_lZv^78t6Zz<9*9Q;J6-#9{?7S%o47OLdZY@1XqHqZN9@$2Jg zd4==BDTyG%4wi7pir(}JNAsB}%iVK2OS)I0gO)x-PLF$xmiYgC*FN==uXH7OVP5tWg=2NS zxx}rb-pJ^YBu+zPR4X-gSLyAYRRUBsp*M|_npRih%Hy`7!jHbkMw_Fk@i4VW+?=&{ z2EmuB9B%gOS|wRM(j{fhVc~3MM4>V{DDwP-8LB&z;osZHKEV*;qaW(~`KwH~p$`}Agl#iN_;EYtK4 zb9AIDs~wj1*1z4S^&{d{*zJf?8i|W0@bDntD`ruVb@brZP2-;GJx|^4&cBJDT}kg| zhuF|LBrJB=?_LbFU;D-P$-5tWdfm#VmL zZuc2?#QyAAC&Dt|djDP60c!iQ|BE`!<;1-gRIb!<{0cO_0^h6p8w;};A8+5}U1;q8 zAZ8X29;mDykR)I*%>VjtoycgpzR#n0>4(oT#@A2dehJUr0X*5OJQ7{`RhKtbzklr~ z_hGQGCH`y(tr?QWRQo4OcrAIzxFLE@y_;A&r%R70a)eqGqUAr9jeb6@eis(+97agvk48=Hle_A}ue?SrD+l~+@ruv_YuQwTY7 zR<){&Kk?JgJuA7U6CK{rzwIuVpU3g4&mpVCg`z8WG>5Qk%>Q{wBa$|gz^HLoxoO(T zMG3*_lW~GE6zvhyKQ8!tPdERyOE+6GgN$L*B>jr>ro)Fqj#zj+VQ!=?RbQk|V#ffE;C6P895ZLs8OSfo?9=s(QY@vtZ!N9rL$U zEZy>3$(>Z)&KEnu>vH{(I^upfOO~$b#aW^rYS>WSKGR@Kcr0aiu-7!MUUYVkT{CcC z+YTYMC#hu3Ipk9BH(s||Nf&gc+mWhjk1>jCm28nD6cWv|bg93#UiGviSoB=v11;{) z7Y}Xo{cMrx(rozh8-w3eDt0%S`Li!GS9^+W@Q_e45RCoa?-w08>!P?3Y$~Iy_ob*Y z@C39an1SMR#sn)T&sMqhla3>+Z+7NZoDxk_9hEj4Ry{vXIc^h${#*J^cSOQzJ@O8@ zqUkQy<5(`J1kQg~S<#^53e|`k@5q}RLFWR@1nF6*tT*ec7$eIKxOG<|<%Sv>tt*&E zh6psL8?{KCE=L@U%NS(O?VS}lOouDG{LlT_BJTg;{cJZ`K2L8^obdQk|DaT?WRuKm z%QU57nw`>neto-3Q?rw_N%+c)?IV%;^8UH|Sz1e6qywq#GT4ZE3UeK9QqL7?16p(-= zH0Km!1{({fI|iN6Ynuj}w01A%v~~AXIKMF8wCCK?vi#OYu4JK1*ZPyZ zkpD}A=sKL8gO-(^EEDeYBaWUNlDIhQotrU7D9vC0w5nF_;1LvLX(8FATzp+BN}RdQ zV_m*HZCzG6(9}%ZedyrCyOP%~;$|mhirZhDDs7|rU)D9h_nUTOqu#oSp2ywQ=1nLA z7|0^0cN-eiRpSDbS<3Z|&&sapoKFaNsMGyih|Eu)>bav+9 zQ19&@A33E(sndcEN;;<#B~kXJPSVLaaoSFtvWFH+5`)2rEXkTmB{`Lv%AS24H5iPo zB(e<&F)=b2>v-N@zu$BHu5(?__50)Lx=OBSzVlh``~H0H_xt6S{*~e`_QX9Md1l2M zr5X<3eRz*^gL*H{^HY~IY0hO!Gk0zinHUbd_FYG*?3RA_%^VVs`mjE;=VB)LqLh9X2LI-Sxw5LNhMb+>ExF(PHU7T)P@{3Jspj-}Kt*`U%MsnldE`2q*YztZ?~ZFb6wOGTZj(KycWwA;`W_y;L1%UJ^6@{{eqMXRT3!3% zM{a$uO3A9RWyv=iEexkF1^4hRh!;F1Al2R#irK~pSG&(h_tQ{!jn`bgNo*4}`9(8? z1?$$WADMcUlIXD0lA9(oo6{UO#-7u7r56%*z-nFJ)ScO~){9n?<>jnQdw+Y~GvBDI z3+f$MVx)TQksX@-Gn5wXr4uU^cS}9orT$PxbFOH1-Ik=EPwD!`-hqM^t%I~$%B%|x zJ$XLOioEy3+ht_>&YSJ>L9^fAlj5b4cj)vIzB(n|3i77XhdSkvS$JpH?4&)uc3)8* zRaU?0`XII5T;J-dNaM4~o;A~2lAe;@dy5r*u(P;Iom}I6VVEiBu*=}rjf-DvX-MYX ze%#g35>yV;;BJW?24*n5EVkk25+{0d{j9k z)okC1_!#}Nvv1SKg%k^Zy55t|tg2*nO3HvK)$K^HGG7G1$laVpP@_EPtEx`|);V(AzTv2(3c zaDd2f!~5GanNpcqf0s^a;4uZ!-h)%JvbYP^nRnQ+)_xyaA2ll|^wi0s(KOndUa+iRRN)JwY1d2V3|8$nyLby$=Lbjx+3TqirV|lH0l5SlcS+<51td`_toSOYC|x$5_S} zqj$|!D%7}Md&3K=U%=@vS>DEbM7oaxhVG&!i?+82Ijr$P#vC%LCg&aDb}OFdpgpR)_n zQL_Ktt9vnzBP>#**HHh})SIirdluVBSuM9kULfYlP*OMb7@ei18?T7|F@;sb+QA!- zigfb{voF*;ZA7t!oWhHgblZ(nV`b_ePFnZ59d35@odeYCs^=HkRG1ul77}ur zH!8pC;*Z;ZRytt$*L~ityN4p~QX41~t$AH)zqCnl>(t&0?=P*oX8+K7)d~g5zO0W9 z-+73v?vmc;&=43tW2^QRHE!&7{h-OfTaJek^$`dILT6W4moGh~!eDN^uC6?-@NfuC-_ymkHMyIQ$aeWCQwX{KJyNHZ*ozf$`GIIn8QXn=dpg&gh1W zw+q&dfbR5q#jc`KSbhPfSeaHlu@RsI`6kzhm^kG6@pi3h(JD4YhHQNYc(DB%=uXMK5C3@I z_Q6Ku{jpo+t2H*Sk`Yb$>*S@^G-z_eDI^|`_c7f{c&*V)W;ufq03%8|pho}Ha=qaY zMyF7u*-bRwglcf+_JO`z$62PPc4^&@4y3!MOcj-teIlt-ay;)(ZJPI+pQXKXXAb2# zlC*)00v!)p294}P2M=O2BEC;hfu;bEp%aq51hMb8M~@(go>GsoD*e`DFT!Y~%)fhA zvp*w~<*a#j`_(px5O(8g7q&l+NnK6NR$QpQ356NurC3~T5kq}PP0^FQtz`B}==vTS z-U;o=5hC6I+?kiZG|18>zy$zR&Fqt_H>f))gSo22Yud=lHarSwI+>>nd}ewm6yva1 z+Y>%TRbVmT1qYQVD_t4Bvgpv>934Lrp4+xEN){N0tDpdU!%W6N9uQCNJnshKE+TP7 zif|VJiRp>d^8ge;!((JK5L~w1ZvyQ*B#5v0WZ3Q{g=;nSU+_s&WCYvEo3H_dgcL5= z$o^YGrwivrSM}igt@60T-+<;R?96V1c|&zEkG7NUz=^kk1kwBd`~&qAK7~N!&seKv zwTsUzaW9O=&F9*6>#o(>Da1Cz>V&b4fc!kaWA<7rd8lxr!zYhZQpoW=(9}u>(6PFD z3z`UGV*H|wMmm1BUESULi7oOuJ0Kun=e$rx=!DtKuu~RyIF~zI!2ZK+qQi_LFmkDH zA#hQjD$s<+v;jstAW)8#SCpc$Z7<#V6-{{U}1t~+7jR;qc$lWuUpvN1QqMt zxt|$9E9D^EJs$_&gktg7F>ql*ZrmWeYH450w9+6%Y=AV|-`_tZEG*H2?wk1RnWke* zTpSBtDa;zd0YN`vVU0OLqR+~1HvetkKIGeI?a@lPbsIKlIub}C#ey$eu=38g=j|r6 zx(B(Po=0HI2Y*j%i8>H?pW~cMT$0I6bBa~2^*X_|b~eBqMyQ_Zm!isFfNuUgC$Zg$Pc2|p> z8vWpb1E5>;O3>3-KG61jmr+Y-R0*WZB-n`I;DdFZ0|n0o{TZzf_GiyZKvY!G^*SJY z=jj{?2$8RMbGgn%aE{;3jC&Zy zC-@>@Otl_E+0CM$;n-l`-7cWhX0TDi(@LhRCo!+#xXJ8+WL2f8xOm|qgSrc5e4Zuv zPFFp*pqIQYaJ$%ZRYc}eR^gyPZ~Xmn1HiPx7En=ez64{OhjXnYD)1!XV2nwU+g*Y) zpj<-F-gh@>S!Y3;WMzb7GJZ2QCQm=yWnR=m3bSS1kqqi?W%I#?`G94kv|)#dW#ZGP zk}#|*Loy$J%G|RY--SsDUu3yhONG=r&CV-pjq2#&oib}*SNv4n89LP=Cbo8sXi0d3e72Nhrn<Xz69W@^P@#J7JgMeM7q*DM;&}Y3sZG$y_HvY zo8P8X!&XB#L#N-1JZ;7YGC=~wF6FQ8g)Ax?`SmXw7y*nNg(33=63{^+h~mRe(u!Y{ zdKQQjDQ%A^*D94t(6gieQ!f~Jhxfi#y3 zamUlFvj2&vi<^@H_JF{|nC>l@7I541V_I5F0Ntp>awo83HM2)t~K5+wBE7vB^KZ;fl7NVfhv&n1Ko$f;Xn!~#GfiDT(r2< z&>i$d5^dA$aTe`^GzJ3RFWNX7%#a~#IUav^@qs|*&sYC2K9wf3n9N|b`e=^z?R3;UPcDyZ?9Pny$gR)yR3j?5Ln0TDNM69or+X^5vmL=5QVQ;?AoX*Acj2gSR4 zdjn%*#o^xTLd-2^v2Fl4727%A7>Lymi-`MBYwswV4~iD}p2P2f(NJM-zeJui<0Gn% zLbT}8Y(~~-Ju^2WsFaIT_YyjtePMxu0&~=tFLUHzZeh|Nq~xMvVeJ-@W8oah=ScnAl6#>AYW+BT{gjYVi+O`V4MX4NIZ04-H0lyVziePAM~rb%cpBL zaX^1AWV<_xW*3MAhw^d{$`fgh@yf^s_y8bXt1`*E^yny(`uD+yJU&Ms3c~`yndDng zFGCKryiR};1EcTUu}e%$l)%nXb5M=@Hk8ZWxRAsYY3#)g5~+prVmf0{87MpCcJ8b- zDfY@H^5zpnd;>490xNt0JIHF)R8McOErIH+z@a1@i0&35h3Za!kz=Z+P8ZfGi2`j` z`TTTl>TY0eGe6{y@_n#*46vD`8KnSCGM}4fJ|iTunmI1L*d<3v$t3JD6~9cG13{v@ zMHxj$1oJRGhhfz+fchYea?xP_j%@_#aW`S2l2cM@0GmaXfJDnFD6r1QAqqYL>nR8o z;n6~O$DaKDhe^q1JB}Wn5tV?A{E~y~=;y;dkml|MFEGr{kMsnnrV3PG56tcBALHL%i3D17bR7iFN9j>F`nc3Ci%G$jC?nHAv&9ziD`MU?G1aUl_o@8ipmO^(Mh8 zZ`e11bx)|_B%j*w_kK`P!n(mY2b{A_0{O2|-GivWY7+F=L^aaQ;auFhb*qGP@%Wua zuTyho_7XuEh={`K7pbC*Y&sVir9xOt+wy(N>E;n0PX)Q+oVH-H$B2=gH_Gq04Z(0$ zcOg*@m-P-Tz_0!r1pjPcFDuq2^JCq8_DTK3g8y)iI0FxN=6M)x1OfqGtO2V5$W;=N z!p{L045l~U#t6`AZ3Fpwb7N~U#f zMgE}s`hb5_g8^N(eEDNof)}Wpuedx zkT_f;i4!nm+K{>Tw}XIAd94kuWtHiE#riw7+Bt=qBXQ^)la(T_ZT0MUz> z2-pH1W5E*eDUh_&DSRi8&MUyMlWr5=umKduMWwKVp6@8wi^+)?M>y{Hp<{CZ<2s4M zrL<#^m1S-l!2^cbnv~_#(V787F;2Kgyu7^fzd|)-3LpBf+5H0pRiDalOhM){2||M> z3gdr68%ZckRKdE`@;ECZHoucYUAGj5MS>J8}TLV(DT(JuG)mHs|pTMQdQq_8^k9 z^AG4JDu4ND^_mwGA5zU&pjMmGeRYr?2F*@GuaCF&Bj&u{`Rf40BtD1QJ9Dytc#kCZA*TaT});R6K4$V!D+lN~Mc|!G` zEe@t<^=$>>2L)8s)Fhe%Wri{c4%{F75KGKGx);lMeqM9o{qy~Zzz8^^B=DKA-4hVG z8$b<3o~;9z177sY^LyGopuL{QT~Tr>O#=ItYx zk&$bzLs|5fSwzUM`Hc&_n*ZDHgiaiBpcbUBg^vp)ivRW}bIj`LURqQ2yZW8)@FPk{ NhYuR*r~YE;|1YG5-aG&R diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 17025da..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.481963,0.472162,0.635261 -2048.000000,1.737520,1.773109,2.338425 -4096.000000,5.370496,5.492647,9.277440 -6144.000000,11.488768,10.655185,19.684666 -8192.000000,14.547456,14.532608,34.567886 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 8cf9992780f73e33a40d957997baba0654c18964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28113 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 r`BD?a1Y&FanMm0^@#Q(nl)xspS diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 9cd2c98..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.458480,0.464732,0.609373 -2048.000000,1.689842,1.773986,2.237333 -4096.000000,5.108080,5.088000,8.947492 -6144.000000,10.509498,10.850305,20.380268 -8192.000000,14.760106,14.632447,34.841118 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index d1c56760e34124183c6c50f9113c0396622fab20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27430 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 A+5i9m diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 1af234b..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.551196,0.501013,0.631803 -2048.000000,1.677475,1.770744,2.353120 -4096.000000,5.462912,5.429115,9.106876 -6144.000000,10.608454,10.543011,19.638601 -8192.000000,14.735019,14.596607,35.468433 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 92b42bc16d8f17b6abe2e09a096f3abe435989cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27033 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∓imVGjP5@3 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 VXRThF;x$R6V@EVq(+?Zp_%G&$*H{1m diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index e79127d..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.196295,1.214626,0.626305 -2048.000000,2.411008,2.412156,2.391395 -4096.000000,6.387328,6.035968,8.681062 -6144.000000,5.965141,5.595478,19.403021 -8192.000000,6.159360,5.892096,33.856514 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index b4956a65189909d1eaea12036a620ed6065f26b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24906 zcmeFZWmJ@X_%%9!fRZ8-l7fQLB_JUfAQ*sx(kTMc-6={7h)Smd0@5MfAxJ8qfOHL= zLk)SZo9A8U|DF%;TIbXGbX?2zENAAf-|vdO_qFdQ=!v2nDG?nJ3WXwlATOhgLgD(L zP&gB33E&gq-y<{dA2A16bq5t|V+UsgJ0p~WfrE{OwS$G}i_1<%cJ`*$RzkdDyaL>p zUpY9~*o*V=S^nQY;I+0h;p@A!$^s`jXCtp+k3x|fAb)W(r87)XDE+brGIyT2B&>`& zyIh^OI1*vU?egLgId1KL33 z&+vLdC5i(6aA*N|{uFJT%k^$K~f+qf(j*Az6|Niab zQf{ghGx=rA>%cPA6@$J%+a4L(9?3<|DDJ>d&8NGpKK|WY4bLWSwQ8+4#4Qw$kSw8? zTp{j;X>ZyCm6jMXhMP}%H&PpIhN$Zo|72r&AMrh{^YSEVnn(?odNEP|+TveH&{u_c zTznBg%BS9sPKixfAHZs-htgFjpkM3l- za^=n7pnB`3lJwCh&gb8L(%r;9mkH0jEo{8BWGij9zEjPHaw3k zqp3&}KS_4Tb)KQ2p{s0c5pi+t(RyA#37I`^YilQ5IYYg3v^(BcVws)xtxx+w#)qd z@6#Ve_f|Qtu_o(1Bi4WXxD(&|HA&NDQPJq?>go?-XKl@sl9F6pT`L^xs3;;j(oyqM z89qJ6Wy6WM+6EgN8z>oB*~DFJZEfw|{yz1=c2RM$n8W=0ed>onM6jfsoJ7pb%-N49 zC?bg3jqoO#gD4k<%lL%N`X~CcR6KTuOmZ~82OD)n6*{l!N*yc7MV2^(uUnTIGA2p={i0-_}Sh4qo=25@dNBJuH6u7 zFZtwfu6pUkix+_*AzUBD`|n<1Q>as6Wwoo=dVtg}q&m$OJ&qOhQ_a=X(D{M?=iBp; z0X^@UkyRx)M-B%n_)V8_)x-^>_D}XnnEBN3q8BYht%rdWS7>j%dJ@|&Vg8ppV;>g} z&$RDr7d|0|m-x#4cQ*Yq)6@5A+_qg{;eK{?IrcMNxbVU>6s|X>T}qy!U41WrOpM8U zqlM;il4R`Lw`W?5AOu?toA}#0Ivvh~=P>S0_{mc?(r8_GbRX7= zCp%jyS*kNZ>|;(2H>780jDX?#&W`a^b5P5eoRd?jzZ>kL@@MMXwt?^7IXs5A8nh5; zJ?u`D$kMJ5d=$m~Ss`8oqM*pQi!MW@UghiKNhDDleDTAm3!Z1I;-D?Dm5xjPb#>B{ zlanLvYc**Z84|h@b+hY#)b!XmIfK{NZGODFbWc&S8{eE)+wf?A+w~Ybx3Rvi-x0+# z=c%Zyd;yBYRfyV@l*?8Xv(#kFQp+V>Ut~jG4dgL;d3im{Qud>_Dxa)AIGA`te)ils zTeEZ9+uLk{f*<09%>~`IUb$_}H#GVYYkW7OavpQNmX(z?SCaD=HfJu$J$&}Wu|MnHt5=y*(k(gp5XMyUs?+S{arNGfwjH@`jC!Xv4xZy=S?{ z(7M?rI&RZMD#~x#d)2rnNx{iUB!q^K*Up=-?obfR@q?nuSr}ab+?wwsJsk2W>S|`Vl8lLhZk&n^5L$@hzM%2+l?^e*lv(2n$tOsro zWD7&ZCJ{>zh8w%P*SNSs+S=q>H^Zg&13Nn(BNtD9Xw2A`p=46;gY!6EBs4JaEb8vP zd$CfU;!rkjnDqxPy-CISP&C&!TA3+nXyp37Duj64YT{Qf ze1Q+aG5wm5slK(fHOq0^0;=J3gdCID+D33-xp)(5RP^)K!o>pZPo6%Y%2| z2*yeB6vNiA!4;!3E#1%-Vc58`-|*cE*m@h4~kbC%TxzWwy+Q|PU~VHI`VSA-FK!>$nbY-UF!J`|sr`aB)o!)RWe`QNF8j*I=1 zA$+wq7WQ4j1N_db+SI(-@=#Ic|K`%eL)k|hEcItmj(cE8m87s&PmXu%LY`xw;&x>| zO{Eolc@|3Z>}<4N?H(Qtg)N1i*EywIM!JVAMyJkMW;lTQBLw@tb1jb&(>2#?{`Z0M zcN>E5wRXZ9sww^AA>Nw`v4XP+bCUb>sSp5- z0@5#<&k~T*Ju?;_`1ZWxsb2cS$nwp0u2>1@RklCHW`8&{rnh%@GoYncLyJj&RudR# zF7A4v)QTr2Um4%SlZQ(#I0bc`EP#yB?lFQ;?%cVf*umtv^|ZCr-{5_G{3EC!&^xJB zNqeLYxZ!6nAl*yM2g0D9tWSqa>-J08+1W9KQ(m}m(_#KRl618PtA<j6vW*L`1}mSHFD9AP~I0y{UOL9md>tR)zz*jHe-XQy?E8g*O&5lErt_ay5nF zuCjEhM98J~E`K*4Fou#d=XpeVO_ASXkRKY%xwB_etjBAY$7+U6spqZHwUxWDI$Vdxw0p^nW)Ri+wkXE&lA6VseNeg;n}d1@607S za7d1x#5q2u8M97*7_B;umE35itlnSD280^$>(>*xdOVE7dKjaG{G&&P=+0QwTR%T| zoI7h{H30J=bG%sC*!!Zsb`cu=OTe5YmjvGe3>2`NX?rm+ zH#_TBRwfFt{&C!mtTs0?Cdv7mQ3JZ}q0k7Y=jP<@-u3OPC27(hDl!7#|GU=n08@(w zTsT8ctfCdr;rNw?goD|q?&&%-7b6%`>skoyE8qph>^ zCE%84`&Q*=mHBxwwd{M!So9q<{tJ1bcKHPLx5r$*bKr zLrEQNsQ~(pk@l7n9rqAIV2|Z+>Fi3`xRYc)}O9JzBs;HM@WM$ez zjt)K>D_{!q`O1g3UsHuC;&jNG4wtUTN}B+JE3p{rg=Q}9v>Z5UJ75{JhC3c^;{AIIE=bi~0qMLyBGZb5)`RzHN#1~7YFmXb;W#2~dd zfv4-SA#2@Pu+1#`9YV)QdyqGUzylkzgoipkoo2O#Md24Iy4A=NB|4}PK z{r=3SBX%7;VUEC$!dk;`?a%^YKnNaSG7D^?((w;$Sh~~7zqfDSqKvQW)Op?Ft6s;2 zo>d#uWV_Dik#sDnS!UG*n}A(!B8Nq>EDXORlP0NN(Yu^f;#%yAe&F5ME{%ViSlh~f zbCYwPT>ZlV&p9b6sktpn^O14^z&Vh$O%#=X^K?Q20tiXzMY#WZH8nP#B_`&w(~0DK zo~f3vTewuA4r`hqX8*O#F_d1E9hm0!(tv~_4zq;QJ76pTrEqVDQ1c+bu16Bn>8h8C zP}ZG)=GxHTAdCb(_qRH}X~?8;*KGK^W`xIEtL|lAhi>ukS+3^y!6GB#bLY-6+;aPr zkig(i#u%KO%-j?}ZUPUKqh0ZVkjceIVzs>K_ennY5>|qPg9Fe(vG<7=x;wF>mD#%! z@Jh%?sn^jy3B%3z5m)38HX~v^)(N52O{Jzi>Cz3=1q)eUesX*OIZ6!0{UyLDhFjT9 z#%~Bn)hq1SP5^A(;4caM7E z0idkjuL|`0yK71o7To>@1uh#eS~*sr0jEX~~AKtGBbl|j+@g?HME*7H6>dYgdF#BHyG6;TwE*Pa1% ztmcsl`=F4J>4}CnBQDdS)M`Aetjbcztzy$%zvtg4ak^zCeBJ?YaDMeB5weR2vV!t8 z{WabSSAVWM@rKn%jN{VZ-=FUVyjW4fyAwjSRmH|?G&ymHR`AT22c>3NX=U7p^w%k) zY2^Bd<}}yM_Mhe?VljAIQIQM;92<*1sH0~6nYIn6n8-+3Rn;g%DTRT?kifu@;4uF` z*~CANCj=W%u?YmfG(KUx6%%EH3(HXxv{ z&f9xub#zHx+I`0YXz5Umdzs-7NMTAq$!>b?mr${V1h%og8fV(y4H&i#_z?;?=V3hD zck$4Q6Lc&D*NlygA#kmbmxbkZTG~~}kViFP??~)9J+KN+r4>0(XzpcLuI%_4iHV_$ zIy>vecQ(zt^bhwo4)>Sx;YeI^a&izE2$sET+6oMs<_GebL3d$;N@iV)^#{!2g9wB^ zK0Y6~0Kqma< z?z>iqyZ`|r=C+lYI?Knw5d;(%2N+Ac_c4aqZFjW`VIP!Ak_JXUA;3stV{MMM*ZY+C zJ;mQ$GIW$xj?xxE9nVRhR7|)5$ry86;(@=pg5NT4yH#SXCxz0&ZyAs2{a(s(zRK2e zI51wPKNKUtZgkSb<7)hsrAv^O1&s3Ec;)D*O|ZG*)pc9>H;SRaLv9 zs!W`ca0O5;R7IR$021s8dU!n!<^iazC(MO2OD93EinfY?BY)f3ch#c*d`lb-*B%MM zO}UwH)7BRtc@fZ^`=NA3j$*LIjjQE&aU!6FLYdF`3Jk}2)RCs{aFZC?&{>f5N|4zB z2TlO_z1epBD@xj~>EE~Iu?Q8ypu37I&%l>=Oih1Pm5G@(f02Fi{o5a^2dg=>(*qv!_%rMzzl1PiKx4gWAR)D2c9- zlGDv-1b?+fJqp^@bM6D$UD6U6nEmr4aq}h(H9wN+{*Xv&U5!IXR)2^^zvp9>eTw3i zjqo1TyC!`m_|x0>@6WfcMFq+mNJ*h{$E5a9Ox`1lW@(bemlmHm{Os-RJxfN$E-W0G zl9Gb4ijIz!Q&d#Eq{^PxK0K_&B5#|C4VVUs)z&49R6UcYyPJJSqEQR1-gQh&ItS!qGYA$QXSee7r1LrXSmw ztWEYE>HnV$U0spfU&?wPNy+qqBfVWUcEh9 zsj9}BcNbyxX$<>&hBsY{^v4DUijhY;!VNXQh=@2(Lr6$|cY6`i zX!SM^GRdUo7@6baKTmg~AdlLX?{q#%?SfHw)q4irSqK-FJN?M0lV5*Dvv^JK#TVof z%FHnBj1V*~ZZJu1=n`$3Xh2RVe|kcrnf@%_)}$nxJ_WiZrJTtk92-!h5gh=;FBPEA zfB|I?9w{=QZBGi!-jq(*?2{}NY%A9zMG@0CrXM-@#f1^~-C!3mNaDjA3P0VdgLa?Ku%`(iJEB-R#d` zfdQUQrGqUu`RO#RD5rxG=C$_Yp6J^>iQ;!`3gE%2pzhTdr+@v5d!CvaU2+IAG{_{J zH_ZRO0|;Tazh%nR4oA_vq}4B@=^S^x)}L>!bBh(LU5a184|K5Hc6xrW@Jd&luswI( z|7oW7e8vlUeOr6GU1vrXsh*4s?}Q(X{*vn6{FQYKXiyQjB26|&d6`hzjDLP$1C_&n zk*2)0dw1Mh2}C&1p~(TK-7-1)-)CwMpFDXI^cRF9s^Q}!bmFa|VuMv}Ot2mY^M6_E zwA5oAP3{9~rV-3Ma&&9rK-bf=8GiSU1dxhGr2_|O6H+FgPkDS`#AJ0ue3g}TuFQ_@ za2@Y)l7%Ciatv+?aWbw5$s2^E09-2sdQeB|jrw0>HmV8;a~eIp@ekZ8GBVnO-v{D8 z%DYY%(Yyxm>kr!ATM&ibK?ERTr=6XkNp}K{K8O^OyCe2UOYl6{DYTiq3jppu@M%EH zel35XFUdMgphy_b29Rs%1hx59EOY1&yZWmpi`laSfdruxZv;TF#c*jTJO|*z@=1Ss zm(8EoLPi;K*k3|kFaI+)_`^xdkD}%+siYHQ_VlWsna%F0$BBd6El|&ICrxSj=AgND z>1jFGt*u>7Ja4*PL@ESb#3LAMK|a&y)1v*Du)AGFLl=+J{?{G&nD%uV=rVZ?E5N;D%%~aJV>KYWdBvwG%eA<5TO9KbEL=({`XU> z9{$e0nmc#U9>b-7|6Wo4cPgchjD1wPd$5CUVP;*ujV#5;zaUC}cai0hbLM~5bwcHb zPKlPSIV`0WBeyO|**G8}R-=1J$(f4U+$3UB%O~3%GuPo^HBvY|LHAhAuWGTwz0^OE zf$I1E`$$EpA&hZ-ZyHTi&$@aadFtks>XTZrnT}5!`o$W^bxzl|OeO0=H6{!qKwS>m z*yhN0}w#8tXoOGn=^X7YdyDSR?20q!N z#6eskws=fT>zf_Wy_CI9Md$Lgaj!Qf$$$8f{)_al@`QIJ^8@4`KGYA>vn!TVvPNvm zo<5iz=X1fqt$yFLGlLbR4ny z7n3F*3gowdb8h-A0?(G&fXGSUOOc3@yMO-! zsF^>DYwt5jdBni#<{uv)gYUt9chp(P>(B*8(%^-ef*I*$ z5s^}LH58Qng@Y+#C~Q(k7gwvut7~%e1n8RjO$0X`+o90I)Dg1q z6aCRXw9x|N(A70A4>5e(8q`M=A zP$pLukZPiA=Ct~@!k!p? zZQpwVDF*i-RU;aaXH09JLHh>CHEjKsL)X>Ts;aTG`eh+wv`>Nk&!8o+D{!i#*Yek| zDKkaJqspyD#cPlE%`=ROO?tjU3?VfFj1|!k_95RWA$~DOyCC*gW7!#Q>cef?vCOig zz-Lo@2y{IRo2yl32QktIlh7ovH6S7v3_W;qptkYO_|s4PQ8U;!3k(8WPf_vSjuJIJ zJ-skiQ)TD{EVIOVJPGhpGB805I^KFyFO-3kRXLAaU0-)Lel0>SMS*^4ks@M>LlkEn zBvVjAZlb5Brsjvs@(pWss+<^piQ!X3*iENL>;Jk;D?+mDge*eHQ;^Cafnmmo0=`~s zJAGf=VSYm08w@Mej!p7#M5@ZQ^^MmAq`)O*cvUMd5q#CF^Fn4e2rY(KxOpx_08dx1Me9vfwm*n;Xc=hmxRY*;UB6XZE;Vp=v0+@Ai-*dr3XOM zA5~nSpb(4iBCto-&-~=~tb`8VHp?lBWAishqd!OEBg}?Wy6M!ngt${Y0=&WR#u}NWwvz;jFWD90YQ~XON*=u zxxKkEUY86~iU7!OcJ}sIC;T7eeV#{1BR1pq;xk<=j|{^N=r+# z8`!_bI`y#jgo()o^&?#L;3z22oJ*9)2ZB!;apkeI`y;cj9_f<=Fy*Q1LeTd+z^SCuaXVK;WoPXP!QNFJ0?3 zIb0o7E{JRobv;aJbolpz0_A^VCka9Bqm`r`b8Q8`ASL&dRJ#Hy0n9vq*Z?nt_CK?C zi4LV_xq{caozylVO<;H0AT;6;kX#lQr;G3Uafrnv z{tc%Uz>V)h-`HO0YmIv$EA#M)YShs9+WgZP(H>-OmTVY1jv3T>%gjwpqdm zucKq#oSLqR-f>=_;J7th z8tZvzRrxa^JXjev-9hY8o$wifyVfT$INZw^eL_qDYdfZ(w4@vT+& z{O@g?go~PjL-P&6uk7ecxb!y)pp<2uMNG%4G*ACoh|og=HvE-xXKoY?@st6wzXudV zn5WjXSq7WoybB6q`A>}bz^f%QQ*CEg-$yBVyieziekZmzZD^^(N_FRdOqQiQJ|@{J z8D!7DJu`s8@7(B*fq`i7s%1O?&tKwA9M6NsnVC&OgtTHl4P(x(I9jGei8U4 znY<5e0f@-KP4nbv%FL|6=m91WTg&Hu|AvmmN)^$ugQE?OH<&W7h;;;zGj{`H1fSvg zcoEAfaOKFz$@M|COLAWYv5qzPh;H%TWmcov?EDlZ=CfxD0I~)vC6DtmpgMfLUc=x` zayJ1Y1|4tEo#0C>Ei=H&x<1_Uyac!{w$j?yIcKlD_pUjA#|7%cj-j|7bVA&XM5p6F4^9w8|222tm_>y)# z-}`kmjpSZR1^12q1V9)FIgr1kSFz=2?nQn6DoO1#TnF z|KaZ}mG^N(8yje!9$1RkNM-o+2xLc=Toj!$e$gSo|bb{m9I$p=c>j z1(NDNHpBL+?Yw%?nGYZIk3Eo^;D|$b)WcuIe79@d*1bM@S6*3wc>s_KYGiSNAUjdL{ZOK^6 z05(T1=_s8^y%S*9cYf z{dZOXZ$jK4&i;!kAK8Cp)1+nGYw|~S+-?C`3SRi34Y|Z^~MB=e~apwBFR+&$mdchd{FcH?e*)ms$SWRcv!!IAIemNe* zlIU7b8Z= z`MfBPoq~c3StG5Rc4sOb1oF2=OOeEq$(aSo4{U!VFy@$_e}$B>xgKXtYg&Sj*Ob`7 zbPe_l#Ob;^T9wP8D)UgshW`vfTvK&gIuP){!0$i`jbFa}Rb=!C8LY4lfE3?RjYY>- zgDEdZuPzA$x!+aJ)`CJp9p%at9K=#m>vbncQvOjxwmI;-h5zLK^ysjK2-w?OQ|`P$ z6>sy2i^s_^xxSTS_Ppo=_y;OU4A=z0@nc@N6CV|IA7}}Jneg!=Rk5sg=Sc9rDhO#E z{Rji$f`UT{;SM}LG#_GO=6P@`fFRZL=!Z zmd_^Mh5;rHn8Iu{nJ6eG)zv-$@&zctfH7T^zp8Aty+n9L4(zqR(t-d|1%BeQ8p3tS z`l^`t(8i{~FgOUH?NthnncZ;~(E$&O;s*D%hNE3Az*O?CGf_DFf`S)(n*7#IwgxF2T;Y7b5&%5*M_Z;B;GRsjzht5G9riq??XIzWWnMxsU8&-^#i70;1RmD zhVk(9JO{?>IGHq$wl@9%=b`FL4gz&RY%467>$kQXz&tY@qXa%!aE=rd@WXt!0hCS` zus?&bT?*zY=&Xz+R&nuvw&?|d&$vZLP~#qkWLwKi=14Nm#&;0ZBV%iD)ch5Y2Fi!> zhbj-cCIaq$wzW+FvYmxW@37b(1djiyxjB>PKUwW4lvNCRuexl=wpqVh8|e8LCnLj2 zR7Oi!Q1Xg_g<=Uh$harW_?n{ifcyqNy9$)O4@L&c8#P-OZoJYj#RY2KVhebIb;>P_ z$&d4SXRGBun3=qeJ`N5F)V=}yN4~(^NAOd-M3Mmjp*8g+oQ zSKSgH7^uzU=}jGB$9EZ2#JAtg4cg8lx-s5;g1k;9dhPd`+A!RoO1 zQcAa&;9u$YQrLVoL^YhftE$?-C}}nT&W{v3Bl}EnadT)OcE2cbTU=nebfO~n^lR~n zJH5QE#P4SVjzN&wBm6TlyXy*%Z=7_|Fp!AEJ30mhmJ34ia;Q`}Hqc)b<(HLkQ&5y4x01ftMvbFBYFHco z(fCP2kY<9C#h~Jpx9leREDcp!J1VppJ z#O?VZN-1obzDB+-dQ{?@T3H@1vU_l-RVRPKoP@K;+JxY=WAKE* z;@VJjuomEXF!5WChwBlvY9DCT@o}Q$Q`3`?YD7`bzn%H>O+)nq6aWg+GdxoSo16Np z+Tf49JfRTxa%ahX&%oRq*m4ol8AWXlR@TG4>!nXL3Ua(WU5;JPlAqp5p+6LO?I%`w zVsAq-GQ_-xEz#;;vqxK2Nw>n2kN1M`&k?H^nVee~TG(^NPOi;bA1|$}NqX1LdJF0G z3o4N-Ws~d4q;N2=dM%-+QHS`! zPx-<$GHdd+selJP7;ERkhW?Iw-u|*_%L{zrfg#ui4U=c&$f)N8t( zhi|dmLp5*TC6KgM>W}O1i_Z7d`{QL%Xus(kdE7md#3Cfx=aFFl!*oatGpD87>=AaW zb)!;jhrzDM{$`}-x5wVpNg_Qj%JidTmQ0ST%K}6}5_%l|y!~1ee*wLd-AV;b!sff` zy3rqnxiv1s)F#PzbR-j%1OpmJhIV4GSybw()E;{*%|D>-qKgU*y9y8QhXI_oXOO>D z@B0>?TVB2Xn`d_0_c`&u&&j`a!`)r#e|28R+^HpLsjEG5-Ne_G`}p|$)b7CaLj){0 z^yE)G+ihtto})U`5pp(6*1xxUN?MeQFFS?cO8C~YLvL{(->#g;Q%MUZn(-H|5iG@- zMzu+`vz#ty!sID}sE~7a*)I7$T>6gL)ku=Xzt4e+!o|NGL9`qpH<4Qg@`JrP4ZqfY zdz0lbyj@myrB1+m&I8#4|9kWae?_zZzPm$8D3JO4vZkEw1G8_Tzn<9ZXcCan>hBnF zlUZ8}kn#ztu?lu8HXK%UNR`yZOT^)gEF?t#bc9u?(?9`~6<>nF~~+kN4fMFKF*) zmC9VA_0}t($84@Qb~F(y#b-=!_^~U6zpzs4JaTn)`TgBkE!&%f7aV43xMKD{NMx}Y z_N`%le#D>MoiTY#s-ihFLm2hlR&lxcVfPpLhKZ!~jOGq6pETVevAFTx&0rg~w;`9w zNK8S2|3;Y*KUR%rZIn1R7HvzDBq+opQ8nRcZ%4GMm%zt{|2NNZj7UMxWw98N?M5WZ@y^ji{<`O z{knw(W8#ebwOKz!{(G*fx~f@kyX)fl7)mzpnYp43Fy%QD$~l)`a(U@`z|k%-4A*0{&ljq4wK50{+NEb|Xz>@t!Ii!ltP-X7T^UIq{RtHEEDyW@O8t_vrXfmaMzUm>1w08Bo;T{ zACnTi|DYbq_DCPYk|{bk0zPs1hl0}A6%#qnmKB@m?KxsL6PgT+*}-vGP^&<{H-6H+ zaOpw#_TT}GBIRAj2lQbxwaQO?NPi$kG|GvvXGRn zm_c#x=kk9SjF+Z{GBU>IL`m04x~4`VTzxlj$?Z?r^7WMQzOS(?6KgX852dBckKJ765`7(y_G2@~ zO}cOBQFdyP93Ntac#=d8k383RcN=>622FL|*9}c+-K^G=pM2u@nLjd-RM*Sc+_Dyn z=}I1T9H6QmQ<84joTZ`3Y(z9>;vET_%N8TAN_m~vta#&viC3$OU0Oc@b`d1X3z*s- zF!*@^GZ)W{@;+hIb(x&nAvPYx;;i>`V4TZs+S>J^dyIun(0hB@E}Vz5nU3b*wth7R zlD2w`tNBmjm8Ri?5u@!Ty+eWa7N8#-0g8#f3w@t$4U4^*W0(c?Ja9xuY_J))e6q@B z7l@sB^}QNBrgmDy92vsT1sgm`g?zplIPozNyQ*b9<}zyW{5r#@!^4Sx=3RyyIp+9_ zQ`5809n^nX|EzlExD=NwVFH#j;<6{yR3h;rj(N^A@(fAdQRoxT*HOHFI zPX_wrm;~_pD;@FICc~vc_n=W*qf)!slaUsqXVpur(>lH4xr#aFeTF@dux6$=x6-R| zYbg5ny-Rhuj@Z~lskRpXzy*B?V?uEW8u4>3%uyG)Vf1FpW|#!geWo@VIyX}uALV_3 z4(*>8`k=`GwA0d&l4@t3CAA>qy> z&(%$<(N2`@XCJqn%KF=LM@$mNrEguS_TLr_1(SKx5Iq+*yJ;Qo&H3G?hDWOr%y!x_ z;sv`r(3=4=kLR(bFPcCwV9UV+=nHE34ancW*0DTfs z+!Paeq?bO`J69H8hEjyrR^j!gAEp{$K^)TPccqO`-kgoL*&PKD&2^SOCRarI=$S~q zHIfa}OvttehvzdxiQL~$Y$E5qk6PRz3VzgxBZ=&@?$|}%wn62Mn zTX>ysKj)i`E6Xd}6*tFAd`{pR1;-^TMifq*h-JI;xaVBV?xx)VbI_+kSRk%hrxih^ zfXEh(Uc-#=jqSXAjrRpUM()vKI?WVl=KCjZ1AUFO_ZLgUM*g-3+z;(^eEk~jciq+& z|6p@hG{6hYeZfsDePPkjG!cI8jlrM3T#=jjKG4ZE4bCg=za?2i97o@>AMQ?td0yKU zUIqYO@c&Drl(eUBL?>$V9^iZiKePl@aOkSqc8y_ua)<|Lrm-8P! zc1>QdXJ~?VXUex#?YWCS)Y{AC-HH}|U>;LvFGYNTx?pWas#Tmko{+I|UuACamEzIg zpzmCGVs8CdY*!qWcHwa0bcNv?U@y2jXQt5bD)}{~q%`mt9%7PDW)M&M|88rUD|0Cn zyD0O9;5@UQ8`v4=641jn;}E1bz0l=`iOF(oZUakQq@nq9fEqX2g`P9eSo?@2$o3=| zPb`gA>C1QnoBN8&RH;|Id-v`ukhI;2#wUu;>*?uv5Ql%|u#0NkoemA^bXhf zA2pg=`njOqi{RJa?d|Iu0>`~`!mUpgZR60YTvo;G^@qcy1f%`@8>4v8@2S~rzlmyGn2o@}i41eVG`k6QD@w3Y!z)l(n(ydUzMa$9v>dYt^D`-qEsOj1d}(vn zl$K!Q=SJACvf1@0-^dKsEZZ4fPUdpIv`|v9NHeeKgAKXjS&E6W@lKqt5)L-CslI`M zReh%kd<-wi9!@i#Ou);(08t_p6U8^cXGH}T6Zheo;cDw89~`ttN0c$~gz$j2?q0|D zxy`0yW`@sv9Kt`fBj$oylXbF^1V2>k)a==-J^w&-i|r{fsuYGgfHi9UM3$A)71d9(40 zP6!gFP-zs6t=I=GCk&pjr4S8>mM1YMxkZj@-4ojzuy1VY;&MFL5;)=c8S)T}cr}3h zwBg0k`n`<;XTHPz?4j14K1#1+?9`j_v1xatgkUA+ig)V&`G(xIJ3Omia`B*65vIJc zNecg_7bbrSZ4?aFr9|diYK`vcg1YCgh@(d!%u-cr*xD)Oxv&6!QAMP7HIujHOCQ1Nwkv=st9YkEY6b|KKI=?oX)1EWs`xF*A<6+9+WS0}fc!a{D=9vn#&h24+K^{A3=EX|j=@5F{8>AZc3-h5|z zsgF>zjJIaE5jjf$Zc2Ijr;FuBPMA+?wVuZFczc^27`<18b9+q1(&OFO9EE)f3vb8d zt{jq+F+3+s-A5dm`*8;O)_NG-s?VR(z2regYyrox6$dxT1xglSDzClI6RM_uP00qd z7B@>8DE7T1Ht88m&y3d+Rd|)e-;8)oN+<|x&!oQgz{=_lmtIE{5@ivaVE@uiGN^Bl zG+r9hvW}%ub8&6R(KydY`rVwyB0e!%VWjq^(3YjvkA~dshJzdZ`=pT1FP6&C0cCkj z#zN|L(>-qk;(N4eweOW6MHog3ylc(pFj1BnO7~8Vf8{4vR2#}+##J;j)GJLmFizbj zzr!USjE_<5Yz27c-_4Vz;F-qG?X7HOkB6VHJ3mJ5v$JCP){m;%AEaUs*NA+k>`3rR zExBk**|<9yILgO@jO!Bs7V}o%TzF@ar5bbsh-+1QQDF3RAs`} zv+5#tFNYWc;I>QwGDd%hz!|M<@F#u$USD^JczwjaU}=z7YDgeiOh}ZXj-AM9_w`Zo zouuSxtnQdor9&6qjN-Vv z*SB^gCQ&}W6@YV8JwMQMzs!m$+QC{640pjYI8Qjas~FKe0nTFrC!}Zj`KD+$2i;h$ z^qP-4$n89)Yyvl4n>$aeOezfI;pAXBL!8taQjTlESsO~{njH!MXN(aTvOH6FbzPrN zMceQ?pNtzHuj?pE7R!_Gb&X66KH00e#^SmiD^O11xwOqT$QQFLaqN|10`CVw!?;d$ zUzdqn%Q)=2^L#(cn8qPqEXDIl8B28a5be9DU(;tJJi`PECU57hxC;@AqkB&(HE)nLP~=@W&mGm(!n%gpSZzNpx%hiEyQV&(@5!LLiS5=zenN&Ohrk;826Ww{I<)A?aJ ziG!&?nVP$ZN*`(ODi)eMu=H4ONj_wt>5jc+iIN|65=M!vanqGx-^AyUzuZ%x=+9>+ zd#j~hhy)JU+Gl^%zR4I&EcIi|qTiePi2Cd4a^=SY^=;x-k>fvPy_5e8N9;SOMt+Hs zc%M|xjeiD#`yw#=_5_35hpQJqSke!Est(fIS<(NgGX3-4IGukrQRrM#aD|OHiKJbi z)%Qp#&&k)ri+$f7+&FK!%>su%dj*g8O|W>`{ znb`Y&o{mT)eq1ac##gLt@J2W9bqRW9L9*hNL3R0uz|D0#ZztIP8k8) z5xl%$YO)Y_kNaffEWHRiqFm^$ig$Cp^s0}W_o(zPJT6-5=19Wgoj<133>^{p;dTZ0 z*@>f>GZbp*1}%hR#i@?B`7$XfUYBKH`|EFmIILl$sN+2&X*`>*6PAT4d$?f4-!@XczpF_I;9PFi${P0f#GP{;iQD zy!fS$(G<#Cl)k%^+UCrTbm_l$9`d>AFy2XaB0aa2+uX|BRABHc52lRv4JyW6zUww% zW8{3!8IlUtlnMu`NlaBq7XB|kS^@^K#Ky1p;?`>g+tDqQ2HOK1d{711cJ&gFvv9g(V0 zL>)lX2#Sam6p*U4p^wg}v;-6eVQ2#kgwO^MlrrbpdhfY6Yn^*PoG-3fiz)lR%lp22 z@8|g`p6uoqXdIb6{OyjpPty}0vR)@sYa$ngO-^i&2reJx-1BpL?7%70P3AeK2U*Z^ zyPYsg`mS!F9Nrc!1Y=6Brl|+BWT=k+a1HgY1>i`)rw;Vcby7^_1@5x2gs|c+fNJJKjXa z{nhUCY4LnNHGRoKuSVzBw{~PXq%x_t<(8fD+pSNFuAFY2k`#!rbAMk~CiGOvwnxCX z%l44994j=wm}OU=ca!7roBmjx^zpV;`T0=l9&dVKXBuYk%tP2D)Ts3V$;JmJhPY*N z?{DPCCU#mmw@E%XEL4|KZcX$TIZ)VtH1pQB<0Ij3PhQj-TuoO zAA9Y5YqFC&&=zn)a(88%u7`ZHD77(d*C@BqtiHKu}+hX3Q~s zZmrt)2Gc0yl(P2=<;wkGSD;-v<*@tIg~pP?9a7=h8T&c8%h_sIn(_;(S?NxTf<2~7EwWeSycaT)8aY2PtmQCC);n!Ng4cB7Q@A*no^Bj zXO1FF8`%4{zxVXvr9ApisI6lTZI($ZT4K5HykN0a?#_nPBK_|+B`?ezhI-7@HKvU> zRx$Uc!kTcfx?pjM>mRt49wfY^?xVPDos*=5b75b<WhSCX41b~ulxZ*+nXL`+1me61hgBH2D(94$Cj~yZx0=2ZX2<_#c z&lpIN19rqBPR^O%_Zs%=<_sH^8*28a8_usMt;>GlE*0$@D6z)oi?HTlTG}50M5Dj- zUL#fivy4=!H=BqA5VZfB{^vVa+VAblk) z8-%(Mx>#HL=nVmD#@%w;M~LJZmI;@Fwmq(?9v&V5g86h;2^G<`ELqtut$Fkn!6re$ zCf=JJS>942>DDQ@gOypaV&+fr^tDyB-90_qaSgxMt!p$aT|%B7$KedJIb&?jbn(4; zIXb;?zTdx*P1ad2^PdfNGUN^q*J3{wo0F6C?$LF_zkIH`JidHu)2?--C%nyxsPz9M zAs$(FILDzrN=P^+E{^G5pc%OsmOdTrtP#R@g`@}voaxX7e!*mLS@GJ$WP0{2xL7^d zvu}j3$Rimu^*1nr=I7^QE?(?`uU&0q2mLPktSQ^x7%&hkOnxF2f~nrR-PPS)3rcb* zwZK7eg#t;=G>q+$3==H@J76voaX4WQl$4ZMw-dCRN>14-OcKbGSh$VeGdHew9AQKf`(($-D0Vk?-lqR)vYx=Z$`P5YjIXTa|RI@I2SxA8|G~Tkf zdDny3mCH^8p~xKUpxD%iPp@a852e8;B`tunUvBu|!GlODqAmatF@YeWL5kRczSr-B z$1>lj&VOo@)1Cz4K^}zW%BH5Ba15sc;v}w&5y&GL9$He8lnWLW6VR6v0fWC)7Xv>c zKkV=CAB#g47_Fx?V48LXcZmJ?z@tl=5SO#`Dg}#liIppzu;Mz|72))Wu}DEXmb4Dm z($8ruTQ)dnv2Y|a+0RcV!ZqMD-vuFI&&Y@u+&m~8T1`d^79hDaheenM>95oZlc_5% zC7B8W%uO#HulH}kkh$Vw?6OwR=f%%gh$R&*$Wkw<2B!yg9bS<-RdX{VJ{O#`dHW&xS)Obcyci$ zFur{6cI@kIbdEPPZ8GrBUvg=CeQlFCrVbY&S6_^w0osW-g$XZOFPnI_qU+tYag@Iw zm_#mAsCuBn#1gT;-s+838aNd@^2Xv&7+NFZ^y1}9NOl#{i;9XgaWlly1J6l=;(|#L z?VQxp#$YgZTU!TtYJ&x-48)OdR=n9_@$cY}rMJpxxyC>UGuCAK@bW4dnG<0+$@TW{ zKp4>aqcw*L!(7MU`{$X;lv4hL*}_yanIM<#cyCxXv?* zfW$Bvf+M&M8ECfUo;^$K1jUlzO`%;S5D-1V`iH1|0FM0Ntl-4TKsfusR@~GP*lG`2 zU}9uf4)86I$5cadO~ESDKG~9W4=A6gxw5hBZ9=)U4VyLz8!WIIQyU!<;bX(fzTFZU z5+Xs&g8P1)+dMCGIKO>_CaWI@B2N1C*aFY_bw8{EUPHaf#n{ zER{@m@a?4az2)#%@97HqlIN5gd5|(i`Dcq7ht1}?*n`tRRyT=Ch7t3{&3d~=9*mzn z;`V>pVXkdTDKwj73r33@iuS?2@<_4tUjiU{_^fhgh6o5d1eP_y=hr}ykEid1dk>~| z)F3`XT=nn2`|ccUt+^m3VirBPfB$&X!;8)N=vZUxGjv8*DfmW{KpOZqn#>s7DETzE z$aaZ0{8=a&c6VZ?htuiL;|swTW;ix*gXbYL05tI$AUe5P*f)=Whm)6=M?qEN$M3TQ zZljw$0ACKvyQsM$Jd~xE`S+ZSn>MlX>Ji!qy#>B~w*Z|6aGLP=b;JsFQ-HwfcZgX4qsh zvBG#q2L2eE1CDlL+$U~1{OT}CRhe`KCpu5tY|bXd4>nWDG|&#Eqb5*{HnX33T+0Le zhM`fnw{OP}KhQvylLC8HQ)Ic^k-iOlEM+|s=LrVvv14UL^9DW+{t4HKMj$%uLa$^J zE0ou*t7_WYhf>1})s-xy-F`AkJrHQec@YEv&_s+`WQtfQ)ZQVe=z_Q*KRkKCV(?vN zqJ*L%^?Uo$w~rwPPhco-{lIo%VrA2y8?5E`NDy0!vYJ}MZYwLDLeI9N#OFamf5pNF zTZV?+OmSoSxJ^}bPbo|AN;zH%Kdl8AY%J2Y49S`qhn^fo5iUjEfS7#6%)!Bd39h6Q zsflKB2pyMB2 ztl{E(J=l}`W{j?a#I+Q#4xK3fG*rE^(asJV1#b`TmqtMxjq>hy5PFr@udnt{gi%d< zaUwoa>dcul=2#8B*aXNRk@&rLhXmamuf#~Qy9Bkc!|9<%`9?34)&$l?X<~F)da&|p zj#dgHly!98ii(PA5c&vV+gi`H6;V@vFQPg!5CKSOFhP33(9jUomt9HI@pl=&!qDP^ zk!KC*X89nFOY5F&(FqF+qhZd-05cSP&Wz#1;hLrv2;W8O2V#_lsm1_Hv$*$?3JqX6 zgVPkX_P!(Y)gVlk%I`SB03m@988y7zEQaw1Ox@hh*ul5@-Upp7H z#l**(jSWAAIUL4DQb$@@iGl8Nmpe^?Gy5fhXdo}{0@nJ;j}Jt^mUMU`M~5I1ZAn-* zhT-{q2ZPG^CQ2z*JZ%!_PPbqlS<{;H1P8gY2|%{rY=vBbMXn z+#Q>3A6Y$56g)6z@Uk*(i?SyW@C{V~tmDyuvnB-;;-)T&`dIk>3|bnKG#Ql7K>{ub zGPfyQ__y$yiMM$XZm;#+JPKft%vP`>PPAls5Qli&G>RLP|F>YMq}7@_Kw;kR=DP^x zxF^{Rqy0K4I{=CyP6O}Kp^cb>Y;xz;6|S#r5f|W@3cMjC!W4ALU650d>_I8hydUu9*kt2Wj zQq1*lA=vc&4`4S*!I9@;0lJM9vi48(AXVf_QUZ&~8$El)(*@lLrDGD%xE3niKmY|) zx0WKKwN->0W0R;d!CeU{b*U&cwq-z`P4-?^hhVf44SxYM(n}l+9EW)p%rmir>DK+A z{JOSg+Y`yl zN}l;IQGdcR_05}Oz|@-rzzD^WIhr3b^1PK40~7%4%Fs#@cn@V9x(GqHws(gCg&+%H z3PaI&AEhU_t>=K%(>yiaJz3!ZJR7*zE;z#o810Z|XgszpQri(Nw&gNo4Tk#*xg5{B z9|tBDFfWsdi9JR>ATJ54zF6r02kt*e?Dr%B5SRA96$$>=DZt0b%f)MFr*~16@c$Z6 OEO%M&%>KdY>^}gH0p8*O diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 3556553..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.480738,0.467340,0.632091 -2048.000000,1.731760,1.773752,2.346859 -4096.000000,5.476651,5.613953,9.266672 -6144.000000,10.993106,10.725003,19.697664 -8192.000000,15.575624,14.935893,35.763264 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index d1d83539eee46848bd2abe36ac63aa2c8b856ff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27991 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 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index b5cf294..0000000 --- a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.562165,0.536631,0.626351 -2048.000000,1.695971,1.699328,2.394719 -4096.000000,5.352694,5.439488,9.222279 -6144.000000,11.140933,10.992724,19.588991 -8192.000000,15.083666,15.595812,34.506432 diff --git a/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=2-bias=True-headdim=64-num_heads=8-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 7358d3bc6251b5678b84474cc761fa3294a5b3e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27547 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/README.md b/benchmarks/triton-vs-jax-sdpa-cudnn/README.md new file mode 100644 index 0000000..e4f8305 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/README.md @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..f5b8979 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.109986,0.260454 +2048.000000,0.277971,0.602729 +4096.000000,0.539475,2.037018 +6144.000000,0.657339,4.449059 +8192.000000,0.536271,7.733691 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..7881ecbe06a892440d03c3c7d8884bd78c2c379e GIT binary patch literal 19215 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..52bbc3f --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.201889,0.316081 +2048.000000,0.277653,1.052060 +4096.000000,0.558586,3.973465 +6144.000000,0.312637,8.737595 +8192.000000,0.001152,15.191124 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..835d006f31786fb749adc97e99c754f92a470081 GIT binary patch literal 19123 zcmeIaby!vH*Dg8<0fSILLZlIC5s(f8DFsBjbqNSacP|SR6r`mQSahhAGzK6bAV^4q zNOvxpJ*L0!d}r_LI{UiLK7XG-e0g26=6vS!jJU@=?lE6#sw6>_DozH z_DX#1cGR?rkMm>Md)sV&tv{CixPUm9O8AxXj1rzN1;;#icyHijbC%Mo6!Rif<;(dE zBE)VyWxR9dxunR~{OP^D37d8ahNnM%xV2Z9b~H`MB(B#Ky0lL_zg+|H}XC9lP*jiI6a^X`-{xq>6@xMJTq_!b1}FP=X#46&;O>ilTY`Orlum721S_21nwr!;9ujbIa{e|Zhl66aFE`4`$r)L8 z;$}yZpZ&Qv`s^7odQt?9%~=kTE@S8596$dr=h#k=Z{A2xd-iN@cJ}urElr9qU%%2a zGTL}BAV?w&q4}|vj*h;fy2IS3q?7|DCt6;%PHH7dxzW(kS$Xgv$i5wM{fR%To>Af9 z?|%N&#ARe$WM}`y{$#wix*kJ+6d3mJ=VUIB`8dtKhtmwAtvfN{vShg(rOGnpVwPpG-v|O zCqY20;8|f@c-aBd6e{~i(qq)Ge5xa5+0XYYxp=l-k!iG^DE!tvV`9Q0vw(vhpQ9v? zkxn8?nbeI9SBJszyD9V-ZEfw0PoE?*ZxA4?^*@QoiUvw;eH>oCeCb?aJkm58a8&bW zVq$Y=I%WQcNQd@=2N^N^27g3|W!x9^+ujOaX9?Kg@6A(&?z!Cfj!i{di61R05yVC9c(2$cr~m;EaZ*w zg$v&#J;@uOHS>1mt#g&PTX*&y@BPӣGT$`TU5iGaC*Ut&!4l#p^y|zU)7gTa} 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..5482abb --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.293918,300.000000 +2048.000000,0.564013,300.000000 +4096.000000,0.581458,300.000000 +6144.000000,0.001311,300.000000 +8192.000000,0.001536,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..c816f727d43f309a76c67843644613ce12bbd460 GIT binary patch literal 14978 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..4d89189 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.299787,300.000000 +2048.000000,0.549313,300.000000 +4096.000000,0.061952,300.000000 +6144.000000,0.001654,300.000000 +8192.000000,0.001317,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..462330295e7a831c2ba932db4447e3c0add6ff95 GIT binary patch literal 14976 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..20b5c20 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001285,0.052782 +2048.000000,0.145014,0.378316 +4096.000000,0.233479,1.062174 +6144.000000,0.366142,2.297836 +8192.000000,0.392203,3.882547 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..f74f59c86ceca82103d6466dc660c9dfbabeb9c1 GIT binary patch literal 21185 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..2b224cb --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001382,0.184686 +2048.000000,0.179171,0.601632 +4096.000000,0.333080,1.976510 +6144.000000,0.461126,4.308108 +8192.000000,0.357641,7.543623 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..6f263a59c0fed970623144afa2cb049ca614854a GIT binary patch literal 18698 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..8538963 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.154736,0.244154 +2048.000000,0.337517,0.651588 +4096.000000,0.561307,2.177832 +6144.000000,0.744631,5.053024 +8192.000000,0.475687,8.623260 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..349ce4ae6581a3995b94009fd286d5b904d165c7 GIT binary patch literal 18505 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%0A3FiCtwD#V-dFQeeNhef_ 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 f`v3HLn*&J+e)>{wWzI^t4%+nxbEl literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..5d58fc9 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.236990,0.358192 +2048.000000,0.419905,1.142686 +4096.000000,0.569661,4.441965 +6144.000000,0.263899,9.707267 +8192.000000,0.001587,17.073843 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..62d180f91fbd426b6e4ba14896a3e73bacca1598 GIT binary patch literal 20808 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..8d7ee50 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.354809,300.000000 +2048.000000,0.535335,300.000000 +4096.000000,0.001536,300.000000 +6144.000000,0.001152,300.000000 +8192.000000,0.002048,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..2442d05be509125253b1dcbc21e16c29244d5f78 GIT binary patch literal 14932 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 ChLX2ucbfAR*Gt1~z4ZN=fGi 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 F{{;+!?-c+5 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..d800969 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.146767,0.336205 +2048.000000,0.258379,1.036054 +4096.000000,0.530867,3.775501 +6144.000000,0.605855,11.867448 +8192.000000,0.293947,24.475136 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..2cad08224135cdbbc9c58400fc7523cfa87be278 GIT binary patch literal 18570 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..4582acc --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.199049,0.342512 +2048.000000,0.302052,1.057982 +4096.000000,0.462467,4.031027 +6144.000000,0.339456,8.867299 +8192.000000,0.001707,15.418736 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..8a83fe26a10362ed95f14c56a5f6a321cde883b3 GIT binary patch literal 19170 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..3ba835f --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.203239,0.592487 +2048.000000,0.401872,2.120210 +4096.000000,0.001365,7.893704 +6144.000000,0.001463,17.337357 +8192.000000,0.001451,30.725855 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..07e4f8834d6e9e5029d562c7bc6b5d300cff8ef0 GIT binary patch literal 18715 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..736ef5f --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.372295,300.000000 +2048.000000,0.363640,300.000000 +4096.000000,0.001463,300.000000 +6144.000000,0.002219,300.000000 +8192.000000,0.001707,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..b496253e99998f8971b2c5b9004dd3091bf1007d GIT binary patch literal 14909 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..c60e28f --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001341,0.119918 +2048.000000,0.190682,0.616036 +4096.000000,0.307017,2.008788 +6144.000000,0.472064,4.379703 +8192.000000,0.386290,7.646230 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..162c9e40524c6e4109951680c3089bb67649808c GIT binary patch literal 19089 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�R#52?d@st!jJ+*oY7TOe%5HJv?}8L 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..fe7e37e --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001479,0.268115 +2048.000000,0.189668,1.023319 +4096.000000,0.170710,3.953273 +6144.000000,0.230988,8.635345 +8192.000000,0.001463,15.048271 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..756dd18fd9e3e69b3fd659816bca4f27dd70a957 GIT binary patch literal 18788 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..1b88958 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.238014,0.355650 +2048.000000,0.426852,1.160171 +4096.000000,0.623411,4.461117 +6144.000000,0.262114,9.963975 +8192.000000,0.001331,17.273287 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..651c242de123093040ddf02d19a14b5605fb1d06 GIT binary patch literal 20728 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 bhxeZSAM@U2$_PAlj)B3`)z4*}Q$iB}T@oGj literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..79cacbf --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.253855,0.626204 +2048.000000,0.489057,2.258021 +4096.000000,0.237148,8.760285 +6144.000000,0.001265,19.611481 +8192.000000,0.001741,34.416176 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..3c8be326facf26200645b8a7551771e45edb6efc GIT binary patch literal 19313 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 At^fc4 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..e13661b --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.364506,300.000000 +2048.000000,0.547446,300.000000 +4096.000000,0.001536,300.000000 +6144.000000,0.002176,300.000000 +8192.000000,0.001536,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..531072ccb9bd33ec56041d3bcf0b6e0628494f8f GIT binary patch literal 14957 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 QgJ7^1)h}e9yLtcr099_1hyVZp literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..545e542 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.426923,300.000000 +2048.000000,0.206000,300.000000 +4096.000000,0.001479,300.000000 +6144.000000,0.002048,300.000000 +8192.000000,0.001536,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..6bee9667faf4532d1949b4c6cde2ca4424f687f4 GIT binary patch literal 14923 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..806b0df --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.181881,0.348315 +2048.000000,0.248074,1.040480 +4096.000000,0.596546,3.865138 +6144.000000,0.630855,12.445517 +8192.000000,0.288358,24.834625 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..bee5d112e648da307a8865a2d18856ac3fe7d1c6 GIT binary patch literal 18559 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 bs6%pT1&0ErQ41wV1c>5o)mu3?%%1!|nXf;& literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..428cb4e --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.208093,0.579161 +2048.000000,0.392836,1.864016 +4096.000000,0.479936,9.628813 +6144.000000,0.114556,27.601694 +8192.000000,0.001506,51.775490 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b22807091072a2349f48a77a34b932504a9adb GIT binary patch literal 18623 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..a10639c --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.182035,0.957698 +2048.000000,0.024439,2.797037 +4096.000000,0.001769,15.568085 +6144.000000,0.001434,34.589699 +8192.000000,0.001365,61.821152 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..dee9873028c9aee1b0d4277ca25da67adec42b7d GIT binary patch literal 18820 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..bcd0962 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.316557,300.000000 +2048.000000,0.001516,300.000000 +4096.000000,0.001536,300.000000 +6144.000000,0.001707,300.000000 +8192.000000,0.002048,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c8837545c72c5c36b9e554722856c9e7c23ce1 GIT binary patch literal 14877 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..5b4eb0a --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001392,0.309596 +2048.000000,0.193620,1.052123 +4096.000000,0.170950,3.937541 +6144.000000,0.208427,8.745746 +8192.000000,0.001682,15.822118 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..c17ad330f88d3e07def1c1d0fc7aabbaca7289d6 GIT binary patch literal 19143 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

    ~ALWRNnk2}u(+rrk$@tAsq>kU)0fJC5{yy2a%J7 zN01?v%a=Q|`XM!u+bJxUJ^Q`#A;`?{h9OkS8;i=|E$4M=LiPzO9R_HP(trs;ye*GX zktK_2wkIXh+jLH&_OgCG_P$TcF1 zjG;rjO2Wm0@>!5#Xv)V3SA0R;?E)i(0!7jT3deTW=7ix3Jl>%Ag8|g80h3wgqHSw? zr&o4e1*8Wf5xwXLYQnH57aTQZxq%hbEy)JRsBdyT316LK~g+T^gsc;KM^@b5?P;7&w z<@4iN@Y^^A1>}L|)-cWF@Uy(>?eNM)C6HJ`QNFj43^{r7Fk(gMGX)#SN=+@F?R8CG z@tmv}5AAJ?DT?)l?uzlp*pr1ZqG02ywR-|W7Q!XYjwL?xE|j07=Znka5QGfEp3T_y ze4fb%b~&fl!!fy(3B4szP*qr)6`V^cwDC4X}CWz>kQ^?JM=KG8L{-#@23&)>_wkpbjx!(KaF z{4z-ZW)zH0Bg0k9XS`!=~^%c)jlnuezgjA(jgt=Tu^gf=ipN&T%(g@%40BpqFE)9h>& zWHPmME&yuOkw-6=Z+1ZB;iKba%8J+$hu``F;Ka}Vl&@`}fct2#lk6xfQ99YN_1aXg zLBhF@0nIgkZb6=f>^;yS(%FTr4Bm%?9R(kzNge&U@m{a{`>X4M?%%^hT_EciR7}~F z5O#c~iZMYS-Dl0Ck#hT{#zjh?{2pF|^1(oGRDWR6%rq)ceFmBX+c3th#@%@{^U~|! zEvCI4y39?gRvNqC|794Acd8i$V}q(;BAm{VF{gqE9KZxf4~I*m8TjSQ9Y{S1-vV?8 zY9I)M?AOMe2SExkn4c{bq}F?st<~$sWrot(g+CMO0%q(?} zBEO})jv*i9>$+)=N@m@$Wh9>2ZY!ahzO1N@{)~tc9*ga@{sGQwe-0wVMJinItxfkV zlZ*WP*q*|VXlPAz`CvQE5kOt$?}aXen+#cMgmIxl!X=%leiCbQRBmrJyA0oKpS{^< zAJ5swr^jYP>UYW(_QZHAvN1Wd^8*%1ZKj7Lm~YC7sQfc}|%*fPzs`RmENUm3Z&es#PD!Gz_%A~2!YzD+65q^wi0pz1XC zUo9!EuYLNn-di{9O|GL-_kVB1rMu6T!bAn!n0D+7r4kQ&&(zv=%$J`W7x^LX6l-|S zE9SbdP}boq8H}y{4^fS^ zYsQUxwyp_zA8{Fc(+$q?q8L)NSU#SGZi?mDB#JI{nhNx zs@EIBLUC_KkHLhnjB}9UI~5SeH;Ochq@_Fwp?0TyeWP1uz>@Wk`;MLfNHRm5B+Uwx zs@rpJh!C2nB*STOz_9Avxbbp$c(|%(WO#T5RKO`K0cf5Ky4`4hXBL8(_!;YZKlzsT zR@1lkA02p{95{gO**lxNJL$1EKQNd&cy!~?YtFJe0hFJ`4n@oT>WVf!EEiRiv2Fdy zxzGJX8Fe3}&BhOm+uJR@sbh%RU2F2e3TBuFklWAx{sHnp5ZXVj)ySxP&A@ovt8-|2 zqo(F?Y2b|)f-09kUZy@o_nyFz;w{eC%kqFd@F6vBzoK|6-8=5^3$_zT4lvh)gO;=X z)x9}Ez>k1TN`7+v!NZ6AXV2!gJE~z-Z>VakX4TTUNhPPAy>}j=U~MqBJjTkJjW*LP z4%a1L0D&vCUkGwPT%ZI88fUGHaNEOPW0iD6mD@mqR$LRQTDa%#;UVD*gqj*Tctr_- zsnB!M0gAoVuV*4|L(_;ue^muY$lX4D0Yw~6VR*s|XPQd`MJOWu zUpCB*OqhIpU66M1#oeDfOB? z5<=yBZUoZSYL^A{1o6i;>78zg2eb$}qS@~EpYN>m{^`Et9ZtHG+-EEoWz_4 ze7=CF=#9&le^jxCA0aLuW?+E&Z%$mJhq9vL?>+e^W|DAP}vJwCuMy4bfrKJEg{q~S>(bqLZ6ssTZX2{>}Tn`ES(I2OP78Z z5$!=8E4RPn(Xyu?I~U~#`uS1!3UP;aK24KUj(w>Az@Jqdpl(>1p>H3Nn*u%9FSM5O z>J_tIrq*TfhaFHrli4O;^)bscF46EE03|gDB82%12iBqeN_J=AGg@3ir3KJJG=-Kc zDl=SCYvwTxsb7NDe%pYVXv~obDs>?_K>tHC2tJx2#cPHX&*|R%`^}*H zYh3Y-SpCME@=8;Fw;g7Io<~fqO=f{e&cns^#i_gSBlEHHhM+1~l|(S$_&x z835A`o6-S1u#@*(-=yCRiO^LfuNBeDYz;fe6?D$_2WVMu0dr@A-u<|+>Fwa1MPgvv16QZL`vmU}CP4&}@@e0n;Ib?(SNhYpE?%Kc47%RBYN zFs`DTb=1~jjLG-!-9t%InV@$XuN{DWlxdIxWp`Wo9qWRwsot`JNhqAzbG8~~fx_Jn zx*FI$`asn#4n2q$p(=RZ!1T^TUgW^iqWsoG+B;|{<0UbDZEy}--F^q;VMgCPe!vTq z<>Fu$5-w%Zg9Ga>q{?_uVEdMU*1c(EeqexkBzK)OaEH1)%*MtBZK_jMS6?j#=kzzy zL(QDa9w^>y-KEp0oCu0EFI-noCtRzBe$Ph_ctPi?|9thj_^q#pD@^loAp;_Wne#&CRfh6A3-`Gu z!Mxf4)^wCO8eo6;4Ul6ng<%l=)gr6*8ssa3JO^NP7*3p+E~y3eeztacs6k4UY{UBk zD_#gkH`0`{pncDw75|hgC;z{Sr{)(M_UszGvgJVjv;`KcI^y<21qz7Je9LhB_&c-_ z!(;6GFGVIZhJ^+psBbj4f*gQTJwbf(LD1d69p|3nU(hdCV)>B_?KpuRU9_}L$05V~ z6Am{ibLnW$(n0%;&;~QK7>;((piQrl9>HCxDnQC@5C;ar#b3A|5Qhh3GzDCL4yp-z z@#1jF?O#{Yl%8utHJtm>co03s=!`IO7nMTy6k6SfK2#SUew%mDGxI-pGJ419O#!w3 z=H(gXzXCXmnkv$0bXHm#M`UzTQZ7^jGNB)3Yg~Rmi<(iO+t6szgFr$T26|=quyD%5 z3r^js1{Ohjz-|{;RDM{7rdhNz16Z75LiG8?mXJLiR1}TMcEOhjLX8<6Diko%`qveR zRF*8yKwXbNX8Qoe5k(?$a^?YRGmAYy-Dkpn2w1)J+k=$TN@G30?TdYJM?f1ygK<_kS28az`FkF=*+xv zriI^)cPD=vqS?x5oW)eEiOXU!<<@raK+w9M5(YH`4EccxsF<&X?MV*>(KApG&+8Ms zo$DGJ98thi3gT_BGgVNYMdG8Q8Q3M=6kxJeS2m$!{KuPs0&L9`Xq1E`l-OnmF3;g- z>RlL|sgm+YGjkfM$o`RZ2{NDpUASz)E_BK1qTQbF?fxZ>GjB+K`EqEr$qG(IyPX2N zLFDHv+wedt1|*Qi?T- z&yL$d6tV@);X8{lDhUW0Zg$1`|Anp7hIL%90 zhw%#toQGEJbD#~{KeSD@8N>;gw_@-fjZ72qd$MdVFmxSZEMoO-ye|gU6`;R_656gs zBQ<>gVUzp`^A{BYE#T^)DgwMG1}`HJkB^TxZ&?ISgyM#H2!+SsWdsN4Ih?@DOmvK+ zm;;=k7=*vEdo;r5pwa1;5&JOq^~@{ocvw=uE$}j&W8u_AkAqLa7ts72{yX(IL*j)nT_&lHnGIje%`ObBq#(a8^a_SBz^b^XoK_BO_Mj>FFbwE|U(*G+D*;XTpb1^v>IW2*16x`EoGNN$mpsP4j=F=&W;eQ^EO67k z#C51!S! z*tSK8Er0|%RnCJhNZQH*+(9$!*Qy?lkexfI-Gzyc!7asLlEy$ywlI?d9R15%pqsJ_ z6Se&o$*mN*3F+>0(fWVbrP}+TOU1lpb3SChmjawgas~vQv3H3sOEW$M63>MTo!4JW ztyV=aAwLW*B`)(KNo8zA&Enm!Y)Krwb9;U9)$@YZCeH74Co0H1>ym1j)O(yLXS*_cd@8}V7Uhxcb~F} zAxWqxx0VSyFkwX}p&I-Py7b>b;$TECw~-3Xki1w_=hhB$f2?NQ6grGmLbiJc&_>1A zg$01flMAk1xl*+TilqwDoJX)3!p9FQiupL|{ugibmgb=^t3WFeXg~eYW5-IoruCss zcppE|1(9cWV1G9SUTrYULJ6p4)ZStmkZvbLR6S_MJt_~yL>kbD46dWK@2AIj9Y6wy zR10ww6$6?g6tmj&rqBp$HU4S3)(U>E@wXST>~Ux%L= zm?oH>F6dfDLk}MW@5GC)od94pUr~@DHKCA128%%I2cfnNZMTN-_P3S-g{eyKSph6H zJ$;v0i%c4{aceRP>g%FikdTI9wXeZTAfSO11x_fmg8+-qNcLBSp~{U;L))()NF~vU z?J08=u@0N+%*&|>+K#OoA|v{FuvmwY6hValyVN-m?W2dNlI6ENhQ7FkI~)p=|M7Ah nv~2=jn}hbD{6D=gXL&!SgCe52Y8-fe1i>n5T+6>=dGEgf&>}~- literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..3e1163d --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.255597,0.589090 +2048.000000,0.440020,2.224123 +4096.000000,0.122880,7.861397 +6144.000000,0.001408,19.485580 +8192.000000,0.001331,34.835968 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..a77465d617059d36d1cda9beda7937e6a850c54e GIT binary patch literal 19233 zcmeIaXH-;Mv^98&AP8atB#5ArK|mA)BpS$3qGS~T0SS^*31&rt6d+1g$r+)@6lDMu z2@;D8O3pc_UdK1y>-Tl{8>7Ge-FFPH_d=bjbM{_)t-0o!vtH?FDbvxg(jW*zr>b&Y z7eUAZ5d9$mCXqtseIe zt7EpJfcqd(=U2dA2!jaOX#@%UbriuMh}m<58bO9GP$3!XW11%sJm zqvb>rUgVgT2#AWd%w2#5m+GqYDHJfsyz9kMd>Ve&nxd}$d5=s{QL)>M4nZX8Sy))q zG&EMQp%uq43o>l+Yau~FXJN;5zLsvT2zhDwlf&jQ|M$)NCKagI!2F3*Ih0RAf;6YA zL;d*46Gmp{dtNLE630Y#>)2)gjr?NA-c)j`!(HYyG_UH0Z=|S2F|e@MdGW(bF2YL| zeXDv(AABMsCy#pbCh5(aqehmFBNVmFvpslq)8hL#a!l~d2Pu%qn-s*et{V%teX1{sP! zU%&qJ@87@vN9M*JtSN=CrqqU<>@|l|FG(9p7g$%{*w|5I*A^KSl`=AN*K*r$zA9~L z^jFrECkI$X?>wE(>y&+{wzE-}e&dstchm0rVBY5P_;#^#)vBS#RC~ro5WJIZV}TwK zS7hHIz|G4${rkhUpy1&4V3v#ec^0y&t(p@3$*|9S5D0=sx$RGm$fXw*iD@Rv?I!0% z$H(W)%-kRJR8mq3=eYKur`R!ee)@>qhC-O^+Pl`)R)5DjVeFmY8%|ESXE`~Ik5eLn z$7@?S1MvbqM`+*hf{8{NuOdrbxJ6#Zn$@Em1K!VZ)1Y2sb=gYgM0VV zPY9VrI@5T!r{6&LKyG(MZ!rDO*Jrfc#prs3 zZJTJ|?_Y`j{1G{o055Od^F&A}O=Ame-mv&sYCgSvW#9F;mEa3#2R*F z85wndw#H(#Kc_w+<(g*&2OrXm5mUu6(9?g)&OQe#qy_P|wOGf2cN^F0f4Du%Dt7M; zk9NY0-`-2lN6g6XyN?5$|u^0z2r#{J=+FCVS{ac}|Xv>Gjj~+eB z)JqG^EuRu-Oq5TAL@oT;IWaQ)j6v>wFYczXE=2OqcWRG`-&djpjXL*sx5YiC^o7hy zb==0AI-b*=6odcunCZGPS|8O08z6r7$5Fgfzlo}O9r~~=*Az1Vv5keeaG)ULE z@|sD+5Yo$7Q+$@J-&(rQ@>u!a)^taz=E*A9WzT3@B)@xSQ@10tHJHWI=&vxlRd7MY zOPl~F=e3rW7By{c`9GIjUmQNw3OUIj$3*Ldzjr5@qi=~;a-HnTfyylZCy$fQT${?%(U~%kApNh^zbVJg^&9s>pgEk{XCX6bdGL415yd2;d*)lBXI|_U)-JuTUhCqyza+%s$e++q&~>^MX8uLR@Q{lv{hIfnXHBo)Q}49Y&Tp zkk>ZWs(06V(TrQ}G41c@)$b7vdHEAmxVROM_1WGu>G?{%f`S4XT3Wp)2k68cI?t)L zLY`?aeK735YYD*$E8kHP9~+zX;o6I>Db`E(-!(i?uebE;dYjgbj1+C!r8)9E40IN;`iisLO_l&>t*-!w?d|=P*Vg?pH_&M_IkS> zFgWto)agcD=&6oETkTU)uGbR-_R0qQmo=-_2mFF0fBs~*$TK>1+5Pw5n%Aoku=b5H z;;ho1*-)~ZOLGJEw+CZnd_M0jC+^>C`KZ`aXd4D4;K9{ue!bLm{R~}`a`%jchg){C zdmF5x~pLamzS>g&;R@^y% zCa0w(=Fbm(d13>fItG99&J=!36qWWG!|zU88ureXjL)Aub{p^9_l~r-vuxO_DKR>4 zN~r80_^y_5M2Oa|%=P!0!7fqG_2M0(!|y`P9(Cx2o6OM9z_Faa75FM7L|j{LbA;bA zV6Lx>=k#e}a!LwgX~4*j@YEZhls0=30``3LQq&j+J)zY2Y)z(NdjW2w>ZYh|P7zjG z)itvWbC#;Kmd6?!q1aCJzP-!tGjeRu)5az>{H{%Ng841SG+#>$vGJ|YMVm&}iY&>C zX1$g=^46g* zya|F2#9lmoF^;EW<6E8PJtc3oRmZ`*CTmGDa|_AT&-f@Y;C=1j!GlY_RrbG=9v$W= ziQASK^#4R8D!`p+8XFr6n3orEWd!W+l`qzw#O@wHew^W93>i5YnU-Xt2rut=+|-f7 zhnq@f7rp)4NVaWMh>L5AnrcU;D%BA+ynVMhT@wXo;3YnTdS5m_RezP29Vb{#Tm}QJ z1~P_jWeJ^|S;02f&GlDAy?vXi%&V3T&KBQ(VT6A1ZXL zVn0emczBdxVOC@xKYkn;8JR3(T08+YQgC705Hf3TiE}d(nVy~=)>2tnSx`>SLOoh| z6_1{VU(q5WPd^<%;&Nyhlk=+Ijx~hut?vhHNWuQ;TK{@$Q06+ivNfHDUKD%Dv0kD| zP<4BK-U!mVd$a6%`n4B_VZm?^`ne9dWlAK=0PLeYzsZ#7Opoc#sUCb*g5R7Jid3ri zwz6c{!+J`b^L`0eXaKBgZPS*|na-=Wa2soAndvTMWMmxm3jxSzWK|amX#}sIrgcho zz0VDuIavARnctCHSg&4fv!%amkB#7`DH+UTr^6S?0Sk@xga> z%C0N_Ho({@u8tg2qrA$cARdi(Nq}@GUvND94Tv>yeiPO|5nh=xP~|5mC1sqV9&HHu zi*}P2gGjy)=S;C_OjeDU$)yP+BYoptb1v>n$^9CZ3ZecFF*u0PAT(8dk`q*{+uza4d?cVP}>NY=&5SwSZIcvV(wDglX zZbiw>ggGil*{=$%kLuR6NQSlg^c=fY-HCx9`g|&94gmEzQf?4R$?q>NcNQxCtU;@l zWDWtFgSRm)dSm9>|Mb&Q4x-7chb3At!k~CeK=1cbgxiImsEQ$aVg_j&*%xOVfUTgT&dhR}-w} zcb^}xn_jgCC>r$grOxj~3C9D-i|%p*sJ7F4ghZ^3`3`1$NH3eZrlv*}CqnUYgqE6G z2P)aYWrR)S%$2PvL5CdquZhbpyl<9WQUza)kBtF>PGc6lb^}iK4a9*18miiO1!l~- z695+DE*?M@{G`1gGWe@ja1he{9Z7u0pbiIeWmw8j`&R>?dPX~&dqD9O+Vyj(4%eBM z`1$R6R0v+V!HGf%RTP>?4BlMdd{!v6c7N>^J+A;izv_(}H-dtKbX{FPL$;jl4Vd_S zhK@}Vy;Z%tcazIKXERSpdv@IvMUa~L5Q${#UrWUY1LlUhkeh%ZLQY8=!Vx8Xw*KY5 zIT}4(KAqbpQoVClmG#2imuLbAliO0^=jZP!_sA-DpS=*&{Qzde2w2HLrRv6KcKvPaL;>_vcZTD)#7b zazyQO@S(}tlQ|iKujumk{f{3ZfO3Y$-!4$Swn_`+w(H0=fK;y!UD4M1d>+e1 zn{SMAxOjL@EFJ@NR=PG5Zqr!b zd-(9%(u$OA$;(J*uDL1n6=)?saELhxPNf4>)A1c&PNiTSU*Gci0)UcNvriy_AEV-h zJm$`s`{j5nQuY06c`wh!bsf@XB$v2jk3MwTpK8N6@|^n1Cl~&FL$eOy1`#%AV{Xv& z&F|kj&z?U&;n58X{3_`*Y^<7Q6fOb+!qatydT6oIA`hAr=zjGmsi++Gb~XuEJ3Bkb zND;VACJf?|PE?qzVM;N`NmC)L_vq+T*0 zP_-q%Z@lO8r7tfyAeSLZ`=KSreq6QR*!eZ}d#S2RHKMMfo{``VcB`PI@ z!X3Fn_&fnR4!31!`N(m8uI~ijp#T(sN~&muw&SzfbK{G=^7=c7 zmZFr0kiaK9TUjf+>o}6&?q-^PadtoB7Y_8qxx9H!mjWO;$22F!GVn3VwYdcL^#Le9 zd8vq<_|xSud;=MOy2b56r|A6t>7pjyjt9`1>_KB(?oW$nf2 zLW4s11-IT}RgxL!?rw?r7O60;pYcPo6$LDuJQEWyKx=3`+A|_xJr2s$GFy2a<2F!I zdX8=$K%Vq;K9u>AH1jNGV72#Rh3Z$oMX| z=7i4OhmXEq|Mw$t`@10<9y9m)=b894%+S^5m}b>pn0T|ou)d+8 zmuKfgI=adWyIKjqVL!> zG<0S1Q&_TNZ}R9bxY+3%x_XzWk3AXmii^&_WZG_xE-kGntVgv5=GM!*%LUsMH;My3Fa` zpcg}8W|eeFLctNxh!Y=Pu(!gw%Ycl7whjbfNLJg1!{q0BLtnnk|73;)Uh8)Y>t{rG zUGD>ZXsbn-{TacVb*Cl>MKvZRPO}bSPz=q?%pODoqD(ihNFGm!Pzrl{^(tf(zITvZ z!=e)sgjIuHz4}So1K^Y4zqy1WSfya*5C3{NamZ0o;o;%)7=(DER>i#h=C3LjrDHqq zt(1|l(N$k@?}c0D{);u}MR~iau}->C0tS&lT|zfA^@WN<-^3&)RXfpQXc`zfC1`bo zb3bDc?%+C3h(X4^=X8Y?tV1I*wUYZ^SAa^pw>HylQgkmI7(4gYhn4}mcu0t!fOO0P zM8!MP+|*>~=~?V74FKuYt5?v%8|mxohqoU__bO`364I{R^e; zbf<3jXHO&YIF`Bu@`*)nn)``jb~q>CI#F^5`iVl6CqauT4^JkvF}@?=%1z$((QW`Q za79)x80a}Esd~*1Hc=!F9%jeLnCEJ0Xz0VIh#HV1F1RYcoYg(y%HKVqA@~yZq5D#6 zYzhbx^!3lTPLlv3Q?=Jjz3@0r=n08?)}S#7NAAb540pSVEKE}fgbD`XqY)KtC0VKi zD`j@^B`)X~T;D`&iubWpzOK?3(``iSLil%iZKY4AtB77I5Dhw#|M8PL4%6{nU>~I1 z7R5^GP%6cRm7Z5kGght2Po3A;<^ z6_SOZ>_*baYL7Xc&IbBow((ygDcyxB(H6MQypjsmqy@B05FcFjj2!T(Gnv?&m>ocP z(K(AwV61a-1zFO>c{H;nJ6A`Qdqf;&%da?|G=XL|m#S+olIQxNf~3TVr|>2gRh&(_ z_aDE=KR@~HNJ>^Nj@{?`oPFTOIuz96gb6oe#DC2R1pWnljS!)w*Bwaq zL#*<9e8Be(T>5jw2`w(AUu#1;FNoxrst;mqy~G2n&=o1YTIQ-dT-!PrpiXxZR^%4S z8xa`+J2lHkx3;CUra+#|XF@Yq-I6cVq2=NyPg0gfXS1jln4tOvTFGvuN5-8C;c)ii z4h%pSiR~w|Lph0=|8mcqJ+l8*3RYNo$vYWV*Qs0;+GDui9a=Q=DR&e4Syv;nkE(2t zYoX;svi7ZzZd)qsn2MAXJnY85n-M)B^jQgsJ{OKIG%GRS0hD2)D1iOW4Ts->wDN&^ z=%=cQStWBSXN&J~O?x^cS|LyY6ke^h>p|vI^IPwM2y#VB4Rxuwc&O>m|pC*K1CW2!afbqE|dE!!aly8)TW zx28*T843B)p#N~n|);fOOtA??)2M=2(`DB=U2+guU1`6HGSAdGKgs-cq z`7aQ?C+#_dR;@>Q;=sA5q@``M$4WR0*SBK+9lWU?gDH}BrXJLM#MWhoAzxI<3wT;| z((;U!DHAxs%{3s7^uK)h5+ff#fR0H(73G~%HDe>=;>?B|o*EA1x$2z+Oo=bBsCh_xa7Sc>DLov z(Ef6PstawA`E;A*MIb4;cNld3Z9-=Ly=Mji3nRmv-U>x!s7}Z$H}vWuB8LC$*DV-; zY%MDDztmvO)9Zbl9y5F$*>+ysNK<6pyHB=`8!v#M zR#Z|FIDh`U<#vLspFSYq>X-vCMbvS3FKTUT1G>)IOA66B_x4Yy5*@rGC#|$MVgwSVnq!D=%YY z$hWMl^QEO(9KQdfDvXcD!V7{h@GAt44({r;YaO4Ik2Jsi;B*af#pEPDu=S zd&v=}tB1zT?ZsIBp<&=1f56<0`BPt?8QQQJ1-*_SY+O~-jutNe0U3?qL^Ug>p{c2J zd%ikPFt_w7u-YGhrcXhql)$L!0twVViU|}vXU2!!b{z2B-FhldwA-_Yo z_by!yyEOsiqY-c}v%<89nf0Hmll6irKU9F0yxGU%B2aBieHmsR0MiX4cr-^Ay|sFr zw^k-=Zgyl8yx~I9q`Y;?cU<{JTTJG-p^FO&{0f{7?9%{H25E;L0ypw!RSmN*eTGlQ zEJm8diaE5974Z~d;DLCJ;MFd!pnwGcP6$#DyKJ(lGrq^{@@cYCn*C~Wgeg|Wcxy@B z?#EHPK{*IL9W%IlNHjYK=x~?rzk$|TK(7{E3MRlbr48Ehsv##$$2TY`REFz-y$Jk^ zHqWI$Or2Htchbb}JnfG{^64Q{nQ@8f*EdELI~L~dQ4VPVKnQ%@=U<4gwVdueF6fMz z8wGuXGhtH+rR{-&ho@fo$(uOR8!(+yQa`*n;#cH6IFN7$lk^g3&wgwP=n_btlPR#i zvux62??9yhZAgZ8q8t=?^+#BghlQ-ZS$yr$3Q~nE?h7q0HAzFv5-lY! zAuw;c0s|vS>qOv$fPQ4uQ$%zsW!NVt({d;iUZ5=yviBWC47PWGpv}Bl@DXUt9JCu+ zpX>LGra;DLiH|DtM9Ni63YF};eiM9=4Gz))A{6K8*^hb}4ExjQ(RHxAL zNtwy$72;xenC*=P)}W{8=jB1?4VMZ*vY|XPX)^E1sgA5H=oL+>AMUDd2SbLLoSY=o zjWx!;F1U(F;$Kovz7|PlvUtPp{~I=P<02^(VR!!ZR;Z`SujKFWuyzlxm{_FXGt5R* zymXG+j&MaoPp*kU`MQO)Aeqi_STq|Oo3WFPy^!{F_4MHEegax6gk9DI0F;55SsdC` z-TwAG1KK-Stat!i#P_|QYfRdlw>|l}74174=7Nw&1{j&chqmqS4(@Lj1CK7CijJF6 zNel$OeSIW9Y+)iq0-D;UUhyW}dU{0R)v=R;klL_-7_0CIpYi`hwG3TlVQKwvO}8e< z(}*mR&HtgaHw1B9EwjVz@i#{yxU+-=>U|MnH$YN_gNq$Tovp&`VZh4jeo}(aNJ<7d zk;1{2;vDz&{!X8Or}D`76DWfZ@7EpX=TV|LT&%Qb;oky}A&H^ALLQiCg0DB}8O^Q8 zUfxHN@&OYQwSfjJ^2l15EomiSp<9N5(pMi6e2r=nZ@{5^=~}PmN6`D!}0!x_geC9JvHN zMBx6ekqp1;)~;8E28*dW*$^2JE`geFMM_S%Ta*X`zeJTJiGJ3BT9qR*r*kZXpj`uS z;c^m=aTjqod?3Jbs!cgYrW-<{lnxGT&?}OI<~BRyNx`bsw+xKdmYPT(3I%FTOPfv& zn5${MJ#h|N2gC`mK;WIDZ1**{)c~BVb&?^_!tfn{CK1reN5xJR_yF`m#k)U`+x3-J z&H@xk+%L*wMh{b+Ji~>8{6~m+Ys2qgGSy(D$ z35a=xGeGaTx@KossItoTm~1`U-XdF&KuMx!rv=rg`i!B}3a+Sj8dSrU?Y)F1n2#dM zNZoDR#ArL$j9=X8zLz45@6a2h5HeAjCkPs3Uf&=e+J^;q35D#FX`mhyR#NO-`encu z8PY)8qPQn47n6$}Q?l~jUbu+fNYi0ho~A3hIEGU~9qDH%MWe}*p8g@7fLF4LCv!Y} zlc`@Iyn_Vdo?4nBE(f6D6E@F&79W;ri0;B&w2y2ezB~qTRlRdZ_T3t#4sKEK5c~{= zTGO4XR&~eskVyX>R`S4zE;u$MZCrh1_*i2ho(i>o3-D7|+*rmu!I%K=@A@cE-p zLj?Hr=UeMcH^e*gEDX>cAMxoy-7Le_MhT!D5C%EGb_%TtvaK77IMGf|oj2`S(Ibmp zrc4L}B`8Y%pE9p=aEn!#Y$`}!p1pXH1;bKct>R^C$np(5i^Y2+yz^JS(n4e-ip>R> z^MZovfUH`d9;Bz~+h1wZo~~iCY|qLgWWq!ZK!Glr2|(nH23x{Atg7>}kwt+m9VgX6BQn<(ai>?r?<)cD`A zi-GHwz*XS(rxy@)B?LrgZpnPv=#>HBo)W*v$8w+kx|^(1&q-a znG1(eD3Xu`jV#J+t*dBg6jg8`<4L;QC^7M1I5|NUjhLWBLGoLW8M*90yRg~gHPiK{ z*XYeLP9;8B+5UBqJGzB;9!y%8>EqvBR37lG3vJE6eQueI7;nacWC2(%EtLe}(;(?> zc=!icPXQ^Z&E#fUIywVj*a%d}KI}{T=ahCr6@GvNDUG*k#xyiEv~R6WV|!0ZIO&5N z?#`V%`em-xbnG%W_krQi&oUG;$THM~iBmeHSbrlLa+gru6tvlIA;56#9W#^@#82uH zB5Yc$vA-U$Ki0Sq;m>mm&{F+f?)?I+Mc;IzL<$v0QL1mi zZqyBVM3NnIG;nxjhF>$`oX5P@2Km3if#g-2R0bA1?5SgCQj%4!>^vtABr9`eVMdxh z+eZNu6|+{eIQi!Yq7{lzCw<@Eu(DgWnJgR69<@M_wA%e}Or$rbvfAz2y8C;+Q3`%j{}x{&jPUV8I#7%2b&dumirx3eoEnmJ7b*hZ1Cx^C zR9}bABJ|w7moz<~@T#q%#Qi6??&=hJ@VM#WVRi;STeo_URH+XCYh{M|fO6Wve|rI0 zAQ_Hq?iwW$ClC3p`o!_Gn(+cKz*?F3gdT$?BIN!ZEv4s0wqg4COniT4)GAQfhvDRI zM8PD4RyaR*rN6ubGBoi$+~IwXk(Vpui9Wp^Q!0#tYT@CA%+Tq{!9=HPtd1jPIxiX+ zrzk=0u)6ZBI*CD*g9ke=A;80tQ77FzRS~HU{Uk6{Fx7~?G>W%$!NAf59mgD1D7aa! zZ{Mvu)ghRdqroznm4}Xv1q|*B(jjIqAhRgezN-wc{GlR9p>$nkd(HTdHV$TInTL_S z*N||Z&7~z~yKS@koy*I4h_zd~JGnl%{FMVCvO}JF=G4YBS-l@+f$b=dsJj95VnM-L z2PJ}*%(&>)>69-|QtaB6dZ0|QUeYkhCzeN0A;fB!^8_wmz?O?Wti-#kmpFAw1zfoT zjFYF)0Ys7o)+eq&)-TyM5#Kp4o#||up~q|2z}#C;hQx9I`{gmtWRhicxmWZ+z@WXL zkyec8w}Em{r@nyurM&Eab8G0y&ie4|prw7giv8dK0e&|g20^3%gh3d|;+KO%>vfZY zujMgJ(3HS-{$RFSyu&XootNY1#V_0x^H=sn$vyHw99*LSAQNxTjoo>GR`b@x0JZf# zD@$|0D~hom7-Xg{UIC%{QU7_aZoAvIwPaB3 z%NN7#(g&UH^C{6irm$Vruq9N~hu;FuiJ96Rp@(iE+w(C8beI$hFlB2hc4{fU`%3J= z#}0^N+0EqDaXjhYh5Kb&Y($VF{X{`Kj6v(>J_qXcRGCio8u_jo@QaJ*Rlyb+iSUcH z7qhd56M~t2TWz_za*30V!>a6hTopW?+9e}xjCw1~!qIsL3W#l+697WD zscxe)ZB9csEefxeB06#Dd%@alf3%!FyYv<0+T<}}FZ*60f2@_Uy z4yzQ#o&yx1dX`b1Ay7}+6Y}=$e1Lklp01(YwW1=U@=uq1&{!NkmEBvkyH~-$d=G!p zs{ad&%_T2fxPVT+r<$FOsEET*khDP))#BDHn?}HHC*;dZOPhAr^%=p9p|g|RJ=&*k zC4MC<>w`Y8FK}GuGRQa!gih6Fsz)d+z``*^it0S5XX_`v(u$yIp0I(HIPy9DNcvuWxJ2Hw# zBX;SvN0f7h?pntI#Dy2u-MRa-qO9-AZ_qp$e7H)9x9?Cx_2vRDON>oVM0K5V-Q87x z1~KNC7Bwb1<2kBIpNQ9C5YInn-z*bVlO+du6G1tNjvlVPFmbF^DYQ|Y?KNGWp+ve~ zH#(@VfnP0B+q8q)>V?a z#K1i`@xT_KzXf6E?oJ^u(l#oC6pdRD!KkZZH;|P;?*j|Gyn}1h9 z%KBqcR;K&pK{4YZ*@Tx_d7Kst7; zQ^hhvx08}xIZ9Y_gB&S6GLC$G;5my<6-_01^TUg-93E619?k9{j!A<|Ai}nI32)+&AyNyu_;rnxI8BfYC25#;keez|G z>>CQOWWMLf-PlWmE4_i-?8tN0Ty*NYXWl^zE!^Mb*kcMC8QJG1`@K@);wmd#+p~B< z)g|6|lEc{+aO*ZjBssfKTV%f@dKw$y?`i+kvgXJZ{YM^@<$ zhU@A%^3%gG2lN1ncjhh7arpXRvjZ&+PHwxQ{94`L8lPDxB}^U~@g_SSuu)3E$VVNv zs!@~f&z)<3Yg$7jKuM@7>pQY~QmU2aah-6tZf+bDf28KgF@?Aii>l=B*Fk?$S!|e- z?Y7ZVQj+QwHrxA&>d_GdkrpL;dGT#H2$A@NEQQfnW4n(hWm@Mnme}c83|_F7d;zZt zsJU={{L9biaOWPb#u#hON%r`!tG+296qNPLwl)bJ@N{fucQ7H{mM4SJwbbVFwgwFB zM#oG(c}!0FIMOnie8P$l-jPlmz11J&I3NS#@H|L=9OnahX}TT z@kIz8chKmVo4q6R420n*AWw3tr5@NOR&h1o?b*uW1s8~ooaJ3m8#;uA^6bDBJpMD$ z3Q|%&>iH_2zJAsFPS1#fx%rUk@pJhtAFl0<54c=g>^KNwJbFw%g)v@js=v3~etkS~ zxkse@hrRTgz`%35<-zA*NE+fJOG-4!SJ;{l$O*61iq9_I@SeUy_tV5rgr|0E3v^)l z=S@L*k8mFyN47FHms1YXXVXfB3RqgiNa=xav2uYIIBy8$+Z4aGfwuRU#%JYTE~qLU z@pX%ekIk9k?6zGU|G@b|YjB-w`|v5Lk?o%0MLw?cBavahiND*{r1JKzY;IF|Z^+Xl zNh5ApB<}p}#|b`TERKT&bF?i}7pY1P0NrzOr~B#gz|3}S((k&Q(?zazul`JAlXpwW z%)eZJnIlgXz%X%8CX49(m2>FacA}Lx-686tZDmSi!7BG~Acz0LBUHp>WQjEpGAa5^ zD^i&R#Svz9nv8;mMLD^mgP|?egxzSz!Tq~e$*(c8GMEe{-oA1hPGjbH{M07SU2=Va zpQF31J8jlYu31WsVm!v|l#HtmRTx{*u#lt`CLwV7eKu|)$=s&yARZ!KQ*ocD`^WMrtiz3?L z*b2g(hIAcx)?;4J&teq`OP9{h!CL56I0_Hz>jwXxc5rJTc^3bg=J1G1?Vo7a3kWEZ z9}2UtX%|>QsF|pUZlW;0qdRrEy#(t{ag_L8YOUUhLDov6;929x4fe7Dvx>kxLJm2S&5uYf^A7&-&B?<*}BYk2SW_1PJC6Rp2J*0*TLQJJI85=_?q zqC+U8F9`Ui|4lPzZAZytX-j42kGSyg+iu)&xyGs8KF{UG-_(KQw?P?%OaA`-daNL7 zV03{01qn%U#UWD{k)h?GRbM!>hEc-iChTEpIu;lI1IG1$jd6NT`$vJ>3|oa?>1tQM zZyzq;RE4M#D!RUU^)VS)pU)*W&cN|ADBCY!Ab=x<1_gcI<#=f>=^5JZDCxO=3K|g8 zr9>;Q=^ukP=7Ou>k%g6Dpocn9lM-S1JAQ<7GO~iGjK3z-YP_rexs}&oLB(n*w--l+ z{NJ;nPeY<_1LO2R`B+~QQ87F!_eM4H-ZER@5L}v-sGTUNW7h*0!Pjr!I$&50{!C%Z zMAXUyKpK_6!Wg<8M3n$1$EFKiN7c+-e{!Qnk~?=kf`wx8qg;_5E6kcvxfJm6sO|{{ z=@H=DTUwO@s_y^{a$)q%4_-vn3I!I$rPXfGSE3#-#p~D8;q|^lkEql*5A_`2a5#V3I37^2f;x$?t0g=4I2dHM5Q|T!j;!IORyUMG zSfR#5%-;Y3`ryMf_VpV9yQ|SogiRZunYI4>`D5Re{{fsPW4-h3gC0PN$o|2ud&{6& zFD~2a`LZ$)leZ}U^B@5W25dY!T3qVaBW2823^Oy7ix4)x%IqwBvw;bX67IdIl@ehW z4v9ESq{kw(;40kK1w*_{9BJiYrE&SVIA#2 zk!%YS1#4jR?xB(nZ~@za!gqdpxP86fjyh0rW&@d6_0@#7&3?5LT zmbno8ESx`gAbAty3T>M&v4_>|fU^^%nif8zjHrzzB0he0dU@!{k(eI51JmNM_%bjZ zv8wWLbJs9iow9Xt$={s#6y}cwiLwLNdr*NeTV*e>9X)yr6lHVM7a#n+P7kIB=}s7Z zyoX00-?o6vbrC#qf>YNn3&NI&1Ie1|5b6iXBNc{*Ht>vNP?=XL6?i$&P0|Dx6;0px z$nd4wEo>VM$s^{x+UCo_L_q?p={N5xi@NH0BXf_aNw5PDiiOR~-@$USTJ^0GqTMwx zOobsQCG61*2{wW}A(+6UMH&Y0T&lo$qPmfGFy~n&!Z1|;@(t=5S+(mg$AeJY9}AD1 z2HsmhsU`11$J${e%&iJCa~xaoJAj#M>i35yT%e_f5JxwyK_)e1Hiz8zTwp{gBZ`b^7e0t^RH2`c=y zbPDSQJ@0E{lmm}Kx`*Y%myHuaRBbBne(ma2{X!c}RP&F@d*KL)J>2oG<5&l)I_ho) zf9}4Hj?Np@ONGOIWU}Qwozw!S%Y&HvNBllNf!W8`K7s%!bb zQ}xC;P&Q=)P_%=AKS2%^&Vs)HR{PKNGT0^gzzR;Xgo!~q6?qBU#RXY)wqneON7y8j0t0ti&Va`UoR&E00k69JZ2<<}p6Y;VWAHJcf5Pvg zHnGAxH8jiPi2-2>+`zuX=>5tclno7l3>rTwzSaPL*pm6#YUe>Y z`jaOez>Z}NYFbA)ST<+Rp1ogn{UIC@9vHBkGb=qmc>Ex!z!p{~2dk?y%*sA*LIc$Z zmKqH(<)~_Dt`1YCvlge9?t18~|DRW5;d}VAsw6RkVw>??6tX2h$g{xFqB^|D5-m zAE;`iWHK8vJ%GZ7RG8M=fK`nkr}c0!{wZ>k;>5X|x47aLCLkSy5ldsQMVUh!8Uh|M zG5C&vwpyse;I4zD5DT#39cY1|@>n}n%w8%47o$J+;ohb#)DJ;=z=gu4Lu3~{XS)7g z{!Yf|-hgWWJDWfDFuTmXx$ro}JyPK3c>XtSWL5 z@K0Vdd^3Os7HA^}>8GMTwNnuG-+cr3*E_9?^Gw29sOO?>+NIrx{R-htUr7U0=lE-V+MMOIZ_ zwlLAAhl8MNYyfw!1BgNIfBpJZ1Cm@LWT-gjvJ<@3^ICsJ$KH)r045*uMyJ64JD7h+ z3~(i1Se@I~U31L8iU0rdl`m|6K+SImR4F4ndoDoL41hAwnBcgoK(Lev279<0)YMqD zR4=%hunqTw9v2h>1Jpo8>QJmwQd1LFwxJBGM4P$30w^5?@*lssvbyzME>w-=JC%{v z4s{Lf9H6##q6SK?y2FU=YjlDIkrs;@8DW+00gOOZAYcnSYZZ)!nCx1YmG9C|UcBe5 z3F@~+L8>@fLv+E+n@iZThZ3uey3N4Q?GAFQ#HDS=uKX)NJsW{@2oE8TUHC$U){6sl ztdV(x)%&~7;APMdG|c{O?$w_H5*I!pp`0HN4#O5uFsgS?$AHAN78rNLxehfQdFPKM#V1koV-tljYfEZyB&1kMCeH|3o2@ zkL!k8U@o2w2>d4cH72N9uI4op`b{|1`+F6>Ycs|}%c#Z}EUn5QiCGFE1Ax4qwqvos zQ72yn5Ek6Gg}=kdksxxWM+n~{`Yk7@1r`<3K)MveZn?t(0bSPFG12l#+@^uKYUA(g zEm&&wJ6O;!0YPt(YZA;LICx@E2%&F^g)hADUF){h-rQyPU%2wmlMMC@NTBdF8JAJx z1g{wd8M23(3b-xw^&<(JV<-PL>M(={G`}(rrX5gGz2Sn^4Rz|akROpr0@ry4U}07n z?|d$_&x2Ld2k6_8tV)l@CZrNQh(ztJUFhM^(u}SwdQ5^vGjDu)4kg%-?FB6|-e?sp z>d6Fh*%A0|8y#q(ilDN9rmAbs6-oMynhO5w(BDSCl7VQA`oR7_eN)r>eJZVi$$K^& TN|ewxBdUs8*K@Dldi;L?H}vI_ literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..329034f --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.267349,0.912527 +2048.000000,0.251509,3.839468 +4096.000000,0.001325,14.249164 +6144.000000,0.001536,40.990719 +8192.000000,0.001536,72.704002 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..103e7a015b0d0a7d53d249272d3f793fa83ddec3 GIT binary patch literal 19329 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..540a4e7 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.374650,300.000000 +2048.000000,0.082349,300.000000 +4096.000000,0.001792,300.000000 +6144.000000,0.001024,300.000000 +8192.000000,0.002560,300.000000 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=256-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7455ac82ae011ed3cafdacecb72a3a2d7b08be GIT binary patch literal 14951 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 Wbx`6<8D#!282lxbi~~uUOk(xqNZEqp_{s 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..f32649c --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.213456,0.571713 +2048.000000,0.361903,1.789920 +4096.000000,0.499891,9.623846 +6144.000000,0.117496,27.389696 +8192.000000,0.001792,51.911678 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..95e759d5882023a26814d763888ccaff1c05f1b1 GIT binary patch literal 18552 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 W{%-M*q8wZRQBk;gqxhQDgZ~S3RXtMx literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..022e94e --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.255275,0.832885 +2048.000000,0.391979,3.346892 +4096.000000,0.153389,21.636608 +6144.000000,0.001707,57.332737 +8192.000000,0.001792,105.936035 diff --git a/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa-cudnn/b=4-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..281b7b75e134430d289f3bd5e6d1c59ea54bcef1 GIT binary patch literal 18657 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 z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/benchmarks/triton-vs-jax-sdpa/README.md b/benchmarks/triton-vs-jax-sdpa/README.md new file mode 100644 index 0000000..a03b8b4 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/README.md @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..4cb1f62 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.106995,0.689995 +2048.000000,0.275410,2.995743 +4096.000000,0.520256,11.519552 +6144.000000,0.616047,26.424032 +8192.000000,0.524092,67.017731 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..dfcb8df10b789da5401bbec8f70d4a7e1bfebae5 GIT binary patch literal 19501 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
    Lpq;T_#Hh^ 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 H-qZgDLYoev literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..4c993ff --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.366214,1.688182 +2048.000000,0.452540,6.120752 +4096.000000,0.051639,25.717834 +6144.000000,0.001339,67.074051 +8192.000000,0.001317,146.715714 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..e0082cabd1fddd8c923894d6c9b0b0eb3abb50a2 GIT binary patch literal 19972 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..1300dce --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001316,0.670596 +2048.000000,0.142873,2.497885 +4096.000000,0.234355,10.730381 +6144.000000,0.324767,25.309675 +8192.000000,0.424600,66.269180 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..281e78e43ab8523436d69cd78bf7dfcf593d6068 GIT binary patch literal 18931 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..51ddba2 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001388,1.238941 +2048.000000,0.182871,4.753040 +4096.000000,0.278805,21.524223 +6144.000000,0.396571,52.595871 +8192.000000,0.326004,132.046021 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=False-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..dffdc89d43148c7e8701b0a11000076aeebc9248 GIT binary patch literal 19330 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 I%lPmA1@$mMWdHyG literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..6be49b2 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.246250,2.027551 +2048.000000,0.390695,5.809258 +4096.000000,0.588857,25.905151 +6144.000000,0.246381,61.066338 +8192.000000,0.001229,144.867325 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..07254bb25b30c28b7cad61cde6022d5a2c2a54e3 GIT binary patch literal 19917 zcmeHvXIKjdvC<(3La(fJO$$M& zun2+~*tZux5o_)J4Sz^_T-W!|cDC~HzU^j-sNME(ad7r^Ikr~7D3dcl&@XZxtBm8 zd*5T~*r}gyNe@31en=&li)9b)C`RN#6z>VQ>jl`qE+1mXTt4)83fFb1HQQ9@lEVP= zriPBDW?CvsrWXDCo0|JmUOm#h@-3;K)4lNa1o!v5-hKIFzj%I$78ds3zB(Eq>fT%y zBBB7}a0x;12jI_3zfK`k2qJM1a|l5QxA$S;Glr|k9{2?d)d>W_)*eDI2*UOR*@qwl z=k{EJ@1LIh|Cjtf&)8+JqXUh-PNh3riyF7Gbd-f+8fV;Ks`<`+wP{I`RZ&vXyo43q z{JalqJ=h|@t8?ehJF+FryXXhcDcz3uH*06kJ6uL&4n*pOXI1givtfC?Phw*lg4EIR&>Ui6C3kvV83>=?4b&C z>?!f74%*#b6?6NoWO?`Qy>5o&jV~;zpFdx@e(l;hZm@8nzGi78zCz* z312xddyZ4=LU&1N4rd32Ax8p-v-cZGKrK-Ys8Gww`kYB3g-TpThHNl zL(eQ=StJJLi1+N-8|&-q!7pAc7HK3(-J)e+`)TA{g$riRl`{36;P#wsSJsf?=W`eT2 zGK2X=b1jBXK0mCD5|^3%EfD>AGdi;Nsi8MpG^UU*f?HiC?3H^mWS%v63< znfdO+T7DaGi|WekTHxp6y7u_-V^hcF$&R*2KJ6m!SyK({)@Zyl)1gBt2g=H*kvaLG zUBO$KcLFrl1WXdB6rM}1_PQ5aHL=1j8qcrU(Yk#3K9NY&d3%LsdA#-NRA+A6*7~BD zIRWvU?IXKyb0UOax;d}H!*ix~CDye!_F;K%25c;~(i}BTIU;EI-muti1AQI`N1kxa zmKNTNq6KT}*`_9*37gh;0v9tabQIB4uiVTla!xL?ddYN2iqBKXBBTKStgYCl^_1-5 z4^hK{JC92od(tP`GB{Uf4zKq4<(vA9Fw5?4EwWy)d6f}B$}?d-XO6Y{@#ZZSi+D~D zukWt61gYC=4fpmMU%!5xkB3L`_3PKBjSOrODL;PP;O61UzVevP`eQur(=}sEiU*6u zV?uU*bk;2a@~Twpd=H=hd5c*xUQaFVLTjUNjsNH6bdBV^+3HPouzy8CRaMotjpZpZ z>t?p51WD}|M+Avv?|u_QZfXR3*rhzJ$4Ov&j`oEH1J%UOw-2Q}#$7&p?yL+-|Bih^bp9+~e_Q>#XcRMpgOUAlxNwzV~W)B%TL zKdo;|Kr#dTrkKt(gleoHNk7^&)Eg&7Md2npvi*u_XlVG(oKY|^FsLUx z1qN0xEH28nxVyWnrklfU-UkL`+TF^gePwIb5ZzBhU>49Fm)~6v)6FwBxU*U#c;0JT zUv^_WmAgU>K@uj@U}9oQ>kr&iyZYo{ zYx!7`fHK&d^yCqXrwr`GJQIB7%x%B4!P=(+JUsP_U0@@&GvK)bC+6C!T3eTPetnvy zGGCn`quVprw5oeiNlEGF&$m~XM_}uRYiVgkCMM>>@a~z4JNL&E1{tj$(T~1%w*W41U5G6S#JnRa`wzjyz+R z(8%M5#0Z<^SvAFFf_Dv1`}B}D8~(y7>Gqq?*`mA1Hp{3que-!C+djWa*Ri{(_4oG( z)$F?na>8~}XClcjZU5ovKLb=hF+$@_#b@TbGMza+?GUi=od>tV;h%>LY?d8<7Pf-C z^H`q#wOCf#NsSD6FdtFr4|4WqmS98kn#ioNqzJ>}a1Ng@Gb);okY|U{-3AX&9Ur&3 zm8o?doN8j=&boEW0=Q7szyA8GyV9pHgHpXYqfM^xEOzd%9(EF!mNo*95C(ql7We=$ zhb~P~>*h$Vmk=Y=;x8^6?mj+hI(K9Ev@$pvR+)PrGV-2s_$n!yHo4R>>y7Vh&XTS& z%BH<}!%|mQXS+1sYC2VBEL649ZC^3?O+|egOkcj(STN_rcR@#%xz%Df&?_Ay5<6M(VfBfQj zW=4{hx%mJeX?Zqi*GN14M(c6s%D3FA(Kg^*;sQek??OntRTs=0m6Vj{I{bB_pq`^G zLDIdl(`Ttw(X&yo)TSv;EGghuu|3IlO8|qY-`%=5#pKeG@mGZl?~LqXxINK6>3Si=Qd;+Jf=ZL+wSedm%)SXh`ixS&NDVP4*IVs`CwS(^)u!s4(U z=eyOxNjKFp%1`?Ueczfg+g*@pX>1e?|B+)*7;4b-Tuu+cI!mB_avbwzzhhse0c;p; z2*aw@+j@A+Y#$;!p%why;!Wg5SR97}!nY+s87JixHZx7e=z z{o6&z07L8=zJG58CtrDn!azr-1uiwzuoULmv}JgBIIQBpkHIOO9Q~W%#T9d@5eeD& zi^{8Ho{`aRll`G}JUkCpJbipRNwqDn7})vgS-EJ~=btl;y!!BAs3dSZO)enqbjur< zx7MkoT*%cj!7_c9JM^Mny*dGV;R*fm$$?J~O{WA6i~IJEmND4 zw@>jM?a#f;0(^f8=Z!{+NeE%+GQn3_U;`Bs>G7fEWQdB! zF(zKI6&@4s#*+NhVcU0x$?x#SG~!k$JyXE~c|RdJ7IW&AAbYf_p`Hikd_>G(jBuZN zxm{Z$6P5w>f=PZel9txiF{ARd$iM~T!15wDoVPV?1EVkE$^>fz;fiL@p7E;HzP4ay zf%Xr#ugcC5sC`Fctt&g(C0tVYb#vZ}SbS9qXBD$cgTIW!4O=;bwp@Ex*J^e*<%=DD zX`!2Qdt-U|=T*kc4<9tcJ@ZHRA3ieEE9YQnjhj-`Mmwt-D$AI z6{0HfjR-M2Uxi(|+oWmURX_q>B5d2ByYM|S|% znTz|TlxeSr&;B%V0*MZP*YkqXQ`$1Bq8T3SbpPnR-vMg~;r@dMX^Nc1>eQr63vV$A z_JdS>++ZBRp`o3jyW}6@GBUM_}`!kU4_AcUJW6TXN&NsBDs8_P$k^V(s|7h zWLzMejRMU>ycU>sIf`$NVFa94Im| zH{PLY*QU_$?F0Vr$TNHIBM72Qbgof03*e^o@KE}l;aWBH+7rrI2HJ)-eQ`_Ww%YjY z%eD*OwF%%=wKCKbBf;%~oodLfe<{pKNx8%*zx4q%A22ZflP52G_qsks3-^4->F#1x z2%^CuAvzu&MZT*uxs{cb=lc#LNJ9*(7^Jy{c)G}o$p^81t24JyQ-T1(S?thX9bj1Q zhEoV(c?&^cayU$0S3%*)&U{$Vz1*1S==9|&l6`Z6WSpdXI@Ab|;8x>vykLpkhNtpz zV)oN{RF>Z@Lqxoex?VIEia|4Pa3!4HiI$Dg6YpLK!TWBfr=@W@_Lkj*TamzG+TUG2 zpiG?pRp?16CQYvP2kBk8@|my78_LRe@7_g5M5KQE_AR`N9R}WR7Nktis)YAeEwonE zGqLo(jtd(ug;XjjFCl@g+*s(kqM~Yew2(;_q)8fU5ozu1I_SQYmEA7u`QFl^2lqsC zNwZNe)fnSb9hs+#og87-1p+w{Mkp_yat7*y!&yw*%E>u))^Pb$1lC$QCoaN>HDOlQj$|B^9dcwWV zp5t=5{JWHygD}paHz{DZA^G~^95MJ%Z7**$LKH25SBClL>2Z2HE7xkN%7zk4v z-xp;>MYSPW)`cp5Xm}Vc^K3^NqR@q=J8(djw2V#z6s1s)YHzMkIx;jkp~6yz0%Wqk zrl!J+;@fZAoP314X`8^b036@z8>? zVcXhrVv7Q+md273sP>{+cKx%^5)K44`8kVJMb*X8UnVpS$5Bh4(_S1^4wK`j*`svq zm=>kmOYhOb1F&^$vfVGOid9oSi8ph!&ZwEKj|U!Her^o04uN#KM`(b3JF2AkjB$QDB$CCRffk^r3?P;{!iX;`Vxf3_$O zvnTZNpNH9!yJzS$`&{W*5JY}%rH9xb)MG;9PlFDgv-DnpM?JgN!@Z9#C9tYvpokd$ zT#NHvPJ1C7ouvcuW{nDczFeMv~MFSPq284v8y;auKa zRdwuEnysqO?Q_{c-6VmwYU|??rBur*-Gl6@b?p(E`BMxEtj=9t?H2}jWpeN2AY(=t zI!s2o{jU{5i|}-7{4jKc@H9vNlUR_1A38n$Usn57kD73KPV=%$n0t%OS^o3s6M8Mp zS32b%b>2RJeHi0PkB;=6wMOPGflNa&bfl-zkzSqbD8y5(QKPS?8OkohyG#*)c_T*= zlF`BN)_)CoeMT)juR=x2RV-x0Fd|J^g&my0NzRt(jF6z=oq&yjI)Szw8NxrO#5Asi0J zcmBLqYisKy8DF}vu+ZQl4B+U+7*$9<`GlHhR0i_>&m%Mc0x*7zK&s!iHa{!|As3gC zk$tBw*p8H!$iU_`HeFP7A=j+N)P3|v>yKDb6m=m7tdcE@0V=;I>7nGi?K!$}^_R=B z;hvb73S%L)WI2;WY47N}%RAg$TsGfco%EgiM9Zx#DJdEJ@?{4AP3=$_|98E!)-QR$ ze?!;>wilC$VkD(PYxl|03$9x$tsI2I-+%nj(bbKH%t_V}@Jj$xqrgM+D;xfUe#j1L zgu{1e4Y;(lH0&fTFK-4&u_+^hs9ezsXJU6$+q$uK)pik&york9R)%3N+l9gZ&NenQ zXn{AXil+Sof_yD(E(l?l)`e#zDc-qrXTKgJ;*wQ#!FJI~0HMM)0RUmk`Y&hPZSprl zsAms6soRmYwDZ)VA?0=OB*_0nzK$8p43JIwL05WG7IR5h_ps0=Tghx-F@Si_V zoPum1c4JF~XBD~g2ud26(~qa1;DDq(TO(Nx0LpMcaNBEwf;=hR%aMwJ zZ@84029fFRYslR8=5}FCPS|Vp=>bi}LW4k<-7M6j={I5_P(l5P`yRm~0AT|KG#>3g z?6I>x=GRFswvU0jCI6VH74L}?mrN==T45J5|Miz^gXg&rHh^nu=X(^X&3!&G0yK_7 z7*izGm&bcdp1Z@^*P^b4x5d=|rd{U^-)Rvr>Il^N@m@WCQOQYsb^URbzuO_mpQ`N^ z?%IDGQxz`8|1EJ0d>i(>*Dp&iJtSk8=^TRKrpJ zfwV+v+@D$v^=q10#zMAT=lBF(NC&2D{rRM!ySQ+4=fJ>cfyl#Kyzmpckk<jvF^5L^F>L{~u zX}^Srl3lwJ9b=4?cL|<#;0v0&Mq&rdCt|JBe%#1(GWpM+5)96L-Sk?U2rd} zKlgglYi!$igilx_3z!`{tZ1zm`h+L%c_;9*If}zy!3!oFLu00d+NV!MTuiqKjmzkt zD<4d>;Yg;^8_k?p;URP-dFDxG0Ja*LJ$#UsBnuU`g!B^3q|4t?0+8-2=Nc-PlC8YO z2*2EqUA10`ZD?w`rK1xG$rC^mw%(EmRtxerj7Q>{Olbd~3ylF~dYiv*ka6b$Cs0tK zsT!OUS=nh2`tg6K+!fik2f|kFE?#%+m@Xnr?0%!Et-^`HW4>*K?8vElfj100B&c#E2Pa6i6!pIQjK8 z3xkZnu!)J@@Yb3OTNe?z?WMLj3D8ly~_0@_5EkGym4Y<}%me3xQkr(7b74 zVj@ew;2od=8Pv24UHXy;LH)%Mx#p z&!sHCHTN+3tid|~)Re-{i;6}8tPJngVh>qvI{@l}CKc_`aTsK!p(Tb@Ji1wy6t{G2 zPA^b;-`%bcx6$>1Y?+yb4wz$=>CxlIrwqK(wzm97#>V`T z#zse@wU!Y?`b(X1p_Q_(<>7X?63{%!>2Ff}yvR8$&7N{_L!W_|mnluwHgN(Ie?)Z(~avhn2_T6&A2_pwK$ zJtxz6lKr*7ecSy^xv!gRh(pm901CpnpjM%0y`ZEaGyiC^Ju?*^@sdU43J?^Nz2${f zb<{}1jm1%7ku5P@jd=YiShnWHEicwLKp)zCdG=SFTtEeIPH!JQ+T%IZsfMN+N=nbT z>`#ru1lR%`)X?0l8-LO9!tKv{5`%WuGnP0Go`zwrqI&?*KeC3QLi(d#-&R}wo7K*n zo7Wyv={3~Rg<7|8OvKrz9T7}R4g&v_GQCbg?VU|S;Ym?Y4HL_^NMV;V;Ef2bhDEO~ zI=tFhyBZ8!EBp|3?V&owS<6VmGt~2k&bMn5OZ&kv%xlgcz^cXwbwGkr)!pYiC5Uo3 zzRQypn=|;TnZg6eC1t}hO;$PMiY2XyjAQ@-KIp~L5KxkDij==9V+KemTEN2A1i1GG zAZl~H>GTLTytAyJJ@qLtjDJ#e>aOe`qnHpt!l0P=r>Z<1CiCv`funZc!@0xLpj6gO zRd`8+&C>8L;qOl}SC9cex&yhbH7-J-{gz$SWqzwpbsQHv0|!4pMv=2IA3!>bVTM2Q z1LSkaZ`D_xXA5J=f>>BsM8(GPDNEg(O93t=^M!DASD`#%_l93qY%MfG?0w6poep)_m%^==;(b5GNXFW_Bd|aNqwzRN zcdi)K;NXw299z7FmrqYI4$(K3t~B7g}=2k?w3CUY8*m0{-7V?w>;^oGF3JI z^*GLWKSJmaSbFWT+_AKQsn@o`xHLraWf>Hv$BEgepP%vAgGhWM;)uDWD*N{nCp)yF z_`US@M9NzpL7*PY_U;eRi;az~fH(2nq?AJ5lAhDY0n;WF6Pa+<#BKi|qeRmAs=enR zzk^pQ=({&e9{@j`>?%k_7uP%dmy2(0^W@O>x| zy3}dp49whB!RW%^NxhfQ-h<2I??3GBEqr!6@vke{QTGVufE5kQImk-6T7wX z`!ED}|EsZk3E+;ZVB=M6OlEsRnqv=%9m-`E0q~tXwM~sgatc>*H6;p=-5I^N5cTV^ z^i<`*9xnCy&GLze+(dCcKs~avZe>Sz^iU&P`nx+sz$GAhE%6{cdR8Q4?;og488`*$ zL2MWxt7T^!`2IrQ>Yq`{Vo{hzBXo%di8Oy9SZ)w3Pbm0)lW`LbdkpMcPz; zOrMV;9epwW6v4aeBGiD`LLgH+7LT$hK}Dn&yNqTb;gDk(mJ~Uy?;Th|!uZ8 zK0bzO2Q3GANoQ`n+SyRu*m8%5ZqcH}ZA0<=Fs{NAcij1RyYL?j59=m)PLuTs z9U^65cY$Fg2X0cbv~a-?dE4LLJS}Ke-CNkplKT3zB0oTjw{PE8QB&&}ZHjlyVL?t9 zxNoV&pD8B;L$k(HLyyIK&*}oh&CJFIJcpHS?GyTq)tcShhA08Q&ST;+wy-bkbHkQj*g89h>Me; z){yY)_dhMDuenuul@{bE`-3jo&i5c|0OZ>YeR&SherWa9g6cA*M-T9`8VH{J$_)(- z;aqiJzxq}Q0k2dztz=Ojil$Rzuiw1UuaL$d40A!dJjJ#ai7QQw0#5n5O(o$-%~&bs zC&g>(^8w-ZHzF48IR>I=IXT&u5q3r`&f{wj+rJ8^X!AN`;0C2z8Q5TxfMOj`=!juO zAtHkd)&tDGsvBiP1dU3R!hwqAQtl~rUNy7^Uy)=9+xkC=T^C=-o0Ed7*LD4 z!S|atS2}1Up7-x1bmkffoIYKf?bw#ChI%3{K1oRfS6A0KY41F1A3*bfA&CkP*Gey@ z!fK;AkJDLtjVl*`N;Ks z#Lf0+%4Of7=R7(Y>g*7g>><3O5+|VOD1saS?~F8P<(q2xR(N(F#mYhqW>H2Vu_uh2 zc~H{>mSymemQgoZEPky}{1`Btm%5ifSOlf4Ay_WiWui;fnUF$A}hT%5UFxvdh}Ff54wY z{vh#lZo@CNR%ZYvCrXY%1%o9Lc+C-)a~3&9W#|UgG%qeU?i}xnceYBQ9mt257%(p{ z*8=}dGE47Uge&&NKSS*75R^Gi!n;*_y-v(m0uL6l=hZ=`)SvNOas9Jwx20v8d zL{7Vznsb>GNw^PVVmKdI30sSJl@Tg=L>h(cwi0>-X|`rtwyl$1Q&HpUIZI2=AS>@+ z8n)U)*@=`=)rWhTOK;`!SFOY`aXK3rAPpGss%x20mDskWJwJ@gHG;zAlFt<=_2jiK z#3XYSJKB?5hkKlHU#@N1QEBdg$0sl{F)0Cw2DrH23R7tq%Sm82%uJ959`s)KL5H$T z!ZpSJDU;z|^)MrIHv#XveY0G8>{!q!Bi*473A=t(P9zOvh9qGMK4F<)$QsVGBJbXHDA2vS~CZ*wR zqV$Uz=Wd<2^VhpS+@GUOxeKqC!uAWV2hiBW)*{ZaCm1OIM7$5eD+xp5Rpi%s1=@{< z=4h)XNP3W+V0Z?>s%BS+n@b6U(K1h20tC+~uf3v}9EF+FgPIZh5~7n(8KL5Z;%kMM z`+^XanA21P+8VOlK&pT!#|ITCqy%nnWWsv^3atr+S5d&G*JkjZ0VP^SmCY4pGk?HR zkc2O@)C0g?EHwz^zel-l3Zu;29~BdtW*#^y)Seu)lLGv0U{mc-O)Nh57@FeapydU7uq1a$pvkP z^l^c`11-ch97JX(a*nj0Qm0suc)x?mE-hkNmmf5;G)2+?Nt=$HU6$S^P(mQJ9q2GE zbu!`R=C++6;w(+hAWxsYC>&kgq=?%O&>~%R&We~CP-US-7qG-$?H_^qcnsW~lvH=N z?8S?^f22iL|CSczm?As%EcPlf>1w%SV)lll4KZh->({yrS&^rUjT{6ZI_w4r_fg3P zzs`HjJ3TO>e|VE?R+cm_YWID&e$P@c(WubCt&3}Ip&YAHcQXyK)Jd+SIZ~>c^oK7(I^5O_$lRvZ{L2x z%SVQXyY*6@0K#|SLXnO=?Et=d*VK-9jgCGFkR>A5#Lts_lD}pe&>Qb1zy`?#O{A$K znoj`rB15V2TkQlb0yD7uP#2IXM8WO1& zcnr~~0|`a`e<w^rk6^V4^F10sdt9=O6W7QxGn?$b#UFR9VdT^n zW{w?}Esvt5)qbeLkv~{IPeD-4(nLmGi^ZKZZq*#cD-QxZF@#u9Tod;H z9x>3yd(1e{RG;#kblEjUsv8SZv6um!YuA)wO!+Bf`{g}USowijJwzfzgy=U5pmLq# z?oMfuYbw+f5YiFu=in)yPLMPvJJnd_D$4|=4Bf_W{Do{WL2An2-YBT`n6A@A<_$M9 zwq^+G(a;kA^2kI%T)JUPe%X}`ig>24r*t+ImUtc6GoWwgf6{Z33;1ck6K~$sl^$fo z)&TP6l9Qbm-Yl&FOwAus07;n!KO&)^8@<#lO&s{txk$&HX4x3*w*#7HhyiRTg*EJY z^}EZpRn()M%0AgajpuSo0YmNb=-IwZ4Ni!xfFEN~>~an0%G>e&q$j1}Q8VI#a>;8l z7HObxu-y&J^z+Wny?J^f#w=~X+|QmGy8t1MFxHg7NA@oS6@yr5zvP%c<&iv)1mMw= zy(z^+%NT=F*KDmi*yAZ%@XB+N@>?eWe*n&g>Cg$9y(){N24)z92Qb0`?Uk9Ryh^R^ zDkIp*KwV`g&e0+nq410hog7}-l{dhOK=KRW5?MQwejlTm2Sh#DC!;7Zz}2WGkf_M1 zynjEsc-0}`*GIZvo$P$nEWgbqXb2z%NZ0;=eGO57uT{!`*l=n+Lc?%zU3T;ACq_ht z4pNTDpFwzUZN<@OW`z`dHYMc&w_HcDwI!A~5*J%~^p1lR9dqc?b3=TmbbGn6 zR(&Y3d`x9?^=PT$H68LP(2cgC9NZ(K>|;NQ`4-4s6k2 zc#KMJRE(d>wszk1%GBb{CbRg$J)GHUCNO(k=pb^&$rwPk$13sD&c5|?Mak^D7nOdS z5Un(K)+r}m6!uo)GY$iY=B6z;6g}iW-ov)mYIoZJkCC^wXe!gc1i{$ zJ8>cwPvo}dt_m8LX`*nFQ{}wE@$9|RtH6Cn>8Z?C8})XU7m7JH9uRhU%7Dz#hL-Pj zfebp!w5kGi;*CQ18&Do)>E^}(q{@z}io(+X1h|Qcn~6A8&-uEe$sX}gAqQz{o}i&& zPOe~=HS}G&nQ0$8av%>Dr{PmlcmtrQO24wo|U+nS&>L0P4#b`Wv{$OeScgh=V@ z#J4e`K}Q9{MA)Ctv(sf2(0_>t-F zzu%3Y7BU5T>6Wf;r%0(NXk$Ts?85=g05}sV&38Zq1y*}zgS!NqU@q;*;-=>m;^vNW zbVRTpho2!``DXGE`qXDZ?_}U;y*4)pvbcE}$P*2(FjL{|XH7Fb?K2hVZO592R^DFC zZL8Ffvo%969$RfAEY0?tfjSdls~0+{3iKL&#>NQ@95U~rl*l(F04F6NBsBA;2d$fI zY;0^}4ki?D`9sD(5yak?rQd2Na5ggf>}%A0Id}f3W`&AjzK7$IMF`5@fcDzHuhK_F zU46w6{&c6IrL{-V%#x6hgO0yGUWX`UX(FU~r!%J@ZwkL*Hx=!0{ftJ5`udT_Fk$ZN zj*R9tf!p9cXUBn?x`k7Tk|8al(rggk1KWlYnR^*IazH2wA<2$_#i%GNOXB__T=IGS z`sB!O{ln)~LC2+a3CqO73+$~9zN8~?@Nr2LlquF|MMZLTQk(;&d6socQh3hul&4T? zqj1vy42Leg+62WrERxd~J+s;iGdu(O!@27y@#01gC8?+#1?Z6m!O;FdHl&eC{t~Y$ zWVguyXA*+~=ZpPcl7D@7nCX>b2R^eorHdwwUqYa?4_X>b&mV@ceV?O zTK~NRtO&Tq$g6;qS*wRO372AjRhzJiH&;|UuQ+52o*=OHzD^W`tll0x z6YX2txwCUe_o%0T_;63C+612??ZGC)yFK@?y{w?B7=zVz-5O=Rl%fL#okzzlqGKs@ zY26pJKmbUQ4Dw3^??T7Ii=mINAREUJY_NdIvIsC>LVutDE=`{jv~5XK>)u>YDhKrI@R}Oq zi4)4*Mapqf#cMw1DIV)1P|xJ#46S6{+8+cMXT7q3L|?QZ^pfa%kJymZgI^SO?=Euk zo&R|6lr?BKKu8h#F{tK(#goW*0kUUIM|30?D1u&&HZ=<|V507*5cx zK`rJV-sAYPTX12S1pOg~q!mbm93lAdBzI|X06@x$IV4xdGBNlREf%>|(|+I0uJU#k z*a9%CY8itJ9FU+1adU1-8k#i`vhCoXXpzUQ_6a!E%w2&TbV}C|K~VOQw-m5CyPnRt z4CmdQp%q1r0(A<*u{%c4<+pZ$>V(6fm(gmE-~!oO3j*m?#y^`$e%C>*x$>^E>n5|F z{zK_2R~oVmVKxt74&g=zE>F~R;+O?0dqBhuH0KdvA*Y@yBj4Qs+s>S!5-b9;Nj}lG zxKiNvQAq@}Cjpo*UC zSnP9Z1$)t=UeR~D!lcbt$uX*1Vd1spHwY4GSUY`$$RvSD<-f^>CfQ{jt!h%{-{&Is@Ff1r7$z-Df&xtM+}! z&45DbF**rI-4Myl<$h#5=xbkBc&d8C-Xc8z3t_j~@t=TVTp&MEsQimv@na%5h!*eZS5D>E zD<=78m($fEc9w-Fvh#y`z;t|4IGK;oajwgt0FZumz>dO zU=()JQ2BV}_Mz=Bu*S>`lo1`@3bFU^ln-ZW^JF{r%VplaI<-0N0F59U)pxGjH$<5Q z@&yK5djt-^qghhR#>UmpFm74m?+km;Sus$VONv>CUbyq9z0lef$tY#uS)0vJ>~2Gia1zz39-TY?d4! zpZ)$lFJukJP?~$X}~Y!_lt`D4VtRQi=KD>Xps6`&Fez z9Fr$2cmjetWk)>2xCzWBVvIZWVj8E`3%Y}ol4qt=+>ESE9!_WH=d3L2*twJ&o0`4o zlq6d|tyzt&+;J#*xsXv5+F$*pfP`>B%ONB)Kj#K(WgRgX3<`2XN))yp_ix@*#W6q6 z|5ligf00fJ{o1KgSJiMjwYN=CNXG27w{6YlcBIXunG$^a)Vt$TWSiCcac{Qc$nM6J zFwoWffdBp}<)LeESi}rXY-BfVCTI&AnEA79_sDH-iv%7^Xjr|TALH@a?7U)N zl=@EN%3MCKe0xFXMZVMS9LMBozsxX_?$VY{4;wxps?b;cr`KKK`R~n4Y_pyj3mZh2 zd->jcRgcZ2wit|o!Gl633m8~5gUtr9HU(`r8nwT2^(wRPTAD9{)C^6u zjuK_pBOV~W*Q_}LaP~$rY9V-zVENUI8rhG z?!^+|+cvX(RVZ0S5u!(sly(Uz1enR(?sE4Gg;2Ik070OcQ>W0nMb6F~G%8qm*CiRO z^$VXz2r?(jR>SU3e*!+$Mp@7QX0NfthOUcs_V^io;F2%u!Om8{)#}>wUHs~4BdhlZ^44xg&9Ef3(;P*e$!2LP_4zFmYyuc$X~-b2DmimgFe*Pl{NMe$`AVL$ z5DtSzR=D6CD$4l3^ckD;=@;3&hK8XuAgzJ@M%$rGQONv%Q&rd}f=Q#O81##PU|kp1 zDJmvrthgCyNDmZNh3QI{nyc+ z!T%$pWfnwA^qVPH444s$Q3aYL;&*?t-|gFPQOPyv0H7CZ0&Teg<@JoG2DB3NZiile zzB%+l_y@4rcjR`~EKYyFkt|2HUkBLI5|kQ0KxA+yaBYxwF)V1SmWzic9t5?1owohe zRkp;m=j%|_{TQlyp$0^!TB#FRrqSKa?FJ}IlvPzlfie>Xax-uLfdiuXl?y5cl+l~; z_SR@aZ=n-es?c}Y&K-2waiH0bfK@OU0~%BeN+K&LAgtCGMn+*^7h{awo?EX&U*iqn z-P8blG$^)#U{4OEo?i=8=l?&psrS^SOFRTt=- zj9uSaY-s{v3bZ{vSs#<%wSDmLVH33dg^29n`xQ69`8Pr5p*^d(lfzyHwsG54n0MHf zz~J2f1#LfL1@2?&Ep9<%XNwSM<%)s+z4VD+g&E2k8saru3oq7T2u-NA&Y&LFfYMb^ zJ0+SdY90FeF0>;%hs*;~|D7lK0`$C#KqYno$m~&Qqq+dib))joG-=I_t_3}GiL)O= z$WEotU%U`)ky#AM5R{hg0a;)ilq@6`iyu%?hHw=+{5szvRcO_89@^)(KtuGE#R7%( z0OfT+do-tHw&rR_9~=YH>p7KM8V6eOs1>2aXrMgfNv3{HBAZp9 z<^TZ=JG>2>I|N-nsucOz-S;NR#xdyGlQ^o()IE?f+)jkwI&}uND3Ze|~2cR|TfUaHHDYojD?>vJ`ZkK}O2nub#ZoGFsw2!hC_Jb*D z*N3u)WwrLN20=7HSv*j_M?%vA%0VvdZtqMNwm=^{?p^NBJyI zPyTRj1cXK~*qE;~3E|L*#eeG56>zr|@NQxO8y+3`X8p6PM&V#~vbo0PTEODU+QrJx z2Em+PuxwyzN|H4?%%iRYDI_zi3Z9AmetOIkDi{(m-9T+`Qhqefbrch9D0O z8yaXAIUF@G4Pn68+g`JtWJka*>=9?jHbWo9|X=mAc-;D-8YY;LElHYv2TqY}mSX0Outs!sEc^M%Vk2;njV7d^Ugr zXXfObT}}3b%@Y@6O zy%h)qnqa@)NR;xdeDclO+BzPz8*R`ih(@8` z2haevNTG)nD66QPhv^Z8R%LO($?5xSn)4-Qf%hC?AIo($a~}-1z6uo}GhiY!rgS1;3T)dBZX2 zlsX4maS{0WXo7pQ2&6+g29zNYcKc-RSa^xH!sear%_h)}Sfe2ilC36s@m_Oi5*{s1 zGz;49@EHI3>CxlIu^^+0J9+iVn+Ff5@;%Ww478!$l`B_nfa|X8t7QOpd>)qc!pV~- z)8Rl0bZkj;)*-tytMhEfkZsRh=c;Ah!=bz_;i7K0vIq^Ntjda%Fp-_@auBA*-KVBSa~y4Gl-JJI6`gdup{jEe)nh?sU;}%*0&>oFP?JF_ z5ZPTrjU=3>M&z8JLti0$eVJqyX6OYxL9BP5PklB8k|)&iAb~;;4$;P`Fc${x2DU6f z9>l6_1vi6l(2c_t3w^rBq0b)R=yFt9T2c;5%fp8b4g69EDP9veiW!3$FT5Ifo2D<% z54ZRRVFny%ekI6b26CXa<{He!Em(_oNKs7Oo5av&X_OU!ipv0)-9H+iDNZR5;2Lj+ zr@cHbo&~gjmgd_B);=Hy-rqk9Ht`eO4=Q8Uh!;_S#ydzM(N*NigkL6&K)MgoB>*cF zpHGV-3G^tNcNE0as9OeI18BhlaG(>v878yv430xNsf@O{!~12Yn!2Z>a}GWaJ(WS; z&Hy@<#x@5A%=0bbrcR}sA^k^zY{MMFngP~;<{Buq0m8W~G|~dH4qc-uaCpgeXb7$M zHvyYk>fhbbgM)JBmZ$<($=*Ev`Dg??e$hb_ssvSkc_iiRxqW-EEvgzCBoKlX`LDa7 zOaUs~^qT2KGo1+t`5h1p(O3tbK-r#@*8ztzWTMiAaE~6xQYcX~p(~~P!|jLFYeNTQ zH>V4E{AW$FNKv=6zh|0@g z)8j-{;V2P>u|)4Aa1@;%yG#%X`#(q402!eXxV@~0YQSL9?YfIH$s@?6=YM)o{_9XN spn1{b#?bbO|N0C#?f>V4#cb#WMpQOkS%*V?Ip^Lgt9kT*{2jmIvjf*C1f0X z&+q-wdwkxX>-v0u*XR5H?{!^X)p4HdG4A)<{dT+EpHDQ@6zO-d?7}dNUg^puO$?*P zV;I%Ij_vS?Saa`h_(RI=@^v>YCo4Bka~DfY)!fb5-pS40=EgA(OBYugCr1%MDM8`W z$8Nc~IlD>=2|4`x3xZBA)t;r*3mUD&_pH5i7}nFedchz~P509bg>J)H`{~%hZ@C9X4z50k4UpvGb8mVQ z-lDE1X}}|Q;>4wkky821PaJN_P0Vd>-X0Q(4_fc^@Lw!tU+SThIdrU*dH9<|F|5f{ z=8kVv8Py&>3HKwZfbXM)KNDQ`V^kP+^dYtb!v@Z5lZVe99mlBQ8+)ksVHm-D2Od7! zdlB1)Va|uCk6{?TX5asR$p3c4UfFsuYebaxIa0a`6vgb?!yAU)mmh_pWC;?kCld9H zjAE&&W4o9YFc~`E#ffWveieO|FvbOWzDtf`x0(o(XYJ3!@6e$)H)x+eew;FwxD>Un~CKuXf1OX9?dyD*9JOoP9BN@Bf#vclwj{BM&tNtI<*dzcO9qs_&| zt)W#7SrNd$s?c>_#+>^_WNyK_;ee z6c2t`Src<}bC0NdE}FR}xQ*!=20lT-Q?SM|PFJ&S)6~>_SI6#qRY^%{7d^esVD0mT z-(l+YhX=dr4ktDzD)Nhq>%M*aR#`=*Ws%a;P_#Ey_C~E~^RwO9G+n@JwK(tLBdTwt zb;7vS+uO4Z7ru)SZ~glG#Ah@)N@ne9tmHMJs^xbk-a|~;CY1(awyhdbg2vh!8fF$l zu&kLHoM;B>Blz9>+&j{JmnLmH^WOR_j3wLUlq%S@XT7|+u&Ej&suUu-nwC>ODV>~@ z^rumR+!}}To&WiWqubDr>8!`Zbz`^Y%N|j%i+Q+6^2 z48MKEuIb}bX1(#_+*IpAhpDOeWf}}GGF);`ULp8sdPRi{7dJQmnKK$NnLewdscot1 z97>uV9>tuz($d}IBkvLuaXkTc>&r7f>oaxy#m=mhzVeQ_jdN2Ke~0zt$(k0A^;YiM z!x7=(JTfw|yw@-+?Z$dB-E^NPxh+e-K-729-hX4EBSy+KCC-0QzcE&7E-OUJwv}gS zc-SYhuiP`r;>+T*Cr@ThzkK=9rPL^HVXA6P4VG%_UE1BPDXOdw?%%()GCO1vg|7={ z%ZwJW9!m_7otE~0j?RuZ=LFrDO8LZ26B3C_q z^5iAw(C^+LBe6lT%X0GIOg)RsL&kOMRZ> zcj(xgf{uvD$W`C`b^z|y_FE`dcfQ3V$I_ugXib!j#QD}IdtmZy!k#&W-Uai^g9i%I zBjl>-@zv|I4Lh~+wr$^DPw`L*h5rsRGA7Q?yQvQ}z?H|^GTpZ}mh`TweyQg1^BXc1 z#EFi*u-(?d6J>#$`OH|hI+oecdx)Jqr>RMU>Chn`>S9iq9W7c~TA#T_37y1;I(5Il zg|#IrGT`REi^Mfd7uj{R!zWCK52yY9ebara-x$^?M0@9iD*tTkx`sTKwIhHP^PT_m zHZ?xLVCT-AWz(N_7X@ti;I`K1#yWE2Iqe8FFOFZFZ`D#yw`oaHR#qligy2#>e30BO z9DAXs*nzlgUF_JGp_^^s{VAT){ZG?*#}dOMM~=i{UOyi&`>5s|Wo6A&eJ%dRw;99p zrC;7%&OdDm*EIDR<-#p?TCkik!@~|wg)?rf5Chx)G$-QLf({E`c*MZbUb)ntd5?}E z!=f(O;Dhtq482^F<6;kJAB;AoU97IQpsjH9mXiG(QIe2wEZ04%VQ4g;7F({ad6azq zUXrjy(&tO%nKMpsG1%4VN@1sLNJ&cEeRV@FqffZwni$n(uJMYM8s)f@9~{rTd+(l( zrsl7<_6l#;##h1@;qr^yzB2La@*F!RKN25U#b!y3`86emD7U1lWa_EB7FUwFn)z#5 z@tI3op7}+G-VfK{sbNRPYa1D5$@;IRK}Z?vDajRg>d)d*iM-X6aK3C~u}A&YLpp50 zXo)Q3{^wZbH1*HicQbX*T-=Gcr9bO)L_HW%9f+6N*Yhtx_%tZI^)g^{#Tq73t*mcQ7gtxN{ri6wWhW%a zM@L7)v}NS^?z*<(WlEK>P9Y1mW$Jn7dS(!vQWNMP-*;LypGY^q_~hAzh-U~A*o)Xj zF0_VFdMG)c_18TPp24tbe-W!Idd6IReg%CIlDiQ~=sa~yzHCmdJkyz7kP4!d@D4+{dmk$e4MG{qt+JL!qmS z5%1q8c~B;DYD-c6O89hS(4R=o4SD!Tbq9W$)wAC_HK%&h2c@lW^B+eu>zoD^%K7hH z!Y&=zp^4#VwKY#XXXAJ1Jmx?Dvae142D?0lX?&!nNhZog#rdkSNRcLOk2TXgCg(f< zyx>03d9BE{O%o!}=5n3f*xFR}l6@d-A|}{flsa6EH33hhtftm3RK4y(8f2I8(g@s~ zi)UhE%Z6Q=dHLC)7`ebIPMe9&{IWmqo>eTyi`s;;h}-|s7vkk@&NHu(aeoeLxb|>v zeCcdG|H8mM2HVe%_h)FO2H&`GLln|Su0P~ilfVu4KIasigC?4jifP3@aSOot*Xb9;=tb&c$cm=3OQR*jg9o71z3 zU$yJV(SgiCO-=1qLoe}lWBgg~?K-xx_UzZI^P`E0iXmg@5_J zOgPLS|HgxUpK$?)uJ@N2PhHh8GaIn!Sm<>n+SCReS*?@Xd^^+-H4b~AosPrL`BQ+1 z^$+dmEMkQ|3%06|YSm?C?jI5|nJ6L-hREeW?$c+LaGZ~AAj)m|Z4Xq&@b4%31+w)m zJehdHKI%6#Hj0H_b#$EE*%N$J>PE4B*A4j7<&!x7>X8B`Q=1+wb$tgvQ*@&5f%QD!{!J0!6&eL1&3FJ9g}bo#o6 zl|!nJDHWF7>u3R6@D(1jNKq{)XK_khUH91KgWXo{DRI)9>aT1|yLR&OrAuCdHCC3E z-iztR<;DG8gY*c!JZF_?|2pV6eOSUV_ESv_PDNKYQrx~XVLLrbntp+mwT_mfV-A95 z5FmZKGjuXjiXD35@|={FpLY1z+h@VYo+N+BVs9Tme$2Q?g~dkSrA~J==9RoY*7|MI zcG_?cb^gb<7u!1qb6?1==ZW5YtWA-a`kH_A0EPGfo8XbP^v^c>G zn6Qb=d*;}&f%|JKPoF&_W^5*qd+mR@l*&Zq5^r)~gy^005mt?%9+TlLV(-gY)(_$E z;%V1v42*I}#RF!U0-Q+`{xre9sdw*Y6_2$A29jN8s<$@OA)@-sH!HT4x>}1l^&8Rc zJt}El9l@_R7Hu8ZT;V-;5OynFuy3*Y8)^5}Bqc_oX10MC!fSAFE{v7#@OXQso_beT zm&tMGnuqjpQzuWJWP*eQ@z1wAm>rklKHeTtqfdj?GyWt>Ky(Ppfcbg%?%jO1T`n(R zP=#$&^8QZ!54?N4e9M zl=P%(ZSq{Hk)W|JrKk*oKvCdU0NO7Q$4Q?a>@G6fU*f@0SK?9RA(v3}nv+}~{CyVOq0Y?QG7 zq(WL!(xuQ=$a|{MXD>s*dv8!=n+$mF4}j6x)fK=&S;7p?eXivg%!R#4!Rkm$(tR1V#>Ygc%5bb3+} zr_L6o$biF>Qq++F2{}f_`+Z;Xa%{$W6}7zO^*s3)oMDVq!MdXo-#_*dhrgZKBfx^U zHrH1S%G}aPB+`T+9i~C+PT|{_i?3qcH2cXe?=?T(p>FEG5b=92+z0@lu)tt&52Ntv=>@VRdN^ESa@ERWOHkxhSICpw?u6Dq=eqn zC;9Lkf<92~67*G+L&Y7##hoI5oFh)!I+y){VrtL(MWKp#%=ul6SaPd&c_tzH7^eHe zB7}KuD9Y46XWP(d=gDd6z_p{YnDeXZE#uYSjPRwd*&Y=F#Oc-?<8rlI9DsUE0#+=U z4j#OuHLzG2ey3V;>PM3a$eq<(%`^F){LViJ=q&;OZ=x# zUu_FmYqG+eUo4C#|Ex(4Jz%q7I~uAok+Z|P-bwCD)#?~OF^r4TW^T9<0Y~>1RSBig zhkMyF0=L%4G3PvUPMkcsK%imxQ_Jeq`jm;kKKtP-)2WBJL)6z6Xt!-_ zeRTE&=1Km_UV|#reR|-0pZCa{(4>h8ds;fW%=VeUXIz&R75UGdTT7}tA{S5rPmWXZ z^Yf$CrN{77k}j9Z<~2vv14H*7&4a1uSKLOB==Zv4T<)P`WYjCgX5E^0t-i5w;dHs@ zlwj&EDs0-JAyVm_#}$>RZsVQx_sFKy{Y7?BvK#YSm0O!@amBA*9cE%;8ik!`Qi+FB zB<>EYC1C4oSFT*S9Jw3AtCuYr*tGGDHXR=?txoG+ucC8?9GziWT~+2eHECnllJflS z-Mis&ag#O;U%zTVR?v+8b^yblEwba@_{rd*cV~8>1BVBo-IA(~_GRU;!?U0uZAgV; z_MKQ6YgsjyCS^uC$jk27`h1IeL_|b#z{cvEJjw%R z6AgKJywBpqsMvl{49iPORq-SXT)wPyfs3<*w1J0rYoIkAl@t(d~_B)g` zYC1svfFSOp@^Qh@r~FCV=_hiwMLa+^3e{g9Q^MK5=cMZ{P#o(w?k;YeR5qhSo8LLX zye3IqHh*$!ZQZpz^StFr;4TK_0hK-4t3;Hs@Z`#)K`59``O1r7VoCX~&Ii8eupJgj zZ09C&sH^aB4gAH5)eN_fw4^y=kMYh41pvi_<5kNS_yi-Vm*+iYCaKT|{XQyVeTHN0 z=-Lv0pXsNIQs8=GpALb!Y3Cjc&(Tw?$|9n`$M?Sc!14ifchg#qB@40S2>#^wfKZcw zuF0nZ{0KHLr{gi3ulsn<8T$O*U!HkK=;r~L{eX#-*GWNp?0#7f{3Y`OhW}g}{rZx$ zU~4p0Nv@htbY=J=Y10|x{-7f}M%Y5i|15(u3Y^Kf1Gx0)$e=ldY;bSwZS)M7ca~_^J;VJ*=aK~!n)f$c@336dM zi#BZl8y2`equA%s*cqsl}!-oBCbL zt(bkPn`@HIB4(SW5+%sT!;_Z}`QgXa=PV?Fd9rXE$6Yq@1p}1Q* ze6rNYL+{$c^a_*`c#gpJeBgyLUptm5EsS^Q0nZ@j&@D<_{Qmu_rL{G`fIwr*p(97q z0nOR9W$1W>@4*O1j>sC7jj;0y5hs;3+Lj%#-cr}p6ty=Q0M2Zi-(4<)IP%Y#Gur!dT#i&sfmJxX@%YS}OgYyzFZ5*$81 zKfi3??(T~27zwAGtgO>Ynpdv|aq@C=*V)C##vUaWlVPaCp#;S>O!k%YC%|B<5t;O^ z%&QF8!=p?zy}bumyaL9gC*||!OG>~6hC)?@;$2r93@3myelfA4?-md5-{(1T;*%W} zmT(pdyN&e%hyfXMJ(#519}WMNp(ykSz?;48DzF|e>M&^`+@ax85{y#0_;63NmO3su zL~ir?YjFn>n`iG^fV9Se8w-nv7%=%Gv$IL#IbjBcd3TRF7q2g}6JW)R-eZt$O1qXg z|Cv#phnE-NiK=G&U|bOH#^)VuvVPZ>`h9cvvdg3evz@d3`RPH1NoCpd2pUYIc)}in z4If`?vo>YzD?DNSiba>s@MlfBb9D^9M{xL#NIRtmAw9jbu@(LpA z2Wsx#OXiNtE8n%uii+=ndmfa~SE)2iD6-*0zI}VyU6_B$U)Gs0X*&?|H!{3}V6pCJ zS5?g-Hj%S^^D&B6)4~$H$FdE%OO4ubczN%?A?_XwOF8wj$lue_1ih>cdinl61Wh%0 zbjNg8;~iC(NX6N1%Xx5vdY=XYX=rbXRgK8g9V7GVs zePwj%&YgDZfBas&t5nOjQv*n#as6s}OY}%)VR|Mn7b#)=zOd*AM0;uAK~zs&&GW%> zD|L4zsBDjTjGj%EnmUP!2A%lxmIM$Am$IQ;xU|n!gbm zuY8b||MI0P66DipThgTdLev0XGo?hO!{}sNu9GL1^H~&A)3()_PCgG#Sz=f`0r#Wv zv1+B(=f_m-b11^EqaoDJ1EAHGnVcF2ahPxcg|@qu3z4lQxeH$<2+U`8Y{T%o4l!CZ zZqO}52?%GzXlY3urai{A8scbFn9RN(28@J%pb~f;M3Dl20fi$fI)M7@ye^Cp$c1*+ zp0x5^>*AO)2{LLB2bw z2oo(SRvouJ1&RRRRHfeHBqa2lDrO#95#zEmbIO!MMg3RZP&Ed6L9$@wJgHug3Dfw( z#H6&bs&vj%+1&i<>K^hi;1g5;gVF)PAPM*|9)5n6&_c&PX~2Rg<`p>o1Kbtbwq=B| z=jP>Uczb)B?8dOrgGcRE=l!}YNssr#bj8L1y^dldkP(OkL{ShTCor^1D=RDYKYr*s zJLkbUh89EsH^aYWM}_M`IC3E<6Ay53n0~Z|c~CBM4~rCvI&tD3k5{>^7r1%i5-%^W zExD@l03+kVWcd^%oOy_Uz;pvn|6Ty0ND*fAQ3J80sy)lb-@SAqlUC9=poeDJ5OGHZ zR*i)gb$h>j{+yPUc7=|CeZHHUn>+Qp@AeP`_AXtz-$9Kz7azZv6n-#sgdvUZC?m$e zCY>}@y=4L+)b_tnURT`9mv14E0@d7ooeN9glk(D7oe;6<5VV`MPRN*s%7Fnl|H21o zT8Niu-YjZ^u9=x7_$*Ck!*ec7kxikx)q*Pc;Qsw@fy3Yx6N}hS!0;`)nURIJ6M;o+ zO%H>Glu88Y0}24sg~>icr~|eTct>OynoKBUxs`l?wLQ3RUjnEd889ctWp2&kyju1- zESN@HYZmXqn58EZA^P@_i>V7;|3x;Ia_qy7-uy^CK7M|=v z58Ke0W!LV?j!eCh)V&EZ2&ycz)m|y-yDWX zB_9$w4F+_Yu#Pm=<%k}Eg+Ip|Uzw|J?pfwXL7+MY*Ap}C-E>T0>r?e@grKX(`g(jw zihX68_E~W2ObA93a)G*3WY32a{X+LJ;5FW1xU@y3h7grx_i!UAIZ9d2RA6YN$CzG2 z3XQ8`Pgz^pJnNxT4<7yf4B_5^TM~VoMUD=*nHrEFSrS~(2nKf~J?Ue@BA%%bFszQ3 zFLbiXu)C^nQW^98`)d)$*!f!4c0$On8!$V398q{U#?*=ZG+HB zf8^}v7F`XEggZ2JNMri>^XFJsL8^<3%Z~*pdt^D~Oo2nmdJ<0+J{ygFFt6F}KH1w< zAZz{OC{pc!pltzWcmCHip)t_PaD#&Z3vGHn@DmXl`m0SAFbUMY>aHU{+TL3>6j~G6 z`@9C9kNB};7+Ltn{i0sPoMTmAtf>d!1`e{ZQS?oV?W4;)C}a9gz%zPG_4_N-$pFEK z2wM~1nOasKpx{6@(@TekjFI&()6FqT2d-weSA9D+zzA_ULr)9y*q)#ys~+c3RLKGb4+dzTZ#ZRYk-cYXJ8Pcw^rsp4vNJ@TU=~x z*8Th2vJHyHlInn8&^9rNg8(*d3=7E8N;z=(-aqf&ti-WT6cjZ7nJ>%;=zaS1sWn}T zo45!}Q^xJV+Eo7vDc9jYb5$SzRfIcDZVL_$*7fjMR0=^56WAf2$mQkbmK>mS zyo1>VHmVfp*Tyiv2;w#Zcf6k_K;af9J)^fU5Tk(Yv>?h`ugPuBFc`Zwilw?|!2{S$ z4}1hVDiY~Jj$*+qV#=kZrEx=7g_LM8zW((UP35PBR?pFGH&_o-Wf_*_$ZoB>BB(AS zV+8byNe}2LnQ(@<_IyO7`L8XG!t5>GimizprJtwnZ+PsT^u{K7k!pRVs zcgxFOAl&idaK<>_#c)o`n>SI0Oixd@Hj%*y+#ifcftwb%Ny-y$2y)ZLa8B#*uTcCi za_lo0KFUG5USOpPclRkXTj4niR8g~qOaD_IXtNvGi6xAsYt_Z9F%Z73T*WF-@c@h- zzleyIXPv|}ID^zrCR6`K1*CuabisX;bXhCqYI@RAftv(1TJ&Lu^?alQ99}0)&(xVLo2oe7FEUWY@0H6xFb^XOjj`1!B&-WSJ0m zgdTSsWL#a8v_XMZjgtXpSAQ1+L&@J$+qHh3+=b7mvEF`X&*3xjuEXDvCu4PCJQY}9 zL#UC8%1^_&S4ZTMg{tx<*UmNC+@M;ohp%t@OO>6^HY|}H!iON`;XtOenBxgr%=h<* z%9AIgJ2ap=k_J9{=-tn_56?PARWTTR&d()D2qP>(My=ecny=?45$>R%ij!@jxz02r z2kb-!yKJ?;{XY0x>U-;u`8lG89+kE~g-RI;;?K@q8ymwUIo)htCLsL^BN=OlfO1 zs!s>oe1H-{e35_o{J=d3)AR9LSM*FBJTKz|k3m59)4lO-zUg9nWuT1>-0U&~$^h21 zbSmnyHmX!LHSh4VH7KUX7nt1vf+=~N%Flpm=xLxPe00_-s5Sews9PHB#!aL#PV@Ga zLnhI5D|8=amR}hJOped?m?~CSGjWe73i!sQX_eyE@4eVgyDWmPBW~A$V$i_@Cmj0t z+A^(+7&q}x5s}oHqQjql?If>^k+fTyC`O%j9aRo#qF=rMrKnVUef<1+(!0wfX45N5 zN{j8=C3m7RQ2yy*NSraQ>|WgrK9{xl>ag!Pb?jrf2l?b3J6_~en>>9Q`sovFJZFU4 z6F!~RKSAl$FO&8AAl8|vC$wfujfx@d7u8#RG2KJNz{RSOkUQ-74Kx?Knk&oQ(@Si$ z($l^|-a8s{{uqXLdHF^F247^6?ac%#Q-S(-c*#w0i~=%LwB=e!K(FqV31Kv~d&&BP^26 z37}daJp_OoAC%&?PpJ~dcz9o?sF$4bh~$h?@fl$oZ4gQxZlq+>6Q-bu?o2pOgLDVr zBU-wP>`-zUEgR2iffdiM!~%mk-1s`R)O7@m7M9%w)*+4+GYYRWx8pP3Dl(*-%8jm! zsPw#hmt4MoB6{ zxa`59{|pUjUrAJi)bFvpxa9<~wuU#Ju)m$Hme&^t*$IOXjBovjm6G;b&I39VqTjzO z2=#wg5PYosv>3V2CArZ2;^-=y=arrkSRWbnx#z|u9J-TQTeX2{2fK?Ahu`!a!4Ct} z4xM@Dfs953d&lO#>V_GJXa8cEGt=OftSeShnC3M#vusR2neyEn>nJHdi&;11`eI1k zL?_AA%WdCSBIklV#1;aVwSNT|QuxoFB^7+GtBbNI!UkUFRO)7EDV8nYu!~{Fbm9{y zsjjN1Xo2O)y+NQP4e)}r^8j8?$PBc%hkK5^dwcOwmv>y&<}M8P{3d#`p;4#^53OI-24b+DVdh~qlOqEexirl*!fOt zYDl4#s?E8d3_#8LG7JFS(F&Ci7bhnVC|m{B#CB4$3QBp9olEgZ$)5yLe(Sn_0jpz$3bQ#38LeD7^B>Zr3fkrMsY6FD&|4~x# zMfEtSj=Hp{YI=QW6SsV-U0DXjpOXW|7Yw6x+Nt*1Jw9IAOT%Z&AC|aXr2_re`}aLnO(2VsA&-6 zU`aJC0tspQxH^stC@WBtLwg*GXtx`j44_J=fKr0+sMq7QdmtIeKky#v(GX09p`x}g z^e-=TeA7104emcuj zPol1GV+`aHLi8W1ZFuDY7bTkQ*Fzjtlz_3r)D&SBwO@G8CA~VFZhX$J($gtjk-=vJ z>kNSbOvAKNmA94x+bw#7t4Bhn=?Kj5WC_#&=iN(73`ks76Gc2jmf9YEa>o4+6b=qgcnE>7O-m{zwq?o*TBA>@5WbJ{sb6BCAtHb8QBd zHZ2flz&eQ9YTFoIe|2!6r1~1wGHaA@ZKv@i%g*Y+YVe2US~f(E&Nc|?fl&eIgH#}5 zAt0KBLiPOLl)%kN;W@Cb0?Q5M%;o8M4}vhMC0lC4#P3?!f-V%9&ME(h_GA#+A~=zP z_20On|A_R4w%Z0?%Wh~JRD5u&bhYLc37e)%7<2i2Y#&IYpiHJ+e6$xR@&}x}=gt}a zE5uj*Bg6~NNkX{fJAHaS3!tga^+wFErnj`6i#+!utZGB|X;5LeU29&6ASTHi{DROrm^;e3;rO?ZqM=p)*5OD2~rOysc5 zPfkKqpoQFOI_5w9kq(L9;1{eYF0pA*IDh`Uvbwq+F%HKC65Wyd`g%=UTifWmJ^#=c zA9U;`u&=CWX6lmE<&>VYD0LWH7d?8=Wyp+$OMnd#h{M*2u7ZVTMGmyW;?`C{5M^Rv z$@srfNehJv7|pbtn4PjG+2Q%D1At{)EaBHOMf8kdROa`^(U#P4@T-R3RNaR2TXwDl zn;VR=Hh6ADE$hR>OsF>n9=@c}>1j@c+^?VLZDEmJ{OLlvffxj|^&|1*fTI{cP2e4T z24%85S)xC0yH~|h9BhWP(-7*-00PH;zsI1wFs1~Mab52)K5Ur+Aa2^QAxfpIia(CTDirvVnmX%RrAm}?TV{{(5!m=}mZ^ixDp5u!Hm2{v)&#eUE@VyYbP)CS z0nfX4lips;KF{vZ-DymZEwfV}!}Ad-ktPB9-DQxY2joXHbCH)VbNAm}E+4T3vL+bb zR3|1p3?1&=(R9v(h=07#ecy%bG;(j03 zuk;UGdDfa09Uf`rWQ+}{L*DVLog=Eu%#a}O7B7r(IdpTnkKHtdUpm1r?ZYB0jfZi= zO~-AfOh#)MRCvorpg+21-cG*>at*x)bL0T_<3H) zZdJJT4TZjYmz7&bM_Bd(B>HED2LE*U?C|pLGm?zJ4L=2i8^X*9AaMohrj>wM1WJxg z_B5pnk@!VZy*AH>aZ@tB<1_;@egQ2sI}(l_vB0Gd4u+`ojI~FEhGi#|SSZ@~CMrO> z%-cPOQS(TsL|%Dw&al$2uS}^eV1s_HSy9&z+Zx)2#S?NZFzX=#l})!Oe=l20dRSX# zM|xP%259@AIIzDWY;4345k#7|YTFGw0KcM|}hdw{)c;GNKrz z#^%eUg$@-*PXxU%KMq*F0UdH%yp@|}3y+KWbMm@xSR^luQ?hqs&K{7W2F!y%$kZkF zGsuM(lf6@6DS-J{oM}78qqj|-@bl?YR{Hy9(&bsy)#ox`8k;-t z_=_<0z}4dX6B7~&H-0`!?l1|1g_bLh$$tU;gK)gp5j5hb&kEX4o&>K?lK&cj17P7Y zH@fX8nfo!sDB@{g9WG4pf_Cy+T;G9;io~CLeQq&1snd`HT1ZwXTmyiDjgV~&Xnv@| zW!I-K=2B`8KWE1o0K<(e-as)GJCPmL^W~-1W)y9Dib)HnRI~c4vrdnDSJb(UpDMDo z>|3M5ocBUt0?(~3(0}ugP@+oxk)IzZriFU`+*@F>%D9&Ju*_}r-Q7W_htwGfdZtB_ z*BbhEMk(92+5V{N7!0p<`z9u1 zn5ghv6V|8?>HBJ-gQ>f&UP}9fl+qcU$SH~&*EWrhK zQKGls0lNV~#n8droYeGIQ{zQ=_)RB&4BPsBcDVEMsjc^JqnhA*36y+W2~PhQVT*@B z!Ym?IK_}d%A+u7fwMUYgxr9F!$M}hG={SU>~tOQikX$3DYo1X5X zc8hKkzkIjgs^&yWIs+KFgO6^b)-J5$hM5XBB`g0c;kmpa4um%yr`tQNVtRI=UigHd~{AlOn)PEy@ZTwf!TIJS8Fr_bB; zJeN?0Yz`^rw?~g2bS*_ZV3%Jm3Oz8M&RUmZp`ZV0*PXTuC5c|MA_zZoBRzU2;XBW< z9o4`%i&{Jsiz(6J&!hl(Gu@FIk`1fhj9-wd#%Y2)RSAZX@HYaLb80q*F7H9jC#{U= zIXb{i9H2gy0jneZA|0=+iL`S-+cGS1z7hi+Tc1E71-h!;C;&`Mt$(QQ z6VECbRGS!7mKA1S-VN22JigG^)5f>l1CkG>#!R(OHu1xCKuN}dLrg$AXRoXTgSW<@ zM6J72OZjTnItz&Nblc>$r7hHs=KGGkX?OJ``{ovA8%pqsYG>#XV~A6)PN^yjZGd-C z1Y9O*8gg6qv{h+5cDR!@EV26!-h4o?U=-EM6@(aP2uhp%jdw-r&sic&K{VeC3OE@4 z?4)9nQ`L;4@AP^8Wz}fS?#LI%*rdVXqAa(e-7V{q5lzh# zluq-7UNJkXA~xxp&+7$v^M`+C>NMD@U&*VQ?9y7Dd;6ADLRNmx;;l|3<(YFGWWX>^ zWUD<>yUX#}AthScWD4V{>*_6DW9g*gX=l4_j@sc%UweHg^LF z1w2SrLkXz+Ls3!1CAOBvDH~(_=?;dOlux^}O=K)8Lh^4X9z3G&qaJ@Vn+8Odi+hh?W;?Z?LKA+OSeOe7oi=p zDg^tJx|cmXQlQ{dw?j!pG1)bw&^AKUI@qm2K-WB7P1+v(wQ&Oe{DWN)L@xzz>z z2?zFJ8-y4!-L&#`m&^{e_uFla0xQKH_0LdEzi-IuFK=oh74H@b-&`XzhBO%Y!t&#$ zHe(8n7lJZctm)TGol1|Xj}qAK?aXTPvCfLp1^;J<+FQgfT*z9qj?Z2%1LK?1acnh> zi9d;Ucb0XpiRYU(kNGtBoqC}U89>U;n#!#pv3$L4Z*b^ajNH_CE`QNYXnDB25A)ad zDVv{f(Ii(TQ{{O$j8|2Dkesp}UYv3gz<^G!nep_l1g|pcdjsht2Z`&@6W|fWsZ{oB zS7u4Bp~TdplxxyRe90sQ23C?ac#_I*rmZ(9p$m^5jJ@HI-!N zBu*xl{eFML*l+Y2n>$C_W=(qse8eZr6*q-*m}KnX^CzF}R`UpI>FfCVl`D$ch{~lD z8jX6(EK0uV3~z3J5Fjum*iy9}{Ig5jOg@3y_)hz3E}3rowzxKrju}Q>YCKJ8&PK^xzb~>dL-SuG_(&bU)YaKRcMXe_%kQa8Kaj1UoQZh-I`grG#P5iE%_<7x--z+2 zO9rW?heI=ssE70)w7Bdoh$zK1FsMD?eJZsk zSP$>xi82Cr9Y<~Y?^4_^!it7iq{Rk2s&ZeZ{!a*PKKynA6G!bgLT-{nlpbL@=# z`CnZj_-dC4(KAqrBc77f(t>jU+7j@EvZ`uP{#gveKOO31msdhup`Qh`#A3m+KPLo?K1|=ga~xLo=I7=)ERKJ8 zKQ#zmKj(TrqV$MKBA(^{v86dEk%QJVCm45$OGt<~tPF>bN-vgDem{De6d*I{yUvJHS= zleKmD=2%N=2vlQWz!pFb6wv8ryRCuN2EsTD#T8IEq2D3@ojN5PkthFaLaSo&8!#F$ zV9?{30^4UCx^CN{C%AG^A6O8ZO75H*Tkz76=5;S3&d$ z#7(`w3gX5;%z!h6E8{C6Z0B@gN!ux@sV&+sbdhRx&b*&Hr^*|KK$xT9T3K2%`5zmWeQ;VGrex1*3yn$HmEVkW9o3s{NM2P4 zU4fRbiemLwXFgt1P>5lWTW|7%_Ojuv&8e-c;CF;r_1HSzF1NBB{7?0MK+O$56RJ7` zeaFIJ*jltFLYowDRw?T7vR2^P8m5$x#i1X17zp+3tQMK`z^#0TPSr-xXc`~Vvt9*F z{_2Gbccs8RU>(0USxyA?;Wc!Y7I;t$T)~PT0}aaG3pQXTQ-GL11^%ln)9QY|*>Bt_ zj(ufT;Bb%g_n7Rp0WtqOm>j-?llHrcP~}Z%`EG<}75)XkkR|9&dySe0te{8n6f_dA z4+#Yd0~dvEu=em4Zi;MBVD;PvvI_9J!qB(5Shxnmenh0!2zo)Spcg965-jR*lue)h z+QV}ou)hX5+Z7T^3|Ky2zd7d_1NRmUXx?jari1Jb3vJGa$Sh=H&lwFJl!qDIO$FNugMW3~NiW;2&#%2_y2r1tvAk%I?s4*z&F-enEinL?<3k!^%C*r_elZ6Vr}pp zTgM|LAS9$t4p_^!jvoxUZ69w@muIM?^aT9Li8YTHz|Y$zJc0uj8k&$d?z3!ctd}^E zbHI}e&G}dSSLd%mlLP0L+!S)`f;YKMRiZBmwtgmDGe+DY#=2Z9paa=3z;vxy9kB7+ zrF4DMzk1?*1Gt8B-~gr2s+D0@0n;iYsQn{;$1e4OBaL4lHO6~y)W{VF*c-y%fw7({ zssv{vYQ*f2wPYJy?#K)4p|nFwOY7TWJKhpitzu;!>`XE($G?Rj8#9 zX!nhA(=C96{>b}T-jLx8-7M|UqEh5Fa|1e#`zBrZ+VV{pl$4c}uEEZWc=aj`feQ#a z;<~ysy^bZw!w&WyrBDD#+2C{Q?o3N zZn1cH58R;>4czn-(0_jk1jy;ay8m!nZk3E|`i{82_lG28ztKd$cdsrGKIjbuVEZzG zl}>_=SI=s>DHtgmq)&pOUk4flQTrV18uVULszK#M_OjD zBCwJ5y6)`VSv?L3EE!r#wP9FFQX9$SC3qh}XUpzRXtL`ISfe1xJavf-S)&>n!rnu( z8?gO6I9y*#D2+y7K>(>pUEChr0m67;d z5asnqU0x!!e~_#Iy|)QOFycdOHRFS2J=VY%w^20;MkWqmUfZiTKT-x;8tUCvZqiSo@7y2$% zH`e;0_F_!&MsKqKZ!Dz0sWJ;lMLB3k!V5Fv#GykoaAk;@cAJ;tBY2kxJcH5?FY?C2 zzC?}nYXFb*s{<<0&&!*rov{FLet}(wphb|_r7D2b!@$X%g(hLq4r5Q_=!?G%OB@}b zL&G6b$kY*b`Ks!QO5JmFz0ed|e-ICmxYWUVuusN{5yoQwV8oGF+p?7bt-O$PVZ%(T{ ztfi@W1A5xNg9i+{o&y8OaIhVyCo)9QGhhv_N(Y+62G{wOZC zK436K^0nDuY$D> z_mhZVLD-4|Hs3K0#CpY)&4in!- zI|Rc-YF_~)IHJTI8zQ{9Q3ax1^v8R2uVJdSDt+8rptbrhhrRDJT{2 zWaKCMe|o1;wZ$kY84x?S44Dbb_}kX>AFn(j2(6>&2~h*-WPld|2#>;I2u;l^Cs52Qk zV8tDK(;&?#Hbe<^&@jjh6p>wtxKyaaY&TXH&ytG5C`fY$De2a;W!2Gi*U*Ju#u z925w#dD)N@tUx$6aZs0CNrJc|2H+0BRSXQ1>+i4oiHqPZWKpt$b3ubuxNFj*Ton#!1TaNh@uM0r(kYM%q$Wr~ zk5mLQR02ZHfKfnRL)g_q(CIl2DO3*tCVH2K*P@)yd>Rk|TuKmKbf9A%DiUZfiiz>5 z?^uJj^}^eO3P5@^v{(hb{Kwmkz@H?DvfqroXQ>gmJb`9ds~?JmD}&yz?G42)QqPgi zacg}<4!vq<9^k$XM5i!Lz;LRt-{pQ<|7eHUIX@z|r4Pw`U}q0(br~`pEv>hMYpIb- zd7t%08Kz+ZdfEEjh9OO;nGo(kg2|I7Pf*txWY9v_5w!)-RKLgD^;eW`!dp=?5)ue4 zyO*KAIBvEG6+q}!4NxoaF3n;1dIGcv>GXsAj^;kwxEwXD`@oB2P{TQD)BsHN0Tp1V z84iLz0GQXPhXb{#hbGBwjH<)3M{lhuv}`!!4;6vWVwbi0icg5l>|^w_bnIU8D1ie_ zge2oPsLjQX2^6f13J5gl)c`T@@(bWb!T~bCY19w`;{=_36gk0AsD)P`Tm-1t3J`!( z3D7!>bQ}Ut$jQoV;L^3SY-a!uRB|p Zt7jU@mZv$A4(Gv?E~{P2xnOqp{{WKp{`LR> literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..91e986c --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.438935,2.225673 +2048.000000,0.560500,6.704792 +4096.000000,0.001479,29.120886 +6144.000000,0.001152,69.249084 +8192.000000,0.001536,158.288132 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=256-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..0d73c66ff8ca3309694ead0278af730778485c5f GIT binary patch literal 20527 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..ab60cb9 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.001379,0.948490 +2048.000000,0.253063,2.807466 +4096.000000,0.450294,12.528571 +6144.000000,0.832924,29.624063 +8192.000000,0.837758,71.584770 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..f0109acebd847ce9a8455809d6e2d4c0f73280c8 GIT binary patch literal 19537 zcmeIaXIK>Lwk=#_L=jOCMUso4fPe@nf&>Gh$vFoR5dq0jVjEc|kgP-%8p%O2O=v|y zK|nGR8<7l6rpbJ>T>I{`?|sgBo_qg)Kh#Apy6UYr%sJ*5W7ZQLEfq!vb_N7N7%{5X z^bmv+iy#z4dRq8Is%_vm{BzMu$;3R~HG< zi=yIZcy4=nxp~Tni8=rK7erk>?8Q2clTN}#_PME=dLjsu4f=;7L*cyxf~ePEu3a|p zOPm|L>&0R?RKNJXDDu!@9>t@W-jh7f=>KMZ$^7o?**xO?zfYG_eGvRqj!ixMg_-l3 zn<5RTk}{|62&dBXGw-nXl`o&ARK9-&dBk_eRF$-)!pIpPgn3_yuSxOTd{yI(-!zs? z=XU9;9y?cmi~>Oj;`e7oVMs{KGlU*Nh-ax4;fK(Z2ql6@AD}n{zhOgp3Y=4C>Hg5OBzVD^vqez1Es-JR>?d%Tnf{-0x47Ush)rILzDzXc<# z5i1Q1jhdR8M@YCVGsVIg4w<^(rd|#~t6}2$IN3`G$>^jm@dQ)VZ%Vq;?SZ=6<<_XjiVev97MJPaGu- zi5Kz5n3}%+P*eop%K7~H+M`F0F8Y`1@|>-|J<*c1x!Pmhm4-Q@Oi6(RKSL(@zkK;3 zBrL42rx*DbFYlZv9c!A;T;JwcoV9_T-W3??x`@C%zt{S%;zu%$eW5|9Dckq`v&r0z z>chG7ms@08|ICF05Avyb%p++*Ja~IO)yi{khb+v?Teq{_ZSLCDWo&JESBVP2cGUA7 zDtGQLZQfa~-P>`M+nh{oY;5!>@E zqhg>nWP4G?FxyCzJ7^`Muf*y7!h)NKdFl62mWB1j(bYbu{HX^_@^0bmqE=NVk;S)~ z*}Z4FHJO>2pT2m}mE=2=Ssg&G9Nzlzb!2#N*O#A<@AUceMlj7r7|avKki!TuH%&qUoc6R1NjO!jV8m1~U`VyjYIzGOA85-lEgHzTF1{Uc`0(N4+iib250vX( z7;t;gB0GO+(7l0^RZkW{3JxK{ZM%^>Pu23bJ8%IFB*U(PEY=VCwL5dJl`HM);T0l6 zLTd0RLPA1%fq_-{osu3aeH)v%Rv|myhPjSi;&zQJmhN9z{WquH!}d6Z$8Jr4N#N&f8@>}0Yj+DlPFr+)* z+B)Hat9;hZP{4fGGqIYCPoJ*5V3$(!9RCjcGQxjl@@=O6`%0D6s*~p=_22>J?y87Y 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..686f175 --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.152944,1.764381 +2048.000000,0.248449,5.496425 +4096.000000,0.613376,24.820086 +6144.000000,0.583715,60.615711 +8192.000000,0.265728,141.684006 diff --git a/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=1-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..4103776855c86c26f927af27b9c5b07842222f50 GIT binary patch literal 19943 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 H_woM&Fd%)j literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..359bcbd --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.236832,1.944196 +2048.000000,0.454954,5.739056 +4096.000000,0.604304,25.787445 +6144.000000,0.281980,61.076481 +8192.000000,0.001434,145.263779 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..5f771391e7f454493f06232bf1427175b272cd0a GIT binary patch literal 19897 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 literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..6698e9e --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.259367,3.784511 +2048.000000,0.483416,11.617672 +4096.000000,0.215821,51.328354 +6144.000000,0.001877,100.000000 +8192.000000,0.001536,100.000000 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=128-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..1174eb9671aea9eafdf5b6c3fef362e2bcf659e5 GIT binary patch literal 18566 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 Xul=hz@dyxR2!gqybvf_S_51$|>FGs~ literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv new file mode 100644 index 0000000..18bd4ec --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.147088,1.814945 +2048.000000,0.253838,5.710850 +4096.000000,0.616780,24.963852 +6144.000000,0.614312,60.137470 +8192.000000,0.295790,143.506439 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=16-kvh=8-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..e6a0318b5b8d413d4903382998b338e24a8a6e2c GIT binary patch literal 19933 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 XDiAOMT8fY0I0#l<_hSC}tM~pFYj27d literal 0 HcmV?d00001 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv new file mode 100644 index 0000000..c08dbfa --- /dev/null +++ b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.csv @@ -0,0 +1,6 @@ +seqlen,Triton,Jax-cudnn +1024.000000,0.213497,3.775728 +2048.000000,0.390579,12.141111 +4096.000000,0.481676,49.568768 +6144.000000,0.090283,100.000000 +8192.000000,0.001506,100.000000 diff --git a/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png b/benchmarks/triton-vs-jax-sdpa/b=2-ub=True-hdim=64-qh=32-kvh=16-mode=fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..4e01e6bda8fe9639568638b8aa0751ff10e90413 GIT binary patch literal 18650 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 Zxv+aT882(CJc2 Path: + home_dir = Path.home() + app_name = "triton-compiled-kernels" + if os.name == "nt": # Windows + cache_dir = ( + Path(os.getenv("LOCALAPPDATA", home_dir / "AppData" / "Local")) / app_name + ) + elif os.name == "posix": # Linux and macOS + if "darwin" in os.sys.platform: # macOS + cache_dir = home_dir / "Library" / "Caches" / app_name + else: # Linux + cache_dir = home_dir / ".cache" / app_name + else: + cache_dir = home_dir / ".cache" / app_name + cache_dir.mkdir(parents=True, exist_ok=True) + return cache_dir + + +_JAX_TRITON_DUMP_DIR = Path(os.environ.get("JAX_TRITON_DUMP_DIR", get_cache_dir())) +_CACHE_TRITON_KERNELS = os.environ.get("CACHE_TRITON_KERNELS", "true") in [ + "1", + "on", + "true", + "yes", +] map, unsafe_map = util.safe_map, map zip, unsafe_zip = util.safe_zip, zip @@ -87,6 +110,7 @@ jnp.dtype("uint32"): "u32", jnp.dtype("uint16"): "u16", jnp.dtype("uint8"): "u8", + # Triton defines a 'B' type, which is an alias for both i1 and bool. jnp.dtype("bool"): "B", } @@ -248,8 +272,8 @@ def compile_ttir_to_ptx_inplace( print(ptx) name = metadata["name"] cluster_dims = metadata["cluster_dims"] - ttgir = str(ttgir) if _JAX_TRITON_DUMP_DIR else None - llir = str(llir) if _JAX_TRITON_DUMP_DIR else None + ttgir = str(ttgir) + llir = str(llir) return CompilationResult( binary=ptx, name=name, @@ -290,8 +314,8 @@ def compile_ttir_to_hsaco_inplace( hsaco = hip_backend.make_hsaco(amdgcn, metadata, hip_options) name = metadata["name"] - ttgir = str(ttgir) if _JAX_TRITON_DUMP_DIR else None - llir = str(llir) if _JAX_TRITON_DUMP_DIR else None + ttgir = str(ttgir) + llir = str(llir) cluster_dims = (0, 0, 0) fd, hsaco_path = tempfile.mkstemp() with os.fdopen(fd, "wb") as f: @@ -335,6 +359,7 @@ def get_or_create_triton_kernel( raise ValueError("num_ctas > 1 unsupported before Hopper.") signature = {fn.arg_names[i]: v for i, v in enumerate(arg_dtypes)} + mock_torch_tensor = types.SimpleNamespace(data_ptr=lambda: 16) args_for_specialization_attr = [mock_torch_tensor] * len(arg_dtypes) for i, _, v in scalar_args: @@ -358,21 +383,21 @@ def get_or_create_triton_kernel( ) kernel = _COMPILED_KERNEL_CACHE.get(cache_key) - if kernel is None: - opts = { - "num_warps": num_warps, - "num_stages": num_stages, - "num_ctas": num_ctas, - "optimize_epilogue": False, - "debug": dump, - "enable_fp_fusion": enable_fp_fusion, - } - + kernel_hash = hashlib.sha256(str(cache_key).encode("utf-8")).hexdigest() + + opts = { + "num_warps": num_warps, + "num_stages": num_stages, + "num_ctas": num_ctas, + "optimize_epilogue": False, + "debug": dump, + "enable_fp_fusion": enable_fp_fusion, + } + if kernel is None and not Path(_JAX_TRITON_DUMP_DIR / kernel_hash).exists(): backend = backend_init_func(device, compute_capability) options = backend.parse_options(opts) - kernel_hash = abs(hash(cache_key)) - if _JAX_TRITON_DUMP_DIR: + if _CACHE_TRITON_KERNELS: os.makedirs(f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}") with open(f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}/config", "w") as f: pprint.pprint(cache_key, stream=f) @@ -398,6 +423,8 @@ def get_or_create_triton_kernel( module_map=backend.get_module_map(), ) if "module_map" in inspect.getfullargspec(code_gen.ast_to_ttir).args + # Triton changes ASTSource.ast_to_ttir to include module_map. Handle + # backward compatibility here. else code_gen.ast_to_ttir( fn, specialization=tc.ASTSource( @@ -414,29 +441,19 @@ def get_or_create_triton_kernel( ttir = str(module) compilation_result = compile_ttir_inplace( - module, backend, options, compute_capability, platform + module, + backend, + options, + compute_capability, + platform, ) - + if _CACHE_TRITON_KERNELS: + (_JAX_TRITON_DUMP_DIR / kernel_hash).mkdir(parents=True, exist_ok=True) + pickle.dump( + (compilation_result, ttir), + open(_JAX_TRITON_DUMP_DIR / kernel_hash / "compilation_result", "wb"), + ) kernel_name = compilation_result.name - if _JAX_TRITON_DUMP_DIR: - with open(f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}/{kernel_name}.ttir", "w") as f: - f.write(ttir) - with open(f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}/{kernel_name}.ptx", "w") as f: - f.write(compilation_result.ptx) - with open(f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}/{kernel_name}.ttgir", "w") as f: - f.write(compilation_result.ttgir) - with open(f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}/{kernel_name}.llir", "w") as f: - f.write(compilation_result.llir) - with open( - f"{_JAX_TRITON_DUMP_DIR}/{kernel_hash}/{kernel_name}.compile_info", - "w", - ) as f: - f.write( - f"{kernel_name}: shared_mem_bytes:" - f" {compilation_result.shared_mem_bytes}, cluster_dims:" - f" {compilation_result.cluster_dims}\n" - ) - kernel = triton_kernel_call_lib.TritonKernel( kernel_name, num_warps, @@ -448,6 +465,22 @@ def get_or_create_triton_kernel( ) _COMPILED_KERNEL_CACHE[cache_key] = kernel + elif Path(_JAX_TRITON_DUMP_DIR / kernel_hash).exists(): + compilation_result, ttir = pickle.load( + open( + _JAX_TRITON_DUMP_DIR / kernel_hash / "compilation_result", + "rb", + ) + ) + kernel = triton_kernel_call_lib.TritonKernel( + compilation_result.name, + num_warps, + compilation_result.shared_mem_bytes, + compilation_result.binary, + ttir, + compute_capability, + *compilation_result.cluster_dims, + ) return kernel, specialization_attr @@ -671,6 +704,38 @@ def triton_call( serialized_metadata: bytes = b"", **metaparams: Any, ) -> Any: + """Calls a Triton kernel with `jax.Array` arguments. + Args: + *args: Inputs for the Triton kernel. + kernel: A Triton kernel (e.g. a function decorated with `triton.jit`). All + static values should be annotated with `triton.language.constexpr`. + out_shape: A `jax.ShapeDtypeStruct` (or something that has `.shape` and + `.dtype` attributes) or a sequence thereof that specify the output(s) of + the kernel. Pointers for each of the `jax.ShapeDtypeStruct`s in + `out_shape` will be passed into `kernel` following the input parameters. + grid: An integer, tuple of up to 3 integers, or a function that returns a + tuple of up to 3 integers. When `grid` is an integer, `kernel` is + invocated in `grid`-many parallel executions. When `grid` is a sequence of + integers, `kernel` is launched in a `prod(grid)`-many parallel execution. + When `grid` is a function, it is passed `**metaparams` and should return a + tuple of up to 3 integers. + input_output_aliases: A dictionary mapping input argument indices to output + indices. Providing a mapping will alias the corresponding buffers. + zeroed_outputs: A sequence of indices, or a function returning a sequence of + indices, for outputs that should be zeroed before the kernel is launched. + num_warps: The number of warps used to execute the Triton kernel. + num_stages: The number of stages emitted by the Triton compiler. + num_ctas: The size of thread blocks per cluster to be used on GPUs with + compute capabilities >= 9.0. It must be less or equal to 8. + debug: Prints out intermediate IRs if True for debugging purposes. + serialized_metadata: Arbitrary metadata that will be added into the + serialized kernel call. + **metaparams: Additional keyword arguments that will be provided to a `grid` + (if it is a function) and to the Triton kernel as `constexpr` arguments. + + Returns: + Outputs from the Triton kernel. + """ if not CAN_USE_TRITON: raise ValueError("`triton_call` is only available when `triton` is installed.") out_shape = tree_util.tree_map( diff --git a/jax_flash_attn2/flash_attention.py b/jax_flash_attn2/flash_attention.py index ccd0db7..879ebe6 100644 --- a/jax_flash_attn2/flash_attention.py +++ b/jax_flash_attn2/flash_attention.py @@ -12,35 +12,70 @@ # See the License for the specific language governing permissions and # limitations under the License. -# NOTE:formats are weird i know it. - -# fmt:off +import functools import os - from dataclasses import dataclass -from enum import Enum -from typing import Optional, Tuple, Union, Literal +from enum import Enum +from typing import Literal, Optional, Tuple, Union import chex import einops +import flax.linen import jax import jax.numpy as jnp - -from functools import lru_cache -from jax.extend.backend import get_backend - +from jax import random as jrnd +from jax.experimental.pallas.ops.tpu.flash_attention import ( + BlockSizes as TPUBlockSizes, +) from jax.experimental.pallas.ops.tpu.flash_attention import ( - BlockSizes as TPUBlockSizes, flash_attention as pallas_flash_attention_tpu, ) +from jax.extend.backend import get_backend -from jax_flash_attn2.pallas_kernels import pallas_flash_mha_attn_2_gpu -from jax_flash_attn2.triton_kernels import triton_flash_gqa_attn_2_gpu, triton_flash_mha_attn_2_gpu -from jax_flash_attn2.cpu_calls import jax_flash_attn_2_mu +from jax_flash_attn2.cpu_calls import jax_flash_attn_2_mu +from jax_flash_attn2.triton_kernels import ( + triton_gqa_flash_attention2_gpu, +) +from jax_flash_attn2.pallas_kernels import ( + pallas_flash_mha_attn_2_gpu, +) AVAILABLE_FLASH_ATTENTION2_PLATFORMS = Literal["triton", "pallas", "jax"] -AVAILABLE_BACKENDS = Literal["gpu", "tpu", "cpu"] -BACKEND = get_backend().platform +AVAILABLE_BACKENDS = Literal["gpu", "tpu", "cpu"] +BACKEND = get_backend().platform + + +def get_device_memory_usage(device: jax.Device) -> float: + """ + Get the memory usage for a specific JAX device using local_devices stats. + + Args: + device: JAX device to check + Returns: + float: Memory usage in bytes + """ + try: + memory_stats = device.memory_stats() + return memory_stats["bytes_in_use"] if memory_stats else float("inf") + except: # noqa + return float("inf") + + +def free_gpu_in_process() -> int: + """ + Returns the index of the GPU with the most available memory using JAX local_devices. + + Returns: + int: Index of the GPU with most free memory + """ + devices = jax.local_devices() + gpu_devices = [d for d in devices if d.platform == "gpu"] + + if not gpu_devices: + return 0 + + memory_usage = [get_device_memory_usage(device) for device in gpu_devices] + return memory_usage.index(min(memory_usage)) class Backend(str, Enum): @@ -56,18 +91,18 @@ class Platform(str, Enum): TRITON = "triton" PALLAS = "pallas" - JAX = "jax" + JAX = "jax" @dataclass class AttentionConfig: """Configuration for Flash Attention computation.""" - blocksize_q : int = 128 - blocksize_k : int = 128 - softmax_scale: Optional[float] = None - backend : Optional[Backend] = None - platform : Optional[Platform] = None + blocksize_q: int = 128 + blocksize_k: int = 128 + softmax_scale: Optional[float] = None + backend: Optional[Backend] = None + platform: Optional[Platform] = None def __post_init__(self): if self.backend is None: @@ -85,8 +120,6 @@ def _default_platform(self) -> Platform: } return platform_map.get(self.backend) -# fmt:on - class FlashAttention: """Flash Attention implementation with multiple backend support.""" @@ -114,9 +147,7 @@ def _validate_config(self): @staticmethod def repeat_kv_heads( - key: chex.Array, - value: chex.Array, - num_reps: int, + key: chex.Array, value: chex.Array, num_reps: int ) -> Tuple[chex.Array, chex.Array]: """Repeats key and value heads to match query heads.""" return ( @@ -125,18 +156,16 @@ def repeat_kv_heads( ) def _handle_bias( - self, - bias: chex.Array, - num_q_heads: int, - num_kv_heads: int, + self, bias: chex.Array, num_q_heads: int, num_kv_heads: int ) -> Optional[chex.Array]: """Processes attention bias based on head configuration.""" if bias is None: return None - if bias.shape[1] == num_q_heads: + if bias.shape[1] == num_q_heads or bias.shape[1] == 1: return bias - elif bias.shape[1] in (num_kv_heads, 1): + + elif bias.shape[1] == num_kv_heads: return einops.repeat( bias, "b h q k -> b (h r) q k", r=num_q_heads // bias.shape[1] ) @@ -152,18 +181,20 @@ def __call__( key: chex.Array, value: chex.Array, bias: Optional[chex.Array] = None, + adjust_sharindgs: bool = False, ) -> chex.Array: """ - Computes flash attention using the configured backend and platform. + Computes flash attention using the configured backend and platform. - Args: - query: Query tensor of shape [batch, seq_len, num_heads, dim] - key: Key tensor of shape [batch, seq_len, num_kv_heads, dim] - value: Value tensor of shape [batch, seq_len, num_kv_heads, dim] - bias: Optional attention bias tensor + Args: + query: Query tensor of shape [batch, seq_len, num_heads, dim] + key: Key tensor of shape [batch, seq_len, num_kv_heads, dim] + value: Value tensor of shape [batch, seq_len, num_kv_heads, dim] + bias: Optional attention bias tensor + adjust_sharindgs: whenever to change shardings for best fit in triton kernel - Returns: - Output tensor of shape [batch, seq_len, num_heads, dim] + Returns: + Output tensor of shape [batch, seq_len, num_heads, dim] """ num_q_heads = query.shape[2] num_kv_heads = key.shape[2] @@ -173,8 +204,11 @@ def __call__( f"Query heads ({num_q_heads}) must be divisible by " f"key/value heads ({num_kv_heads})" ) + + bias = self._handle_bias(bias, num_q_heads, num_kv_heads) + if self.config.platform == Platform.TRITON: - return self._compute_triton(query, key, value, bias) + return self._compute_triton(query, key, value, bias, adjust_sharindgs) elif self.config.platform == Platform.PALLAS: return self._compute_pallas(query, key, value, bias) else: # Platform.JAX @@ -186,32 +220,43 @@ def _compute_triton( key: chex.Array, value: chex.Array, bias: Optional[chex.Array], + adjust_sharindgs: bool = False, ) -> chex.Array: """Computes attention using Triton backend.""" - # fmt:off - bias = self._handle_bias(bias, query.shape[2], key.shape[2]) - if query.shape[2] == key.shape[2] or os.environ.get("FORCE_MHA", "false") in ["true", "1", "on"]: + if adjust_sharindgs: + query_sharding = query.sharding if hasattr(query, "sharding") else None + target_gpu_idx = int(os.environ.get("GPU_IDX_FLASH_ATTN", free_gpu_in_process())) + devices = jax.local_devices(process_index=jax.process_index(), backend="gpu") + target_device = devices[target_gpu_idx] + query = jax.device_put(query, target_device) + key = jax.device_put(key, target_device) + value = jax.device_put(value, target_device) + if bias is not None: + bias = jax.device_put(bias, target_device) + + if query.shape[2] == key.shape[2] or os.environ.get( + "FORCE_MHA", + "false", + ) in ["true", "1", "on"]: key, value = self.repeat_kv_heads(key, value, query.shape[2] // key.shape[2]) - - return triton_flash_mha_attn_2_gpu( - query = query, - key = key, - value = value, - bias = bias, - softmax_scale = self.config.softmax_scale, - blocksize_k = self.config.blocksize_k, - blocksize_q = self.config.blocksize_q, + attn = triton_gqa_flash_attention2_gpu( + query=query, + key=key, + value=value, + bias=bias, + softmax_scale=self.config.softmax_scale, ) - return triton_flash_gqa_attn_2_gpu( - query = query, - key = key, - value = value, - bias = bias, - softmax_scale = self.config.softmax_scale, - blocksize_k = self.config.blocksize_k, - blocksize_q = self.config.blocksize_q, - ) - # fmt:on + else: + attn = triton_gqa_flash_attention2_gpu( + query=query, + key=key, + value=value, + bias=bias, + softmax_scale=self.config.softmax_scale, + ) + if adjust_sharindgs and query_sharding is not None: + attn = jax.device_put(attn, query_sharding) + return attn def _compute_pallas( self, @@ -221,39 +266,33 @@ def _compute_pallas( bias: Optional[chex.Array], ) -> chex.Array: """Computes attention using Pallas backend.""" - - bias = self._handle_bias(bias, query.shape[2], key.shape[2]) key, value = self.repeat_kv_heads(key, value, query.shape[2] // key.shape[2]) if self.config.backend == Backend.GPU: - # fmt:off return pallas_flash_mha_attn_2_gpu( - q = query, - k = key, - v = value, - b = bias, - qblock = self.config.blocksize_q, - kblock = self.config.blocksize_k, - softmax_scale = self.config.softmax_scale, + q=query, + k=key, + v=value, + b=bias, + qblock=self.config.blocksize_q, + kblock=self.config.blocksize_k, + softmax_scale=self.config.softmax_scale, ) - # fmt:on # TPU implementation - # fmt:off block_sizes = TPUBlockSizes( - block_q = self.config.blocksize_q, - block_k_major = self.config.blocksize_k, - block_k = self.config.blocksize_k, - block_b = 1, - block_q_major_dkv = self.config.blocksize_q, - block_k_major_dkv = self.config.blocksize_k, - block_k_dkv = self.config.blocksize_k, - block_q_dkv = self.config.blocksize_q, - block_k_major_dq = self.config.blocksize_k, - block_k_dq = self.config.blocksize_k, - block_q_dq = self.config.blocksize_q, + block_q=self.config.blocksize_q, + block_k_major=self.config.blocksize_k, + block_k=self.config.blocksize_k, + block_b=1, + block_q_major_dkv=self.config.blocksize_q, + block_k_major_dkv=self.config.blocksize_k, + block_k_dkv=self.config.blocksize_k, + block_q_dkv=self.config.blocksize_q, + block_k_major_dq=self.config.blocksize_k, + block_k_dq=self.config.blocksize_k, + block_q_dq=self.config.blocksize_q, ) - # fmt:on return pallas_flash_attention_tpu( q=query.transpose(0, 2, 1, 3), @@ -272,8 +311,6 @@ def _compute_jax( bias: Optional[chex.Array], ) -> chex.Array: """Computes attention using JAX backend.""" - - bias = self._handle_bias(bias, query.shape[2], key.shape[2]) key, value = self.repeat_kv_heads(key, value, query.shape[2] // key.shape[2]) return jax_flash_attn_2_mu( query_state=query, @@ -297,12 +334,12 @@ def create_flash_attention( Factory function to create a FlashAttention instance with the specified configuration. Args: - backend: Compute backend to use (GPU, TPU, or CPU) - platform: Platform to use (Triton, Pallas, or JAX) - **kwargs: Additional configuration parameters for AttentionConfig + backend: Compute backend to use (GPU, TPU, or CPU) + platform: Platform to use (Triton, Pallas, or JAX) + **kwargs: Additional configuration parameters for AttentionConfig Returns: - Configured FlashAttention instance + Configured FlashAttention instance """ if isinstance(backend, str): backend = Backend(backend) @@ -313,6 +350,15 @@ def create_flash_attention( return FlashAttention(config) +@functools.lru_cache() +def get_cached_flash_attention( + backend: Optional[Union[Backend, str]] = None, + platform: Optional[Union[Platform, str]] = None, + **kwargs, +) -> FlashAttention: + return create_flash_attention(backend=backend, platform=platform, **kwargs) + + def _attn_refrence(query_states, key_states, value_states, bias): b, qs, num_q_heads, d = query_states.shape num_kv_heads = value_states.shape[2] @@ -350,26 +396,96 @@ def _attn_refrence(query_states, key_states, value_states, bias): attention_weight = jax.nn.softmax(attention_weight) - return jnp.einsum("bkhsm,bmkd->bskhd", attention_weight, value_states).reshape( - b, - qs, - num_q_heads, - d, + return jnp.einsum( + "bkhsm,bmkd->bskhd", + attention_weight, + value_states, + ).reshape(b, qs, num_q_heads, d) + + +def _test_backward(): + """Tests the backward pass of the attention mechanism.""" + q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) + B, QH, KVH, QS, KS, D = 1, 32, 32, 2048, 2048, 128 + blocksize_k = 16 + blocksize_q = 16 + q = jax.nn.initializers.normal(2)(q_key, (B, QS, QH, D), dtype=jnp.float16) + k = jax.nn.initializers.normal(2)(k_key, (B, KS, KVH, D), dtype=jnp.float16) + v = jax.nn.initializers.normal(2)(v_key, (B, KS, KVH, D), dtype=jnp.float16) + b = ( + jnp.where( + jrnd.randint(v_key, (B, QH, QS, KS), 0, 4) > 2, + jnp.finfo(jnp.float16).min, + 0, + ) + if True + else None + ) + attention = create_flash_attention( + blocksize_k=blocksize_k, + blocksize_q=blocksize_q, ) + try: + co = jax.grad(lambda *x: attention(*x).sum())(q, k, v, b) + print("Custom op backward pass gradients:") + print(co[0, 0, 0, :5]) # Print last 5 elements of last head of last batch + except Exception as er: + print(f"Custom op backward pass failed: {er}") + co = None + + try: + fo = jax.grad(lambda *x: flax.linen.attention.dot_product_attention(*x).sum())( + q, k, v, b + ) + print(fo[0, 0, 0, :5]) # Print last 5 elements of last head of last batch + except Exception as e: + print(f"Flax backward pass failed : {e}") + fo = None + exit() -@lru_cache -def get_cached_flash_attention( - backend: AVAILABLE_BACKENDS = None, - platform: AVAILABLE_FLASH_ATTENTION2_PLATFORMS = None, - blocksize_q: int = 128, - blocksize_k: int = 128, - softmax_scale: Optional[float] = None, -): - return create_flash_attention( - backend=backend, - platform=platform, - blocksize_q=blocksize_q, - blocksize_k=blocksize_k, - softmax_scale=softmax_scale, + if fo is not None and co is not None: + if jnp.allclose(co, fo, atol=0.125): + print("Backward pass results are close.") + else: + print("Backward pass results differ significantly!") + + +def _test_forward(): + q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) + B, QH, KH, QS, KS, D = 1, 32, 32, 2048, 2048, 128 + blocksize_k = 16 + blocksize_q = 16 + q = jax.nn.initializers.normal(2)(q_key, (B, QS, QH, D), dtype=jnp.float16) + k = jax.nn.initializers.normal(2)(k_key, (B, KS, KH, D), dtype=jnp.float16) + v = jax.nn.initializers.normal(2)(v_key, (B, KS, KH, D), dtype=jnp.float16) + b = ( + jnp.where( + jrnd.randint(v_key, (B, 1, QS, KS), 0, 4) > 2, + jnp.finfo(jnp.float16).min, + 0, + ) + if True + else None ) + attention = create_flash_attention(blocksize_q=blocksize_q, blocksize_k=blocksize_k) + print("QKV Allocated") + try: + co = attention(q, k, v, b) + print(co[0, 0, 0, :5]) + except Exception as er: + print("Flash OOM", er) + co = None + try: + fo = _attn_refrence(q, k, v, b) + print(fo[0, 0, 0, :5]) + except Exception as er: + print("Flax OOM", er) + fo = None + if fo is not None and co is not None: + print(jnp.allclose(co, fo, 0, 0.125)) + + +if __name__ == "__main__": + _test_forward() + _test_backward() diff --git a/jax_flash_attn2/triton_kernels/__init__.py b/jax_flash_attn2/triton_kernels/__init__.py index 7ac17cb..80c5b86 100644 --- a/jax_flash_attn2/triton_kernels/__init__.py +++ b/jax_flash_attn2/triton_kernels/__init__.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from jax_flash_attn2.triton_kernels.gqa_kernel import triton_flash_gqa_attn_2_gpu -from jax_flash_attn2.triton_kernels.mha_kernel import triton_flash_mha_attn_2_gpu +from jax_flash_attn2.triton_kernels.gqa_kernel import triton_gqa_flash_attention2_gpu -__all__ = ["triton_flash_gqa_attn_2_gpu", "triton_flash_mha_attn_2_gpu"] +__all__ = ["triton_gqa_flash_attention2_gpu"] diff --git a/jax_flash_attn2/triton_kernels/gqa_kernel.py b/jax_flash_attn2/triton_kernels/gqa_kernel.py index 3240889..aedf5f8 100644 --- a/jax_flash_attn2/triton_kernels/gqa_kernel.py +++ b/jax_flash_attn2/triton_kernels/gqa_kernel.py @@ -32,11 +32,9 @@ from jax import custom_vjp, random as jrnd from jax import numpy as jnp from triton import language as tl - -from jax_flash_attn2._custom_call_lib import triton_call +from fjformer.jax_triton import triton_call FLASH_ATTN_BWD_ = True -FLASH_ATTN_WRAPS = int(os.environ.get("FLASH_ATTN_WRAPS", "0")) def calculate_num_warps( @@ -100,8 +98,6 @@ def check_shapes_and_dtypes( key: chex.Array, value: chex.Array, headdim: int, - blocksize_k: int, - blocksize_q: int, ): """Checks the shapes and dtypes of the input arrays. @@ -113,8 +109,6 @@ def check_shapes_and_dtypes( seqlen_k: Sequence length of the key. nheads: Number of heads. headdim: Head dimension. - blocksize_k: Block size for the key. - blocksize_q: Block size for the query. Raises: AssertionError: If the shapes or dtypes are not valid. @@ -127,23 +121,38 @@ def check_shapes_and_dtypes( ) if query.dtype not in [jnp.float16]: raise AssertionError("Only fp16 is supported.") from None - chex.assert_is_divisible( - blocksize_k, 16, custom_message="blocksize_k should be divisible by 16." - ) - chex.assert_is_divisible( - blocksize_q, 16, custom_message="blocksize_q should be divisible by 16." - ) + if headdim > 256: raise AssertionError("Unsupported headdim value.") -@triton.heuristics( - { - "EVEN_N": lambda args: args["seqlen_k"] % args["BLOCK_N"] == 0, - } -) +def is_hip(): + try: + return triton.runtime.driver.active.get_current_target().backend == "hip" + except: # noqa + return True + + +fwd_configs = [ + triton.Config({"BLOCK_M": BM, "BLOCK_N": BN}, num_stages=s, num_warps=w) + for BM in [16, 32, 64, 128] + for BN in [16, 32, 64, 128] + for s in ([1] if is_hip() else [1, 3, 4, 7]) + for w in [2, 4, 8] +] + + +def fwd_keep(conf): + BLOCK_M = conf.kwargs["BLOCK_M"] + BLOCK_N = conf.kwargs["BLOCK_N"] + if BLOCK_M * BLOCK_N < 128 * 128 and conf.num_warps == 8: + return False + return True + + +@triton.heuristics({"EVEN_N": lambda args: args["seqlen_k"] % args["BLOCK_N"] == 0}) @triton.jit -def _fwd_gqa_attn_kernel_block_ptr( +def _fwd_attention_kernel( Q, K, V, @@ -174,6 +183,8 @@ def _fwd_gqa_attn_kernel_block_ptr( headdim: tl.constexpr, num_kv_heads: tl.constexpr, num_groups: tl.constexpr, + CQL: tl.constexpr, + CKL: tl.constexpr, seqlen_q, seqlen_k, O, @@ -286,159 +297,21 @@ def _fwd_gqa_attn_kernel_block_ptr( tl.store(O_Block_ptr, acc_o.to(q.dtype), boundary_check=(0, 1)) -@triton.heuristics( - { - "EVEN_N": lambda args: args["seqlen_k"] % args["BLOCK_N"] == 0, - } -) -@triton.jit -def _fwd_gqa_attn_kernel_ptr_block( - Q, - K, - V, - B, - softmax_scale: tl.constexpr, - stride_qb, - stride_qh, - stride_qg, - stride_qm, - stride_kb, - stride_kh, - stride_kn, - stride_vb, - stride_vh, - stride_vn, - stride_bb, - stride_bh, - stride_bg, - stride_bm, - stride_bn, - stride_ob, - stride_oh, - stride_og, - stride_om, - stride_lb, - stride_lh, - stride_lg, - headdim: tl.constexpr, - num_kv_heads: tl.constexpr, - num_groups: tl.constexpr, - seqlen_q, - seqlen_k, - O, - L, - HAVE_BIAS: tl.constexpr, - BIAS_SINGLE_HEAD: tl.constexpr, - BLOCK_HEADDIM: tl.constexpr, - EVEN_N: tl.constexpr, - BLOCK_M: tl.constexpr, - BLOCK_N: tl.constexpr, -): - start_m, off_bh, off_gp = ( - tl.program_id(0), - tl.program_id(1), - tl.program_id(2), - ) - off_h = off_bh % num_kv_heads - off_b = off_bh // num_kv_heads - - offs_m = start_m * BLOCK_M + tl.arange(0, BLOCK_M) - offs_n = tl.arange(0, BLOCK_N) - offs_d = tl.arange(0, BLOCK_HEADDIM) - - q_ptrs = ( - Q - + (off_b * stride_qb + off_h * stride_qh + off_gp * stride_qg) - + (offs_m[:, None] * stride_qm + offs_d[None, :]) - ) - o_ptrs = ( - O - + (off_b * stride_ob + off_h * stride_oh + off_gp * stride_og) - + (offs_m[:, None] * stride_om + offs_d[None, :]) - ) - l_ptrs = L + (off_b * stride_lb + off_h * stride_lh + offs_m + off_gp * stride_lg) - k_ptrs = ( - K - + (off_b * stride_kb + off_h * stride_kh) - + (offs_n[:, None] * stride_kn + offs_d[None, :]) - ) - v_ptrs = ( - V - + (off_b * stride_vb + off_h * stride_vh) - + (offs_n[:, None] * stride_vn + offs_d[None, :]) - ) - q = tl.load( - q_ptrs, - mask=(offs_m[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - other=0.0, - ) - softmax_scale = softmax_scale.to(tl.float32) - if HAVE_BIAS: - bias_h_pos: tl.constexpr = ( - 0 if BIAS_SINGLE_HEAD else off_h * stride_bh + off_gp * stride_bg - ) - b_ptrs = ( - B - + (off_b * stride_bb + bias_h_pos) - + (offs_m[:, None] * stride_bm + offs_n[None, :] * stride_bn) - ) - lse_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") - max_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") - acc_o = tl.zeros([BLOCK_M, BLOCK_HEADDIM], dtype=tl.float32) - for j in range(0, seqlen_k, BLOCK_N): - j = tl.multiple_of(j, BLOCK_N) - current_k = offs_n + j - k = tl.load( - k_ptrs + j * stride_kn, - mask=(current_k[:, None] < seqlen_k) & (offs_d[None, :] < headdim), - other=0.0, - ) - qk = tl.zeros([BLOCK_M, BLOCK_N], dtype=tl.float32) - qk += tl.dot(q, k.T) * softmax_scale - if not EVEN_N: - qk += tl.where((j + offs_n)[None, :] < seqlen_k, 0, float("-inf")).to(tl.float32) - if HAVE_BIAS: - b = tl.load( - b_ptrs + j, - mask=(offs_m[:, None] < seqlen_q) & (current_k[None, :] < seqlen_k), - other=0.0, - ).to(tl.float32) - qk = qk + b - max_ij = tl.maximum(tl.max(qk, 1), lse_i) - p = tl.exp(qk - max_ij[:, None]) - else: - max_ij = tl.maximum(tl.max(qk, 1), lse_i) - p = tl.exp(qk - max_ij[:, None]) - l_ij = tl.sum(p, 1) - acc_o_scale = tl.exp(max_i - max_ij) - acc_o = acc_o * acc_o_scale[:, None] - v = tl.load( - v_ptrs + j * stride_vn, - mask=(current_k[:, None] < seqlen_k) & (offs_d[None, :] < headdim), - other=0.0, - ) - acc_o += tl.dot(p.to(v.dtype), v) - max_i = max_ij - lse_i = max_ij + tl.log(tl.exp(lse_i - max_ij) + l_ij) - - o_scale = tl.exp(max_i - lse_i) - acc_o = acc_o * o_scale[:, None] - tl.store(l_ptrs, lse_i, mask=offs_m < seqlen_q) - tl.store( - o_ptrs, - acc_o.to(q.dtype), - mask=(offs_m[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - ) +try: + _fwd_attention_kernel = triton.autotune( + list(filter(fwd_keep, fwd_configs)), + key=["CQL", "CKL", "HAVE_BIAS", "BIAS_SINGLE_HEAD", "BLOCK_HEADDIM"], + )(_fwd_attention_kernel) +except ModuleNotFoundError: + ... -def _fwd_gqa_attn_kernel_call( +def _fwd_attention_kernel_call( query: Optional[chex.Array], key: Optional[chex.Array], value: Optional[chex.Array], bias: Optional[chex.Array] = None, softmax_scale: Optional[float] = None, - blocksize_q: int = 128, - blocksize_k: int = 128, ): """Calls the Triton kernel for the forward pass of the attention mechanism. @@ -448,17 +321,10 @@ def _fwd_gqa_attn_kernel_call( value: Value array. bias: Bias array. softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. Returns: Tuple of the output array and the log-sum-exp array. """ - kernel = ( - _fwd_gqa_attn_kernel_block_ptr - if os.environ.get("FLASH_ATTN_BLOCK_PTR", "1") == "1" - else _fwd_gqa_attn_kernel_ptr_block - ) batch, seqlen_q, num_q_heads, headdim = query.shape _, seqlen_k, num_kv_heads, _ = key.shape num_groups = num_q_heads // num_kv_heads @@ -498,8 +364,6 @@ def _fwd_gqa_attn_kernel_call( key=key, value=value, headdim=headdim, - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, ) softmax_scale = softmax_scale or 1.0 / math.sqrt(headdim) BLOCK_HEADDIM = max(triton.next_power_of_2(headdim), 16) @@ -510,14 +374,15 @@ def _fwd_gqa_attn_kernel_call( BIAS_SINGLE_HEAD=BIAS_SINGLE_HEAD, HAVE_BIAS=HAVE_BIAS, BLOCK_HEADDIM=BLOCK_HEADDIM, - BLOCK_M=blocksize_q, - BLOCK_N=blocksize_k, + BLOCK_M=64, + BLOCK_N=64, + num_stages=1, + num_warps=8, ) stride_qb, stride_qm, stride_qh, stride_qg, stride_qd = get_strides(query.shape) stride_kb, stride_kn, stride_kh, stride_kd = get_strides(key.shape) stride_vb, stride_vn, stride_vh, stride_vd = get_strides(value.shape) - num_warps = calculate_num_warps(headdim, blocksize_q, blocksize_k) out, lse = triton_call( query, key, @@ -549,9 +414,11 @@ def _fwd_gqa_attn_kernel_call( headdim, num_kv_heads, num_groups, + seqlen_q // 64, + seqlen_k // 64, seqlen_q, seqlen_k, - kernel=kernel, + kernel=_fwd_attention_kernel, out_shape=[ jax.ShapeDtypeStruct(query.shape, query.dtype, sharding=get_sharding(query)), jax.ShapeDtypeStruct((batch, num_kv_heads, num_groups, seqlen_q), jnp.float32), @@ -562,15 +429,13 @@ def _fwd_gqa_attn_kernel_call( num_groups, ), name="triton::ops::_fwd_attn_kernel", - num_stages=1, - num_warps=num_warps, **metaparams, ) return out.reshape(batch, seqlen_q, num_q_heads, headdim), lse @triton.jit -def _bwd_do_attn_kernel( +def _bwd_do_attention_kernel( O, Do, De, @@ -641,7 +506,7 @@ def _bwd_do_attn_kernel( } ) @triton.jit -def _bwd_attn_kernel( +def _bwd_attention_kernel( Q, K, V, @@ -821,10 +686,8 @@ def _bwd_attn_kernel( tl.store(dk_ptrs, dk, mask=(offs_n[:, None] < seqlen_k) & (offs_d[None, :] < headdim)) -def _bwd_attn_kernel_call( +def _bwd_attention_kernel_call( softmax_scale: float, - blocksize_q: int, - blocksize_k: int, residual, Do: chex.Array, ): @@ -832,8 +695,6 @@ def _bwd_attn_kernel_call( Args: softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. residual: Residual from the forward pass. Do: Output gradient array. @@ -849,47 +710,11 @@ def _bwd_attn_kernel_call( raise NotImplementedError( "triton_gqa_flash_attn2 is not performing well for num groups over 2 please use FORCE_MHA" ) - # from easydel.kernels.gpu_ops.triton_mha_flash_attention_2 import ( - # _bwd_attn_kernel_call, - # ) - - # Dq, Dk, Dv, _ = _bwd_attn_kernel_call( - # softmax_scale=softmax_scale, - # blocksize_q=blocksize_q, - # blocksize_k=blocksize_k, - # residual=( - # o, - # l.reshape(batch, num_q_heads, seqlen_q), - # query, - # einops.repeat(key, "b s h d -> b s (h r) d", r=num_groups), - # einops.repeat(value, "b s h d -> b s (h r) d", r=num_groups), - # bias, - # ), - # Do=Do, - # ) - # return Dq, Dk[:, :, -num_kv_heads:, :], Dv[:, :, -num_kv_heads:, :], None + if FLASH_ATTN_BWD_: - query = query.reshape( - batch, - seqlen_q, - num_kv_heads, - num_groups, - headdim, - ) - o = o.reshape( - batch, - seqlen_q, - num_kv_heads, - num_groups, - headdim, - ) - Do = Do.reshape( - batch, - seqlen_q, - num_kv_heads, - num_groups, - headdim, - ) + query = query.reshape(batch, seqlen_q, num_kv_heads, num_groups, headdim) + o = o.reshape(batch, seqlen_q, num_kv_heads, num_groups, headdim) + Do = Do.reshape(batch, seqlen_q, num_kv_heads, num_groups, headdim) if bias is not None: if bias.shape[1] == 1: bias = bias.reshape( @@ -960,7 +785,7 @@ def _bwd_attn_kernel_call( # kernel kwargs metaparams = dict( - BLOCK_M=blocksize_q, + BLOCK_M=128, BLOCK_HEADDIM=BLOCK_HEADDIM, num_warps=num_warps, num_stages=1, @@ -997,13 +822,13 @@ def _bwd_attn_kernel_call( batch * num_kv_heads, num_groups, ), - kernel=_bwd_do_attn_kernel, - name="triton::ops::_bwd_do_attn_kernel", + kernel=_bwd_do_attention_kernel, + name="triton::ops::_bwd_do_attention_kernel", **metaparams, ) metaparams = dict( - BLOCK_M=blocksize_q, - BLOCK_N=blocksize_k, + BLOCK_M=int(os.environ.get("BLOCKSIZE_M_FLASH_ATTN", 64)), + BLOCK_N=int(os.environ.get("BLOCKSIZE_N_FLASH_ATTN", 64)), num_warps=num_warps, num_stages=1, BLOCK_HEADDIM=BLOCK_HEADDIM, @@ -1056,14 +881,14 @@ def _bwd_attn_kernel_call( headdim, num_kv_heads, num_groups, - kernel=_bwd_attn_kernel, + kernel=_bwd_attention_kernel, grid=lambda META: ( triton.cdiv(seqlen_k, META["BLOCK_N"]), batch * num_kv_heads, num_groups, ), out_shape=bwd_kernel_out_shapes, - name="triton::ops::_bwd_attn_kernel", + name="triton::ops::_bwd_attention_kernel", **metaparams, ) @@ -1079,14 +904,12 @@ def _bwd_attn_kernel_call( return f_vjp(Do) -def _fwd_attn_kernel_call_with_residual( +def _fwd_attention_kernel_call_with_residual( query: Optional[chex.Array], key: Optional[chex.Array], value: Optional[chex.Array], bias: Optional[chex.Array] = None, softmax_scale: Optional[float] = None, - blocksize_q: int = 128, - blocksize_k: int = 128, ): """Calls the Triton kernel for the forward pass of the attention mechanism and returns the residual. @@ -1096,34 +919,28 @@ def _fwd_attn_kernel_call_with_residual( value: Value array. bias: Bias array. softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. Returns: Tuple of the output array and the residual. """ - o, l = _fwd_gqa_attn_kernel_call( + o, l = _fwd_attention_kernel_call( query=query, key=key, value=value, bias=bias, softmax_scale=softmax_scale, - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, ) return o, (o, l, query, key, value, bias) -@functools.partial(custom_vjp, nondiff_argnums=[4, 5, 6]) -@functools.partial(jax.jit, static_argnums=[4, 5, 6]) -def _flash_gqa_attn2( +@functools.partial(custom_vjp, nondiff_argnums=[4]) +@functools.partial(jax.jit, static_argnums=[4]) +def _flash_attn2_gqa( query: chex.Array, key: chex.Array, value: chex.Array, bias: Optional[chex.Array] = None, softmax_scale: Optional[float] = None, - blocksize_q: int = 128, - blocksize_k: int = 128, ) -> chex.Array: """Computes the attention mechanism using the Triton kernel. @@ -1133,26 +950,22 @@ def _flash_gqa_attn2( value: Value array of shape (batch, seq_len_k, num_heads, head_dim). bias: Optional bias array of shape (batch, num_heads, seq_len_q, seq_len_k). softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. Returns: Output array of shape (batch, seq_len_q, num_heads, head_dim). """ - return _fwd_gqa_attn_kernel_call( + return _fwd_attention_kernel_call( query=query, key=key, value=value, bias=bias, softmax_scale=softmax_scale, - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, )[0] -_flash_gqa_attn2.defvjp( - _fwd_attn_kernel_call_with_residual, - _bwd_attn_kernel_call, +_flash_attn2_gqa.defvjp( + _fwd_attention_kernel_call_with_residual, + _bwd_attention_kernel_call, ) @@ -1200,8 +1013,8 @@ def _attn_refrence(query_states, key_states, value_states, bias): ).reshape(b, qs, num_q_heads, d) -triton_flash_gqa_attn_2_gpu = _flash_gqa_attn2 -__all__ = ["triton_flash_gqa_attn_2_gpu"] +triton_gqa_flash_attention2_gpu = _flash_attn2_gqa +__all__ = ["triton_gqa_flash_attention2_gpu"] def _test_forward(): @@ -1209,8 +1022,6 @@ def _test_forward(): q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) B, QH, KVH, QS, KS, D = 1, 32, 8, 1024, 1024, 128 - blocksize_k = 64 - blocksize_q = 128 q = jax.nn.initializers.normal(2)(q_key, (B, QS, QH, D), dtype=jnp.float16) k = jax.nn.initializers.normal(2)(k_key, (B, KS, KVH, D), dtype=jnp.float16) v = jax.nn.initializers.normal(2)(v_key, (B, KS, KVH, D), dtype=jnp.float16) @@ -1224,14 +1035,7 @@ def _test_forward(): else None ) print("QKV Allocated") - co = triton_flash_gqa_attn_2_gpu( - q, - k, - v, - b, - blocksize_q=blocksize_q, - blocksize_k=blocksize_k, - ) + co = triton_gqa_flash_attention2_gpu(q, k, v, b) print(co[-1, -1, -1, :5]) fo = _attn_refrence(q, k, v, b) print(fo[-1, -1, -1, :5]) @@ -1242,8 +1046,6 @@ def _test_backward(): """Tests the backward pass of the attention mechanism.""" q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) B, QH, KVH, QS, KS, D = 1, 32, 16, 1024, 1024, 128 - blocksize_k = 16 - blocksize_q = 16 q = jax.nn.initializers.normal(2)(q_key, (B, QS, QH, D), dtype=jnp.float16) k = jax.nn.initializers.normal(2)(k_key, (B, KS, KVH, D), dtype=jnp.float16) v = jax.nn.initializers.normal(2)(v_key, (B, KS, KVH, D), dtype=jnp.float16) @@ -1258,13 +1060,7 @@ def _test_backward(): ) try: - co = jax.grad( - lambda *x: triton_flash_gqa_attn_2_gpu( - *x, - blocksize_q=blocksize_q, - blocksize_k=blocksize_k, - ).sum() - )(q, k, v, b) + co = jax.grad(lambda *x: triton_gqa_flash_attention2_gpu(*x).sum())(q, k, v, b) print("Custom op backward pass gradients:") print(co[-1][-1, -1, :5]) # Print last 5 elements of last head of last batch except Exception as er: @@ -1288,5 +1084,9 @@ def _test_backward(): if __name__ == "__main__": + _test_forward() + _test_forward() + _test_forward() + _test_forward() _test_forward() _test_backward() diff --git a/jax_flash_attn2/triton_kernels/mha_kernel.py b/jax_flash_attn2/triton_kernels/mha_kernel.py deleted file mode 100644 index 66e8888..0000000 --- a/jax_flash_attn2/triton_kernels/mha_kernel.py +++ /dev/null @@ -1,1214 +0,0 @@ -# Copyright 2023 The EASYDEL Author @erfanzar (Erfan Zare Chavoshi). -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# impl from attn 2 paper by @erfanzar, (inspired by org impl by @Dao-AILab) - -import functools -import math -import os - -os.environ["XLA_PYTHON_CLIENT_PREALLOCATE"] = "false" -os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"] = "1.0" -os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" -os.environ["JAX_TRACEBACK_FILTERING"] = "off" - -from typing import Optional - -import chex -import jax -import numpy as np -import triton -from jax import custom_vjp, random as jrnd -from jax import numpy as jnp -from triton import language as tl - -from jax_flash_attn2._custom_call_lib import triton_call - -FLASH_ATTN_BWD_ = True -FLASH_ATTN_WRAPS = int(os.environ.get("FLASH_ATTN_WRAPS", "0")) - - -def calculate_num_warps( - head_dim: int, q_block_size: int = 0, k_block_size: int = 0 -) -> int: - """ - Calculate the number of warps based on head dimension and block sizes. - - Args: - head_dim (int): The dimension of the attention head. - q_block_size (int): The size of the query block. Default is 0. - k_block_size (int): The size of the key block. Default is 0. - - Returns: - int: The number of warps. - """ - if 16 < head_dim < 64: - return 8 - elif 64 < head_dim < 128: - return 4 - else: - if q_block_size > 32 and k_block_size > 64: - return 1 - elif q_block_size > 64 and k_block_size > 32: - return 1 - else: - return 4 - - -def _simp_attn( - query: chex.Array, - key: chex.Array, - value: chex.Array, - bias: Optional[chex.Array], - softmax_scale: float, -) -> chex.Array: - """Simplified attention function for testing and comparison. - - Args: - query: Query array of shape (..., num_heads, seq_len_q, head_dim). - key: Key array of shape (..., num_heads, seq_len_k, head_dim). - value: Value array of shape (..., num_heads, seq_len_k, head_dim). - bias: Optional bias array of shape (..., num_heads, seq_len_q, seq_len_k). - softmax_scale: Scaling factor for the softmax function. - - Returns: - Output array of shape (..., num_heads, seq_len_q, head_dim). - """ - dtype = query.dtype - assert query.ndim == key.ndim, "q, k must have same rank." - assert query.shape[:-3] == key.shape[:-3], "q, k batch dims must match." - assert query.shape[-2] == key.shape[-2], "q, k num_heads must match." - assert query.shape[-1] == key.shape[-1], "q, k depths must match." - query = query * softmax_scale - attn_weights = jnp.einsum("...qhd,...khd->...hqk", query, key) - if bias is not None: - attn_weights = attn_weights + bias - attn_weights = jax.nn.softmax(attn_weights).astype(dtype) - return jnp.einsum("...hqk,...khd->...qhd", attn_weights, value) - - -def get_strides(shape: tuple[int, ...]) -> tuple[int, ...]: - """Calculates strides for a given shape. - - Args: - shape: Shape of the array. - - Returns: - Tuple of strides. - """ - size = np.prod(shape) - strides = [] - for s in shape: - size = int(size // s) - strides.append(size) - return tuple(strides) - - -def get_sharding(arr: chex.Array): - """Gets the sharding of an array. - - Args: - arr: Array to get sharding from. - - Returns: - Sharding of the array. - """ - return getattr(arr, "sharding", None) - - -def check_shapes_and_dtypes( - query: chex.Array, - key: chex.Array, - value: chex.Array, - batch: int, - seqlen_k: int, - nheads: int, - headdim: int, - blocksize_k: int, - blocksize_q: int, -): - """Checks the shapes and dtypes of the input arrays. - - Args: - query: Query array. - key: Key array. - value: Value array. - batch: Batch size. - seqlen_k: Sequence length of the key. - nheads: Number of heads. - headdim: Head dimension. - blocksize_k: Block size for the key. - blocksize_q: Block size for the query. - - Raises: - AssertionError: If the shapes or dtypes are not valid. - """ - chex.assert_shape( - key, - (batch, seqlen_k, nheads, headdim), - custom_message="Shape mismatch for key.", - ) - chex.assert_shape( - value, - (batch, seqlen_k, nheads, headdim), - custom_message="Shape mismatch for value.", - ) - chex.assert_equal( - query.dtype, key.dtype, custom_message="Dtype mismatch between query and key." - ) - chex.assert_equal( - key.dtype, value.dtype, custom_message="Dtype mismatch between key and value." - ) - if query.dtype not in [jnp.float16]: - raise AssertionError("Only fp16 is supported.") from None - chex.assert_is_divisible( - blocksize_k, 16, custom_message="blocksize_k should be divisible by 16." - ) - chex.assert_is_divisible( - blocksize_q, 16, custom_message="blocksize_q should be divisible by 16." - ) - if headdim > 256: - raise AssertionError("Unsupported headdim value.") - - -@triton.heuristics( - { - "EVEN_N": lambda args: args["seqlen_k"] % args["BLOCK_N"] == 0, - } -) -@triton.jit -def _fwd_attn_kernel_block_ptr( - Q, - K, - V, - B, - softmax_scale: tl.constexpr, - stride_qb, - stride_qh, - stride_qm, - stride_kb, - stride_kh, - stride_kn, - stride_vb, - stride_vh, - stride_vn, - stride_bb, - stride_bh, - stride_bm, - stride_bn, - stride_ob, - stride_oh, - stride_om, - stride_lb, - stride_lh, - headdim: tl.constexpr, - nheads: tl.constexpr, - seqlen_q, - seqlen_k, - O, - L, - HAVE_BIAS: tl.constexpr, - BIAS_SINGLE_HEAD: tl.constexpr, - BLOCK_HEADDIM: tl.constexpr, - EVEN_N: tl.constexpr, - BLOCK_M: tl.constexpr, - BLOCK_N: tl.constexpr, -): - start_m, off_bh = ( - tl.program_id(0), - tl.program_id(1), - ) - off_h = off_bh % nheads - off_b = off_bh // nheads - if not EVEN_N: - offs_n = tl.arange(0, BLOCK_N) - - Q_Block_ptr = tl.make_block_ptr( - base=Q + (off_b * stride_qb + off_h * stride_qh), - shape=(seqlen_q, headdim), - block_shape=(BLOCK_M, BLOCK_HEADDIM), - strides=(stride_qm, 1), - offsets=(start_m * BLOCK_M, 0), - order=(0, 1), - ) - O_Block_ptr = tl.make_block_ptr( - base=O + (off_b * stride_ob + off_h * stride_oh), - shape=(seqlen_q, headdim), - block_shape=(BLOCK_M, BLOCK_HEADDIM), - strides=(stride_om, 1), - offsets=(start_m * BLOCK_M, 0), - order=(0, 1), - ) - L_Block_ptr = tl.make_block_ptr( - base=L + (off_b * stride_lb + off_h * stride_lh), - shape=(seqlen_q,), - strides=(1,), - offsets=(start_m * BLOCK_M,), - block_shape=(BLOCK_M,), - order=(0,), - ) - kv_stride = off_b * stride_kb + off_h * stride_kh - K_Block_ptr = tl.make_block_ptr( - base=K + kv_stride, - shape=(headdim, seqlen_k), - block_shape=(BLOCK_HEADDIM, BLOCK_N), - strides=(1, stride_kn), - offsets=(0, 0), - order=(1, 0), - ) - V_Block_ptr = tl.make_block_ptr( - base=V + kv_stride, - shape=(seqlen_k, headdim), - block_shape=(BLOCK_N, BLOCK_HEADDIM), - strides=(stride_vn, 1), - offsets=(0, 0), - order=(0, 1), - ) - q = tl.load(Q_Block_ptr, boundary_check=(0, 1)) - softmax_scale = softmax_scale.to(tl.float32) - if HAVE_BIAS: - bias_h_pos: tl.constexpr = 0 if BIAS_SINGLE_HEAD else off_h - B_Block_ptr = tl.make_block_ptr( - base=B + (off_b * stride_bb + bias_h_pos * stride_bh), - shape=(seqlen_q, seqlen_k), - block_shape=(BLOCK_M, BLOCK_N), - strides=(stride_bm, stride_bn), - offsets=(start_m * BLOCK_M, 0), - order=(0, 1), - ) - lse_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") - max_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") - acc_o = tl.zeros([BLOCK_M, BLOCK_HEADDIM], dtype=tl.float32) - for j in range(0, seqlen_k, BLOCK_N): - j = tl.multiple_of(j, BLOCK_N) - k = tl.load(K_Block_ptr, boundary_check=(0, 1)) - qk = tl.zeros([BLOCK_M, BLOCK_N], dtype=tl.float32) - qk += tl.dot(q, k) * softmax_scale - if not EVEN_N: - qk += tl.where((j + offs_n)[None, :] < seqlen_k, 0, float("-inf")).to(tl.float32) - if HAVE_BIAS: - b = tl.load(B_Block_ptr, boundary_check=(0, 1)).to(tl.float32) - B_Block_ptr = tl.advance(B_Block_ptr, (0, BLOCK_N)) - qk = qk + b - max_ij = tl.maximum(tl.max(qk, 1), lse_i) - p = tl.exp(qk - max_ij[:, None]) - else: - max_ij = tl.maximum(tl.max(qk, 1), lse_i) - p = tl.exp(qk - max_ij[:, None]) - l_ij = tl.sum(p, 1) - acc_o_scale = tl.exp(max_i - max_ij) - acc_o = acc_o * acc_o_scale[:, None] - v = tl.load(V_Block_ptr, boundary_check=(0, 1)) - acc_o += tl.dot(p.to(v.dtype), v) - max_i = max_ij - lse_i = max_ij + tl.log(tl.exp(lse_i - max_ij) + l_ij) - K_Block_ptr = tl.advance(K_Block_ptr, (0, BLOCK_N)) - V_Block_ptr = tl.advance(V_Block_ptr, (BLOCK_N, 0)) - - o_scale = tl.exp(max_i - lse_i) - acc_o = acc_o * o_scale[:, None] - tl.store(L_Block_ptr, lse_i, boundary_check=(0,)) - tl.store(O_Block_ptr, acc_o.to(q.dtype), boundary_check=(0, 1)) - - -@triton.heuristics( - { - "EVEN_N": lambda args: args["seqlen_k"] % args["BLOCK_N"] == 0, - } -) -@triton.jit -def _fwd_attn_kernel_ptr_block( - Q, - K, - V, - B, - softmax_scale: tl.constexpr, - stride_qb, - stride_qh, - stride_qm, - stride_kb, - stride_kh, - stride_kn, - stride_vb, - stride_vh, - stride_vn, - stride_bb, - stride_bh, - stride_bm, - stride_bn, - stride_ob, - stride_oh, - stride_om, - stride_lb, - stride_lh, - headdim: tl.constexpr, - nheads: tl.constexpr, - seqlen_q, - seqlen_k, - O, - L, - HAVE_BIAS: tl.constexpr, - BIAS_SINGLE_HEAD: tl.constexpr, - BLOCK_HEADDIM: tl.constexpr, - EVEN_N: tl.constexpr, - BLOCK_M: tl.constexpr, - BLOCK_N: tl.constexpr, -): - start_m, off_bh = ( - tl.program_id(0), - tl.program_id(1), - ) - off_h = off_bh % nheads - off_b = off_bh // nheads - offs_m = start_m * BLOCK_M + tl.arange(0, BLOCK_M) - offs_n = tl.arange(0, BLOCK_N) - offs_d = tl.arange(0, BLOCK_HEADDIM) - - q_ptrs = ( - Q - + (off_b * stride_qb + off_h * stride_qh) - + (offs_m[:, None] * stride_qm + offs_d[None, :]) - ) - o_ptrs = ( - O - + (off_b * stride_ob + off_h * stride_oh) - + (offs_m[:, None] * stride_om + offs_d[None, :]) - ) - l_ptrs = L + (off_b * stride_lb + off_h * stride_lh + offs_m) - k_ptrs = ( - K - + (off_b * stride_kb + off_h * stride_kh) - + (offs_n[:, None] * stride_kn + offs_d[None, :]) - ) - v_ptrs = ( - V - + (off_b * stride_vb + off_h * stride_vh) - + (offs_n[:, None] * stride_vn + offs_d[None, :]) - ) - q = tl.load( - q_ptrs, - mask=(offs_m[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - other=0.0, - ) - softmax_scale = softmax_scale.to(tl.float32) - if HAVE_BIAS: - bias_h_pos: tl.constexpr = 0 if BIAS_SINGLE_HEAD else off_h - b_ptrs = ( - B - + (off_b * stride_bb + bias_h_pos * stride_bh) - + (offs_m[:, None] * stride_bm + offs_n[None, :] * stride_bn) - ) - lse_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") - max_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") - acc_o = tl.zeros([BLOCK_M, BLOCK_HEADDIM], dtype=tl.float32) - for j in range(0, seqlen_k, BLOCK_N): - j = tl.multiple_of(j, BLOCK_N) - current_k = offs_n + j - k = tl.load( - k_ptrs + j * stride_kn, - mask=(current_k[:, None] < seqlen_k) & (offs_d[None, :] < headdim), - other=0.0, - ) - qk = tl.zeros([BLOCK_M, BLOCK_N], dtype=tl.float32) - qk += tl.dot(q, k.T) * softmax_scale - if not EVEN_N: - qk += tl.where((j + offs_n)[None, :] < seqlen_k, 0, float("-inf")).to(tl.float32) - if HAVE_BIAS: - b = tl.load( - b_ptrs + j, - mask=(offs_m[:, None] < seqlen_q) & (current_k[None, :] < seqlen_k), - other=0.0, - ).to(tl.float32) - qk = qk + b - max_ij = tl.maximum(tl.max(qk, 1), lse_i) - p = tl.exp(qk - max_ij[:, None]) - else: - max_ij = tl.maximum(tl.max(qk, 1), lse_i) - p = tl.exp(qk - max_ij[:, None]) - l_ij = tl.sum(p, 1) - acc_o_scale = tl.exp(max_i - max_ij) - acc_o = acc_o * acc_o_scale[:, None] - v = tl.load( - v_ptrs + j * stride_vn, - mask=(current_k[:, None] < seqlen_k) & (offs_d[None, :] < headdim), - other=0.0, - ) - acc_o += tl.dot(p.to(v.dtype), v) - max_i = max_ij - lse_i = max_ij + tl.log(tl.exp(lse_i - max_ij) + l_ij) - - o_scale = tl.exp(max_i - lse_i) - acc_o = acc_o * o_scale[:, None] - tl.store(l_ptrs, lse_i, mask=offs_m < seqlen_q) - tl.store( - o_ptrs, - acc_o.to(q.dtype), - mask=(offs_m[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - ) - - -def _fwd_attn_kernel_call( - query: Optional[chex.Array], - key: Optional[chex.Array], - value: Optional[chex.Array], - bias: Optional[chex.Array] = None, - softmax_scale: Optional[float] = None, - blocksize_q: int = 128, - blocksize_k: int = 128, -): - """Calls the Triton kernel for the forward pass of the attention mechanism. - - Args: - query: Query array. - key: Key array. - value: Value array. - bias: Bias array. - softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. - - Returns: - Tuple of the output array and the log-sum-exp array. - """ - kernel = ( - _fwd_attn_kernel_block_ptr - if os.environ.get("FLASH_ATTN_BLOCK_PTR", "0") == "1" - else _fwd_attn_kernel_ptr_block - ) - batch, seqlen_q, nheads, headdim = query.shape - _, seqlen_k, _, _ = key.shape - check_shapes_and_dtypes( - query=query, - key=key, - value=value, - batch=batch, - seqlen_k=seqlen_k, - nheads=nheads, - headdim=headdim, - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - softmax_scale = softmax_scale or 1.0 / math.sqrt(headdim) - HAVE_BIAS = True if bias is not None else False - BIAS_SINGLE_HEAD = True if bias is None else (True if bias.shape[1] == 1 else False) - BLOCK_HEADDIM = max(triton.next_power_of_2(headdim), 16) - stride_bb, stride_bh, stride_bm, stride_bn = ( - get_strides(bias.shape) if HAVE_BIAS else (0, 0, 0, 0) - ) - stride_lb, stride_lh, stride_lm = get_strides((batch, nheads, seqlen_q)) - metaparams = dict( - HAVE_BIAS=HAVE_BIAS, - BIAS_SINGLE_HEAD=BIAS_SINGLE_HEAD, - BLOCK_HEADDIM=BLOCK_HEADDIM, - BLOCK_M=blocksize_q, - BLOCK_N=blocksize_k, - ) - - stride_qb, stride_qm, stride_qh, stride_qd = get_strides(query.shape) - stride_kb, stride_kn, stride_kh, stride_kd = get_strides(key.shape) - stride_vb, stride_vn, stride_vh, stride_vd = get_strides(value.shape) - num_warps = calculate_num_warps(headdim, blocksize_q, blocksize_k) - return triton_call( - query, - key, - value, - bias if bias is not None else jnp.zeros((1,), jnp.float16), - softmax_scale, - stride_qb, - stride_qh, - stride_qm, - stride_kb, - stride_kh, - stride_kn, - stride_vb, - stride_vh, - stride_vn, - stride_bb, - stride_bh, - stride_bm, - stride_bn, - stride_qb, - stride_qh, - stride_qm, - stride_lb, - stride_lh, - headdim, - nheads, - seqlen_q, - seqlen_k, - kernel=kernel, - out_shape=[ - jax.ShapeDtypeStruct(query.shape, query.dtype, sharding=get_sharding(query)), - jax.ShapeDtypeStruct((batch, nheads, seqlen_q), jnp.float32), - ], - grid=lambda META: (triton.cdiv(seqlen_q, META["BLOCK_M"]), batch * nheads, 1), - name="triton::ops::_fwd_attn_kernel", - num_stages=1, - num_warps=num_warps, - **metaparams, - ) - - -@triton.jit -def _bwd_do_attn_kernel( - O, - Do, - De, - stride_ob: int, - stride_om: int, - stride_oh: int, - stride_dob: int, - stride_dom: int, - stride_doh: int, - stride_deb: int, - stride_deh: int, - nheads: int, - headdim: int, - seqlen_q: int, - BLOCK_M: tl.constexpr, - BLOCK_HEADDIM: tl.constexpr, -): - """Triton kernel for the backward pass of the attention mechanism with respect to the output gradient. - - Args: - O: Output array. - Do: Output gradient array. - De: Delta array. - stride_ob: Stride for the output batch dimension. - stride_om: Stride for the output sequence dimension. - stride_oh: Stride for the output head dimension. - stride_dob: Stride for the output gradient batch dimension. - stride_dom: Stride for the output gradient sequence dimension. - stride_doh: Stride for the output gradient head dimension. - stride_deb: Stride for the delta batch dimension. - stride_deh: Stride for the delta head dimension. - nheads: Number of heads. - headdim: Head dimension. - seqlen_q: Sequence length of the query. - BLOCK_M: Block size for the query sequence dimension. - BLOCK_HEADDIM: Block size for the head dimension. - """ - off_q = tl.program_id(0) - off_bh = tl.program_id(1) - off_b = off_bh // nheads - off_h = off_bh % nheads - offs_m = off_q * BLOCK_M + tl.arange(0, BLOCK_M) - offs_d = tl.arange(0, BLOCK_HEADDIM) - o_ptrs = ( - O - + off_b * stride_ob - + off_h * stride_oh - + offs_m[:, None] * stride_om - + offs_d[None, :] - ) - do_ptrs = ( - Do - + off_b * stride_dob - + off_h * stride_doh - + offs_m[:, None] * stride_dom - + offs_d[None, :] - ) - o = tl.load( - o_ptrs, - mask=(offs_m[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - other=0.0, - ).to(tl.float32) - do = tl.load( - do_ptrs, - mask=(offs_m[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - other=0.0, - ).to(tl.float32) - delta = tl.sum(o * do, axis=1) - tl.store( - De + (off_b * stride_deb + off_h * stride_deh + offs_m), - delta, - mask=offs_m < seqlen_q, - ) - - -@triton.heuristics( - { - "EVEN_M": lambda args: args["seqlen_q"] % args["BLOCK_M"] == 0, - "EVEN_N": lambda args: args["seqlen_k"] % args["BLOCK_N"] == 0, - "EVEN_HEADDIM": lambda args: args["headdim"] == args["BLOCK_HEADDIM"], - } -) -@triton.jit -def _bwd_attn_kernel( - Q, - K, - V, - B, - Do, - L, - D, - softmax_scale: float, - stride_qb: int, - stride_qm: int, - stride_qh: int, - stride_kb: int, - stride_kn: int, - stride_kh: int, - stride_vb: int, - stride_vn: int, - stride_vh: int, - stride_bb: int, - stride_bh: int, - stride_bm: int, - stride_dob: int, - stride_dom: int, - stride_doh: int, - stride_dqb: int, - stride_dqm: int, - stride_dqh: int, - stride_dkb: int, - stride_dkn: int, - stride_dkh: int, - stride_dvb: int, - stride_dvn: int, - stride_dvh: int, - stride_lb: int, - stride_lh: int, - seqlen_q: int, - seqlen_k: int, - headdim: int, - nheads: int, - Dq: chex.Array, - Dk: chex.Array, - Dv: chex.Array, - HAVE_BIAS: tl.constexpr, - BIAS_SINGLE_HEAD: tl.constexpr, - BLOCK_HEADDIM: tl.constexpr, - EVEN_M: tl.constexpr, - EVEN_N: tl.constexpr, - EVEN_HEADDIM: tl.constexpr, - BLOCK_M: tl.constexpr, - BLOCK_N: tl.constexpr, -): - start_n, off_bh = ( - tl.program_id(0), - tl.program_id(2), - ) - softmax_scale = softmax_scale.to(tl.float32) - off_h = off_bh % nheads - off_b = off_bh // nheads - offs_qm = tl.arange(0, BLOCK_M) - offs_n = start_n * BLOCK_N + tl.arange(0, BLOCK_N) - offs_m = tl.arange(0, BLOCK_M) - offs_d = tl.arange(0, BLOCK_HEADDIM) - l_ptrs = L + (off_b * stride_lb + off_h * stride_lh + offs_qm) - d_ptrs = D + (off_b * stride_lb + off_h * stride_lh + offs_qm) - q_ptrs = ( - Q - + (off_b * stride_qb + off_h * stride_qh) - + (offs_qm[:, None] * stride_qm + offs_d[None, :]) - ) - k_ptrs = ( - K - + (off_b * stride_kb + off_h * stride_kh) - + (offs_n[:, None] * stride_kn + offs_d[None, :]) - ) - v_ptrs = ( - V - + (off_b * stride_vb + off_h * stride_vh) - + (offs_n[:, None] * stride_vn + offs_d[None, :]) - ) - do_ptrs = ( - Do - + (off_b * stride_dob + off_h * stride_doh) - + (offs_qm[:, None] * stride_dom + offs_d[None, :]) - ) - dq_ptrs = ( - Dq - + (off_b * stride_dqb + off_h * stride_dqh) - + (offs_qm[:, None] * stride_dqm + offs_d[None, :]) - ) - if HAVE_BIAS: - bias_h_pos: tl.constexpr = 0 if BIAS_SINGLE_HEAD else off_h - b_ptrs = ( - B - + (off_b * stride_bb + bias_h_pos * stride_bh) - + (offs_qm[:, None] * stride_bm + offs_n[None, :]) - ) - dv = tl.zeros([BLOCK_N, BLOCK_HEADDIM], dtype=tl.float32) - dk = tl.zeros([BLOCK_N, BLOCK_HEADDIM], dtype=tl.float32) - k = tl.load( - k_ptrs, - mask=(offs_n[:, None] < seqlen_k) & (offs_d[None, :] < headdim), - other=0.0, - ) - v = tl.load( - v_ptrs, - mask=(offs_n[:, None] < seqlen_k) & (offs_d[None, :] < headdim), - other=0.0, - ) - - num_block_m = tl.cdiv(seqlen_q, BLOCK_M) - for start_m in range(0, num_block_m * BLOCK_M, BLOCK_M): - start_m = tl.multiple_of(start_m, BLOCK_M) - offs_m_curr = start_m + offs_m - q = tl.load( - q_ptrs, - mask=(offs_m_curr[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - other=0.0, - ) - qk = tl.dot(q, k.T) * softmax_scale - if not EVEN_N: - qk = tl.where(offs_n[None, :] < seqlen_k, qk, float("-inf")) - - if HAVE_BIAS: - bias = tl.load( - b_ptrs, - mask=(offs_m_curr[:, None] < seqlen_q) & (offs_n[None, :] < seqlen_k), - other=0.0, - ).to(tl.float32) - qk = qk + bias - lse_i = tl.load(l_ptrs + start_m, mask=offs_m_curr < seqlen_q, other=0.0) - - p = tl.exp(qk - lse_i[:, None]) - do = tl.load( - do_ptrs, - mask=(offs_m_curr[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - other=0.0, - ) - dv += tl.dot(p.to(do.dtype).T, do) - dp = tl.dot(do, v.T) - - Di = tl.load(d_ptrs + start_m, mask=offs_m_curr < seqlen_q, other=0.0) - ds = (p * (dp - Di[:, None]) * softmax_scale).to(q.dtype) - dk += tl.dot(ds.T, q) - - dq = tl.dot(ds, k) - tl.atomic_add( - dq_ptrs, - dq, - mask=(offs_m_curr[:, None] < seqlen_q) & (offs_d[None, :] < headdim), - ) - # ADVANCE TO NEXT POINT - dq_ptrs += BLOCK_M * stride_dqm - q_ptrs += BLOCK_M * stride_qm - do_ptrs += BLOCK_M * stride_dom - if HAVE_BIAS: - b_ptrs += BLOCK_M * stride_bm - dv_ptrs = ( - Dv - + (off_b * stride_dvb + off_h * stride_dvh) - + (offs_n[:, None] * stride_dvn + offs_d[None, :]) - ) - dk_ptrs = ( - Dk - + (off_b * stride_dkb + off_h * stride_dkh) - + (offs_n[:, None] * stride_dkn + offs_d[None, :]) - ) - - tl.store(dv_ptrs, dv, mask=(offs_n[:, None] < seqlen_k) & (offs_d[None, :] < headdim)) - tl.store(dk_ptrs, dk, mask=(offs_n[:, None] < seqlen_k) & (offs_d[None, :] < headdim)) - - -def _bwd_attn_kernel_call( - softmax_scale: float, - blocksize_q: int, - blocksize_k: int, - residual, - Do: chex.Array, -): - """Calls the Triton kernel for the backward pass of the attention mechanism. - - Args: - softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. - residual: Residual from the forward pass. - Do: Output gradient array. - - Returns: - Tuple of the gradients of the query, key, value, and bias arrays. - """ - (o, l, query, key, value, bias) = residual - batch, seqlen_q, nheads, headdim = query.shape - _, seqlen_k, _, _ = key.shape - assert key.shape == ( - batch, - seqlen_k, - nheads, - headdim, - ), "shape missmatch between key, value." - assert value.shape == ( - batch, - seqlen_k, - nheads, - headdim, - ), "shape missmatch between key, value." - softmax_scale = softmax_scale or 1.0 / math.sqrt(headdim) - if FLASH_ATTN_BWD_: - assert headdim <= 256, "given headdim is not supported." - assert query.dtype == key.dtype == value.dtype, "tensors must have the same dtype." - assert query.dtype in [jnp.float16], "only support fp16." - HAVE_BIAS = True if bias is not None else False - BIAS_SINGLE_HEAD = True if bias is None else (True if bias.shape[1] == 1 else False) - BLOCK_HEADDIM = max(triton.next_power_of_2(headdim), 16) - bwd_kernel_out_shapes = [ - jax.ShapeDtypeStruct( - shape=query.shape, - dtype=query.dtype, - sharding=get_sharding(query), - ), - jax.ShapeDtypeStruct( - shape=key.shape, - dtype=key.dtype, - sharding=get_sharding(key), - ), - jax.ShapeDtypeStruct( - shape=value.shape, - dtype=value.dtype, - sharding=get_sharding(value), - ), - ] - - delta = jnp.empty_like(l) - stride_bb, stride_bh, stride_bm = ( - get_strides(bias.shape)[:-1] if HAVE_BIAS else (0, 0, 0) - ) - - # BATCH , SEQUENCE , HEADS , _ - stride_qb, stride_qm, stride_qh, _ = get_strides(query.shape) - stride_kb, stride_kn, stride_kh, _ = get_strides(key.shape) - stride_vb, stride_vn, stride_vh, _ = get_strides(value.shape) - stride_ob, stride_om, stride_oh, _ = get_strides(o.shape) - - # BATCH , HEADS , _ - stride_lb, stride_lh, _ = get_strides(l.shape) - stride_deb, stride_deh, _ = get_strides(delta.shape) - - # BATCH , SEQUENCE , HEADS , _ - stride_dqb, stride_dqm, stride_dqh, _ = get_strides(query.shape) - stride_dkb, stride_dkn, stride_dkh, _ = get_strides(key.shape) - stride_dvb, stride_dvn, stride_dvh, _ = get_strides(value.shape) - stride_dob, stride_dom, stride_doh, _ = get_strides(Do.shape) - - num_warps = 4 if headdim <= 64 else 8 - - # kernel kwargs - metaparams = dict( - BLOCK_M=blocksize_q, - BLOCK_HEADDIM=BLOCK_HEADDIM, - num_warps=num_warps, - num_stages=1, - ) - (delta,) = triton_call( - o, - Do, - delta, - stride_ob, - stride_om, - stride_oh, - stride_dob, - stride_dom, - stride_doh, - stride_deb, - stride_deh, - nheads, - headdim, - seqlen_q, - out_shape=[ - jax.ShapeDtypeStruct( - shape=delta.shape, - dtype=delta.dtype, - sharding=get_sharding(delta), - ) - ], - input_output_aliases={2: 0}, - grid=lambda META: (triton.cdiv(seqlen_q, META["BLOCK_M"]), batch * nheads, 1), - kernel=_bwd_do_attn_kernel, - name="triton::ops::_bwd_do_attn_kernel", - **metaparams, - ) - metaparams = dict( - BLOCK_M=blocksize_q, - BLOCK_N=blocksize_k, - num_warps=num_warps, - num_stages=1, - BLOCK_HEADDIM=BLOCK_HEADDIM, - HAVE_BIAS=HAVE_BIAS, - BIAS_SINGLE_HEAD=BIAS_SINGLE_HEAD, - ) - - Dq, Dk, Dv = triton_call( - query, - key, - value, - bias if bias is not None else jnp.zeros((1,), jnp.float16), - Do, - l, - delta, - softmax_scale, - stride_qb, - stride_qm, - stride_qh, - stride_kb, - stride_kn, - stride_kh, - stride_vb, - stride_vn, - stride_vh, - stride_bb, - stride_bh, - stride_bm, - stride_dob, - stride_dom, - stride_doh, - stride_dqb, - stride_dqm, - stride_dqh, - stride_dkb, - stride_dkn, - stride_dkh, - stride_dvb, - stride_dvn, - stride_dvh, - stride_lb, - stride_lh, - seqlen_q, - seqlen_k, - headdim, - nheads, - kernel=_bwd_attn_kernel, - grid=lambda META: (triton.cdiv(seqlen_k, META["BLOCK_N"]), 1, batch * nheads), - out_shape=bwd_kernel_out_shapes, - name="triton::ops::_bwd_attn_kernel", - **metaparams, - ) - - return Dq, Dk, Dv, None - else: - _, f_vjp = jax.vjp( - functools.partial(_simp_attn, softmax_scale=softmax_scale), - query, - key, - value, - bias, - ) - return f_vjp(Do) - - -def _fwd_attn_kernel_call_with_residual( - query: Optional[chex.Array], - key: Optional[chex.Array], - value: Optional[chex.Array], - bias: Optional[chex.Array] = None, - softmax_scale: Optional[float] = None, - blocksize_q: int = 128, - blocksize_k: int = 128, -): - """Calls the Triton kernel for the forward pass of the attention mechanism and returns the residual. - - Args: - query: Query array. - key: Key array. - value: Value array. - bias: Bias array. - softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. - - Returns: - Tuple of the output array and the residual. - """ - o, l = _fwd_attn_kernel_call( - query=query, - key=key, - value=value, - bias=bias, - softmax_scale=softmax_scale, - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - return o, (o, l, query, key, value, bias) - - -@functools.partial(custom_vjp, nondiff_argnums=[4, 5, 6]) -@functools.partial(jax.jit, static_argnums=[4, 5, 6]) -def _flash_attn2( - query: chex.Array, - key: chex.Array, - value: chex.Array, - bias: Optional[chex.Array] = None, - softmax_scale: Optional[float] = None, - blocksize_q: int = 128, - blocksize_k: int = 128, -) -> chex.Array: - """Computes the attention mechanism using the Triton kernel. - - Args: - query: Query array of shape (batch, seq_len_q, num_heads, head_dim). - key: Key array of shape (batch, seq_len_k, num_heads, head_dim). - value: Value array of shape (batch, seq_len_k, num_heads, head_dim). - bias: Optional bias array of shape (batch, num_heads, seq_len_q, seq_len_k). - softmax_scale: Scaling factor for the softmax function. - blocksize_q: Block size for the query sequence dimension. - blocksize_k: Block size for the key sequence dimension. - - Returns: - Output array of shape (batch, seq_len_q, num_heads, head_dim). - """ - return _fwd_attn_kernel_call( - query=query, - key=key, - value=value, - bias=bias, - softmax_scale=softmax_scale, - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - )[0] - - -_flash_attn2.defvjp( - _fwd_attn_kernel_call_with_residual, - _bwd_attn_kernel_call, -) -triton_flash_mha_attn_2_gpu = _flash_attn2 -__all__ = ["triton_flash_mha_attn_2_gpu"] - - -def _attn_refrence(query_states, key_states, value_states, bias): - b, qs, num_q_heads, d = query_states.shape - num_kv_heads = value_states.shape[2] - ks = value_states.shape[1] - query_states = jnp.reshape( - query_states, - (b, qs, num_kv_heads, num_q_heads // num_kv_heads, d), - ) - - query_states = query_states * (d**-0.5) - attention_weight = jnp.einsum( - "bskhd,bmkd->bkhsm", - query_states, - key_states, - ) - - if bias is not None: - if bias.shape[1] == num_q_heads: - attention_weight = jnp.add( - attention_weight, - bias.reshape(b, num_kv_heads, num_q_heads // num_kv_heads, qs, ks), - ) - elif bias.shape[1] == num_kv_heads: - attention_weight = jnp.add( - attention_weight, - bias.reshape(b, num_kv_heads, 1, qs, ks), - ) - elif bias.shape[1] == 1: - attention_weight = jnp.add( - attention_weight, - bias.reshape(b, 1, 1, qs, ks), - ) - else: - raise NotImplementedError("bias heads wont match!") - - attention_weight = jax.nn.softmax(attention_weight) - - return jnp.einsum("bkhsm,bmkd->bskhd", attention_weight, value_states).reshape( - b, - qs, - num_q_heads, - d, - ) - - -def _test_forward(): - """Tests the forward pass of the attention mechanism.""" - q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) - q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) - B, QH, KVH, QS, KS, D = 1, 32, 32, 1024, 1024, 128 - blocksize_k = 64 - blocksize_q = 128 - q = jax.nn.initializers.normal(2)(q_key, (B, QS, QH, D), dtype=jnp.float16) - k = jax.nn.initializers.normal(2)(k_key, (B, KS, KVH, D), dtype=jnp.float16) - v = jax.nn.initializers.normal(2)(v_key, (B, KS, KVH, D), dtype=jnp.float16) - b = ( - jnp.where( - jrnd.randint(v_key, (B, 1, QS, KS), 0, 4) > 2, - jnp.finfo(jnp.float16).min, - 0, - ) - if True - else None - ) - print("QKV Allocated") - co = triton_flash_mha_attn_2_gpu( - q, - k, - v, - b, - blocksize_q=blocksize_q, - blocksize_k=blocksize_k, - ) - print(co[-1, -1, -1, :5]) - fo = _attn_refrence(q, k, v, b) - print(fo[-1, -1, -1, :5]) - print("Results are Close" if jnp.allclose(co, fo, 0, 0.125) else "Wrong results!") - - -def _test_backward(): - """Tests the backward pass of the attention mechanism.""" - q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) - B, QH, KVH, QS, KS, D = 1, 32, 32, 1024, 1024, 128 - blocksize_k = 16 - blocksize_q = 16 - q = jax.nn.initializers.normal(2)(q_key, (B, QS, QH, D), dtype=jnp.float16) - k = jax.nn.initializers.normal(2)(k_key, (B, KS, KVH, D), dtype=jnp.float16) - v = jax.nn.initializers.normal(2)(v_key, (B, KS, KVH, D), dtype=jnp.float16) - b = ( - jnp.where( - jrnd.randint(v_key, (B, 1, QS, KS), 0, 4) > 2, - jnp.finfo(jnp.float16).min, - 0, - ) - if True - else None - ) - - try: - co = jax.grad( - lambda *x: triton_flash_mha_attn_2_gpu( - *x, - blocksize_q=blocksize_q, - blocksize_k=blocksize_k, - ).sum() - )(q, k, v, b) - print("Custom op backward pass gradients:") - print(co[-1][-1, -1, :5]) # Print last 5 elements of last head of last batch - except Exception as er: - print(f"Custom op backward pass failed: {er}") - co = None - - try: - fo = jax.grad(lambda *x: _attn_refrence(*x).sum())(q, k, v, b) - - print(fo[-1, -1, -1, :5]) # Print last 5 elements of last head of last batch - except Exception as e: - print(f"Flax backward pass failed : {e}") - fo = None - exit() - - if fo is not None and co is not None: - if jnp.allclose(co, fo, atol=0.125): - print("Backward pass results are close.") - else: - print("Backward pass results differ significantly!") - - -if __name__ == "__main__": - _test_forward() - _test_backward() diff --git a/pyproject.toml b/pyproject.toml index 404c2c4..14caca3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "jax-flash-attn2" -version = "0.0.1" +version = "0.0.2" description = "Flash Attention Implementation with Multiple Backend Support and Sharding This module provides a flexible implementation of Flash Attention with support for different backends (GPU, TPU, CPU) and platforms (Triton, Pallas, JAX)." authors = ["Erfan Zare Chavoshi "] license = "Apache-2.0" diff --git a/tests/benchmark_gqa_triton.py b/tests/benchmark_gqa_triton.py index a192889..253794b 100644 --- a/tests/benchmark_gqa_triton.py +++ b/tests/benchmark_gqa_triton.py @@ -1,5 +1,3 @@ -import os - import jax import jaxlib import triton @@ -10,35 +8,31 @@ from jax_flash_attn2 import get_cached_flash_attention benchmark_configs = [] -for mode in ["bwd", "fwd"]: +for mode in ["fwd"]: for batch_size in [1, 2, 4]: for bias in [True, False]: for headdim in [64, 128, 256]: for num_heads in [8, 16]: - for blocksize_q in [32, 64, 128]: - for blocksize_k in [32, 64, 128]: - benchmark_configs.append( - triton.testing.Benchmark( - x_names=["seqlen"], - x_vals=[1024, 2048, 4096, 6144, 8192], - line_arg="provider", - line_vals=["triton-block-ptr", "triton-ptr-block", "jax"], - line_names=["Triton-BlockPtr", "Triton-PtrBlock", "Jax"], - styles=[("green", "-"), ("blue", "-."), ("blue", ":")], - ylabel="MS", - plot_name=f"batch_size={batch_size}-bias={bias}-headdim={headdim}-num_q_heads={num_heads*2}-num_kv_heads={num_heads}-blocksize_q={blocksize_q}-blocksize_k={blocksize_k}-mode={mode}", - args={ - "BATCH": batch_size, - "QH": num_heads * 2, - "KH": num_heads, - "HEAD_DIM": headdim, - "mode": mode, - "BIAS": bias, - "blocksize_k": blocksize_k, - "blocksize_q": blocksize_q, - }, - ) - ) + benchmark_configs.append( + triton.testing.Benchmark( + x_names=["seqlen"], + x_vals=[1024, 2048, 4096, 6144, 8192], + line_arg="provider", + line_vals=["triton", "jax"], + line_names=["Triton", "Jax-cudnn"], + styles=[("green", "-"), ("blue", ":")], + ylabel="MS", + plot_name=f"b={batch_size}-ub={bias}-hdim={headdim}-qh={num_heads*2}-kvh={num_heads}-mode={mode}", + args={ + "BATCH": batch_size, + "QH": num_heads * 2, + "KH": num_heads, + "HEAD_DIM": headdim, + "mode": mode, + "BIAS": bias, + }, + ) + ) @triton.testing.perf_report(benchmark_configs) @@ -50,8 +44,6 @@ def mha_attention_benchmark( HEAD_DIM, mode, BIAS, - blocksize_k, - blocksize_q, provider, ): try: @@ -75,37 +67,15 @@ def mha_attention_benchmark( else None ) if mode == "fwd": - if provider == "triton-block-ptr": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "1" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: flash_attn(query, key, value, bias) - elif provider == "triton-ptr-block": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "0" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) + if provider == "triton": + flash_attn = get_cached_flash_attention() fn = lambda: flash_attn(query, key, value, bias) elif provider == "jax": _fn = jax.jit(nn.dot_product_attention) fn = lambda: _fn(query, key, value, bias).block_until_ready() elif mode == "bwd": - if provider == "triton-block-ptr": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "1" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) - elif provider == "triton-ptr-block": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "0" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) + if provider == "triton": + flash_attn = get_cached_flash_attention() fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) elif provider == "jax": _fn = jax.jit(nn.dot_product_attention) @@ -124,5 +94,5 @@ def mha_attention_benchmark( if __name__ == "__main__": mha_attention_benchmark.run( print_data=True, - save_path="jax-flash-attn2/benchmarks/gqa/triton", + save_path="benchmarks/triton-vs-jax-sdpa", ) diff --git a/tests/benchmark_gqa_triton_jax_cudnn.py b/tests/benchmark_gqa_triton_jax_cudnn.py new file mode 100644 index 0000000..0eac8a2 --- /dev/null +++ b/tests/benchmark_gqa_triton_jax_cudnn.py @@ -0,0 +1,103 @@ +import functools +import jax +import jaxlib +import triton +from jax import nn +from jax import numpy as jnp +from jax import random as jrnd + +from jax_flash_attn2 import get_cached_flash_attention + +benchmark_configs = [] +for mode in ["fwd"]: + for batch_size in [1, 2, 4]: + for bias in [True, False]: + for headdim in [64, 128, 256]: + for num_heads in [8, 16]: + benchmark_configs.append( + triton.testing.Benchmark( + x_names=["seqlen"], + x_vals=[1024, 2048, 4096, 6144, 8192], + line_arg="provider", + line_vals=["triton", "jax"], + line_names=["Triton", "Jax-cudnn"], + styles=[("green", "-"), ("blue", ":")], + ylabel="MS", + plot_name=f"b={batch_size}-ub={bias}-hdim={headdim}-qh={num_heads*2}-kvh={num_heads}-mode={mode}", + args={ + "BATCH": batch_size, + "QH": num_heads * 2, + "KH": num_heads, + "HEAD_DIM": headdim, + "mode": mode, + "BIAS": bias, + }, + ) + ) + + +@triton.testing.perf_report(benchmark_configs) +def mha_attention_benchmark( + seqlen, + QH, + KH, + BATCH, + HEAD_DIM, + mode, + BIAS, + provider, +): + try: + q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) + query = jax.nn.initializers.normal(2)( + q_key, (BATCH, seqlen, QH, HEAD_DIM), dtype=jnp.float16 + ) + key = jax.nn.initializers.normal(2)( + k_key, (BATCH, seqlen, KH, HEAD_DIM), dtype=jnp.float16 + ) + value = jax.nn.initializers.normal(2)( + v_key, (BATCH, seqlen, KH, HEAD_DIM), dtype=jnp.float16 + ) + bias = ( + jnp.where( + jrnd.randint(v_key, (BATCH, 1, seqlen, seqlen), 0, 4) > 2, + jnp.finfo(jnp.float16).min, + 0, + ) + if BIAS + else None + ) + if mode == "fwd": + if provider == "triton": + flash_attn = get_cached_flash_attention() + fn = lambda: flash_attn(query, key, value, bias) + elif provider == "jax": + _fn = jax.jit( + functools.partial(nn.dot_product_attention, implementation="cudnn") + ) + fn = lambda: _fn(query, key, value, bias).block_until_ready() + elif mode == "bwd": + if provider == "triton": + flash_attn = get_cached_flash_attention() + fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) + elif provider == "jax": + _fn = jax.jit( + functools.partial(nn.dot_product_attention, implementation="cudnn") + ) + fn = lambda: jax.grad(lambda *x: _fn(*x).sum())( + query, key, value, bias + ).block_until_ready() + try: + ms = triton.testing.do_bench(fn) + except jaxlib.xla_extension.XlaRuntimeError: + ms = 100.0000 + return ms + except: # noqa + return 300.0000 + + +if __name__ == "__main__": + mha_attention_benchmark.run( + print_data=True, + save_path="benchmarks/triton-vs-jax-sdpa-cudnn", + ) diff --git a/tests/benchmark_mha_triton.py b/tests/benchmark_mha_triton.py deleted file mode 100644 index 930619d..0000000 --- a/tests/benchmark_mha_triton.py +++ /dev/null @@ -1,126 +0,0 @@ -import os - -import jax -import jaxlib -import triton -from jax import nn -from jax import numpy as jnp -from jax import random as jrnd - -from jax_flash_attn2 import get_cached_flash_attention - -benchmark_configs = [] -for mode in ["bwd", "fwd"]: - for batch_size in [1, 2, 4]: - for bias in [True, False]: - for headdim in [64, 128, 256]: - for num_heads in [8, 16, 32]: - for blocksize_q in [32, 64, 128]: - for blocksize_k in [32, 64, 128]: - benchmark_configs.append( - triton.testing.Benchmark( - x_names=["seqlen"], - x_vals=[1024, 2048, 4096, 6144, 8192], - line_arg="provider", - line_vals=["triton-block-ptr", "triton-ptr-block", "jax"], - line_names=["Triton-BlockPtr", "Triton-PtrBlock", "Jax"], - styles=[("green", "-"), ("blue", "-."), ("blue", ":")], - ylabel="MS", - plot_name=f"batch_size={batch_size}-bias={bias}-headdim={headdim}-num_heads={num_heads}-blocksize_q={blocksize_q}-blocksize_k={blocksize_k}-mode={mode}", - args={ - "BATCH": batch_size, - "H": num_heads, - "HEAD_DIM": headdim, - "mode": mode, - "BIAS": bias, - "blocksize_k": blocksize_k, - "blocksize_q": blocksize_q, - }, - ) - ) - - -@triton.testing.perf_report(benchmark_configs) -def mha_attention_benchmark( - seqlen, - H, - BATCH, - HEAD_DIM, - mode, - BIAS, - blocksize_k, - blocksize_q, - provider, -): - try: - q_key, k_key, v_key = jrnd.split(jrnd.PRNGKey(8), 3) - query = jax.nn.initializers.normal(2)( - q_key, (BATCH, seqlen, H, HEAD_DIM), dtype=jnp.float16 - ) - key = jax.nn.initializers.normal(2)( - k_key, (BATCH, seqlen, H, HEAD_DIM), dtype=jnp.float16 - ) - value = jax.nn.initializers.normal(2)( - v_key, (BATCH, seqlen, H, HEAD_DIM), dtype=jnp.float16 - ) - bias = ( - jnp.where( - jrnd.randint(v_key, (BATCH, 1, seqlen, seqlen), 0, 4) > 2, - jnp.finfo(jnp.float16).min, - 0, - ) - if BIAS - else None - ) - if mode == "fwd": - if provider == "triton-block-ptr": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "1" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: flash_attn(query, key, value, bias) - elif provider == "triton-ptr-block": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "0" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: flash_attn(query, key, value, bias) - elif provider == "jax": - _fn = jax.jit(nn.dot_product_attention) - fn = lambda: _fn(query, key, value, bias).block_until_ready() - elif mode == "bwd": - if provider == "triton-block-ptr": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "1" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) - elif provider == "triton-ptr-block": - os.environ["FLASH_ATTN_BLOCK_PTR"] = "0" - flash_attn = get_cached_flash_attention( - blocksize_k=blocksize_k, - blocksize_q=blocksize_q, - ) - fn = lambda: jax.grad(lambda *x: flash_attn(*x).sum())(query, key, value, bias) - elif provider == "jax": - _fn = jax.jit(nn.dot_product_attention) - fn = lambda: jax.grad(lambda *x: _fn(*x).sum())( - query, key, value, bias - ).block_until_ready() - try: - ms = triton.testing.do_bench(fn) - except jaxlib.xla_extension.XlaRuntimeError: - ms = 100.0000 - return ms - except: # noqa - return 300.0000 - - -if __name__ == "__main__": - mha_attention_benchmark.run( - print_data=True, - save_path="jax-flash-attn2/benchmarks/mha/triton", - )

    f8#EsI9aLnN^o;78*2E15howbQD>7yZ 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 LrUlc+!1F%- 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 N@F6YLoZrv-{|9&7Gy?zt diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index b46a613..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.282506,1.256411,0.581872 -2048.000000,2.277905,2.304480,2.144217 -4096.000000,5.839872,5.845675,8.240283 -6144.000000,7.472896,7.116288,17.953644 -8192.000000,2.876416,2.995200,33.272491 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index c72a8b1dd857e417fef7cb99be645f19a86b1c44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25906 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index bbc050b..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.562111,41.410049,1.678567 -2048.000000,39.598591,39.300606,4.428848 -4096.000000,32.560127,33.178623,16.733448 -6144.000000,21.860865,22.489088,37.511681 -8192.000000,5.438464,6.223872,67.443710 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=bwd.png deleted file mode 100644 index e059177c785fcf49b8cd0eed91379bbcba30e30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30451 zcmeFZWmJ`I*EYHkq$DIH1(Xm_x*LNMq@|?0r3Iu#LQ)XvQb14|luiNZkP?(m>5_)U zp3D1r?)Ux1`1b$(V>1RrT`sP5UFSK^Iggl=S1L-f__$QK2m}KEp`4T&0&&S7fk2zV z#)Mb+zfUZ{AHuHE+OFyj7Ow8b&gKY3V^>Ez2Uk05lN-;>on5RQp7L@Cb8xfWuyS>E zbP?g?wEy=F91hNwoI{kGH{l{Uj&eFK2n3-q>KiRjGS?b`cxLoa>fU3I)Qw4Z4^oX^ z?K@i^m|wmeP-A)b;5QAuMyM19#yx2|m6%&hEEQUwC4%dbx5G#;OFh1tO}%oXK0yvg zn$a~@WpMf2lvY40%&3d8wz1!>*ZiPoeO=tFr~0smRiK3nPYS+Tt*f+Y{6pbuft|^p z9=?=ha57Q!RDlbwl;X;(o#~4A&iWSDjyzE_GL&$H#Rno%)({q&yzkN_lkyBJ; zqNo4r`{;|!2#apTx*|!_!h%`sn>QQ9BqStg+k1QJsF+r35^_0Y&-K_A_d2kHiz*iz z)FVQ}!&_Qf0_mm0%!E0(xL#LPRZ*u~wuTZNou2*@6h~fz6?@UaO5B7)a%-T$$Ls$6 z`(9%wcg&Af*`F**4vD(Zu7 zDyoUmn0Ql99oL>nxPE z)3)@o@2Q=ipRWw%684Mj;Yo*+we|N$-+T~!m6q1Go59~fT3#NvJ(_NLFh@c7nG!q* z-HX7$o$c)s5mF)|*39c7XlMIB427K+u=uR+C1MLVk!9LON_Jg^HIw*CrLvoRg4K+)!Atr(^<}3`Avc)ey46>e1)@X(}sV{cDogY$`?5$iTAtLIul}EJoS(Hz@ zdTo69QRLb0(l0LS>iYTI4L18XJaBresP$kr+s^UH$zbNaKsFbNC-1b14Gt2;#KiI* ze=i{P`Sil`TLfj@Zr2^ym9cJbAD<0L>fn3N zpNlj!H0X5gC1+%0h<|HsmAa*r+7U=7(NUydoA>0)Cv&GspTo&VsX{RjluP{?{WHyh zPVVlOVB5niPiVn{Y}V8NzJBVrAo)`4t{tYZss`7er3}x@yEocnps)t z{G^dzCU(ge9xPGJlSlI6ti1lR-FTTfVtuSMP{97@%*KXdsY%=K=|)L%4!sh;gSYW5 zgpy~kXJ(ATuHE?tpZiczvEI5zt6jU=*?j8x8oQpJ-dKarDgLwzM45>DW<+r@r?0QC z*wIX2s*n?XH@C}jUyf>)jEASEYMqDEX6;r3b^2C*al?DL7*wfN<*43!M|0tvyR#v5YVYn}zI5r*Iu31Obl~Co_=EfRFF}Z7 zWLkZHuUF?0)6pRZ=VH9X7@b);J=7`~rFIx;2$n z#RCy+S*GsISyuT`1p zdo&w@ijumM)%;4=UV8ed-(%cX6BM)_2#FJHJ^jL{jvW@Xo(BnPoU@|zTXYEq6wdwO1d8%2M)B<*yaM`-^gI{8Q1|HNQPu30&M?R`AC%e>df4$Kep?wxTio2-2N)$XkyKR%`}~|jLWwk@&k);v zqFbo%vBQn2dTRf#L08H>_bi%HZyf(H^fPbrM&7u@k_4-0|NuP zKN>pb_Dmq*&%>aXFA+=G9dB=IlqLKq(obm%C*OnZ(HBIkyEZj7b>ZTev-!~*poE=^x>f9O};-x#Rurar1i&DZdqAeS@ z6Fy)OXx!c2z5&NgK?myQn_G%=b8X=V7?%61BT%s>cI77DONXm{w)(CsGCDHywmX5- z(A^N;DH~0@`1^a-fo9WWt-A~I%=430F+t)(GgntWIHO1Sl37mk-{9alLBP*1Eq#M@ znPBb*OI61BL92GEF(x#$JcZ}-x2PbU@);3vGsX~W(vpQd=f$p4pVMb1CMH5YCww12 ze*E+MJ31#PC#}~y_p{B3PDr$rJZ9L@V!NT|J6nzB6qrsb$sfH(MSKZ+YSkCO!*`szIQJXUfND4@2ow|TeIxN{jbA!^*WlwJ`t zd0dSYbM9V8Oj+TK2YSZVO-;lqcm z-@d8+Q#IMbRIbNtvJ=Iu|5G{tVt7vucKnlrpbN!=8=jB;qWgtv_o)CJl1zQka>C37 z_Q*?Q0B^*|ubCg5hKKQ-BIKvk{`tuwD^-`A=<82DK7RU!7A+hKVfxsYD`adP-h~VO zBJv0nKKqd-flniv{EJXhnXz`C6Pct}C&Y+zEHI`e+Ryg7XX;C3r3S z&a`&ebSv1p_n&)tsb|UHe~YHeQ1~7mDpZjr+p8%lDCnsAEv7h+FmsGX(su&67eUGE zvG`Ui^wq1<1jxca{RHp=|NL=&I~yrDl?gEf$aMR=EZz5dFL(L3x7%pkC!D&M z0fv6LxK2V6n2|vT=g(quq8jhI&}%5YgAh_EklbpFPlJn3b=RY6B&K7Um5#hNGxNsj z($-dVuSI#|RINK_&=qov<`R2RaDdCpK$WX@oPBX#Ui^932g(mbta^bqHzpx%Die2Y3}jCdQc@{MPZZ+M z`5+6(Fo!J{;h5#NSbCIw=6_wnwc=WZu6t6_s!il9To z>~e;vdla03IDdbHx3{;|bb~km`)=nRNW9jQHT)715*Qd5S1Bnwt6i3hyc#_BmS(rM zGMH`wexBPkcS)PR^W-y^E`rJLdvWU}a?UBFmzX&31(v)*;DTAX@Z_)4rDgWVzo*+g z7$8H^)A=6VymtHXjT<+b(q{sWg*^Jx#bMRCoaUquVPx!GkYZm&L@I_YQe#=8-^ySPtUx z_u4du>sHm)mbv>r`oo}+9Y+xM(SaErPcS+x36t@dn! zcO0_n8U&|20&6#G)@n{67hmp6fePI_V}BVsemBI35%>a|rb zYh-i-frf?_LB)>?a2@cYOb7u@XjD|gA_f<%K(xe3D8PiDpRHY5Jc=lQuj$u5`_kAD zi-_mYr}7893Ix()K2p$Xyll};a!-D)^7+2aDZ}zd^;{r+lotKzz37BuO^`K}TY~W^ zc`YK&efVvLtCsY#WTP#Pwr3&I5+I5v2l>N87np0GHNTgBolf9&_*Jn%G`uYi(PeKv zRx)efXbIap{87C<{S1xIb~GX)0uO4-I*w5!6~CjK+ZQ^L>(_gtXhabn%W3YY@AcDX zTT_aFebGE-gUC@iRZd?1>yIA^?$bUA1T-RNYqmPo&P;HeP^+}R_JicwHRtG$tXl=Am%#q2fF#rND;0?2K89XS!oj=i~aO1LHY?`~? zI&NpiHl8WrWL_>>J$cp*(d*Z+C9!wik51L?w@Ss=8m1uUlcZe@z+2^Y72|ehXAV>U z2Syn4^F-J2q~2ZU^>#JEMb0h1`^?87~Dmp5mMfp^(d@&+~>wA?e@TzI>Y=~{YQKAycT zE%V6@_QuA>cE2hj!?oPh^y;7Ub8v7#;oFbz)BS9vdRya@+4Mxw2^OnCoe-o2dKQ-7 z$*n8TcP2O>OgIc1yeEC&=d*KiN}o=Oc#S9VT0%a2_k4d9FzfbCt`!4U5^-$O`^hdax+=Huj0G+3x&~C{3WsT>N00EJGT-9oe+z|vW^u92 zG+O*yUz(^+jVtSeV7%EFS=v%bWN)_zva|CI^Q-Xic_^|yslsm@8jgeEeTIi)U2pFU zRl8W8?60*$7>`xhQv-|7e*97G;1G{mAOeyA7sw&-VSQ8eUX-HG*m5sMjmsf9qht&^ zzcW>m2jOx7JFO%o-ojGSIyA2)2$=k1v*3ENBcC)N2yZgU#~DEiI668ivHDKmmoBaV zII`*jd20Quf*t-^#+dG>_Qgg6xbjCJikx-Zmz2eJFc@T`>SlLP9R6M)rtA7x%=We; zUW*a(?D#(PkGk`KK5seaC5W7llRP_E`^lqZ~0z`=eM&uIKK0Q^y}Ax zC>i8GGN3c?+S%NUo)HN?bL-|D36wPGtp4y}iKFq7EjjrfQ3R+{D%oVbuYdW0riUuNpDi2;dP`Xgmyg4_+w@ZPu-psJn7;+;V zI35swXrKRnCl;*(muYlz3OJk&k?@%z)7px=)MTuSSO(AriOh2*0EfAUL5{S+M_XYPx&c&`8Z~f&rNBpzu)=Pqh~jtTx%v zo-(k-=YP1c{6pvAT3ieafe@y9z=l+c4a9*#D+76@5PUk(D6tGFAv8L=(gAROZ*%Bg zv_bvz?>P$O`7Kw8h{6jD33HX2qi9~onz-@BQePK9!y_R0a5DXYnefV$d8lp(jLVnN z9OqhJv9$x;|Jty%g;J+LfGdN|6G|@9H{LNx6eWK=B76%rECu-5qeqY8%YZlp4h*O? zUB8L~3ZSm|_(7OL24w&?sBGHXPsX7qx3|>Gs+Nu27IrPmv_0y&kYiJWAM65$kMlJnfuidWm4$|$DXgp{Nltq*$KA2iVTtXATlGF!$vpj9h_D!*$os5iy zj?E{XgF|1+AEE-Mr3MR0mg&Y2SyHmH^K)}wL7S2Nb|J9YWctX<^aP%6*qn5{=EAl+`$~Qu=2R;!cua^b}F|BGqyW#g?I=p*+pPWNzQHBeqk} zTq6<;eaEr!@c3XgBLVtR0mZHKMna`U=bD?JFCKRXR&EOD;TvTB;&IClzQInrW)|bR z4oT)drxxO)?d@#Qk-coE3nb<1k{6xN?RMrYj{DLoy>Wi*kC{eO{^d>$>bXjk{-vhv z1YYCg<(84axv0^x2>3t~h=dv<>V?*!IJrJWOmr+rOoE?f_OP7bcm_Q`tJ6m?zcDSS zr4Jo@pwv`W_+}u?x~+`@J9mofz5+8aSNhlxIl-*AI|5k zM~QdM%oqXlVgXWn|Mq5hXovmoe$cf$Gx^0cNtTdJc3(VT_CFp8y0YX~?0f&@Y>&$| zPk88Lq=>K0%gZtzpVp3}dww-}f9yd>k+?uDz!fPgD;7iFV@&zXrK*V1vr%rjc*+QP6U(#0Rlgem|(E*P@$kZ<`BhaRaF%x0Y79R zdHC_~U*yj=%0!4uUpzr927?5}qFF#O-yY2j+5}{Ky*&>>Zf+=9o-aWdjfJIBuW_{o ztRMvnI;vi3RQ#m- zo>)s9{n`u2O@AJCKL~dRPC7y*Uz2^xbD1XHV-5#^kA?IRB;qTDZ8ylWUru&VaIIdn-suUY=e+AbxkTdtRdn*S#9=Iz_2-A1 zy+E2#63@y+b@@MU5^=*7dG<0(7R0)lhSP#5xq@sAm352WWOFxc$oUFqXPIuc+VxaV zzLbejl>&7`$+t5r)*Oe=mhec~ZQS@w`1et~(a9)9z#M5;es5=Pw2l5agt$rX!@bei zAy?&B9fc=IFRQVu>E46ackVa`!GFzdZW1)*C?v2&NnP)K>$Tb?ev96jK{h)1!p&tU z)UZ?D2jTK6KmU$&80qZ71=-&I&Q9}(i&I8wyp|a_B&lMau^{))oE)}gN=qS^#x38e zGFXlFtjaMqs$NPAfAQi4V*O#JoDz##cIY|k{M0HW^z1KABDGp7?X2y^VkKG8dZgjR zK%JA1XM1R4^9j}i9SWINcSh)h%5xF1Gp_6pU)`sZ)Eh(fqKTWtW>!}}$?JmNKiQX7 zVuoX8) zQJ||ax;YpsQc~H7wQ0I|_Q0DD3ZkTNiT_%3m&f8*2R@QS&^fpgW6^C22%B9_eVZy$}(P#LG4q_rEDkD z-(y6V(BH{l%g>5=A&U0+)L*lr?>m=)zQFLGR||Bpa+O;SHvSg6 zxlq2p&n~gogsxIR@%WQj-zjtK&_5qUva+(2NjTt7*s1><0|iV7z4xzuwz-_E1dvb& z{qHT3DLi^<++wtElPEH>YSl{lo2Uc~o;Fda?8KC{(uUsw{9Ro{HI9pK7f=z0^+f~zn=pR531~b z4V9K^O{zoI9CuXeiz*(ldG;HV-1Ucy;s|-~w8CcO_GtrPnPec=JfJLrUfpNtcP?SX zfRK<7Y`)k<@qmB;kOL>TQ^B!>x@|TNQU0{;70Ey;!-S6@DrEWQ)~_EBIfBNpA&Jsd zZz(2UrK0LOoc4>ZtUPQKSq>#)@HpT9;c{CFo&gT@-L=t@r!=3fjQ{><#pUfS_^A89 zZcymq-o1M$e+p3fU#K%z;r!N?a)yMD$5N7|Ht--2(C2pA>6pdD^cei5 zr5M{ErC>s+54clkILw5I>@=ooqzNyc5A$&)F)=a9%axEYhz^vNTBw2CW6|3*G6K8} zcVwF23|kvI1aK2Lz}#9|i)Vj(_7DlK8-#mEc5X``;r#@T*NIkceDs1#P=G-S+y(u^ z(fq|LpVLfVAKQ5%l%xTGNjTfrN4w#A6pi{W^Kr`Gv~qp8s&s@X^o;j!-tP>SMEZ+v zy=0Ju)0=SuR2qqnrDenvAPdu>H+% z^p&#gsE@2%3Fid&AwTQt@!{VD=S)q;861G#JVa9A5YqLwFiLLW;P2;D<141zKRsB= znwEcy`kd*%eGksmXJf8 zuI=3u{_XuQuqLUws6ATn8yxDrM~5IH8vRBeoAL*>ml#KLSFDCGl`<+sh+`)HzAe?@ z{v|v*f;*Z`e^yZOb^7;>sp%ORNoR^lmsC~%zW6t3B1ZCCYPX)y1j$VeFc`sMlV@e! zKAJCaFCK{rT@XiY^<12R&$U~MFFNFSDM_7fp$KLxtN1zJXFKaCdy| zeEduE?k0 zPi#pt&XJVi2b^=;$1P?Ql$s%o^lCSJPTBda5dGpE%zdZ!^hU;9w~wk@qHKa#yX;OHQI7E0*~(H8P^~SiVq+DWLO!+YS=bQ3!!tARuBVlYkCgT~cI;5> zcnN1b*+@RxfRBwKf!@TosUfdwu4T7S`@Kfl&RU)e>Z=M))9-bj;1$~~hQ+mvNE_xz zGhX~EX--}1Z@UcXyTvC`Sir}@ib>?NCI<2i z_SY;BLC~=sjwgAajea}bigd@Uuy20zLlg3@s^fEZbtn5yTjxAOq2ydO6-BfyO zqOpE{rT8g7+q#aB1Lq^D1-b(LE6mFGm-{qj>5nyhiyHUBfCYgQpXqyk0xElO<<#?V zU{t#+xf#TCbjslQBnsG5K}C~9fbq=4#uo9#_QxRT`nn>1_v!*nOpV*43Zi2VH-oaX zsq320iTUWz3a5Asb8GK;>#z`C;lRwnO{lRz$U`u(Y-l|RM5SoM+oAjJN-of~fHJfn zgb+Yw-5%9-81EMRpCVpnGxABb!fyPRJmSjx-NoLGDKFk`$Q!NOtJ&M~CW)!*E#2<; zOlL^ZF|X&G`GR^2?Sh71+b$?5l@pe<=eVPoXc?Ysh#mEyU$o4asC3l7_NhtE&n^0> z_nBvEb87S)Jv6jsyc`RYFql<6)72VIF)IaB!!zh07_0N-1;4qG7{8 zcmEGOz|8#1keQKjLAy@V*^U3lw}Qv4YYcDxxC(h(Jv$FqEi?1_sr6KOk#{?sneUTE znDB*rd?GLRx_EuUyA4qyIxW1EcBY6quPSX5<`ji>6PHeX6_ZOxbZF%0)B;`CSlxTG z7Hrz`Rm)T!exVBMu;<46J=E^Ke)?x?IAyg}dP5s9(VUcq90GUVi;>4DU)b;RQ%%Km> zZ;#}=LmS*v_(~OZ=TNv~1iTqGc@bi& zVbint$0cph<#RV5IDYxe2f*d0Y$rGO>*VJfJ2ZyLQqR9^jl+JHdWAJL3#eGI$LX6& ze*4v%GP?MLM29=J_Rgdtg!QmI)U5IM68;3qh+DUAIfIPPW{&FU0HGA+ePn`G7006b z0ve2l3Uvh$CMG5*`J;vKQtACCRO{1z_9jR3(JEg)dG@3@sh@dO8>0TgsK3n$> zy9Rj!mkJ=zPpoZCZ?M0>TpuXZtz;v)7tUYf%3WDtCw9UD=4=Q-_1BEZUi;oXqwX7p z3j~_MMMmboaf1`iQ;7p8Kj)7{p`Hl-xI3+zF{~?v8@25i8o@^*$>c|W5jFG~v4rUp z*dZz#mH2ArE&Ht{5v*(B0RxKz##gI8sB`9}*Sm4mJ*pbLOXhUL+Iq=vGPQ#8LD_@- zO5!HF@AzhEB+N#O^4bj(kFed>xw!DCrMpw6xy5iDcho zX79X$Ir_3mf2o-{UwyRr`k_E^>*U*C-)r=2aXm@P4lYS81Vhqp#_A0)WstStaA4ha z_=tQqC*eP*9Yz+Ul*VI-b%HrqD6dQ)b|poCx^8E>lkJs$>(}!uI{QN;*T<&YpCH?>srAIE-D zi}Qv1yNiuJ7dvwPW%;an=6BeiP@FNB;cn!Ad6(y|YJ2Hg44a7wPi_=(C&9?HJfd7$ zP^I~8GH!}s%kCoPmG_*xr&R8-93B?p9UDAx$TT&6!hvdC9`RqJxlSLyRn=4(Tx8S7 zW+Bf=R-L-lqRB*8ztJ0hu_N8 z)2=AVDbijbZOP)BK$kxs?#QuneJ{($=%J_tHE(#ba>ISIHaYq`Q;KfWOL4fvHEs05 zv)jfljz22wEyC-G@5ZF&kTuy22x2eC#>adMHl_BMKX+j}Zy@X3mk8Ka?nztjYPKvr ziWhm5_HD=2-Y^yG7nXX>=XCv7XS&mVgzi%~O!C@5{vh!GF4t=pQMXyVMw*ki(pY5N zw(*gBZA!`+g$466k7e_K4Efu9jISv<--XMt3w5inl36I$(I59dAZ(7HTq1V3 zLiRg6c7fx+w=vPt78l+#T^;7&E8OwvEk|njN1S%5domWXx2Bs&BJ}HCKD+h{mBtBZ zUk<30OTG^+A8()mNvgOpI20Rdj%@CUE{;*fZ_HR-x9y30OPdi(r)?qQRii0!fr{^r z41ODNSgUZB+^o&ef0dF?O)W?TVDG6@D}D9WA8Qr^u{}5WFibDGDV6g=)h2q+_xJB! zPPb7F$bE8G{yDB~bdmWiQc}k?lNQchiFv<{oWf0E_8=MFZerCHCHgxuWlP}~+gb&5 z?7H{6;|H>FJiK&$`02;r#26nOQuAVt76!_{?Qw>T;0feqJk#N7EXf>4Yw1E0@zO6;GC+!+i5W^d?zRG~wUpJDX!hSnL{(Hf^q+2oyb?EJ^yQ*C2w@z87B1-HsykuvUPV~ww2f`Wuk|(q=uKfIR2c8bq zDgZEI92y7V)03ZV{M4a%C)cdelS?sa`z+V1cM~#L)Em+D!oYknEhi4wYs((AgZfV5 zX$vGlwy^uQe3ez`QiS*>Eo5~(^uj9-j%TIaTEyh@q$HGLr z1Qy>3@K@*0>8D1pKP-G=A&cBwp6$Abl|08tPai0tBxN;edmE||`=(d69{6hzE=a5$ zlIrJaAUA^pK0W9J5}_N1tn->H`YQ$z#{)z-K_WwV7NLv__r6K|xf^cf&4qrJuBspA z!=gD(?)C0ylO3B8zZt7Zo`?Y>`MZHIgqXo{E?NPS<>J4>C z*aXy=8u?4A+p$^1#51dsUI`r5zLKm$e;?!O4N%H5d{17XB7om^6f8xolRqmDYM*VC zEVguJ!NT!&bMcIMdzaU{Ic|La0#h~z=jlc1pYiM;?#-p)2#voQvp3hS9{je{yL6YB zi;mLpA%dJU7#-^d5Akii+OKH~B$SlfCu`gLKT3SXF|c%Lz_5Wm>L+f>r;+eZgb3t@ zv^qFAIQGRB)fA!`@;2z{jhII}4|k;6Wqy%-W!RA|Tj$iMB8|DmU`;tplu?EK%z?e< zPO+I1-bB5q_l0=f@vXW)u{!ZFXsoO=i*MV>83bKtFY!Ia^Eznih`e=0>h&697Xt)|}f`?d{Bwt99P ze5{ig@v_eDIknalgRhr*^@Uw-x%6uLONWE&`p(aff(wDHRC%r4@q>J+CxG9!XF4*J z^wIIB%iF86P0-2t9_(K+DIIUF+EnhzV!N0#Ss;5(VB!9o^^zkTvefV?o#UfmH zBA_50@-Z(-3D9Or+l{(N_b9Zqeh;?UIoXWJD}*iPjO5R*>--+>T$Ph@4qn~zjzbVo z@r9zCG_d{$YTX^4|M?9TQd=Rx+6UOYGf~<3=%2aCI?hHoJDoc^2S0A>gaa&hEj+o= zF34{(%%WYx=i=9!Y(YO(p1YLRZEyP{8K*J?>kL_Y?7*ou@K1(@$p`c9_#AN71!=Z- zVA5dG__1IvwH)JVQGu>^jvH5ZP21ghwa8aCq|*3Vzz=7e<5-tM)w!5cHz%nv@m~O| zcs2b!C+8lhjg9-+59O=cxbslS-w0+Bo?2&bwZ049zMo|-!9)9oB!w}01l&U!K?mrlcxRV;{K+lwDO3a#U+1xg+muFg&h!lU+ z`%*2!TfQs3i``sL^_EU0F0TKq2%_R=!>;kC;>83Bz{Zj{BJ z+NS#PKNv@5&EJfZkD6Ib=vA_lL?#|LB=OGn ziQddm=6P)i`7(YmH=RfJBuohXzc@2=e~@=jr^FA9;YYODPC(ni?x(g-#3Mps>HKtA zp~}Wkjd>E1po=wxF8JmHkhsGy^)rjO`XBEZ&)fxEAIht8j!!kjM1MIsKl~2r7F7GC z*Jxos#unCK}l2k20Qe2roxK zth|?g=VA!}ET%5|A4nf_#(GmYz@fsYB@aIf#F*mxGt^NTvBGZan`%k?UeuF{^YP_bh_Yd7$)G&o{c6NqMNNCyo zwwfL#&HZ03DaPC*&lB#d9iwN2KYQoW!>cP->&Hq;7iNe>`l}LT1s;Exnjst~bBX$4 zD3}}hDm?IqVaR~W-p=;w$dW&{Y;26Nf$8~)2Kq)XrZ`em(*0v z$a}i;Z100?AuV3sA>-+fVUqJRteCvB>^FmnVDYYL~%k54q`Nk^p{etkF1+3%eedE{20~^LuamHO;ZQalQM> ztvW!6XJnhS6qJ>hVQgj|`t@Iigp^wk-BMFmhxVEhI(4uFyW-iqe}1uLk9aKQoDyA2 z=(BcczDA;}^WF9`z%I}^9Or+;t)Slf&Uhhc#uPd--G#Ls-cDa zTW8ztm2A2(Ullm-)jmtw@;TIZAzqY3mT(}ctp_n|ehAPRC$ONz``8R24Z0?1(Ymc! zAP0~g)wKtcjNOB{6kr>o+J&H@sQ485?_?k`F^l?#2=&98SDhZOMHgBQpQ!eX@dw7a zy2Lic2FVXL`ubt=UBAoPsK&^2FNw$T0Y)S={l#F_N6v>j&ob%g?{blisFvQJcxIU60kI(vC0LEYnWsEs9!69>XU?-CUPSs zjB{v@=J7dk{a+Tq<;#=1mcKEHos@pfRd7FVv1*t^vL_62pkD<&W%|U≶j`Em@rD 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 Gz5W+=CG)!g diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 137a58e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.494958,0.520886,0.563141 -2048.000000,1.603912,1.595264,2.304609 -4096.000000,5.210269,5.081006,8.348887 -6144.000000,10.846806,10.662143,18.199968 -8192.000000,13.650065,13.740617,35.489792 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 02e9bd38955a960cfff8bbfebc93040289b7818a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27152 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index 9a394bf..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,42.757118,42.887169,1.722554 -2048.000000,41.562111,42.292225,4.461763 -4096.000000,38.367233,38.758400,16.909210 -6144.000000,32.023552,32.134655,37.554176 -8192.000000,32.805889,32.974335,67.558403 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=bwd.png deleted file mode 100644 index fcc73c9d65565ba21841211f9f14bcfb93a94a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25881 zcmeEuWmr{f*DfF}DG~w#f`9@N(k)1*AR;J@gtQ>tqJVTM4F)MKQqtWm0@AtYmX0$P zdw=hH{+#RlJwMLgdU>%}bIvEmGsZpcagX`_k%}xnE+sAs3JSiwoRm5W3YrfJ3hFdA zCVax%KRyrt2)>rqdi~he^tH30y$Oo4;cGi9+t*evjp&?A>>Xa(+HkWAvU9P~nZJH* z=ODzvVf~*ku-n?3aSYzrxCJ-Cv6ItwKtUliME*t163={zg7U&&UP?m4C24)a+2#7e zpVsZo4Cc4Df8CaolZ>2{zz+Ozhu+`{D~t4Ypb!0s%l1gvo9e4HqOygC^$ghbU+ASH z^loEIDbQiR?Tcc(<%u{m?(%>4=rPminPa&>D+ys&D?4Sz#Adial~v2z7Q z3jRy;xQlw7n3#B*QvpR9eijM2_5gk)Cj5&22!3p8yz~Em{r}3c%o#hPm@qOi`HQ;m zCuw?JoE_|LRBlEkCwCui&mGMMbF{U$e^yNuQ;NU;Zfk36_naW0vHtw*B>Pzj3twU$ zPa`=oapZj?3e47U+Dw&XAs1IyQ{A|3PQ1nyx{ij=4+HMpxnox|RprY4RL_+$nC#vc z*>IW=YQZSi-9;|XagJ8 z;2_S`tHzs?)oGEGM>EH3UWXQtk_85gkP zqgwr)$H2i6et77D;8ITD`K(v%MjnGg#&_cX_U)zNX1@@rIQb}h+o#y9m+9WUP?#iI zL{!w9)KpqSLqqn~cL4#>QBn3SyYut&5z*0e9=2s;o%A|z03z=%5R1}YoJ?H|l-cU9 z{K|g(WmhRhB)+fj5hCN<8#%%o6`pA2X1z3C=SOB66$lzLZ7C`Aii!#tas{>f*0cnC zsmCQBhlD92C1qoLe`DggreSbkU|`IRGF!A1K5NPn%i#?DTCbk(`|D$KtE-(2@2=hu zu%knH|Ni}LW@Zv{a_1I@qmz@l%}sBKDO(E6qoX5shA3(Fk7Z^2Vq#)66Si<>6?*bW z9>7ljcsWRM{{^;~m~<>9C1uBi^Hg{FtGO(_YN1=VZo$&~mzS6C(xBLj**iE0+D)S{ zt0dhiaR@@kz#zVH<9%vs>d@!FKsm;R-#F8~;ulKx_V*hD2*s_ZRtsvwVq?j#U=h5I z$Nu?4fSMpGDr#$gKLbqY@aQP}w~Rs)Cm!;qua}7A<>h%Sezh4hbCMEAMs3HrqIABQ zuwmxmiP_uR8_e)+@9AN>d-wg)lKGoAZ`gt!jrYGNVICTXf6aDgrqj6Ul0s^Vun)_;B!3565~y?;Lw%0HP^h#(;* zzH6(1(%f!Zob2d+yqu|e($z>P-UVx#ycs}nv*YiuzCQc5N~+idW6kum!JjhQUj8YM z$Lv$yOb-JH99!lQ2-!w|eAoR^v-aLz=N8Wu79QBah4wsI)XsOXVm`ZnWA(k-qgBP^ zjf}n&vk3@{9R1Na(#nJTrW zdXl4Qa(;UB!*+_s+uQr&z2}Pq=%;&ws=NKNwA<@tQ$m(?WE^^U4>qwRwLyG%`U{zJs2n_dz zcyv-ym*cRmteqVv%wybRx0_nTrEejw!T~W*WGst@hL)vW%)~!#*Lb7%Aob!jpsuy7y}J3pMO+Ua2ZRiK{=enXH%gfr2v%w{5J z!p7{+kC!MK1$xO{T}sD$%MW#Qs4aiz-s0u`;J#52(EnAI8ypn^L4NO<)QcCl!G{^O zhTR;u@4N?d^e1MJNqTC9fq~(1y4{NM!*V!(#F&~OfcxnA_ZK*Dwn8X*gPz+|G`rs0 zUF@For?N4aZF-OVE^N`x*})XKdrhpK+k50+TJO`yPWH;RkRl9BO#AsZ;-9aV8>non zX4EU)?D1Dv3#uBxPTC)P1&FZ;sGY=>V1Y)bhudaVdc?%4 zTZmMHvPM;L2~#GQB@Is#1)NVh5d=4dbhgY&Z6*}JcPF>gJ{Zo|eI-DBn~6z?q;9c0 zan5rf)ip9Q^7if9D4Z_`ZZjz-%#W9ubdsTb)6DCDd7(PInNRgTk3ZR{3kdisqFGgYk`>NkELPCt+``YhaO;}3+LL5LON)s+26N^1JR zr?0Ocd%%~7AJB+e=Xo&E+RZ<;HvTkIkfUjaUwZvHPZ4#$@3^9IdU~4mI5VvC*)OxlA1^$mrC5F@QEwga>z7%W zShH=Y;1~#gAGJ#Vef_x_Sg6{gN7L%Rf4qF0p_-~F%fr*m_2jo>razSk;zU}1m1+#Ymddz*fCS?ma%N%>8M!wg=nSo-ys*9&95#l=zZ zS^tqTGNKP4q-BC2Tx$zVcSR)kEKUWRP+;D@dp9jDEg~kS z>14CE_YKC?@{OOXL81`GQoyU-ciA%dU7+8)GL%!XnqRpzSzTFt^fx;*Wp=k$90C6t zfxUoHY{9CgIOVhJ{@j8CxeF$$)7R9;#l`jF#fw6_8A$?Kv99+d3*ww|Qfc(<-S5m& z-&v0twBY4@-NsWuN!JLa;Cj;%N;UZTAr=ym>@0NR;Nlw9zrmmub&CPxzi-}0=XS8s z4d?6e>}K)Ux|EE}wHr6&2Q!piVS$jrAzt8>QBmud6<^KS{_}57a#~2A>PUEai2Pk0 zMs#x2zNQ)cDobeElhmFh=wLpWfsZ^Ce^-W@Q#N-xIm{-jTt&88op3m>0nJ;@>CsNNfRr(YfzNVUD|m##STp1Di8Bjq22#==@Tp<-@+XL)(~ZPI`u zudr}pTH0+RV`Cg_?7};euVjCg0Tx)a>a|t=4PO-KjC+j6O)fvN7pF zB6fB?znW}dFfXiS*Zg`R5{*lJO75jUA;@lzA_ovG`5%-E$k?5iNm6oip{Y7?dCY z74f?}ZxE>gp;VtW@8x_Y{%16%AMafW__|ab&{L^1a|bo%nkxitfQ6w$hA}xbqHdf{ zYa_VsV#JX_Mm^N!v$(~}{2aY2=JPN9Z$aLMtF@^~U@k{J9e4dtiSc4rJUMCaY;&+~ zK0ky<@pKL_jSt?QymctG_cJtr`^0YR;UkxMulEcF^OaeaEMUI(CZMTjg8 zh#pa6kxJ*y7SrNwnDRiiyEBCOLzrI@B1gB94~(d(rDdn?3Ly~{RVO&#-orBpr*rw0 z8($#c0CMaHY+PzPwPD`{CuzC=E0%%m-P%ZzQ7^ykqzL29d-G;K$(=WXUM52kdHbTtyr8@*%*O_pK31@F4Msq$DNC zj(QH00Tr5n0d>W52avLA8c<*k>o|mRyH1q9VyJdM$j~k}MP@K2ogcXj>QDd$st6AQ z%r0Lq9YZc5g^0@*hHhnG;1D$dh0t}kJ)daG4{2!XB!w948O?h+1=AUcUBktu_1*jr z4>q=(F{n_uxag)ACqydc*fUUVv zttP7kCnqO+jOiH|>r4jw8EU!$T@)Y76bU`o%?%$q$zq;l|~iqQJ{`XWR!zzgK+*QOAPpCTbs(gAN^ zpa#0X8c*9-i7O7#LCT&e_a3Epyt8E{Og-4<>Qw1w4LZ?r-QC?4&a-_E!RiR2W4lQ9 z<5@VD+dDg7Ud^>294BER1`7=zA{HG6ydx5LEeGHS@a-y!NkPE~NmqCGXh(~H&RSmU zKQX7L9spz(*o5upu^}DhvHXqa10Pfmg*Qx5$($+ zIX$l&ifnuL2<=Wf3*dghACYl!Z8MDl?VX**ThsNB;&HxcBjU52?D`@dOu=o62d0`? zd{ibfCm8$dmxj8!Ix-oABm&&8*vwCEHl0yORKVc~$%IhUe>dqogo#zmg$b9>M=2(y z#&a5?0sfx>hi(S5wi+u9&3>F|e;7lM2q^t7ppaSbi<49)f3ir0xtRcDm=pcEcap3) zss=-}XbL1o8Un2Fqa4k9A35|@9z7zuO2#(5)c^JM+DN2?A7+20v+blS;-=!PU@QO! z62Jn;Byp{%^{`d^ydLnQXUklsa-s}4>*c9h@mH^2QTW#%OnGlw4b{Y~M{Y*N z+V{@D;NUs9z%jd7Wzw70ruL?3SD%jehxgr_F$MZ; z|69oaUT)~*#0U8`xa4a@Lk-Ut)_7WM&ew#JLLb!KvLea<| zPVbhQ;*Yx*2rlpLEc8_r4-vOF!{)%ABl47~D8#74X!&I?6c*Ah*}k5{0*>3g+!Kd5X+g4LG6AgjDP_U3S`lx;F;$5Qk8d)(<`%!L<=CU@z_0wrR2%PaQqSp)# zb=C1o4*0Ha*Dghl>Za$m)y?jk)vXYLyxYf?&~D1w6w$meDTUxM z&FPxM*CM)bD2T3jIHEVpmopNxAo#%vT<{|lv)fQrP@rdId=Z+ z2f&q$0-lDfndYHCUPYFJ3Xo7{DXtkjjkyv21UD6)J);D2t5gV3SyA1`dv=GMhbM_7 zV!baMJD$Zn;Jkt(20spRIE=_mf_I@3sI!m zo3hA4JLQQrl=J*%XbeV~GD@Y>x&nA*#ZgGSygqr2xPqdh!oR=p^ATRWK>vz)$0X8WG+1N#qU>!>r2;{m`l`0u zbZ*ovbpig~Yt3SbT^}pkg|qzKVu%GYsuU6T#nWiy(LW4)4KVW#_m*I-IwobUk#eD zxAvVxoenkz!|!FIUcn@~d9xdf*5d&jE;|A0ALjjU#>aJH=RUIQ1_9NHML|m6I4`$Sn2IB zYC%ar|Q znzHnokMKVw0URF!<_vSQ_CgFvO)xX3{;qOAJ$$uMwW~toGL3q?zpgm(({XvEh~Ww* zo&iuSWYX;5Vt0Ckw`Kyi{tla7RWGs7l)b$m&+B7P8PMn(9!>~Jy9cm0xzEeO0H$vB zJtW+Q{IHVxWZI8VJzaqm@pcU9S;6{G=V&hsrfNJjA$_1n%%r$?{q@XLQrkhixAK3r z^WwJsEl5QmeMrm9Oyy%X_-~Z3vv_We;S7Ke8T64sEazdQk;bCCBGMzuPP?adhb90Ft* z2^pEp%2e{S#Ni58*YrEtW<~5sr^?zK_jMUMz{J{r-G5pHcO%!pgiBO+j zUCl`lCl+LA+&VG7*JujdX677ol7jgWA1A~U0WQ;!crk54B zajDlo1lKzgc>8i4HaqzX3#={;ElzYy={PDXH%v;z7kM#p@B*UoYj}d^#iTn} zTNBA88B!D%PRRBQolp$BSJVs!iSzH(<@48E=J0dA68+1#Tos_^w77n{pEwj5$gGZp zSw_AGlYVy}Pp{<6EUCe`Rp&}^rUzBULxJ8Oh4gH8JQY$oa4tyyQeR(>M=cQHheh~| zq6lgoQI#8SRtp07r{1m%!SqBzpC4T2MdBBy#k}&uIfxm4HYGU__ToXx!Bihp3+(S5PFBc#LogUO)m;id;TN%3Q13s}I zNJY(j9eG4ga;LBc6ogUS_v==M>;{z=-5I@&NXx9zFh?L4bX@uM+3V~W86)TCU!eTX zdoBx1Dxkd{<3va|f$Y*MGHSlj8~a~~(<3W`2|j{<3U9O47M5>$oDX&FS2oFDrYa(U z*2@5jYquF0`+*@1qZLS`pP|8Y|2PTNu}M~kfkvb%G$ud@&E?ePcpEVTULN*pvV{Q%Tii=NAt51=S5aYNXYXmaBQ4dGe7bY>^$NNl)J+lLpU?CHpEgiF&Yl~#~_3cS8kdsLtSf8pxs)M5EedY+I9}1{8!XhD~ z`Q67ETGS=56479GiX89wta%oKHP~plvD4VHNU{UL3-S-^Ao%I(R^;ZD_D=UdU7lZ) zZcc+=cb0~(sy_xBo$tCN{9>Z2-Dg${42M`o3hP(QrFy!oPmr!A1~_Vi1qH1lwBx-Z zA<9VZ$H+sX9z@B{#~&G_bV)Qa+HKM8t>Ji|8am#lN2p$U9UPH8A~rp|hXFtH4{xbQ zX5+wo)6gfqsDM#QkL4Lo)u6fbFbc4RalD-?ccj=u5_}+6VDB5&Z+wHHDSOL)`_i-6 zqw-n55#Ho^da6}L@zb$bh(7XaCNcueqw(0_l}+LX5J<$bLrP%(>T)JJDBj+OTMvsd z`^Ls#BJ5!h2Vp55N}zTnKHZx%5BEOSeF4cZST?nA3c|l=%4So zDWpXeET^rGd^EAaxd-?1SaIu$oK!~&(%o&l9362w<&GX~cJssTrLA3F8jhH|B7T9# zAlq=2L+fU!-00)WtLa#9Gn9&ia3gmv2fZ!lk2=><|LqCDB=z&lQOh1rUvW8e3=9uw z3_#w_<8q@!2G+|Oou?$GY91A5fRV>=F#3=_a&r=LSR6TYlX>zDa}1kcG3oixw?(DD zYHFIY9Q5jf=va+wqtof7oZAl+P*^`53|IGlrKR>y)vx;0D=i(bNKX25g=OR?X@+XR zWOeuV=HQvLgWlvvDL;qubuD6<>5bw&PrAgs`6tb5p6)QGKv>6!`IwA}@9pDb96{wl z^ZbdG>l1li^<^>7+mZE=Qs}aUFI%Mu&YuLAoD4tWZVnHe#xAwWZbqc)kJwgyd!kGJ zuy&3>s~A(yll1t2zw>t^z)FejgSYbYGc!r&qttJ%5B>P({>+pFt-aSha>?uX-32zbq|-`PM(d zo0t6OsXbJ$0G)q<{}0h@D%TqdxW#MDN7J!r-!dv1%u1CnGZn9G86GY(n~xAt^7yO_ zahwWEN!95ruJ_B%M5}f^s~geEVYrqPv#?wF{SlfL8tDw?eY`8~VP_#Yv+bLNCNvGx zr{3dFJaUMLsU@U72ubDl1&qQ>k zUA&$v;~3y*lv3T9itPQ|^)Qn$u$eLRM#T+;rydob#gl9kreJT|cinxNHH6!Q^`^y! z6i|)u^_51*%lTZv`lQXB^?aD^c{x#vCz;cl&)G>Y4OF+)?jJUjOY;UVFPn1zI6e+^ z$xu%GWTJTHdqt?SrxDH@y@4kV2*knBfU#;2=^D9G;|l&ut?C)=a8|qPcDGmC zmgSAON`jUJmtP>viiNHDD+irYx&2{jNvOyam9+4<47qxSyMH#@J6^b?|(6B~q2O1}k23(lsn5W~%=wI`QMxvN#G+PAQgR-O9QdPH(IwLeWV2 zZ!qaIj8}##^U2c&E%grjPn6o_ZcRmc_v}hz%3gbZ?>D0$o5xL3%7t8su3mmiYzBtl zge37(B0bmUT;;BA(OqX3*LdEy_*9Z7`}x65hy~vQTlw?gKsi^i$Umj;KG6Yg4U+7& zW%ObELX~ADfQKbp9QK{xlLO`y9rJNMmsd$ak$ze0TD)t#nP@<4cd+6&J^N?thK3DV z{AuiBdSchF$1x-YTWU^L43_W}J!aOb_`YPP?tZ8685siZ~!Bu^;1+(P8)RTO+UnIW<<%x#i1b z5_BoNb1PRp-P|qV)T5Y>OMGfgRZGC!q~YzCXAOT!RB5wy%3lgmMSchN(rO%g%Hv9j zh4#%*4JkJ-R#Z0Pi3g<7h7@V089#5olW&b0Nv;`-r&}aTN}nL#`n!{^XI^b&Nod?) zgk5k=;tv-G7-rbbU>OS4By)C7@1?#`W4x=Z3YeA794q1GEd~8S^yDDGfpU?<-oFe{y#>e`BnE zLcvvBI{JoOH7Lk@`4bF=MX=_$Vh&Sx7%j#B$UdY%Yj5i2<^BMz+_an0rsl|0Qc`kh zv^bL+m0HmLHq--*L81Y;?Y`TdIe-nV8jmB_)aU#W?kslK3oj1O;mOfqj77sW2T6~o z(2vo{hA918%JDR_7pNZo@m*OPe`$WPS*VQu#a-kko?9rU+8KZB$Zp zYtNUJJMbxCOh9#}Bgzt)eV_ye%8oFAGh5>hz5N-=RFeSG2L=bTp}@**+J#KdQIJG2 zocr%a&A39&8y`ZQ#l1C~Nv!!Ae{hc_Jo^*34tq$SQ5eW|@EhLK&*jKR`Ox@MqxHL0xjc+S?o^n$~ zML!EaYnNbWh;`oJK}e3*OpMp%-eXfjd8|&yPC&`;f3zEXOtCR#yD$4|k3u~@l*%ms zhL{Uyu6}{o4|+tSHAx+mlHNcyyV$flVQ@b^Eo~Z`6G6WaSVQZo-A40BjK5BMY>-TFu^&3_D zl+>cQ95q?B8t6?88y z$kobJ?YLf*tX_#o*6*wcQkXGc04QPI9%a<FE1jqA&oFI#{AngD+b`6iK1QU}syY=t(ckOR$hv1}Rv} zT2}2htCh*%=U2C+#uZY0JNbQ!rz!Ex8}8Jv<;zz26)j0uBQX>EM{Zs$PlVxrfV%b@>Vlg>Wezy9SGBqtBX^gS<@SRq#Goj6Nn3{1Gk*16tC} z;dCn$$=NB6Hzf8oDP*Z4lHG7f&K(17tXChgW|2iRjk?U@0P}QsI9FRchH6{$l0A7i zBQzmGG_(;_{KD#7jSfVQ|3(!0d<9F=4{d9D=o^&@PI+kMtA8kdN;%H-ioY=*`z?~; z=D0LU;&#ASCKJjt-83P3bo+Ewf2)mQYd{fFnGeY+Qwk`GQv4BZ?UU5QI5mZ_)>_&fNWOMq@IMP?=pJ+Hy zPt@DGdmHy}NS~Tq$osQOoHh+F8VHZ?g%daj?;*ji6 zl6)iBpp%xicdCh|MgP+m5)ea*HKEer=1THnmtG?>#(PFn+n&-`^O&>61z3>*n9;Rg zneUD{ZTp+~jJLR8I_#!tagm13%a?t5R838F zAvYeCd>bNuFWkTT9LM1O66Uocq9>BBl-Y0Wt%s@VB$ z=7&B7;wT`2`OVYZn%Lc)ADWctC zFV&Cnu7D`u_%HX<_r!M<|FfYV!VM{`gsZyK+YkHRKV0k)@g5n&NELnhc%cAwB%0D# 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 2397920..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.538838,0.547866,0.577958 -2048.000000,1.562676,1.609285,2.230815 -4096.000000,5.121925,5.172429,8.382421 -6144.000000,10.061194,10.032522,17.637869 -8192.000000,13.038300,13.092864,33.030888 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index b487728d1fef580efd3a2315c1429b4e60556784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26063 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index bcd41cb..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.611364,2.712261,1.057549 -2048.000000,5.573888,5.672193,4.352677 -4096.000000,1.652224,1.624576,16.344543 -6144.000000,0.003072,0.003072,36.903564 -8192.000000,0.003072,0.003072,65.189888 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 8a197cb83bd6f111f18fd173ed2cf302273ec821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24829 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ðv%5x$%gVkA6;L0& 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index f9a65b7..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.864566,1.870797,1.053446 -2048.000000,4.448085,4.585814,4.284101 -4096.000000,5.730646,5.678421,16.478708 -6144.000000,0.004096,0.004096,36.579857 -8192.000000,0.003072,0.003072,65.200127 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index bce1068d19df62676a5a1bc03f48541ca9558c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24525 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index ba078b8..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.752174,0.710107,1.044432 -2048.000000,2.752262,2.601396,4.194279 -4096.000000,9.281141,9.248453,15.265447 -6144.000000,13.626369,13.578239,36.903984 -8192.000000,14.436353,14.499497,65.118210 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 17cd870cd78a1a3536295287af5e2138cc70fbcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25775 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 z 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index b3afdb1..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.367554,41.297409,2.387162 -2048.000000,35.521027,36.499458,8.334222 -4096.000000,21.349377,21.473793,32.083626 -6144.000000,18.685440,19.066881,72.701950 -8192.000000,0.002048,0.002048,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 5c81f0ffad641dc8502d23989a306276d54f8063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27376 zcmeFZcRbed_dk3gWMpKP6;a8~-W8%`M1^cZ_THPU6rq%@63WWnE~}7Lw(Pz4UYGm4 z`+WL-@85m@fB$uRJk*2heZ8*NIOlnu=XuUcn5we;Il_yCC=}}4T?JV+6bjo9g~A#? ziwD0E{5?Dk|A{)uX*#LfnmV}}I+&o844v$(Y@MvkjV`&EI5?Wy+VFFWa`SOsdgkP0 z=P1U*WBor5aN9bV@pNBUWrjfr>=d*dQ7BSFQ`=ve3ONd+VWF;>w7t8)fg% zkBznT^JniW_^~SZDXcN1UAz8(O!g+_gV!Woa+Fw9*?yUt50146?&VhnTvFic`u;27 z=DeKJJS%J3T9xlht5ClH_L$|-l%+r6%W;DvX3e$3o~9ia5)5haSm0~&#&9k*aQ`xqI;zcI z`t&&F+c(~RI6t7?<9rXN!Ea+|?(FQGw15Mg_F!dYC8MUE z6^W>1!L6k)bNbWY*{On@ecEgLnbuOBt;SNsJYeMi(>(f7vwRJ_&CSi1`1!jR)fx%P zDl4ZZCMLT2b3#KEI@nROABu_ujEs%T-8MedH>xRQ4Bkbzw#Cm#qi^Wm&e8hq9PUR%A?-LCnUv$a~T9pm1v#^MMLcN#o>gxJ7 zwDLSC=t0r52U)G;S0|>X0y8qM%11J?adEw3k$a)38x4csUX*G!Ui=U>obG*3R@UL3 z{Q1Aut9}h(uObhvZF~?S|=Nb&^pA$R}4xXHvl981?bF{bCS<*3B zXtpp~E$-vvbLPyMUwQh{=P4+*>^Tw}h$Kt8iZ0#2l^ZJ0Do)RsX15t7#2k@=XTA}P+D4=NFOpb`ec``^&QU~ zylk+u*h@?=!iyIAaI;|0>U7_2B8Vo}tzBJ3QtsiyH&gCwqty#NU({=Q#EpNvwAwj1 zJnZ^rC{uH^TIqFgY`HK}S^DV;4-e1vM_(Hid8%da+zI})>gR`2w1ji(e|!z!f7r28 z68YB9HKoO~MV|`yMUE@?-`~7{|K+Fl{{H@rLPOf8rlyliO9?rW z=!1g;QHv_O3G5VKjHqs<%M5JOCyU;%vAw+|*4k31$Bt_1>RMH9d@>;<-@ChG?5BR{ z?s=wt{%ro0hMc^GBB%g=J%wJ%>wQ_72v|D3H3owbu>SLAXQ?0Oo6m^{Ha0f>1nDIf z7HnZ*;g6p_xp2SHc$4(#64;s=jssDb|i_HZ*_=oY-})JyB6w?gKsK6{mqsi~KONf_>VcpOUidAYxO%b_v*Rzt6@z5Nwzqt2FKQv|~&FYEFZhpKrGpxLf2rdr<)rYE$zJKoW&KD+Zu1{P=$AO36otaxcjxMgm)MNl zd-#x2DPEv_@u+(DkL61S@mQ1A*xz89mVL9}piiD$Y)=rLTPYp;0Wh}Vy4|C$BHHIU z^-4HXyOdkI)W+m^f1|&8g@vW#>4C$ut~0p~Gf~sgx7`T`uEQ}H_hdeZm?Iz{5T?ZD zN!M?5b-<)>E78AG;L9^A-_+x&-ahX-;@tn}9e5am2No9BnVFd*c41*^YHIIA9j|98vWTb0ifU>gk z53un_sl(70R2+KFCz+YoTvmr$0N@zVm2v!LYK5jsLN>#QnZ$|Mvy4VMB?ygwPvqgiZ0C1}}KwKxYS2%Dt%j@x8^eF7lWWJ&j=Qhco{=4y)9X8aHb z%Os&q!TdevWqw$A72DY6DAC>&9DTh zS>QOQjJl!}-sDjmhtW1tvr&8Xmprj1(WEU#Yjw;Nt#<1JCL^PfZ=m zRo0*RAQ0ebcX?0-7Cl&EJtQ5h?Ds`IBl^vo#&o5GvV+-#JWWgksr2~LlA?!)m`i1n zJfr*c*T83(RrK-6i%^k3LCaJVMgC=X&xXa`@iklLM;)yT*amKHBCsx5IXO{m{oA*( zfB*hX%qT(YXWAZbk2!W1vK_q-Fo3lWp%g3M#9SnD3(s>e%W zrK27k;nZA{OL=J1<$-(+PV`iS_tv z{!?W93ZbuimMUItW1}nyy~wzm4+KWol{*FomjDcmr<Z+OH*cc!%HJs=KnLAlvw8 z&`P!ZMpG)}vKu`XJ|t;FD4trAn8TXM+W7Oy1j3Y(rD`uLB}RFo=hSg-rlV zre$PwS9`j?pk%+Dr&m2tY)J!vWB{HaaX9};gSfB!L9ihi4UN2x4t)qI)9j~6DWiq1 z&k^i?7;YApfIr2S$h%9d2I~RM<_8O}<~%8ONc8c>9L#}hl5|R+N`Mm>&UGXqXZ>Q& z0?;s=hG!N$wCY3H2SDeWFy{vk9wbV6$HNPl3~L&4_Ux|iiQ)3>Ipe1KbfxvuwXWz8 zLKD()fGteqWo>IAIs|FpyGyX2fSC9xID-3wWJNk&0~CiwE)scJuUsiG`c7zrK5>cV z*8MpZDXok|5uj1J6;2cF!eeb4b8M`vBDp);ySwRL2b)#fU5bFavtO5ntb}S#F`mJs zOdZyxBf$v?bk;*9Gu3;ej@gb!E2UfT=Jm~1o~^~KJcv|H@Qh3Eo+a!rnC?di*1+ZX zz4q6AbIRSfW)b5LVe|;)H|tnG-s;rv-|+`%9skAbHch@oxfUrMkdQEVq)}^oea6Y^ zj!g&oq|y2F=hyf4u1ZNUN=u`yS^+mjy!Ls49S(Xh$~oLSiVdYSt#p-X2%fzeIsfdN zQ3u9X%%}3j?LizQy9f#yvDw|m>dC}%oV$H;sG6Ht>|9=O+x;Aps8Et*J-)T_$8O!= zv364gq3`3r#5796kal)N!etF_WH{5{Zz==7DvaAYI>$g5|Ll{&Z$TujiRK{2kvbw) zQ#WiTE6mXmeJ|Ahr(*iv-;^hsBbGY|b5hqz^rW=J^m(2R)8CY*h06L*Ee`3;sUNc= zl4;{=2n~)pW#u}Tt|F|m=iw3Gf9!oye2_tD^>-A924b8)#etdEM7%HR`3zcV>~qiy z5NbM12hr%ICWnup=XQr|&A^#)cTXVs3T(&2!N0Bg+TDzlU566&9VqF^)Re_umiOY9 zjL;V^93<98Dut88oPUvFHU&qCT z<>lFyxNsomLrlx-_x$;pbmgRGLyS&Q<{%@Pfw|Tu(-(YI`rEf})06u8`dSGkOdX6? zd$Q|QiAZDiFQ20mY8)C$D7Nf36~{fUC*mQyaG_;y%y(^GPP^QJ4JGcnI^7|@*4We( z0?Z4KgkHhO=;Kr&&rVPE#t%9OJm)DX8-IO}Da0+bM8*WvfA~c$2u5InFJN76?H&>I zq5tnA_ueyo~O3;{u{M1H5v4Ho-Ps zHtc+aAO7sZxTNRq>({Sq=Tdx0ZUXTCmvcer$_LJ+oGfwo6mx>$JAk-dl@Fv7NcaVi zfQV5G2PO+?3Bo&^`{yPm{2?zgH#e6!S}xScnFADavTB6{0)bz-7nCi1LjSIXK0ZE%4k zorey_XA~oLNyOYcYy$}3SPDu?-)%~_x)gcrhpbC=cldd5 z(auYKqROJ3@q*!yO3!wtbOw@2HA6Oc2Ljjrcpxc#UY1tjEY;c$b^`RTvED zo)70EbudkV@GuC8dF9rOjEsXGX9EKQGM^M*hfl<^+eTqxAn}X6n(P)Z)B29%I4pF= zN@$<}ms{^SPtCWAi!DTpSVgra?`m{~ZP&6>#9f8P8dhvKPMV|W-#Y8QnAsJbX$4#O zfAgZZ?CL)@w&s6-f;?2Xrltmx5#!2^yP3JgT!8v#j-4Ml0z!pFM3_!Ch5;Shza!LC zH@CU9-LH!F@kTk$9-5qEpV(po86xCiH%ztMM_;|Y7M zhkNV1LzrZa+}(=f*_j#V@5R==SsG@r8?3r6QIn7-*f~0WT67-0c7vDq^}V;(MHw02 zodmt%)QW~5$j_g5kh80JA}Rb6==${ZbQU+liY{EZAS*8~{-+~RRObGDVnK@@R4Pai zgXurZ;n*7N_PS)n3!;P1;SPj7@#Z){bCx_-nW@evJ*UG=%4k85F7x?}? zt#XQ#642I>O4kg9D3T$%s&74fcC8wp$qR)(F?AMU_w>MigAHjp^{NK!?^VK+oZ2NXSB6Tv)9zBhOFsaWQ*vmwHame;r69Bl z65wgyF+1`oI=dljUi*)t<5Sm-dm0G_i7%Hng;hjA7&<;Vf&8hdvy*42;LRIK5+u)ocI$-ZZduEcnMO!)48^Eb^>Od{DX?TdYScMz4)`Nnl>l$v73=*{`_qH}+pG zv3Pp{kkDXG`RqBtAu5bc!e70UqH>0Mi`r(UHSpcL-d=@U9}rP=@~O`WRlJa(=Rs99 z^L0XO?4G5oS^{Sg5jBkX0(N`+t*1{PYlodD^o>sX&nN^${0*b|#*Z~vaN{6E1Gh1X zi+lb4ECw^Xm5~zMm-FE+h2>IofRZG_U4nYn&@!^mMe_?sY)Z;2IgVS<>Zmsy+kn|% zs9L(gp`pj&jk1nX=$$3QJ)5kosCwB9KTv52$s3w4{(6veu`StJc}wj}bg}c@iI0po z59EPne}L2)jLo^TFp8VffDe53g%jL?!t}dkki_4Ov-WGqb9e1^82?c zT1sbEpF2s6{kY|oI;!ZVTJ!<$%j}XOfkH09oy8@+iV~blk|S1%cMtZQ9rY~FgIgOx zdJGxa1msRYqw`O9m?6@ofkQa0jV8T(NleZ4q!CirdH^%9#AmBiu;7Xb1X0+Y4SX|PrDA4bL3!<7*j^(| z@v(4bQyXAM{gnQL_LU};KIRo3^Wp~)@L{GZmY?xEwk}XW))z8TZg?L$U4NY2tm!RC zMczW?IQw4zkcVBHS_(5zl@+3({ERFV_dG?rG>^25n1{eidICn@qgRO%=9q=4m|h{L zYs9n$Bs=KgsLL9;3F-`DPN~4)y^c4UkSwusL>Y1r1x3Zyl2Onr?IA4_5{gYrV+A2A z*;5Ym_|z2NV0lI?6_v6RmrSkh#TSinnfSl3L7IqcwQZf6F)4BP)c4jcZS_%4PBzt! zVmYm`QBD+f3RszMbV?I7_@zq|!|bt7 zrv%QUtS7p!MCf)b>0cECOGffpKm$BLPNh*(36vAxL_ofhu-Z}Dbk2Iovm;#%x1M`Uc{md zsqsE407jPVwRsmX`WYg|D_b^^%>SxOEH-S7&DLVZ#>vT1)Cs{(6=_Ql?p!<%#gcj@ z;kZDl8#l%yrBfYDvN+Cb{H>-$lXj$Z#@C8oJL_{yUf*!5JN*Tf6O!vFFdi-QU(+CY zoZDuRr7l0Ak_{4g6E_ndM>JiLN*JZoQh!4b(R#~OKoFxY_Hl{Hg$06IQ1~}m+C2-y zS}WZ)SY8)LhAGrNrPbQnuil~V$s>)FG__V@d3OypOYZ9G3M#6|L4Ug!isoV)-$!_*m4ds zH*fkGkDZSSFzdeJcH&%!znXN=J zxH?<2kc6s!3a(F~)FJdcs2v&6#kVFWzv_G_AhAVUb!gEi+tDcn;h*L7Z#9Y)zrrPm zisKR=xoKxf#l@(lPv!;yuMXoo{q3SB$v%G;@5$z-bmP^6?1%^?5G$mlq>votoxYFg z5WPjPA+KTm8JG=1Dk1X+uB)wC47lr5>DsV4qt!_#^gKuVgPvsTz4PUU%5IGYyI0%kV0@AW_BWYbcgphte-64s+VMowN$^9Te zo~Ng8J3iQ2=*vkkDGm=+sO$O0+>=efrWo*J_pae=(U?}eu&pwvfIxh34B($^-O5kE_U5N$6K{nmP=$U))$g8S{Q)~gMBkD9y zM#b^?=~7=#Po>rTKhs^Nc%`Y5$c0_hH@V@4-3lyH#64bJfViM-Ia>S zJQ3lHbAFIZF-|o_nl-;hWZGz`zN`-zNAiIUH;Ji8p9nyD2qmM}TXUV=1tt*8wQfhT z$Z=-tfUpp5=+|zF(J8;-b-?!Ui;?mU%VZm3f5)koKuHMmtcO4_jsZ-GK1Hg$jcne>eA~+e{HB_^VG5YPa?3kjU#Y57pT4aGn}BA8 ztr8oS+#lxn{vglj6xc90tr9ab{wiSW$+2{nW9j=VnPl`=iAwBWdLAOPv-nu!vXLZ0 zug!`uQw7-pR#`0R*><#BVrz?6r$~vB z%~e9`nuNvU1`2oinB*fNs3}bR<%MccH?RGyU51BOPbz)0+(Gr@^J3>PN@{?5@~GP; zt2z+-KYlFuv)K1&pQ4-`QF_!evvmmOI_mJ5kZqaxjL=K9@e9GCas0JCUsQ{)6Vo9; z8x-dOdze=Hv)PYE|9M?t;hz^&fmf4JDk@8h=h>GbUV#wY7t3Xe5+I)M#*Y^&u3#ab zOGOAJ?&Fv%0FY#ix$9S>6Of}wyE#})bp7!eCZ?@}!pM(4ks04C=tCMM-z|K<)UqK-cx zt2T;rm@#O-xHVcs#Q|Fyx}-`9!D~8e+i9R$e98UUwVq5vT}hT)1?0mvl}xWl9A>&} zL_W&;J1RT$7bw)+RSHtiXp@eK$w5A8;UXAEi?CdH{YN?}2`PZ*SH!-{lXA%uPU zD-M2}J0^mG|EdplRDgUxGM(JTF{b+Z)JGia+eH-@$;&VPog^SU9y_~M=TH&f+z~}o zz+GhN4%7SgWjl|{_Vg6)|9zGbv7_kA@{#p}g{EXxZod~Tpddg0ckxlNT#!WEmigdh z4tYw{(%%$An3In@I{K2xfY)eRSn*D1^Q+(N2IS=B%-GK5!_z(N zKw2gzoqYA9>hB?`z;y8Qpt^WL(>496AIKJ*1|h~dt$zWJUNm~A%1Z0m@A?7JYSEq=)+ zyT;Pd`UPj4$@dtZkvvOCSP#-6$oqxn-B+3%8hGFH8e&5W0#s_CHKGo4a>SLbDcg7v zjUhDajHi&idKEeBX+c0^eFy5XK5@M#TEEwH$kAf(=#E?_WTu zW3tC0I|@P-0SSrekCzvmmikuor7trxV}V%u-w4)wC?~u5CyrmWO2iEsCjfxEHip7H zQ8b*IHzBWbTd%`Ms1;Pj=U}2PoYJ7PLp2y^k;orNpUwXiu`da(`G<;>JII#H98lc=*KBptgIfgQ@2-V#X^&q#oe2x2aQx$rT5%D7by3i$EA1|-Cr>{G^16+Q5T>pyjl9!s zB-SIPlD766aV|^R6dI_GQq30fiOGNz*%AOv(%Xgs;H{bImruaLY zenFXtX7xo9dfuzv)a3oMMg1tK>b{2}3ZKoeh@Qs+8w7rLsK7w;N2PHRQuujxPrfVHxO7c;5>2^-(KyVZ7m z=C!0Irhn!v2oEF9+8CB7nXprs$0M;zJ7CqJM_KiLSYi-XPVXavMbN;(mX>s7d0i;^_>{4hD2ti` zGAT+m-(xJm)-rps84eaJ~;5ycZgeoW_0VoQ4dC=^G z7Julg;)?U+|G_WZo`r5+W4z@*xYDOquyvF7k*J#HcU|jzUv5x}Pr&L31TfjeFa%c# z->0Qzr`Xn9z#}Qjg#%JX5D>Sy%3bx#d8*?t^zAg{cA%Dnl@nL9qV5c-;)3((DToWnuBJvw5vHk?ocElVMIzEGdjtCAfFABbJ z9rJ#dhsKDZf0C24^G3%M`s{86ZcNq5$ZX59lFn$OBwSbN>+0$v=74Qaf`DKzVLM#L z*A&Urndbns;yExaOH9qd4@kip-%e|zh)GCh*C!fK(9n}_(n@VpK11EK3DX;2Scub~ z0p51@^oZ&BAj5q{-!vTpNoZDcY0Tep17sqI76A^S4qCTO_0Hp_O=z!C1?lwfe%yR7 zMimfX&`f6M`gcF5kp1vEFj+;P`hWr-1j-duM`~MJTl0?#JEf*pE7v-ZIdaBCW6QmG zFI`!g&=11*^i}AEyyN3z0EGb%tjkVUvR0u32I@#|AH>cjzJBe8MoUAUxPNe)58Zz?#e^ZVyyl0Ft0`q$eb# zEXz6uyOGFej0b{y22{MK9Wy?`;r#xD&w8bvtMnR7#Tl%Cgi!)oOJ?n$=zqAqAcKT2 zV&b;ENE-6|`*(s5=02C7;GHV~Ga_$pGB+6YJ@tmR9QVV846QOdWa4 zzJ=Cw0@fBC8>L3LIzmTpLp5ca*1RNek6mqSYzC}^h#M}c7pA-jjrpoU>a&lfoTRo7 zq~`LNG8Rr+dio8s4tl88aDRRHr5-dCBw2<=C=RD;UltZ9lyWW2RjvleGv>qOqtLCT zjJ3=%!Mq^$)YsR~50&yb&bEDc+7f-RvjI8KYy)Y#b`_T{;b%o87B|1$T)B7?8oWT0 zk%!iS{F8>Zj4?>Mecr@yIGytkJst@nQvFQW_`NQ{ww^*oQ#UH~I4NT6U;t+Tic-GB zK2WJnb+gwjCY){akGhOF=ky{c9quym_PN`#+;>$%ZaZC7B!8DaNHJI(yb*%oP|G`BJ_q&g_W~_|!?L-N2o8}9Sgnt^@*17-I{bpzuMSh|l>k7Z zwi`DJR#)iAP-|7j<{%3RLn#pcy(UDx*at?9keq2WQlKusWs5!sy2E?E!L@y67Bx+T zbvK`j7a_mFZ#b{IzF7d?9z~Y{@Z`X7gTHQM3lCf;g{H`Q$C$2yFQl`bytVCU%^wk7h%#IQr=C zleX72g4fU?V?O-yrx0&IA*8;^L6Vo+9wHgX>&fWb*o62_>$jmopPD&Fw?+0P3m8$6 z&=2>Qt7nbzAhxvL>S$a6^XQw*()is5-^roOz^6~2oxc%P_00gQ$cn(M1G1}7g;B>a z)IKyT7!?lEx)1W!KrsMm#8Xuz1J?z-45GNItf?_=f+x&)zfnoojwAXkJDUi!I8v*G zkJp91a64jC%^y?_mMBd*m(bPHR#fpMs-B1KdsWWR;m)kLkDP2`Qaf*=r`{3hmR-e` z8X)?YLF10wQQqkYJ}G0{N4aq5!NLPIg_ur=7z`4MBd#NBN&k14nDJP-aN(QP3cFO2 z>ubTR5z*p|>uIK^^qod`d(6F(kJbp%x~rvnGNYDELd%|yR8CaywS|P_Mo`;ZxO*RS z6DNwHu3Wj&m3j+DYJVI@&wYjpq~9iRRV9EZ=r}Th77;{GMJNlIP0C?~kv%s^?k7KPtX<$z)G6@wOQZJ&-v0X)pG0Rpnb`vBd&^?>`YTUO>q1<0stdaHj6*L&+18P~;=tCbIh#`ZF z2QBDle0QYX#OchOW+rW23oO>SJ(LsfEGXOFoRK@$Tco(ddEwT+_(YFeI_b`m%x8<1 zfmhiaLrKD`;lrRlKl@d?d_X~NFR1MK(Rg*Z+-k5O2zFgBpOc%L1R7XDk}N33$H%9j zab0;(`j0%WsGU-{3cK16*>+gVBs8cF_?k)+8Lb-B)evP%mc+`)chxRohg4IO@Akzw zWp??KJX$q&nk#vjGx=ksv|*)GX64T!GiASk1*O%H>F9*<;Elh|p|9*txDOrD0v0`? z0MMYtFrbiznLi3{lO%zx%Nd3?wE5J$3#+eOJ4?b8Jo!CuBb_CvF^FhZSMp9|@a_tNuGtRTU z5-3t^(fhOSF=R*q0Ri+Y0N_aTT%8ud|!HrvvT22APj^$C*DBmMM6Iw5x8rG)52{qV5DyY3i;nEvc0HgnSQ+fAw%2c zc9!4^0jGG`OI$u8&7xC^jw@)qIL2e255#Qxky9P(;^s7?VYo#2uf2Z1($H)1NSSGE zk9s3!!ihUr*m>KElbALYXyoLZ48N`LLKkMU0sj4&eVz#Q@Aw^zyfgzNs2FzYrd-@+1E53;2HU_XWl`OaTCek>JkXFcHgJ=#-Od=FKg{)%RNA7ZiPL&N5J=~O$*CmUiu!s5bb@?E%ejyZTblFyM!TVbkP^V}H>m-^=Q zene+oQ3?K~IzKW5WHIfM{mzsyR3k!NQaN23I%cJX6Ea@xaTzp)F$~6P@MtCNQi(qh z{Y;nP(*My{S~wuE-9$aTb|C-P7mBt7vl0;8PTJaq=hj>lCNh>VveRSp`#Grhm;db#*nf|uH!t} z!|Z3t+^b_u6;4=8OyNRz2w$m4K@v9Jty0%uGABY7<@;%>6x$%;8GeP-oO(y$bnSU$ z6E-m48#8{0$GTT~QrJ75*?UwSN%BaH?1=;=Z{AqNniS}8JJ{H%@}&I47MNS*@ngQi zXo0lPx1O?YFPno#s;0W|-&xz}c$kV=M&#Jv=X0Dsj@zb4I9q7yT$NZUbAfmqckh1EeL>VW%x%l5u4nKH_eZ+SXj9Bzo? zyHV2GTL)&VUMGUAR~uBMv(1V5Roe>sl|La{@UNM2`wJo>9E3diNfr1d_(yg#|V>GKLtLTB_&Jf z92o|9-BbJgVvxVc?t{DVS-(cvYihFHfl!MT`|o64JFD@lX%+dBM-5%ps`AY@PQC>_ zf`2s3J7wM;y)LO_h;-VrJ5w{49M~zvzee~wFGbWOl#=_Z^3A=~bI*U60T(0w;W5|4nu->$9UH?5sDxC|v#2-oIkR5mToD)rd zlW%x=a`x<>w-?)5oL3HRbcIhf73#URa+#8O%`>07PDXD3_}@J0nWfm0ZC!m8!3O&1 zwWpr#?QDKl?9F|s;+8lcRIF82d*_FKDd+A^PzY0S>1cq_cQ`Qx6=B)< zO-)R0QrlK-ON-rB`)qC0-k1hi3y-<^uZ&31O$}Ff@~B~uVgAB`0|{WG7t@v`VgoLA z7hD=h{7Nf@5k$~)_KYgX;v#jj&+u{=ak^$%zwn0g)uj&W1Yv}oSW`t+{R0;VseBrv zxZ>`rrRLn2O8S-0;dtE@&D{c|%Z=Ywg>g*R9=er@vOzQ8uM)1ZO6^DGj!BO!;GU}J2mIQXKZfZb8N2= zQC-(mEuz@pRCK(T+{742Dvc*TnOXdK1RVaAqvZ=$=c_i<`RW|hNPaM&?J zQ^ysVgk~M@Kgn4MIW}6r)bc+mn_yya@Gr3wEcOYe&;`2_mOZ#^xpbainSMvONbji$D8E-YKExj^5~}^JSHQZxXfo=N>)}j9$XyG`C!-tc>q9=7 zl#C3>!9%nD*+O~A`)VO<0)4k1$PAdCzcaUKdUXYE-?{ z5*aEo#TLI(v7jR+*aTF_)c?-sJgU;rY$ochtWD(fsmm$T-G#fe0ry=kbZKABmE2m^ zRF7!8Pq$WubNSBkj+kfPGb0V?w&m0^(wlN^iMp&>Q?G=9Q>rW2PYv z*C~Id@$^T+zdtFHew4b<*_ZQO#6w_dCoax3FSRh}quS>-^)Ydm`6trA5^iSrIo{N5 zc8~Wj;b#Z_kkJv9Xv|g}fTi3M?Fuz~CW-9`5@uwO8J&@=`5nwQ);&X_L zmo(b&(W!g0m*g?kh|4<|>Ekw4%>0a_xWBhxjM4dZvK=!RE@~ZrM>1TY?w=<`4;L&= zbF-AnZO(M?gekt{r<<~%D4R3qw(;?MBfAycAe7+VT8=q^n<)YIlDc<-FKl0bEMQr| z%B2)z0OO?no5*miVdr>;j5MF)(f!$#B>8)H2-9flN=k{aD&-w*RCJpvJ}V}CvS@ng zpL%J@!e@?Q>j}ER#ITcbeWw^vK9)ZG8>xyi<$R}bCE9RyH!fSWnU2Ioyf2TLZh39647<>QPP==*qH8#qMNQ;ibZ14=i@ApKl=#-QG4P8z zt&%;=tmjz8kQ%{{cVeS9(^y_IP@Fcu;t89Dc$j+%Q-ds9OA0RDYuDv)$fE z`Bn`mHg}tB;oj(P64uA}lvPYIqX%und@&~Y?+iNy#_cSJJA2X5n~mD0FsR3&&0 zx!XaVabZx~rp29>UV1d~qv^8d`ff*(HRu8=|Ha}sJe1+E^g=p_2~Ve=|De zUog`<`o2+Rs>FYGci#U~$a+fl6BCjf2dm=O)UWVdry*~FI|P3N`6c#eVAPhwk4c2>rl2{&c}u(3-o@r+52S_92 z|Kd62(}lQ&W4Cd6WFQ3b6t828GX>|IOmyCf*r{*$pf5c?B5pa}{P|{?Gl$nP-~Gh1 zZ1<*5glZPJqMkR-`V-0JB@MN;7}_`LWagArzx ziO@>X8yUCXP2w?S-5g0?L(t$w0|zhfskWW|zGz&6r=!N4^uflE!SKj1SFVmM>)bz* zsHVvvZ8OTp%7)vQ6PT`47|ReY{o|c@4J#bo5lMP&pOor>{LjAq7{+4HUp>Z`@*>V< z`1;QGDeYmXqUz=USx-<)7zG)9;?D6>UVEiSPmbr#&bfw5hmp^at^Ws1-}ZF}ciKGIcGFkbW81H`R%aMR9;E}=g$HFaNm5b~henB!N`pFIPf}Y_+lrp~`hXCc^|>u= zx1*VaOyPXGZ5v$Y8dT&{mlda}jV9)zmr1K5=N{(@T#W%g50IDi6HT=xQ&VM-vQl2u zNeewVZYCcfCNgp$B{G7&Ji#2+4rHtK4=3Rm1Z~$yD-EOx3|UDB_u&8&g3t!HTHelmWF?_W{7=J zOTd@#Joy2>m``9xFK(#9Dj~6e%HAFMgbaf%V}sz31bl0b;?LHfOB%=M5D=OuJg2LP zPUAfGA)0bIXVg_QDWN%aiyO0#{r28llXU|+xbf?44Os!(4y1lHw-j#K9Tth!mzpYV zl^fP>&de_8Wy#MlN_f8Jfxz3g!Y}HD;blE)=+SIm|FCw%v~j<*?;&yaGwUdpNr!(n zV^pl~p?zqOZbfw~}%-B~Kdf5~fq( zr``!He0gzEr8H!i{c+o*kz6DD|AMG))mg=Nx92*vtl>V=%+K)!b6wrj-V_?l)7jX; z`zfC9jX73>y;tgZd6agq$KU@PANJ;~U+wwTHzb>v%F={CV^>3(^W$Vs#-5-5Jd-U( zt4gHI+<^lG*MDHtq7oLSn#Tyjgk}HjaO%ezZ#@5lPNR|WO~YEFIxl@_J5IKW{oh_0 zy|eK8KDIZusE8S@Cw0k(nah^$^BdM@4$nlpOT8&=5@7xIobEHWXU^EQ z%Wq8f=?k;7xI^#rRYqJ1_syqpC0rbCa)d`llEOV%GiX|SnDeAJU-{lWLg=|>1zCv= zE>yr}Jg6Nrk$D}Q6vz^u)z^ncQUxVJPwb?ycGFL{p5aKX{PrVdQa1Zt!*pPPxgWtO zSVp$?Bj^k%x88bvvJSl(_9Zqy92#MVakm!-cxcx%1}iN=*(V!^kl3T=V`tX;cEzM&@g5I#VP1^qXRMU z%H_*}X36fsNXIlJd+r1Jt5Xyro*VQ8KL|Rmq|EfNi{}qn z+B4TB^)#|XjJxf~6EtrNNk4mdVLe>XS8wym@!=W9(rV>}2wRGIiqOuWcq@ATy|025 z+uOA^?7iZJ6NfH*zvmrzAer_4i9FBSiQlH$UH-6-PC6;c^N0bF08_ z`t8Ev8d%hrwVx>S)46b7OZ3320xF7Y6Y2ptW6ov`*)9TWMKQN{tUf(gA&^j0?EY}e z`1quK-HlxY@63CBRIc-%3K#4Cy$eb-WfHxa;<7nnnh<9d-5xy>pQzgV${Chd+=5B3!O*O$Tvsk zoqDS3h&d1Xj@{$?n_3->`qSHk#2v|nj+m-fMXV`S%=UBN*_I{N`=7nt@=;BvM6-H- z=h@1Lw>E2Fo+2~r7!YxsJ+$=NTjCma$rAUM^7o?CdeM^Sw$*%DXw+v&CppgCCv3m; z(giYuQ887?*DSepY}lzIHpun6qG!JYpjwCp*Fr`IibJap@mxCNz z-r+Z0(Ym$SSD2`TInL8-u52e;@J;5QvUp8q+e#SG!iJgYaYkK!EQwud+(xP^iltoL zEdM)-)6m(|Zp$Dv6q+-sFobz5 zjB;nW81FsX_(kWTn=To%-?N{kH|HiK8e7a zol#2Y`}w%Cbnk8T3*R+oXcu(+!@@h4FX4XvUhMPK)YI*LPL|WCZv0yC<&6eX>2Dr8 z7C&RTmY$Ik5HQ0Z^MJNSvn5;!`^huVd7|OXV{2<$Rb9PR@znknsnprLYSWH24b`<- z=7WZjc8Mgqc?vg~yh;Iu*{}VgCDN^f)9Q&z5#@`Q;v0Kp6}H;@w#xX7>F9hb4QkxG zZ0%a5geXUpGxAL1t-sWeeH+n{7DN#XtEsmSolh3AUl9v`zB*SE%?Qw2VBpVG?KxC- zWaH@5su(Z8hcAwcdn-fvSC+;^;+$IACC5LvE`J$fjsp~L!UVfM$y=LGT5w^LOvu~h}W9}ztNGW$Yx>$?!M z6v4pMnoD<)_dF1a)kzHgf}N9=$fWAiTb{Wek_2QOD5s z-@kL=kN-4U#2)+S+rT1$t%|S8NuaPzqsw6@EiPxB=5VoHW?OniJl-`?VFXnK3vs&4%SW7BluvS@Y4qa)$kS^sY~#H{iC>aiU7 zQ$ONvscOtXLmM=?;6v{!gFH^8!+bX&KPBN|k6@jAeq~Zymg1OzKTvzv|!}A8Y*+c-=SW0gsC9 z102S@v)1x{Ybo^7HkhOM8{ZeN%Mro_;3x?@cl2T9+U=%@^~EgcicuTrCHm4-s*5)1 z4^@&FJ{2g5dOMzMNJiQ4B3f6=(ditjDN^R%PjppW=scyJawd@$hFgd_*$w+iksta8 zWtalvfU7A}Ouw?}Yzfb|7=oKwn>nGUW3Gu3j{|tnMNng+reVj8jTnR0)0Rg>)U_J= zae)%&DUiNM_eTU@>*pAx=W0Vwh^=_ZKwNyhf_Y_KNf9O)RrjDY<-uuibMb#!J?h4d z+NnJD-W3;Gfo3m(X9m`~EVl6^<3m=?c2noS~-ZG2)MW`F<0N(tYy*8!f1oC3^v&$UHy_Py5o10ynFf#|9@ObcE1Z}QapYV2h`M1(_BBe-DC?j^Kxz>x@>*Y zjg47zeR6i4v$CG>OKjgn- zWm#)|gO3S?J|&SpIaBSipv=e;qzjrsip{|r4GnbN+LBG+qp1lUHdJh$0?YqZ+L=aE z{l0B~S3gnFP7x(k8bn2@%rt0HKaxVm%*m9@Lv|&a%oUj{(O`}Y8&R|+W5?T^YS z&G+%ubFcM(*1Fg8;(mIg7xwlYuIoI{>pG9)bNzCN*x+Cy48XfOWh zr0h@XSD)3K@d+w7{g#H_vQpRkgKbe0IjXy#OLM)7#zkn~!Qufs|3*{(Ev58>!J0AV z0ZxrktZgTDFsuwTORxP}-%0vbnwF^%p#9?iTmpn9Che&WSBusPUM%c?1PvQnJSfq7 zW1ekja2O^F@}0(=jlUn2cpT;8>3&PrY0id)C7F70S_Eqa@(UJy{hoWt4<9zTE<0Ih zpViR(TRT@wYo%q^{X0>WzB>p3-2EmQ)ovF<+ND_oKUcrd`RYeVgC}57+u;r;(E^ z!okJ&R^1p3udRKgEg!MGe3|_=E;%!^8?*GDaCiAdR>x+2qGj_lUXB_Xtgh7c=A?V_ zsI!D|IqQ&?%##4W?6JZP>$tDk1dRGE-9#q0h{#*5`kV+Yi+F5qozb_`nr_l)HQzJP z<`y_C4%y=t@({Fc{R@&Dcj;(WTdyW()rcxCGgdrtS9cXTl zq4R8E?H||}kaH={ZeNd_L|AV1uIe!l#~T9<^6wIut6dz<4L->6=$=&mUuD*b9O~p{6N|88R9W71$NSED7vG;h zNa5Re_x}AsVKYwNyxJ9lN?k?#FP&|FSMQ#+V_i+zZr~YquDSFyuiUTp2Og~EGOQK1 zRo77;s@CegZs`4&;XX8F)JX4V=Q#H_ZoImB_MFGe1l*I)r7l;C!aB3wbz6|Qd&u{3 zHvT6T%A^-=%{L58bBg^xTX{P-{;Q`k_K+C$PmfzHx^v6R4K&J$i2O`mCby{Fp{%ev zvhvr<^Oj>PiK(w$V#6^dRQ}^P^>vKX@T8X2(>VXnodWdGSBj$$Q`;VG+ZzAGA0zRY zn~d88rycz|hRSyF9*fZ{t!q>6 zanapf^g2iLE%8GZgf?@#`2Nb>{#-*&cjVttXoU^J!vpo4-xGJs)_Rx?QB~z+JYE)v zF~*eRggH%LFHO1!bGE64VaB-pO?U?N{GKkm)e_7#p5fw?bnMC9d4D-| zim}PdWlo`R;?c!>Ecs(44DLRXO zic@><3=2+P8an3bC^XFQ^Gh|e-h0|tL+2gG%GI|6t=ID1LkH{W)A;lkThAyR8R~F- z_-41;=&ELW^@Vz9PAd`5GV^BU|G0J90%i;m7JvcS_oQ>sO4~dXe;0d#X1|)QBa`GOX4l^;q!!8@&Aon=KaD%VUaj`vmdN)5Ip89TmF#A@k^CY{l>$Eq;lPDD!o16lWW`S`0SE_qaF?VHkGpn{s*31Cw?A(0IM}?zo-A z&3hK9)$-Fj(#)A#Tc>qnVUUi&#)g{Ql#p~?&`yIY+Y8R@UM&$P+n&BwtUbTdSMIv~ zLj!iEqgkyDXh~q@*bKORJvH53BEwFBr3P z54z12T_B=h6nW9RB~kc`HiXLB+jcU|OnQDWE;FCq-`B`Fn9J2)Uvb^m)Xx=H9 zHf%1RQ#1ZiU12+1-`~7g{@Ce~7VW!$u$gS?;STbGpY-7Dljqz_$JAdO+bY?ewrmweLe@VeU0vDG$M-T+uJTkw$7gLt~dc@xyyjhi$K}zHeD>6UHhB z8(EperS0zy+(@F!Qa@fhOV=#7|5CZhw@oqz7)eh{=Ejd}ps8HRRw_A73Jfe&$$@MV z`+*UXFuWg*P?Y)_Hqd6&NHg29E2bcudE0@fv5vf*1@$EtlYDK*Svb-=9d&Oco)Kwy z9TQ?ZqVwU#w)3GzttRw9gRkujo1Y&};^i0CJ`+-VRLuTFQfgE%xFIy3X0qqT zFP|82sr;Q-V9^j{Wgil_hJzGQ)Bd?f=SW>b$@PKeO?+7`qf+eyl^QcS0wpC;R}U0us@ z&zwam@}B>?vEH8=ENhQYTC+9)utD=Fd#6d*RfQyFLxS_>eKYjNb~wMePR1XO%ARekjU!7ybr&q<4`NKgME)h_xo1HG1@R;Zbc5UQW z=HDgT9AV4TG&)z`b}{}_g8-u`RH)hI+yOq94(Y$~HEV7EveG*_3o8Sj8m;}6IbNrt zvW{Kfx6#Lk$eugyD|s4sfwcF9V$dP$;&lBJYGH5QY+@P8(|aOD7+pIC zdzA8e$jP?DN}p~GYrQvd__}cV)>^AQ%5hhGxU-CQPfp01Dv7B*c1GIS{N^e?3)Q+ns@+^2VX$H^7B~{-lP%m@7Aj}{yn2f5 zxV6smbk>ERnqi5SB^P5`*P4h(8Q6#HFYaE^K0B1B?75m#5VS{7b&LzTxmvJGb|&$6 z-RQ;z?UtYj5DGn!VdSwpP(0aKjR(@P>epb9rlM!aNMDLv%13D=k$lu66YEjqio zWVuI=Cdf>m=grf}WERCX4EB)mUOTSY+S&?0l?bPi-o)YmMs33J`HfPac-DUH0>@`% z9zT`o#Hi1*KB?IQ2gW~ZHjiqO)p)NM+dot)HeS)*SN#Ug;vI~tGTTMCo6l=&H(%Bx z_S&#R!RwctoIEFZ8Ns9Pqt%6gTP1@=wLKc|KVI=nnACpt#PopmkW3te3Hy0Si;n>d zW#{J~a@r#A-rOIEdkOz;X@(Iz6R(nxD`L* zuZXP?#$#YF*4p2+f<+V{0hfvXlW<^Nt9rePfT_ZZ3oBJoe-*9ayK4+4x;us6wDTf^3XTwW?vh9hAgv;)K%U!0$SThBy23x%f z^!LAN0}<)=o4NaWGjyg+t|0;3==j1!g6wlIiZcZTs~X@QKxxaMvYz{`n=gq$GCfuy zPk^+54ODLx+qUfvoYcPj@`E?0cGskvH+`fh7F^C~xtzhXx-Ol^>oYzt2yCyFRig9Z za1_7!0HJ;`F6k+DorP&)fm|rm=wO*0_ai;KH9foE;l$?#2X*>%cHv>eB;pbL2U3{H z8`f%qvj-NcT5#Y{8okj$J=)SS*V3_;zOue`^6nXrC0ez%H{q=Le}Sh($?>|mp+IvI zCOeBGJlI97NN*NpB}lc`t_cDNfR86r78fiA!ew2923xW_fiydMlmvCE0MM3AQqm58 z+UvBeW8lMrz;~q4JgIvkc0L+RChRF0g215!cpy-`8}Qo=b$IXkzbjvYZV5*PgtR(; zjcag#o`Rs7p!LC)VKV;v2YeSsTBblb0^df$UM2zR#b(^7%h44zwHbdp`he;Mn>z5Dlhii?YV?LmGtuSw9VXH3-V`2bAH4d%*0 zK6i$G(I|uABmiK*Z}{9&%U47cVuiel(+|ojY30Ea%tdKdOOe? zH{s!k0kX_H0Oa5|paH~yQT4_RZ9+5T@sAv5+oDmhVxrX&G*1C;kYYceW(d&eDNJx5 zL`&uI$iI492J@Pd^*vNx9%qUMQ-_8ZF?h|fj!pry$OjOk%>?(j2ybdjNrZhiTY+eK zq^vo-hONIrUuNg!wcH|Q_f3Op_l__Q7D<)QP+Bl*Qs>KqMf9vlG;pL?3vLXy%_0=} z0HV?f?6WAKMiy=WGI}K?C5?b~CsAip*Or~CLMk<+kZ(I=x3H{QbwHOgZ+{xovzHA6 zXX#n$a}zhnmj5%;CfYCpj@KVBC(`g!pW92{4V}GHFspjk)Lbf(0xtT%d$oknA}zal zAmq$QG@zeY3q&)j@s9!g+?D}QpNdG{2<<#x`d+5cOAGAZU!GEqVaX;hFJF`{H$Pr| z3IMOvTXmq!8G!@5D@nZ1>nVDljIJlj+9ughm|q2(v_a#OTh@>FmxWK0?0Wt_H?-(< z?L)+@GxVP?wxwA#jE0uz^es}0_$keAHBw&bXEa4DOtpfC5e+9*LnC41igukE^wQ6) z8_G?t-qY^p08NGRex+Fbv{>;R{Di)R($dZ zgM)(&Bhcf7CA0w6*HJU`g)6X8knY^ML$YYi2^k+Bw`kJ++qeq0Y(fX+-y1iQmp(!O z_z=;1GMqloYc+4#$#RUX2mrD0P!L`_-|oawiVg_IaIEdTH9Ps$Bvo>LC>I7%WSJD} zHaSwdbz3@T$Z&TWW~bzdM*s6m28^}bDYQC zsziHLTZ`udYDjQ<;kx)_fOkd#wkZU@7bGsimPX*XwXAcW!N(^t;jjXu{Q+{iDtHzI zpcD<-O$QAA2?z+dJus&yj)+knC9gcxn!BvGwQU*Am-k$TRm)qogw2tWk%UVaIE*TA zSM%-NhsyH{`j;03~zn`=)IWm6z>k*V)a7uHC+W zpBa>-c+HQ5QgJss{KX{9^aUl#3Q zHt2@U_!SZ!QpjR1jD?Lq)&MAH$#-j9CDQ5Fs?$Sx!gH+=p38A-WHNe(_W-9pt@W3j ze8{|x^*_kTe>8f5rleVA5Oc6d3jXe0va&5H<)hst?*JJDg7Mp%gyM2hR+LXP3@ZY% z3`=W8dJcMg1URs15)L5b#vsckkf%cE^7rAoK?3fT_=!KYx5-sov$x8Xg9ET<#4bDo z_^eXlv&MVqaUx7Q2zt`)4n6cdZ3BbtaAxf|bf~6}GPF-KEz=yMs4c~i)5zj}gXr82X#4KtdS)iZLX+2T&Wl!(S~<_4x)VjcI9ONufb)#JKhZT%pJWa1KM%sjVIlRzaLWfE_4N9{ zE8qF!H2-1bGUL(+>3X2d-o~8h!ev@8W@mZ8^({Se@(cJ%e>0pQJ~@J`P%DL>uygod`H54b=)faZuHR(c2SJhvI-!9%PC&KXUj zrF$qcGBVy6(wjkj6GxCU=GdoM!$5y&US)}<`Camn&)Wxiu9Zr&L4e}x(q61V{R|W^X}lXpF))FpwlhW ztXdjDZ!VtXLyPbLQ8N_a2my2^#SmuX*|@=LI1DqDMInu5;u;0d6gOx}emEe)5a`D$r_tiwK19?X z0Hyv5s`1Ejz9rEcu-yacSZ2OIEiJN z3q!5YBvr?Tq7FCx|FER6S>5J7yAR}D+F!UXhQt{~#pUSN$-TtuA~?CYkr4=lj9lrM z%y0ifV_zb=0B1%HDvU-2ziD}bxl!H~JVno~&BtZK*1B>f!9vpwpG zTZjh|X^{>27GOXD$3+0MLvVafP}EE-_;B<>F%Dty)8{S)ZxwuEQLrCib}Rr-o*R@T zWE2u$*f)Vgx)^&48_=hfhl?920M3ktZmSS+y5P!6xQ5R+@6bX{({S$;vRLFjWcO64``S3^)KLUHTu{*-fFBRvpjidg52(B$1)iDMJGgY~!pOhz4Hh)T_Eaehjj6-MtpZwd60XJk|qKeAX4 z>Wf`i?;?+h+4o->%oXbWNyMQ{sP3tkv}eIzqpd15*x3kTSkh_MzVQ(2%9#TN-+6_tt=3{tfz zfe*}5A{^cSv9eu4`w%BC@d1YP|9kS%*y6iG=N_GDq9ow-Dbm@KN(za`uipJH6N%ka diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 7dfc784..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.761515,0.705987,1.045806 -2048.000000,2.568465,2.561394,4.283787 -4096.000000,8.659530,8.630638,16.555706 -6144.000000,13.410305,13.320363,36.982784 -8192.000000,14.432256,14.739116,65.866753 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index dca100d198521cc3112165895fadf36d23d2fa8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25649 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 Kc4hChIr~pb#-B6* diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index af78f9c..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.750592,0.734716,1.056916 -2048.000000,2.732344,2.604477,4.171424 -4096.000000,9.607169,9.035067,17.521664 -6144.000000,13.342037,13.356374,36.554237 -8192.000000,14.370816,14.657878,65.924286 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index fb164c01b26f0ef57af0f8be4e08ff23a51feb5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25648 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

    a@aUC*aOogOSt#qV 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 924c569..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.807094,0.770943,0.690388 -2048.000000,1.717210,1.670945,2.716416 -4096.000000,10.335172,10.351857,10.006304 -6144.000000,21.918976,20.243073,23.192335 -8192.000000,22.811649,22.941185,40.975967 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 1e3bc8e6211c78b377157685dafaa7527e91b6df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26897 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 G^FILDMh)Wt diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 3eaa0cd..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.837990,0.825227,0.698040 -2048.000000,1.764505,1.920213,2.667003 -4096.000000,12.916299,9.438209,10.284634 -6144.000000,21.046955,21.005653,23.195648 -8192.000000,19.953665,28.444927,40.342575 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index ecdce3ecc1f4073df241bbe9297ec705a1894627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30469 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 63a888e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,2.267927,2.215847,0.700681 -2048.000000,3.376128,3.412992,2.738209 -4096.000000,0.364544,0.473088,10.226183 -6144.000000,0.003072,0.004096,23.258713 -8192.000000,0.002048,0.004096,40.428688 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=128-mode=fwd.png deleted file mode 100644 index e9fd69a133254594a713e9c0e9a72563fc1965e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24966 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 Ic{1dG09!cdwEzGB diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index e6bb677..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.927602,0.906539,0.709993 -2048.000000,1.966324,1.941163,2.660576 -4096.000000,14.953385,10.312547,10.175126 -6144.000000,24.183807,24.354815,23.311432 -8192.000000,22.935211,22.932821,40.468033 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 10824e0413a280b2b209d7b0a7ed16acb1583a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29640 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 8d7225c..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,1.036081,1.023680,0.714913 -2048.000000,2.136603,2.056358,2.678466 -4096.000000,13.453056,11.403092,10.167432 -6144.000000,18.498970,24.134861,23.233200 -8192.000000,24.797186,25.172651,40.913567 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=16-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 6f0c8998d8edbcaac822e2915eeb6a4b71312106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30608 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 Pq~m|9A4xoHc;|lsbrac4 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 77a393d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,100.000000,100.000000,1.285133 -2048.000000,100.000000,100.000000,5.231750 -4096.000000,100.000000,100.000000,21.936249 -6144.000000,100.000000,100.000000,46.858753 -8192.000000,100.000000,100.000000,300.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 093ec831cc94a0b62b61d592d9e8c50c8811a1c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22494 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 R0}(xChqL=O?v?|o{|4rck-h)` diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 1cb79b8..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,3.013710,3.198188,1.286163 -2048.000000,3.422549,21.921453,5.259470 -4096.000000,0.004096,0.002048,20.294281 -6144.000000,0.003072,0.004096,46.174721 -8192.000000,0.004096,0.004096,80.109634 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=128-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 2ff0676901859339c84fb6ac4395cd95697872d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25875 zcmeFZcR1GX|37>olr1YIijZVP_N<5~ij1;%_PFdV8Bru;kBTUJ?-fOMB-#5?HkUmv z_w(iR{e6Gm`#yfh{pbDH-EnmEeqXNFI$!7cd_LCc`&6#Q6lZ0;|1mqH{l9hclc}UhKX7#| zAIJ=)ad2~MZEkMPJje?TZHrY$UB8=0aHB2F{ zOj=aX|?c^2?z>`dGGSWk3MPUJ>``M_#7Il%ShO0 z{5By0IVLJ9YIkq%iC%>083O|YNhztJ8aF<;-0tqKw%*&&(3sm+(pSx`-ba1-)Dr`T za`{9fleh9*7P(9kPpsl@E;tKL37pC5fB>XF)E3O4!^d4nwQhRJs-X6A^30=^qJ zZY+&f^?&`MoK|Gg+Lv*UCa0q^+iKv;`u<{p#L^y&iBe)eQRBU6jvHp}wBx=9wysNm znlkQ1yRUy^@L0^NSZb}^oerieWA6XX*CUP3^DAh; ziL1&S-GmD>0VLv~=gPvfc zHz_Hv8yfslm)UtPU24=fdHVFcdX~yugv82Z#f0xi*X7}N0|TGcIX|hSDBZnF6wbiM zAuLR|U_~=lbU%DHf6%|hh5|K~uuFq@_ zO7}bMZglX`Ff*&b$3;a&reH%GN}4t6-%+2?BC4Ioo!6y4*vTDNnSimEaFRv@qEGAnEMb*?kr z3uWx`ot8Q%g$Sm5R#w+s7JfCs%2-;m(RZIBgqKDjtEP4q_5S^P4`05UH-FWy>M}Ai znwpyaNz3~5iT(>mGrwqp#zyq*1CM>WA*L5>3K6q&aR#3}w-!zj6ORxu$5#ZpE&aI# zr-pY(n66vplq~A_JmR9n*^3vus$CXEo&QqpjJdJg2_`cdF16gAFetZSoSK@tu2cR> z=J+sLzs~a~tb~<@V;ug#yOfl!&42xPmHP`hSSb!p&Q@mJ^vsNy&;Csq*v*B34qu)L zZ!9?s5x1(;7Hxl)DyN`e^tW(^d9Qi~1Mev0?`p$ws&#%9=6TuP{=U;}8}-u)yROB8 zhSV&VttI+jaR$B#uqM|!1$$`!Cd$ht|IF9xtrpr`Aup&WNjyydD`ty2gcrJZi0y$d z5^XIGT3|6l8=UceU$sJFM@e%aWp^@i6%> zxVgD4{Q7(+j#n=i)fZMa0=Kv{V27{Ww@{P1*m;l@3dS$xv#x zb7D>zb$kZR!Q@D7q~W-qZa-1K%{Kwl_$)KC-EkfKhrYw(#q38P&q;e%9(h<iRExR@I{q^z`W%`38;n~^QH*ek;Qu@RAwvLUB`QCST7uBh-BQ!kRU4O+Q zGhT0hu)U0m;n8{b`hp0)!^Z4A-`y!Z~x z2&?FMSCWW9@xXelmi|=BOPXARhSY_DoU{tRpC9CR4-TSZW96aNyN$VM)dxQ7b`kTd zhjsGlsgQONesKvME-W1CFEp1_5u^N?8VNBmF_fIVJT*Q2U0vN|skO{cpNh@9&NF+j zHF@{^TV8%$QL$q-I6MEZ72ZCdk0CV{d%ZeVv75qCzN^1qum_#gW$xDi_uP5WZPaK2 ziWXjcH0xmQlm7a;M<4HcA0O@9PrS)Bfzqa`udk1j#0*;(%q7{^Pj&D$n9jCE%`Z1h z1z(64Fe8Dt1npsR>QUkGKp3`1ORgo#%(OAh?`y(^YjoGNbs|g9!>B)H)>_E2{_^4rIs`W_50Tdh{#Z#4mX_tK1}t)c|fs{fBcyCqe3JHE9-|ppKcTl*~q(c|9<4* z;SrURl479)^*lk?_B^Lbav^bYEVtG)2BSF{RXx`p`w^Bmq4;koAV|TkDX<%>MzDa- z!S;|2UWNUHij$MT*1`ZmClw36f2l zHhV{mFGDMflbI@a^tEfxVLAgyH*daWoh`*%gEDBm`S+*fX73#)ac5|>rA}mrHj3X6Wp!>2SGihueft)|N(rY?;*nGOyv!ix)4b&Ye?CllF1PBv||% zso*ndjhI`TYL+})YldPeHBbJP>v}W)QlP6!iukv_OywuVruR~J_H3X{-?aJjM%rh8 z4f-;Af76oL^Y7*1GHZ*5qkX6vz3=Z3Tm8yzN^u+i@vlGYNv-=0Rp~v`RCJl$SR$07 z{wlPEq@?6Iapz|NR{5HF=UXFLIAOtle|=$Qem-mKgM3S7W>#|)n>lxS3|ZDiE%kDn zC;EOzF54?(9iP>+;4Lyh-|$ZL7_bq(04s)#i|gg)rZY1A^Q#xGk>>CoLAms`8q9wH zh3WId_xRje`7J#?k?hLv95(+xdRqFd$+lwbZV1Iicj#*cyIX4N>Srh^IVB~Np(1az za~JSKjY{=g`0O27F=W%3CX+TfX_#NLB5rJKoULCcZs5HhbQF)&%%KvC62m6^#G974 zVL2{i6;g9-N6NjiT_Tc4oBbXfj1BR>^K=B=*9@T}$OnGh|>U+)|WHnf~XZs6!(T z3yrZU{)UO7qGF*vc4w#J*ybD&pjIe}^Fww)jx*mK;SAA6Zx`s-Wk3FW7CH>? znpkmh@sbSZl`HVd8ew*7S2|p#l-|80Wc4fkP6)-fNA;nh>Nj4EzDy~oANCHNc|@B2 zCnzXrhy`Bs9~#9eEBl6yk}Y?M+^?`D~~}zL>dHq-17Z9=8QRm8Z4TxU%yr^e94KI z^bmmZd0n@1?fKTyPziBT*LQf{TQ#oBYwPP%*dCdRv;yOAVK0J$sOjjwu|-PWh5~p& z#IAO7kwwDwmDg%r9L)d2!^6L$Re}<3E1l?0pf^>x{l#@GmJK>Hz!|5dKSka>J6$3Z zP*&ozIH;rg44a9b{U*chcPuE)s?nl&9H!-_Sh7^-akzi|m~!5$Jc^b>Jmm*SKBjI8(X){Q`Cjs0Z?D0bjmI5&F^3ndW^P zDga=(tosQ9sM@3L5$EOMSYSWY=g*VK!cf>Z90{+ito-_{9>S|vO~t^_dbBfPkUk7l z&SNfCOYz>l_t1J6a_3*YzZ23olPh+ndvqmVw@Ls7*8qTlR5_?>)!qi^`Rt7A^NBE}5P(U_z?%VMPgreE zO|4*5k}#pFDs4%DqiX$xx*F71>w&#}+>N~2(aIvJLp*pb!O6)?XV0Ep!YlMW+OMps z8Ht3#YXR>R1(+sveWrC}$9AGV<(kG9)Edx>jm>`5=+xARh6WiLPL&LxSaCi)0E-39 zI^MCfu?3b{4+@yJQNe6%4WyKgUoG=+cb~PqOm^nXd!R`$B?<9w4j1@+U= znsRlk-qQ0t)h%{~JEmo(=+Dy83!;62pHA4lu&-%2K3*j=;hEz>QGvFbTpdEoo6)rm zUCz(;@btuZ*p&>m{rG`rxHj1|>eza5+XvKu?KFi~=WYRRL}<&+o3tYdvzeFKx_o*O;4RU|Nsl`RFA0~;yw(ZdD_MnVej@Nnw6x@<)QDS85tq~!+ zNWxJ0h?PRg2gUR7)BPzHW(#>2N=o!dRTXQ)1h*xiocS%=9H=`DxP5NU?uD32r#Yq3 z(a~&p2?5^J6)#|-H;D7FEYya_R;%e|D=|Et~ylds5DgYRSGFbo4 zEwYzznmrA0;8%_or9be;xrA$+GEln=L9{^nUI>ftZrB1HH5XSjM?!^i9&TB`&YuiTpXj2{f?Yq??fF&OQ+m8AjALVKnJvZ<>imh3#Pg07#HsogkWg%Cm zA|iy@GZfb98i0I3VE;I&tY(acmfkn0ox6ZTgl?3E#*nbxjrZxZ=qmp7^A>L!emd=E z_;wmVlm1!{^tH#?jWAK5WSRVU%g!X_83XgcVZ^rLCjgdl-T?itdjn`Lm{A;n1K_1? zAoH)0fO74(j=kR6F4T6UKHF8z(SP{(5rhkXG9&hu1}*~{2u?kOd(cI93CSra2>Rg; zCG+Af8n&UBwRI*4dMp*S@*aPcms9dD;PYN5EVZ|HVOP@@ZoazU_#vN7NGKKU z>C>m%O8BItQpRfBXz1vIA|oT^>B0p2ER^MPH>W}{p%VcFdHJ&&dPwtsMuo^Lv~AyC zuQd|9i6#)TYTO#s(TmdMJrNVR-h6t{<$MRRm&=# z9(7}>tO3YD%K%~$6pIpVCA8kzl|_-N4J z>%2NXhUjuF_<2v8x>I@!(gtD`9i4_P4PipOncoATj3`pe!)0vj>_L&z`=N}2=DoNE zy4)<#S750;sq+-ddspOr z)t>GYiRBRlO9R7g{t?ZYclC*!9Es79C$`+)`R3BNt&5PFnl3A2k$Vz2c`Os=t{QR)% zs|{5n`kp^Vg-sR5O}I60R&a7)?2;shMui;=$4zoH1S?kmI6g6(%dzN51!fZnOAyfj zrE$9^<#uE3AT2Go*6xgZA&@|U+2aN1X9BKE+VC|^XL*>kMW59OeQ}JK&KsP*^n;U| zcn+)MbqGutg-*Y13lalBfw#%Y$@6~@LQYTb+JpwRAS@<^_P}JK-shV}dGnttG$&N2 z6Zz)UsfSSEP-lCTGMbv2yy4-X4F{bUvf>BK68?pbI_kONy#VqHPH7=8K;!*Az{cKV zNgR-T!)4*|HO*W_&?uHh;O>I6vN%C$+*}%>@dud?6sngI5%rT*fb`aRpAYdzvWOge zZC~u8X6y8blkE0TfHix(xR_MKBTNrG=5T7yYdhI*DRyDFj2kA>95gzB^UtA?p1=7_ z*4*4Yb;fu9ALr=Un3%&P3Rr1+E{+520>yv-dg~-|pAewu6R}4x7abSq8{r^CHH4>K z7v+9JNJJ#yFew{M$AWE)SEgRHt?&^A-D&_SyD(V(MG>`cdx9iz`j)cU- zG-uC#MPwbowl814oF5y1psYNT>a{WzrNI0iP|M?d-2^D(y}<14YL632p6$}scB4?WrtV$?^6;#Szr$E!&)C{Y3ci^k_o`@od8y1Iup=8aenz%I5~+a zDJh|u#tT`~Ul6tdnUIL=g7B+2eNV2QA}9=3&Dvv(Kz%_W^cSEC7HJN^M70r&KWj2l zKAI*aMTgT(QLjL?&xwJs2cq$*OB@^=J)s7uncO{Vn9DO*U%%b8DKZx6TK8~T>L`4# zW1n-9=YX1R4wm>wSD=)pm;iIjhtn4!1SZ-vJXG=DyElg2Qc0>Jc8-s%@Mvpb*b42& z#6ga_0sYh5MGVN59Gt<}80b|FH?_ih)Kym)oU-auuu@qMcJ8=Wip{*}B1(~f1|fQO z44)q62ee>WEXHBN$6>#8U?7z3gycC2SPy<}3dET9aH?qQy%uF1!{;@(h>WM>BH6$H zvMqDeF{Db^d*(aUxo0jy)1lxeyoBkE0!65$;_9F|O`IDDQI~cEIau-E#F~w-NMU2q z*skBd*&-g`6~+VLqoJj3d4Eig-NIs;(a#^DuHyl8-tVKQj$)0AHOpTl z#SGU!ozNmt>TiSs7IRzqoopacAvz1Xh2=?KQ){1{ZH!j^%Hr2}!5+pY=I)6fm-#B` zg7>i$*#)A4dMl`e=RZ>dDOcn&I)|yQN6~R#JNz-Hj_`Cvt~beKgL=e{j+$Dm-T(1> zXwS(oYv%HEdUv-KR-flub|%#Z7l_t)INpU>0dG`xeH~<5Oix$Rop5>>^KN;B%eUa^xur0o&`z|t zjK3$AlIW!*^6wF4aG>S_0XUA+m&$DdsM#(_j4UX%41Fd%IVf53jK~Dp@gV^o9=~Vl z0NqQ$lcxwJSi=g&xmu4iG5h{muxc6l&ly7{R{RHYE?;d!&T#UP_7%bY+JU5Z?`pcn z#;QGATu!6`?b)f2slEC4$_)HuIXTo?9}sk49Cfe~7K^6wxxC6QeLWxdOP?WP^r^ER+FiG|s(2fzgvOR|D4pg0cs;U)*PB4t- zXiQ_OR8^0U4-dDzZhRMia>-y*TNK-qDkpZ}9_ac5@@Aw0w=#RZYGv_b@`ny``_3Ii z6LcH*m}fWmzahG-ef#oqEqmAXNKz#3d4a6u%M?k3{Udf&Hs| z3!}3fF6CnJUJLL!UKy*or=-Nn!STJGhoAq=J06{4tAT6WO7N_lS`E^_a)>XA$NL=1 zpJJrfrl-8`UW&;=e2a#M(%gF9HAA9I_iTSBYE^9KNAJzx_MC_ar0zr|*c%vuLu zRSy9{Q-6Q8r(EMp0z-I9Aa-_?!AMs-hCfdfsz$I zYl?nhA3{-R`VvagtP^OqpB`KQ!nk2`02WsE)3R%*M~@yMN(Bf&6KNpGK!**Di0Ix) z9v>e+b?Vft2Rx5%XdHu_{4EFmU-* zlC-#%bfA(A0(=S8Ys!~0OzP}E<7d`osGdKV4#>Z8A&J|>Zs`Zf(ba&FzpL=G@ z!^$vITHy}?0j0z)A{x%yJ1f0kV&SfI6b1ihd)31_4{W$%+Qi5bHv$0?i$ia~4hX@$OZjHh;%0^U&N zaG&LpJSktdv$ZHSbN!DF-aiq9yQq>psh)%&3fZMKcy4uuC|YJp`-4sxxAue6d~&3y zc|l1oEcoOJa6Aa_#we(Vt9fH;hjuOCz&HUeyN~ zzwY&goXIJ?=HP^5I!EDsZ8#VeY?QxBIypyJ&|qgN#`;YO8UB_zMj|q1GW%L17j{_@w7E#IvY85|#+l<~OeWHKqQ#N#~ui_Bh~3t@6f?~oVUGIxrw>DTAps*)j+tJ7A$ z@R3u0_Hz6Co5yWM1}Z7?@Q!CJE%{APXJpLUsqfNgW&Y>0qy462u{Uo}%5hKiUWb6uJ;8_P~^JYIZ}U7;`X;Nn8DN9fGizA$byyou+Gy3%-cK0 z#;hoSa+kQd!{g)69Tb7R`yNz<+^1#jU!3ISGEN5tHHFcg-@N>mCCe5MY-slWPY)1> z9U&POX+H0)3+mp1pda*#Y*~uV2&G4CLf^o41!8)-H`Y z1n$+|XS80Vc6_XI0R@7o&2bgjS*12ZZxNds{NZU3g8thkwRsc^?^6ERu`kwj_5Gbf zhs&eR(a>;3d9&&Xz01?nFCn%D?hvaAf^J)9=M}KsdTtPdYgW-S$@uZ^YgTslZ@51d z_69e!cvx8pHS(FjQ+ixL(Uk~_e5eUJ0p)(U>j+OJ4<)%PQK-4UKf1C~^Z@ri=!h85 zku#t_V1eAVPRHe)2m2We13VtA2-sP-k-fKp7Xs%P03@)jiW1d8aE8nb(phr+A+%idW-yCy)q(&B-q= zXQsBuK+5Gb|J%2d)r-(kytV<9hGPG7ibv(SVy!IkAN}Mr+)vP==qmv;z#47s&$F*W z`E}Gsp5K_U+5cX2x)NRGA}?BJuKoA#E7K$=R}(0)XwH6wY3cs?(`t)`i|gdu38_+D z3J2S;(An>ujMQUeR=K;0(GoQ^NqPRlNdp=$E9qYYxrjPjV)|073R~$|HA0J%Q%Xgu zcuai5vGCx|>u^DZ{jgA>6R4}y*%*M)^&6`W$jXAZQpt-9qGHj#dk7qrl5!il=obIc zSH49YsfRHO*vn%;t?&^khg@gH#MUMow3X+tUA=A2GKcuqqg^0O&i;`r{ZUsJwEMUCj)(7DWxJf96x zNJ<)RS!L@C!X(W|XZl1r35#C4^x30STO^Nh?OGTVMuBI&mjna^u76R1jx&%=ebb&I z@98bM7cdBlMxysoOn@mGj<%DI_Q3sM6m{wl^T{ zGMQxGiSuJs^MnIOYdr)niaQs|qydWsy>u4j0z)92NGQsCZ!Rv*Wd)##amf()uh~92 z|A(?Z8LJ-*kZ^y;;BPM;hidm2ppJ2TSRLPt@F&5sJ55erCIixB7BI~1c}P?kf}9W} zy$V#+9TGMtHqJ7X0TamWbf!ur?e4m7uTH2&GE4CuuwD?_0wc{nfWdngJP%M>Dfh>HHHm-;WAPRqat2^{r< zDhr}UJ72@$SI9DiW1hoBIs+-cW-?45wx*09(a zh!d2pP86Gwg5rJkmzar($-ll#(i;{S&fOkpTy5>`?Im^pTf@^E3IdE86-0_YID&HG zEBULy-u3~j(;U;M`R`zvE5I{88_d6m!{P2H36lf*KEQzl9G_%Y{kd^I36T{<>`Xx` znO{~`Qu^A_5uT35ow;!Sypoz)A7M`dMC>fCI9XX)1uVkMv%MSf0+3*o!sKfa0E2R2 zZ<|jwZp?LH`&DJ4-oAYfo(M2lk8NniNg&_Q|J4NtdIoX1;2|KDNBiV8wD-v&i!`2M z?8{KmVtSs&F7j)dr<%bNk#75sEudy9h9ma5qZQ&|9l5->RLRz0xRc&}c)f*4tlzrR2J03WMb;*~4U%qShD zA>nw6h^TsVr=qzOrIIB48jkBLwN%f)8SVPFHvpVd%+T)!KR-n21dsC`xJ_WywS4>b zv&2Fb1$bZa{{1WB;``6%A>Q?UWaJ>siUzuA!y*1hh33&J2aLocSh!+h_fZfvAx;oO zb0E1zzhm5}&(2s3x7JE=w+0xXAdtPW&;eT*ERG_37Fb5jA(UAV(g32c2Ff7K#fvEx zvqhnyIZzjCR)fcCjFzaC3 z!u)Xr6}J~|8c7F0dq#4DQ4JBHik6fAEW5FTH6oy{!z@=DMG8R`5@7%rEMD42JWDkV z1I)B}Vq#*Uc;g`pJ~daDO3HI7uXH;-1fxFL$GN7{H=?Vms*Fm8K)ixXT22Q*ylWv8 zVBI<#Z56r|Am!p7IvW)q71abrLlyXlRp9tS>W>>S2SGBU7~JQC_p-Nl%lwnr4{QJd zbQD(hE+e722+LI&kr3N`HC$2Nk0Iyj0~~+EV7^v zBe@yCM@4$3<&PB3XTO&|#j5u798v8CiQHW<#o^4xJU)IB4@oEMK&SmV$q6NKHK)L^ z<@DNmfOUQVbRO=r)ZFmal7(#(2iRdT&nSNo>s!IY|8H)29K-u62p{PAOLxdJ0#&&q1i zj}&fB=i?*HW4?-UD_$%ItCKL&SVRL#Z-U4WxVbrMTj!MojYX~-fyhy6-Tag9bSAUX zI@!mi4|}0-xBNsPaYjtZkRjk?T}C2uq>gZrBiLC@>7tC?HkKgtWk8CAONW*m$z7!1 zWWF+L{8NPV73pN8ugH-ga3Uk--h&`j8KErCy?tw>uk|O6FAMGP04;Xu@4%)eDM74>)gD1a>U-XoZ z*f+a|iwlDxo?E&3kZun`TDQ`l;j-S(G#Qz52w{nOizsbs&x?y8p=b2ttUHDghKyP( z^W;-WDI?7N%4K2q?I$On&XwXhfOd1!>Q|`0KMEfoA9MiBh!x z{(e2-dqD0F(o>Pc)NS*g)CYinA?Te2Wu6{@b~k3t=-CAGa9NG?c?l+0pKPfCLt=|Q|eK1VZ;#JT?0ugCZV1o!UUyL{33+PC3EKq+&-@Ct!L*o@aE zfZ$cXzrc-XOWxjxW@+|cU!0N5G4f({qBig$Yz_{Hq`YZOG>`*ob7mqBMkOeODK2k?m% zWMxr^ef{(2PeNwA>#X=xER<57jWdx5E*1`wp>}kJi9>l&yakF~2OI}(R|c>=Xbvwf z*w<3~59)i7L(v2~^ByEzFG{%1LL#oH(h54e>yrORg)Ys8Ru&PheJVH;?*MUO_Gij~ zP}Kc2yNKPbEr>`_bDj3_t7(&jH7!54>v&F(sQWzS_qv^HhyTrL!V-;S2lETP#jdb7 z9ju;=_8bI^LKX3bY%sEsp{M^sbFl(qnue@3-l^GpAl~}b|Kr%js*Y{YMfIHkWd_4@ zYhOvBa2+1lueidKaV;Zdhxd{Y9q7$A>q$~0$VtK?kiwuVYj_C~VBA_?k9NS34ORS! z>`oEuuy07H@ER!-OdHIxkOlzu66!*mpRnDF#R8EyC!G=^tHJVWR_dr}@FrL{(mc1) zjqa?i`ESf2H78>iDH+NgKW^w8qP)Egr*5z95cBa_FTx~eVxxNQsqHtL`WR%__xSe+2B2N(A-u@iob>G54TtP~d<8`RW z(=lM1dElzuLW)d~hixfBzS`f`=AR;gPE$be47e$J4VEF0-#HLU`ecE3>eDc@l(LJ1;+!a5#nwnJ|mf}Uwtw?4J z)@tB7kAhsrFKCh>Cg=El#DT018rXwzlUevUfR_k2A}JNeKMbRLJrJk0jD@b|X}+;@$z+l7^%=(sz3 zn!@=oNbLtjaDP#q>9*Ci!&N_r&8r|`)E?IlwG$LNe%vz2=$5r9fCyXEeNc9)-Ga&=maOE;CgOAk{qIN03{Ki40U35vMG>WW2xH7X>z5; z=)g5JlwZqkZT-jC@n(Oa4dea9m>M3jp+hOhi$z7CJi(%J_dw(m#ebMmJbr2E)IWc; zH4F5+Aa(Ggy?y#qlHD|PjBS(ugTQ5hiGFid(6e+Xu4Ci^rc3b7WL18HvU8Z z6spSQ@)6W7guG6qFwMLVAce(ATKv!0=)=*t$r$tQ7d0yaez+yUzy0%l4JAedrM9I1 z{$UKGB4vW}^};JuxIA{oNz;5u0*RWuR*}aPr2*sy-KGk1D5$Gi`Aq*)Hv>!izjd>> z=k>aR$<4zl8fjE%uOH&wv^K}t&3rdcD?C1;WcF;cx$(BIgMVZE_v#SM?c1Fzc)-L< zA+>;kycsYD*y8{i202RczX(uzx@0S`zqc_lF{>WXgA^Y;=)%6~h>kJso_UvQH{O0x zrrx2!pnw^S?B7{@;)P$(n;XaK*5=o@gSGSn*p)ly8lf`3 zWL z*V^Xh6<*%%dY=Doe^{xkiV6`tJUkC(HFs%gknCSycn_0A%p!;cb9$Ofy|c_HjyEWn zyvv^}!faL%{dLtM^~V@J6^e!|lUg>2jc zKP`oH9A7#vIEq2{_VXc`0v|8IH*`C?c8rXm@SBrP29rN5w^^@Gowdh#qtmy}fUM=1UWN=1hN2~E2=mR9t*yCqeluNi>VIJFcZ=(( zeVrM_TDAd8wet;~Cu5`FbLVi=P)DHwVu!)*9?Xlb2mvvyKOV-mErhv!Y`c}^>8)9( z%uio&M^!y6?v1)Bb5RO6DL;mWepE-r7#Dd8jrz%4;YcLFW0D{EQkCcT`7_2lper$< z;%eq3q+yP)hfs8l(bJmZ#3;_6Vy>>Z#5&zei^^;}!bT45a0}8vXZrauFaN4vja$;k zAiv|WS}BNeSXEsEyX}$~BY#}Eo?dcgDtR9BlksG3awMt^{2IK9F z5ibtjQ4IB190Zi|g_rkAOKr*??qG7BSmw|$ILQN>o8RdOd8;Y=Lw9WX9;5Aum1zMm zYhVNNm~RY5-^ogj2el07j+9uweKQw4;I}Ek8q2+@-zg5g0Hp%`ggyx=hn|;>1pqVFN?>1~>o?}>IZqDya2aEOf zdCV^!3yhMpTS$+LNS5m(78!_;L!wQ~=D@WisExm~%$>y>_#$sw9K-!Y({Ymg$3Jwx z=4)_c>9b2HsKgGchs%XH7kIV0ZO+iap+Il6K=zf4f;xdYMiNOM6$B6qy0 zSwh}(L33?Aji39Ae1H3i_qV$cv?Hc99VwG|#0E05m?h67_vC{08FRA)>|gMW9_J8Q z58e(U(bUo?B_oi={b8aNuunykd;Y0qOcWMUu;k=O3sqquEWs5M!uB3~I-24{cMo^jAb>GGJyxRd(L=ta?B9V7T#IpgwMXLi zuh_3F@kg))Bl!40rj^2vi>pee!kXA+@oSfe^|A?U`N{jk74$a#bXQUmfeeSLu)?eA z#0z!+j+$CI-9{*7WK+b=`AdhpQ!t*jFtsyAg_9V6iP&}Ol)&y%5R8@HA8tmAZMZcP ziTVsLSmmN!-wc<8kg)V|yu%C%h(()~1yVZceJUP%KcLTRY&62sFU0ung)#hE(K2l(iPby7J zFn~u_l~DyLQ75ysx!g7_qqYD-QW&z?m*ae(L2?Qc{V}A*-3?Vl@Y8ebefy&;OnB3YmW(- z>*yLOwNU-)Eyl{$^)MmDc6=XZZ58alcw5kUzl6?uRX_U?LH#bi1y(`wdaq&7gAbLed z0P3i|zH}WCbV3EDYpR*DOQ%t-R3-K1Jn7+va*5vr?5Rm?zkC^UhrkwMK3D!O-i17Q z$|B!&GE5hNfk94=lS*pp+K>fCaolCGlgqe!yIaB>)qpwA{e=c(koS)oZ$CZHBz|gq z+l*bDEN}b#O2a>{Zv5QOgHK^!M)lI2sz! znJT!-B=PQ`BrVOuy3WNKEgq+Qh9dY$iQ(|gwH=YHAj?rv5h{2yv~=L(A*n^!WCO80 zv56zT`dwBK>p37a!3!Dn_mFIXO&d|0o116zf1L-S(HzY0lwl`CAJlmtWJ;yj&H?pq z_kZlLNAbf)Qdj0A^8IZgEvhQac}10A{kl#K`M$oeOlP2DxBg?tc0$tQWFPUkbThyE z(bk{`Z2$cCJMRL-L5;yS2ABG{_T6oZGKb4cBNp3x5{_RNtdwN<_yl)T#LaLCsdYzA zchv`TEs0vQ(uhPvN;C>B)wN4LWnV**NI)0Xj9pj99{_Z^Vd2tF0=fWfR{*tR;dw(G zBpgBDPgSsVnegF9f2!(C3U~FZWYwwoNbiee>rB4{}vi$bq3V9Ad8( zTE~gW&IU33vf^fC)%wm(VEDfxJ>?<6!NWUq79hZY;6BU(63Vxy7LKA`Z9OS&Up2Iz zXenF9rr7e%Z{rSt)l`in-3-vo3&U;Y*U|eP4b;*lr`VR0j62*J*Xe@nMbOk+yfvr) znTpkndwg}m&pzV1ltbf!l2RHV)aH^JiC5>%@)On67B`6q6L`wgyp1WSp46Sk9aWg> z!|yIgj#MUUEG*6wX=|4NZ=F8DY&!RG}GH9XL5Db{UwytPnTk%!>TXX!vlSk)Y0 zCPcExbi>x$A#ltLDGvX@KcJWY?<`OcIBSTI4pKHBtRW;v-d7#|)U}+E-uHMc`GaXU z)7pAb^|e;ha~Ru=?d2}&J_{%#<>?eGc6zo9f>yLkfAIL~pFunXWOC8vr;Q*j&Iezx zE0kfuO;osnYlcL|R3+C>!SpxmO}_;sqQBf$r~Y6?!aMo;#iNPirs;3yf0INgzc%OP zw>g5SbJk{k9dqboUvFvGpjdzk;YV{wZqZ5}iF;9GtVGS`IGhUpP#yC2s^p7Fg+n)ud;sa+u%(yYP>_4K=61oH9R!A=VwEM^7H<2 zd{-Ci!9?^?fJgYlTa(@uqsA0#@xnZABU^*b)&;TSYsBW+K0A8Y-^X=3x4BaD)j%8q zy@zJFfd#PSD>8I_^?X`IHEXNG%IuF6@q}nY3sY@%RmXq7ek@h|#So?WT6L?sN9}b1 zq#@)&i6?A2S8i#d^N|?PNTZ!++}@I4wmPvdPRwm2{Z^p`rQ}AanHe1^6nl~Gr4H?~ zYoLOta7fuPA;}#VFu_mLk|&26#lJUSetMeXw}8EcP7yxtP|(egIG(`dd0<}7=Srx0 zD%AZo6+`=bkdfqBk@C9EdtXlOdKT)h+}r4`s)f-pqiq{>y{J}9DusQ6?Kp{y32-FS z)nA`~510j|UqYjLv(j!46&E_O-?X!_gMvJm3CBJUgg`{+KYj3AtIscvx-du{7BcR3 zXKRv!9Ikt}i*C%PqAJzFxm4_GhAIpCMI{jg)G9d$WjWuZrXHYW{l%&WVly&tnVYX* zn*uKj^yyx_<0LQN1QzL^BJ+mc9%(`1&_fZeYB-9Duu*O0&y8opzjP-C=`5VR=P#DH z*zbd#Au|4Kd*^~^Z*eixyO59}1_)tw$yCJ9W>1ApdUMjUoIPe~q#0nQ7&j<2cqguDQ;2pzg4oxk! z!@H5eFKMv(9*gtDb)E@qX>;xOQ>@Ba?S~<*39Dn27Nz{&!1qQRzp_es_1o#KoryKr zF3_X!ieD#}h_XDN!(w}Dkl#a~cJ20x@B=0u*6Cz8B%wtPof%0;+W9lNd!eMK(}Rpt zrE^U4W3b0Tg^tMLf|EHj^IGqnsw2*l;?9>JTO%~6z%3Fc@y~4g5sf+D07lx!yWJ(< zS3z&D^{H{4vm+%D$Z{PjY8Fxuk$~k72c`MY=ht-Ws)0|R9EfiSvEJT>h9Q|8Zx3{@ zf@Sir-CalR2I;3{7J}RPU(bwcED7gL{PFLVM(k_?zRckpH(zNH5p>^zlvgMJ)y$BP5Ha$e9+@OG;mVjb?#^t2#Z8FB zWZYCkIU641tRvi|d`D|-_lK=DwM@6=CA~#g%fVnZY6hzbT`}fNQ@h9EedsuD(hHi*z^tq?q2)h# z8aav4Drr&z71ml%*O;oj?n1`BxI(|~ZN6HVj;w#x_Qoql4A0R(PFGLM7Y$7<*v(I9 zCP?<6*s%)P?oCGaU%oY~l$*`cw!1kHxVM3cf8h0?^>Q|s9N;~{=Y0SDDb$q~Q^T#m16KdDrFzi81=|lJ}Lf^LV zh6}AJMGP3)rwF89xue-%=a1;5qhb@HJ@nJ7CyOlXC8o%|3WBm(nigZ8w0wDAI4hLB zMZQ_ZUQy|ncqeGWDY8WSjcTtvfw8IV6|>rQZM{$G5}#cJ*GYPsM(WOtGmlq|jMjCg9eb@T<0gb7xkui;i~3&w%jYm< zU*tdycVKU|;-@aCc27l>Lrf~cHl$o{%_-3PIq!KYZsNz9inaL6%vDpAogNp{y!(=~ zy?QLI& zO;$bkd5#V=8p0BMxNY2Yv>q}(IFjR>Ya5!GbQE4?kl9mm|J9EZiKm()eWvIe*^p(_{_()ZzOUe~+4*Mef!+AeX;xNEhnQ7+ZZ4EQp29AQ zk?2>RHBsa13+OoYgFTD*n`b;X{qYE{b9H^zy?$jyd8id$3saAzemXkk%u5E6&~Ey( z^F1Piblu&-*EBl)-oykC*vPebh<)9u7(jk?)jdCd++jbN3nL>&(#B%cDZFaoJ7=0~ zf&MrBU|m@y&-OjM_2iN6pffMy&R0$^{?qBydhGl=Uue*KysX0}lUb-;SH5MTibuXh zhzoTMr5`nYh`K0YzWwow{@7A0F>J5!NE+qcD7KoaGqV zQ^{#jD6*TWWKtMO8Dkq#Gh`W!5MrLs<-VW$e$MN;|GJ<4@roM1`TeftdtKN2^PV?3 z=|i{A|N3edMI{?M!`G!so*VCeK zzkN{YE*fxXLiI(AO)yaK5$NCa>#sLH#BY-6S!&N+S}~<~uCe*xsrd<&9^AiO4D9cc zY*x4`n;PXd{l6Xw%Wa-zdtMkiyur$+eYn0v$qCG+d(|yvLW@wqmBLFV0~oXFF=c?( zr|^RtxyZxKukTeW+fnmRIYtCeNIR3ex3zUrw2^-)TN;}ylw{6OT{;c0N(&_}K0b=g z)^-f(n~7tXoMTd0MF7AfM=UQCkyPUR`NgAVh`Rzgi5;axsYgD0^pzgld3oQBi-C0) zCM%q@8gKoBc>jg2YL|OE*Pgt#cJxp;zvp1rmGu#6kB$yRjI-S`uDLlozjNrO`LkU? zck8>T!v?9M(D20S2)j9%;%yc?A2}#eHp=hwq$>G44b7q=i#XZZnJvjduYO%-cemH3 z$baG0Yo6ohcKxhw$8C!WaMG<9lJGx|b}&tiyzg4x?B^iQIK4W*ciC`npLXBERTXUOBDYrU6BEO^ z0@}6@uiGrI4_Hcfg|fNNbKeAA5lPZBWI-(1@b{TEp=00Pa<8s`mR8;!6Z4LloJfcP zeOsP{BYo@$Mqtv^sTG;#fRkaAFc*o)u?HMX9-FQ#-hCLWn%9GWBqts-o*iNMdLT~m ztkrh!Zy%kfvCXEaXoW`$9xwJ=-0|G)+TzzeXJ@i!uc}Ji?rNOW>6V-g0cMi{1&x+23oogUF}9P`2{{Yx7GA^cJ(DFHOa5j9k=ZJ zqC0M+M0*9_M0)=vwi%ya7krD~yIy|1_0Wt5fwKzV);4xO=uP9y@_(|lfx%jwq4(kY zz@cLW)0ziG7S{y+r&dImN%N#tlY7nU>I>J7>spnA(JggyfP?Nsan5)NcVke8xuPny z!m}gw>3Pef0mZR3k8qiJQIa^i}Qwf7M(92IP7G9y&RG7CExn;h*gb&-L2iDee~+-wk>-WUACd+ z)U$*cw+-E2PF@?a<7)odyG?->lshp&k6d?|H<7GUDd^6&kTd+}`}i~*VwCv@zdop# zab(Z9Fu8a8x_Y-|RG(9+bpJYby2Cye^Rk0|NUQdh6>j~EZ4FwlyC1ehn56HB-+G|Q zrzYs@$X-ng@y62~{+~ieM|EFncT66bt{A}5tm`+Eo8NErS?T;fMnNo*=FEJr;^$C` z?=^kY);Xd*zPwT-&P|;h()7J4xzuFBy{2yzr_j-w&^^+>N$%kt=9E}f-SHedpe|q%fIS;|R;apUSrf65bk2wx+od#7ANU3V zQ-Ct&iLV_Y+dIbIAI2fsnv=g8>-bA9t#1`F0HSEF3&!>p@8Xp!R+krT`-U(WpQ?_% z0i6$9?X#yl?IK7XPCPb>M0yPqz=Z>B8Vk1lr@GGEue-f$KbPz10*+L(CBI17PaIT# zb=EJ$AnESzPQl=Nz&;A^WQNUw1G8~vX%p)_>7jD4vX75XEjP>pyGSLjnKNG*1Jj9O zG7n-0K`&?B%`}=I?MT3!v=d!vCmNgg3683d$E)Fjo5kX5MJ?|X1C@y)0$kFgL{k_A zW%Bh8ZXFRkDVR+w=%5v(I;=I~KPfm|CeldL2pSWQ#u2D%Og!qV52D7bw|o_-8avwN zsOl#jb+qWT#=f-1z3Ei@;kr4O#-AkrHdmc65#%dL`}{kXsguFC_B-r0q?qwz3`p2| ziFM;Ts}ucUPmdSOkl224Mt*}4V|?Q45)i-OqQa4WAcu}5ZmXFI$~CR1|3GkX@Hr;) zBfKQbySEhFo%G|PH%McV(@I3>+M9|@A+%t`AkX)IAh7b|TU}gqX!*X+po1b9w#$o& z@M&I`#KEs~yzjj&*`&e%fQ^|0-i}QhwjoppD~52fQS|??WdSuE{7RhsgN}vs?j5IM ze|i{1BefpcW-RbnwF9Ode(W!RjKQA-AijJGN*6F&2Vo)VAK?!L&>*|u2Z=llsmRlW zALmN{ogC9XX^r3YzK{Tu$QgO?OiyIhs)O{XJ%$HSF)yn|5( z1O(jP{Q0NKY8<)J0p;@G?_fd|M_nrl&fEpWtd+PN=`giMr2EabXa9&p%X$*>KD{j{DeJRPXO%oFuSa63T&M^Y``Dl zm{OIWy7(WZl)rjq0N$6R!(VY$7#jP9ufs*HMFM00JFoE?gl? zw1{+8=b1_i=@3IwA>iq!Ck4wkk+4xo@CN08wm0*X^dWPcTCAU5jX!bbLD?g5z{b?W zA0hc!tY6;KDHgk8)hc9xXg;qBpDed#aZ=#(yRcj&34p%GRsqldz`1QXY1%YHVr+=b z>(0tros7rC1GW;4UnNw!vC2`ts?vhWilImC&o(wTNk`K6 z+?lrb{%^02ccJGjfOa!bf)(4eq+Aoaj~XN8K3W3^I$(QY9ericMC=* z-?!bzA(|gLg51>tq;zp#5WCQZc0obH?N(M%djl8DQSOL8aWsHt9)vZtbC~u?n*SG# z$MK0glXr2vWIK6WXYY!c8tC6_PCt{(r zrDc7d&nKDYWsxyIbm}q)g#S18lBtJOz^PNGWST+UPaHqz>-lcQCN@kXx-n%-FQPBO zn!p0Z0Yil=fDdSSD%;bkPI!|Z4Y`*v(k13p#;0@9UXd_}#tBKx(mj7>AUZ+D#kX(Y zCJyB*AcwjV0zpfpD8?j~u#vIMWD|*Av)Lp}fNnje59#ZeU^F0^gSE}222d6_)t>-v zmdJ?^#fOq)db5eNU{y~>KE-=GhANNx>}Wtq`!EUIqZJq?tUa~};6MC{=Q$z6KWJ+o z^V?r?6f=_9P+RhHTK)`#vQo>I?s7X|PJuJS3XS6)cu&XB!G(x!tJ&Cm$E0?ssn8gK z+zB__tN$dg4^c-fUhRNA?bTpgGK=WOFjv^b?$+Vp0FC%ZT+8Fu6Lljt>w%79@9=p_ zQ-B*ddH6ik#(OoL%fOwh8-QWWyY0mdPT_k#ASh@Suo4iO7IaN<*?Kj$Yg3HPq1rNEl=#%?BEa5mxSeC{OF*n5rn_t<9Xd0hkfd6?>w1 zAYNlMcM6DCh?!jxwdtpae*dzO+)&};l#w`cR`=k+@?it`vQp6LG2q0$dH?bEzj8zy zHhdC_kez`Zq1QeL7AN#oMp_8;I*d^tbfcvpiTYP2w6(RFNsNxel3{cnb|A=lkH-rhU|3#0I zI1*yPkS#cRl#zV;?>^D+BZboK#h-UA;V)USqGD_=aj#yar0)>Yx0jCY%0qMzL*&`g z3ChYEz1X~fg31N3_6pHF8MLWu&{ODeNIky`G%jhL3=h`&(4o8DmF5HLWG(>`_B+v7 zn^=uL!(IXS>uAjUl6ajKqzC^#!9mzl@(rCn8bMYn=wEAJ->eXMe7ow={Psn3l$AU* zQ#YX9^F-~c)=YJ0%>Ko2>^=TeJs%ORw^&20B~u5|q$TPw!XmxFgmbq^e~P52Tg5nN zMuxMIw9lfymd-<(CmJhdD)95w$k;IPcPg6JPh`fc*Dqfh22Un)mP6n(cxmo@L1UtZ zhKBNxOLev2?U$!vW-R6N4H3(5F@wZb(sf)sPz2?yb;{Ny?Y)}rDwargtk&*xf9u>hceG;}$Y=!Q?8v2~6@G;FtcW4uF zxtIR<;}1z3=F#_X7(Hz1>hk;zLv);xx63A)3rAMq`V>6+{gF77AR5!nzg|?;)bzlu z)_{yS)w}uWNizv#nXD?F!RCo1LB?}zToJ4D zY}EVK5N9%{%`vGhX5-%ZIhN)ryxE`5MGC^AzQrh09+9ol268rKi5!Sg$ z>XG95`g)RI{zBXZLg|Arfkvb=DFZ0{0a#6D4C+~B%RQ$ z^j*RK&N2Nl!8vhFNDirRjm-OqW#d2b@Ru%J?#R(3wyU8u1Vyg?v%LQ2>wOpl>Sr5z zoI|-tERHW;ctK7>A+tC}jSDQ+bTF7L#Hrd_fKn(0BPKFlWG+KRh@3WQn6rY5FhYBE zJrN*Zyakym4EyIs`Y5=IJk)O*`c4!)d^8SSqCF__fde~&L@QF7P(BfvAxyYVm}qga ziAZTXsgEaiLpqNMeVqgO0de$^(e%|~HpL5(Vj@Gs{Q43MEYzIKk#+mF!SNWnzwhUF zQSkYYSQ-a=R&a(tyEyL`ndSiendF*b=6LbTbn_R8^!*CO$DFj=uBYk^{2FgwqJ$+GFIsh?1=xVgu+C>$75B;6tjxb3Nbk; zv=B*-hQQ~Ov4j-B$gv44_dGegw-w90Y-uHmH%$MBKo)#DpKfdQaWi9IqQwTQw0+RY zw!gWlgtFr{LJAGO)!RspBap#(1XCAThycDlW-*HT8OQC48T6OaFu9#U8Zsoz*Z1oN zM=3m}xW_AkM+YVSo^ZKCqXCr%;dLoER(~voPZo$MnVfX;TvabEBRG6Y62?A^)d+@% zwjd@Vf!z1Qy*o)RNKlRi+>jiX6^iogF}O-jPS8RoP|Nt3<5k_gofbh56AB?m1xS+D zDS)U?mmudeV8->V%esj>LzY))0FNOG#FFzH>XLv7FxJpH(-iby3LLjg@5JqAQL+Dj9Sj~jtdMs@TFpy=;F4@kK5JBCc6 zfCtJc!_=tgC7=ah=*vY*6LLaKVW}76{c+klh;N$+#K}~QS|k$+7jY#!tZ6Ptm5n5h zwX_de9Yj+fVDNr&O!pe)#h6V+nXy9<7eIdr(^{9dm)n?2?9iaSFBw~|jEIhj? zU^YY78MoT~2ecw6Op!Y|hYTuozDr4wG^O|k+7(>ssSEV*)Mq?-SEIy(D zZIf&WJkSF=U)nxq+WFT9^Ry-N zJag{H=R2IW&Tp;r@A>1j)_cir?`OZB*XzEo`?{|Ce%>!N)b3q4f9X65g}R`qAol=; z!u3a?a3;>4fmeikMrPoLxQo1wi>AG~i@UMYQEhzxe3OsQ_J7{MYwu*i*Gsp21uk;VLE*783Poy+{D<>d=F>A2%C%Eb?$$$( zl%-K`pNK8y=Cy&E4fC=aHYCo{>5Wnrf|)*GuaI61a_aO5Mo95On-P+4%WF=|&OeZa&MY)l)9{ONTl za!0YipXi#ms4#dzjP9yG^1IsIbMKHh#N5Zd2ER_3{r~^`|Cw!ZEOAF+68o%XXIf)s zI+AI^n@m<5It!m4Pc2PSQ9&WJrr{zPSyYw7;jUvC z6_@!6|Kja)PtG8p=9iK6^Ye3yxC>XXyQiC+}IQ7aGcOGzM?C4)a4nfMy;Yh$Y=@e^u6;umkc;w-66uFl{s@jGT_Y_mUOo&ON1$jh;rzD1cw!9V0`alwLjcXtOR7#uH- zjg3`QRXHyX-iVHlUR_@=c2|IF6J_sR4$ls{E08R$3BTU2j6p&h3H9hJtao3%Gw(>+ zCYd&h<$fH!Hr+foxbPCzEE=MU($v)S+~^SHeDsA9uKbo$GuVC1ldyr`W)60Gb+Um| zzk(nBAuuS&ad*{N;;yX`b@;3iGhDM`Qut0V@fAtQk?m@|a=WkA1H5`usnWh)mAgK^ zzOWA@GDn-5Wz{EnE(`q~)G;9;giqVzp3bzuJ$)FQA~}1u(E1hR-3WsldCOptX`-a3 zfS`H%JEhp`HlvlX7U{m!Xf*l^F)gb8V5P2$Bi-lwD>}hzuu%KjJ@$@dQHzt~BQ^1g z@7tTozYaWE=`$t!dmeZt63kpO$T@q^yJyUbSai*`Y0d!nGY=Q`WQ zTvxgMsv9{2gN^s@!GUR!j!hRSlcd5}wddn98#>p2zrXeN#<(u@e_X(2x?zG3cmL$u zbAmGJ!oD1Byh4jErX&&Du<~-zfPjF_#i5wpU5{aJBU|yq@ss0w5LxGli9gtn*RpYN zoLILH{LsnQ7a#N8G0@l7AFT1-;W471qLLpjvt8TTYU=8WY-UEMBqSub%yH{}4fWdk zH#s{iAAn2XvDtIa-m`|UcK5lzzrPDlMp{}LJ|Uszd%1I7JIks%IbeVsip3W@gy?r=P86GND{MWJ~t5;1Rv4P$H!X=^0l9DNR zLP&55Au{^&^zOCA@!*8Mdc}70W>R4x|FHGp(NVThoix3uU3+u_al^!eUmtDIw28Yi zmVdi5s&~e`8N?j?|Mlg3k`OU#xyXb*bkzN7`3(X~%=I57Tz>)%OvrvL#b)i#t)PE@zW)L~ zzlu$^A9EX(mt$y+V%5kzLwpHeE2k#YQH5lfK+@%}#?;i*XPqLJ{QP_fS^=xy*KWEm z6U(}|2%&D>x;1Y|LrG~S;a1bwC`V2~VcRu5HMM*#tF1MDjWOnE^y6B?RO@sUhi1O8 z(~JU>&+4~irVTjr;o)TX!1EU`Y-b^|E?>D4kSJ&o%@Il09C(hxvN!93X>&yB5%KzL z8}fpKtLsOTrm(Meqe-i)4qlso9osxiOigVKy0!E5zm1Nj!p1+yQb|lsV}`v*lk!H6 zl8p`DA1?afqY_n_&Cu-{uPs_(D@t|AHGKQJqp~GeVXNO2lez`9``3-oN3g}Y8Iawg zzA_E`XGuvdn!>0ySH_u1Nh4kIat5sbeC6b;+5E+`z{N5}tgm0+McSVm&=&tKg7q~+ z9E23)npBB-hspNh(8KHpL8%h%0uB?hVU(P=2l5S8{w10Ic%>LmDVAC3x-hn8O~N21 z`}&fwO)Il(L-2(n-8?|?LGt?RkG@R&`)4Kb$zk&Q;!p{pe^2H;L9b2A;i9919lST9 z_J(El<0SR7ZSi}v@kW39a%dp=zCP>4W)%en1`bBc`2URMqPTdmJ^+vKvvvWKg!}U0 zzz2$n22zRBAj*V+e0&IHq z?FHd*T60s=M`gC-@W?7s2!NA=MiuOInx{mResbee5qI|;mo6S^qJH$BWACkhP1BJw zb`n}26v*oJDKR!f#bxV|SQ{H%GJ868eWPb_KTm(i$MEwT-)Tn|l4O)&tTVeF?XEGLRd$(q@<*Rs;a8C zR`!FdNTz;Nj<-42xxcmG=;(-9O03-5nBzbnAC|l3=j3ofG-Bq9AdDQL&_^)K*eQ?g ztc-WT7JWYKvQLHEqJa1;>5}$t+o_mK^Zq+fz|5ojwZ5Z+XH-m@p8{h|(Q7@r=*`A5 z)t;;M_ZLANZ_wVxq*3rgWp>9w#mlyTz8XW)az8E(%)A#VU_U1L<2AiSa>uhG9a=Gm z%PX}9ya*t6rAfKW{|aJ}4>KFS=@#)BYQo}JO>$`HS;!4#Cno_2&mV1V;rRwt#qKMH zT6wziP_8_&i57OWFFZdHH(Ul7{QK9Eg_Sk&rt5Vst=xBjM50nM+}y9M`o8pFoGl;_ zJ6GyX)Z%#!EJrGe@(#B0%EzXL?dxWdpAdi$zad4Y&0`LEXD(bSbeVrJ=6A3pp-Wo{ zi)n0bM)qN-!~z5OXwYXM*LYtagKN>1l;@wc870Laf^)dpt3E$i#Ok}hnE@G0OeYXX zW9Sh8^}pGzldGWmHY|94sDuNspH*5q4N^j4_L6_%$9s`XP&)%4%^nm!xz%4_6d4&w z3O6t@f^q(xqa7K+DDf-zu^_uj!kfvR@bK_VNHt1c{RB9(waE}>0RSmO^wCywnthRu zPT>=rz4h7YwF4T?sx9vm@L)gKXIg$P~AqGqpvD^ zOurW0h1J`0Vd2iZbF}#Yv*n<4dY&BZtW;02u#m8+GnH)dNix{o=+Y2KY-(v2zMY~1 z)bIHC7>d}`++6&!&h6W{QBhHEuRl^c_tEUSZy9V6gA9o~|6A$a!{MXh$58eWg)pNZ zPJJs;fZwyYhSgC`2?g|!ZTM)Pi;bgUrOvvU)Z1b3aXnDyXy@1Tgj@fguD zBzd~G^iyhBqZT-E-V)ORtpMEp>P|cKMKOk*m_dxc*-%}MjYG_jLHg+T$k@_c`V!-7 zef4wi26edO(7vx|Z%hRbAh7^dV0goBw6X_6*d`nUF;%v^KGS*!DrX{~o1+A^{=mer~Ss@SWF!qsj`M zQ*UDLI5Cx?!c-j`3YR8VRwA2Bilk&bRxf*QV4n^ZKZS)5s;jF57m3d&@@NbtYfrfG zf`Ev6P`5{`!0e^y4!6=u>IcgTvz%h<#^tiws=xzW@gA#Vf`sG z=;N#by<)R-5W({%q2L$#IycfIyhBx zcsWDJuGC4WaS8;l5kr4i$K?F8EnPm~TUGQK{fam5+_ zHoBSMcT$5fVyUn8T-}}St|$_(o%#}eb#ifNv!HG9LfO3thSnFP(jL90wY9Y#-rg|@ z2@0#i;gTJ2^nro+=A9{uX_B6(1b$;&1o;;Si|`2uaNh74NdtcQL%pHm()s`tJuoDs z7wW-q7!N1sOH!G`H-m#Zz|OteJn}C=Sy&n_FPEzOGis2la{~n&4fw_@2JvX9qbFG_ zo}iqldG%YMqS?02!Y!RWch30ua8Gi3(6k!pa^!dV$Q*r>1uGBob zaE!Cd-`9)9|)KV54ZIyoBHe${2_1&@v#Q2`Borjb>kqjsY>mF)}hj!bG>+ z&Ue6dZ>fB|C0Ug3<;$0cfXkZ;1CfV&8@*NTE6M#GP(}@ijGsKYOm+R?1bnss5bo|^ z-{KLq-|i%#TDo)x++?~FYez-YyS^4M`~I#D zZgXYa9lC*?`oqRsf-x#*t!Og&W>t!dpgF?zhl`-L4%Yes4V&-JqleRjgE7Y3+~1WM z`N9hu#d7&Fia+KT2th%s-=F`N!(>0op&l-`pUWwzeGl+eZa_#z=B=a>*qJ)nM3Zr! z)%zZ+`)yOy(q;8D33P=)%$F)m;?sdSDp79(w~f`+3S%2RxcXqJHBEdz-P;PtL=aS; zH8Q^28i)c5dCQ~MzwJV=oR9a9)h*l&G|U;V5MkW4uxrSr+6 z_GPh0M?2$y;u;w6&_Ele*=46Bb82Q0Lk5^Y#R38>b7w6q)GWTpbh4SbgHgKJWCUZz z2*N#EDUQ2!d9(_o`UI4Eka@kp3IJ06{wd}1-dTPM8V5d}Zjt8sqyH#5b?q=7vXg?5 zu>(j!f`mIS!nuJ|)XZbRRLF$CZT{_f0kK>Jf-KE%|5+F{kCk^vp>YF}^uPj)ca}#P zBt71=#&9@qSK=f?#kYX(INY6%)TPyxa|((#5*gS{mKv6RP2#lk7NwN+uP2ib0^uF( zGbOjqo2`X`>FMbPuwTU7ml*(XGC^VhO20Zs!9I93?c_nmZ32i#6~JQ8tv+qf$sn53 zGVXZ{4Er-U29Q|%85tR1JpdE1HTVN7n43#Sn*+fgaqf}|3=S>^h3t}-Fi^WwPIMIq{mI|u_9GMppo-v)-DMj@zTmEsR&l8P1$|5 z4WKU1NL%4h!c~)%l%B`&7@zn#_sqGEm%7VEKYrT~9va%B>giG6oq-LEq%kaX7m7|i zb){N(q&8j+;nI?utSGPvaw1nCqi^t6msYGRO^#!5l{{ThBQ~#m0>azVxn)A@U-XOr zye~P9=L*`-V_Dq6wG=M+2uL6BS~hTSg71L?g5xZa2jz^MmNvAYfRFK}%Vl=)wwZ-$z)gCOfUcT&KUoXq#w`&Xq$wWfh8LI+L zleo`rVP39!y7a?bohW$gFsm6E83u2-?AAg*XmYu`etNJl7WVXhRJvHe(p)NBEr}EzEFVxV841b=&CZv9~vWm z;3_^oJ_3ATQnr#4oR{r+uaSXE$q7V}tx8NDR}6jZ!>eB*3zZTT8WHiMq2UE$$IKBB z5Rfr4`nD~A_jLv$d6;#EmqvblOPJZBD=XG_HQ+H2@O@_@DuK4l_rHF!s|mGLx~rq@ zTBFVP0`T0a`c+;3b_W32&@8igY}KFJs%_-k1odFB4qdmD(j|TH3XT)uB$e(fouOo` zkcDbkf-5X6kF(^?>C`d#?VppB0)}Wt^GN|!2gd{)MKOx__?e*1AV1;{L{1NoBsge< zkTPRiInqCXDB9iIyAKW#>V1Bz!UmWNKqXqi$3;L7RBox}R~8m0iK(e42isrg0szgAOr{T?$pVIw`V+jZeW57=Z*7d6t_eW#nMFs|+HfvANj)~{cOij(n zCx*j!_Sf6^9WGZG>`;jN{y7{NmdMMsH~QN%{bPRbUgVgE-QCh>y}{&Hl~(uW(ltT- zf|Ux6&{a-O&QVY6f&8YvzF4?lN1#9J*p6h+TcM!}S&AxwZc9%#%o9XOnY>!Y$X-f` z`4CM2KwW$I`6AeVWwCw0Bi-HIzc)14K80)qnnQN!Qqt^=*;Z3&?zpc4q@*Q_`-kiQ zFuVhYA4WzyiWjua>xM9NYdhm;3No^9^!C-az{vRgFq<6sU)^N&1$q&Fw?!Q&_<@j! zNBJww)MQZ%tXG?=BP%KrrcWBh#a)Qr^;tdr^Yxj_(jTgF>!f~g&*sN!Bwi4bvO`sZ zJ@2VQqi^52g8}1giPo_*8Ym1d9v&ht5$1aR`oG}iQOLUWcEK)wIB(<}i%gmj4+Dr# z1^~5Nm_GR9SJjzxzP2#%8D<98WRiJ1{-v%r^4kmg{P|j1RjXATv+pJug3^E%6NqRN z6B9EKEfOrz&8xs*Ca0#pr-(Zbmf6z7Ha`Vq05ghkzSDQDi3W-aDe#Xoh{5rSNh%4E zniL#rgRDM~tuL*y%afBCGhIWEiKqWGDa@!fHZ=i*SGTd@_8WMermCQDSwJ8f=<{T3 zn_G`v&wB#IOa2~sZkt5jjzts=+D*E47uRb$&~dtb4coaqzC7OfJwp#Q+X>7$4fxKf zTCrve3sqPyL)T%p7ZHgi=X5@V3GbRa7BiP-3jSpE<}c;1w!{5nlMo5)d#iUW`-yc+ zi{06xHLu}NCIb&2lE8-qX8WXe%b^f671(5Ax5MrfTj>v?kU`}kDT(ut+bCMtEP-W`3v~kl@NMX)=2<-!6ovKH_+?$&=w$r-UBW!uGmqRd9Adxv`+r$ zf$9tiUGO*fgt+g%5DpGbg<&1t*HAH@2L9#)`Mckr6IgA6{fFxN`W}he!k)Nra!zb_rB>g)u(ZNeuHIIUNax#J+PC|@tTrG5b&^oPqnt&?mtwg8xoZ9A``8D3qm{Qz-Xm94Ge9Ic zroJW00sBgPxvRH#tVhA_6C$43Xja$3^Iv2P5x3=#9ner=RX}Ha1@~_@+RrajJiNN(jbarXfX*W9~T)orf9Xfgom_w z?ktWH71Ual?HjndPFh5@e>hz-!^HYi%OUdPeWLZ58&zoe;;>V9zzN07ygPpKPK)R7 zK-XALXr?9-G|_il{^9GD$sQlVwlSohcA_K{)q=@bC#IUd3TSIr1+l8howhGiiD{p7 zZrYCOmiS)vKCSviF>`4zCZ2fAQgv*{E`B_Juiva zgjQ8aK+>3kPvo;Z83H1<%dPXjdo|EX8m#sd^jx3GfV2Upc<_c3TWch{=de$YcQQX>vCIVEKyh!D@ImmI}X z=5QSwDz2nRtG;)Z_kquMwj1lAXn6G%fVg-r7BwSCU24@g1^#9^W90v|9P|?F>STbU zT7aq&tuZ$-VF812o(UmpIhOZ#mqZh!8TA>qNw_fq4St76D}Y@+O$FmLt5ak`0G@+6 zgeO=Ac>dtqp`Jf~{;P)f+O-z9MK5rkzm1QNZ-cID{i6iYobUdRQhzxA;zbk_lN-@J ze1{4AZmZGsEQ6!s@P+;jum0o>Z$ zIu`&d!N=#xnB-s~j#7M?yAaDWAdL({mKT#nY)wEv976XD^kg#7v|r`+MksD-B0NHp z8Spz0uMTk}c?~Kxpw#{;wYC_afHvlU0P)~g&LvD$RkTd2CtNKTN)CMCG&q?b!RoBu z=#+THERzOiz;LJMY^?U*@j4mkDSa@k@d6jK#AnY5G|wU}1`^eLrIsioWA*p|@?xf+ zJ2+$M(~8#rxO!HSfFw_7SO4We)d4|&*gMZA{%U!gr267lxOuk{o%Xo8GTRK}I}kHY z))0E!kZT4J3^+N$OBh(){Are(ff1zfiNs~$OlvFb|I9W(KR}Vc@4;nhCKlE!SDPSF zN0|NtQ2rcg{?7?A+-z63k=-i4hh$|7w8mOfRwt)TrS1FMYu7?YI8T9QBw)tOWAVmW zq8H9{U}3b3-bW0^7RKFa(!mNca*B?jy1k8I36>~{Q=pn5dH4l?q5qo^`c{n>vXbS~ zm0&K!^L=`~m-C>>Cv-;Z6m-^^YxmAv*A9L`xWxEU0jq(4$U5JH2TvAt#N66d@Z}i- zPD|8rP%{1DK9@=wv3<4iilv-D$SDfhu?PzP}xF(B?qZq*-{ zjxKX&V|je%^u}C&yb7rCHtxO*7$2c%iWr>v8;WviY(*4LM*H-=2WlG&C zSsvd*aCmBy7;k?&NL{)Jt~7Lq#~*nqjxR(prrsnVOEtslk@r2e=+e{O@3rp1g%0%k zoc20L=Pl$*#iYXJ!zII=duRc09hIyHz?jy>%BRF2Yj2!y{P8_A@;k;^qgt%`5G-2q zR>M;e|1`Zqs`=@*4(;ZG1>9=!DPB7&G2TqjtMT+6mLQK>Jl*A#+dh)jyYGjNyknb8 z>OABY6;Ho3XnC|FC{4np5SG0CpErK*&d{h7dUfgPih|stdI{A0M$X?~2nb1^S5?)p zk`>8-_ZS-5u)nS>=EQ~s6j=<5~93r2KVYj4Xoxb7JC=*CT5F@ihRIDL9!NnbXajqvvh;EE*@4J^#DhtcqLf@Xu> zF?1QBfB8!aO6y!`sK2oFue5{x=izt8=jE0o8jj09Lzfrv4Z#vrNs~+j0e(r?su4KZ z%l{QR1?SG6XSsQEKW>0Q(3}`N&a!(73JTN%w}Fysy9f!{+e!N!4?*J1*g)Qn6hBoS z9)K?SC%>cpx7Y4J2cL~;rD|lyVzAJdm`QSQTauSoP4Qi*0?FhGX{mL?SdB(W7Jy;v z5CBlMp{y(lu@=Ayo%lw`%m%s;tjQ171g~Dc#LOpr%aN3lTHD-g54Mz-n^E)hZWzHh zZ0EB3h91&{EaBD~`uIqKuZR#N#8Un*DbUQy!V(%5#v&y2JK}y=XiKVsY7iCIue7Sl z+Zu0e72`=#wK+aIt4VBAbG81|#O8f28#OS&*bR zUH-~KnL~ypetl4Mi_n#mTb9eXjV0%s{RuWn)JT&FZLsmmWv85q3Ncv0%h#`ARG(95zpq-3Uzzaxb`S8&WP{8HlR~-X1RvurhD)QHUQP=QwkEL z&&vM8=15sZ$l@@pWfbYELBe}5p&7!c1ZjMRWiL>%~Tr zED^Fu?#<||t#yB)60$vS(K#q_iL5yT>29m1QX2ofrkiTg23O-&3KT@gnDUyKi_ zAqr)l$DXSjFUoA8Cx7}X0y+wD7zdnS;()-wuf@&Gq83MCp+}zyU>~4QB)iaGXp9Fa zIhPKlg$$#Fz;E9w&BA$HuG8eswY;P7e$uC)yYmK5+)v2Af{x!X5 zvB%n!%Tqy%&JVx|5g`JuMRY=f<)^W8-ws!lTULuuM0KUhsB37vS=vhywzeE9{FXz*^veF@;&Bcw9*{dw4BrnNO> zQw3O>+5BNTMDFfg+&AEq!21yGZ`;ggSPjhlfYCq@y0&m*8(@CKfE%Fa32GX&{8ga8 znK1JN*cAdlii{i1K-=Z5I2AdWBmdDs!|G(AUrnWtyi*lJ45|#~Uo!55tOHrQ0gew? zSeCy(M=kAwFAauHJEK7fYy>hiQdn5%G7Hm2tm5M02A==xr?u-K(m2q#K1KXZw25@N z&cssrBng@-T!G}RXX~s`1#&X(~cd-w~TzZs7R$YyKRl^VJ^;Q zyf&3buWZDD`{vC{q@<*{`F2`+k?-DJexI3X@7V!7*hMf3hGOg_n8>0=vh0l#BA^i4VSm zE_kTVyRXPp<9#4fDb9l~fq^lJts{x%uPErMq=JW~k)y>UkQ5^Vb~?h2xx67}vSDTj znXZBPKo|;yhQAsFBMLOY^)mT-j1ygF-pbRUEB|XWlK5(y-sm8F(?vk9gNzQ30b2Yob&Oy5Ct(Akky zCqk794Po|6AYr`e0G)dZ28MQZnWMM!E37Qh^d8>H5?-6jw!B+VczBv$;Z%b`0`8*q%&opicWmi%Ztp(U~6d`5N@W#-c*a_(toTHHap*pm9^E!wv05E2}Rx z4L}~RHAj4_*}1)eH7CEu(s}jXRexx5A-6BNJMrQzpAkUJHox(A{P*wQJLxZ^hbq`n z(^|S6czO882~jypi<^@xq)YoI2wIT9j!VKk81h-lYZ~=q#xFy~*o=&HzMdT!y&^UU z$gJSjcEc0}(|FgwSOzuv-D!#C;Xtb*g|JYttejK$?}r|HPb=n_Jf_Y;M9;mW zt_SsWXg$Tj!s2fKM`-siYsqlAqv(c8YEQ=CBMNF!ndV55toQT6*7uvKxiqE+Hi|siI<` zuY^t>0w+$Fkn$q-j>gdcy?n+aE{C4KzXT*Ci#K2nGPu_GyJ$kd3f=2PGs*zlDFIo$lJh z79S?+Gs9(xZ8f35r%o>X2QCmWV-}Wn`P5G;id-9O_t!aC5)q-NKvMDq=Wvbia0NZTvrR?T%Kh*3y@q~t z4<1bH&2=oppj3MnQa~k?6$7$0uL$?~*cH`V7ksqcfP@@E>ipp2Pim{*iB^AdfvA;B z2|~_BV&Qjd$_&{hD^MDZk1dITeK3B=dY+TBw>2GkXZpuQN;6;|jh;x2XG`u#c~-V< zP@SNa1$$Q%=eij* zCL>^y6Q-n*7MsnG!0;M0$M?6Fl%dlLtydT5AtWTwO5EjUiTGDg_oO-E>)h5t!?68} z@P^|v)KMv&#^@tTF0EHkfFhyMSme5(1>JEas0Tyk_ROdkXD*oZyq9lJm57IF6o>U0 z#Xsft_H&=*8+#VVNq0u@c=W!nO(S90Xm*3Rq0s%}&{c4?5%(CGw0%xMB;dVmbJK0{ zY(31rWrJ}JothbFS=Zz(z--xnJH>u}kLfByXCBb--EIheLR;u@Y`TB{_;hCD8yd^6uTeYi8OIQ7mWInL$y%@HkHkmW_1Yz<`EHhv5jQ z*%x7Y_-~!fkNNreXL?%Le|O}}hDDsC2@{5^d^avguKN3$l9TO;l1Q9!0MYf;W+-~9 zDcpH&O5Pl1H((6!F_>nc<6Kt8QsK;?sQ4Wo9wOcjG4-Vax> zo1TAGb}TQSc%sXVB>7C8c;8L`MAe0}FVEKh>w~F~Xql*y+dK9g^kC6O-zOx6kx_?^ zFb$z+?-BGwR2}5FjiO@rdjbZDGvB`PyXAtDK!%Y(tOSfI6VvLD1(Ya$vrq&sFy08d z9Lp=6PZ5jSuJ&|xZa4b&+>J<4j;#Sn>5(cd;@_rM>Uw_)kHJ@*!cO^{xA-9> zFv48uU5;F*RTAkFI}s5OL3PBw8vj#@5Ecb2G9l*ldcOAx8-9|oV7hj;$$$gG<&n%r z`At!?KQJT%Dy;bzF^ez9*GmS1?1IF)bvEh$JhZw!$PZA z%vgG8C~GhG6S7uE-m3;C-&ZJhmj>-0?@QO6kWj%SmC=V-&OHh;3j__Fh#UA5&<@hE z9FMY2ijPNRj{FRD*T`RTzC1aasw#B4DtE8pEhqMQ7Yj@0ZNS2rvr%)bo@Sk_lKZ2X za!q&d*MCBxrbS*)kMXU{)+gd69;X%5oSFWSI9h9W=^`u3see8A$V7=Hvp?ef`iGy~ z(qC!aY1|E~R)ixiNd9=vL9GFokjQj@;B95gZlCzdnAZKsP&+^2oRQU+y%CduTQ4p{ z@_cy(&4UbB@FM$RmxGl`_BZ+*m}$8hK&T{LzdTk&*Jnd1y(}&HV3N#j=TFC-r%WvH zkJ8Eq-EL}no%%POn^&IF!m(FxMh^k5Pqo7VDwIjMu2HHV?NS;Wg^;be7vm4T2kugFcBHl#Rcs;JQy6E49De`HDqKfWvL!&Xz3C6>k z!;_7zs`u_|ztz=?PTKuYXZo325(;m4U_3|Hg%uU&Ew&9Sp73sRvvex&*h2|b5E(ig zFkjv~WIDsmEURzAuod=udS?zj7ZaC0^5)Q>mY7ru|4wlIN9AX;!q2S>OPjU!`xl7n zcRQxDPvm{KQ^(vJ4(QHQpGXG=-}dp*MZ7CAD3sAnod)8~MB#>)H`_GapDX^9KK4-ApdBBNmU0Wul78ia(uF zKD23G=OdU@y?x_(yR$A-uYT_+IC0nu85;E#<@s5LoU&ir{#r}QJu%;TArzz$Oo7dR zT0Pu&taBd-gn}tbP}cOUoSmI|JJUY*QbXluSJXpJogl?L4oCFMgWgmc#tSRec$%M* zh;GPi5VxmzZdkLk)n`T~jehS)`WUNsfs4W~y`GE9=*rr|XX{loPqpgeE$^4fYdwOT z79XuEr6~+Gd%yd^W6bbKgxPjK^dW1k8i|3eqP=0v#X17Q|_2pv16BI5FQR;OM>t{Dz`pWM6! z4<9|wCg8{0qzMddRX>>DuK<=}hIP}jQoBr`| z8AJFZB8Xk}_(*DM+IWyZf&ZHi6FF`=nxrE+86F?FEcE*)L0fu?4b^$i&IfrK!shM? zs(rT~31WV*L?_Q5=iPv_zjd#ZF{5u$%Ozzvs&4A|y-V#cZcnRoGSbJHJbNX&lf(8I zCi1lW^(x0dZRsuWklv z&FU6a4cNhFhK^l5tfNDm0{jXw2H}D>;G4-prXo_>q6`8 zwPHMj$GYaWQ8vT49`j}W+Y4;tp=Zlj!9Hf+7=6*~6&U2`LZy-$; z4CzW0Y-Wv_l+G-dotEQYB0-7SZiPz<3x7^W0$IR#0hbqoE82M4;` zt6Kx+))UVOu;SF=L4G@%rq*3~54j$`?u}RL^>VX5!%bfwJHwSofizV=C|;&}ck9Cx z_k&zcpUOSW-~uK!p9j_A8{26()kpQiyPiquN4=jqS{bh@C!M29sB%oXNdP15Y7F4A zXWkWE5gDuKQ8`P>B$R%#%lg$m9SrQN0U33~v(p{Scp9Y|kIc){RZHJlB~qk>&RnWQ zbK$gK^!0C~vk|Ke7*qBt0T4iCG~G`8?L{v9!a7UBzMtD;|JmveXtk0yQNauJXI5$~ zI%)l8W0TWk-k@0T%6f>|3_5JsVQ10YpN0?Z8ui1z_4dUS8Jp5+piyxWjIXY-VB(g? zfzC$hiFxmFck%h81se&QxwqS`d(X{nh@_V+V_bg|=PN!SUmQ<&JC0F@Vvk*>f4p|^ z)$;zvcwnGj`t`?Yz22U7$OHDdX=C5A`DR?eyhqW^K)U&C6}~n z2agG;*dI=`F&g1^*J!!3?8~qEEX{p$n5LvIX@YqTF9a5>rk2%96|0nWoBw?x0*t!@t*5qq6dM{F5O3Zzhq3`@7 z)6tTJ-Ki+PYZIFOs}9bSSdKJ)4p$gGc#UbZNfrS+&zxxN5jlX@?40mPSb$CtO4}LMrXdPn(!KxRm3^mi0&g>5= zCMqRGMMo!LDFp@^A5?odir9@<#?#6dCmYlH)U9}5SIupN0$OxQiz(-jmhgbdOylq6 z_Ysvn7(o~hWJfPAuTF)VFO1XMo7t`J3>cYD5t=^`F$)zBcVC@&Wi&i0#j_{jP3^Vm z-*@Kz)Mnq zj&8PY-w1`!e_3Li@ z-#AVsj1DSP#-Vzwgju_r%|Md{4%Ce1|pz|hcCae3T9 z=nro%kG6rOD&Ud|I%Q&I#oim9qB`6Omvc(sYSpH#wG!)N*EXF^=UQ{wnptAEFZr~? zbcyO&r^Jfv{IAtk4)cNeJEY&XmsUGO%{{dooL{`9+?|d8TAZsJ+cY|AQ!`RK%An~n z`CQz4Z!)AqtL3@pd4alKANKOJSLMl~2(%;k%Wq=bkI%+pLP(O1+J_+QSS+ zCC($yDE(LeM?!|3J$PbbBH7Ry6b(Ek@`tH8lDX?=x4gh;aYNhZo0#h>xxOJEezPUT zKkFQm_NE*25Hqwhga<*IneX^W{?0ZnYsu5WDYbfP2=guG-(5E?b%y}EmCLJ7{IE4$ zXgD!_Nw0QV=kn-}${hxBwTI;Ow+kw32K$}qg`ZnFY_C85)A>w!rKtv!;v;_WoRX}S z1+eE*@GY35PY|_dsyp82f=p3zuLfJ~KbD^z7mTp{m*1Cc*b9E2j7*&iY1GJs$D-p+ zpYZ@dvbDKA8P25gYci7Cc*^OzKcaY^+M2E$9!+LOKIvrGJ#w!w54Fjnvtdk&m?O>@t=I>pDYc1P;-enc&hI%SbMMFVJSM8sQQr^DQyK$NBk=r zXB83YN4**x9OV8SpztGCsV zE1?%Du^6%&Ctwc2Yi?`e3mJdvh+V{f8#SYb$^9#oSVz0(~mJqA5mEwO}}4m z=`~he%FJC|5WlCwl#;BXp2HymOw~Hhc~e|3OpG?{qr@999KV7GmNZ$MRf3% zsXtG$Z4cKf#p1qAU1Q+H<0p=w8$Nq*%rjLfPI2s)<8(?D9upe_${RLpNI22e-JuAnE<4 zu%O}Zp{50Vn}&3uOy+sYvW}Vert1Y_+c7rI@sB9TG4rE#Z+-_|4NI9DYV0uh(-`kV_!P0xe)+Ubl9QxuvMMTXWj(g$Up*kp8vH`2#QtK4*)j#SQSS($;ny#(#va zX)QBI(QM5$YK9oFXyXJlQ~f`?kQ&QGY=QSUN(K(#K+XlG02*zJfb7DLvVmSOM{kx#TYE-~OH( zmz!4j)sHsc+DcA13#U&{$1zVYWY||Kxb+!1uT54{e(hV*vU#)N+jdz*EKc#|g#CYr~{8he0R6hr|X2+Wv6L_8rTPJnpX*s|C zQR3OZx>@~ck87E4M1O=97;b@(k30pqeF@9sU_KUwZ)kV+S|~FAL*GxgB~+WPb)b&p z^bQ?$mdVfWt`ddr!z+fwwHeZOx-T%=WKgT!y#1IP+irLj{h06CHJ&{@=c?*U!V~58 zmr4-2227Q+pVIJPOE{^+=EvILv|IQixs(^=vQai>v}cS~_LIUWxCA_x+-bSSnx9TF zv)QB1Hx#Z8niit#5-;mlO*f`0sRjXWPm@{0f6GUzE^|Rqk**-bti3Z8+jR}?*D{wH ziOAWnWxXxaX(7VR{TjYXuC?PkH8l;CWQ19~6T})6#Un3$Kkf8bJY()>8ahi)I9)s` zoU7g5r5eM|@5Vjito~!%qL&>WTygHGoo(y=sj1nqG|Xn9Q+ocAsM>HA9}8}@Z)CUc zkmjM^lsl@jZ}A5QkMxxS3-#%N`5iQ!Qb(6n@%Er@wWQ?PFosuK zVa$DBpar_RP>>jN7%=qF`|m}YG2)({XYfCNaEc>jQcymgn(i2tyD7reKuFcU;gva1 z^u&0-bN=^!E_L$BADi(f@{N-qUR> z;?F^>;Fhmeeqaa_uDyNeDF zLeiv@Fw?Nt!UO2TDWVO}><9eonG`CL!%?beTikcbuX%m`tZN=hZdKizQ3J0Epa0G# z4!OT3je5^Y^W@>Cr}&^G>OoBlv&&1(`_djBBeN5=$rUc=l;VUa>Wt7qO0fb|CqHdOX1YubvVM-N$K?*kWGvarR8tW68~ni$i!d zUWr{Y$x}bwea9yniX}KFjh@SNowS1RMlfEnC~HtuhphDx*v=zCTg@W(D~GG94_jE- zc+iC8>-V#!sN%Q-T&+hdL|_E1u+U~`<$vMIpjyoO|L%2SR zv^tqNMI{4jX}SAs*>|to=lO-R_a-}Re!uS>!o`9Ktn?R@Rc+~CQn1akdTn$Cu!|nOghQZodAF9ol@YIhOkwOG8e}G^n)vV<8GX z)!+DJQF`4+dN4_P@(hgJ>)W&)e=YQ4oHh-)m$myr{WD`G0kG-tkzz z|KFz&Ss8__ND(r#vKm(Q$jT;r&&ytg5JHj>NkVqA*CjilLNYFUq--B9`?}xf=kxvD z-|rv4-~G5Bzy9%uT;n{C^LW3H<9NNEuS6zLL@~T>xx{2-{7GJ+G$>;;qchoGf?ri! z?%0MiZQI^j`2q?QK&JHstRZA7FVJIE_84CnI6{JJD3qbQC9ph_Bhy6=m;8o^vJQ3$ z-%#()I=Cf9GZ3Y$^RjWHqJY&0llh=+e~Ye0qd>r)HL(X9tCx#Jn6|T z_~6gVml~edWGgE2Zpb`n$Uh*8o84!=oMakguLWAUMBqfS4c* z1dy)-a;$q%se=V{Mqd@8rH%xcq@U9@_ESB(ANL=-xhSuu#{_V^nfWbX&G^Coe9t0F zGZvFtw;6ks>c8_vzJ1EKEz{|vtGD%0^V2ue*~j8OGxS)Emh2k6raage&wQ@qg%8eB zaHlE4mLp!}PMK07J7QA;L<2!6oF;(}0nx+&bEngz0jlRbvau}?@eB8{W zB~}P#K;-+yuETpm?k`;-nwMp8r>e=)6#J&rQC@w|X+1S2N6g@aLW#$9 zjCSm!VDjz6%+9vclm4XDE+R%nb5_zll@4cf2#wqXm)T7gQ8R_vS+jRO5hBB36n%{b z-5_G~g&yRw&I!++oePNKs4=Ivi8W3WBC_g4r|?`LHl!R7d3$&myFd3TLdxvW&zQFc zYc_qf|FH}+F&#lSJsFUrl*s!&ROv#Y)@f1KNYqqBVRqe?(Rv56bgG^HoGI;DAecwg z!hF~_X%VAz!SgeLfVen)D8lPn5EK-wwi5fd-?A&g);`k%%X`7#FHhd3e#6)3VBcA) z_Y|vr^)-`Av5L*FLkCu!YaOf7=k{Z0!=wYge~uy-rt@?e;)> z`lc;7?@2y4yzF&-s`Dwz$qZ_~+aqH4)YVP~9HW)i=AV<8{~P0@cY%(s3kD(yIeF8< zA4DPzmTK&?%vJ&OWo^%5GdOm9^n%h-Z8UPD+jHKp0)LK33LS4cZg0>y!)!9rL1=0D z#jttA2V37zRHVDcDkLCPVeq2+`~+1%6eqhO+JXiR$TOd{ zi5^ff;(N|^!H?*em`|1!0swwOP-h5L0W@2`zUPt3$Iw>v(Y}~i$V+|g?f7eJmI@lP zZrGm{Ji9hmkv|trU!HI~=aGve|4_G*Cv{f@sl7EE{lPkM+|}0Ph<$f{2A@YiT{uEa z&2a$5+|o8RnB5oR{BF@!B(2%A{wgS<>7z`DY{1nnwShh@_8hf3ma;t9XJ+Htv~vMm zqzj>JN<^J47NN97jJ$$5Jpzo4-*t=@MwYZLg= z17xt5J(C+VhV9Ji~w#{ z;C^16ac9d@qI2%P*&!}`uL#VqF~@&HpUth&51*|~DdP#tvA$k8 z&*-@3dhkurZC}XO_Z{`oqO@F|)0x+PX^X0MB4Ho)dnbSF9ALr1VZLT;H#NyCOcu9F zgYOyFt060rs#Whn$jg!{@X0i+UdMO!Bk-Jb4U3S7zYpu7hUkQ1y7OJKto{MCS23&D{`C?CbyE^&(E z?#mmiI8Wz&O%?x&#bf41p||))LBF;!pIjai@?aDlwzx(Njrxu^RZq$17b2XugAT6E z_nc;OJe7>9T*wb7l&BLmTisKJ<(UWDKN~%jk;4vr%Uhj{i<9+ugyGbicB1LY)(T;c z+~jvJ3f1jAd{3y`P~zzG3s3f#Ktl?DDmWveHCDX5Tj|#%MwJ+!>xA)RP<(ux!`5h9 zcH)#|i^&{Kok@L25uv8XGhtgW@Kko>s4)ufZ*SLVA1>Eru4W}9FDPnXa+P^k^{R8s zcI3oytHzVlxIt$s!!`Zh^w%6iGfFB&z$6}Rk%G~uxtT~#B)q3#e zD=D^7^JH7PDDt84B0EK22ciE?cvHZ2sl7|jX31p}=Gx0B2fY+@B2R>#!zKpYYjzwM zcz((|@v3Ip@rk(Wf+4?AmtCW2leA;9IW@)FfokdEJ(#7PR+yYfOijf=SL( zs4JSr&;Xx`Q~wP?v4O=2YpK3$ip#(QK>_-PU|#ZOCv;8=<*1|_c;zmheu;nat{Zmo ziy)^p?X^=;@f;OfzqD;u(p!`6swh>bA0{mBboVx>P337c$<$1A%webcMDWdg@mc)Z zc~#URWKRS*6P_sjXs8eTo^Tj4zrWv9yD?|ixOVtdqha?=K*<^$!mG5ic;O;(lZ+}H zkNC_Y*PDfFGJa2t@;Z+6zxJ_{Y8KJcw4AtgqOR^(T4YiyYU1d%04)w^V9+h50h3am zpSnjY?MYr26@d_G#Y?2+k7nIz$t96F%ql*I+{YZn$t2!GD+V3bEPtaCEPGNAz%^b- z_?~;G8pa^}rO8_*CA^a|dw#sB@@0i1(P8?!u!d@+`ILE9>Fx~^N1r^0ocA@2iw8TJ zwF1xioMl3muXy^s)Hm%pIC#<>@@M#ZD02qc*3i#>DGeT3=Dlc`*K8JZh3y}_FKlX~ zNeuaCeHobhmcyVNoq5I1i2D?m0Y_HoVe?YL*0I1uDcfzAR67c2@+$3yoe`(FfN7V6qWmYu>C9V_5Vr%@R;ZEDLNUxG_DP8ZS6higU*URkb z7t=#aOBc6Aoz1_{Z|n@eaAubn9mZvN#|&Al>Wp7I)}u}xSg@K1d&L{n%(zWNk#89m zvrDes-h*sBWghcC8M^OzVH#R5ajBwVUTj|o6}Dbj+-yIHSe)V(369#U@LL3*Nd3eQ zA7@EadcaP#eR6XE7Nn{M0;JrR*$tuB6huo0aC&TpbJlXq`QUJSzN)wVM@9&!DkyDR zLLO10$=r7-HRn3ZeVoU(LzTyCHNDC18{?H;n|B{*v(jbBb&M;WFq=IwD#f7oKS)%U zJrE(L5ba$Yh*D&Ycy`Xy1YJ}Df(yxx_FGs}eFLGXabB*EQJwt#(@|k}ah@Mim25nB z55?@5Z`G+q;{W+^`$OFw(!wA2m4{`*6|+=oMPA|^bGzl}nDFWbzcC!`{Nf~*{E|&j z)lo9;>XnSQDks`HgJunCjK06vJXfZ5;}|mzaV}$TVLqiIAZ(rWn+(J@rAXnY&UlIZ zXxwDEGXBM8Im``;@T?aw$Xrwm=)p7?D6~qDf9LAf&RW@i@8PM&muFe@xmXRdN<|bl zRd;NOH!16uMbxt+)nAzd+9c7YCPXF(?9wxB_9oqU`&+HG?uKUkR6V8%vWs^H&jk7& z>~9wvJWEh%p?K{*7bLaQ*%dgPPY2uUyA)dO*N`E}R7c|1MNwdiaSD=z^J$IU==s#q zlnT+H^J~Ynp?GC@Sp{1J$nX#TcCg&J#dMQE_JmkI_D(9FjiCcKEtfeT$@by8W?7bD zR;JU{M;Fg>%o;ZzvL)IEaJVgm%Nl53qumwhZK+Lt&>?bL?!$}AQ!TEka5LRLQhpsK z%;40Byl!N^XPYrfw}Br^ah-kHlEv*_$M7Nb_1>zta7(3(Pb?ZI8kN*UIGvyKoY8L~ zHwyxx=G{j`i+jyQp#K`#;4w2L$$o;a^ZeR8?*4;UD1d@jzD95+|N390*zl|1+j0MR zh{b5ql~0tL3*(jEdwR4fX}571PefVw!)ia(Jmd4V9qbe(qbQnE_Er>yjUgCiIO3yN zlyRoljclAvA;oDbofixoA~6i9e?9Q%;)N~rp8 zJyKDc4bGusG6(fs&1Vt)!$jYz6!aYkMyA_IevOmIGli{=ml^&kqFBK=#&0&fe|T?i zIp3-H*^_w(6P5vujHqJOakE5=7XNYqOSbbr8gJE+Hu+8`>I@als5}WFW()2h*}Cr4 zt4k<1zl+>G4=WmvvG6`3K|$O@w-@)hTIhePw>BMdkLfww?LF0`B>wYp(iLO-;m=a5 zTh_$H0$nT2GGx{`!+w6z3m_2A7-C~jq5}Efcl#gPO#VxXPp;!@RE2N#etFc89d4aH zn<$&!NXV~wX-`N#*6^Ci_c&$iZOz=k;NSPTR6`TWf_T^@9=J4y*otC4ylT(63)0Qj zq$}oC5AaC$vckvAZmkX!Y86lnV5Z{p9S7K3P{AiySy1GAM!zT`d7Y4uCZ$(^cSZTF z$@tV1pDs1k8C~JptB%}B^UQgV14S<%qkO9@-{bMiU3=o(~pOD-*M7Rc35BS;vo&5owN_A}*OH>6m)! z01>%%62b-SOatZm@si+uqWiXZSm{(D=f{-E(da$aS;@< z&{uTSG8sMXRh*umId-~+bsOu*cZ%}Fr~Uoy)t0w9^(?M7ipRIH zm#gU~qoypHV^Tp!PrplmXFG7m{Pq4=GH2g{QJ}~}1-VRgUT@)wl-Gr#DJ^vq35EMk zw6X&{?WNg8Q~@_b+gnI)dt~97HFGeu!FhyiCpIHnQ$<;CUT3pjALr04xi7$W!bbbo zwF13%CN54)%c?wrA%9E>aOjOm#flXP|8SmFBO33`0zdP`vwPcY4x&>XjS?r%$+$?+ z0qbc2Yod-srlvk5hH@N=!eo0qi$dcRnKsxNQaPr&Pv5Nc)L(hcO%zHQ-(*x$c4Fgd zqRy(baW2B1L_R+H+Q3bac0JamrR8yN|56_bPehsKM+5FWmA7gJg+>(uCo(cV?+dp- zlVDu~bm-jpy!M3xLC-F8#F3SINQ!?F%KDr;$}Gjx>;3oW&kHdd!vRFhjKi-V-Wqd6 z$UR>{H21jU6kDszV}jJTnA2jioY#7$e=gUz*Exwaqzo|Ic2=Lxl$nuFRE`i&^NQEm z%vX{yAyU_yUr*k^mS(6Lw8q3v-D@PxY;E}}A0Bg6yYTnSx_EpXX5p`@Y-DWMmhI=aMu12ul!q!YIJvI4d&te$FdHq{pHJqQil6Q6U zu$f+TO&mAyIOV=N6KY|d-gQ=EiE}yd+}p{A>vKZAgEhSIlJOa~)Kz8-3U%MtXtDh9 zDyr8TlVfyp@5ubtJ$sc4En!r#_TmBF@Tr$pCUur;rCP7?iYJ&lIBAl_n;Uq~nP*M2 z-urrb``1n*r`jXdTw^LO1y+s(r#F>$kH!gS@G=PwiP9j{v-1uwtZpOsIx7`Li+G~CMU5XRXbJ>t_85Z}B? zqZhup^LVV$xtMQ}mVVKg zmwgtUq^-Rdw9eqea*%N<1v_RVRCe@%N{jJN(gx}r2d0xuCiP*X+Xwh&$rBG z8VrUDvH96yCSpI_?jZh)!Ye%hs3a+PHcEOyp_6+%$@~eJ1Z8h6h z7IhFdBHxH3g4mgDAp;_ksxj3t)vPIw>*$yT08 zGRO#@J6Qu1Pn-%x8SNK*iCZ-0QCELO!P*7BEEK24Yf8aXK94I4XZ6`Xx6K@6VhGQK zZFuQ_n4P7ILrpWB3ZLb=&k;S#rdh)$^|QSzvwW8EZBV)=NxlpI(OSbgveTgRPBjN? z=LoX`pl8%nRJTFdcCx)=xI-rgdmtel$MOr|DZ;Di2v{WPSrXdJJ)|N~mv{^Z8al z@FwVhQhCzYnD;(cV#3)gTer9WButVvs)Mda(ejOFSAv@oERj~RVPs_q4d%rLR z^|1ionIt!fXOCMh5&iUR%gCGljic*Gzs~Vj^wckd!ppEm?~Zr4c|Kna4}i-m;NL-T z=%2xCBksE~t!4&Xb9w}Nyh5x2@Bw{yly|;m;yG@aVDHh4PWv<2LO6-wn`={?#m2-$ zMUsU}vFH1@n-g+Y*HvF5@z#LX&KvUU5``PWrVcRdW$CH2RF@dgT`b1Ye+Js5{7YH)Ab z*%dHf21FQD&ja=GQ^W$k8|L*stIB}20YFs%y=<@)SYu{KZL_OTcJRXNhMk2pXi$Q= zFMeS_&^-W*2Y=N=04<2Af&vX3j~wbv6y^%{%xv(DCKSN|1Gp>r!`WiQrviIg|I09x zOn;u*r}g#G%Erc-uP(zIC60UVG_QWi$bpcHP{53xI!8@yxugWj?s;{SMqesG*9Amb z(2YT32oN?-jVun=$wnX!tJc{7zXjZsOtQff%e$QSF}kQ>jGwq8=2g|?v&!Et^h9+0 zrf*@>8wdqUcH&idHleYxq~IX!O>#VhSchZTCrt%w?;9$$Ft5ti`X9Jb-kz0`lMQ}LL5YR zuyb%cMpUsyMZ0C4PZ{olH5}ou0yFpxP#EE}1Lfzx;f7qrNN8zkf%p0%po2k^+z#;v zs>;gB^`1a8Rs&2kAS~X3OH4IeM!Kj7TZX`lVE59QG&AyFCO>z@5^NumwD4cXcF&=M z1bV?!u^mZkT40GANB)B@r+Vfz%)fn3=tb(NC zy93f9A}L~1fyoG{ZFN;GO~@LQTd41=g?|cUQBhV(?~Llb3O5h_lrcg!NHRV>oTI3q zj+(HO!mzs@2b_0CIOGsw@tdd01=D{gD4Cs>KH7cz1cxz^750Ny=fIXN4A50asr~un z>NybWD!_>V0!z076J00#))5%LjM+iEhCaI6M8LfeL*#ucn1+#`b)Na(-s|$@0#-mF zFtBko6Zk?5Fz^(7eQOcF;v6WCMK0d3GndRtO0v9P@?e;lloY|^Tkx9H4{>R}4n^jP zafy(V{rs7^IV%J+f>0DU;o4jT^lK*sDO6T9k36V#%c*$SLp}F3=Po49Jl-60EMov) zT_?yN$=lo}{LR+kW{Uyb)gIh!7++xHIWNRNz`?leEzr)3asNGZZF~+QM5^cFAGo#& zJOvg2!xiP{0svgMahhx#-2<#u9GK$hLyk71R+$u!O;BJ8_LAL(%XKld0)(w?0!)WX zGLRy1SwP^cL8EU46$67km@h}byeNV=1;-`g4?Iyf0QB~AhXlZaB48biqm-o%l zB5VT@>E7=M5s5BWvk$8=93E&h6^InK`2Y48m;H>~Cq5#0?r$_;i02BIqEhvM$ zrQcR1gAP98(}N%#oSen^4Gj$lvSwW33;tYeSPfNd#j!7t7!5mhNxX==+UJzcjM~ayoLM{!|luP5guV zVdTmn0x=WIf{LXz7B5>|p-ML!v7p{fc|)ej8?AS$3~dfoH;)FIfTGh05ZTnyVi4>r zEcL&FyHT1Q;F8Zb?R0^G;T}w$78VxOLNHbR9w{3Dwhca_NC%c40Gda9)WOaV#Sggy zKK%goO^Aw$TFr#>5CrK6L$|U}6vrnjdLa}JE>HgpmNPiq1eqGN{H9VSm?GUGWU&78 zCvcJi7$B!5ZraXxKuCji%c2Q%PvK9h7f z0)bc;Lh<0H|A}{odNJjF@7}#YNcBM+>hNes;p)WfzJ>zO9gOw_XyCaU)VMGMP=O$G zX=#lZc!HHcGz;~@ZI;Qj_yc1h{Z7Q$Jjpcx2mz&f@Ret!qwyij?!&4F41l@@Smj&5 zc7-yeLZS~`oaO$e<~5vdnb9j6_*O6mKfJkFV-4jR;x8cQ;a-_(6QW#(U-<0#pN4TA z1+Z)=+%Fm9B|MJ*z?Ft%7Q^O1iDXWVs{naah`Z1mW@C$u>!|tp`2(Vo zOG>N#@en&I0Ird6oMzlf0Gvs$(i{E&_$7kyh9r^G2&4hgyaW9XUaja=Zm$eN+<!^tVGr;s4c*)X(B#6OEG;day5PYC zprcp)9572Er-lzBA=c1YwQj)=$FEk9F;e`XDh7tw=;ufOVg7CT*A1ClTCyF0p>2u zYugYWBo2=d5Rbt4EMZ~@ BibpJ-f8YDLzZT0d?;f}Veg%ojhz=-Xw) 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 Z#wTk1726FBah4V7^dB0^$%=+|{tHZ2$anw% diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 82f3c9d..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.946216,1.044312,1.276984 -2048.000000,6.008791,5.687414,5.095865 -4096.000000,21.311342,20.087954,20.641176 -6144.000000,22.704468,22.578516,46.187523 -8192.000000,5.995520,6.011392,79.864830 diff --git a/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=True-headdim=256-num_heads=32-blocksize_q=32-blocksize_k=64-mode=fwd.png deleted file mode 100644 index 3522a65f91d578027b0ec9007dac06709dffc2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27770 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 @GNJwMGLTK^29Eiwmy1N2^6BjX)@*veE8?;J|4k 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

    8X- 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 UVTrqVd=kR}4Q=(zy=H&@574}*5&!@I diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index 6bf0a97..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.194274,0.197417,0.893069 -2048.000000,0.489115,0.510745,3.374991 -4096.000000,0.749033,0.736170,12.789350 -6144.000000,1.510902,0.927365,26.680799 -8192.000000,9.315708,8.356712,50.984959 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 80d4d0088fa47019d0558f07518ae0045c3b5be6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25310 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 K?T@XlC;tNmkN9!` diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index 944c8f1..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.471489,41.312256,2.191019 -2048.000000,41.888771,39.794174,8.093368 -4096.000000,31.771135,32.185341,29.881342 -6144.000000,19.444225,20.192257,300.000000 -8192.000000,16.817152,18.491905,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=32-blocksize_k=64-mode=bwd.png deleted file mode 100644 index a85e15d5472d2bb09ee2c4b97829f551e69ec1b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26925 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index 964b7e5..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,48.079872,48.340481,2.215052 -2048.000000,47.191551,44.837376,300.000000 -4096.000000,37.274624,37.072895,300.000000 -6144.000000,47.077377,48.559105,300.000000 -8192.000000,30.067713,29.582336,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 3dc5d4c3c427145a91685a6ee43bf5d90d545afe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26990 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 lL4f)vjR?|8GjvK0 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 z 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 Wi{0WPPdLLVUw!$_%F-`_(*FUAY04}B diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.csv deleted file mode 100644 index f441f2e..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,39.704063,40.694275,2.149170 -2048.000000,37.292030,37.990913,300.000000 -4096.000000,24.531456,25.107456,300.000000 -6144.000000,5.763072,22.595585,300.000000 -8192.000000,0.001024,0.002048,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=bwd.png deleted file mode 100644 index 3d5758d32f374c2e547b8f9708693f8eb7b454af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27095 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 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv deleted file mode 100644 index 74c4cc4..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.296567,0.293862,0.888089 -2048.000000,0.470762,0.498192,3.372458 -4096.000000,0.729678,0.687250,12.775748 -6144.000000,1.461504,0.935951,28.775423 -8192.000000,6.069362,4.621676,51.770367 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=32-mode=fwd.png deleted file mode 100644 index 7633f894bde8e0665a35398282c79b64df7b89bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24238 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 Pc*@3g?6n!IU61_>o_=T% diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.csv deleted file mode 100644 index f507520..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,41.308159,40.687103,2.195997 -2048.000000,38.883327,39.604225,300.000000 -4096.000000,32.592896,32.568832,300.000000 -6144.000000,21.382656,22.393345,300.000000 -8192.000000,24.840191,22.914560,100.000000 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=bwd.png deleted file mode 100644 index 1a46a9511454d39d55b2b0006c0370b9835a5e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26702 zcmeFZbySwy*Dm}Jf|N)%=%WZqDjfnU3W9)u(h?#d-JJ@O0wUcaC?Z|bje;}+(w)-X zapvvb=RLnO#`lizjPuv`$LAhy2T$Dhy4RX(&g;77wFr1DFGYk;i;qH~h#pEyDxpxA zUMLjC#CaTeg|B;L2L2JUyRT-aY-wocsApq z`=yt5c2>5+TwLb=^#M*x8zZhBn$^p25j-ntbz2mQSP%J&@kKn{7=<#bcqn=2iBrPL zsG}Qs-|5*#|7Vso++SC>$4D-wKF1)xSVoyeRi=xfC_yrdsd|q5-2IcG@AB)~d8d;1 zKha>EBf&6Mx=Vu1{3c4~uwyMWOpX#0^LqHGyEs#*^HtZm<+k}3;iC#23AR5BseNDh z!yhL?u1u_pBqStZai6dsOG-*MHn3ul!_OPsGN}9Tv*=q=3HXtOIQ9R3`~Nf3655AR zdaGiz;}sU}c|5#2!$Nh25LnCvj0W!JpFb~)i7|3~9h z{qlHC^5M>sCW9|?1WM(uwDfu1Q_MHMz8dtw$oB)5m(55?N$HcPlce!1b)c zA`9R6-Dz{3qqB0I1C2&c)kUBJk>H_b_JSYLj1TZWz>ofZikPg(+j{>mZ)@GcND#8U z#vp8GHS+4p&6{E82q*=2smRH>ZDyoDe*Ad;!Ue;L+E;1m=^_mJTK&UxW7xxG8s zn&0}#lAPyuU~_?9u$D+*WWveA*!cR%(O&wOFaAuP$6Z) z#hD6PO`vYxyosvZ_(AuUNj%9Lmw0M^-tobFTSvz=cJ{YfS?r?(YA~1g7q*7)yP{gz zI5=h-h{dmRafLQEO8(B)l(M$IS>?Lt&}-cHm4b+tSGVu$Q&g5lap3OCu*iFHFERJS zcZrEB3-`06_4FlCb?wvHqgkp#v&|Rt z<>4&xvo*&`D&Gu()cLJH+Kw9cv~AXS*rRxo;G6mSiA!QI&ZL3@CJ*jb!#1lN5sL)%YIj%l!A|jb1Lbt#e)ny~LbvH31qH!$ z?FCXy_BkTQI+K2s(z3lWH{)@6ctH95!u(? z$;EcItz5W#vX|H?;FPDH6sxYn?^&(ByF1)rzg9iW-r3B`rdia??z;1IzWj<*-0acb z6?ETEE5&$z^IMC(8TwAHu5@~OdO!MgJk62n%1|rL^3=|EJojYo*j+*>QVp5 z(`$H}nN!|k?5VAtgh4&-w$*;UQ^W0OF;;Y6`#b*qivDxQOGm&T(z$ zGd!qRi;6TKc^UP+QLw*ima_18HoCRNVdYlq-Ma}(W7dA^V(u>L>Ly>+=VoWM9D7*{ zkMo;aS_%rM!6)_8lRX22WDk?5 zorOuQ5?iA}x4PE_1?LFb3br~Ob6kHi8y=h;c^VkBM#md)XbShQ^fa-1o}CmF6q~je z_+ZbM_v=_jbtb5*d^3+%r=4dl8;Qoez!NGxnePLm13zK^EOvi6_iH$8tLHs1*@;%?Y zO1FMlz8FDkw0^7o(F-G^@OSSXXU}iH2o=LuSMSQxQ&*qwSob``WjP&a3g&T5iQ{8q zGade&MMt-!wf7455=Z-pr`Fb-;b^&i;?kHS6Ct&3(q5@AQG2iWbfy=HB0VgY4 zP!P`&&N-oe22tvAM?YE4>uf=Rx0aFwF(-d(rntM#mtVeY_$e%4hYf7jJAOK-eT({vc%Kc(cA{EZ&KZKL5VgX%fanMhs`|D~U?q=myOG~)}-%`|>JF0MRZ$Ytew8?%!_czCxo0lKs zE!Px{;u~zHeJxpIh44w90RwYI!|-J;#OS;N+^ZF)*% zzoMZsH?6GFKVFknsUzyweYp#EDWvQ=K^ua+5hu5E;l+ppw4(r=4G4`58 zRyjxe(^ktd2PIf@YyIEMyK)%NN^eFC33b=Ts*Hz%?9%7@;y6~Zu1)d^3m})c+)W}zM^nX|GcE+R|O4PEqA`< zG4l&mUsO96{TrV_$|w4PVl*llzRu2`CL7JUe|Y#_%fd@eMh5?Acjd}Pu4gbA8QEZ^ zGY`!yP8z#~yOLdUV2O>~h=TvyRa^G>;0?Q^0Q%91xanYl0&5(L9M zP7b?2+`+Q3v566J;7ksHyxJM&{wYD5fK?|FLYnMcFkt;4Hc$U z-&57@&vJA)#EflkX?Ub%Wv9EPm<(o`!}gde7r+b{O&HNU$oy3t6c!uRl0NeL4RxBhUaD?hcb+uy%W zo?i9_`e}pt50u6oWI9bcKFhsJToJu2GouCb82kf4A4hQloe9C7uuGTJ1DneLdK9-z zHq6PqK%-}OR?S23R!0W4CNv~(G%+`!0*}fU&|4wYK~y5S=`83Zj;q)nCw*F6Fo_Cy zA9`sI4(76Z@bNz=Udc=)2^)IwGg-Q?n^`x54->0h#M5jjZB|Eerq{-1Lj3Gidwh0? zWTSls?qd@Q@tSZ;foo``F>m7finaPq@rL)zEaRk#lBY>70G}H_9nXu;RlQoP8DEr^ z)QWaNefmw!gLC(uUgLTH&=O%W~aF2?kS(yOM71Q6h0wV^*$!-`g?v^ArBgh7gVewKWP5+ z_g8DO@Z)@@+kitYaKW%GPZ(`Yad`ZjS(k*wT2WhjeJW_KeuM0q8bh$ZDKcv?>UgY* zrQgNEq$JkN(a#Jm&^8XdIFH$lO77)qKh9+|8@E92*HTcJ9U{@l2mGLwLG*ln{zY=^ z_BeI8OzFpMyV3*0h2QO3PbDPfVMf(Bui-eX@)~U%ynOuHKf$|JLamzKVdeE&4Lo$% zkOEVQk|{Qh2E!}=(yv{QrDa}kb$DN3fX7JNRYowRMT(Ai=9P=q4CUDDQMU+7_n+_2 zi?`ntMWdfiPTU!&=wD=&G~r_QdY*xWJJG~6IUU+AD~Lu%@_AMZrI_toZ6!Y<5sKx+ z2>OIZ>(*iJpEw3%kcWNk{!Bzp9z)i8i>G~$hQ#_a_G5Mma%}e_4Td-VrQx6D^k!ui zMrbOlvSA<&N`D8EZmJ3c$rwc@gwK`#c$6voex+djx<1RiE>D|0F-kBnPc!^9pNJ@t^^ z(zjymcN!1LV@y^`A&0i(+~d~-mspw>UrIKPQc&DU7F%DffK8|(b>;c(Y%JEOfy%*z zg9=L~Y+Oxb=|sfEZLh7rXI>BWL?U8`7cY&J*MECta3#;R#F=ZNm9r4SbOYNLgFn7c zQQG`Nr{xYR@P1|G2WMMbGLj5DmTR6e=f8&=69NTriWt#yTE0mw*afqa1&q-|>mi=# zG57JBXIwA~nvaWvD9IUTuH8G54W_t}7FL(f;>f}2)cHK#E6>v&WY9glrZ@`XL~?Pp z_ollT+&|jrX(SF%U}x6{u>sEFUMHf>A)Z}^&-hl3X0hHs5DZA zkEc{XU)5Tp?o>FeC!eV?1W30dA8p~D*c)%pMWa;;hxO*=_m_FLF5E{a-G%-C<+dwq zeZe(R1fOU17qYa)ozpD2`}iHCqh9)8j0oCdSAqR~2`zdjS7g@C6EYyP&xhoWFKoHI zRC?{rd9Z!L!n3uB=97u5tC3Z$vcpp|NvILOdQ}bL%fC=Db)ueNGFTuhL^AF0I>NH+ z5{S$S>rPLQPoE&HNX%UrD*lzLSA7;1UglJ+3M(loB`j)r9Lx@w@u!#ddEr&zP(&M$i5#y04R&tai3F zng{5W$KfBAD0cO`z%*2!*;6<>JIn9*645;{G5M+=ueh39UQ`rudUB-v` zJP|Nd^omM{7jm_Kuc6jwr|wIdL{^Hv9R8g^Zgbbu z+ke>VCu8mAvV#ax)u)2EK0hm~KJq->O6D~ic(=dr#BV;-xW6$CPc&KBDTZ~4gQNZW z0Tz8|&#zxML{))(y?OH{qzUfybd;WiBwsC2nA?f_D$6~!7>JoC#L)^UsSx^~xizOP zffQ^BEq=sItNYdNN4t&RzjtS-?kDlddqo(ZrPdq%vu7;HFwJzObV& znXn0rH!(wbGS;X_x2lvYx*A*5q?fh&aFH#F^O+2AUIon(*S%HL@=!5>*T8_>`*jn>f`ZX|&%vLlOM(Kp@3y|onp`!jWqc9RLd(F#Nj~lKx*B;;G zIPNYr{Ui8nR|p_1>JlgC1ur0@{FY;n9+YV+{Ra-2ym@?b0yx5cXr^su1~S(i{t+6T zQ*YsSc1o4x(gIulYg9Y8mgW6#N2?W~Ww!I1->G!E3JheWoYmB*U%h&@JXRGCFWc<& zsghApeE%#L@3dZro1s%9)*8))+h(8(fg$PUCdy;j2J;ZN@ng64g8#W-Xh5gX&^uo+1+idr2jV?Sqw%cpp~CgPPmp_<~aI z`4xDcd05n(ICz}wsBUgzb$NTmt=}Kef}6iUEr?$Kb@pRxZ0c6>x!M znhjwCJr(QJBBZTi&5{e>EZ(dPBX7)%m=9vQAJw{3(1u?irm~HBt4{Ub`9tQe5eNL6q`=ewV z>8(7HAY*dV-NTd=RFY=(Ab&49i#%ccFxzz5S|#(qpp>FssLPUHRju>O9(?d;19Z_h z7jJp#D)#9P*WcSSN`>A%+U?4uS{~2?OkpIC_u)x=Fx_Qwrpj&2YiNrbXv{c1o|@G` z{lD*qOWe5QEv=ASL=FTMSGwdS@+EZNbf@@bLF)Q?NTeMRVl{ktl3&A01d7azk-6$y zs@%#7k(gQjGnD{Z4uyI#{#-lM(6E|x?8jffm)mn&(7T-!_l5cU_rAR!H1RP=cYwRO ztq5>QPY*yo%AY^iM{L)R*1BqH5H$LvM!V|6Gm+8>OpaH~#mO*fl%wT!?t67_s5Afv zNVl(Vyh`@;t(AZWJaCmkebUgfep43U??lS%IdubI1H?oigBW3|R71%)d_(#>L`I~D z4fgIDZZ`LIbkbt1(L|prFpD}11RRCK(%;yt!|nQjG2)Vm3{y?N9=r6|#_139DA7X` z7AQwIqQmq!F-I%Q{=R+X7HJe`F+8DiPxi!(J00viD|(NlMmgQT`YnUSypS zboW>y&3h8=g<|$ZqkS>Xj*^}4zi7GuSmgR&X*Vryz>M3Gb9oS}Q_K{m*#H@4oB(l7 z4ddyN&fnEzNb+P%a>3Vj{tkP+8)o7OlWEvkHs}O&9f`!afx?|lrgOWB;0D3PQ$&8W6mnH&^9qn!WOY)32hz}Xy z)SvW}XChA1M94H*6UoKjI3QbMg<<6z5}6HRHif7|r1+a&=j2}_t2B*<(XhbYcsdoS zI?>8CS-u2;EZJE6mXT<0oOt>NeAtN;S!EKYTvyFN|Ae5UH9xLuQ2&YoU-#1g)m$k} zdT>0>7>dYv?tKkV%5%1alDg110l`nYr%vUab_D0d6ei zRD?uCkf#fuJ9q9az0mtFUszvzd(#M7UHbFq&wq?x(CF`$SAR#u8iCH^-m?tqSlh791K>o;yp zH8FX<*j*mH%FKMz_}5joI7nvoeX0$vYsOE{Wq9y6a1&;Ff5`$pmXv{^9d1>&{Yw@E zoR9x^nyw?x6&rgVncNcf4^x&Bgb6nyJza;-=IlZdbYjQ$bH=?ZOoTnP;gS`QBoA3r~l zzTkj>%YaoBfjT<6oo%>N!~&)SQW3&&`Ep92=CsQ<3qH#;m6Du)F8!X=>C9cNq=R0c z1E{?RLv7d#iFtsNY`HL<*sjjr!Vyhvq)REyPAi)T(J z_Fq&L$d=PwO6@QO{{<-3XQ!@<{kdzbp~1nQzI^d-YkQQgUAw()_gr6}!QSKaz$ks1 zA(`2&vLgTh#m3%V?vzR?zoq5Nz80i(> z$bhkDH0QJRogHQ&p+Uu{_wVZgQ%N72=9m9Z%<{lDwc|ar?0F)hPjd16d_B@kmhS^CF<+zOCh?cMI6|}!oqxfeQ&vJ zza%9iD_gH8z$jh(n)$NlGZBQ4;g7d8X`eoAETo3s0zAF5nV3>CcFPjOajSjqc^4Y3 zv=hbo=JLG{ngaWtXPuBVo|V496ttatgyO6@wn^VqFEqSqx9}LH?KF9=va*sIwhlna z?LR$!AQF!%_74xo=T;vEx~^44!!v=1-0<%5J*TMv7L%_uoNM01x`Vg2Nb{g67q&>k zK;(If$4^Hugz3rQbXn=TMgD~kPet7sQiN=EXJu?NUPo~N&ys9(=g>MI{S4>TD;23J zM$wZkI%xg`dc1;`kXEQz%`-bBtNEvER8re9VP>#1d)df4EOR%deK}K;Oq+wWdBKT!(m%QfMGt3t&62aG z@53vIGz7HFzu0)*+=;96x0Yde=Rx?)(4fM{Gd$ zj8@_;Cki_+3G_pyk`(Pf*=q=-=qg6aDcdh*T_ID;s&h-f|Hw&6Hp+~RsYqSQc?3^Z z41%WsfO+kQ0SBQ6KZ4ii;(<2j07Hc7As8;}sl4Yudf}dL%rxfx(-2Y#A+{hY?;3Ht zKbUoO@If>>TeHCj&uYxss_q=}#d<^P^7y5)mj7!1+`V@%`$GByyTupUhA~iDD>@cm z&S*tOMJZ`%nb}iMU2}7H-}vptYkfIs|G*u+gKDASAq2@Ygz-&BBCKS`8$D`>y|CC= zV|&&q!}^AXfZ*WopW}NqI=I{HF;9?cV8R3I_rr{Te*v_tcP)ZR$M>bA$jHglh)pwi z8@L4>mZ@oIXi&gI)ak>FG;0_i1izN$dh@3Tu8({d&G@mXs5k8R{{8#VRV)pIt%16A z>z02=$nRNQf|YSg&R;d|70&Uc!uDAq(k5&i*c?V}fLt&$-cIYEzJC3hJw$S(dt;m} zn4|c&7smQ_Po8o3dvT%L$go^?c`b#COd|Wjqzx7da-ZOyX!l*7$2AmpTPx?IqEdm%jj4odOVS z2(oOE+2F5&(!<@A)-3fxR(AH8c*|-%L~}hnyk$Mr$RqYZQIW($L#L71$2YDdKr`}djvl@8%xXD5trpL42oKXSNx_pVx=F2=KRySnl5WC}JF!DpCBw+!$L zjXLKbyIE~}acF)c^lFb6=qWT(z{J7|2n>9_zdkuLHz(ZTUOB&BHlK8blQRTr_=6Do zgAy`^mZpJ9XWJyV&4-Yg28xV(t|u2-j*I0~?P@@k2ktiuPjc<{?a_>m$ zAiMTx;!k?A;qW(eyM?Yg<8f%8wzUh4KY}jtLpeESKEB8x&T@ai4Tsx*?nz2woBqz4 z3|A1F9JZ`6=>4K7->Fk>cfG=K&G65!Pi;xJ;E}0SI^Bf6fv|xY5MFW$3hVCsR7lj4($X&O)7(B@ZwPVeyuC-yAmZ=>XuRm| zfWFa)Lw-~;Q^MRV6)`ZW%@RT^Mo;<+Oul@kmxPBF{nNfu`_|=8=|?4qG?y$=e)NDK zErnTO8=<17f26C6)Q`p=KZIML_bqql4#rx|nV9{l2G?|-s*XXe7l!Co8&6|nBMM4k zU1n}|U`dGp0!BQ~POq}C@IV_w`A0akKufU`laoVpbGa<5b||5CX6Jd>*xZU2ur!1o z$JJxLj;WKq@pSXyZxFn`7Ng}Gy~+yKOW7rx`_rK!N&WfyP2nMY9>-3nN8@J&&~6|4 zX0ADTK-h3eNGSGx5amrMr^m;~2`;J%y%3I!E(UkWgk)y8)! z{gPpjYOJq%!OQj<1A-9N5cgQz=0m(7Gt3Q?*e|J|V8iUsM(d!E960WA#Bt@p+esdwAHMzKiqBEFA zw4h+j)YNlOkj_BlXG@T@{b+k|AhTi(O{K9aBVxC++uI9zAW6^x5vZA6BSvTyIXYb> zomRDSXJ^OW#jJ2J@2oiIhd;@c(u28phNG$JX^i#F&5r;PLN+fj2sTHm@EJ&fa3UsVv`g|hQCug(9HNo zb?2xMO$pLlP-tjqkDwSgS=nZQu`|WV+eUZMEyBw6*Z&Mg2+P=bu2h^$j>blWKR&yK zv*EWPk_@0}m6n!vk%Hnr$VJ{bM9(*8eiG8$@_`aywLWp@K`3MUM4dN7v}b4J-!h0X zM_mhBGw)?L8dl|r-pN>%YY)I`93t9A$bZrgAL0ROWQu;~5IeoOH1jk3PhTb#1orH2 zP0LSdX+DljAQz|T)OhUg?{mXe<_RoQOnm^E@_j--m>G()`OXFh5gM|u0OpQWVc;+XXcYVbJm@rwQTToJWu#S#SU3> zD>qwczPmxvx%s^DyhYh8|(kW!#3<}Z@fg9H2*a~txuJrTcgudIZ-WW}B2nEqlh}UkB5UIfK%g+)2~+ZKraniYTCQiSVPs_d^P!cMk`%pr zYGuC`rPDscF2<*zf{xflCgPeCLqwl4YKgdRx7ho05#k>5ipP(=lj12SrHX8IEL`Gx z(_CQOy%DssC{^$YLHBd^$?oaVS`SPn;$#wY6NJ3YM-g%yylwaLHz67=x~FnSNo2t6 zTaN|E;zECfh{cb&fByU#(gYA?wtOikGe3ro&t%3wS3XfV!SnRMZSyC~Jb7niWXARtdjV?pp1H?d( z%0IrPq^zu7<8d1a@hDA;Nuc4Pnfl~ZR3g<14yP`z82cd${_p?UIQ-iK_OX;{B-d*Z<U!P1Ld~s<`t<1&3xnzENZE+PusK+!{6IEId^-HS z_=REpr|7%=IUvpgz3R*O@f+i9K!6?sPp)2l3>_=3n&bNEQ1R7)_j>fM0=K*TAjsY#oaQMCVWpbUTEKQLK{ry6iZC+LQ3?CyRBO$hNh0-OZY?C>C;f`VcL zz$hTI`|yAYG@aJasj_y_k$w0O;{!N8P~?=9&r61#5ikg~f=zV3BT?i4ii3KY&8I76 z2|Pv@V3W9=9?Xx}^~klw-1N?QRCAXpd#Tz^5a85@5aW4(ZG$pA|v7~9b(OrxDtHQ zJt}&)-Ohu3{n9_zwvL>)Cg$QN3tA^~Gc&z}UM+N`geRL)&y&t(Fr0~q(LsVs)o%(3 znIWD4Nd3d2B>esRDQOhE98^+Lk}3~78t^KPF4$%s#q+o4TQ2?1=6%_P@`5tI1#C^} z@nZ=qD{iF41O89(`ELNniG6&09;>M}1IBCnqL_+UKF3_wvh&Qv#Kh!p`#^>O+V&p8 z8pDuyLas@tR(XHBN8x94v+it5q}|f*6-#}pext%VP0QG`=93+9ztRjy`RVeBE#Nh+ zMREq*5wPigB%SUqT-h3|H%|u-kdBj`9WS(zwwDLPS(4p;-DGuxeSwI0Ro%O*qjX$c zTq?QR?K}NCItJFIANQU1cQyB?iHXir_CHSlT0!0_w9(?zZrET^g2j#0`sxG2rs~Zz z(GWU;5a@f60ylW{h>$;i!`iyAU}@ z_Hu$O4NJB}Q*uX3b88M%5xx|t9H3!tLXJZM(aI{X$FmoO$vs6VVxVj-ubL<;abB+V42+{xLw z8!8@;u*HiPR{^L}tY&JKa6+?BWZJ1C3b@Tdda3j^I7!lcnj&SgHLm7F*8@?hN1Os5y!Yh3{@>?oGbMq8(^zLr1J|b zT$Sn{+fkRL?2xtL5=#Y;6kdW&3|PHwT!7oR&kD&NLjtlSu(TI=nUV`Oyq-FbeEs!B z@d{X@B*EhaaRhn(=F6^2*A$Z4K+=l=rjAR@_yTqlA*1MkalMAz_bo?IT3A_Gt+X&t z*F4W!g9XOa^hTjeYr9h1f6Huud(3T14p>YKY)IhRjQ!fK94P4bra=}Tfky6I>YJG2 z;^NREZjlohm4v#?&}0G?4f6IZWQL}uCO;}2w|p579Hk?UXZY@i5>+mF`cf+gu2EkV z^$WdVJE;Lbj*X3l>a-o9Y5($98lL^qZ-f4vXI^DlzzKYn6W_ll4FM6g#oAl9TF=nH zKZeLeqAM3|-5%oezv__18XG+Q-XVyR1EJY;0v0o`2{_8Nit?u+@p39owF6gnA;04H8QODDEI05TJsnxISBsS06+3-bfS= zg!_N{(;z)(+i9A3_dc;D{18nAt#a^@kUV^Pot0G=aSOsm^zuSwHjoIUj&tqVEnJLP zy68Z+3WDD^lPuiz;(qNbfSeF>Fd&d*A0KRFXCnr?!MP7*Wo5wEUjb}FGxiogrsvWp@87Xx;-$n?%N+5~JHG>4ytytzu0~?0Eei9C;{(U5;EKA&U0ml7ZpfM}$SjSeYuX za;5;tNtm&l4L%>cE;({9nAyv+aswD9?}vxs*AQ_CFq*2`8hAu9Gv3W$$MfG&B%v4j zIHLd!&g%!ZTma`zLE-vk?qgEMc)RTgl{{w%2Dhon>Z1#c&e&py=TFObic3F0&4Ar! zviQU%#Ek!CZ}SL<^YSmK*Y~IAB;Te)}%UVxu;OCvPe&gVXU1WowHJ-iR7Jm&IewbAI!y<0q!DSo;?Ne8|WE%qY!rdwPhLB$F9 z%_sZO@W4f9wvjT=9IbWN$w?5>8?sHo;W335SfpFlWo=>G%C3x-cs*Z>k(@`0CdA>MD<|4DH#dOc|lz z8>|c!gH|;?JNq5VVdzP2IHDR(LB=+O9SR}34llzBu5lZ6&;!K2;b=o*ef~VR5ysj6 zl@Yt}zV7Bh=n6zcLHnwM>DQF{Ywz}zu9SiTqh!8T0Ju4H4CYa5!>TH~L#Bp<&m4vN z&3l{K$G>G~Wfid9C88I6M`uy`%CJ4I8>DC`1-HQ-(+1}?80?XR3@oS&b_xQvk)#fK zY{p2y{h6y(E_a@P>{Dzm18$p^CJ{vWxTe~c_?@(Qk?p*^Ma2q#9Ix@+moHg^Pc=$y zbjsd>wc#}+@o3OF@=s= zq(7^00BusJ?+6GffX{1?a6mJK%5uZ;If>Ax+1B>fTDiEGXrJOZ$(8hI>C!_JXm=`z zgGV%9CQ*1!<&+5}E)MqknyK>H@d}Wy)J>pnK7*~zQ$rmsVL5b4`iF3qhI+*f4=hWELleN>7gT_N^Aip6%I346$9g;tlbD(FM|WI!z7gLD`@zz^Ac? zolMX`gpkc1yL2C$n}y6{mqyD91F--GCj`2nZjY4P=UH8L+js-5sDx#3m%9P}XV?7p z7WlX(oZ?D&<;VD%&eG@XxM@*(#;zA@VX{MsHc~a91m3l z^5M&il{=KY<|ey1CiVeC5Ai9h|sk`{3bn%9*N?tD~|Gl$siG^_547#q(EiIt`_bys>#E#}1@w)`}_CC4A z!xIn^a*dVseEjG6hs-pff9p3jH#c7r6-|I}$h`MnW5&r>ad^yRWOl3K7CcbIvGcou zn$^ANurNLAt5X)hei>?X&`pUk`^M@qLy!RdaiKK?ID>?NLC)Gbzi-k%9vaEthru4h zokq#V>J_d1daatrQtZRkE*BZp?cT3X*K<7)1MOlas0_thw1b zRh>F740v|rv#_eB(L#7It!cvFn;PEIT%;#FIRXy_h_9i1FE19E;UV2uAlFF~)kok@ zYEi~qNI|0~TEGc=7h05x#u?5+1NT@ae&ffTU5C%{!7^`o)TKTE70F1M_yg`xML)gI zaFvMN5+Xi<_1BDlpp;~H#k;}p@{N{7f6;IVuP(>&x`l3Tk4mJy@1Oo>h+@ohyz+j+ zd-0_&xLsJ^8*BOcB_Jyy@3PQ>Y3IBoM8M*>PS5&%$utMJAY}Ltmol$xu>T{BMaA&q zfg^D~8HBjbRP3$>a>~1kVSS45eTjJfxsz9(XQPYKqM@V`#9IgR7fCVi`60F_f2VRy zi<@hYb~;3$=j3YP9^NiHZL$qYRp7gUS&G`+;cNOVV0j@7 zyrR=IaG!Tfo<7hXK6OKS!z9+bYo77by}6a3;fZ>~AU9V^)_=*a|77{Q7*lQIOo)f3 z-WHnl`;b?701tr-50Qc}XZa(d23_#JB2feS8XOH7EVE5lPP`%&!VO3sq%k~V;(74t zq6Gv>a5NRSIIDV>F^-$W|2|~eb6m%X?!N~{Ax4b$sw{FbAGz5x%O!g46)kAYQW2iWD7*WLxFqJAN(QL zuLo#aRz)IG4Ja?av()bazQ<52wYrQDbbbAKqqef@*R2m}QLqM-r{F|G|3`T>?l$T9RgsCf(t z6~qp%LgOkOY~4s}5OB4KAwJlz;sECVC4gWu3k(XP;WHtJ(zry^i9+C@^;6DR6v#VK z&iqbXItCMds$As$@(|g*w}(eJb;ye3f#}tu7al1 zb2xB|#3SEWR2;X_g|umdkRDo9AI8vf25+6FS~=tyo&{m1)O z3-A7>A!+jz?5_5zBhKv=0_F6-$-}>w5QUm8RDQ~bAxI%Uo zwlr^h!CIghrSLw`DUavC2cAGCql*`%(fH<5GKTn_!R{&-fhy0pU(#*5zCsx%6#bGOM_o=RLzce`;R{2AVn(;0~|)y$`24kyha{sclnieRa?L%{H z>Ex>R7~j(4>3ID0&BEs)x617-U^Imwh!4rF(&nj}bx&VgFvA>8xxncSStNA+8LqGk zd0^1rtS@Q8#_VOWP=|Z@D)yLD!@u*Ugt_4Buyz_wpwFu?!?0>(W4YLqSEapX}&CPJu}7jI0NN2gwZ9T->(<@KL%fP!a;sJ>CxgcjnTuyX4r_P&)4CzJLGs4v9Zd89%6z2w9Rm4T1AM@NiDlJE-zk2V0jfp~@X`iL26!;l+e=$cxs~6JImoywKn5 zDXI0!1@$ap)I$Ck&O83~*T7Y@UXe;r&Ci}=@_6|-7N%rIc1hPGt}Evan#pTIMx#F> zz{jTs6B$q*Y+PI(s|g86AslZJNR?(-YL0on3mV_R2^fY!&!#_ObX&iJG+996s|V|$ z5F8R07_stx)14ImO9_q^!TPFB|Bm)Ta$9il?F>;kMT)QhFv|aeJ~;|d=6z7J4#4(M z3WV8IxYsr+=Dd&)w=2Jv)hooI?C;NJwZvEpbc>XUNg@2295u+=0A;as0Ubj(rUx*p z)F=q-$RR=a$G&Bn;@=dko>5B8Z{f2toMQ1z_8ts{glg&=o-QPCQ6KVb0m;d7KhzYQ$4gQsm>2X~^7&!RChC3MrS2ic0E# zIR*2@LH+}cEG#DGrCx-Q(GS8HA+lSy{#I#8t$<-|OppCZKN^Ta$i_3Zudp5^iPAvt z8zE``oiFg2Ax_@t1?BX+7M$A)7~S0f1d*LnZ%$S#e!A~HY*7&mMO!&n`!;9U3@LK# z20F30|IY^`HR*R^0f2U=>TMaamQ*7F+dN+I_m>d(Wd1MvSTHV}8L}ohJl_3q^KbTh z4yocJ*nnkZvJem{sTDRHf?;P+_`7o|xbGqMQ2iIO2?c2hR2>Ee_ECRIh$RE2`)jAU z!<*!cTSki`_lr!F?=pzn>b$djH+?j%Q&m-&ZSfv%-iww&nWo&1b=`N?R#iK$+`5oE zRr8IM6(8H|5%my8Wl%eZoj76Hm#owN-1?NL{oN!P=|Ua6O``hUqfawAv_8pP`-g+; zTg8)WMi4Lro;qB|CzW{Xd)K-;{UkhX2`+5vO-wX|q}dFYOWW{xOE1q!ZCyKsGfv=i ziy+@xy(%UKhj%sa8)$3m7WOTKs=&iN##Cb?G7#PZFvVYRMudraiah+R_7+={(HUrzm^P_uK51JLKfh7(WRNQmA4WUz-jGsO`+9 z-@v{9Rg(nwm+gYvq$YNM`<&XwO@2#$wLufQgE!x2sG{EKsLAMAK}d4_x@JYGjy-UFlT+#7l}_K$+=#37L}_Jut4KU+6h#McGh3LBzj<=K}P zh|f*VsZguzy5A8bk8ss`vdTxzbm5iy+}_r>m;K)3`L9O)HFMAIp4{6I>wT5X&o_Ed8h)f@^I_$Y@|IE9vt$8Wg-ajgN$OI* zWBWysQW{=lybwmB-5b1~q8-7cNFpXFIY3_(0_O#xmvWj4dpqNu3yQ5S@az(7gJ$Wi zqbpLE&>tVjFBJsJ2K~I=lEEFuE_*H1Gr1uw3mw8(93E?MMWi)o#LUvB(4Dn~fH%Cc z@eHd*f38mTHY(o2PyS)o311<5Dp6(iY}WL$=mF=HW*XTdQ;Vg}XtS@vVfRiP(a7-x zEewBMpx)VX@touXClZQDxhhui=O2#)LN>36jyU`hlx8|HWkK7>EMhz%{?NLy@yc=h z&286+<3v0iOC2=Ul>oxGS-sXWE1x`>-#4_7Hs2Y1L3R4TL64A> zf2z8}tKt_Dr&_6gxe)k2`O>l6Lm1K>u3GY07ba3Udvo<(+hkrqa_neV;==(kZHzAttnc zHkHH+pJ;vdv>MM(9$J8uS~GC-NVl1M5;!XK#AiRPOluydVE*bM!mkW@Oj{7TTyF-1 ze&7915AvDgEN#JjKW2I5`dxXhas(Z#*sIE|rEyov4=k9eIL_TuxKo+7EIhd zGiQsTWk#a7_xtt0;kO)>VL}$S#_3$!d~E_=lsX?j_Y5pJzTOgeHU0HtN*dz3;h*Nb z`Sxo2EhRFYt(J(ekIs=zQOW!uqg&tLs?C)b!>Bul{f1nTWyXor_#%nLm0R`kE@9P@ zQU@fO0$wWZ#{s!?cl|xji)p*Kl9FU_y7<}O9QQEo5H#+isW>PQ6U^$W8h< z_O`L^0qz-YOu&oN-s770&4eM0!}kxv^wStxSf;H=a6`#$_oc5(@vOWs7;5g=MGFl3 zxvVTHlK%>TIlr~I|DG;?Sj(TjnWKeSpoF|&NfDo%F|Gb;!CirIl=&RSM9G%na!}H> zf)y9e>OIfKb4?^vq)lV9(WG=Fj|y=v7nxnWv-Bg(=Z(vswL6kC?5r4emk$oQO1MDg zW%8_bo>ylGD;17!fAG%o;+^U{jW|tr$=|J)C}8EV9qoE-$?E;Q{eof)rk!6Z)L?7r zlWDV{QgdCycY0xs`tDSm*w}Z823G`{{PYK_XXX!;W2mGz@-NARyqO?NkloPn<7mP6 zyBGXZTBoye#Zbu~LsT90iG@&U`)3o^GV7g5A)f~n7oV0y#87`>nwOnEyrboO|59RH ze?z}!rVpH)`+-uCkqf;%P(hVbap3~P>yx8CEY{VGFGc!l zGRiWR#ogY$=_F*{lfHOPeR9Bd@ve1Zjrc-4R(^4;RF&|~`Jo*JC2)tH9te|bk z%}jEXum3JA8sjK%^5ruJMros=K;yYr%lu9S>oX$12bTB!W=Kh6r6fn6FZS^Wa&^Sx z%%AJxy&RL7i~m8dVe!})*a-0sO64{5hOCJk8ah(+{iNF;8Z;%-n2mY7ZJV-N?v9sk zmzxc3@EhD*r4C^r`re$4TXxebi*v$$Xc~v`kOgnFpOlGIVPkGdeeXB-kXBK2e&^{F zb>aUg?aafeT>Cw~XwV>1d&_K>Erp#S8AI(vgO+5s6=mEgnZ+_jDZ8>*l|nL96gCOT zGE<6*Xi(?&CTw+`_Dg5Wf<;LSnW^_E7ry>0A9j z=3R8O7R*i0w_r~Pyz_WZPQZ>@Grm7kzRf+U7+BbvsLS_5WCGux{Igg5Ro-0vX-HWx zN3QFk`3kleW%r_^1stBj(m*+iY6TDL61O5X;ZA3lv&@FS&c~d%$QWC%T3LPdXA4?< z0sV&^##futzouV$yFp^FcJPgZk(`}hdMaYKf%;NwKlUJHjljwuZU|mYxHVLt9uph+ zO45KoXNtkC9C6RHk*3}2+uIm6-_ep{G<39vp*g6LIbFB%nA>hm_b2WH7H8H!H2g{( zKI4n+_5!ihvxHE6SFJimkDkzrm|%bfRG5cSuedk%_K+N0;+`%-?P5 zUihVYblPb$I^h^+IKjm6dV+FknyF#e+x?Oc-l_JFnMVij);o5Y8LgK6BpWl>yPLHs z84f~A4ZbnduRU9&!L#SJxLK6qN6YHO=;J&5YS({52i|bV)opaE%#?ih?p&_4PrkL%9@67K>|^--|xSc;_vUwjtE|iph1` zjTdFcWuv4SX=3Uz2DMkq*IuhQF*X;L5RzJ!^Yk!(`Q3G+eIr~G!!bLKxrr&AotXJH zX=EfE!eESH_}lq~ZK!7!H5LmCDyTXbSOx_)c_#W+4!En(O3KO;Sbuas7JKAsdBz$@MNe?Ebl&D(`)R-Xh0xuK9_7 zG(LE!{PTjb6K7ntc$f0UqTZthIX85MtuOO`NXh+S->M>CnrOw+#+n4vs;RD5&4HAj zI%Ux~FNpwEo`A8ANw%Ht#U%>miET!K^vkczIJ#dongY&PD;CeJq;Kn+qZ^0fO}+W)S=#vX?$qlwN_YANAcKC z|^5ndE6-3wzU~ z-073tmtOdQYCd&jG&?f#SzL+Oi;|1=ah2Vy1P;qBnwcFv{YasI(_GHv&QbmR&g@8k zK~LM;igDN0sJoT7z8Z6#mFn@oXM$nrG+MJK)^EA9LeqhLB}QT;N9uGmZ@jzqXl|3g z_0;j}xwo7r1DrWL0nV7-+Wa@qd#F8I;J%~~74O70%$f^+P2n9&e{C@t zxZ7^9r`)%{rpF;SG6wYA&C0bzUB7^beS{6%R6If|~NWk5;b$k^obx~loU z!NCi!Lv6K6*|sft_6+Hmc*;t_7;)}~G2j$_H zJaiO~#svp%)kyQMSm{;0k!)p(h%7o%Juw7v@#N%UvOVGhIjH*sY=$Bq@U4$@4jf44)_i$I!uIR4Yd#%g}L zuV57k!t~jK_dF6N2>I+g$-QAnf1Thz(oDm3ZDg)Vk!#4}ik``x0H5UtG@g*=j zeu!Rc_?mLFK8EgXs<@{ZasT!le)sbgvpz{qaE3gI3Lu-Z?rK=LpBI;q-rFX8)3dgJ z2B%6SQc3|5s5sVN1n5&p8?FUg=;XC$pmlkPe+6lmVr(`Hy+~SH4rKo#I-AM}`vZlx zPSbl}PohpB8l71xnU7Dc*AN!`B}avq{4|rlE#|C!*qbBb6&z7nig!^w_#h%iz&v74 z&LEBikl9s`dM8etxbgh4tE9XIFR1ta2Zz0n;9c&_!uGsWRm;6aR@MfagNAYHZ;g@j zw;P=;bZl;1xC+$PZK^FQl$=qQ8r!wyK+laKTK}UL!wdB7;fMynbV3Uw&>O7YUPHr-5e+t*4JTLAnf$QKO4}+5 zH(gvS3Q>D+9-lJZf^-JLs>5T+XGLgb@F8A6FS*(0G`A0&Eh3LV5Ya;y2^k+`S5xKy z8B+mw8Ho};E4!28>+uhg=D{!Vy{Xul_P+#}{+E|4lh&Qf%wX-`Wbfc$E=HOaacQi? zmW1LTa@LgZLn12|iD2y{+u&cEy1sl_EhuR3B^320eupeFA3QtCxj8bdR6yp}{hl2^tE~(niQ}qdDtnFI|f5ah z+TqPZzW4_35C>+7>bsxG)--Z|N$%ADl>b}qIP(8$oHnE(-t87h2p-6U0J#;xIrq6V zpFDtlWpM8TYu5Y^k;vhPyUg(hi%kF!8-#`nK0XYets~)}>IDS%c^0TyBfTHR^ zJRzBI+$_oqf=xg| zmmUDjj#wCK9%8ZQ$Baml3`wZvn{mW)Aqh?`fgXdR)+8 zd^=sG%eE%g`-{3dT77Q|^C5xRS>X7Uv0u%TghQ%yX0~-VCf>MVhy8dWO(~O{8&(Lv zjv|E5a1j2F?#KFGLlB=3Xv*&|+E#?FsstV93^KYL=%81dAp_?fRM1R|s z;*nojaH2d06gF>G0`KTRTDw5~N=D&Y3V|rxhTiJe)GSbASJ-`Pu%5q1O4XMMmR*5=CKuDMMng z+737`!h`0_fvgn{NL>VQe#9W8FLDB0DirBxybEEAUL}-I+!0;#=4oJ?2yqbO9(=#d;L*}b=HrX z=(?Qw_jttzhlu>-Wl33CZ;T!0r$_aH1*aG6cGw~%RY9SH5CqVe_r9T_VHyILm=})B zo`NvfblwWZNCyy)QY5j#0hgsdy3I)sIP9r1a`>9@{m^QZpt72@9nh4+U0A6#T+C7$ ztbO@XDOSzZ1>(Z9{DGWmvE{e5m_g9x^r5QBwf58ws`8F4bfep=(RIei@1cLkSspqr zLJ{wxwn57&+$f^7PrfN8O+eJGpo_dvHgT9VFRs?Z70e6bd{uJ zdo+gO^y%F9XMm3(LNmVax6|}*Jz3Y{Hu6#21jkx1;qvG@%(VlSi{{E_}FC9|PJX2d!1`Aw+HvMhq4bxtN+6 zj!dLyNg#cMM8@sd5&YqEeJZO&g7Pnoyd5j0($AnA!Ff=Ib4$^r4b_nFGsI;-0qiax zk=b30R4@!R13*gpt~3E8Z!1BivWDlA>)aBByBgl55ZD{-J}(*%YAb8ph!mOE%l4ye z7zhgwm&VO>G6+&9@M8DBOx`NJO01BDp415$*9Js({X@%kV~PK05l$F6&9y)7|IG`S z&MymZCdS6dgh|YQR4MNnH`wTA;^t27@1Q-Y#wI zZ@BOYR!k*5$?scqqg;eI9pGj{>pTv0RVyazZLOsZcga3+5xGJ7;YFn%m zWqXxPcZM06b)UoxgZ}Mmx8bQm7U@l6xy9{CyIwHYe`cUjskk`Kga@rtkS`s=4~tr| z`~)v+y~2F;@u8(FeECllI%lqovz7dF9`tFbb&ScEii(PGV(lSvAkrPG!|&?5OOer1 ziJ=Kcu7MDU7+UOxM8sZvU*&lCRll!tkpERk;6(g}Ah4GrBxswskWqUec*i8w!mFm^ zvKML(oQlu(9yCMJ{M$W-hNlN~OSeBgY(3xUtTWS^s(1I?>S2rGq**zC8+FRT0?2fodR(DSs>Z%8X+L z@4mJbF^y65O5u{l3gpbRj@i$K1tVmnJ#jr7^sjAgoQD3vgI7k&I16>gRj44a6zto- zKb-u&tSW}?$waNPpyg)`?0f#`ezKV_{^(p4kg^MGX^RN`RU2cL)9d z`q2fX@}Ccf2!RWMT3D72=m20jo=N`GhaPka>MV?#G(!_YIs-Tnlux(7S5rRu_J|Xo z2^J}4=T1z(G`}G{92#QHTE1-AZ4_TvBlzK)0@tScmg3qcPOlE`*bKv^X=rv%l_6^B`%msWPEa=4(y6Om3aqxe1*6%tQ|J@@4Jej`p#5y4u<%eo0`ia3+U$5Gby|C4bmvDx zK6iC>sZ&wJhNJv!%Wg->1~{-12PfBNA#nB8w`_IJ4+3eqs5uFNPR;_JsY!xUK3L1q zu`ye$wXI$a$9Y9nYmCbf1OR%4f^thAPS>(!%iIQx3=Ovr&ZxSyzQ7R0Y;}l8s!`;{ zgyugva0iz<<@>`!yZs}=qv-4F-^e|xm#j>#jOww;NqbDT^N7TdwS!*;u|)v>R|{>adcW1lxIo zxl1p3Bf|PF<`;iRH$|GJ%E!#()!+%I2Oia_`;7dAv(!x_CX{1@00cc4f(du)sgLsP zVGf%=n53ejc)|~_#CsyC!qsP}poi*TN~}s?{mMvvASM#=PoZT}V;5uV#~i!pddDoF zHxPUkllum2P7v@14>t+WSGiUrA^~M~b-p_*)g*-vAE`mADhffWpa|&Gg?8emz(uo) zn5T<)__lY=;1Qu52o;hN49MeRsP!9Y6394+ian8eanHRb%%K^4zk)n$DxxXi(aRnI zE8qQmH_+~J|D?nI`I#kTYn^<)4GHQdfB(Ne=cb0kvrgGsC0zTV^vUfLCFY{Nc GbN>c{&0ALh diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv deleted file mode 100644 index 315306c..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.260127,0.261084,0.907107 -2048.000000,0.489120,0.503194,3.285888 -4096.000000,0.702334,0.687267,12.795319 -6144.000000,0.868415,0.853787,28.554922 -8192.000000,5.292191,5.980858,52.552929 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=32-blocksize_q=64-blocksize_k=64-mode=fwd.png deleted file mode 100644 index fd0a03c5b684c492d4ee328200e064b0ea83e19d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24205 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 BSxf)` diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.csv deleted file mode 100644 index 4b50fae..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,52.571136,54.286335,1.336869 -2048.000000,54.935551,54.233089,2.203917 -4096.000000,48.314369,49.284096,7.858112 -6144.000000,43.418625,44.575745,16.787161 -8192.000000,40.323071,53.779457,30.044502 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=bwd.png deleted file mode 100644 index 797ebf42ce14469f09c96ad3f1249c681a8670f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26508 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 QpK++)wG1?~G;IF(FXJ>91poj5 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv deleted file mode 100644 index f1705ec..0000000 --- a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.csv +++ /dev/null @@ -1,6 +0,0 @@ -seqlen,Triton-BlockPtr,Triton-PtrBlock,Jax -1024.000000,0.986422,0.964327,0.296334 -2048.000000,3.023531,3.025749,0.895366 -4096.000000,2.943616,2.952864,3.329914 -6144.000000,10.140613,10.020750,7.312576 -8192.000000,4.462695,4.424192,13.005107 diff --git a/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png b/benchmarks/mha/triton/batch_size=1-bias=False-headdim=64-num_heads=8-blocksize_q=128-blocksize_k=128-mode=fwd.png deleted file mode 100644 index 0e0e63996c6f66bc5ebcf2a83a9e3f18f54f4e00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29687 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

jy{nU9u99L$7Ma=iHPvheN3pi!cFaWnKz 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