commit 09acb192cd7319115e366149537a28625eac2df9
parent cd0e8a29ede3335c410f0893b32b54684ea88643
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date: Wed, 8 Apr 2026 14:18:07 +0200
protocol/refresh: add introductory text
Diffstat:
2 files changed, 297 insertions(+), 239 deletions(-)
diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md
@@ -421,6 +421,10 @@ Check-Subtract(value, subtrahend) =
# The Taler Crypto Protocol {#procotol}
+// todo: briefly introduce the three components wallet, exchange, merchant; maybe with ASCII diagram version
+
+// todo: capitalize wallet, exchange, merchant?
+
## Withdrawal {#withdrawal}
The wallet generates `n > 0` coins `⟨coinᵢ⟩` and requests `n` signatures `⟨blind_sigᵢ⟩` from the exchange,
@@ -508,7 +512,7 @@ sig = EdDSA-Sign(reserve.priv, msg)
(⟨h_denomᵢ⟩, ⟨planchetᵢ⟩) = planchets
for i in 0..n:
denomᵢ = Lookup by h_denomᵢ
- Check denomᵢ known and not withdrawal-expired
+ Check denomᵢ known and not withdraw-expired
h_planchetᵢ = Hash-Planchet(planchetᵢ, denomᵢ)
msg = Gen-Msg(WALLET_RESERVE_WITHDRAW,
( Sum ⟨denomᵢ.value⟩ | Sum ⟨denomᵢ.fee_withdraw⟩
@@ -754,9 +758,40 @@ Check EdDSA-Verify(exchange.pub, msg, sig)
## Refresh {#refresh}
-// todo: add introductory text
+The wallet obtains `n` new coins `⟨coinᵢ⟩` of denominations `⟨denomᵢ⟩`
+in exchange for one old `coin` of denomination `denom` from the exchange.
+There are two reasons why a wallet needs to do this:
+
+1. Obtaining unlinkable change after using only a part of the coin's value during a payment (cf. {{payment}}) or deposit (cf. {{deposit}}),
+i.e. where `contribution <= denom.value`
+2. Renewing a coin before it deposit-expires.
+
+The sum of the refresh fee of `denom` and the new denominations' values and withdrawal fees (defined by the exchange)
+must be smaller or equal to the residual value of the old `coin`.
+
+The private key of each new coin candidate `⟨coinₖᵢ.priv⟩` is transitively derived from the old coin's private key `coin.priv`
+via a secret `⟨sharedₖᵢ⟩` according to `Refresh-Derive`.
+The secret is regeneratable with the knowledge of `coin.priv` via the link protocol (cf. {{link}}).
+The derivation ensures that ownership of coins (knowledge of the private key) is correctly transferred,
+and thereby that value transfer among untrusted parties can only happen via payment and deposit, not via refresh.
-// todo: factor out Derive (from shared secret onwards)
+~~~
+Refresh-Derive(shared, denom) =
+ planchet_seed = HKDF(uint32(i), shared, "taler-coin-derivation", 64)
+ blind_secret = HKDF("bks", planchet_seed, "", 32)
+ coin.priv = HKDF("coin", planchet_seed, "", 32)
+ coin.pub = EdDSA-GetPub(coin.priv)
+ planchet = RSA-FDH-Blind(SHA-512(coin.pub), blind_secret, denomᵢ.pub)
+ h_planchet = Hash-Planchet(planchet, denomᵢ)
+ return (coin, blind_secret, planchet, h_planchet)
+~~~
+
+Taler uses a cut-and-choose protocol with the fixed parameter `κ=3` to enforce correct derivation
+(in (κ-1)/κ, i.e. 2/3, of the cases, making income concealment for tax evasion purposes unpractical).
+Refreshing consists of two parts:
+
+1. Melting of the old coin and commiting to κ batches of blinded planchet candidates
+2. Revelation of κ-1 secrets `⟨revealed_seedₖ⟩` to prove the proper construction of the (revealed) batches of blinded planchet candidates.
~~~
wallet exchange
@@ -822,12 +857,7 @@ for k in 0..κ:
for i in 0..n:
transferₖᵢ.pub = EdDSA-GetPub(transferₖᵢ.priv)
sharedₖᵢ = ECDH-EdDSA(transferₖᵢ.priv, coin.pub)
- planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64)
- blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv)
- planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub)
- h_planchetₖᵢ = Hash-Planchet(planchetₖᵢ, denomᵢ)
+ (coinₖᵢ, blind_secretₖᵢ, planchetₖᵢ, h_planchetₖᵢ) = Refresh-Derive(sharedₖᵢ, denomᵢ)
h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ )
value = coin.denom.fee_refresh + Sum ⟨denomᵢ.value⟩ + Sum ⟨denomᵢ.fee_withdraw⟩
commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value
@@ -853,7 +883,7 @@ see TEH_handler_melt
(E1) gamma selection and coin signing (exchange)
denom = Lookup by coin.h_denom
-Check denom known and not refresh-expired
+Check denom known and not deposit-expired
Check RSA-FDH-Verify(SHA-512(coin.pub), coin.sig, denom.pub)
Check coin.pub known and dirty
(⟨h_denomᵢ⟩, ⟨planchetₖᵢ⟩, ⟨transferₖᵢ.pub⟩)) = planchets
@@ -924,12 +954,7 @@ for k in 0..κ and k != ɣ:
for i in 0..n:
transferₖᵢ.pub = EdDSA-GetPub(transferₖᵢ.priv)
sharedₖᵢ = ECDH-EdDSA(transferₖᵢ.priv, coin.pub)
- planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64)
- blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv)
- planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub)
- h_planchetₖᵢ = Hash-Planchet(planchetₖᵢ, denomᵢ)
+ (_, _, _, h_planchetₖᵢ) = Refresh-Derive(sharedₖᵢ, denomᵢ)
h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ )
value = coin.denom.fee_refresh + Sum ⟨denomᵢ.value⟩ + Sum ⟨denomᵢ.fee_withdraw⟩
commitment' = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value
@@ -1029,12 +1054,7 @@ for i in 0..n:
for k in 0..κ:
for i in 0..n:
sharedₖᵢ = ECDH-EdDSA(coin.priv, transferₖᵢ.pub)
- planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64)
- blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv)
- planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub)
- h_planchetₖᵢ = Hash-Planchet(planchetₖᵢ, denomᵢ)
+ (coinₖᵢ, blind_secretₖᵢ _, h_planchetₖᵢ) = Refresh-Derive(sharedₖᵢ, denomᵢ)
h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ )
value = coin.denom.fee_refresh + Sum ⟨denomᵢ.value⟩ + Sum ⟨denomᵢ.fee_withdraw⟩
commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value
diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml
@@ -431,6 +431,8 @@ Check-Subtract(value, subtrahend) =
</section>
<section anchor="procotol">
<name>The Taler Crypto Protocol</name>
+ <t>// todo: briefly introduce the three components wallet, exchange, merchant; maybe with ASCII diagram version</t>
+ <t>// todo: capitalize wallet, exchange, merchant?</t>
<section anchor="withdrawal">
<name>Withdrawal</name>
<t>The wallet generates <tt>n > 0</tt> coins <tt>⟨coinᵢ⟩</tt> and requests <tt>n</tt> signatures <tt>⟨blind_sigᵢ⟩</tt> from the exchange,
@@ -509,7 +511,7 @@ sig = EdDSA-Sign(reserve.priv, msg)
(⟨h_denomᵢ⟩, ⟨planchetᵢ⟩) = planchets
for i in 0..n:
denomᵢ = Lookup by h_denomᵢ
- Check denomᵢ known and not withdrawal-expired
+ Check denomᵢ known and not withdraw-expired
h_planchetᵢ = Hash-Planchet(planchetᵢ, denomᵢ)
msg = Gen-Msg(WALLET_RESERVE_WITHDRAW,
( Sum ⟨denomᵢ.value⟩ | Sum ⟨denomᵢ.fee_withdraw⟩
@@ -700,7 +702,7 @@ h_wire = HKDF(info.wire.wire_salt, info.wire.payto, "merchant-wire-signature", 6
for i in 0..n:
coinᵢ = depositᵢ.coin
denomᵢ = Lookup by coinᵢ.h_denom
- Check denomᵢ known and not deposit-expired // todo: check could be included in Denom-Lookup
+ Check denomᵢ known and not deposit-expired
totalᵢ = depositᵢ.contribution + denomᵢ.fee_deposit
msgᵢ = Gen-Msg(WALLET_COIN_DEPOSIT,
( h_contract | uint256(0x0)
@@ -737,8 +739,44 @@ Check EdDSA-Verify(exchange.pub, msg, sig)
</section>
<section anchor="refresh">
<name>Refresh</name>
- <t>// todo: add introductory text</t>
- <t>// todo: factor out Derive (from shared secret onwards)</t>
+ <t>The wallet obtains <tt>n</tt> new coins <tt>⟨coinᵢ⟩</tt> of denominations <tt>⟨denomᵢ⟩</tt>
+in exchange for one old <tt>coin</tt> of denomination <tt>denom</tt> from the exchange.
+There are two reasons why a wallet needs to do this:</t>
+ <ol spacing="normal" type="1"><li>
+ <t>Obtaining unlinkable change after using only a part of the coin's value during a payment (cf. <xref target="payment"/>) or deposit (cf. <xref target="deposit"/>),
+i.e. where <tt>contribution <= denom.value</tt></t>
+ </li>
+ <li>
+ <t>Renewing a coin before it deposit-expires.</t>
+ </li>
+ </ol>
+ <t>The sum of the refresh fee of <tt>denom</tt> and the new denominations' values and withdrawal fees (defined by the exchange)
+must be smaller or equal to the residual value of the old <tt>coin</tt>.</t>
+ <t>The private key of each new coin candidate <tt>⟨coinₖᵢ.priv⟩</tt> is transitively derived from the old coin's private key <tt>coin.priv</tt>
+via a secret <tt>⟨sharedₖᵢ⟩</tt> according to <tt>Refresh-Derive</tt>.
+The secret is regeneratable with the knowledge of <tt>coin.priv</tt> via the link protocol (cf. <xref target="link"/>).
+The derivation ensures that ownership of coins (knowledge of the private key) is correctly transferred,
+and thereby that value transfer among untrusted parties can only happen via payment and deposit, not via refresh.</t>
+ <artwork><![CDATA[
+Refresh-Derive(shared, denom) =
+ planchet_seed = HKDF(uint32(i), shared, "taler-coin-derivation", 64)
+ blind_secret = HKDF("bks", planchet_seed, "", 32)
+ coin.priv = HKDF("coin", planchet_seed, "", 32)
+ coin.pub = EdDSA-GetPub(coin.priv)
+ planchet = RSA-FDH-Blind(SHA-512(coin.pub), blind_secret, denomᵢ.pub)
+ h_planchet = Hash-Planchet(planchet, denomᵢ)
+ return (coin, blind_secret, planchet, h_planchet)
+]]></artwork>
+ <t>Taler uses a cut-and-choose protocol with the fixed parameter <tt>κ=3</tt> to enforce correct derivation
+(in (κ-1)/κ, i.e. 2/3, of the cases, making income concealment for tax evasion purposes unpractical).
+Refreshing consists of two parts:</t>
+ <ol spacing="normal" type="1"><li>
+ <t>Melting of the old coin and commiting to κ batches of blinded planchet candidates</t>
+ </li>
+ <li>
+ <t>Revelation of κ-1 secrets <tt>⟨revealed_seedₖ⟩</tt> to prove the proper construction of the (revealed) batches of blinded planchet candidates.</t>
+ </li>
+ </ol>
<artwork><![CDATA[
wallet exchange
Knows ⟨denomᵢ⟩ Knows ⟨denomᵢ.priv⟩
@@ -788,12 +826,7 @@ for k in 0..κ:
for i in 0..n:
transferₖᵢ.pub = EdDSA-GetPub(transferₖᵢ.priv)
sharedₖᵢ = ECDH-EdDSA(transferₖᵢ.priv, coin.pub)
- planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64)
- blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv)
- planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub)
- h_planchetₖᵢ = Hash-Planchet(planchetₖᵢ, denomᵢ)
+ (coinₖᵢ, blind_secretₖᵢ, planchetₖᵢ, h_planchetₖᵢ) = Refresh-Derive(sharedₖᵢ, denomᵢ)
h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ )
value = coin.denom.fee_refresh + Sum ⟨denomᵢ.value⟩ + Sum ⟨denomᵢ.fee_withdraw⟩
commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value
@@ -811,7 +844,7 @@ Persist (coin.denom.pub, ...) // todo: double-check
(E1) gamma selection and coin signing (exchange)
denom = Lookup by coin.h_denom
-Check denom known and not refresh-expired
+Check denom known and not deposit-expired
Check RSA-FDH-Verify(SHA-512(coin.pub), coin.sig, denom.pub)
Check coin.pub known and dirty
(⟨h_denomᵢ⟩, ⟨planchetₖᵢ⟩, ⟨transferₖᵢ.pub⟩)) = planchets
@@ -865,12 +898,7 @@ for k in 0..κ and k != ɣ:
for i in 0..n:
transferₖᵢ.pub = EdDSA-GetPub(transferₖᵢ.priv)
sharedₖᵢ = ECDH-EdDSA(transferₖᵢ.priv, coin.pub)
- planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64)
- blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv)
- planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub)
- h_planchetₖᵢ = Hash-Planchet(planchetₖᵢ, denomᵢ)
+ (_, _, _, h_planchetₖᵢ) = Refresh-Derive(sharedₖᵢ, denomᵢ)
h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ )
value = coin.denom.fee_refresh + Sum ⟨denomᵢ.value⟩ + Sum ⟨denomᵢ.fee_withdraw⟩
commitment' = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value
@@ -940,12 +968,7 @@ for i in 0..n:
for k in 0..κ:
for i in 0..n:
sharedₖᵢ = ECDH-EdDSA(coin.priv, transferₖᵢ.pub)
- planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64)
- blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32)
- coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv)
- planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub)
- h_planchetₖᵢ = Hash-Planchet(planchetₖᵢ, denomᵢ)
+ (coinₖᵢ, blind_secretₖᵢ _, h_planchetₖᵢ) = Refresh-Derive(sharedₖᵢ, denomᵢ)
h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ )
value = coin.denom.fee_refresh + Sum ⟨denomᵢ.value⟩ + Sum ⟨denomᵢ.fee_withdraw⟩
commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value
@@ -1068,7 +1091,7 @@ if ⟨blind_sigᵢ⟩ returned:
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
</reference>
</references>
- <?line 1079?>
+ <?line 1099?>
<section anchor="change-log">
<name>Change log</name>
@@ -1081,199 +1104,214 @@ Education and Research (BMBF) within the project Concrete Contracts.</t>
</section>
</back>
<!-- ##markdown-source:
-H4sIAAAAAAAAA+09y3bbVpJ7fMWNvAiYECQlP5JowmRkSbbUtmS3JLc743hI
-kLgkMQIBNh6SGFu9mI+YbZ8zvfDMB/Smz+xm1Zv+h/SXTFXdBy5A8CFLsp0z
-4fGxQOA+6ta76tYFHcexzjbZXctK/TTgm2ztZMTZ48MX7MQNeMyex1Ea9aNg
-zfKifuiOoYUXu4PUGWY8Tfqj6NxJsaEzkQ2tvpvyYRRPN5kfDiLL8ifxJkvj
-LEk3Wq1vWhvWeRSfDuMom2ALj084/BemVpLG3B0X753yKbT2Ni3GHEbz0FU/
-nk7SaBi7k9GUbvC+m4zoauJOx9Azsaw7ZzzM+KZ1h7GYT6JNNkrTSbLZbA79
-tDEMs5CnjSgeNoPEawFgDbjdxMYBwJ+keXN4XtG8aVlulo6iGGBzYGbGBHIO
-/NMocH32+H//R6CHnkHHTXbyYoftxDyBlbEXoX/G48RPpywasBPeH4VREA2n
-1Nrt9WJ+hh1Ue7qNCOIA2B4PxqMoSH+CGw223qKHfRhqs9C8H3kAz47TWm89
-+EbeycIUCfOYx2M3FJPxsesHm2ws4G5osv5zmjmeGK7hccsKI+iTAtRIjKNH
-2xstdbHeuicv73/94Bt5+WDjLt3de7LzCKB4tt9Yb8G/1lfNb7762rnrPLi3
-4azfg1bOV52796Dh8d6xbvegtfF183D/+KTxaP/5cWP965ZzDxgJ2EnDYFmO
-4wCmAAduP7WsH1+xk4cv2Y+vxYOx73kBQH2H7cOSIy/rp34UFpo95OduzFk6
-clP4z08YMHiGvMPgOkn9IGDIqY4fIm8PARUJc0OPjd0pYDJMXT9kPI6jOGlY
-LxLOYJhplMUsOg9Z7Cenn+Hsh1Hqipkd1l1ze/21LgOMRsBiMClngZ/y2A2Q
-tn44ZF1o0WU8RNp5zE3Y1vH2/j57Rfh+jWO47C3rFccAYFDmQpoI2cll5346
-Yj1sH/DQdmulSXk4hOcAf2+K96AL3sYvChAX+05c7194HNnTOisPUWhbZz9B
-MweaI9RpZE4CY0/FNDhiz08T+6LWbXbpFl4Whh37oT8GdITZuAfKBzpjj6YA
-M+R9oIEbT3EKEGmgCFKL+mVB6k8CzuBm308QD34IagjGuMB5M/iGyyjP1512
-AVA3SVniD0N/4PddGBHnVEhRw3QvusVlIisoQgEmQT0gtwjEgMqCLnbPH0IT
-z3fDmgLiB1ry+YgD53V/6CKruWwSgSIArtaTyeXDQ/6HzD8DvYfrjOQ6fqB1
-4IgxABGN7amxKpeJm8GUDXkIvJUCfAkMA7BySQ1YnmClL1iP2ePIY4cwQpPu
-FG4VSCNQDBgiNmsyfjGJQgDM13w3nwoIFyKsV2cwdhZE7BAhAHkGrHb9Afx/
-5sa+24POboK0IEHstuEB9gMW93ycBngjmuCqIhwTxTdiPYG4GGbFxQb+KUo1
-98F4TUFDh83fZIHvGqik1Xtu6jbAvhRXCZIOw4NW7tIjWAHejXr/xvup6EOI
-bzUaYbEjv+gHWYJEBPwPCdNFaiZsEEdj6NolSobOOo30jz/9F47681/+8x9/
-+u8uCS5wk0sahl+kOE7XZ21WnLEL1wKoREAF/QFVWigET475GOwwqhExnh9m
-UYZoi91pcW5ExFXmd0MxipIShEeizkfwBPJAE4ESrYQVdeN2bsX9Pjga/pik
-AE13+eEemHf2KAtJi1ODO2AwtpyN+w/YmzvJyIWLS8v64x//aMnb9jgZ1pjz
-HRuhZ2Dth5Ms3SSDBw/wDyAIbgGOQKUIekmN9ZR9yzb+9cE6i/opR0fiWZbq
-zjgaDSK7ef4QnAXsPfAvkPnEGAjvUzDzbXZ3Q42DwFldHIDEnviKRsbeajFA
-K0AiO+ZipexeY73O7uN/D/A/lIUHjQ3s8Uoa2deNHB331zcEOuDCQAd8uy46
-1jfu3ww+HtxbGR+4mll8bCA+NhAfdxU+7i3AB2HVBveTbKSnbtc0nhx6VsTW
-TTDQjWGsxEEnOZ4k8vpRDFIPythLlPEd+DGMqXsqMZ3Fr8cHfii0xZs3knEu
-NwUyUj6ewPwmB1kEfZvho1etzbvrrwVQ4OaYnpRQ0aj/PX8w0LpPjtSUjG7M
-/Qq8v9d4IUwu6AFQ9DQXaOyMA0lRJxxIlG2B442GR5qibbDBUifsHWxtA2VH
-Y1dRFO84iEwbdFKdoU4jqgIqgC4THEDQZU/SpV9QPATDQCoe4VZJJBbpVGAQ
-mIkYJOF9MEn0NecON5Ueh+qJLUnVapZCJUnaMwZTjf6O6FrkIwCDyb+SpiWI
-hHzBYxKvvhv0s4BEoIR66cK/lkh+AtDu8BhMJS25pHTRnUcEn3qDS8GLOB2M
-NKcbs7FHjWWJmE0ElT5ZED9MUtf0H17JEOK1RYgGh0ryD/oCBUoAQ0UxMcvu
-BQUApAl2Lyb4J0n5BBeZZEMULblMhOP1ptXFv47s1UW4wCoRkwB3AnOCFT0f
-+eCGqIY4ZLkdMHCX2f1BA4SGeO2y1pDsBp3sxA3SOtt/clCnELjOnhLLPXty
-INkkESTEdkTCiXRt6AZxPLNdFkahI1lI+HTiUe2fqHP+8QfQNEX7e+aDNwqT
-ihCGk8/oKjcdEAzKF11YCFiwHwBo6DHgUmwF8RVQ0Q0s8WQQFQBUXgGi2Z3k
-3mAyAYcPvGemY7QoLEFpg2uNrporvGjJrAK2GrV9KlvmkYPk7RJoSE6pEUtT
-fNtmG/fvfwF6r82+Xn/QqhVF5plc8LxxbZjyqRy6NqNtsfeMIA2iIIjOE6kx
-nx89gZlNDst5oSa0x55QoEr/2qZlrFk4hx4AOc+GIQ0uKg9Bxs00FRJsJarO
-QeRBpOui9ElfliS4oPZJmC/rQnVrXQdsl8UhCSpCRcoduQrCMxRh+I5u4hAc
-tnBR+HVoCAZCYx/WWUk+qoXjUFF1/uAFIfrYUrSCGH0AOboavxeIeWiwPHAH
-RlrSzYBxyIZ4EF/FY2IcdeknaIYDiDZ7islckWdCNS8Muf8TykpK8EpuUC0g
-rrC8iMEXPyBwv2WHAvYLKQdlZcreMgyC1x/YcoxaXaQX7MNaTa+6TY1sSjcc
-1jBezhNgMO2XbbauBIUdAoM8DHygxDHEnS5wvfImdj3QJuvfUKvqFkfHW86j
-nT2wiHHiOgNvdEn3wfvMJpMIgiFAt2FBcUrZBd2pOptkPSAKCQB0LgqAcjOl
-o0j3RHuG8+I18A15F8BOCVJC8CdF2BDnHRJ7yWYqWme8yCMwLc0yyILAAenA
-rBaZWhwIIIjOAF9i2sah9CmgT9mn0NRXci48PqFcHIDo8nJWXRI922xNoGSL
-PTqZJC8/W7NIgNuKzoK6CoRaLeeAwhMuyQ+PVdv8klu4zraGTg+nlBFRg5RR
-LgRAZVQ9mJajFUvBI1cG/Wx0292hi24MMD2Ikt/3Mb6WxIHxrd6UAf78Acmd
-9I85G8accsxAt/EYnWSIqkGWMKnB7GHfq1HUTXMiBbsKWEL6eqPARw45Xdzu
-nSYFdiL/1mQnaEDo6SEjIzjIOFIxmrGLGXDcDsspz7WK5RDKKparcGOvxXIP
-FRagr2a4wl0Anyw40ISiCoBmbRkXEREMLiJVoAYtko3uCiWwlHRVmuDTI6cK
-aAkioAx66FIMltNQKVJJQqVNKyhIwVGbValRK84fVMmFFXc4tIgxy6kUg0h2
-au1i4WqgCTT8QsRhpec5XdEWzJAVb9rYDyaF+RVJE39YJCkNrf6KHCZmPdHv
-cHPnqWCf5XggEkRH8U3QkcIuvpyQsp2mpFekJEDA5F9h5ZAyBCHoMTmhpCU0
-qQgri5TC4dqiPyJcgu9JjKrVmCh9EfYqhUXet2HEFcRFLYP65Iv5RMUmC5XA
-5JAuCt2LOF7O8X54Bm3gfx4nlKWKq1kesfYFE+3n8vzvlDEr0kfcFrJINLqq
-NqvgvIHCOZkD6HTLdEjjjNcxCkBYaFsG4gR/JarcsBYDSBU9lukpW4zTxtUZ
-od924IKX4hzjrnIcY659B9ql0wkXW5j5riQ03hqjV5yAD+uKK/Bh1T3cYSlt
-KogMDuZl1a4V5S2dSQRaS8RWiVWkR5fudrETuj8YkYV86Ba2vCZunOqNSMAn
-62dxzMP+tG7RBsMAbTGA3JUhJ0CShXKfDujKRlnoxQDh2A8CaAZCbK9z5+va
-nDHJr1JfNWR3nfV1ueXaH7k4I+YufSxF0D5cPgo4Yi9HPOTInyq/JfeQqBKi
-LiYGxy6e5ljMd2lD1hUYR36yaG/vwT1b3GqIIFX6unc31G2FBnyitmfXN8Bo
-iMcKtFqXsuDsxAcpS93xBIKPrV4SBRnmafXNGfoCHhQcxj7lRTnHbIm92j4E
-wbxP9xIftxe769981XJa6/CPtVqbrRbb3j0+6TIb27843P8945OoP6o1yL+m
-YBfCTBGqd1sXj0qfbg5bwtYI0WsN69vPHMdqNgEML9oEOvH+KQXvnKttWQK2
-n1pHPBBM9j4rBhHXnGYu9b1gB19IQu843xFlzEhyKwiUNkwKzkAubwA9yAel
-f1w24i7uL8siBMmWPjSCSBsRYLlyLyERLopON4DDGoPYAl/BsmM+BBHlKDRg
-3h9vHW5JBrZePT58EYJB1DCy56Jf8trWRTRu6JplMeLS0doykXc6+Z3GKB0H
-YJJo3njaEEtzYi60qIQtkWuFWGm91WrJaOcxD52DZKgWQAFbtXmRLQxTou4U
-1wzj45qrTJLAF2gzG3d1GxLftQJpqo0IBHSTgIOMqZFskIt5IxTtCeZ7qiy8
-UPRSC2A1B67cUAyapG/JSKqsxh4PcOPMSD6cEGsj/7usz2OqX8nrLPLM+vnI
-74+oXTQALEjBEiozxTGQmRkErCKYBauCGaA8cZhMgS0vcMwsQeYDzQ64HIEo
-4JIc1n0SwurIL+yqhBeXW8NdnWc8DbGOxkU/MYp9JiNnwRpSpSs9m2834ejb
-pBBQVLsi9vZph14O0IuigIPm1QUFDKIUXXrQFd1wNxK9AQsLt5jbi+I0mTMj
-ixAl537Cce7nWNKVpHJtE/FNdBW6RC1SlshEiDi8hdZJFSUAtZ9G0Wk2QbGk
-jXRwTmMf9EeCKdAzzDEEUzU6sIwcFFobE2FHHPE4G7NSjQEsT7g2GKEBBwCS
-EI6ZPXqGvJuRlyw9A7XnoRyFyxriCBnDLIXIh0xgckGsRBVRACMeR2MQEGSi
-nOmIQMhzIrsyiqNsOELWf3NHIV1tS2K6G3zdMBrblDipsTaVj4ldSikVLUNC
-1vGamjbAf6pZYoTngRuC8Ujtibyos4rh8gs9ADOGbl3Q4GoIBoMT/znHWU/k
-/8lAgFdM38Fb8MT4gkuF9fiubTyGZ4qLxFOn8FSIN0MTJAyDqJPQZZoCX334
-ElAqkr0Ek+HF7rmLj871F7l5d47xZaorhbCwhH3HWmjvfaAKVojgleIcpHSM
-tUTI1VjXkSt3akuRDGp81YEcYVkeM8K6GFAjKTBzLyPfUKxQSoOY0u2D9Sae
-oyoZgGQE2s3IkRG7UOkK3pETCaOcglurTDKCmi+XDTjoYrXrISVFwUQVBub4
-NWucAf5RU8sAHAQFlg3jSFiFAIA6iuLc70NtF1DakMdnkpNRxHIwwJhpx0VX
-G55sPd096hxs/b6z/Wz/8FjUSCBIuZKxPYGm7WOHSs5Eql8PBaady+WKrBUD
-8Qk9wPOEANh+eCxEx9xHkKRf+lFYsoTaLiJ+freZ1g2M+KFLaTsDpGfFz1vr
-S2fR58sFPd8y+yVIqiINhoyS5xG980G4zpzvv87yDWNCZvfc8BTMkxsmA/Qo
-jGffVcxpg+5Atbup1o4aTIULm3Ir7GahrW63GI/OlysO81ZrR7uwIBUufVho
-KuBbwjDz2UYw6UaN9KDJnVQ3qdJVVYBcZ873X2f5RnE21lRajxUfVDEpfIrU
-VPY0oXRS7RagrW63FI+rs6m9uy5J6SdJ5mJ07IZ5RPbBIaqAcabntwb97Flz
-XiuS8jrkmLOs+epU90QhuSsxm4UL5eLG5izfWNYj70numsgp2GiJj4636mSn
-0bWF+BCCX9y5FykdYaMXGSpbGG1oqRq02a63c7zlPOFTaGfXrLJ6VKox39aU
-ht+jbHGi3C5TyYh8eCLjN1eUjJAr5yonJ+EYsXPTucn9lbqVRkOOgZHMWOQ7
-GpjpvkBvDYIQOmaBi4doBuJA95Rmg7YYQ491qszjEKoGMsNEfhbO7eN5AMy8
-YWIFPGHaknXDqQjIKJ0o03xjfzgiZ056krJiXE2CxQyqyCyYmh6aZH9CRhPR
-RC6M2dooscdMDTlyu7/f3ts6fLzbgag87Sj0dChybUL8huFwh5AOAUeUYdgp
-cliEKkEcp4/RkQ2efA/i0ukcjCBbaaZZZjhy1um5aX/UISS2ZUmMvXH/Qc46
-eQMLedbHtWH5N6Y6cA56BCpBVWjIWMjHSgzdtc7WxLmwnEEc7Ox4ukhwrU41
-T6yAaDGuOc2ruxubr+XUyo8sN9m8u1FoAlGakozHPH2e9WyzN8456ijHFJdR
-CinhLrZRZkg0Ku7cqrjQmBLXX1yJDCnVc5q2OGh1KFroWrO0OcSMP+jlHHbQ
-ynV0so2OqKgtTGi1mUqavdx6+nT3pHO0e7x79Lvdzsv9k72do62XdVJsEOLK
-FIEClRQGOvdvZx5BGKVZWvnyb/MYmWArwqKjZSypbl20CsHzzLdaTe4aCtrR
-bqr2DIByIu8ndBnx/WIra6vgBdh+JcTBzBrZs8xvcEyeocnH1GG9bieTWAAR
-lpYZksAvJj5Eju/LEL9g8goMCfLKbcOC66f2EFVLZeie/LCN2b80S1h0ivE4
-YlSkJi0R97fnr/TLpSstZW0USD0XVwtGlKaozbKE6SIZOoIYt5J4UgEpXWuY
-T213zjEXxi9cNIzfswR8hcAT9gtgxJwCFfcjKGBNAnf6vSEPVb5Rrvor1TkC
-JYSuvN1uLm4F3SYIVtoTrtaTxryz46iHUrIAsIKMqccmPNCmbERMfIJ/4Z7x
-QhPa6jVMoRvE3PWMtOr3mkaFJJhOsD8XB40x4Sauiim1qIcJ9oRSyrLW3Kjp
-JOrhBiCdFDTyZGMeo8ZKLXeAhYr9wPXHSENfb/50wwg4stuwFADqbAedOfQp
-R4w+BqW5tCJEf8gHDgZk074tE4eX/Z8KCTV6ZB5Fm5MHhCnVDsLivFxdOr/k
-tolkMB4JI5xQEhA72V3zO9Lu2zYrCnG3xiglN0aCiRNnCq8oUIAP0NsZ7kmn
-dCIx0OsEQZdbdpJMtHevtmnwlECErlJSwD7A2sezplihhlu3Hudj0WIO+uTu
-gs4oyjy5bJ0fDzCjg1UTcJoldEotJ8WCbqK16kxqpxzILOmrc7aIujT6aNH3
-FYLuA3AHhCCY6b0PNH8FRHNDbGb/9sjBg0usyQ4fbcP/L472jQB7Ecw2rbDx
-xvfqaXTKw+8va2bDW8hdLYuRdYKVdNNqqdXrz1m+saTDgp6KKE3CbNJ8IzDs
-e5dN0sCSLnNyV/CxaeHCgxF9BWU0YT5q7uoqAkRxpNCsNylDtyFGoGUlpHVD
-zyEJKGm4TIyWzbloKYt7ykSuMjjCIK8gD9eZs3xjxWVeTRhgRVpFzRcG8bHL
-HkWt3PzjiMRVhOFu7i+JHM0HmbkClkWpWkEtW/N84XNLArCQG3WSVgmAKMPo
-L5eA68z5/us0k7RGbpYZuVlwgaLA70/FtrJMoGKtBp5bUDm4SufDVpoJWp1D
-zN+RZw1k4m194+uapc9VMTDpjPxZdeZPmBEdiojh28ye0xCTy3IOM0tSaZrz
-sFA8mptKlrYNHciZw968UHyOtZ4iPCEvm4oRMU2KsTpth7vhVCC6VCrZsPai
-c0zn0rG7vop4zarKQUbFXGlER/Q4vmYH4Bv5E1lLKVBDG6OiRLJu8dDFkG+I
-4zh9l2rLMqxtSthaFqrYag2zCWpDNZY5aDkappRlQhkmwzHxUAMeEZS1oIrF
-Fd8Az8hjX7JSAGPwM9/L6NAfxFINxSxzDK3JLyKgNv0JLPWVLDHqIKlVDlaT
-XTrrdbamBnLwWV6YJ7OuOc/p4kh8f8gggwjZg0gY8MYlN6mvloa3bfqggg2J
-C6U7WjdCBwFmffVZanqahuJL7VxpllRNAAsGUDrXAEQLsQDpN8fPDrWTUCvn
-zQ52jzBVf9LZfnZ4crS1fYLQ6tazichCLDWTiZxn8XMxu0VYK7JqRY+onFYr
-41giGTc/Tp7tPNuUWxOOMHuiqITOaNGN7/NNkrE77aFaAdb3PRTFbeDyYx6I
-F3ZAtK+3gnrTPJ1xznXCBXOkKqej3vVjJgMs8CMSNZ6MetvFWTTaGm804xFX
-QmAkViMq2Tg7cOPTHR/f74NaaDYfptJUeVKqXoYHc8QmPBaVj4r0Xykji/U8
-nZ3d58+O90/q0kDZBt1KqVNLWS68ibwhM6h6dVLk35YzZLqjbqmlzbxZkrti
-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
+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
+kQAA
-->