From c5140e342d597defbfa9a39aadb35e56c05ec1ac Mon Sep 17 00:00:00 2001 From: Dera Okeke Date: Mon, 23 Feb 2026 22:52:42 +0100 Subject: [PATCH 1/4] stake burn docs --- docs/concepts/stake-burn.md | 156 +++++++++++++++++++++++++++++++++ docs/errors/subtensor.md | 4 + sidebars.js | 1 + static/img/docs/stake-burn.png | Bin 0 -> 28259 bytes 4 files changed, 161 insertions(+) create mode 100644 docs/concepts/stake-burn.md create mode 100644 static/img/docs/stake-burn.png diff --git a/docs/concepts/stake-burn.md b/docs/concepts/stake-burn.md new file mode 100644 index 000000000..75dad374c --- /dev/null +++ b/docs/concepts/stake-burn.md @@ -0,0 +1,156 @@ +--- +title: "Subnet stake burn" +--- + +import StakeBurn from '/img/docs/stake-burn.png'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Subnet Stake Burn + +The stake burn mechanism allows subnet owners to reduce the amount of alpha in circulation. This page describes Bittensor's subnet stake burn mechanism. It covers the mechanism’s behavior, how to execute a stake burn, and its effect on a subnet. + +The stake burn mechanism allows subnet owners to permanently remove alpha from circulation. It works as a combination of the [`add_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/staking/add_stake.rs#:~:text=pub%20fn%20do_add_stake)/[`add_stake_limit`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/staking/add_stake.rs#:~:text=pub%20fn%20do_add_stake_limit) extrinsics and the `burn_alpha` extrinsic. + +The mechanism acts as a voluntary _subnet buyback_ whereby TAO is sent into the subnet's TAO reserve and Alpha is taken out of circulation. + +## How stake burn works + +The stake burn sequence begins when a subnet owner calls the `add_stake_burn` extrinsic. The extrinsic initially withdraws the specified amount TAO from the subnet owner coldkey and stakes the TAO to a hotkey on the subnet. The TAO stake is then added to the subnet's TAO reserve in its AMM pool. At the same time, the subnet's AMM pool algorithm uses the latest exchange rate to calculate the equivalent amount of alpha for the TAO that was staked. + +The acquired alpha is removed from the pool's alpha reserve, sent to the hotkey, and then immediately burned within the same transaction. As a result, the circulating alpha decreases, the AMM pool reserves adjust, and the alpha price updates according to the new reserve ratio—i.e., more TAO and less alpha in the reserve. + +The `add_stake_burn` extrinsic is rate-limited per subnet. The subnet owner can only call it once per _tempo_ (once every 360 blocks). Attempting a second call within the same tempo for that subnet will return an `AddStakeBurnRateLimitExceeded` error. + + + +Stake burn sequence + +:::warning Slippage and Price Impact +The initial staking on stake-burn operations execute against the subnet’s AMM pool and are subject to price slippage. Large staking amounts or low liquidity can significantly move the alpha price, resulting in fewer alpha acquired than expected. Therefore, always use limit price or slippage tolerance to control execution risk. + +To learn more about slippage during staking operations, see [Understanding slippage](../learn/slippage.md). +::: + +## Execute a stake burn + +Execute a stake burn by calling the `add_stake_burn` extrinsic with the target subnet, hotkey, and TAO amount. The following snippets show how to execute a stake burn using BTCLI and the Bittensor SDK: + + + + +```sh + btcli sudo stake-burn --netuid NETUID --amount 10 --network local +``` + +
+ Show sample output + + + +``` +Safe staking: enabled (from config). +Rate tolerance: 0.005 (0.5%) by default. Set this using `btcli config set` or `--tolerance` flag +Enter the hotkey name or hotkey ss58 address (to use for the stake burn) (default): sn-creator +Enter the wallet name (Hint: You can set this with `btcli config set --wallet-name`) (default): sn-creator +Using the specified network local from config +[21:23:36] Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:91 + + Subnet Buyback: + Wallet: sn-creator, Coldkey ss58: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + Network: local + + Netuid ┃ Hotkey ┃ Amount (τ) ┃ Rate (per τ) ┃ Est. Burned ┃ Fee (τ) ┃ Extrinsic Fee (τ) ┃ Rate with tolerance: (0.5%) +━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 14 │ 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY │ ‎10.0000 τ‎ │ 0.9861482403319707 δ/Τ │ ‎9.7681 δ‎ │ Τ 0.0050 │ ‎0.0001 τ‎ │ 0.9812 δ/Τ +────────┼──────────────────────────────────────────────────┼────────────┼─────────────────────────┼─────────────┼──────────┼───────────────────┼───────────────────────────── + │ │ │ │ │ │ │ +Would you like to continue? [y/n] (n): y +Enter your password: +Decrypting... +✅ Your extrinsic has been included as 6324-6 +✅ Subnet stake burn succeeded on SN14. +``` + + + +
+ +
+ + + +```py +import bittensor as bt + +subtensor = bt.Subtensor(network="local") +wallet = bt.Wallet(name="WALLET_NAME") + +netuid = 14 +amount = bt.Balance.from_tao(10.0) +hotkey_ss58 = "HOTKEY_SS58" # Hotkey to stake to (and burn the resulting Alpha) + +response = subtensor.add_stake_burn( + wallet=wallet, + netuid=netuid, + hotkey_ss58=hotkey_ss58, + amount=amount, + wait_for_inclusion=True, + wait_for_finalization=True, +) + +if response.success: + print(f"Stake burn completed successfully!") +else: + print(f"Failed to execute stake burn: {response.message}") +``` + + + +
+ +## Troubleshooting + +- `SlippageTooHigh`: The final Alpha price resulting from the swap exceeded the `limit_price` specified in the extrinsic. Increase the transaction's slippage tolerance value or execute with a lower amount of TAO. +- `AddStakeBurnRateLimitExceeded`: The subnet has already processed a stake burn during the current tempo. +- `HotKeyAccountNotExists`: The specified hotkey does not exist on the target subnet. Verify the hotkey is registered on the subnet. diff --git a/docs/errors/subtensor.md b/docs/errors/subtensor.md index 29086627e..e96df4c61 100644 --- a/docs/errors/subtensor.md +++ b/docs/errors/subtensor.md @@ -328,6 +328,10 @@ Childkey take rate limit exceeded. Attempting staking operations too frequently. +### `AddStakeBurnRateLimitExceeded` + +The stake burn operation has exceeded its rate limit. Try again in the next tempo. + ## Registration and Network Management ### `TooManyRegistrationsThisBlock` diff --git a/sidebars.js b/sidebars.js index d58af6cfc..a9aa95179 100644 --- a/sidebars.js +++ b/sidebars.js @@ -232,6 +232,7 @@ const sidebars = { "concepts/halving", "concepts/mev-shield/index", "concepts/commit-reveal", + "concepts/stake-burn", "concepts/consensus-based-weights", "concepts/bt-logging-levels", "resources/utilities", diff --git a/static/img/docs/stake-burn.png b/static/img/docs/stake-burn.png new file mode 100644 index 0000000000000000000000000000000000000000..378be51cdba86504fa71b7c419b877348d6f52ab GIT binary patch literal 28259 zcmbrlV|<<6yDpl>w#`P3-PpG6q_J(=Nn_i#?FNl)qp_1S)A#+av-aBOeA#<`7{7=2 zcm{4=*FD4JWJKYhv7v#0fZ)W%gcN{)Kth3lfFB`209W8SDZ_w(zGTTsDG38kAs`?j zAt7L3U=R=x5fR}rFfh>3F|n~RFflRl@d*hDammTa$;c=uC`jn&=xAu@nV7z@v9U2T zvvYAVb8>R>@(S|tv5AWEh>D7eh)9Tv@raA_N=XUG%F0ShD<~+4Dl1DUD=RB0scUG+ zXlN*CXlUr_8tdsPnwqK`8XD^B|FE#owz1K(u&^*Qv$eI=clrEzySSQrd0BdSdHMJR z`S{xS2iW`i`UVGwMMQc;Mh3*h#6(6W#l)n<#CpZW`y?d##>K_O$EPPJ=Om{DrlkjG zWrwGyr)OjoW@ndV=S1Y?M->*u=I7_<gpOAx|^H(np?8Fx{JEIyW83ZJ3B|ady0B`i-(3Q1_uZG`hE=zOb?G#j*M3QnyR0g zni?6IpO{#lnr@i=-Mp~awz#-BJG;5Cu)Da_zOvf2w%)V4y1KMxz)F`J9uz7 zvb(#xy?wc}^XKqr^yGBn;&S@p;^Okp^zGf;&CSij0vZOV%v2y-3MgUmfBQqs6 z$NyXh`T~&Snqj5bE3-?F*!e;&!riD4kRyg`uQpQ|%kEp^JFlZ6@Y{7o&F-v%si@tj z+mM{U&=NijulwQk)x>j^2|T(|*>VZFgPs+1)6iBze~_o=jO+rJfeQ~WNY}dSN`>v# zg#qMDKZ7DFlJgA8Bpo{nC8Z`s>#`qcEw6DPVXxCve?LgS1dl-*x<1Dz}3aelhXWhotphlB-Tp z@G=3HrIi&afmu=lDXzMu=x%ED{dz7t#t6>{E+9Hq3q~P+D-C5f1G|Q8lM9`iv4^s# zbZDVm9qEn#MnIz9e$;=M6!21JPeOk;k5o^qWF2CT%4I5U%R5FlCBVBR} zHK*uW94WOdTLZU3wXz3irAqQRqHR=acNWFThbBmvj8Za#N2=pTJ6AfPRN-`h!19!x zYij=X(lE*M=!~27{l$H4(YI<-va{wHPnwXs=2r|?su&oilk{pltHEOQ7cc9WIR|yY zG{k~Y1z?Y#Q3~ZrZl%5+{NvR(KrpU+d#OBt~^Dl&u{^6m7O1^*w_5Zq=UIYltMC2I1r!zshX>N)xZ783D+3TNb z<+ddCl0!NU(p{&r!LRmRk$WFMh&Qa1Gh5tQJlvPvoUm^Wi7tSlBJQ*_H;%Z`_!S0J zS*Z|il>)Wcf37L9j9O08;2SPRcc^zF1tjjzMl#(6UW9S^(IIVg=_>WRj!m<*6_(k1 z4tbn7oSoq0p1%Nd!NC!baG*W|Z?KH-ZeUwRr^0?p z=G>d`fAlv~t+UY#K0jLN!m7I3bZF8L<1O28P2f*&f>1B^<`#*O;BBnOGD2U7?T4jZ zYmG(pf{2DJPuY%1QC}j&qsEVF+A1^d@NhA5!1pL{>;x#DEBrVg|Mv7VQ8d?rHa?6> zi!|I7wk3%4lp?jKiU>^i$SOsFeex1d+vs?N7Xr9ZP7SzUb9J4EasXdRD4dcO+*{j0 zNEW)h@O5TUkdUhM{s+TIJ6CFd9mw7H39Z+bx3 z9%0h3o;2gpj!Hmzx3C2zmY1qYPIajKk$_^7knR|Dj}l$*d%`OTMb>%1NREy0V{q|Fv-b|PI8X|x?P_fTZzpk^ z7qnPeP8d$7)K=gP7wQ{^?{U6*mpVljEIDu0G<0f^x1BO-7q1G}qkbrk74wc}?+1IU z7*B8S)2gV;WslhXaX>8{g@}1D@K7SUo1{W{{{fS8lpDI$dIyM%v{^8e+HcF8)9>Kk z&7v^{Uu2|_0)gd_{*RgrhUbF-Vj#_ElOf1i?hHAh?T3Kky*O#bahK^UaQ?OckZ{bm zqd1=HpY5ui9uo3JokU_bq&FTy+xcZYE3}-uhP~$~0*G|+t;Fx|NQyhFHmzO)kUPSR zDni~r2o%F7ySMJKh(aMo)sO;Q)Z>l$o2MZ8xx|LTDGt=**I53Zh3?Yb+EJQ;iW3Z@ z#f^5rfF3&;RfJlGkWsFk{paQJ^lzg>9&0=#pjU)g)OjCu96kOc5N+!y{K#RL!!G{2gKkO+{;L4>F6ybKy402+l8oT#~n1N*;F(4tfLh&7uKDSmgfGkT#nN zLvhk1x^gXElz5DA3o@vwqeJb(Fv~`flM}NqG9+il6JUr0tFj8V3=7PCmI>Q zV-@=_g`7m>{ZV;G-7nfha8-;aDhaJ3wsLE!7lspoU%qA@Ov8M7TphEbd62$3zhUFGrvsG!6 zj=Wjw;K9BDjy5BWJ=R{Ku(5Sdn9z$+Q-pdN)5c9G8xVf<^&F(Vg0W`(oc}Ay2HC4( zGsK=5qnjEE^9KT#X;&(g<6Aa9k(PZ)GSxFl@)4t7heVlpsQfV&N&s^(A5Abkq${$pHGQ$Nb7qC)lanMe{>bw_xLj;T_Lk! zjDV@~%B4OG538Yqcx7BXLdCCiyYwZ(lIcO^zXApW{c`Ri>!RTKylzuZ`Hbv*(2pHKll>*Aq2Qf%9{Pql9B}m-7fy^F~B)1LWB9AqB;hHFTE69Kp@`5;7;W z5=+=jvfi6^2hlMg7T_3Fg>q)mlV$ZJV?xftF{%u#T&5-GnRIEM-eb8z=|WR`?Y4Dx z`b(kJUUap{kv`~Wbj+0=xffmzy{zMt#=|ix4Qz$-Y02mbE%MR|1+>rXOKcL;#w<{e zNFntbhzsb1VLHDQbo56)w5uJzykS`*AdNy}Q4;$!^nGpK`Jwu8fP{B&%GW!B~QK7YL&oCjPgg@JJ$a1rC33?gym5xH(}O|IZ=QkN#Jj_-SmyK^-#_pKQr zA|c8Q6S+{B7BE>b9_uf`%WnlR$T}@d5P(H{#qR{ZcudE0P$*MdyttS9;;EeaFvCPD zFLZoE4KkFnsW%@jW~@v&YdOvS`jJAl9T6UjV%$EgJ5vd-tvA*G9-^qxcrXb;@hIEh z&9Qh+MB1x^)Q?l}>a3q8-lglADTTy#fHUvUi6s+@KOEGdkY^W?Lf07WJtNYD0a{Iw zcYwTcXM6f%TJR5VP510M!;)cjXgahmD58P~p6lQej8&?@SIS1s=j4L9nq(Aj!|UI$ zklnS^9vkPqh2aOt-ehz8sv9x^_{h=)^YT+FNM!ucYro>uf2X@7#rc?6l8GEAWsPk|OoJ|4 z=W%FWK1end&&YFlQT`J2VH<{ZMJjpVp;ah8eT&RpzTuFx_ymIGJil7&l{;m7hvam* zhjncy!TQebe$u}Cz#7Y8z8)qT{t!G8bI3+w3a5^TcX_kv5F=YfeVvfRs^~UDu#2Zg2c}nhs z#@F|W2)VCkWid8{603d!;#l)9F?EXmo>9{LL5`|szV1QNu;+kk#11FG8P8T z1|WlwjL7%_$=AA3_v}|2u&A{ZS?*8G6mRV*&Ip1OgpuYp(X(J4->WP7($Zi_7Z6^2 zmmF{)0to)ep8RJ{$AIvjw4Q|~?MdR8-yyi7_M6z=EJblu0HoArm)9jd_a(J&{n$M$ zY>1s{(7hcA0v=VYMLCTW+#erPDGkOnF+d(tcIh=GC&!(vGEKH7{@pE?w?o`use1Gm z+LNv$(-Y@-jffdg_%41MlW;a=`6BK&gB-{4U%66dRv(->3E-XB+8SR$-@$lYha3in z$TC)%_wjq)!ynz%{C|M7W<;?Q_j&I(+wnjOc$rl|b2{53t{n&JO}oi!GMrG_MFI7t z-4~0Mb|1rIF1mZiOM?jMXSIZnkTekg+zlWU>vs0gqMY?gw!IpGh&pg$^LgNxn6wT| z5}B#FcCduWZoUZ6z~r&wOxJ`LxgKD%+NY_rCD1J|TtOgXf zW$~pGmglJj5x<5GQtV^Z8_8^{CV^qQIn|nI87x+w#!}bs2O`E}&qE3+Pcc?VB!s(E zKIfdP9@T)NC_k6SCf#1clS`RUt_|B*3gX9Syp%5l_JV;eUYU72yFizCNH&=|kVSYa zz0>Pr&!jF;myC!=r!R_X>OI>qPgk29PhFQs%McMCV%Dfrp0>|jaXyyBEA=n;At9FE z;qpB}$fc&4Uj*-~W>N62b(RnJ7To>QEH)OO(t=!gFz@7Es#ge`1OW+!*t62tbiU#( z*U*_aU-ox4PJK|w-qW+##33eJrHgKVEMRI6)zDwE=#kn0W9 zZJ~xI9+t%pIud;Dx|e~>o#BTGigJ^Czgj`wqnJ>m+R;2p|;tD1mtepM28US@z;CO+SeaMLYv!nmz|R2jcRR&dm0!sNUS z2oE(%S8<{?;i|<%-5_9!kD}c*>5YMf?b%wkKCr6N-Zu3HVqnE4TF#Q1v zY%`fxI5rt*tQ~tbH(RN=2xtCf+g33DX~;FkTT-r>Acu9?qJX<)x|EoQ(kMyCKFldt za&|9C)med*XiTnI#sD(3!gJ6f3FR6l{YL7njTKgeOTsnq=nRfVl8eWrFA!?;4_++F zu6n6dwZ#V89qkL17A7vBFVyPLm#J|@r~V}6L&tIxOz$Ea@~-}78=akdv$ja$uDy+g zubU@TcH(KAv~EbX?4H~r8D|G0}G=WRkB@xnNr z3a5kdd1M`4ua5OvQ7Bz&^IekTbDn6L8Qf})SNVXLV770F&l`$K%b5g_A@5_Snx4wf z;^x=zBux9C2$pZHx4L`Zv(ZM}Ar;|SM{(*;mb+-(&L%$wdpZY;@J_^~kp$1LU2N=) z*FTn3`?IEXzFlxkV8Scz6hZB`f!OZmKG{p#Cv(4hNqB#!&He1Z@j?^NAwxymKfk+k z0F`SHYjy#*Ogp)V6*ob$<=7&|>-4_nBY7mkdv@$Y7Q}WHg+f@1m+CBK=g+_pIs^P}J9a++E?gA;@D3htRZebqn zV{(yt{;uPJS;~8Fm&u%`JI|(d8;Gk&{GN7WksxOY$3&Am`0ui$*))#YX*faY%-bxG zfDEKGu!NX57nUNBA0S)5uNZE+GcNJP<#l=i3*J`rxe9_?8|6@s`~JdWWTdkWu~%p( zZbJ1POls^h_?k$wTFB+kBc~3Al1#O{eWy689k9)yb*sYyN@kCTNhHi|z&Oi9u_Jk5 z)hTpW8OoEAYv~2ua3dkRj?zohP{dqKwoaOGuL-~Qlu;#`(8~e|xetV+6{6@nd zsp(YWES~1==I&x2u|KXF`tq;Xq9U(-(MbkX75P@-3lEy6>Ipf_!BpA%;hpqE|GWWZ)VC!-s#RE(N`Ut{^ zK~)8qZSdM%2A$l4Z0zxG;U}M$(B;#CR1=7;Q3$tgEySR0>+Irk)PXFzuMbU4R}EDa zi7IoGERvc-#%4nZR zaGNx$LxP)!i_~zcPu&W)aq{17;BzJms~7t#EI7YCaM)?iKSM5p?%Trdk0V8J)M;0y!s-Uah6*=>!km#MTVs|F zgLpUC8|lLj{tZ?smzU&S*0jGe9$;7lEq}6t%}Uk%^8fDnrWun@+^~4AKQ4&tlDsM? zCJ?SVP*tm5Wfa6-IeUI{gI!wjEP!!Ea?xtD?olTWGQ5@({Z+!uj;-zZ9QST5hQ@n< z`=Qc9metG`{~1!?OG)T|nhBEBhg@3}JU@!g=!b!nPNdI=ww4qXLHXMd{s%^Zt0<(! zID^zdK6Dnf^tT(-tCCgIcpO*R$Yq?`2craVb{1hoXg*<~|1{&+ZGW;bXX=KKrt84@ zDRNAUi*^`i>Y|8J@}Vp1;3yi(Zs-N$l*5!0byN$nvPKvaS@=&!ehxhv+)--~Xpv{G4SXQ&AuH?l~h)xjDsazAh9?ijTqx&MAG?+ z?ksTpf)_Kh*E90wh4J?p-hxpDL57mXm@wfLF|d|~7Q zqc0VaT4uzp#riz|;fT|o zI0|8ok~yBo^!HoKFWet1O`em;hbOIi+v;>uuVXW~9Q_KHp<6E!P10nth`Z!@Y3Z6- za91gD%RB=Kb&x^GE1OT%Dpl2H0bfDl6QxOxjeV0mXz6Mtd?vr#N>=wvB$>YVT-o*> zK9r0#G8+bGkxs>9-u-ub`4SG5pI5&0_?$&lgMFtw>}jZUKPj9=v#L`6^|QoV>{aL2 z`yvc%8h%a>%;i|M8IRLCBb$MZ1Ziw`UY30Ur^dx8fd(h^p5~sVlfqeRd`t^vU&U(a zbP&&*0x_c+$6qBLY%qh~zw@INgj2sV$x%W5na@%4xA8*O1Fs%7k#~=9V#~!Z=szH{ zX%x8%`5lH+YnD>5EoAn!$4Wkw)5ucmK1Cz#`TW9*BHn}DS(sUkEb??y7RXP3&lP@1 zC7|59dWbE5O(AK5ei_=Wa-G}A<;NMkqzcQ0d4=iS%E+j`?5%{kfAVhL9!ND!bLlPm zX_a}<(iSyCl$;H!3wve@QhG4u1KkJ8F*W}h(e5x>Olcw1A_j$UNw1yo9!WK0%^mV1 zSsd8)hwkP{Vj|!A&(X+MD!%!vB$#EOZ#A@9)X5DpKnK`-20f>qid#Q;A#s^;BJQX< z{bn+|OD;+#sqPl~Q{j<$cb4dT4`T20C8d>kii2WY(T9tQb{lCVy|X+?o(i9vK|1hO z%|{sa_G=Kdm{pSGxbsA|pxNS2gO2xCh`#s>aKOI7651slZ5MGAZg#`znSLq0ExQA+ zy})Om)&kpeo?h{juVQAz8^Ekx=wp^j7aWR_!4r7x-I1ft#7fnQ+#vEGxzDnk?Wv{C z^Cp>;_Kr&UngO2DY>g!qInYEka|gT1lj(P9siRdRRxOe8aWEDHvp{zjre%rjW(xOP zXRvp-Jh`_Z;cD2UMkIXltZb16>;g;kR$CE@30**))G;E9X z1^S3~MT_Byw)IrzBy^XAoF6uBLjSQw0r>QGC}396nDYWjLNr8@t|O+%W#(d&-jawi zm1NmA4s4AkN=cMtzS3Oam7HeB41rMJ!5c(tTgXrg6b77dhPv)L_dHZ07Vviae^9g`}CH@+~GuLs?~ z-Z9j*Dy0@^5hNcIp4dg9N1jh+c#E~qEaQIj<5k(G&UC5ZS$b%442s;tTxNVmSE0gr zddo6oQ8be7R(DK44`CCZI4ZuXTPi;u{UL`w2k{~WEqkU|ok|_ZCW&mDbZxodu|V=e zeHT()vp!f^Ot@VEa1WJN@ckUp!>qqh!$ z>h4K0kY9_i=DwrnU=#c*2fHo@w?=v7|j_X8G`52@9T&m7>xx_Lk=m z#Zm0{=*H2wUYj3gm3dMTTEMn%Ep-el=F5RiIPj6EEDVaDU%4~L4q65DdNR?&dY{y> z-e;PtKc%hVh2n8ns^)w1!LbiWC$jYErZ^mRj6PE1ewz!o*6d^G9_prYL-k!AXqQ$1 zcUEReC%*WsKjV7ZKek#UxHdO+8o!M%|CE;T`^n;{kF*;Ff7Lv(4kQal+U(taSc25; z!{QCkY@Pl?-S?>vxyX6gYij+`Cuw90F@oS7MxCIVI=7#!WuKSK!omsb$^KEGV1^I3J4nC@FwP;g1p3wqUz0lraDrra1ZM)utO z>j(a)Xz`#~E33tZCXl-`#Y@jqqB>ROq_H2dS)gcf1{YbISLN$u_Gf=;-)_2;ZZr}l zWqX|@g`?Nbn7l?RHP(JB;DckMJ&(Cj?~S^DjGN;Ime_UthDqj=gl$4+D9I6K8qbs(R^i#n49d4T;?_L7I|*c7B7 zJ{0%rMb}#U_O;sQ=#(Cey;-o7;_{norc#!v(!%OcUAEUv@dxvtIizOUc8|JIGF;7L z4+QXBJ7D3+_MJB*&OoA~#5peZyC);jRlT7iE3GDw*QQ|~AdWYbeh(qKSW|hfuhZv6 zBCA{-ECnzP75s?Mwo*tAD`!L=IhY9vzw7J(XHO#EBmOzl$G7tU6$8$WsV~Ce;da-e zswrJsV5{^gh=Y3&cwCP`cvJ3__q;?1`5p}NYJ8Z@*Y5DTEZtnnS^n{ztEy7I;M%?W z@d}sVv}uV8ZiB?#Hzo!WgRQcTQtVH}Nyd4?7oKN#xlJ0I_`q9Up1o%l;EZ=H*p;GG zYaAXN)$T|eoI^&ZO>4dk(CjpKzq}{JC$|)-N#Y#}@SOb1I~2ofrEUt=sYH)9TSB2A z2Cq3P64aYiG2J%>=dOKkU(->Ut;|*+&MG<;9lbOBmv5-A7xL%EA|VT7YjuT%a!dzi zyU%>%U{#QMeG7)JV2;Scs0K+L zp1RZ#pU6A}HRMVhuX;my%yo4iNC-qP-cI_?g(9YYB~;sxD>Z(|) ziSAGZx_D$i4Nv*a%ka5j3Jg3EM25L?-mfjecL}#T>;+ z)A~My&e`YZ3wG1N(0puPQiHq})_n#p;9J(ePaoB)&S1%of5{b$Wd;N!SMhxLb7VZf za$D~CRU#9cG~aZ zqR`K=T+P0OaEpS8Q-qmUxz5^9XlRpydkt~%nZ0Z`((nZN2;zjMB5qvssIEPwj^{n+ z&WV2%Zj9|-XbRK`tVbw^2`|#ypLu~gN5zzNd{H$wmN^Za*w-nKZ-rMG#=U2 zW0eha%gcJ4yqOP>031n0hT+R)J__TR2jtKjk8GU-aoQ-eI1O-IUqQ8UuPs!^P6!}4 z^}HxhN<9{Uczc{8I#9dGey*HTQppKs>+6|VnbEGB?Ib{!QY6%0S!f@7Mb+it0(W#i zkRa$K>Im<}13j9nYIc7f#LO243F>Fh{QeA_5HP*zG&IG}XliH|(NY0^VQO(w$O$MLCA&>jdBt7|+OMaSURW*orgy!mw(&@9tMNgSIejD;IE zS)Q|2@_U#ip@5Qx04v6~DUJo7`@V#GcmG}?f$+Pjs7&F7y13uoZqpuzE^ ziTGbQtC^f50i<1NZi4AS4vm|7r-F?4ux%JG&|IL5G-61w9OD0KjNv~0@4wmDr&ruS zF}xQ!<6i#X7-!rFFS`WZ8y-Z2aE5;ZIYJY4l=WmYU6AQkzHGD+> zTahKI8f-5NxJzqQ#>(7Tf2kD`F`KO!B9qRQ z_x(rgDV11$1Iev8r3Zg89@EuQSz)f(w-aZ8l-sVDcE`UI<{H}w?IcfU786DSlMmF* zrb|uMnVOXuVrx)~795Z+XSUb1sjmv5yx1Gt>u#wCbl0v+pp20ed1#c}x15TYmhZs0 zqWI_QbC`r9b%J|W7?b;)T7C(p#l*Zt>`hVX2H*copw6e*V*=6*jjvOy+={4FAMffp zRtGL7yK}cw7H1mN?Y(XrRty;I`P*cG8COWzS@axAlgzd8)@7yT!uL z<4bFmN>_*N+2~sg1O2XD=*4X(*ZCg0WaGU)*$&Qre$XZ*Wg|X+xrUCty_e$5#1Xok zh*MZrsSC=}^n>H3nl^VB;YMzP?%8fH-FM8EoHNy+Ail$h3L7ZtrtCf+;0en*q-Gy7 zfd>0><|seH9v$C=pXO&7wj;dt+k43pWm2W0)8#zv#Cslo1rpSw^D^Um4R!hSU7q#{ z@{84E++hz3#-snPTvceF#d$?Fo&qdvd!dGoKQfsk!l?{+X@x+BSD& z{tiKV;XS_BH(JAIcF4Z&SMAxh%wwV+*vAC5Q9Mn~&@Hioiq zx2~GM*>$#r?`ZN~7y3Q|_R!F{rRY8Miu{BFD#DY4Q=_c}PlIcJmWhA3-c%Ne{>i$7 z)L38_Fl95R?CMsn4hb_suojKoU&H5f`Om!r{O8O~0%FK`-~(!d(>QC#KkAToi2RI$ z6`{FuF7ABXLa~uylsiBanQKw-YF0a0zfBO9`#lVV#<4|@ELNyT29&-h+Z5D?{u}9! zQ~sAZ`7|u-2Q8)+_lR#t{OeSFo=#8}mN*F71ab<+72;=l4O;037inF^k@lSUR$HHzjnA!ks2!O0<)sP8*lo*d#PH+Sg~D< zP@gS{AeWy=Cus^xuEq%JHZ9OaeC5Qav|iRQ9ILs#yW%%yvW#tv%TPJ-!ZjxgjRiLF zI5ac8(itF$1mB0`J{hCU>iAG}BFEJ;)GRI4@ZzDC@b9T36l(R|5MqUk3C-V&SRHu+ zs=mlB*N8|!h>PnRtQhGj1u90rp%%C{RyM1;D`Zn~OFWA=L7F9`LZvpV%v$5X66Y-T z0-B=kJeh2)n-%ts#&(Ro)vAcs;IRY0?6e0ZY{BT!WV5!H@AA<)T zrv0aSmdmv^9lUiJT7v-0CLCBcj(R3d+kx-BbCU&PA+CF<5(SIB9qHGD&&1q1$Ns^$ zwm>NBWHfoy2l_%0heo>mTBz9^XAfbPZ`I^z4TgQkcYC|)P3}%+DBYNPl@;mnGg_M` zAThEeq5Xigkktf1z6+X4HQe$qKojlP6?BNh%c;iuEL@3=@%?4qY1!jLN!yt0&tyFb zz1nwG&k!Rk0v>+#?3(vc4xUmA1Xwr0q`LJdrT+Sc=2iWQUBZ3UoezIBX{ zl{V8qw{`x4IE0+T>hb;k_;s90pcEN!HBLA2YCb1SGBWp!q=SVwgSr>A3@i{1hA7vS z*`8r%)Txa7zl^C)VZ!&EGg@1_&>FuC7keOHa%2A0jM38LZ6rLP{&bUP09<3wG20AH zwkGTp64No(vmj|yeeyUKWC?_x!sTZ}ggvB{pxg`Y+*|jSRC_>3J?hU40#bqRQB)P) zpqK@DJPBqsZUF*6P>3{O=Kd$hTTX-C=lvB!gT(v8*|#~2*j%&rr&b+yQ0<-pT2gYD zIe3@6nf$+i4R!Jk1hIJBmaRS6vy}SR8SsOwx7q`H-P)l=VSg(UnHkbb&+^B$`j>oj z&QbQJu6YRDY!Srb<6i0=KZfhTSelA#UYm8s6wEKv&D(|F#2ymN_FY)%Xw{gXSY*;{ zHOv@4CX-+=Ds)d!I26RJfxYq%zHoK9V@Z8C^9WVXzNnr{r}n~%61;xKhdE!NxSPAi z68yLYDSF&!luQBZCOkh#I-0zzca(~3zH?BY=DwEiDeHg|r2S%Rx*kLSfv>ToaRfeed zO>@YmE6H&8+hodP^1-`|&+Ed06x(J?{R#i=!Ltg1t7lvBzgEz{Us17^h@uCD<0%`4 z-yKmDjX}XD-YSH=4ao$R-<|CjC2=ceIAJb6u^5{k{>($Put>~kPClKtgG3^!uXrC$ z-xBxZVrRGE?r&J|Qyw;BtAS-s1=g9{U$w)+GJ}I2 z2(~@Y-aGpn^&Ewg=WPPv29Sm1t1R{RfiPTxJvd$<3%qU-!{x#G2M6X7$o z34t0()Y+XbK#?A~clZb9ZS7Wm^!o-1NgKa$aFGjCH61pPM7x%Co<3jdwdu}Ivhn?$ z(T9*Pbo10AiR)!^um!-8bP!8$Vr@?E3>w9xtC;O|ZQO^q#9uLdItdU_8GIUmqsY33`lktlPZ7$j7rC{6Rj0IdM|_g~HBKsvOW#CM;=@w$399 znww_yljSo&0<#VSrGFMyqwPaho2gL^oPlwCLteC(4BGGVhvYOBgrkF{TVN zpEPwphtWCLuX7H$;}+l9wbWSKNeGlgM~CZS&&xH`6FHpE=|v~Y**d6E>7^F-DDw1U z+r?f001gPbF#51Pb#(k>o#~&U%f~N@{?|~%Q|^#UPgvS7uXbI)3gt%nnW6Ffb{-O1 zv#>b-V(aC-v3^vLp_t#xB$WD=4s&g8DqzWPLyFd6%Iyz8xniY|l6h$=F>p?DPh?`} zg6j5-Pj1MEIdH~e^sYxXoyd}0j}24nTL|g=9mN&K)2?TBXz{_}mGdNOYB<&44cv@# z6m8&I(`M1(S-PO?fuQd_W~t_cK##-szFISF$?mV!HcFICN!<5$`VFrxR#mibsGHie zxZ$J_b=uX)g?XvGHt(3@BZ3|$x{hO;LGAi{MVAt<=~%@ed@6ruuZOrfjrfcwqA!sY z`~E_K30UIaEK{Hp4N%L@%gY93i%??{Ca0)~^Yx4f%mlZp)Yse z3xvrEsS*d*kcL5kzRG!C-`IFJ<@1%m$mKA^-iEMpDOuO`c7BaT7cbilgM;%gHG$hs z{56d`(HaV)|G1W%DmM(SCqI$`3Rtqrc(&Bnz=b3@$##jDBq&0iXbem&Zoq%;*Kv{4 zJdnjR<=66^(HGvNW}E>sSfxt!<^ikLJJgMOeE!d9r?-?c-KRv&yiy0w))TY`K#K$h zgn-Q3dJ?Q^s0*7^on8wsmo%C@Qf}V%|Mlkg)6vE?`&)f{u5b1hx-W0_yjI^pD47MD zl04jnt<&&`JCgy`&6rPMxYrQA528h5qa5T#D)G{eP$+9MsCGA<_1jJyAGocuxUyBg z7S5BYkKmWQnVYDOmO@&p5ad09F=Ja9-?^`tMCFm@-6Pge0o!u!7`x0j5kkeR5 z6pkz-V>$_R2}kyhR$&rD!loKgJzf8vR&MV;*{lZHik?ab-j^?JU0eC>y;)Ux$>dZ} z_MB4WRkCV-O8KuUOeg$gv3wtXWvAeF@C=mp>Lvv~lI49G$y-)_GBTZAp1L&h;`Fqe znMJ^Gc65Zb0p@k#lVRnf+@tu|Bf1h$Cg({zkt4l_#X|8il4^%BT|MeUd-2yxE|HwsMr zOuT*iiVIa*DuQ$x0LK(X!fvTf!U_uJ3a)$YgmW1N4^W!k84n?Q1|uQYBGQ{I!~&P? z4C45RTncgI6C(eD7{hSPm9M3o>FYdXvh@>yKObCdr4ZLeBvBJ@p)rtjm`+B+z;gOK z048}q&s3D@nix%|SgQA{sEC|2*S2zn@WtZyxS=%XJsH$M zVkGg$I@)g31#6*Guklb{{u^L}4qqVIv7SHzTmv9?0IsqK|DR|=pNGK!3&7t1Acvs; zUFo&CppSW?LaGobD8I-F{5Vz3`IDfk za$j|K$f{7YMkj9EF+8Y=={ILTT+}^cg{w?vH|opNz7JyeYr4jTB90#Jf3M_ z5xVS28Fux1@x;mikKWG}p1NqTV=!s7Mq4e7EDios%!aIhm!I*a7i0US6vR7_C80`v z(O$c6arEYmMETL1P|zwB-121IJRlQ*PBWxTK!0 znIpjj?mwlJnOq+(YrRPpw~6TAV7BHgejfmBa#12F90{}eVoBK{?KD2apNoj~g` zC0im+;0fH4{3?@2bpGWK#bEm!T!kQd{uHHpU-+&Ck?H-^^@jg#sZGL7D|?I?ne`^@ zBuZY)`#HmhJ%AYwZQOHTq=-}&{DIY52UI3H2dT9!0@c&TC^ze?Ztv0UgVXa1IN~1L zO(T-F)iCt#wa4#3ia3|>*dM{-h_oXS?D!p-Ch#ZHHyFM5bZQJ*weC4``=69%C9fTM+0M2wWK%pO} ztt+=`P;ES%4tdI4k3|Cj8HqOLU=~<*_eKd3TWKtg{9%}lVre|2ubbV;`6t zQd|QP9c>?{V9005Ie0!S2SU|fi0-eNe!l&$E?Ud|r#|Cvr3NNkIBf^H$Y-+q-wyw> zYCRaw4F&^=Ul4V*`_f$6!nshoRlJkq%n=s>V@S#*@6IYe4?kbXRPlvGO|=kb*;#)} z_opkR{!yWTamjjA#Y1q6 zpdvkH{N)#yXHka+oDK(*Lmi!wD9m(iFj3cDb;2(3)a$vNl%4nOXu*Icj9v zMz47+lzjP-CQE0^=dV_Pqwtl647w4HfE|d3r4WU?Na}A6x(DkuT=i3WFSUh` zNqdgYI0}e4qaht)2=zEPk--oi2shK5;2qo!xPy2$3|~=1Z)9FHOBb8dxzUn%Y5*+t zIIoKr-8c9j&YuhYSj2nG{p0J8#If`KO+py}!?#6@4do#_k5SY=wub9vm@Rdrxg zoW^{P`C(wGpM=&8Ja8*KDlUsRzWq~wwz(PZZ$pix6MtEkEYrDv))FZywy7Q5105CM z4d5cU02oz_@ilxPuRu2O*q3cVp%@s4x0(8|Ni&rZI1Yu%{72ZUS@F)< z@Fk(4hq30)eX(@XX%50-C5FE=l(P#+910hdR4f|LDa{^^eZN|V9xhFHC4wQk*)xRO z*RnXe^7M?BxB5SSaj!*6BuD2Ro|A#EQ!JQEmH}fAJynF;%XcZeFKC{&zq?=p`Nz$s zc#UHNLdW-Y6f|`Ltfe7Zr6k{fAs&{gMBf_E*7#zya(=goD~E}5^We9^Vbuvx_O2MK z%8I(gV?WPZnfa_+bd9RC)Zha4e)ZRs3SKqnXxJspOQz5 zowijK8UBObpy~p-)XSYAsPr0vOEg1fw91mjPC*lSYfE$nB>*S~9YKU#kQxch#qR9q zo}gy+p?M|CsBA-8U;e$A_Ofpvjv0Ce5tS>71UXHoO+!L zqpj^NvYYjpu{iY7{d^v9Ba5ll0Z)*j;t;7tP8>$%9iD~1sL)?2k1Q`NltS1ubS%3C ztf9mF1Z*!M^QQ`!*bE$yK;(g;RXRweVx9iY}DuRu~F8gIYQ;0ZwZn>P(Ld zaPJa^{&(Oyy7eaB=o$q;|La!n5H(U3SV&XqNcmn&?NXG8TiAB-bQi0QrX)1r0Vs%z zW%+i4(_FQds$idZ(suabvZ@SlHC&<%g#zBSKr0Xg;Xqv9CGK6~`y`@K4~P!TN5)g# zo#c@P^RD@4<7zxhXVXS6q}s|T!Q$6MkRxgLyyva^#;84aZEJT+@ydd(iRRMWr_9a7 z+cV)n|4}#qdBhrh`wn@n|HxU%!COLdnFJ_C%QbNox-x>c+9}x1-EX>({|kREjuPy* z873}#JNQ+ACPqy@6*%vuJJ%lSk~oWCiaT{?R)~98Q%SH;0>Vlx_>azO*HmzLgix}% zyL05X^O|KztrqeJF8|R4Yl~HHelsuTSAjQ0Y;rrnTC^7;gI%H#>ASk)<+b zH?;b!A7xp?!2#IrS-aFXZ-nIM2Tl*<%L(Ghd3~_Hq74RFKG5GTau4T2;4JtbRe!SRmT;D|f5zrsrZ? zm1ju-_YX)JAg|@WK8sE;NI3Wc=ZERYsq4xaoe*!xOGus$*Sl&^hKTKi7@J~*gonCD zzf$X6yHHX3wb2|5mwXZ5;(G|Kv5R4pK(}pLABI+m;Z{^NcFfgx%45W%%k3xiR_mBL z$obd*V|=p+9o38mT zpBkM!t&hxG!9-#u1HV|23ow*3VB={J7NkSA0^xsM%g^Nv|GRO|-}mO~VHfhX=D~)E z{@Z|c3Vi<;>%**ssZ5&>8}saVgimK^~%Gx&@WEcL3BL5-0o4QIjC(9HM z=<~Z2&{-H=O`CMBo%Ue#q8n!;^J~F6k~|X9<@Ti~){MR=&q;Bo>J;=bo=ue%?LYC- zk-xFDD(FFx+6++!JN|$30f6GwshSGWve_?G#5-6&@A#xO_%uI(4FLQ9Is8+L1-bv> zDE?Em`dPo)^F!`a-`f!3!U0@dw3IVv4kXX84ARfwxTf}^R`CveKt?+o-w2AR5JkA=A*bqziAMBuKCM=JwCoul*KR8IpQ;KN9ENc6OJ2(}NdvKYQOXL-AX{b?MaftR zdwr$1ZIMJS{ue~D#{Z|UuMCK4i`u3Y5b2Wcjv)k;?(PtzhwhY=MuwCw0qIb>ln&`` zX_W465WX|uz3=_rA1^;^W!ewb%2kXDzbmkpnm-jiDm3kFD;^J>1Fi#%8BS z#JBv$UgrmtvZ;S>3_hfd0GC!>3Kv9U5bs- zA8(om(WR+8S6y$J<5UUSpSYr8k+X-XYYkL??^+HGN+hd8sMH;6D=7v&w<4} zpQ?-ZLD$T)xIjnEXhkUKn!*k9ilz3T8n^7Pnnz%%{WnSfucYz2StQlpZTeqzBY?wP#vCxO z7xfcm(5?4DQ^^4uYW>)Kd1xEgEz9y+((9R&W4+x5k&QmT(&aVXwi(R^n>Xds#Pldq z9M>qh@ZP*P-e!%rX_1V2FpYwxS7sqnrAsC$%G)d->|Ewqy~-w!hW# z^B7|-BX&=f?$(frJhDi~5cfI9cLp!(o zj5Z|EsEe5VXJ}ErEKK5eF3+A9bIIH&dCVPflgZCx^tGJWW(jyLdC(&)rE>?~r9luI zDOF{+ypNI^vva`MWPb)7U{Rbr!rpTKc*+6~1$#(|vWd!E zQ_0o0?j)1n$Z|7N(=-UUKri^LKZ8rf_f=CM_V}N*gDq--{JSTUuh9{KC(~ z&2GyzFS5;EA>Vlren_Ibfcow|qzm|K*|P0_4TXnagk zn1N5E8s6s%ATv_x#e16UpfKZh4_w4I}v#<*YK%79q2ow_YuxK937%gfD(W}ltbUXNCrl zs^aRYetf|smevK5c(!r+OwhU`TqX2CwN%PG=0`^lrs0Gzn=EmPlUjMwRv(UP*+7{s znaf&eCBV&8&{wCG{LL)^Jo6G2a6HQOk?J#}@m@$3-KR7-0G&z%5UgFYRzTRS5RwaD zY)XVusew_>vuj6~%Fv?az94)$NJlFRR4DV5lM9Yt8KNeGau#v`XW=AkdbSKeNL9*a zU=X!W)2eSoTIze~m-t`90gG9}N&=#>ew8E>5L!C~cR5wjp?{WGoEP9oJ+d;SPAJ8l zMDZNp4fy&Pvm`t4x#1!V&`v3n-UK%J6>*f6YBI9Rx5wrt7J{<#L_H~NFuH{$PGOMS zz`&P1<_3XE!}a+x1v8H1C{dk~xz|&Ry+NmmjrtV7r5S?DMbaMlIn9WpHgL5t8%L<4 z-f5p~DD^`Wg7!*G2!7i7OTjlTMrvY)JdBrsC4UA5jMHHt!R2t$O$l0x(r^`zHa6+r z##oP?#I}y7t&jN%`M_833=X2o!)r%^ZZd%*?g5t&HqT7_l%VgdlBO!kRuZVQNo;f) zm$%=OXFTPc-BZ+;hfV`V*k|B@&Y?i(brVrt{G7^K>~c#JOTuz%Vgo})aLCj%uUswW zt#|=tOfPsF%s8JMMbT*-p(;y~w>rT|5*w|6$Cz#2(bGJSCb7#Lq;SMf#q|tIay%ei zi3o9QLhi>u0FDCcN5rh&Gw3yOV_5mIgJ>IN;0&jW>PTMDdI9Kt!GDv2D$?^QS^6tP zsMq`v0&0ZyR+}7Qhwf<)>jVSr?!0UKApTcVqqg-_vPj+qT+v*G17x%~0SAAhf1PP) z2=U==KZ=U}H#74W!$JvB=%w@`&}wRG(26?K-hiE^-{9^xHmY@)X6MzC=Z&F0vZhU)g(1LYz`r*JydFVyxl&Satjc+nXt^CHp=nv&;~Smm5VA5yr&VsTz_ zi9RI?W5oY*rBhe5JE|gEmqvzWod8CL1SOz;CRmP~wF0YPA%HafP3U#(>J%vz{b}vE z#F|M2-bK9N%~uQ;r2(}b zxU)`^Pi(59!a^DmK|>os%1*1@NZ`?CclBjTtCHG=YBZUsJ76B;izWoES#j!}SUqrW zJLf5>yP`nlT|pH{5i)%G5qi`wYRwk)xNd zKjGsuS0dCg%z<9Eag#l+CuJqkT>=s{lhhzT(2LNE-YV^>k>Iuwy8i`)udPRYaGE2#`2f}Kv&B$=R!5qlk7m>{ zP|_sj$A28WU(>ip^os(#Z67ASvO0SeGtS&BJ73d%0EkU#fv1BU-$KH8kp-a|{fC@J z==uYo7Syx-`|Cpx4d5;RO{tuq%>NFA0a2m;A%Ss3aT(!us72;KOX>?j=Lh(`!(txl zFlb6mBKIk##{mu%=)~#DJfs6KgoLZc^s;`Q({m55uhwKq{D(81Sa|4=L1$Zkp7i2k zHabf{2LL5P>CL|4X)P(1LOwMfM_@qj-4fN9)aZ#EqxTq6nFZxCLLr1plr?;*;XS97 zF&iA&l(OvTiE()kw*4t49rO(Bp)nO?PJNb% zEhqo;x#iS%vH8^eBB6j&@|^76?PAgRAJR~J%G+D~`*%wXhlX zz_DYsQKv{V3)Ym)BT|hrqu!8Pe))LLv5S{9VoP7Db$^9ru9Vr@+K}o-E@Ht5z+yVa zJMN9k4x!i0=**5@T!(@@tkR>fsqA1ekWMLd_>`HpHoaEV4KrPZ>wAX}&)D2nTmY_f zSQP<3oT|mdUK$leWXY=dkrsPQ{rU5l2*l6rXnCfvJ6X^-p`+6q6?b@YmpJwr$LF_~ zdzk7*PeXJ6#b7|Hxoqa%l23d=;_Yg!^kPCEDjwsjajS<72e&7D_hU<;S zl``LPdt!B#P*x+sqLP6Aq_kJ~kB-qO3&2$zlif9QIBacW!+g}Y8~>(5LAPfI`yTEU z`{}z97tMtYwgjll&KXKGHP+xN5Pz{xOdK((B1a2SW~>pJq%2T;{>Xf9YH}5-XuyBK zn1s#7ziM@}c)QnZ`%9?tCeCL`V`YzygrO)%M+uP(j~r;18cQg2vt+-_;eYzI!tj4A8&RTKC8*b!r=ey+k3G(+GF#(NdJ(lTFfF*b}O zO@pb7J$!#1()?Vp27#b3sRtMU&SQQ;`-*j9TdvxXl#pvj(aC0&=+c~;P!nTdRC`84 zT^80sD8Qa-eynC%1br_-H=p@($b&>^j|xp9!YcA`$apW~UDOweiYTkZ5*SOk-f=XS zvXz#Q?*;^v1uo#Tu>l(EjN2Ni%U0ty{||q-70BO&<|vQxeRZ09f-7F*L+s?=WNe3B z(oruZLMSsdaQ-9J{RL7lI^P9)%lIyA!h}bW=G+hxukSCBGs)w?!$=AZk6)~R33R(M z?UN&swJJ<<3@_oh36HJ51SVfWmo-_YnT0cz^fc%9onBY|!}kKIHRI(^mZ&J}+MgYR z6BV!i*dCvZ@6>;aoh;kp^W*jy?!6)@*uRNuTyWTH0Ua((?j+LJoOz~}#V^a7Zo!+p zeKpxVy{nV}0xFi29tsukmFhTSJ>O*GXRgzo6E6Ry#1ly7>`HlTD%;QTw?#whQ-aB(WHAksUMsgn98dm| zbKRBeap^EZs=kfERlVIH({GVR!Wztj3cW*RGHd96-eH$~`Lq^-+Sg=qQ)1Put7M<| zN)4^@-0?o2NWnK9YeOl44+vy6_B370u04;NMGCmODo8holeOTj%U(R+&=y1Tre?Z) zqHH!U>zMD^IV&ZzWVkXtX6*9oAlRB0|>W=UEPszUFxQ;pVi10ihCp{n*xDmJX=PO^z=FfPT`=4)Ds;V_p zITPNK^?JVhiPq;8UZNa&(Xly|%3aGP8J11vJsz6?boCPg$yu)*6o16=R3rf?d%lix zDzY=@eHyQqz~gj+wCaA78qov97(mSLFa4{^MIZR#)PSP+j<@!{%5Zkj3*j-em@{WR zRcNPdX%t0}U{_s`0auVO9ffg)dKC@PmpN{~>07>uDYp@srEm>WcWv+-U~h=woIGnN zBLfQA?Xahc$LKx(4ix`$AmKQQl3ze1Yjari% z?`oPULZf7-ektk1)6H?D;CN@H0o@AnA>DO~Waw+k!!(R)~B>uzSlk}$&*fV{6Ou<)_zCKRvsa_=lwf85U()#pq8E@5Fmoy^xfe1FW z6ol_3Fa@v)C##B}dp~UfZ4L1>i1vAQ>;YceD@o&}(UJPxG@>w%k)-i&RdMLfF$z zMK)z$dD7{M;dmxVmWTczCFo%lz2l;nj2E&m{{SA>;G>>Uh904)037kcPQ^3D&g92e zGk!(Mpohs|Y^SWtbhY{Y<$#0D3rg43wqV|2+68ct1XH}s0+7*1d-3iJ&*3E{jv!!e z6lOMjVW&9^<9|2G{V zNd}KMx(d~Uj%)_1wqAd_Uz?Js?~c`^kE?$hUlURO%XMt75z8g8PaB9jpv-6L@Lmyy z^;R%=es%J%@O%k;QynAS;Gy|!tiILd+O}TroccASV1S^7#$s%>#R#&uL_hoGv%qRh z9y61EkS8D3O;&ERSa40z^=1O^bAf?aM=vIav(0v~>r37If8Kf4elk`3|EABLg)-j* z8a)V&N#(X~1XB4Z7qf>+0Ryx4v|;=y5X-@<;y4J91fDuzZ5~}6^F zepjSN>a^e5HVRup&Jq62wR6$j?ka}RDVdEKNk(FlJZ$qosRUKJd`NmMQH5bIxF&`A$f<37Ip<*oj2#C-x0BUzZB za#Z&s`FBvT4>Z@W37mgoLHHjtBk>an3x zY(f6m=nB92IZi3Aom>{rSn=S;ss(jqGL4`#`Z<9lJ2x+zqr*MHV}|s#<(9<>AHqYK z;5qY53|{Fi&)?@-9fwE^EqcjjVJGLEKYQ=uYzBC~Ai8m+kqanp-4oAR%u}q(mE;&y z$Lt~cM|~~{B}u}M8CJ8#M~YxR`=oT&pNXYY;CH?~0~gFzZQ4hCOy(r# zDY~xlgX9SX(33 zN#65%2qZ$^tT~$0}#4i6IXOCODrzi-TU3IMoO1$r-R|2XydI7?4jkb5}2wM zNb|bOo3g;)Jy|?2dpTEECM=H~Pbb{E4{XUfW9qR#;vAr1YTui!7E^r9S$TiwwI5?o zCcH|=WSf7SEz}`4E~9$WdiDmj#6Qik(J6M0ZvSO{wMmo}rNAqjDJpXVD#C){6a)n# zSJzJ8lQUUN<0XD*#jCrsD9c#iS2x!U0tk@E#E$gjqXVEf{DQMgoimd{iZbc-o>(alQO}+ zZeQmG+8bwvERTv>H6TRSm$;Xzmg{>0Eqc{+R`v}t@F8H#eLxdRy406Vo_K4qaHHwi?f5w;G@?GPkc{6%i_;JNhPvGSvQ7s5sql^HR zAVYCF^vpxuSrLls;(z)2d#BCAHPU}wDnylR+sdbti8?wHJR}PB@FgDKTRByY6%c1+ z42XQP(WPPHPoGV>yh9ErR=LlvAcFF%_?YY%TF3D6^eUQ8 z8a{74SXh&=2xeAO>F!yCeM%;I&h3L@oWU(2m3lXQ!$LDMQp?C0M0j53C@uZ>W{lk} zjsbB*5{NDQ(Y2`XC_vRh6<9mc_8G3lov*j|bFc5G3kNx)T8aY8vXW|#9Fyc^u*FN` z^ENqTOEZOMg+*r}WWlu-B|1~*=(K&)nvn_?lV3Ep4NCG=Yy*l!B{U?sH7OA#F@&(l z;jx~|Bw>{>;AFG3dg6=D=N`Q3q zeIB`t_5OgJf3|&CSM;hM?9s)Gymu^~F>IwXsf^d6rCDycDm^W3Eg{DTp9E29W+-w( z-BAOUT2(d%=VP=4+%YZ)iG`QZ2CSRVKqE$z*N_K|D6?w4l&M0=4c z^Xx2c%v0W3?!TArOC@SKZ^Q)mb6t!D{JI(yPw1-A{ko7C*3oo8riZ6os4y^u(z2`) z?ro3o8q=+>%uaNe4+o1(L}0UxoQ?i##)i-;#>MZ=ljU#n7tE)d4u>Jg?_f;ym%oMI zZMIFY@fBhte}0o*s;=z(+^NvkkReRpW2x)hbN6_vasf4N*LS4B^dxc6+2v2!!QIzc zJv&8GCaMdfBOl_O!N_l>^DS3)7%;mnye%#wY zoidthto0&dQJ&0mZCJ#N*VjMj8eYspFw3b{9uSP8=h=}f51cHJe>yOHVUrU?TpTZ~ zL1w+eRQfi(T)p^yrJ-7xVclbt$>0>2k8F}`Yytol@v_f&OO5wcm$kY~ng1-`29#;f zqbGclD7#>AD^x{_jpow)=jI8MoHF+7V~|eCs{MR|`P}L^V<(_eyO?(-=_n(yxPY{*C{(Y+U|dK>uvFbNC@f3eC+43cqNg`h z@Zn2Dq}RoqN3Aen##l5F^tt~iHOu~nf^Be`--z8Fc1|14)raZ`;cR;w|MR&cBrPCi(Pif5Xn_`tI}FBkq~9gvqPnun#Mft&B?O%fqb2CuOOwa92*r!sNTzq+}$* z=G08BXCIL87_1%N2DBVb`Y%ddI-_p)>E}gd6^aPvHhVsqPDuCG8>3+HZrN@+EnEME zx}Dn29AxHp!j;PK!Xt;i2c7i$pOzSqcUf~5H-vSo2uq076x2U56o%>?Px5q6KVtYSFNFI!$J zl5E0=f_0U@><`*!CQ44N)Iz-CPJ6>cu+gv5t)kHpD5C{+o%MwqC%fxgN>X(5egwPg z^c{T=SPq%s$IYGaW+B5x!eQEZ=Z@=JWRibbkfXPKoFaE(8e{87^!i$ZP4o}zBsp1= z|K(OyWdWN(OBsT*2NkvtnxZG0t{sw`_{w~Phw*E@o_%cA=bi3KbKqX`o=;g-{Z+Xw zQ82zH6Msu`j8=hwwLMofcWM&v2hlKfQxPxfaMrd-1{U?r) z_i-w3swFbwu+C#v2F<)(LbiXfZO(??ArBv`s_~zM-&s1jgih8QCTf8&V(STs%Nzoq zOFjb~tRLzV#S0;}h{XhKdLCWi4kU&a8@@zy(tl!RQ$DN3Fp3Wm$Qi5Y#&I!{NtIto zQdckVM;?#M*}KKIgMY5AztL^9CFo|5reeKjCvW06PFM=PF zEA!4vgC+H%w(*r_@_Gd0I7)Ez(3jhVQ0R#^-iDPcO67W1JxA!Ftw@)YPxVmX7b_~_mD!7^VGU6GPk&)*Y z@i5Kit%I;DxL!)78O=Xk(C!iq`A~!Z)sKqR( zmz1%0)Lvc4!4hPq^FAYSS@V-bjYI}ALWYJ$yO)$f1U^jcvO;ROrONO8JTG#XtwBsO zG?~vTi0OY>`zP zwMk!pxVu8sr0bd5?8n?VIAG|+by1N??dhLe%Gaw(*fS2cR56|HysE$J*9%_;?q&hy zZun1YC*R-BlIA}W5XWt^qZ&XA1SI$z2yGM+~&R+5@u0|Pp7Qi#9&M$isZsA9gnaGY1 zLfUI1<9y@G7eZ=fhn7}KDzCX%Xjv{Sg`;`O(!L^ZgxJ zwED{aQ1>6LQ^`3}Cd2bs=!i*FdecJ(D$NDFszXGL(;xG1Y<~~l;ugk?s2J`B6Z-d% z)CrN}E8jgwjOW5oMC(1CrFRkWr>?a<(!?5LgqIhfMKCU`(ea6YjlWY=3GY~~$EKu? z;fjFa)hag6721kp1XWbm>> zNQtcGI%qez{G!){^B6~{4xbXl$xaNh(I03Lqi9r4MbnVg=VYg((#`%-ak~VE} zUF@XiKTaJLvJ^RyCDn%U66LZF1!!k8$wr?=@Jw~U>KVlS`XDn0Q`_x8J_b_5@#A+< zjYz3RGxU1)#JG_kXZvZK-wT<#-lsSq4!9rwJ-RKCEJr`CEXf$)9rH*7%ExI}oZ!0H z^`(j}+woHO*auty`r!LndYOL~HYYsiHD>8e)D7SG+2tTb7ALz8Fh;PN%zr0nLn z6${B`p6n6yvnAn~6O;%NymDL&2(>cv6n5ZGwkRgKnT(!^N#QOSe`yrNXm~S@{1$5z znATN)VFVaBKj;g)suY3;Jxp>?jPOH?fTI8le)@-j|qhmrruU6X0J5iO%UFft=@x6+ip|PWEg>?50DBYys>lYV)u~W?9Sjdt7l7{8}K# zfC$ezm{V~Y{mcl4?Tv)>f0`Ta;I1&C?@aIt^bGn|?uU+z5sQm40UR8rblm&lUt*=I z!@E_lL~4FrTRuZ~CBw^x?$5P=U0UFoi4y%*e!Nn+weYDy+AjaeF9Q)%P1vBi7^y0_IT zXf6hJw%%D*cbBt#(~7>zOv_6s_A=8>=V~yXatIS`5niqO)1oJ`Ke- z_7w6Lsg}ucR3Fx|Ox}6S1bIJgmhX!1f{6}+^8*b$6^FJW@{g@b#1qOMG1yl2E_lq< zEEq$AAO25|m0{SUMjs!oU)y8rU-8%mWIeWle;@rnQy?fNsrhSlbLN**G6WbH0!DZk i2n-x1%+vpQ`E?)s3`_aVIZ)9O_>qxN6fYGu4ETSk_oj{j literal 0 HcmV?d00001 From 3c811fd135e43d6be00e3347272a45eaa3f253a9 Mon Sep 17 00:00:00 2001 From: Dera Okeke Date: Mon, 23 Feb 2026 23:31:30 +0100 Subject: [PATCH 2/4] added tolerance and limit price --- docs/concepts/stake-burn.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/concepts/stake-burn.md b/docs/concepts/stake-burn.md index 75dad374c..11190fb79 100644 --- a/docs/concepts/stake-burn.md +++ b/docs/concepts/stake-burn.md @@ -79,8 +79,14 @@ Execute a stake burn by calling the `add_stake_burn` extrinsic with the target s +Run the following command to execute a stake burn on BTCLI. Replace `WALLET_NAME` with the name of the subnet owner coldkey wallet and `NETUID` with the netuid of the subnet. + ```sh - btcli sudo stake-burn --netuid NETUID --amount 10 --network local + btcli sudo stake-burn \ + --wallet-name WALLET_NAME + --netuid NETUID \ + --amount 10 \ + --tolerance 0.05 ```
@@ -119,6 +125,7 @@ Decrypting... +Execute a stake burn using the `subtensor.add_stake_burn` method as shown: ```py import bittensor as bt @@ -126,14 +133,16 @@ import bittensor as bt subtensor = bt.Subtensor(network="local") wallet = bt.Wallet(name="WALLET_NAME") -netuid = 14 +netuid = NETUID amount = bt.Balance.from_tao(10.0) +limit_price = bt.Balance.from_tao(LIMIT_PRICE) hotkey_ss58 = "HOTKEY_SS58" # Hotkey to stake to (and burn the resulting Alpha) response = subtensor.add_stake_burn( wallet=wallet, netuid=netuid, hotkey_ss58=hotkey_ss58, + limit_price=limit_price, amount=amount, wait_for_inclusion=True, wait_for_finalization=True, @@ -145,6 +154,7 @@ else: print(f"Failed to execute stake burn: {response.message}") ``` +Replace `WALLET_NAME` with the name of the subnet owner coldkey wallet, `NETUID` with the netuid of the subnet, and `LIMIT_PRICE` with the maximum Alpha price you are willing to pay for the swap. From a4cdc3c4ee3fc7e4149b9a3e11028a271be7104f Mon Sep 17 00:00:00 2001 From: Dera Okeke Date: Tue, 24 Feb 2026 12:37:01 +0100 Subject: [PATCH 3/4] updated bittensor wallets --- docs/resources/community-links.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/resources/community-links.md b/docs/resources/community-links.md index a31c4da19..643fe5d9e 100644 --- a/docs/resources/community-links.md +++ b/docs/resources/community-links.md @@ -14,7 +14,6 @@ You can also explore Bittensor's many Subnets and find links to their websites a - **Podcast**: [Novelty Search](https://www.youtube.com/@Opentensor/podcasts) - Official Opentensor Foundation podcast - **Discord**: [Join the Bittensor Discord Server](https://discord.com/invite/bittensor) - Connect with the community, ask questions, and stay updated - ## Block Explorers - **[TAO.app](https://tao.app)**: Recommended, as it is maintained by [Latent](https://latent.to/), the team behind these docs and core contributors to the Bittensor ecosystem. Includes [Savant](https://tao.app/savant), the Bittensor AI assistant capable of querying tokenomic data directly from the blockchain. @@ -23,7 +22,8 @@ You can also explore Bittensor's many Subnets and find links to their websites a ## Wallet Applications -- **[Bittensor Wallet](https://bittensor.com/wallet)** - Recommended (maintained by OTF). +- **[Bittensor Wallet](https://www.tao.com/)** - Recommended (maintained by Tao.com). +- [Crucible wallet](https://cruciblelabs.com/) - **[Other Polkadot Wallets](https://polkadot.com/get-started/wallets/)** - Multi-chain wallets capable of interacting with Bittensor. ## Development Resources @@ -31,5 +31,3 @@ You can also explore Bittensor's many Subnets and find links to their websites a - **[BTCLI](https://github.com/opentensor/btcli)**, the Bittensor CLI - The **[Bittensor SDK](https://github.com/opentensor/bittensor)** - **[Subtensor](https://github.com/opentensor/subtensor)**, Bittensor's substrate blockchain - - From ab65923436674dd152dd8c8d56196ab7894d9f89 Mon Sep 17 00:00:00 2001 From: Dera Okeke Date: Wed, 25 Feb 2026 01:29:20 +0100 Subject: [PATCH 4/4] applied comment --- docs/concepts/stake-burn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/stake-burn.md b/docs/concepts/stake-burn.md index 11190fb79..6db7f24e8 100644 --- a/docs/concepts/stake-burn.md +++ b/docs/concepts/stake-burn.md @@ -8,7 +8,7 @@ import TabItem from '@theme/TabItem'; # Subnet Stake Burn -The stake burn mechanism allows subnet owners to reduce the amount of alpha in circulation. This page describes Bittensor's subnet stake burn mechanism. It covers the mechanism’s behavior, how to execute a stake burn, and its effect on a subnet. +This page describes Bittensor's subnet stake burn mechanism. It covers the mechanism’s behavior, how to execute a stake burn, and its effect on a subnet. The stake burn mechanism allows subnet owners to permanently remove alpha from circulation. It works as a combination of the [`add_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/staking/add_stake.rs#:~:text=pub%20fn%20do_add_stake)/[`add_stake_limit`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/staking/add_stake.rs#:~:text=pub%20fn%20do_add_stake_limit) extrinsics and the `burn_alpha` extrinsic.