From 6bb18b6e08965fef47612dd1e16a7a4e267911b4 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 9 Jun 2025 18:39:00 -0400 Subject: [PATCH 01/46] Rewrote rationale --- bip-0360.mediawiki | 156 +++++++++++++++++++++++++++++---------------- 1 file changed, 100 insertions(+), 56 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 001664ffb3..7659a641f2 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -3,6 +3,7 @@ Title: Pay to Quantum Resistant Hash Layer: Consensus (soft fork) Author: Hunter Beast + Ethan Heilman Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0360 Status: Draft @@ -16,7 +17,7 @@ === Abstract === -This document proposes the introduction of a new output type using signatures based on Post-Quantum Cryptography (PQC). +This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) allowing the use of Post-Quantum Cryptography (PQC) in Bitcoin. This approach for adding a post-quantum secure output type does not require a hard fork or block size increase. === Copyright === @@ -39,7 +40,7 @@ offering insufficient protection. The computational complexity of this attack is [https://pubs.aip.org/avs/aqs/article/4/1/013801/2835275/The-impact-of-hardware-specifications-on-reaching ''The impact of hardware specifications on reaching quantum advantage in the fault-tolerant regime'']. This proposal aims to mitigate these risks by introducing a Pay to Quantum Resistant Hash (P2QRH) output type that -relies on PQC signature algorithms. By adopting PQC, Bitcoin can enhance its quantum +makes tapscript quantum resistant and enables the use of PQC signature algorithms. By adopting PQC, Bitcoin can enhance its quantum resistance without requiring a hard fork or block size increase. The vulnerability of existing Bitcoin addressesA vulnerable Bitcoin address is any @@ -80,7 +81,7 @@ possible. Once the transaction is mined, it makes useless the public key reveale never reused. It is proposed to implement a Pay to Quantum Resistant Hash (P2QRH) output type that relies on a PQC signature -algorithm. This new output type protects transactions submitted to the mempool and helps preserve the free market by +algorithm. This new output type protects transactions submitted to the mempool and helps preserve the fee market by preventing the need for private, out-of-band mempool transactions. The following table is intended to inform the average Bitcoin user whether their bitcoin is vulnerable to a long-exposure @@ -176,60 +177,103 @@ It is proposed to use SegWit version 3. This results in addresses that start wit remember that these are quantum (r)esistant addresses. This is referencing the lookup table under [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. -P2QRH is meant to be implemented on top of P2TR, combining the security of classical Schnorr signatures along with -post-quantum cryptography. This is a form of hybrid cryptography such that no regression in security is presented -should a vulnerability exist in one of the signature algorithms used. One key distinction between P2QRH and P2TR -however is that P2QRH will encode a hash of the public key. This is a significant deviation from how Taproot works by -itself, but it is necessary to avoid exposing public keys on-chain where they are vulnerable to attack. - -P2QRH uses a 32-byte HASH256 (specifically SHA-256 twice-over) of the public key to reduce the size of new outputs and -also to increase security by not having the public key available on-chain. While HASH256 uses double SHA-256 like -Bitcoin's Proof of Work, this does not meaningfully increase quantum resistance compared to single SHA-256, as both -provide approximately 2^128 security against Grover's algorithm. The practical impact of quantum attacks on SHA-256 -remains theoretical since quantum circuits for SHA-256 are still theoretical, but using the same hash function as -Proof of Work maintains consistency with Bitcoin's existing security model. This hash serves as a minimal cryptographic -commitment to a public key in the style of a -[https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#user-content-Witness_program BIP-141 witness program]. -Because it goes into the scriptPubKey, it does not receive a witness or attestation discount. - -Post-quantum public keys are generally larger than those used by ECC, depending on the security level. -Originally BIP-360 proposed NIST Level V, 256-bit security, but this was changed to NIST Level I, 128-bit security -due to concerns over the size of the public keys, the time it would take to verify signatures, and being generally -deemed "overkill". - -Support for FALCON signatures will be introduced first, with the intention of adding other post-quantum -algorithms as they are approved. By way of comparison, FALCON signatures are roughly 20x larger than Schnorr signatures. -FALCON has recently been approved by NIST. NIST approval streamlines implementations through establishing -consensus in the scientific and developer community. This means, to maintain present transaction throughput, an -increase in the witness discount will likely be desired in a QuBit soft fork. That will be specified in a future QuBit -BIP. - -An increase in the witness discount must not be taken lightly. It must be resistant to applications that might take -advantage of this discount (e.g., storage of arbitrary data as seen with "inscriptions") without a corresponding +We believe any approach to augment Bitcoin with quantum resistance should meet the following requirements. Any +upgrade to Bitcoin's quantum resistance should: + +**Change as little as possible.** Unless absolutely necessary should reuse existing Bitcoin code, standards and the +existing expectations of how to use Bitcoin. + +**The upgrade must be gentle, staged and low cost.** Rather than require that wallets and exchanges immediately support +post-quantum signatures we must provide a way for them to gentle move to greater quantum resistance in small steps. This +is critical because an upgrade path which requires too much effort up front is unlikely to be adopted prior to a +a state of quantum emergency. The earlier the ecosystem begins upgrading to quantum resistance, the lower the number of +coins at risk when quantum attacks become practical. + +**Use NIST standardized post-quantum signature algorithms.** These algorithms have gotten the most scrutiny +and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit +from using the most popular post-quantum signature algorithms including leveraging hardware acceleration +instructions, commodity trusted hardware, software libraries and cryptography research. + +**Hedge against unexpected attacks on signature algorithms.** This is motivated by two factors. First, +Bitcoin must enable parties to hold coins securely for decades if not centuries. The history of cryptography is +one of unexpected breakthroughs in attacks. Thus, Bitcoin should enable the user of multiple signature algorithms +to hedge against the failure of any particular algorithm. Second, Many post-quantum algorithms are relatively new +and while it unlikely that a NIST standardized post-quantum signature algorithm will be broken, prudence dictates +that we plan for the worst. For these reasons we are proposing two post-quantum signature algorithms, one which +is intended as a performant replacement for Schnorr signatures and a far more conservative choice which provides +maximal assurance against unexpected attacks. Regardless of quantum attacks this maximal secure signature algorithm +is both a natural and valuable feature for Bitcoin to have. + +Using these guiding principles, we propose the following design for P2QRH. + +To change as little as possible, we designed P2QRH to be P2TR with the quantum vulnerable key-spend path removed. +Thus, rather than committing to a public key as P2TR does, P2QRH simply commits to the root +of the tapleaf merkle tree. This allows P2QRH to leverage the existing, mature and battle tested tapleaf code. +This reduces the implementation burden on wallets, exchanges, and parties in the Bitcoin ecosystem +since they can reuse the code they already have. P2QRH is a simplification of P2TR which removes +the quantum vulnerable key-spend in P2TR + +P2QRH will support both Schnorr and PQC signatures. This provides a gentle upgrade path for users, wallets and exchanges. +Users can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQC signatures. +This change alone protects against long-range quantum attacks. Then wallets can provide full quantum resistance by +adding support for PQC signatures as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. +In the event of that quantum attacks become practical, users in such outputs are fully protected as the P2QRH output +commits to a PQC signature. + +In looking at PQC signatures to support we follow our principle of using NIST standardized algorithms. As discussed above +NIST approval streamlines implementations establishes consensus in the scientific and developer community, sends a +strong signal that these algorithms will be well supported. Post-quantum public keys are generally larger than those +used by ECC, depending on the security level. Originally BIP-360 proposed NIST Level V, 256-bit security, but this was +changed to NIST Level I, 128-bit security due to concerns over the size of the public keys, the time it would take to +verify signatures, and being generally deemed "overkill". + +We considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), and FN-DSA (FALCON). Of these three algorithms, +SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective. This is because SLH-DSA +is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly +smaller than SLH-DSA signatures. However, FN-DSA and ML-DSA are based on lattice-based cryptography which is relatively +new and introduces novel security assumptions to Bitcoin. + +We choose to support Schnorr, ML-DSA, and SLH-DSA. As discussed earlier, supporting Schnorr in P2QRH +enables a gentle upgrade path. Additionally removing Schnorr from P2QRH tapscripts would add complexity, whereas +including requires no changes at all and provides maintains compatibility with tapscript. As ML-DSA and FN-DSA are +both similar lattice-based designs we choose to only support ML-DSA as the additional value of supporting FN-DSA is +marginal and would increase implementation cost. ML-DSA is intended to be the default PQC signature algorithm in +P2QRH as it provides a good balance of security, performance and signature size and is likely to the most widely +supported PQC signature algorithm. SLH-DSA has a radically different design than ML-DSA and provides an effective hedge +against unexpected attacks on signature algorithms on ML-DSA and Schnorr. + +P2QRH is designed to enable parties holding Bitcoin to combine the security of classical Schnorr signatures along +with both post-quantum signatures. This allows the construction of outputs such that funds are still secure +even if two of the three the signature algorithms are completely broken. This is motivated by the usecase of securely +storing Bitcoins in a cold wallet for extended periods of time (50 to 100 years). + +While it might be seen as a maintenance burden for Bitcoin ecosystem devs to support two additional distinct signature +algorithms--and it most certainly is--the ramifications of a chain broken through cryptanalytic breakthroughs, +quantum or otherwise, should provide sufficient motivation. The complexity involved in supporting multiple signature +algorithms should be seen as an acceptable compromise for maintained security of Bitcoin during a regime of quantum advantage. + +To improve the viability of the activation client and adoption by wallets and libraries, a library akin to +libsecp256k1 will be developed. This library, libbitcoinpqc, will support the new PQC signature algorithms +and can be used as a reference for other language-native implementations. + + +==== Future Considerations ==== + +We recognize that the size of CRYSTALS-Dilithium and SPHINCS+ signatures is a significant concern. By way of comparison with +Schnorr signatures, SPHINCS+ signatures are roughly 120x larger and CRYSTALS-Dilithium is roughly 40x larger. This means to +maintain present transaction throughput, an increase in the witness discount may be desired. + +An increase in the witness discount must not be taken lightly. Parties make take advantage of this discount for purposes other than +authorizing transactions (e.g., storage of arbitrary data as seen with "inscriptions") and just without a corresponding increase in economic activity. An increase in the witness discount would not only impact node runners but those with -inscriptions would also have the scarcity of their non-monetary assets affected. The only way to prevent these effects -while also increasing the discount is to have a completely separate witness--a "quantum witness." Because it is meant -only for public keys and signatures, we call this section of the transaction the attestation. - -Additionally, it should be noted, whether an output with a P2QRH spend script corresponds to a PQC signature is not -known until the output is spent. - -While it might be seen as a maintenance burden for Bitcoin ecosystem devs to go from a single cryptosystem -implementation to three additional distinct PQC cryptosystems--and it most certainly is--the ramifications of a chain -broken through extrinsic factors should provide sufficient motivation. An increase in software maintenance everywhere -signatures are used should be seen as an acceptable compromise for maintained integrity of Bitcoin transfers during a -regime of quantum advantage. - -The inclusion of these three cryptosystems: SPHINCS+, CRYSTALS-Dilithium, and FALCON have various advocates -within the community due to their varying security assumptions. Hash-based cryptosystems are more conservative, -time-tested, and well-reviewed. Lattice cryptography is relatively new and introduces novel security assumptions to -Bitcoin, but their signatures are smaller and might be considered by some to be an adequate alternative to hash-based -signatures. - -The reason multiple cryptosystems are included is in the interest of supporting hybrid cryptography, especially for -high value outputs, such as cold wallets used by exchanges. To improve the viability of the activation client and -adoption by wallets and libraries, a library akin to libsecp256k1 will be developed. This library, libbitcoinpqc, -will support the new PQC cryptosystems and can be used as a reference for other language-native implementations. +inscriptions would have the scarcity of their non-monetary assets affected. + +There was some hope of designing P2QRH such that discounted public keys and signatures could not be repurposed for the storage of +arbitrary data by requiring that they successfully be verified before being written to Bitcoin's blockchain, a.k.a. "JPEG resistance". +Later research +Bas Westerbaan (2025), [https://groups.google.com/g/bitcoindev/c/5Ff0jdQPofo jpeg resistance of various post-quantum signature schemes] +provided strong evidence that this was not a feasible approach for the NIST approved Post-Quantum signature algorithms. +It is an open question if Post-Quantum signature algorithms can be designed with to provide JPEG resistance property. In the distant future, following the implementation of the P2QRH output type in a QuBit soft fork, there will likely be a need for Pay to Quantum Secure (P2QS) addresses. A distinction is made between cryptography that's merely resistant From cba777e58710839e4c85392f7d49e391be14085a Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 9 Jun 2025 18:57:01 -0400 Subject: [PATCH 02/46] Fix bolded principles --- bip-0360.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 7659a641f2..e8a17170a1 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -180,21 +180,21 @@ remember that these are quantum (r)esistant addresses. This is referencing the l We believe any approach to augment Bitcoin with quantum resistance should meet the following requirements. Any upgrade to Bitcoin's quantum resistance should: -**Change as little as possible.** Unless absolutely necessary should reuse existing Bitcoin code, standards and the +*Change as little as possible.* Unless absolutely necessary should reuse existing Bitcoin code, standards and the existing expectations of how to use Bitcoin. -**The upgrade must be gentle, staged and low cost.** Rather than require that wallets and exchanges immediately support +*The upgrade must be gentle, staged and low cost.* Rather than require that wallets and exchanges immediately support post-quantum signatures we must provide a way for them to gentle move to greater quantum resistance in small steps. This is critical because an upgrade path which requires too much effort up front is unlikely to be adopted prior to a a state of quantum emergency. The earlier the ecosystem begins upgrading to quantum resistance, the lower the number of coins at risk when quantum attacks become practical. -**Use NIST standardized post-quantum signature algorithms.** These algorithms have gotten the most scrutiny +*Use NIST standardized post-quantum signature algorithms.* These algorithms have gotten the most scrutiny and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit from using the most popular post-quantum signature algorithms including leveraging hardware acceleration instructions, commodity trusted hardware, software libraries and cryptography research. -**Hedge against unexpected attacks on signature algorithms.** This is motivated by two factors. First, +*Hedge against unexpected attacks on signature algorithms.* This is motivated by two factors. First, Bitcoin must enable parties to hold coins securely for decades if not centuries. The history of cryptography is one of unexpected breakthroughs in attacks. Thus, Bitcoin should enable the user of multiple signature algorithms to hedge against the failure of any particular algorithm. Second, Many post-quantum algorithms are relatively new From 8f8f37385716e4cd122251988a84db8868b7b270 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 9 Jun 2025 18:59:30 -0400 Subject: [PATCH 03/46] Actually fix bold --- bip-0360.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index e8a17170a1..be631582ac 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -180,21 +180,21 @@ remember that these are quantum (r)esistant addresses. This is referencing the l We believe any approach to augment Bitcoin with quantum resistance should meet the following requirements. Any upgrade to Bitcoin's quantum resistance should: -*Change as little as possible.* Unless absolutely necessary should reuse existing Bitcoin code, standards and the +'''Change as little as possible.''' Unless absolutely necessary should reuse existing Bitcoin code, standards and the existing expectations of how to use Bitcoin. -*The upgrade must be gentle, staged and low cost.* Rather than require that wallets and exchanges immediately support +'''The upgrade must be gentle, staged and low cost.''' Rather than require that wallets and exchanges immediately support post-quantum signatures we must provide a way for them to gentle move to greater quantum resistance in small steps. This is critical because an upgrade path which requires too much effort up front is unlikely to be adopted prior to a a state of quantum emergency. The earlier the ecosystem begins upgrading to quantum resistance, the lower the number of coins at risk when quantum attacks become practical. -*Use NIST standardized post-quantum signature algorithms.* These algorithms have gotten the most scrutiny +'''Use NIST standardized post-quantum signature algorithms.''' These algorithms have gotten the most scrutiny and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit from using the most popular post-quantum signature algorithms including leveraging hardware acceleration instructions, commodity trusted hardware, software libraries and cryptography research. -*Hedge against unexpected attacks on signature algorithms.* This is motivated by two factors. First, +'''Hedge against unexpected attacks on signature algorithms.''' This is motivated by two factors. First, Bitcoin must enable parties to hold coins securely for decades if not centuries. The history of cryptography is one of unexpected breakthroughs in attacks. Thus, Bitcoin should enable the user of multiple signature algorithms to hedge against the failure of any particular algorithm. Second, Many post-quantum algorithms are relatively new From b2f3e9735d1ca597555923583406fb795312712f Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 9 Jun 2025 19:10:02 -0400 Subject: [PATCH 04/46] Updates to talk about signature + public key size rather than just signature size --- bip-0360.mediawiki | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index be631582ac..a2b9ad1364 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -220,19 +220,16 @@ adding support for PQC signatures as an additional tapleaf alongside Schnorr sig In the event of that quantum attacks become practical, users in such outputs are fully protected as the P2QRH output commits to a PQC signature. -In looking at PQC signatures to support we follow our principle of using NIST standardized algorithms. As discussed above -NIST approval streamlines implementations establishes consensus in the scientific and developer community, sends a -strong signal that these algorithms will be well supported. Post-quantum public keys are generally larger than those -used by ECC, depending on the security level. Originally BIP-360 proposed NIST Level V, 256-bit security, but this was -changed to NIST Level I, 128-bit security due to concerns over the size of the public keys, the time it would take to -verify signatures, and being generally deemed "overkill". - We considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), and FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective. This is because SLH-DSA is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly -smaller than SLH-DSA signatures. However, FN-DSA and ML-DSA are based on lattice-based cryptography which is relatively +smaller than SLH-DSA signatures. FN-DSA and ML-DSA are based on lattice-based cryptography which is relatively new and introduces novel security assumptions to Bitcoin. +Post-quantum public keys are generally larger than those used by ECC, depending on the security level. Originally BIP-360 +proposed NIST Level V, 256-bit security, but this was changed to NIST Level I, 128-bit security due to concerns over the +size of the public keys, the time it would take to verify signatures, and being generally deemed "overkill". + We choose to support Schnorr, ML-DSA, and SLH-DSA. As discussed earlier, supporting Schnorr in P2QRH enables a gentle upgrade path. Additionally removing Schnorr from P2QRH tapscripts would add complexity, whereas including requires no changes at all and provides maintains compatibility with tapscript. As ML-DSA and FN-DSA are @@ -259,9 +256,9 @@ and can be used as a reference for other language-native implementations. ==== Future Considerations ==== -We recognize that the size of CRYSTALS-Dilithium and SPHINCS+ signatures is a significant concern. By way of comparison with -Schnorr signatures, SPHINCS+ signatures are roughly 120x larger and CRYSTALS-Dilithium is roughly 40x larger. This means to -maintain present transaction throughput, an increase in the witness discount may be desired. +We recognize that the size of ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+) signatures + public key pairs is a significant concern. +By way of comparison with Schnorr public key + signature pairs, SLH-DSA is roughly 80x larger and ML-DSA is roughly 40x larger. This means to +maintain present transaction throughput, an increase in the witness discount may be desired. An increase in the witness discount must not be taken lightly. Parties make take advantage of this discount for purposes other than authorizing transactions (e.g., storage of arbitrary data as seen with "inscriptions") and just without a corresponding From d440e186b334bd5f0ba19d8ea79516ddb1386456 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 11 Jun 2025 18:01:33 -0400 Subject: [PATCH 05/46] Took a pass over rationale --- bip-0360.mediawiki | 114 +++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 60 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index a2b9ad1364..bfbbc4e242 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -177,84 +177,76 @@ It is proposed to use SegWit version 3. This results in addresses that start wit remember that these are quantum (r)esistant addresses. This is referencing the lookup table under [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. -We believe any approach to augment Bitcoin with quantum resistance should meet the following requirements. Any -upgrade to Bitcoin's quantum resistance should: +Our design to augment Bitcoin with quantum resistance is guided by the following principles: -'''Change as little as possible.''' Unless absolutely necessary should reuse existing Bitcoin code, standards and the -existing expectations of how to use Bitcoin. +'''Minimize changes.''' We should reuse existing Bitcoin code and preserve +existing software behavior, workflows, user expectations and compatibility whenever possible. -'''The upgrade must be gentle, staged and low cost.''' Rather than require that wallets and exchanges immediately support -post-quantum signatures we must provide a way for them to gentle move to greater quantum resistance in small steps. This -is critical because an upgrade path which requires too much effort up front is unlikely to be adopted prior to a -a state of quantum emergency. The earlier the ecosystem begins upgrading to quantum resistance, the lower the number of -coins at risk when quantum attacks become practical. +'''Gradual upgrade path.''' We should provide an upgrade path for wallets and exchanges which can be +carried out gradually and iteratively rather than all at once. This is critical as the earlier the ecosystem +begins upgrading to quantum resistance, the lower the number of coins at risk when quantum attacks become practical. -'''Use NIST standardized post-quantum signature algorithms.''' These algorithms have gotten the most scrutiny -and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit +'''Use standardized post-quantum signature algorithms.''' Standardized algorithms have gotten the most scrutiny and +are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit from using the most popular post-quantum signature algorithms including leveraging hardware acceleration instructions, commodity trusted hardware, software libraries and cryptography research. -'''Hedge against unexpected attacks on signature algorithms.''' This is motivated by two factors. First, -Bitcoin must enable parties to hold coins securely for decades if not centuries. The history of cryptography is -one of unexpected breakthroughs in attacks. Thus, Bitcoin should enable the user of multiple signature algorithms -to hedge against the failure of any particular algorithm. Second, Many post-quantum algorithms are relatively new -and while it unlikely that a NIST standardized post-quantum signature algorithm will be broken, prudence dictates -that we plan for the worst. For these reasons we are proposing two post-quantum signature algorithms, one which -is intended as a performant replacement for Schnorr signatures and a far more conservative choice which provides -maximal assurance against unexpected attacks. Regardless of quantum attacks this maximal secure signature algorithm -is both a natural and valuable feature for Bitcoin to have. - -Using these guiding principles, we propose the following design for P2QRH. - -To change as little as possible, we designed P2QRH to be P2TR with the quantum vulnerable key-spend path removed. -Thus, rather than committing to a public key as P2TR does, P2QRH simply commits to the root -of the tapleaf merkle tree. This allows P2QRH to leverage the existing, mature and battle tested tapleaf code. -This reduces the implementation burden on wallets, exchanges, and parties in the Bitcoin ecosystem -since they can reuse the code they already have. P2QRH is a simplification of P2TR which removes -the quantum vulnerable key-spend in P2TR - -P2QRH will support both Schnorr and PQC signatures. This provides a gentle upgrade path for users, wallets and exchanges. -Users can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQC signatures. -This change alone protects against long-range quantum attacks. Then wallets can provide full quantum resistance by -adding support for PQC signatures as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. -In the event of that quantum attacks become practical, users in such outputs are fully protected as the P2QRH output -commits to a PQC signature. +'''Provide security against unexpected cryptanalytic breakthroughs.''' Consider the risk +if Bitcoin only supported one PQ signature algorithm, and following the widespread deployment of CRQCs, a critical +weakness is unexpectedly discovered. There would be no safe algorithm available. For these +reasons Bitcoin we believe always have at least two secure signature algorithms built on orthogonal cryptographic assumptions +This ensures in the event one algorithm is broken an alternative will be available. This allows parties seeking to securely +store bitcoins over decades to lock coins under multiple algorithms, +ensuring their coins will not be stolen even in the face of a catastrophic break in one of those signature algorithms. + +Based on these principles, we propose two independent changes that together provide Bitcoin with +full quantum resistance. First, a new output type P2QRH (Pay to Quantum Resistant Hash) which enables tapscript +to be used in a quantum resistant manner. Second, we add opcodes to tapscript for two Post-Quantum (PQ) signature +algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+) to Bitcoin tapscript. Increasing the number of +tapscript signature algorithms to three: Schnorr, ML-DSA, and SLH-DSA. + +P2QRH is simply P2TR with the quantum vulnerable key-spend path removed. +Thus P2QRH commits to the root of a tapleaf merkle tree in the output. +This allows P2QRH to reuse the mature and battle tested P2TR, tapleaf and tapscript code already in Bitcoin. +In doing so it also reduces the implementation burden on wallets, exchanges, and libraries since +they can reuse code they already have. + +This design provides a gradual upgrade path as relying parties can move from P2TR to P2QRH without simultaneously having to +change from Schnorr signatures to PQC signatures. Simply moving coins from P2TR to P2QRH protects those coins from +long-range quantum attacks. Then to gain full quantum resistance, verification of PQC signatures can be added as an +additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. +In the event of that quantum attacks become practical, users would then be fully protected as the P2QRH output +as they could switch to sending their coins using the PQ signature algorithms. We considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), and FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective. This is because SLH-DSA is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly -smaller than SLH-DSA signatures. FN-DSA and ML-DSA are based on lattice-based cryptography which is relatively -new and introduces novel security assumptions to Bitcoin. +smaller than SLH-DSA signatures but are based on newer lattice-based cryptography. As ML-DSA and FN-DSA are both similar +lattice-based designs we choose to only support one of them as the additional value in diversity of cryptographic assumptions +would be small. -Post-quantum public keys are generally larger than those used by ECC, depending on the security level. Originally BIP-360 -proposed NIST Level V, 256-bit security, but this was changed to NIST Level I, 128-bit security due to concerns over the -size of the public keys, the time it would take to verify signatures, and being generally deemed "overkill". +ML-DSA is intended as the default PQ signature algorithm in Bitcoin. It provides a good balance of security, performance +and signature size and is likely to the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically +different design than ML-DSA and does not use have cryptographic assumption on lattice. As such SLH-DSA provides an effective +hedge against unexpected cryptanalytic breakthroughs on ML-DSA. -We choose to support Schnorr, ML-DSA, and SLH-DSA. As discussed earlier, supporting Schnorr in P2QRH -enables a gentle upgrade path. Additionally removing Schnorr from P2QRH tapscripts would add complexity, whereas -including requires no changes at all and provides maintains compatibility with tapscript. As ML-DSA and FN-DSA are -both similar lattice-based designs we choose to only support ML-DSA as the additional value of supporting FN-DSA is -marginal and would increase implementation cost. ML-DSA is intended to be the default PQC signature algorithm in -P2QRH as it provides a good balance of security, performance and signature size and is likely to the most widely -supported PQC signature algorithm. SLH-DSA has a radically different design than ML-DSA and provides an effective hedge -against unexpected attacks on signature algorithms on ML-DSA and Schnorr. - -P2QRH is designed to enable parties holding Bitcoin to combine the security of classical Schnorr signatures along -with both post-quantum signatures. This allows the construction of outputs such that funds are still secure -even if two of the three the signature algorithms are completely broken. This is motivated by the usecase of securely -storing Bitcoins in a cold wallet for extended periods of time (50 to 100 years). - -While it might be seen as a maintenance burden for Bitcoin ecosystem devs to support two additional distinct signature -algorithms--and it most certainly is--the ramifications of a chain broken through cryptanalytic breakthroughs, -quantum or otherwise, should provide sufficient motivation. The complexity involved in supporting multiple signature -algorithms should be seen as an acceptable compromise for maintained security of Bitcoin during a regime of quantum advantage. +P2QRH, ML-DSA, and SLH-DSA could be activated simultaneously in a single soft fork or P2QRH could be activated first and then +ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx opcodes. If as some future point another signature +algorithm was desired it could follow this pattern. + +One intent in supporting Schnorr, ML-DSA, and SLH-DSA in tapscript, is to allow parties to construct outputs such that funds +are still secure even if two of the three the signature algorithms are completely broken. This is motivated by the use case +of securely storing Bitcoins in a cold wallet for very long periods of time (50 to 100 years). To improve the viability of the activation client and adoption by wallets and libraries, a library akin to libsecp256k1 will be developed. This library, libbitcoinpqc, will support the new PQC signature algorithms and can be used as a reference for other language-native implementations. +==== PQ Signature Size ==== -==== Future Considerations ==== +Post-quantum public keys are generally larger than those used by ECC, depending on the security level. Originally BIP-360 +proposed NIST Level V, 256-bit security, but this was changed to NIST Level I, 128-bit security due to concerns over the +size of the public keys, the time it would take to verify signatures, and being generally deemed "overkill". We recognize that the size of ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+) signatures + public key pairs is a significant concern. By way of comparison with Schnorr public key + signature pairs, SLH-DSA is roughly 80x larger and ML-DSA is roughly 40x larger. This means to @@ -272,6 +264,8 @@ Bas Westerbaan (2025), [https://groups.google.com/g/bitcoindev/c/5Ff0jdQPofo jpe provided strong evidence that this was not a feasible approach for the NIST approved Post-Quantum signature algorithms. It is an open question if Post-Quantum signature algorithms can be designed with to provide JPEG resistance property. +==== Future Considerations ==== + In the distant future, following the implementation of the P2QRH output type in a QuBit soft fork, there will likely be a need for Pay to Quantum Secure (P2QS) addresses. A distinction is made between cryptography that's merely resistant to quantum attack, and cryptography that's secured by specialized quantum hardware. P2QRH is resistant to quantum From 5ba13b2ae27fe59a19ada8777fe4480b5f97cd1a Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 12 Jun 2025 17:39:01 -0400 Subject: [PATCH 06/46] Started work on specification --- bip-0360.mediawiki | 142 +++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 83 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index bfbbc4e242..4f0a34f3a6 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -17,8 +17,9 @@ === Abstract === -This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) allowing the use of Post-Quantum Cryptography (PQC) in Bitcoin. -This approach for adding a post-quantum secure output type does not require a hard fork or block size increase. +This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) and two PQ (Post-Quantum) signature algorithms. +This changes would enable the use of Bitcoin transactions and tapscripts that are secure against Cryptoanalytically-Relevant Quantum Computers (CRQCs). +This approach for adding a post-quantum secure output type and signatures does not require a hard fork or block size increase. === Copyright === @@ -186,46 +187,46 @@ existing software behavior, workflows, user expectations and compatibility whene carried out gradually and iteratively rather than all at once. This is critical as the earlier the ecosystem begins upgrading to quantum resistance, the lower the number of coins at risk when quantum attacks become practical. -'''Use standardized post-quantum signature algorithms.''' Standardized algorithms have gotten the most scrutiny and +'''Prudence Use standardized post-quantum signature algorithms.''' Standardized algorithms have gotten the most scrutiny and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit from using the most popular post-quantum signature algorithms including leveraging hardware acceleration instructions, commodity trusted hardware, software libraries and cryptography research. '''Provide security against unexpected cryptanalytic breakthroughs.''' Consider the risk -if Bitcoin only supported one PQ signature algorithm, and following the widespread deployment of CRQCs, a critical -weakness is unexpectedly discovered. There would be no safe algorithm available. For these -reasons Bitcoin we believe always have at least two secure signature algorithms built on orthogonal cryptographic assumptions -This ensures in the event one algorithm is broken an alternative will be available. This allows parties seeking to securely -store bitcoins over decades to lock coins under multiple algorithms, +if Bitcoin only supported one PQ signature algorithm, and following the widespread rollout of CRQCs, a critical +weakness is unexpectedly discovered in this signature algorithm. There would be no safe algorithm available. We believe that +prudence dictates we take such risks seriously and ensure that Bitcoin always has at least two secure signature algorithms built +on orthogonal cryptographic assumptions. In the event one algorithm is broken an alternative will be available. An added benefit +is that parties seeking to securely store bitcoins over decades can secure their coins under multiple algorithms, ensuring their coins will not be stolen even in the face of a catastrophic break in one of those signature algorithms. -Based on these principles, we propose two independent changes that together provide Bitcoin with -full quantum resistance. First, a new output type P2QRH (Pay to Quantum Resistant Hash) which enables tapscript -to be used in a quantum resistant manner. Second, we add opcodes to tapscript for two Post-Quantum (PQ) signature -algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+) to Bitcoin tapscript. Increasing the number of -tapscript signature algorithms to three: Schnorr, ML-DSA, and SLH-DSA. - -P2QRH is simply P2TR with the quantum vulnerable key-spend path removed. -Thus P2QRH commits to the root of a tapleaf merkle tree in the output. -This allows P2QRH to reuse the mature and battle tested P2TR, tapleaf and tapscript code already in Bitcoin. -In doing so it also reduces the implementation burden on wallets, exchanges, and libraries since -they can reuse code they already have. - -This design provides a gradual upgrade path as relying parties can move from P2TR to P2QRH without simultaneously having to -change from Schnorr signatures to PQC signatures. Simply moving coins from P2TR to P2QRH protects those coins from -long-range quantum attacks. Then to gain full quantum resistance, verification of PQC signatures can be added as an -additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. -In the event of that quantum attacks become practical, users would then be fully protected as the P2QRH output -as they could switch to sending their coins using the PQ signature algorithms. - -We considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), and FN-DSA (FALCON). Of these three algorithms, -SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective. This is because SLH-DSA -is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly -smaller than SLH-DSA signatures but are based on newer lattice-based cryptography. As ML-DSA and FN-DSA are both similar -lattice-based designs we choose to only support one of them as the additional value in diversity of cryptographic assumptions -would be small. - -ML-DSA is intended as the default PQ signature algorithm in Bitcoin. It provides a good balance of security, performance +Based on these principles, we propose two independent changes that together provide Bitcoin with +full quantum resistance. First, a new output type P2QRH (Pay to Quantum Resistant Hash) so that tapscript +can be used in a quantum resistant manner. Second, we add opcodes to tapscript for verifying two Post-Quantum (PQ) signature +algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). + +P2QRH is simply P2TR with the quantum vulnerable key-spend path removed so that it commits to the root of +the tapleaf merkle tree in the output and to remove the witness element size limit of 520 bytes, as PQ +signatures are larger than 520 bytes. This allows P2QRH to reuse the mature and battle tested P2TR, tapleaf +and tapscript code already in Bitcoin. This reduces the implementation burden on wallets, exchanges, and +libraries since they can reuse code they already have. + +By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH +without simultaneously having to change from Schnorr signatures to PQ signatures. Simply moving coins from +P2TR to P2QRH protects those coins from long-range quantum attacks. Then to gain full quantum resistance, +verification of PQC signatures can be added as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. +When quantum attacks become practical, users would then be fully protected as the P2QRH output would allow +them to switch to sending their coins using the PQ signature algorithms. This allows the upgrade to quantum +resistance to be largely invisible to users. + +For PQ signatures we considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), +and FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative +choice from a security perspective because SLH-DSA is based on well studied and time-tested hash-based cryptography. +Both FN-DSA and ML-DSA signatures are significantly smaller than SLH-DSA signatures but are based on newer lattice-based +cryptography. As ML-DSA and FN-DSA are both similar lattice-based designs we choose to only support one of them as the +additional value in diversity of cryptographic assumptions would be small. + +ML-DSA is intended as the main PQ signature algorithm in Bitcoin. It provides a good balance of security, performance and signature size and is likely to the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically different design than ML-DSA and does not use have cryptographic assumption on lattice. As such SLH-DSA provides an effective hedge against unexpected cryptanalytic breakthroughs on ML-DSA. @@ -259,77 +260,52 @@ inscriptions would have the scarcity of their non-monetary assets affected. There was some hope of designing P2QRH such that discounted public keys and signatures could not be repurposed for the storage of arbitrary data by requiring that they successfully be verified before being written to Bitcoin's blockchain, a.k.a. "JPEG resistance". -Later research -Bas Westerbaan (2025), [https://groups.google.com/g/bitcoindev/c/5Ff0jdQPofo jpeg resistance of various post-quantum signature schemes] +Later research Bas Westerbaan (2025), [https://groups.google.com/g/bitcoindev/c/5Ff0jdQPofo jpeg resistance of various post-quantum signature schemes] provided strong evidence that this was not a feasible approach for the NIST approved Post-Quantum signature algorithms. It is an open question if Post-Quantum signature algorithms can be designed with to provide JPEG resistance property. ==== Future Considerations ==== -In the distant future, following the implementation of the P2QRH output type in a QuBit soft fork, there will likely -be a need for Pay to Quantum Secure (P2QS) addresses. A distinction is made between cryptography that's merely resistant -to quantum attack, and cryptography that's secured by specialized quantum hardware. P2QRH is resistant to quantum -attack, while P2QS is quantum secure. These will require specialized quantum hardware for signing, while still -[https://quantum-journal.org/papers/q-2023-01-19-901/ using public keys that are verifiable via classical means]. - -While P2QRH lacks features like signature aggregation for smaller transactions, it offers a pragmatic first step -toward quantum resistance. Future BIPs can add enhancements like P2QS, signature aggregation, and possibly full +While P2QRH lacks features like signature aggregation, it offers a pragmatic first step +toward quantum resistance. Future BIPs can add enhancements like signature aggregation, and possibly full BIP-32 compatibility once tested and viable. Until quantum cryptography hardware and advanced schemes are widespread, -P2QRH provides meaningful protection against quantum threats without delaying deployment for a perfect solution. +P2QRH provides meaningful protection against quantum threats as early as possible. -Additional follow-on BIPs will be needed to implement P2QS, signature aggregation, and full BIP-32 compatibility +Additional follow-on BIPs will be needed to implement signature aggregation, and full BIP-32 compatibility (if possible) BIP-32 relies on elliptic curve operations to derive keys from xpubs to support watch-only wallets, which PQC schemes may not support.. However, until specialized quantum cryptography hardware -is widespread and signature aggregation schemes are thoroughly vetted, P2QRH addresses should be an adequate -intermediate solution that provides meaningful protection against quantum threats. +is widespread and signature aggregation schemes are thoroughly vetted, P2QRH addresses are an intermediate solution +to quantum threats. == Specification == We define the signature scheme and transaction structure as follows. -=== Descriptor Format === - -To integrate P2QRH into existing wallet software and scripts, we introduce a new output descriptor function -qrh(). This function represents a P2QRH output, similar to how wpkh() and tr() -are used for P2WPKH and P2TR outputs, respectively. - -The qrh() function takes a threshold value and multiple key specifications grouped by key type. The format is: +=== Pay to Quantum Resistant Hash (P2QRH) === - qrh(threshold, keytype(0x01, [hash1, hash2, ...]), keytype(0x02, [hash1, hash2, ...]), ...) - -Where: +An P2QRH output is simply the root of the tapscript merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] +and used as an internal value in P2TR. -* threshold is an integer specifying the minimum number of signatures required -* keytype is the hex value representing the key type (0x01 for secp256k1, 0x02 for FALCON-512, 0x04 for CRYSTALS-Dilithium Level I, 0x08 for SPHINCS+-128s) -* [hash1, hash2, ...] is an array of HASH256 hashes of public keys for the corresponding algorithm type +To construct a P2QRH output we follow the same process as [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] +to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hash together with the internal +key in P2QRH the root is hashed by itself under the tag name "QuantumRoot". -For example: + +D = tagged_hash("TapLeaf", bytes([leaf_version]) + ser_script(script)) +CD = tagged_hash("TapBranch", C + D) +CDE = tagged_hash("TapBranch", E + CD) +ABCDE = tagged_hash("TapBranch", AB + CDE) +Root = tagged_hash("QuantumRoot", p + ABCDE) + - qrh(3, keytype(0x01, hash256(secp256k1_pubkey1), hash256(secp256k1_pubkey2), hash256(secp256k1_pubkey3), secp256k1_pubkey4_hash, secp256k1_pubkey5_hash), - keytype(0x02, hash256(falcon_pubkey1), hash256(falcon_pubkey2), hash256(falcon_pubkey3), falcon_pubkey4_hash, falcon_pubkey5_hash), - keytype(0x04, hash256(dilithium_pubkey1), hash256(dilithium_pubkey2), hash256(dilithium_pubkey3), dilithium_pubkey4_hash, dilithium_pubkey5_hash), - keytype(0x08, hash256(sphincs_pubkey1), hash256(sphincs_pubkey2), hash256(sphincs_pubkey3), sphincs_pubkey4_hash, sphincs_pubkey5_hash)) +TODO: Add image of P2QRH output merkle tree structure. -This represents a 3-of-5 multisig for each key type, with a total of 20 keys: 5 keys per type (3 full public keys and 2 -hashes) across 4 different key types. +The main difference in verification is that we PQ signatures and public keys can be significantly +larger than 520 stack element size. -Internally, the descriptor computes the HASH256 of the concatenated HASH256 of all the quantum-resistant public keys, -with the threshold and key type bitmask prepended. For each key in the descriptor: -- If it is already a hash (indicated in the descriptor), it is used directly -- If it is a public key, HASH256 is applied to it first -This approach ensures that all items in the vector are HASH256 values, whether they originated from raw public keys or -were provided as hashes. During spending, this allows for selective disclosure of public keys, where some keys can -remain hidden (represented only by their hashes) while others are fully revealed with their corresponding public keys. -This flexibility is particularly valuable in multisig schemes where not all keys need to be revealed to satisfy the -threshold requirement. At a minimum, there should be two different key types in a P2QRH output: one key that makes use -of classical cryptography, and one that makes use of a PQC algorithm chosen within the wallet. -Also, it's important to note that order of keys and hashes in the descriptor matters and is based on the original -public key values, in addition to the key type. Additionally, qrh() does not compile to script, but instead, describes -what's needed to compute the scriptPubKey hash commitment and also to reveal the attestation needed to spend the -output. === Address Format === From 5c2272fe07b0ba6db8bfa85f127ebd8c901ecd70 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 13 Jun 2025 17:51:50 -0400 Subject: [PATCH 07/46] Adds example tapscript hybrid signatures --- bip-0360.mediawiki | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 4f0a34f3a6..dd84bba544 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -219,6 +219,19 @@ When quantum attacks become practical, users would then be fully protected as th them to switch to sending their coins using the PQ signature algorithms. This allows the upgrade to quantum resistance to be largely invisible to users. +Consider the P2QRH output with three tapscripts: + +* Spend requires a Schnorr signature +* Spend requires a ML-DSA signature +* Spend requires a SLH-DSA signature + +In the event that Schnorr signatures are broken, users can spend their coins using ML-DSA. +If Schnorr and ML-DSA, the user has SLH-DSA signature as the ultimate back up. + +One intent in supporting Schnorr, ML-DSA, and SLH-DSA in tapscript, is to allow parties to construct outputs such that funds +are still secure even if two of the three the signature algorithms are completely broken. This is motivated by the use case +of securely storing Bitcoins in a cold wallet for very long periods of time (50 to 100 years). + For PQ signatures we considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), and FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective because SLH-DSA is based on well studied and time-tested hash-based cryptography. @@ -235,10 +248,6 @@ P2QRH, ML-DSA, and SLH-DSA could be activated simultaneously in a single soft fo ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx opcodes. If as some future point another signature algorithm was desired it could follow this pattern. -One intent in supporting Schnorr, ML-DSA, and SLH-DSA in tapscript, is to allow parties to construct outputs such that funds -are still secure even if two of the three the signature algorithms are completely broken. This is motivated by the use case -of securely storing Bitcoins in a cold wallet for very long periods of time (50 to 100 years). - To improve the viability of the activation client and adoption by wallets and libraries, a library akin to libsecp256k1 will be developed. This library, libbitcoinpqc, will support the new PQC signature algorithms and can be used as a reference for other language-native implementations. From 5b8c5c40c54b9f4eba561189a9811949c94e4854 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 15 Jun 2025 15:33:06 -0400 Subject: [PATCH 08/46] More work on the specification --- bip-0360.mediawiki | 309 +++++++++------------------------------------ 1 file changed, 60 insertions(+), 249 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index dd84bba544..4186af987e 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -12,7 +12,6 @@ License: BSD-3-Clause - == Introduction == === Abstract === @@ -309,267 +308,94 @@ Root = tagged_hash("QuantumRoot", p + ABCDE) TODO: Add image of P2QRH output merkle tree structure. -The main difference in verification is that we PQ signatures and public keys can be significantly -larger than 520 stack element size. - - - - - -=== Address Format === - -P2QRH uses SegWit version 3 outputs, resulting in addresses that start with bc1r, following -[https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. Bech32 encoding maps version 3 to the -prefix r. - -Example P2QRH address: - -bc1r... (32-byte Bech32m-encoded HASH256 of the HASH256 of the public keys) - -=== ScriptPubKey === - -The scriptPubKey for a P2QRH output is: - - OP_PUSHNUM_3 OP_PUSHBYTES_32 - -Where: - -* OP_PUSHNUM_3 (0x03) indicates SegWit version 3. -* is the 32-byte HASH256 of the commitment, as defined in the Hash Commitment section below. - -==== Key Type Bitmask ==== - -The key type bitmask is a 1-byte value that indicates the type of key used in the commitment. It is encoded as follows: - -* 0x01 - Key type 0 - secp256k1 -* 0x02 - Key type 1 - FALCON-512 -* 0x04 - Key type 2 - CRYSTALS-Dilithium Level I -* 0x08 - Key type 3 - SPHINCS+-128s -* 0x10 - Unused -* 0x20 - Unused -* 0x40 - Unused -* 0x80 - Reserved for if additional key types are added in the future - -Example key type bitmask using all supported key types: - - 0x01 | 0x02 | 0x04 | 0x08 = 0x0F - -==== Hash Commitment ==== - -If there is only a single public key, the hash is computed as the HASH256 of the public key. - -In order to support multiple keys, as in the context of multisig or singlesig hybrid cryptography, the hash is -computed as a commitment to a vector of public key hashes: - -1. Sort the public keys first by key type, then by public key value -2. For each sorted public key, compute its HASH256 -3. Concatenate all the public key hashes in sorted order -4. Prepend key type bitmask and threshold to the concatenated hashes -5. Compute the HASH256 of the result - -For example with 4 public keys: - - // First sort the public keys - sorted_pubkeys = sort_by_key_type_and_value([pubkey1, pubkey2, pubkey3, pubkey4]) - - // Then compute hashes of sorted keys - h1 = HASH256(sorted_pubkeys[0]) - h2 = HASH256(sorted_pubkeys[1]) - h3 = HASH256(sorted_pubkeys[2]) - h4 = HASH256(sorted_pubkeys[3]) - - // Concatenate all hashes - concatenated = h1 || h2 || h3 || h4 - - commitment = key_type_bitmask || threshold || concatenated - - hash = HASH256(commitment) - -With sort_by_key_type_and_value defined as: - - def sort_by_key_type_and_value(pubkeys): - return sorted(pubkeys, key=lambda x: (x.key_type, x.public_key)) - -When spending, if a public key hash is provided in the attestation with an empty signature, that hash will be used -directly in the vector computation rather than hashing the full public key. This allows unused public keys to be -excluded from the transaction while still proving they were part of the original commitment. - -The vector construction creates an efficient cryptographic commitment to multiple public keys while enabling -selective disclosure. - -A threshold is provided to indicate the number of signatures required to spend the output. This is used in the -cryptographic commitment in the hash computation and revealed in the attestation when spent. - -Only a single 32-byte X-only secp256k1 public key can be provided as key type 0. There are a few reasons for this: - -1. It maintains Taproot compatibility by removing ambiguity which key is representative of the Taptree. -2. It prevents abuse of public keys to store arbitrary data once quantum computing is ubiquitous. -3. When a secp256k1 key is specified in the key type bitmask, how many keys it commits to is unambiguous. -4. If multiple keys need to be committed to, they must be aggregated, which saves on transaction size. +Validation follows the pattern of a P2TR script spend but without the P2TR public key or internal key. +A P2QRH input provides the following: -This design maintains compatibility for [https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki BIP-114] -Taproot Merkelized Alternative Script Tree (MAST) merkle root in the commitment, which makes P2QRH a -quantum-resistant version of Taproot transactions. The TapScript itself must however be provided in the witness, -as no script execution is allowed in the attestation. - -In a multisig context, aside from secp256k1 keys, the number of keys provided in the attestation is variable and -must meet the threshold as committed to in the hash computation and revealed in the attestation. - -When the address is generated, all public keys must be known in advance, and they must be sorted, first by key -type, then by public key value, so as to be deterministic. - -The key count does not need to be provided for PQC keys because the key type bitmask and threshold are sufficient -to validate a multisig transaction. - -In a singlesig context, multiple PQC keys can be provided, but the key type bitmask and threshold must still also -be provided to be consistent with the multisig semantics. The threshold will be set as 0x01, and the key type -bitmask will indicate how many keys of each type are present. - -=== Transaction Serialization === - -Following BIP-141, a new transaction serialization format is introduced to include an attestation field after the witness field: - - [nVersion][marker][flag][txins][txouts][witness][attestation][nLockTime] - -* marker: 0x00 (same as SegWit) -* flag: -** 0x02 (indicates the presence of attestation data only) -** 0x03 (indicates the presence of both witness and attestation data) -* attestation: Contains the quantum-resistant public keys and signatures. - -=== Quantum Transaction ID (qtxid) === - -The transaction ID is computed as the HASH256 of the serialized transaction, including the attestation and witness -(if a witness is present). When decoded, this is called the qtxid, which will differ from the txid and wtxid if an -attestation is present. - -=== Attestation Structure === - -The attestation field consists of: - -* key_type_bitmask: A [https://learnmeabitcoin.com/technical/general/compact-size/ compact size] value indicating which key types are present. -* threshold: A compact size value indicating the number of signatures required to spend the output. -* num_pubkeys: The number of public keys (compact size). - -For each public key: - -* key_type: The key type (compact size). Only one bit is used to indicate the key type. -* pubkey_length: compact size length of the public key (compact size). -* pubkey: The public key bytes. - -Then: - -* num_signatures: The number of signatures (compact size). + +script witness stack, +tapleaf script, +control block = [version byte, m*32 byte merkle path] + -For each signature: +The script witness stack provides the same functionality as it does in P2TR. It places input values on the stack to +be evaluated by the tapscript. -* signature_length: compact size length of the signature. -* signature: The signature bytes. +A P2QRH script witness stack differs in only one way from a P2TR script witness stack. P2QRH does not limit the size +of the witness stack elements to 520 bytes. This is needed because PQ signatures and public keys can be larger than +520 bytes. -This structure repeats for each input, in order, for flexibility in supporting multisig schemes and various -quantum-resistant algorithms. +The tapleaf script is a tapscript that is executed to validate the input. The tapscript in P2QRH is unchanged from BIP-342. -For each input, a separate attestation field is used. To know how many attestation fields are present, implementations -must count the number of inputs present in the transaction. +The control block is a 1 + 32+m byte array, where the first byte is the version byte and the next 32+m bytes are the +Merkle path to the tapleaf script. The intent of the version byte is to similar to the header byte in a P2TR control +block, but all 8 bits are used for versioning. We omit the public key from the control block as it is not needed in P2QRH. -==== Attestation Parsing Example ==== +A consequence of the above design, tapscript can not pass a PQ public key to be verified with a PQ signature if the +PQ public key is larger than 520 bytes. This is because while the script stack can contain stack elements larger +than 520 bytes, the OP_PUSH opcode in tapscript can not push stack elements larger than 520 bytes. To get arounds issue the +tapscript can push the HASH256 of the PQ public key and then verify that the PQ public key from the script witness stack +hashes to value committed in the tapscript. -Signing for a single input using both secp256k1 Schnorr and FALCON-512: + +script_witness_stack = [pubkey, signature] +tapscript = [OP_DUP, OP_HASH256, OP_PUSH HASH256(expected_pubkey), OP_EQUALVERIFY, OP_PQCHECKSIGVERIFY] + -Number of public keys: +TODO: We should think very carefully about any issues allowing larger witness stack elements may cause because tapscript +assumes no stack element sizes greater than 520 bytes. - [key_type_bitmask]: 0x03 - [threshold]: 0x01 - [num_pubkeys]: 0x02 +==== Script Validation ==== -Pubkey 1: - [key_type]: 0x01 - [pubkey_length]: 0x20 (32 bytes) - [pubkey]: public_key_secp256k1 +To spend a P2QRH output, the following conditions must be met: -Pubkey 2: - [key_type]: 0x02 - [pubkey_length]: 0x0701 (1793 bytes) - [pubkey]: public_key_falcon_512 +1. The scriptPubKey must be of the form: -Number of signatures: +OP_PUSHNUM_3 <32-byte hash> - [num_signatures]: 0x02 +TODO: Very specific specification of P2QRH validation -Signature 1: - [signature_length]: 0x40 (64 bytes) - [signature]: signature_secp256k1 -Signature 2: - [signature_length]: 0x0500 (1280 bytes) - [signature]: signature_falcon_512 +==== Address Format ==== -Note: This contrasts with multisig inputs, where the attestation structure repeats for each public key and signature. +P2QRH uses SegWit version 3 outputs, resulting in addresses that start with bc1r, following +[https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. Bech32 encoding maps version 3 to the +prefix r. -=== Signature Algorithms === +Example P2QRH address: -The specific quantum-resistant signature algorithm used cannot be inferred from the length of the public key due to -collisions in length between algorithms. Instead, when each key is revealed in the attestation, the key type bitmask -indicates which algorithm was used. +bc1r... (32-byte Bech32m-encoded tagged hash tapleaf merkle root) -Supported PQC algorithms and their NIST Level I parameters: +==== ScriptPubKey ==== -* '''secp256k1 - BIP-340 - Schnorr + X-Only''' -** Key Type 0 -** Public Key Length: 32 bytes -** Signature Length: 64 bytes -** Total Size: 96 bytes -** Cycles to sign: 42,000 (EdDSA) -** Cycles to verify: 130,000 (EdDSA) -* '''FN-DSA-512 - FIPS 206 - FALCON-512:''' -** Key Type 1 -** Public Key Length: 897 bytes -** Signature Length: 667 bytes -** Total Size: 1,564 bytes -** Cycles to sign: 1,009,764 -** Cycles to verify: 81,036 -* '''ML-DSA-44 - FIPS 204 - CRYSTALS-Dilithium Level I:''' -** Key Type 2 -** Public Key Length: 1,312 bytes -** Signature Length: 2,420 bytes -** Total Size: 3,732 bytes -** Cycles to sign: 333,013 -** Cycles to verify: 118,412 -* '''SLH-DSA-SHAKE-128s - FIPS 205 - SPHINCS+-128s:''' -** Key Type 3 -** Public Key Length: 32 bytes -** Signature Length: 7,856 bytes -** Total Size: 7,888 bytes -** Cycles to sign: 4,682,570,992 -** Cycles to verify: 4,764,084 +The scriptPubKey for a P2QRH output is: -Implementations must recognize the supported algorithms and validate accordingly. + OP_PUSHNUM_3 OP_PUSHBYTES_32 -A bitmask is used to indicate the algorithm used for each public key and signature pair. The bitmask enumerates based on -the key type as indicated above. This is used in the cryptographic commitment in the hash computation and -revealed in the attestation for each public key when spent. +Where: -=== Script Validation === +* OP_PUSHNUM_3 (0x03) indicates SegWit version 3. +* is the 32-byte HASH256 of the commitment, as defined in the Hash Commitment section below. -To spend a P2QRH output, the following conditions must be met: +=== Post-Quantum Signature Algorithms === -1. The scriptPubKey must be of the form: +We propose adding the opcodes OP_CHECKSIG_ML (ML-DSA) and OP_CHECKSIG_SHL (SLH-DSA) to tapscript by redefining OP_SUCCESSx +opcodes. As ML-DSA and SLH-DSA are post-quantum signature algorithms this would allow the user of post-quantum signatures +in tapscript. -OP_PUSHNUM_3 <32-byte hash> +These opcodes function similarly to the existing OP_CHECKSIG opcode. They pop the public key and signature from the stack +and then perform signature verification using the specified post-quantum signature algorithm. -2. The attestation must include: +TODO: Open questions: +TODO: 1. Should we have OP_CHECKSIG_VERIFY and OP_CHECKSIGADD variants as well? +TODO: 2. These these opcodes been in a seperate BIP? -* The quantum-resistant public key(s) whose HASH256 concatenated and hashed again matches the in -the scriptPubKey. +==== OP_CHECKSIG_ML ==== -* Valid signatures corresponding to the public key(s) and the transaction data. +TODO: Add full specification here -* The key type bitmask and threshold must match the commitment in the scriptPubKey. +==== OP_CHECKSIG_SHL ==== -3. For multi-signature schemes, all required public keys and signatures must be provided for that input within the -attestation. Public keys that are not needed or available can be selectively disclosed by including their hash in the -attestation accompanied with an empty signature by providing a 0x00 signature length byte. This works so long as -enough keys to meet the threshold are provided. +TODO: Add full specification here ==== Sighash Calculation ==== @@ -580,6 +406,8 @@ The sighash for P2QRH outputs follows the same procedure as defined in [https:// * '''Key Data:''' In addition to transaction data, the sighash includes the spent output's scriptPubKey. * '''Extension Fields:''' Specific data is included or excluded from the sighash based on the sighash flag. +TODO: Do we want to change the tag name to "QuantumSighash" for PQ signatures? + This signature hash construction ensures transaction malleability is prevented while providing flexibility through different sighash types (DEFAULT, ALL, NONE, SINGLE, and ANYONECANPAY variants). The exact computation follows the procedure specified in BIP-341 to maintain compatibility with Taproot signatures. @@ -587,23 +415,6 @@ procedure specified in BIP-341 to maintain compatibility with Taproot signatures If a sighash flag other than DEFAULT is needed, it can be placed in the transaction witness. In this case, it will be the only field in the witness. -==== Signature Verification ==== - -Signature verification is as follows: - -1. Extract the from the scriptPubKey. - -2. For each input: - -* Compute hashed_pubkeys as specified in the Hash Computation section. - -* Compare the resulting hash to . If they do not match, the script fails. - -3. Verify each signature against the corresponding public key and the sighash. - -4. Ensure that the signature algorithm used matches the expected lengths for NIST Level I security, and is supported by -the implementation. - === Compatibility with BIP-141 === By adhering to the SegWit transaction structure and versioning, P2QRH outputs are compatible with existing transaction @@ -629,7 +440,7 @@ key generation. ==== Algorithm Selection ==== -Introducing three quantum-resistant algorithms to the Bitcoin ecosystem provides users with the option to select an +Introducing two quantum-resistant algorithms to the Bitcoin ecosystem provides users with the option to select an appropriate algorithm for their use case, generally based on the amount of value they wish to secure. Developers can choose to implement support for multiple algorithms in wallets and on nodes to offer quantum-resistant options. From 8c4a7004d31b4898618c4b23ccceb55cbafcbef8 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 15 Jun 2025 16:10:28 -0400 Subject: [PATCH 09/46] Cleans up TODO --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 4186af987e..704fbb0e05 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -406,7 +406,7 @@ The sighash for P2QRH outputs follows the same procedure as defined in [https:// * '''Key Data:''' In addition to transaction data, the sighash includes the spent output's scriptPubKey. * '''Extension Fields:''' Specific data is included or excluded from the sighash based on the sighash flag. -TODO: Do we want to change the tag name to "QuantumSighash" for PQ signatures? +TODO: Currently BIP-360 proposes using the tag "TapSighash" in the tagged hash of the sighash for PQ signatures. I can see an argument that the sighash should be specific to the signature algorithm used to prevent signatures from one algorithm being used for an algorithm, e.g. "TapSighashML" for ML-DSA This signature hash construction ensures transaction malleability is prevented while providing flexibility through different sighash types (DEFAULT, ALL, NONE, SINGLE, and ANYONECANPAY variants). The exact computation follows the From 9b03c2e59e6c137b36b9e353f324b925634effe6 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 15 Jun 2025 17:15:23 -0400 Subject: [PATCH 10/46] Fixing grammar, other minor changes --- bip-0360.mediawiki | 57 +++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 704fbb0e05..fc548461e1 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -40,7 +40,7 @@ offering insufficient protection. The computational complexity of this attack is [https://pubs.aip.org/avs/aqs/article/4/1/013801/2835275/The-impact-of-hardware-specifications-on-reaching ''The impact of hardware specifications on reaching quantum advantage in the fault-tolerant regime'']. This proposal aims to mitigate these risks by introducing a Pay to Quantum Resistant Hash (P2QRH) output type that -makes tapscript quantum resistant and enables the use of PQC signature algorithms. By adopting PQC, Bitcoin can enhance its quantum +makes tapscript quantum resistant and enables the use of PQ signature algorithms. By adopting PQC, Bitcoin can enhance its quantum resistance without requiring a hard fork or block size increase. The vulnerability of existing Bitcoin addressesA vulnerable Bitcoin address is any @@ -80,7 +80,7 @@ As the value being sent increases, so too should the fee in order to commit the possible. Once the transaction is mined, it makes useless the public key revealed by spending a UTXO, so long as it is never reused. -It is proposed to implement a Pay to Quantum Resistant Hash (P2QRH) output type that relies on a PQC signature +It is proposed to implement a Pay to Quantum Resistant Hash (P2QRH) output type that relies on a PQ signature algorithm. This new output type protects transactions submitted to the mempool and helps preserve the fee market by preventing the need for private, out-of-band mempool transactions. @@ -186,7 +186,7 @@ existing software behavior, workflows, user expectations and compatibility whene carried out gradually and iteratively rather than all at once. This is critical as the earlier the ecosystem begins upgrading to quantum resistance, the lower the number of coins at risk when quantum attacks become practical. -'''Prudence Use standardized post-quantum signature algorithms.''' Standardized algorithms have gotten the most scrutiny and +'''Use standardized post-quantum signature algorithms.''' Standardized algorithms have gotten the most scrutiny and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit from using the most popular post-quantum signature algorithms including leveraging hardware acceleration instructions, commodity trusted hardware, software libraries and cryptography research. @@ -213,7 +213,7 @@ libraries since they can reuse code they already have. By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQ signatures. Simply moving coins from P2TR to P2QRH protects those coins from long-range quantum attacks. Then to gain full quantum resistance, -verification of PQC signatures can be added as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. +verification of PQ signatures can be added as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. When quantum attacks become practical, users would then be fully protected as the P2QRH output would allow them to switch to sending their coins using the PQ signature algorithms. This allows the upgrade to quantum resistance to be largely invisible to users. @@ -225,7 +225,7 @@ Consider the P2QRH output with three tapscripts: * Spend requires a SLH-DSA signature In the event that Schnorr signatures are broken, users can spend their coins using ML-DSA. -If Schnorr and ML-DSA, the user has SLH-DSA signature as the ultimate back up. +If both Schnorr and ML-DSA are broken, the user can still rely on SLH-DSA. One intent in supporting Schnorr, ML-DSA, and SLH-DSA in tapscript, is to allow parties to construct outputs such that funds are still secure even if two of the three the signature algorithms are completely broken. This is motivated by the use case @@ -235,20 +235,20 @@ For PQ signatures we considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CR and FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective because SLH-DSA is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly smaller than SLH-DSA signatures but are based on newer lattice-based -cryptography. As ML-DSA and FN-DSA are both similar lattice-based designs we choose to only support one of them as the -additional value in diversity of cryptographic assumptions would be small. +cryptography. Since ML-DSA and FN-DSA are both similar lattice-based designs, we choose to only support one of them as the +additional value in diversity of cryptographic assumptions would be marginal. ML-DSA is intended as the main PQ signature algorithm in Bitcoin. It provides a good balance of security, performance and signature size and is likely to the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically -different design than ML-DSA and does not use have cryptographic assumption on lattice. As such SLH-DSA provides an effective -hedge against unexpected cryptanalytic breakthroughs on ML-DSA. +different design and set of cryptographic assumptions than ML-DSA. As such SLH-DSA provides an effective +hedge against an unexpected cryptanalytic breakthrough. P2QRH, ML-DSA, and SLH-DSA could be activated simultaneously in a single soft fork or P2QRH could be activated first and then -ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx opcodes. If as some future point another signature +ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx opcodes. If at some future point another signature algorithm was desired it could follow this pattern. To improve the viability of the activation client and adoption by wallets and libraries, a library akin to -libsecp256k1 will be developed. This library, libbitcoinpqc, will support the new PQC signature algorithms +libsecp256k1 will be developed. This library, libbitcoinpqc, will support the new PQ signature algorithms and can be used as a reference for other language-native implementations. ==== PQ Signature Size ==== @@ -261,16 +261,15 @@ We recognize that the size of ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+) By way of comparison with Schnorr public key + signature pairs, SLH-DSA is roughly 80x larger and ML-DSA is roughly 40x larger. This means to maintain present transaction throughput, an increase in the witness discount may be desired. -An increase in the witness discount must not be taken lightly. Parties make take advantage of this discount for purposes other than -authorizing transactions (e.g., storage of arbitrary data as seen with "inscriptions") and just without a corresponding -increase in economic activity. An increase in the witness discount would not only impact node runners but those with -inscriptions would have the scarcity of their non-monetary assets affected. +An increase in the witness discount must not be taken lightly. Parties may take advantage of this discount for purposes other than +authorizing transactions (e.g., storage of arbitrary data as seen with "inscriptions"). An increase in the witness discount would +not only impact node runners but those with inscriptions would have the scarcity of their non-monetary assets affected. There was some hope of designing P2QRH such that discounted public keys and signatures could not be repurposed for the storage of arbitrary data by requiring that they successfully be verified before being written to Bitcoin's blockchain, a.k.a. "JPEG resistance". Later research Bas Westerbaan (2025), [https://groups.google.com/g/bitcoindev/c/5Ff0jdQPofo jpeg resistance of various post-quantum signature schemes] provided strong evidence that this was not a feasible approach for the NIST approved Post-Quantum signature algorithms. -It is an open question if Post-Quantum signature algorithms can be designed with to provide JPEG resistance property. +It is an open question if Post-Quantum signature algorithms can be designed to provide JPEG resistance. ==== Future Considerations ==== @@ -291,19 +290,19 @@ We define the signature scheme and transaction structure as follows. === Pay to Quantum Resistant Hash (P2QRH) === -An P2QRH output is simply the root of the tapscript merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] -and used as an internal value in P2TR. +A P2QRH output is simply the root of the tapleaf merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] +and used as an internal value in P2TR. To construct a P2QRH output we follow the same process as [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] -to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hash together with the internal -key in P2QRH the root is hashed by itself under the tag name "QuantumRoot". +to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hashed together with the internal +key in P2QRH the root is hashed by itself using the tag "QuantumRoot". D = tagged_hash("TapLeaf", bytes([leaf_version]) + ser_script(script)) CD = tagged_hash("TapBranch", C + D) CDE = tagged_hash("TapBranch", E + CD) ABCDE = tagged_hash("TapBranch", AB + CDE) -Root = tagged_hash("QuantumRoot", p + ABCDE) +Root = tagged_hash("QuantumRoot", ABCDE) TODO: Add image of P2QRH output merkle tree structure. @@ -314,7 +313,7 @@ A P2QRH input provides the following: script witness stack, tapleaf script, -control block = [version byte, m*32 byte merkle path] +control block = [version byte, m*32 byte merkle path] # m is the depth of the merkle tree The script witness stack provides the same functionality as it does in P2TR. It places input values on the stack to @@ -327,18 +326,20 @@ of the witness stack elements to 520 bytes. This is needed because PQ signatures The tapleaf script is a tapscript that is executed to validate the input. The tapscript in P2QRH is unchanged from BIP-342. The control block is a 1 + 32+m byte array, where the first byte is the version byte and the next 32+m bytes are the -Merkle path to the tapleaf script. The intent of the version byte is to similar to the header byte in a P2TR control +Merkle path to the tapleaf script. The intent of the version byte is similar to the header byte in a P2TR control block, but all 8 bits are used for versioning. We omit the public key from the control block as it is not needed in P2QRH. -A consequence of the above design, tapscript can not pass a PQ public key to be verified with a PQ signature if the +TODO: Do we want a version byte in the control block? + +A consequence of the above design, tapscript cannot pass a PQ public key to be verified with a PQ signature if the PQ public key is larger than 520 bytes. This is because while the script stack can contain stack elements larger -than 520 bytes, the OP_PUSH opcode in tapscript can not push stack elements larger than 520 bytes. To get arounds issue the +than 520 bytes, the OP_PUSH opcode in tapscript cannot push stack elements larger than 520 bytes. To solve this issue the tapscript can push the HASH256 of the PQ public key and then verify that the PQ public key from the script witness stack -hashes to value committed in the tapscript. +hashes to the value committed in the tapscript. -script_witness_stack = [pubkey, signature] -tapscript = [OP_DUP, OP_HASH256, OP_PUSH HASH256(expected_pubkey), OP_EQUALVERIFY, OP_PQCHECKSIGVERIFY] +script witness stack = [pubkey, signature] # len(pubkey) > 520 bytes and len(signature) > 520 bytes +tapscript = [OP_DUP, OP_HASH256, OP_PUSHDATA HASH256(expected_pubkey), OP_EQUALVERIFY, OP_CHECKSIG_SHL, OP_VERIFY] TODO: We should think very carefully about any issues allowing larger witness stack elements may cause because tapscript From ff94944dd33e1f35216f98da20d949b4b9a5ffa4 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 16 Jun 2025 15:21:06 -0400 Subject: [PATCH 11/46] SHL --> SLH --- bip-0360.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index fc548461e1..bfc9894346 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -339,7 +339,7 @@ hashes to the value committed in the tapscript. script witness stack = [pubkey, signature] # len(pubkey) > 520 bytes and len(signature) > 520 bytes -tapscript = [OP_DUP, OP_HASH256, OP_PUSHDATA HASH256(expected_pubkey), OP_EQUALVERIFY, OP_CHECKSIG_SHL, OP_VERIFY] +tapscript = [OP_DUP, OP_HASH256, OP_PUSHDATA HASH256(expected_pubkey), OP_EQUALVERIFY, OP_CHECKSIG_SLH, OP_VERIFY] TODO: We should think very carefully about any issues allowing larger witness stack elements may cause because tapscript @@ -379,7 +379,7 @@ Where: === Post-Quantum Signature Algorithms === -We propose adding the opcodes OP_CHECKSIG_ML (ML-DSA) and OP_CHECKSIG_SHL (SLH-DSA) to tapscript by redefining OP_SUCCESSx +We propose adding the opcodes OP_CHECKSIG_ML (ML-DSA) and OP_CHECKSIG_SLH (SLH-DSA) to tapscript by redefining OP_SUCCESSx opcodes. As ML-DSA and SLH-DSA are post-quantum signature algorithms this would allow the user of post-quantum signatures in tapscript. @@ -394,7 +394,7 @@ TODO: 2. These these opcodes been in a seperate BIP? TODO: Add full specification here -==== OP_CHECKSIG_SHL ==== +==== OP_CHECKSIG_SLH ==== TODO: Add full specification here From 01e100821175504458713536f11cbf896860d532 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sat, 21 Jun 2025 12:53:51 -0400 Subject: [PATCH 12/46] Apply suggestions from code review Co-authored-by: Hunter Beast --- bip-0360.mediawiki | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index bfc9894346..6ce949e401 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -3,7 +3,7 @@ Title: Pay to Quantum Resistant Hash Layer: Consensus (soft fork) Author: Hunter Beast - Ethan Heilman + Ethan Heilman Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0360 Status: Draft @@ -18,7 +18,7 @@ This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) and two PQ (Post-Quantum) signature algorithms. This changes would enable the use of Bitcoin transactions and tapscripts that are secure against Cryptoanalytically-Relevant Quantum Computers (CRQCs). -This approach for adding a post-quantum secure output type and signatures does not require a hard fork or block size increase. +This approach for adding a post-quantum secure output type (and signatures) does not require a hard fork or block size increase. === Copyright === @@ -200,7 +200,7 @@ is that parties seeking to securely store bitcoins over decades can secure their ensuring their coins will not be stolen even in the face of a catastrophic break in one of those signature algorithms. Based on these principles, we propose two independent changes that together provide Bitcoin with -full quantum resistance. First, a new output type P2QRH (Pay to Quantum Resistant Hash) so that tapscript +full quantum resistance. First, we introduce a new output type called P2QRH (Pay to Quantum Resistant Hash) so that tapscript can be used in a quantum resistant manner. Second, we add opcodes to tapscript for verifying two Post-Quantum (PQ) signature algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). @@ -212,7 +212,7 @@ libraries since they can reuse code they already have. By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQ signatures. Simply moving coins from -P2TR to P2QRH protects those coins from long-range quantum attacks. Then to gain full quantum resistance, +P2TR to P2QRH protects those coins from long-exposure quantum attacks. Then to gain full quantum resistance, verification of PQ signatures can be added as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. When quantum attacks become practical, users would then be fully protected as the P2QRH output would allow them to switch to sending their coins using the PQ signature algorithms. This allows the upgrade to quantum @@ -248,7 +248,7 @@ ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx op algorithm was desired it could follow this pattern. To improve the viability of the activation client and adoption by wallets and libraries, a library akin to -libsecp256k1 will be developed. This library, libbitcoinpqc, will support the new PQ signature algorithms +libsecp256k1 will be developed. This library, [libbitcoinpqc](https://github.com/cryptoquick/libbitcoinpqc), will support the new PQ signature algorithms and can be used as a reference for other language-native implementations. ==== PQ Signature Size ==== @@ -307,7 +307,7 @@ Root = tagged_hash("QuantumRoot", ABCDE) TODO: Add image of P2QRH output merkle tree structure. -Validation follows the pattern of a P2TR script spend but without the P2TR public key or internal key. +Validation follows the pattern of a P2TR script spend but without the P2TR public key, internal key, or key tweak. A P2QRH input provides the following: @@ -388,7 +388,7 @@ and then perform signature verification using the specified post-quantum signatu TODO: Open questions: TODO: 1. Should we have OP_CHECKSIG_VERIFY and OP_CHECKSIGADD variants as well? -TODO: 2. These these opcodes been in a seperate BIP? +TODO: 2. Should we provide these opcodes been in a separate BIP? ==== OP_CHECKSIG_ML ==== From 546eefc5fe240497d3babedf05f31a05cd7d1774 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sat, 21 Jun 2025 14:49:36 -0400 Subject: [PATCH 13/46] Adds discussion of SQIsign --- bip-0360.mediawiki | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 6ce949e401..34163c3be7 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -16,7 +16,8 @@ === Abstract === -This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) and two PQ (Post-Quantum) signature algorithms. +This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH). +This output type is designed to be compatible with the future addition of PQ signature algorithms to Bitcoin. This changes would enable the use of Bitcoin transactions and tapscripts that are secure against Cryptoanalytically-Relevant Quantum Computers (CRQCs). This approach for adding a post-quantum secure output type (and signatures) does not require a hard fork or block size increase. @@ -171,7 +172,9 @@ using Grover's algorithm would require at least 10^24 quantum operations. As for === Rationale === This is the first in a series of BIPs under a QuBit soft fork. A qubit is a fundamental unit of quantum computing, and -the capital B refers to Bitcoin. The name QuBit also rhymes to some extent with SegWit. +the capital B refers to Bitcoin. The name QuBit also rhymes to some extent with SegWit. This BIP proposes a new output type +called P2QRH (Pay to Quantum Resistant Hash). This output type is designed to support post-quantum signature algorithms +but those algorithms will be specified in future BIPs. It is proposed to use SegWit version 3. This results in addresses that start with bc1r, which could be a useful way to remember that these are quantum (r)esistant addresses. This is referencing the lookup table under @@ -232,12 +235,16 @@ are still secure even if two of the three the signature algorithms are completel of securely storing Bitcoins in a cold wallet for very long periods of time (50 to 100 years). For PQ signatures we considered the NIST approved SLH-DSA (SPHINCS+), ML-DSA (CRYSTALS-Dilithium), -and FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative +FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature size, but is the most conservative choice from a security perspective because SLH-DSA is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly smaller than SLH-DSA signatures but are based on newer lattice-based cryptography. Since ML-DSA and FN-DSA are both similar lattice-based designs, we choose to only support one of them as the additional value in diversity of cryptographic assumptions would be marginal. +We also considered SQIsign. While it out performs the three other PQ signature algorithms by having smallest signatures +it has the worst verification performance and requires a much more complex implementation. We may revisit SQIsign in the +future note as recent research shows massive performance improvements to SQIsign "[SQIsign] signing is now nearly 20× faster, at 103.0 Mcycles, and verification is more than 6× faster, at 5.1 Mcycles" [https://csrc.nist.gov/csrc/media/Projects/pqc-dig-sig/documents/round-2/spec-files/sqisign-spec-round2-web.pdf SQIsign: Algorithm specifications and supporting documentation Version 2.0 (February 5 2025)]. + ML-DSA is intended as the main PQ signature algorithm in Bitcoin. It provides a good balance of security, performance and signature size and is likely to the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically different design and set of cryptographic assumptions than ML-DSA. As such SLH-DSA provides an effective @@ -355,7 +362,6 @@ OP_PUSHNUM_3 <32-byte hash> TODO: Very specific specification of P2QRH validation - ==== Address Format ==== P2QRH uses SegWit version 3 outputs, resulting in addresses that start with bc1r, following From 2ede01fac79ad518d40ede923d6ac6540b5f3648 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 23 Jun 2025 12:31:05 -0400 Subject: [PATCH 14/46] Fixes broken llink to libbitcoinpqc Co-authored-by: Hunter Beast --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 34163c3be7..d5d74dd562 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -255,7 +255,7 @@ ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx op algorithm was desired it could follow this pattern. To improve the viability of the activation client and adoption by wallets and libraries, a library akin to -libsecp256k1 will be developed. This library, [libbitcoinpqc](https://github.com/cryptoquick/libbitcoinpqc), will support the new PQ signature algorithms +libsecp256k1 will be developed. This library, [https://github.com/cryptoquick/libbitcoinpqc libbitcoinpqc], will support the new PQ signature algorithms and can be used as a reference for other language-native implementations. ==== PQ Signature Size ==== From f31bfbe6989957aa88b7cf55946ff0b8dcb8d40c Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 23 Jun 2025 12:31:56 -0400 Subject: [PATCH 15/46] Fixes writing in SQIsign section Co-authored-by: Hunter Beast --- bip-0360.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index d5d74dd562..789cf0cf73 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -241,9 +241,9 @@ Both FN-DSA and ML-DSA signatures are significantly smaller than SLH-DSA signatu cryptography. Since ML-DSA and FN-DSA are both similar lattice-based designs, we choose to only support one of them as the additional value in diversity of cryptographic assumptions would be marginal. -We also considered SQIsign. While it out performs the three other PQ signature algorithms by having smallest signatures -it has the worst verification performance and requires a much more complex implementation. We may revisit SQIsign in the -future note as recent research shows massive performance improvements to SQIsign "[SQIsign] signing is now nearly 20× faster, at 103.0 Mcycles, and verification is more than 6× faster, at 5.1 Mcycles" [https://csrc.nist.gov/csrc/media/Projects/pqc-dig-sig/documents/round-2/spec-files/sqisign-spec-round2-web.pdf SQIsign: Algorithm specifications and supporting documentation Version 2.0 (February 5 2025)]. +We also considered SQIsign. While it outperforms the three other PQ signature algorithms by having the smallest signatures, +it has the worst verification performance and requires a much more complex implementation. We may revisit SQIsign separately in the +future as recent research shows massive performance improvements to SQIsign in version 2.0. "[SQIsign] signing is now nearly 20× faster, at 103.0 Mcycles, and verification is more than 6× faster, at 5.1 Mcycles" [https://csrc.nist.gov/csrc/media/Projects/pqc-dig-sig/documents/round-2/spec-files/sqisign-spec-round2-web.pdf SQIsign: Algorithm specifications and supporting documentation Version 2.0 (February 5 2025)]. ML-DSA is intended as the main PQ signature algorithm in Bitcoin. It provides a good balance of security, performance and signature size and is likely to the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically From 44c7e9491a16fe576a4588f0a6b080783610f9ff Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 23 Jun 2025 20:25:09 -0400 Subject: [PATCH 16/46] Add rational section on big signatures and public keys --- bip-0360.mediawiki | 68 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 789cf0cf73..ba928aaa9b 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -204,12 +204,12 @@ ensuring their coins will not be stolen even in the face of a catastrophic break Based on these principles, we propose two independent changes that together provide Bitcoin with full quantum resistance. First, we introduce a new output type called P2QRH (Pay to Quantum Resistant Hash) so that tapscript -can be used in a quantum resistant manner. Second, we add opcodes to tapscript for verifying two Post-Quantum (PQ) signature -algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). +can be used in a quantum resistant manner. Second, in a future BIP we add opcodes to tapscript for verifying two Post-Quantum (PQ) signature +algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). It is important to consider these two changes together as P2QRH must +be designed to support the addition of these PQ signature algorithms. The full description of these signatures will be provided in a future BIP. P2QRH is simply P2TR with the quantum vulnerable key-spend path removed so that it commits to the root of -the tapleaf merkle tree in the output and to remove the witness element size limit of 520 bytes, as PQ -signatures are larger than 520 bytes. This allows P2QRH to reuse the mature and battle tested P2TR, tapleaf +the tapleaf merkle tree in the output. This allows P2QRH to reuse the mature and battle tested P2TR, tapleaf and tapscript code already in Bitcoin. This reduces the implementation burden on wallets, exchanges, and libraries since they can reuse code they already have. @@ -246,7 +246,7 @@ it has the worst verification performance and requires a much more complex imple future as recent research shows massive performance improvements to SQIsign in version 2.0. "[SQIsign] signing is now nearly 20× faster, at 103.0 Mcycles, and verification is more than 6× faster, at 5.1 Mcycles" [https://csrc.nist.gov/csrc/media/Projects/pqc-dig-sig/documents/round-2/spec-files/sqisign-spec-round2-web.pdf SQIsign: Algorithm specifications and supporting documentation Version 2.0 (February 5 2025)]. ML-DSA is intended as the main PQ signature algorithm in Bitcoin. It provides a good balance of security, performance -and signature size and is likely to the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically +and signature size and is likely to be the most widely supported PQ signature algorithm on the internet. SLH-DSA has a radically different design and set of cryptographic assumptions than ML-DSA. As such SLH-DSA provides an effective hedge against an unexpected cryptanalytic breakthrough. @@ -258,7 +258,7 @@ To improve the viability of the activation client and adoption by wallets and li libsecp256k1 will be developed. This library, [https://github.com/cryptoquick/libbitcoinpqc libbitcoinpqc], will support the new PQ signature algorithms and can be used as a reference for other language-native implementations. -==== PQ Signature Size ==== +==== PQ signature size ==== Post-quantum public keys are generally larger than those used by ECC, depending on the security level. Originally BIP-360 proposed NIST Level V, 256-bit security, but this was changed to NIST Level I, 128-bit security due to concerns over the @@ -278,7 +278,50 @@ Later research Bas Westerbaan (2025), [https://groups.google.com/g/bitcoind provided strong evidence that this was not a feasible approach for the NIST approved Post-Quantum signature algorithms. It is an open question if Post-Quantum signature algorithms can be designed to provide JPEG resistance. -==== Future Considerations ==== +==== Increasing witness stack element size ==== + +A problem faced by any attempt to add PQ signatures to tapscript is the limit MAX_SCRIPT_ELEMENT_SIZE that stack elements in +tapscript can not be larger than 520 bytes. This is programatic because PQ signature algorithms often have signatures and +public keys that exceed this limit. For instance: + +* ML-DSA public keys are 1,312 bytes and signatures are 2,420 bytes +* SLH-DSA public keys are 32 bytes and signatures are 7,856 bytes + +We will first look at our approach to the problem of PQ signatures and then give our solution for public keys larger than 520 bytes. + +We define P2QRH inputs to have a witness stack element size limit of 8,000 bytes. We arrive at 8,000 by rounding up from the +needed 7,856 bytes. Because only P2QRH inputs can spend P2QRH outputs, the 520 would remain in place for all other output types. + +If we simply increased the witness stack element size to 8,000 bytes as a unintended side effect would be to increase the memory foot +print of Bitcoin transaction validation via the OP_DUP opcode. OP_DUP will duplicate any stack element. Thus, one could write a tapscript +which will duplicate stack elements until it reaches the maximum number of elements on stack, i.e. 1000 elements. An increase from 520 bytes +to 8,000 bytes would increase this memory footprint from 520 KB to 8 MB. + +To prevent OP_DUP from creating a 8 MB stack by duplicating stack elements larger than 520 bytes we define OP_DUP to fail on stack +elements larger than 520 bytes. Note this change to OP_DUP is not consensus critical as currently there is no way to get a stack +element larger than 520 bytes onto the stack. + +==== Public keys larger than 520 bytes ==== + +Turning our attention to public keys larger than 520 bytes. This is a different problem than signatures as public keys are typically pushed onto +the stack in the redeem tapscript to commit to public keys in output. The OP_PUSHDATA opcode in tapscript fails if asked to push more than 520 +bytes onto the stack. + +To solve this issue, for signature schemes with public keys greater than 520 bytes, we use the hash of the public key in the redeem tapscript. +We then package package the public key and signature together as the same stack element. Since the hash of the public key is only 32 bytes, +the redeem tapscript can push it on the stack as it does today. The post quantum OP_CHECKSIG opcode pops the hash of the public key +and the signature packaged with public key off the stack. Checks the public key matches the hash of the public key and then verifies the signature. +This is not needed for SHL-DSA as its public key is only 32 bytes. + + +script witness stack = [pubkey||signature] # len(pubkey) > 520 bytes and len(signature) > 520 bytes +tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKSIGVERIFY_ML] + + +TODO: We should think carefully about any issues allowing larger witness stack elements may cause because tapscript +assumes no stack element sizes greater than 520 bytes. + +==== Future considerations ==== While P2QRH lacks features like signature aggregation, it offers a pragmatic first step toward quantum resistance. Future BIPs can add enhancements like signature aggregation, and possibly full @@ -338,19 +381,8 @@ block, but all 8 bits are used for versioning. We omit the public key from the c TODO: Do we want a version byte in the control block? -A consequence of the above design, tapscript cannot pass a PQ public key to be verified with a PQ signature if the -PQ public key is larger than 520 bytes. This is because while the script stack can contain stack elements larger -than 520 bytes, the OP_PUSH opcode in tapscript cannot push stack elements larger than 520 bytes. To solve this issue the -tapscript can push the HASH256 of the PQ public key and then verify that the PQ public key from the script witness stack -hashes to the value committed in the tapscript. - -script witness stack = [pubkey, signature] # len(pubkey) > 520 bytes and len(signature) > 520 bytes -tapscript = [OP_DUP, OP_HASH256, OP_PUSHDATA HASH256(expected_pubkey), OP_EQUALVERIFY, OP_CHECKSIG_SLH, OP_VERIFY] - -TODO: We should think very carefully about any issues allowing larger witness stack elements may cause because tapscript -assumes no stack element sizes greater than 520 bytes. ==== Script Validation ==== From c2531ccec4d90b715c7349ba1014975ff285649d Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Thu, 26 Jun 2025 14:16:13 -0400 Subject: [PATCH 17/46] Fixes typos --- bip-0360.mediawiki | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index ba928aaa9b..7fb3162fb9 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -18,7 +18,7 @@ This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH). This output type is designed to be compatible with the future addition of PQ signature algorithms to Bitcoin. -This changes would enable the use of Bitcoin transactions and tapscripts that are secure against Cryptoanalytically-Relevant Quantum Computers (CRQCs). +These changes would enable the use of Bitcoin transactions and tapscripts that are secure against Cryptanalytically-Relevant Quantum Computing (CRQCs). This approach for adding a post-quantum secure output type (and signatures) does not require a hard fork or block size increase. === Copyright === @@ -27,7 +27,7 @@ This document is licensed under the 3-clause BSD license. === Motivation === -The primary threat to Bitcoin from Cryptoanalytically-Relevant Quantum Computers (CRQCs) +The primary threat to Bitcoin from Cryptanalytically-Relevant Quantum Computing (CRQCs) A Cryptoanalytically-Relevant Quantum Computer is an ''object'' which is only loosely defined by ''characteristics'' in quantum physics as of today. It could be understood in the context of this BIP and in bitcoin that it's a ''hardware-agnostic'' computer supposed to have the architecture to keep ''coherent'' a sufficient number of logical qubits to be able to run the Shor algorithm in an efficient fashion. is their potential to break the cryptographic assumptions of Elliptic Curve Cryptography (ECC), which secures Bitcoin's signatures and Taproot commitments. Specifically, [https://arxiv.org/pdf/quant-ph/0301141 Shor's algorithm] enables a CRQC to solve the @@ -297,7 +297,7 @@ print of Bitcoin transaction validation via the OP_DUP opcode. OP_DUP will dupli which will duplicate stack elements until it reaches the maximum number of elements on stack, i.e. 1000 elements. An increase from 520 bytes to 8,000 bytes would increase this memory footprint from 520 KB to 8 MB. -To prevent OP_DUP from creating a 8 MB stack by duplicating stack elements larger than 520 bytes we define OP_DUP to fail on stack +To prevent OP_DUP from creating an 8 MB stack by duplicating stack elements larger than 520 bytes we define OP_DUP to fail on stack elements larger than 520 bytes. Note this change to OP_DUP is not consensus critical as currently there is no way to get a stack element larger than 520 bytes onto the stack. @@ -375,7 +375,7 @@ of the witness stack elements to 520 bytes. This is needed because PQ signatures The tapleaf script is a tapscript that is executed to validate the input. The tapscript in P2QRH is unchanged from BIP-342. -The control block is a 1 + 32+m byte array, where the first byte is the version byte and the next 32+m bytes are the +The control block is a 1 + 32*m byte array, where the first byte is the version byte and the next 32*m bytes are the Merkle path to the tapleaf script. The intent of the version byte is similar to the header byte in a P2TR control block, but all 8 bits are used for versioning. We omit the public key from the control block as it is not needed in P2QRH. @@ -445,7 +445,7 @@ The sighash for P2QRH outputs follows the same procedure as defined in [https:// * '''Key Data:''' In addition to transaction data, the sighash includes the spent output's scriptPubKey. * '''Extension Fields:''' Specific data is included or excluded from the sighash based on the sighash flag. -TODO: Currently BIP-360 proposes using the tag "TapSighash" in the tagged hash of the sighash for PQ signatures. I can see an argument that the sighash should be specific to the signature algorithm used to prevent signatures from one algorithm being used for an algorithm, e.g. "TapSighashML" for ML-DSA +TODO: Currently BIP-360 proposes using the tag "TapSighash" in the tagged hash of the sighash for PQ signatures. I can see an argument that the sighash should be specific to the signature algorithm used to prevent signatures from one algorithm being used for another algorithm, e.g. "TapSighashML" for ML-DSA This signature hash construction ensures transaction malleability is prevented while providing flexibility through different sighash types (DEFAULT, ALL, NONE, SINGLE, and ANYONECANPAY variants). The exact computation follows the From 5f193d1ce6ea2e76519e727536aab70418809efc Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 27 Jun 2025 20:10:20 -0400 Subject: [PATCH 18/46] Adds script validation from BIP 341 --- bip-0360.mediawiki | 130 +++++++++++++++++++++++++++------------------ 1 file changed, 79 insertions(+), 51 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 7fb3162fb9..aeea64f5b0 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -169,7 +169,7 @@ HASH160 Used by P2PKH, P2SH, and P2WPKH addresses, though no using Grover's algorithm would require at least 10^24 quantum operations. As for Grover's application to mining, see [https://quantumcomputing.stackexchange.com/a/12847 Sam Jaques' post on this]. -=== Rationale === +=== Design === This is the first in a series of BIPs under a QuBit soft fork. A qubit is a fundamental unit of quantum computing, and the capital B refers to Bitcoin. The name QuBit also rhymes to some extent with SegWit. This BIP proposes a new output type @@ -180,6 +180,12 @@ It is proposed to use SegWit version 3. This results in addresses that start wit remember that these are quantum (r)esistant addresses. This is referencing the lookup table under [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. +TODO: ...pull elements of rationale here and then provide rationale in the next section. + + + +=== Rationale === + Our design to augment Bitcoin with quantum resistance is guided by the following principles: '''Minimize changes.''' We should reuse existing Bitcoin code and preserve @@ -213,6 +219,8 @@ the tapleaf merkle tree in the output. This allows P2QRH to reuse the mature and and tapscript code already in Bitcoin. This reduces the implementation burden on wallets, exchanges, and libraries since they can reuse code they already have. +==== PQ signatures ==== + By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQ signatures. Simply moving coins from P2TR to P2QRH protects those coins from long-exposure quantum attacks. Then to gain full quantum resistance, @@ -254,6 +262,8 @@ P2QRH, ML-DSA, and SLH-DSA could be activated simultaneously in a single soft fo ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx opcodes. If at some future point another signature algorithm was desired it could follow this pattern. +TODO: Discuss the two ways of PQ signature size increase softfork. With OP_CHECKSIG upgrade via new tapleaf version or with OP_SUCCESSx upgrade. + To improve the viability of the activation client and adoption by wallets and libraries, a library akin to libsecp256k1 will be developed. This library, [https://github.com/cryptoquick/libbitcoinpqc libbitcoinpqc], will support the new PQ signature algorithms and can be used as a reference for other language-native implementations. @@ -278,48 +288,49 @@ Later research Bas Westerbaan (2025), [https://groups.google.com/g/bitcoind provided strong evidence that this was not a feasible approach for the NIST approved Post-Quantum signature algorithms. It is an open question if Post-Quantum signature algorithms can be designed to provide JPEG resistance. -==== Increasing witness stack element size ==== +==== Raising tapscript's stack element size ==== + +TODO: Add discussion of why stack element size is increased in PQ signature algorithms rather than this in this BIP. -A problem faced by any attempt to add PQ signatures to tapscript is the limit MAX_SCRIPT_ELEMENT_SIZE that stack elements in -tapscript can not be larger than 520 bytes. This is programatic because PQ signature algorithms often have signatures and -public keys that exceed this limit. For instance: +A problem faced by any attempt to add PQ signatures to tapscript is that the stack elements in tapscript can not be larger than 520 bytes +because the MAX_SCRIPT_ELEMENT_SIZE=520. This is programatic because PQ signature algorithms often have signatures and +public keys in excess of 520 bytes. For instance: * ML-DSA public keys are 1,312 bytes and signatures are 2,420 bytes * SLH-DSA public keys are 32 bytes and signatures are 7,856 bytes We will first look at our approach to the problem of PQ signatures and then give our solution for public keys larger than 520 bytes. -We define P2QRH inputs to have a witness stack element size limit of 8,000 bytes. We arrive at 8,000 by rounding up from the +We define P2QRH inputs to have a stack element size limit of 8,000 bytes. We arrive at 8,000 by rounding up from the needed 7,856 bytes. Because only P2QRH inputs can spend P2QRH outputs, the 520 would remain in place for all other output types. -If we simply increased the witness stack element size to 8,000 bytes as a unintended side effect would be to increase the memory foot -print of Bitcoin transaction validation via the OP_DUP opcode. OP_DUP will duplicate any stack element. Thus, one could write a tapscript -which will duplicate stack elements until it reaches the maximum number of elements on stack, i.e. 1000 elements. An increase from 520 bytes -to 8,000 bytes would increase this memory footprint from 520 KB to 8 MB. - To prevent OP_DUP from creating an 8 MB stack by duplicating stack elements larger than 520 bytes we define OP_DUP to fail on stack elements larger than 520 bytes. Note this change to OP_DUP is not consensus critical as currently there is no way to get a stack element larger than 520 bytes onto the stack. +OP_DUP will duplicate any stack element. Thus, if we allowed OP_DUP to duplicate stack elements of size 8,000 bytes, it would be possible +to write a tapscript which will duplicate stack elements until it reaches the maximum number of elements on stack, i.e. 1000 elements. +An increase from 520 bytes to 8,000 bytes would increase the memory footprint from 520 KB to 8 MB. + ==== Public keys larger than 520 bytes ==== -Turning our attention to public keys larger than 520 bytes. This is a different problem than signatures as public keys are typically pushed onto -the stack in the redeem tapscript to commit to public keys in output. The OP_PUSHDATA opcode in tapscript fails if asked to push more than 520 -bytes onto the stack. +Turning our attention to public keys larger than 520 bytes. This is not needed for SHL-DSA as its public key is only 32 bytes. +This is a different problem than signatures as public keys are typically pushed onto +the stack by the tapleaf script (redeem script) to commit to public keys in output. The OP_PUSHDATA opcode in tapscript fails if asked to push +more than 520 bytes onto the stack. -To solve this issue, for signature schemes with public keys greater than 520 bytes, we use the hash of the public key in the redeem tapscript. -We then package package the public key and signature together as the same stack element. Since the hash of the public key is only 32 bytes, -the redeem tapscript can push it on the stack as it does today. The post quantum OP_CHECKSIG opcode pops the hash of the public key -and the signature packaged with public key off the stack. Checks the public key matches the hash of the public key and then verifies the signature. -This is not needed for SHL-DSA as its public key is only 32 bytes. +To solve this issue, for signature schemes with public keys greater than 520 bytes, we use the hash of the public key in the tapleaf script. +We then package the public key and signature together as the same stack element on the input stack. Since the hash of the public key is +only 32 bytes, the tapleaf script can push it on the stack as it does today. Consider the following example with a +OP_CHECKSIGVERIFY_ML opcode for ML-DSA: -script witness stack = [pubkey||signature] # len(pubkey) > 520 bytes and len(signature) > 520 bytes +stack = [pubkey||signature] tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKSIGVERIFY_ML] -TODO: We should think carefully about any issues allowing larger witness stack elements may cause because tapscript -assumes no stack element sizes greater than 520 bytes. +1. OP_PUSHDATA HASH256(expected_pubkey) updates the stack to [HASH256(expected_pubkey), pubkey||signature] +2. OP_CHECKSIGVERIFY_ML pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. ==== Future considerations ==== @@ -358,16 +369,18 @@ Root = tagged_hash("QuantumRoot", ABCDE) TODO: Add image of P2QRH output merkle tree structure. Validation follows the pattern of a P2TR script spend but without the P2TR public key, internal key, or key tweak. -A P2QRH input provides the following: +A P2QRH input witness provides the following: -script witness stack, +script input_0 +... +script input_N tapleaf script, control block = [version byte, m*32 byte merkle path] # m is the depth of the merkle tree -The script witness stack provides the same functionality as it does in P2TR. It places input values on the stack to -be evaluated by the tapscript. +The script inputs provide the same functionality as they does in P2TR. It places input values on the stack to +be evaluated by the tapleaf script, a.k.a. the redeem script. A P2QRH script witness stack differs in only one way from a P2TR script witness stack. P2QRH does not limit the size of the witness stack elements to 520 bytes. This is needed because PQ signatures and public keys can be larger than @@ -379,22 +392,7 @@ The control block is a 1 + 32*m byte array, where the first byte is the version Merkle path to the tapleaf script. The intent of the version byte is similar to the header byte in a P2TR control block, but all 8 bits are used for versioning. We omit the public key from the control block as it is not needed in P2QRH. -TODO: Do we want a version byte in the control block? - - - - -==== Script Validation ==== - -To spend a P2QRH output, the following conditions must be met: - -1. The scriptPubKey must be of the form: - -OP_PUSHNUM_3 <32-byte hash> - -TODO: Very specific specification of P2QRH validation - -==== Address Format ==== +=== Address Format === P2QRH uses SegWit version 3 outputs, resulting in addresses that start with bc1r, following [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. Bech32 encoding maps version 3 to the @@ -402,9 +400,9 @@ prefix r. Example P2QRH address: -bc1r... (32-byte Bech32m-encoded tagged hash tapleaf merkle root) +bc1r... (32-byte Bech32m-encoded tapleaf merkle root) -==== ScriptPubKey ==== +=== ScriptPubKey === The scriptPubKey for a P2QRH output is: @@ -413,7 +411,37 @@ The scriptPubKey for a P2QRH output is: Where: * OP_PUSHNUM_3 (0x03) indicates SegWit version 3. -* is the 32-byte HASH256 of the commitment, as defined in the Hash Commitment section below. +* is the 32-byte tapleaf merkle root. + +==== Script Validation ==== + +A P2QRH output is a native SegWit output (see [[bip-0141.mediawiki|BIP141]]) with version number 3, and a 32-byte witness program. +Unlike taproot this witness program is the tapleaf merkle root. For the sake of comparison we have, as much as possible, copied the +language verbatim from the [[bip-0341.mediawiki|BIP341]] script validation section. + +TODO: Add image of P2QRH output and input and merkle tree structure + +* Let ''q'' be the 32-byte array containing the witness program (the second push in the scriptPubKey) which represents root of tapleaf merkle tree. +* Fail if the witness stack does not have two or more elements. +* If there are at least three witness elements, and the first byte of the last element is 0x50, this last element is called ''annex'' ''a'' and is removed from the witness stack. The annex (or the lack of thereof) is always covered by the signature and contributes to transaction weight, but is otherwise ignored during taproot validation. +* There must be at least two witness elements left. +** Call the last stack element ''s'', the script (as defined in [[bip-0341.mediawiki|BIP341]]) +** The last stack element is called the control block ''c'', and must have length ''1 + 32m'', for a value of ''m'' that is an integer between 0 and 128, inclusive. Fail if it does not have such a length. +** Let ''v = c[0] & 0xfe'' be the ''leaf version'' (as defined in [[bip-0341.mediawiki|BIP341]]). To maintain ''leaf version'' encoding compatibility the last bit of c[0] is unused and must be 1 '''Why set the last bit of c[0] to one?''' Consider a faulty implementation that deserializes the ''leaf version'' as c[0] rather than c[0] & 0xfe for both P2TR and P2QRH. If they test against P2QRH outputs and require that last bit is 1, this deserialization bug will cause an immediate.. +** Let ''k0 = hashTapLeaf(v || compact_size(size of s) || s)''; also call it the ''tapleaf hash''. +** For ''j'' in ''[0,1,...,m-1]'': +*** Let ''ej = c[33+32j:65+32j]''. +*** Let ''kj+1 depend on whether ''kj < ej'' (lexicographically): +**** If ''kj < ej'': ''kj+1 = hashTapBranch(kj || ej)''. +**** If ''kj ≥ ej'': ''kj+1 = hashTapBranch(ej || kj)''. +** Let ''r = hashQuantumRoot(km)''. +** If ''q ≠ r'', fail. +** Execute the script, according to the applicable script rules, using the witness stack elements excluding the script ''s'', the control block ''c'', and the annex ''a'' if present, as initial stack. This implies that for the future leaf versions (non-''0xC0'') the execution must succeed. + +The steps above follow the script path spending logic from [[bip-0341.mediawiki|BIP341]] with the following changes: +- The witness program is the tapleaf merkle root and not a public key. This means that we skip directly to [[bip-0341.mediawiki|BIP341]] spend path tapleaf merkle tree validation. +- We compute the tagged tapleaf merkle root r and compaire it directly to the witness program q. +- The control block is 1 + 32*m bytes, instead of 33 + 32*m bytes. === Post-Quantum Signature Algorithms === @@ -425,8 +453,8 @@ These opcodes function similarly to the existing OP_CHECKSIG opcode. They pop th and then perform signature verification using the specified post-quantum signature algorithm. TODO: Open questions: -TODO: 1. Should we have OP_CHECKSIG_VERIFY and OP_CHECKSIGADD variants as well? -TODO: 2. Should we provide these opcodes been in a separate BIP? +TODO: 1. Should we have OP_CHECKSIG_VERIFY and OP_CHECKSIGADD variants as well? YES +TODO: 2. Should we provide these opcodes been in a separate BIP? YES ==== OP_CHECKSIG_ML ==== @@ -472,10 +500,10 @@ ECDSA or Schnorr signatures. ==== Performance Impact ==== -Verification of quantum-resistant signatures will be computationally more intensive, and any attestation discount will -also increase storage requirements. Node operators should consider the potential impact on resource usage in the long -term. Developers may need to optimize signature verification implementations, especially by implementing caching for -key generation. +Verification of quantum-resistant signatures will be computationally more intensive, and any future witness discount for +PQ signatures will also increase storage requirements. Node operators should consider the potential impact +on resource usage in the long term. Developers may need to optimize signature verification implementations, especially +by implementing caching for key generation. ==== Algorithm Selection ==== From 509b8acc2ccb4604d83128dc1efc3569370bb5a4 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 27 Jun 2025 20:15:45 -0400 Subject: [PATCH 19/46] Add commas --- bip-0360.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index aeea64f5b0..077693274d 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -372,9 +372,9 @@ Validation follows the pattern of a P2TR script spend but without the P2TR publi A P2QRH input witness provides the following: -script input_0 -... -script input_N +script input_0, +..., +script input_N, tapleaf script, control block = [version byte, m*32 byte merkle path] # m is the depth of the merkle tree From 94a08cbf3755471bca1e06151f85c4cf8676c6f3 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sat, 28 Jun 2025 18:09:23 -0400 Subject: [PATCH 20/46] Add design section, stack element size increase now in PQ sigs --- bip-0360.mediawiki | 144 ++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 75 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 077693274d..0e2c82b949 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -180,9 +180,41 @@ It is proposed to use SegWit version 3. This results in addresses that start wit remember that these are quantum (r)esistant addresses. This is referencing the lookup table under [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. -TODO: ...pull elements of rationale here and then provide rationale in the next section. +P2QRH (Pay to Quantum Resistant Hash) is a new output type that commits to the root of a tapleaf merkle tree. It is functionally +identical to a P2TR (Pay to Taproot) output with no quantum vulnerable key spend path. The lack of a key spend path in P2QRH in a simple +output type with no internal key and key tweak. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree defined +as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. +To construct a P2QRH output we follow the same process as [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] +to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hashed together with the internal +key in P2QRH the root is hashed by itself using the tag "QuantumRoot". + + +D = tagged_hash("TapLeaf", bytes([leaf_version]) + ser_script(script)) +CD = tagged_hash("TapBranch", C + D) +CDE = tagged_hash("TapBranch", E + CD) +ABCDE = tagged_hash("TapBranch", AB + CDE) +Root = tagged_hash("QuantumRoot", ABCDE) + + +TODO: Add image of P2QRH output merkle tree structure. + +A P2QRH input witness provides the following: + + +script input_0, +..., +script input_N, +tapleaf script, +control block = [version byte, m*32 byte merkle path] # m is the depth of the merkle tree + + +The script inputs provide the same functionality as they does in P2TR. That is, they place input values on the stack to +be evaluated by the tapleaf script, a.k.a. the redeem script. +The control block is a 1 + 32*m byte array, where the first byte is the version byte and the next 32*m bytes are the +Merkle path to the tapleaf script. We preserve the header byte in a P2TR control block, including the 7 bits are used +to specify the tapleaf version. We omit the public key from the control block as it is not needed in P2QRH. === Rationale === @@ -209,9 +241,9 @@ is that parties seeking to securely store bitcoins over decades can secure their ensuring their coins will not be stolen even in the face of a catastrophic break in one of those signature algorithms. Based on these principles, we propose two independent changes that together provide Bitcoin with -full quantum resistance. First, we introduce a new output type called P2QRH (Pay to Quantum Resistant Hash) so that tapscript -can be used in a quantum resistant manner. Second, in a future BIP we add opcodes to tapscript for verifying two Post-Quantum (PQ) signature -algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). It is important to consider these two changes together as P2QRH must +full quantum resistance. In this BIP, we introduce a new output type called P2QRH (Pay to Quantum Resistant Hash) so that tapscript +can be used in a quantum resistant manner. Then in a future BIP, we enable tapscript programs to verify two Post-Quantum (PQ) signature +algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). It is important to consider these two changes together because P2QRH must be designed to support the addition of these PQ signature algorithms. The full description of these signatures will be provided in a future BIP. P2QRH is simply P2TR with the quantum vulnerable key-spend path removed so that it commits to the root of @@ -259,10 +291,28 @@ different design and set of cryptographic assumptions than ML-DSA. As such SLH-D hedge against an unexpected cryptanalytic breakthrough. P2QRH, ML-DSA, and SLH-DSA could be activated simultaneously in a single soft fork or P2QRH could be activated first and then -ML-DSA and SLH-DSA could be independently activated by redefining OP_SUCCESSx opcodes. If at some future point another signature +ML-DSA and SLH-DSA could be independently activated. If at some future point another signature algorithm was desired it could follow this pattern. -TODO: Discuss the two ways of PQ signature size increase softfork. With OP_CHECKSIG upgrade via new tapleaf version or with OP_SUCCESSx upgrade. +We consider two different paths for activating PQ signatures in Bitcoin. The first approach is to redefine OP_SUCCESSx opcodes for each +signature algorithm. For ML-DSA this would give us OP_CHECKMLSIG, OP_CHECKMLSIGVERIFY, OP_CHECKMLSIGADD, OP_CHECKMLMULTISIG +and OP_CHECKMLMULTISIGVERIFY. The second approach is to use a new tapleaf version that changes the OP_CHECKSIG opcodes to support the +new PQ signature algorithms. In both cases, we would need to include as part of the softfork an increase in the tapscript stack element +size to accommodate the larger signatures and public keys sizes of the PQ signature algorithms. + +The OP_SUCCESSx approach has the advantage of providing a straightforward path to add new signature algorithms in the future. Simply redefine +a set of five OP_SUCCESSx opcodes for the new signature algorithm. This would allow us to activate a single PQ signature at a time, adding +new ones as needed. Additionally this approach allows developers to be very explicit in the signature algorithm type that they wish to verify. +The main disadvantage is that it uses five OP_SUCCESSx opcodes per signature algorithm. Supporting ML-DSA and SLH-DSA would require ten new opcodes. + +Adding PQ signatures via a tapleaf version increase does not introduce any new opcodes and allows previously written tapscript programs to be used with PQ signatures +by simply using the new tapleaf version. Developers rather than being able explicitly specify the intended signature algorithm by using an opcode, +the algorithm must be signaled in the public key or public key hash'''Why not have CHECKSIG infer the algorithm based on signature size?''' Each of the three signature algorithms, Schnorr, ML-DSA, and SLH-DSA, have unique signature sizes. The problem with using signature size to infer algorithm is that spender specifies the signature. This would allow a public key which was intended to be verified by Schnorr to be verified using ML-DSA as the spender specified a ML-DSA signature. Signature algorithms are not often not secure if you can mix and match public key and signature across algorithms.. +The disadvantage of this approach is that it requires a new tapleaf version each time we want to add a new signature algorithm. + +Both approaches must raise the stack element size limit. In the OP_SUCCESSx case, the increased size limit would only be effect for transaction outputs +that use of the new opcodes. Otherwise this stack element size limit increase would be a soft fork. If the tapleaf version is used, then the stack +element size limit increase would apply to any tapscript program with the new tapleaf version. To improve the viability of the activation client and adoption by wallets and libraries, a library akin to libsecp256k1 will be developed. This library, [https://github.com/cryptoquick/libbitcoinpqc libbitcoinpqc], will support the new PQ signature algorithms @@ -290,8 +340,6 @@ It is an open question if Post-Quantum signature algorithms can be designed to p ==== Raising tapscript's stack element size ==== -TODO: Add discussion of why stack element size is increased in PQ signature algorithms rather than this in this BIP. - A problem faced by any attempt to add PQ signatures to tapscript is that the stack elements in tapscript can not be larger than 520 bytes because the MAX_SCRIPT_ELEMENT_SIZE=520. This is programatic because PQ signature algorithms often have signatures and public keys in excess of 520 bytes. For instance: @@ -301,17 +349,20 @@ public keys in excess of 520 bytes. For instance: We will first look at our approach to the problem of PQ signatures and then give our solution for public keys larger than 520 bytes. -We define P2QRH inputs to have a stack element size limit of 8,000 bytes. We arrive at 8,000 by rounding up from the -needed 7,856 bytes. Because only P2QRH inputs can spend P2QRH outputs, the 520 would remain in place for all other output types. +To keep P2QRH small and simple we have opted not to raise the stack element size limit as part of P2QRH but instead make this change when +adding of PQ signatures. That said, we are not strongly opposed to putting this increase in P2QRH. -To prevent OP_DUP from creating an 8 MB stack by duplicating stack elements larger than 520 bytes we define OP_DUP to fail on stack -elements larger than 520 bytes. Note this change to OP_DUP is not consensus critical as currently there is no way to get a stack -element larger than 520 bytes onto the stack. +We propose a stack element size limit of 8,000 bytes. We arrive at 8,000 by rounding up from the needed 7,856 bytes. OP_DUP will duplicate any stack element. Thus, if we allowed OP_DUP to duplicate stack elements of size 8,000 bytes, it would be possible to write a tapscript which will duplicate stack elements until it reaches the maximum number of elements on stack, i.e. 1000 elements. An increase from 520 bytes to 8,000 bytes would increase the memory footprint from 520 KB to 8 MB. +To prevent OP_DUP from creating an 8 MB stack by duplicating stack elements larger than 520 bytes we define OP_DUP to fail on stack +elements larger than 520 bytes. Note this change to OP_DUP is not consensus critical and does not require any sort of fork. This is +because currently there is no way to get a stack element larger than 520 bytes onto the stack so triggering this rule is currently +impossible and would only matter if the stack element size limit was raised. + ==== Public keys larger than 520 bytes ==== Turning our attention to public keys larger than 520 bytes. This is not needed for SHL-DSA as its public key is only 32 bytes. @@ -322,15 +373,15 @@ more than 520 bytes onto the stack. To solve this issue, for signature schemes with public keys greater than 520 bytes, we use the hash of the public key in the tapleaf script. We then package the public key and signature together as the same stack element on the input stack. Since the hash of the public key is only 32 bytes, the tapleaf script can push it on the stack as it does today. Consider the following example with a -OP_CHECKSIGVERIFY_ML opcode for ML-DSA: +OP_CHECKMLSIGVERIFY opcode for ML-DSA: stack = [pubkey||signature] -tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKSIGVERIFY_ML] +tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKMLSIGVERIFY] 1. OP_PUSHDATA HASH256(expected_pubkey) updates the stack to [HASH256(expected_pubkey), pubkey||signature] -2. OP_CHECKSIGVERIFY_ML pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. +2. OP_CHECKMLSIGVERIFYA pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. ==== Future considerations ==== @@ -358,40 +409,6 @@ To construct a P2QRH output we follow the same process as [https://github.com/bi to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hashed together with the internal key in P2QRH the root is hashed by itself using the tag "QuantumRoot". - -D = tagged_hash("TapLeaf", bytes([leaf_version]) + ser_script(script)) -CD = tagged_hash("TapBranch", C + D) -CDE = tagged_hash("TapBranch", E + CD) -ABCDE = tagged_hash("TapBranch", AB + CDE) -Root = tagged_hash("QuantumRoot", ABCDE) - - -TODO: Add image of P2QRH output merkle tree structure. - -Validation follows the pattern of a P2TR script spend but without the P2TR public key, internal key, or key tweak. -A P2QRH input witness provides the following: - - -script input_0, -..., -script input_N, -tapleaf script, -control block = [version byte, m*32 byte merkle path] # m is the depth of the merkle tree - - -The script inputs provide the same functionality as they does in P2TR. It places input values on the stack to -be evaluated by the tapleaf script, a.k.a. the redeem script. - -A P2QRH script witness stack differs in only one way from a P2TR script witness stack. P2QRH does not limit the size -of the witness stack elements to 520 bytes. This is needed because PQ signatures and public keys can be larger than -520 bytes. - -The tapleaf script is a tapscript that is executed to validate the input. The tapscript in P2QRH is unchanged from BIP-342. - -The control block is a 1 + 32*m byte array, where the first byte is the version byte and the next 32*m bytes are the -Merkle path to the tapleaf script. The intent of the version byte is similar to the header byte in a P2TR control -block, but all 8 bits are used for versioning. We omit the public key from the control block as it is not needed in P2QRH. - === Address Format === P2QRH uses SegWit version 3 outputs, resulting in addresses that start with bc1r, following @@ -419,7 +436,7 @@ A P2QRH output is a native SegWit output (see [[bip-0141.mediawiki|BIP141]]) wit Unlike taproot this witness program is the tapleaf merkle root. For the sake of comparison we have, as much as possible, copied the language verbatim from the [[bip-0341.mediawiki|BIP341]] script validation section. -TODO: Add image of P2QRH output and input and merkle tree structure +TODO: Add image of P2QRH output and input * Let ''q'' be the 32-byte array containing the witness program (the second push in the scriptPubKey) which represents root of tapleaf merkle tree. * Fail if the witness stack does not have two or more elements. @@ -443,27 +460,6 @@ The steps above follow the script path spending logic from [[bip-0341.mediawiki| - We compute the tagged tapleaf merkle root r and compaire it directly to the witness program q. - The control block is 1 + 32*m bytes, instead of 33 + 32*m bytes. -=== Post-Quantum Signature Algorithms === - -We propose adding the opcodes OP_CHECKSIG_ML (ML-DSA) and OP_CHECKSIG_SLH (SLH-DSA) to tapscript by redefining OP_SUCCESSx -opcodes. As ML-DSA and SLH-DSA are post-quantum signature algorithms this would allow the user of post-quantum signatures -in tapscript. - -These opcodes function similarly to the existing OP_CHECKSIG opcode. They pop the public key and signature from the stack -and then perform signature verification using the specified post-quantum signature algorithm. - -TODO: Open questions: -TODO: 1. Should we have OP_CHECKSIG_VERIFY and OP_CHECKSIGADD variants as well? YES -TODO: 2. Should we provide these opcodes been in a separate BIP? YES - -==== OP_CHECKSIG_ML ==== - -TODO: Add full specification here - -==== OP_CHECKSIG_SLH ==== - -TODO: Add full specification here - ==== Sighash Calculation ==== The sighash for P2QRH outputs follows the same procedure as defined in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] for Taproot transactions: @@ -473,8 +469,6 @@ The sighash for P2QRH outputs follows the same procedure as defined in [https:// * '''Key Data:''' In addition to transaction data, the sighash includes the spent output's scriptPubKey. * '''Extension Fields:''' Specific data is included or excluded from the sighash based on the sighash flag. -TODO: Currently BIP-360 proposes using the tag "TapSighash" in the tagged hash of the sighash for PQ signatures. I can see an argument that the sighash should be specific to the signature algorithm used to prevent signatures from one algorithm being used for another algorithm, e.g. "TapSighashML" for ML-DSA - This signature hash construction ensures transaction malleability is prevented while providing flexibility through different sighash types (DEFAULT, ALL, NONE, SINGLE, and ANYONECANPAY variants). The exact computation follows the procedure specified in BIP-341 to maintain compatibility with Taproot signatures. @@ -495,7 +489,7 @@ processing rules. Nodes that do not recognize SegWit version 3 will treat these Quantum-resistant signatures are significantly larger than traditional signatures, increasing transaction size and the fees required. Users and wallet developers should be aware of this and plan accordingly. -For example, for CRYSTALS-Dilithium Level I, a single public key is 1,312 bytes, and a signature is 2,420 bytes, resulting in a substantial increase over current +For example, for ML-DSA Level I, a single public key is 1,312 bytes, and a signature is 2,420 bytes, resulting in a substantial increase over current ECDSA or Schnorr signatures. ==== Performance Impact ==== From 2dee25086ed2fd15ac14dfcebecaa1a0872075f3 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 11:12:14 -0400 Subject: [PATCH 21/46] Fixes typo --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 0e2c82b949..e7e50c2687 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -457,7 +457,7 @@ TODO: Add image of P2QRH output and input The steps above follow the script path spending logic from [[bip-0341.mediawiki|BIP341]] with the following changes: - The witness program is the tapleaf merkle root and not a public key. This means that we skip directly to [[bip-0341.mediawiki|BIP341]] spend path tapleaf merkle tree validation. -- We compute the tagged tapleaf merkle root r and compaire it directly to the witness program q. +- We compute the tagged tapleaf merkle root r and compare it directly to the witness program q. - The control block is 1 + 32*m bytes, instead of 33 + 32*m bytes. ==== Sighash Calculation ==== From 9e63483134ccf8bfd826ccbed70e54dd891e0975 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 11:57:35 -0400 Subject: [PATCH 22/46] Fixes typos and formatting Co-authored-by: Hunter Beast --- bip-0360.mediawiki | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index e7e50c2687..f93e32726f 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -297,7 +297,7 @@ algorithm was desired it could follow this pattern. We consider two different paths for activating PQ signatures in Bitcoin. The first approach is to redefine OP_SUCCESSx opcodes for each signature algorithm. For ML-DSA this would give us OP_CHECKMLSIG, OP_CHECKMLSIGVERIFY, OP_CHECKMLSIGADD, OP_CHECKMLMULTISIG and OP_CHECKMLMULTISIGVERIFY. The second approach is to use a new tapleaf version that changes the OP_CHECKSIG opcodes to support the -new PQ signature algorithms. In both cases, we would need to include as part of the softfork an increase in the tapscript stack element +new PQ signature algorithms. In both cases, we would need to include as part of the soft fork an increase in the tapscript stack element size to accommodate the larger signatures and public keys sizes of the PQ signature algorithms. The OP_SUCCESSx approach has the advantage of providing a straightforward path to add new signature algorithms in the future. Simply redefine @@ -341,7 +341,7 @@ It is an open question if Post-Quantum signature algorithms can be designed to p ==== Raising tapscript's stack element size ==== A problem faced by any attempt to add PQ signatures to tapscript is that the stack elements in tapscript can not be larger than 520 bytes -because the MAX_SCRIPT_ELEMENT_SIZE=520. This is programatic because PQ signature algorithms often have signatures and +because the MAX_SCRIPT_ELEMENT_SIZE=520. This is programmatic because PQ signature algorithms often have signatures and public keys in excess of 520 bytes. For instance: * ML-DSA public keys are 1,312 bytes and signatures are 2,420 bytes @@ -365,7 +365,7 @@ impossible and would only matter if the stack element size limit was raised. ==== Public keys larger than 520 bytes ==== -Turning our attention to public keys larger than 520 bytes. This is not needed for SHL-DSA as its public key is only 32 bytes. +Turning our attention to public keys larger than 520 bytes. This is not needed for SLH-DSA as its public key is only 32 bytes. This is a different problem than signatures as public keys are typically pushed onto the stack by the tapleaf script (redeem script) to commit to public keys in output. The OP_PUSHDATA opcode in tapscript fails if asked to push more than 520 bytes onto the stack. @@ -381,7 +381,7 @@ tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKMLSIGVERIFY] 1. OP_PUSHDATA HASH256(expected_pubkey) updates the stack to [HASH256(expected_pubkey), pubkey||signature] -2. OP_CHECKMLSIGVERIFYA pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. +2. OP_CHECKMLSIGVERIFY pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. ==== Future considerations ==== @@ -427,7 +427,7 @@ The scriptPubKey for a P2QRH output is: Where: -* OP_PUSHNUM_3 (0x03) indicates SegWit version 3. +* OP_PUSHNUM_3 (0x53) indicates SegWit version 3. * is the 32-byte tapleaf merkle root. ==== Script Validation ==== @@ -444,7 +444,7 @@ TODO: Add image of P2QRH output and input * There must be at least two witness elements left. ** Call the last stack element ''s'', the script (as defined in [[bip-0341.mediawiki|BIP341]]) ** The last stack element is called the control block ''c'', and must have length ''1 + 32m'', for a value of ''m'' that is an integer between 0 and 128, inclusive. Fail if it does not have such a length. -** Let ''v = c[0] & 0xfe'' be the ''leaf version'' (as defined in [[bip-0341.mediawiki|BIP341]]). To maintain ''leaf version'' encoding compatibility the last bit of c[0] is unused and must be 1 '''Why set the last bit of c[0] to one?''' Consider a faulty implementation that deserializes the ''leaf version'' as c[0] rather than c[0] & 0xfe for both P2TR and P2QRH. If they test against P2QRH outputs and require that last bit is 1, this deserialization bug will cause an immediate.. +** Let ''v = c[0] & 0xfe'' be the ''leaf version'' (as defined in [[bip-0341.mediawiki|BIP-341]]). To maintain ''leaf version'' encoding compatibility the last bit of c[0] is unused and must be 1 '''Why set the last bit of c[0] to one?''' Consider a faulty implementation that deserializes the ''leaf version'' as c[0] rather than c[0] & 0xfe for both P2TR and P2QRH. If they test against P2QRH outputs and require that last bit is 1, this deserialization bug will cause an immediate error.. ** Let ''k0 = hashTapLeaf(v || compact_size(size of s) || s)''; also call it the ''tapleaf hash''. ** For ''j'' in ''[0,1,...,m-1]'': *** Let ''ej = c[33+32j:65+32j]''. @@ -455,8 +455,8 @@ TODO: Add image of P2QRH output and input ** If ''q ≠ r'', fail. ** Execute the script, according to the applicable script rules, using the witness stack elements excluding the script ''s'', the control block ''c'', and the annex ''a'' if present, as initial stack. This implies that for the future leaf versions (non-''0xC0'') the execution must succeed. -The steps above follow the script path spending logic from [[bip-0341.mediawiki|BIP341]] with the following changes: -- The witness program is the tapleaf merkle root and not a public key. This means that we skip directly to [[bip-0341.mediawiki|BIP341]] spend path tapleaf merkle tree validation. +The steps above follow the script path spending logic from [[bip-0341.mediawiki|BIP-341]] with the following changes: +- The witness program is the tapleaf merkle root and not a public key. This means that we skip directly to BIP-341 spend path tapleaf merkle tree validation. - We compute the tagged tapleaf merkle root r and compare it directly to the witness program q. - The control block is 1 + 32*m bytes, instead of 33 + 32*m bytes. From fb65c59f82152d75c948acd0559a125b7ba96c2d Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 11:58:34 -0400 Subject: [PATCH 23/46] Add authorship to readme --- README.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mediawiki b/README.mediawiki index daf3248d0c..42c54577f6 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -1173,7 +1173,7 @@ Those proposing changes should consider that ultimately consent may rest with th | [[bip-0360.mediawiki|360]] | Consensus (soft fork) | Pay to Quantum Resistant Hash -| Hunter Beast +| Hunter Beast, Ethan Heilman | Standard | Draft |- style="background-color: #cfffcf" From bb42bfd3bc26afb30626f3b622235f6ce4ae9246 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 14:33:31 -0400 Subject: [PATCH 24/46] Add diagram of P2QRH merke tree, scriptPubKey and Witness --- bip-0360.mediawiki | 13 +- bip-0360/merkletree.png | Bin 0 -> 73326 bytes bip-0360/merkletree.svg | 1840 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 1848 insertions(+), 5 deletions(-) create mode 100644 bip-0360/merkletree.png create mode 100644 bip-0360/merkletree.svg diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index f93e32726f..4384cee2b6 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -185,6 +185,8 @@ identical to a P2TR (Pay to Taproot) output with no quantum vulnerable key spend output type with no internal key and key tweak. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. +[[File:bip-0360/merkletree.png|center|740px|thumb|]] + To construct a P2QRH output we follow the same process as [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hashed together with the internal key in P2QRH the root is hashed by itself using the tag "QuantumRoot". @@ -197,7 +199,7 @@ ABCDE = tagged_hash("TapBranch", AB + CDE) Root = tagged_hash("QuantumRoot", ABCDE) -TODO: Add image of P2QRH output merkle tree structure. + A P2QRH input witness provides the following: @@ -206,15 +208,16 @@ script input_0, ..., script input_N, tapleaf script, -control block = [version byte, m*32 byte merkle path] # m is the depth of the merkle tree +control block = [control byte, m*32 byte merkle path] # m is the depth of the merkle tree The script inputs provide the same functionality as they does in P2TR. That is, they place input values on the stack to be evaluated by the tapleaf script, a.k.a. the redeem script. -The control block is a 1 + 32*m byte array, where the first byte is the version byte and the next 32*m bytes are the -Merkle path to the tapleaf script. We preserve the header byte in a P2TR control block, including the 7 bits are used -to specify the tapleaf version. We omit the public key from the control block as it is not needed in P2QRH. +The control block is a 1 + 32*m byte array, where the first byte is the control byte and the next 32*m bytes are the +Merkle path to the tapleaf script. The control byte is the same as the control byte in a P2TR control block, +including the 7 bits are used to specify the tapleaf version. The parity bit of the control byte is always 1 +since P2QRH does not have a key spend path. We omit the public key from the control block as it is not needed in P2QRH. === Rationale === diff --git a/bip-0360/merkletree.png b/bip-0360/merkletree.png new file mode 100644 index 0000000000000000000000000000000000000000..aaddd3a819a1ff537a05c9b09dcaaa90777c0e34 GIT binary patch literal 73326 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 literal 0 HcmV?d00001 diff --git a/bip-0360/merkletree.svg b/bip-0360/merkletree.svg new file mode 100644 index 0000000000..ac301398db --- /dev/null +++ b/bip-0360/merkletree.svg @@ -0,0 +1,1840 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P2QRH Witness (input) + + + + + + + + + + + + annex + 50 + + + + Control byte + Script + tapleaf B + Script Inputs + + + + + Merkle Path (32*m bytes) + Control block + tapleaf version + + tapleaf version + 1 + { + { + P2QRH scriptPubkey (output) + How the Tapleaf Merkle Root is computed: + + + OP_PUSHNUM3 + tapleaf Merkle root + + tapleaf Merkle root + + tagged_hashQuantumRoot + + tagged_hash Tapleaf + + tagged_hash TapBranch + + tagged_hash TapBranch + + tagged_hash TapBranch + + tagged_hash TapBranch + + + + + + tapleaf + A + + tapleaf version + + + + + tapleaf + B + + tapleaf version + + + + + tapleaf + C + + tapleaf version + + + + + tapleaf + D + + tapleaf version + + + + + tapleaf + E + + + + + + + + + + + + + tagged_hash Tapleaf + + + tagged_hash Tapleaf + + + tagged_hash Tapleaf + + + + + tagged_hash Tapleaf + + + + + From ff07cb642828d841b44ff3b157183d8901f87c53 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 14:44:05 -0400 Subject: [PATCH 25/46] Remove completed todo --- bip-0360.mediawiki | 2 -- 1 file changed, 2 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 4384cee2b6..4b9b592608 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -439,8 +439,6 @@ A P2QRH output is a native SegWit output (see [[bip-0141.mediawiki|BIP141]]) wit Unlike taproot this witness program is the tapleaf merkle root. For the sake of comparison we have, as much as possible, copied the language verbatim from the [[bip-0341.mediawiki|BIP341]] script validation section. -TODO: Add image of P2QRH output and input - * Let ''q'' be the 32-byte array containing the witness program (the second push in the scriptPubKey) which represents root of tapleaf merkle tree. * Fail if the witness stack does not have two or more elements. * If there are at least three witness elements, and the first byte of the last element is 0x50, this last element is called ''annex'' ''a'' and is removed from the witness stack. The annex (or the lack of thereof) is always covered by the signature and contributes to transaction weight, but is otherwise ignored during taproot validation. From fdb2767c8fd1aa1a3b59fbc0cac34624497a838f Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 15:52:55 -0400 Subject: [PATCH 26/46] Add security section --- bip-0360.mediawiki | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 4b9b592608..510d11bc2a 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -199,8 +199,6 @@ ABCDE = tagged_hash("TapBranch", AB + CDE) Root = tagged_hash("QuantumRoot", ABCDE) - - A P2QRH input witness provides the following: @@ -483,7 +481,27 @@ By adhering to the SegWit transaction structure and versioning, P2QRH outputs ar processing rules. Nodes that do not recognize SegWit version 3 will treat these outputs as anyone-can-spend but, per [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP-141], will not relay or mine such transactions. -=== Usage Considerations === +=== Security === + +P2QRH outputs provide the same tapscript functionality as P2TR outputs, but without the quantum-vulnerable key spend +path. This enables users, exchanges and other hodlers to easily move their coins from taproot outputs to P2QRH outputs +and thereby protect their coins from long-exposure quantum attacks. The protection from long-exposure quantum attacks +does not depend on the activation of post-quantum signatures in Bitcoin but does require that users do not expose their +quantum vulnerable public keys to attackers via address reuse or other unsafe practices. + +P2QRH provides similar resistance to long-exposure quantum attacks as provided by P2SH or P2PKH +but with a greater level of security. This is because P2SH or P2PKH use a 160-bit hash output and thus can only provide +80 bits of collision resistance and 160-bits of preimage resistance. P2QRH uses a 256-bit and provides 128 bits of +collision resistance and 256 bits of preimage resistance. From a functionality standard P2QRH is compatible with tapscript +whereas P2SH and P2PKH are not. As the upgrade path for tapscript is far easier and safer than for pre-tapscript outputs +like P2SH and P2PKH, PQ signatures are unlikely to be added to pre-tapscript outputs. Thus, even if we were comfortable +with the weaker security offered by P2SH or P2PKH, they do not present a viable upgrade path to full quantum resistance. + +P2QRH does not, by itself, protect against short-exposure quantum attacks, but such attacks can be mitigated by the future +activation of post-quantum signatures in Bitcoin. With P2QRH hash, these would provide full quantum resistance to P2QRH outputs in Bitcoin. +That said, the protection offered by resistance to long-exposure quantum attacks should not be underestimated. It is likely +that the first CRQCs (Cryptographically Relevant Quantum Computers) will not be able to perform short-exposure quantum +attacks. ==== Transaction Size and Fees ==== From 36cffcdbae2d0237b0df0e15d92c6a3a27715a85 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Sun, 29 Jun 2025 18:12:01 -0400 Subject: [PATCH 27/46] Clean up wording, moves some things around --- bip-0360.mediawiki | 79 +++++++--- bip-0360/merkletree.png | Bin 73326 -> 75716 bytes bip-0360/merkletree.svg | 330 ++++++++++++++++++++++------------------ 3 files changed, 238 insertions(+), 171 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 510d11bc2a..7b6af46bf8 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -16,10 +16,12 @@ === Abstract === -This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH). -This output type is designed to be compatible with the future addition of PQ signature algorithms to Bitcoin. -These changes would enable the use of Bitcoin transactions and tapscripts that are secure against Cryptanalytically-Relevant Quantum Computing (CRQCs). -This approach for adding a post-quantum secure output type (and signatures) does not require a hard fork or block size increase. +This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) via a soft fork. +P2QRH provides the same tapscript functionality as Pay to TapRoot (P2TR) but removes the quantum-vulnerable +key-spend path in P2TR. By itself, P2QRH provides protection against long-exposure quantum attacks, +but requires PQ signatures to provide full security against Cryptanalytically-Relevant Quantum Computing (CRQCs). +P2QRH is designed to provide the foundation necessary for a future soft fork activating PQ signature verification +in tapscript. === Copyright === @@ -181,7 +183,7 @@ remember that these are quantum (r)esistant addresses. This is referencing the l [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. P2QRH (Pay to Quantum Resistant Hash) is a new output type that commits to the root of a tapleaf merkle tree. It is functionally -identical to a P2TR (Pay to Taproot) output with no quantum vulnerable key spend path. The lack of a key spend path in P2QRH in a simple +identical to a P2TR (Pay to Taproot) output with no quantum vulnerable key-spend path. The lack of a key-spend path in P2QRH in a simple output type with no internal key and key tweak. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. @@ -215,7 +217,7 @@ be evaluated by the tapleaf script, a.k.a. the redeem script. The control block is a 1 + 32*m byte array, where the first byte is the control byte and the next 32*m bytes are the Merkle path to the tapleaf script. The control byte is the same as the control byte in a P2TR control block, including the 7 bits are used to specify the tapleaf version. The parity bit of the control byte is always 1 -since P2QRH does not have a key spend path. We omit the public key from the control block as it is not needed in P2QRH. +since P2QRH does not have a key-spend path. We omit the public key from the control block as it is not needed in P2QRH. === Rationale === @@ -228,22 +230,22 @@ existing software behavior, workflows, user expectations and compatibility whene carried out gradually and iteratively rather than all at once. This is critical as the earlier the ecosystem begins upgrading to quantum resistance, the lower the number of coins at risk when quantum attacks become practical. -'''Use standardized post-quantum signature algorithms.''' Standardized algorithms have gotten the most scrutiny and +'''Use standardized post-quantum signature algorithms.''' Standardized algorithms have undergone the most scrutiny and are likely to be most well supported and well studied going forward. The entire Bitcoin ecosystem will benefit -from using the most popular post-quantum signature algorithms including leveraging hardware acceleration +from using the most popular post-quantum signature algorithms, including leveraging hardware acceleration instructions, commodity trusted hardware, software libraries and cryptography research. '''Provide security against unexpected cryptanalytic breakthroughs.''' Consider the risk -if Bitcoin only supported one PQ signature algorithm, and following the widespread rollout of CRQCs, a critical +if Bitcoin only supported one PQ signature algorithm, and then following the widespread rollout of CRQCs, a critical weakness is unexpectedly discovered in this signature algorithm. There would be no safe algorithm available. We believe that prudence dictates we take such risks seriously and ensure that Bitcoin always has at least two secure signature algorithms built -on orthogonal cryptographic assumptions. In the event one algorithm is broken an alternative will be available. An added benefit +on orthogonal cryptographic assumptions. In the event one algorithm is broken, an alternative will be available. An added benefit is that parties seeking to securely store bitcoins over decades can secure their coins under multiple algorithms, ensuring their coins will not be stolen even in the face of a catastrophic break in one of those signature algorithms. Based on these principles, we propose two independent changes that together provide Bitcoin with full quantum resistance. In this BIP, we introduce a new output type called P2QRH (Pay to Quantum Resistant Hash) so that tapscript -can be used in a quantum resistant manner. Then in a future BIP, we enable tapscript programs to verify two Post-Quantum (PQ) signature +can be used in a quantum resistant manner. In a future BIP, we enable tapscript programs to verify two Post-Quantum (PQ) signature algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). It is important to consider these two changes together because P2QRH must be designed to support the addition of these PQ signature algorithms. The full description of these signatures will be provided in a future BIP. @@ -280,7 +282,9 @@ FN-DSA (FALCON). Of these three algorithms, SLH-DSA has the largest signature si choice from a security perspective because SLH-DSA is based on well studied and time-tested hash-based cryptography. Both FN-DSA and ML-DSA signatures are significantly smaller than SLH-DSA signatures but are based on newer lattice-based cryptography. Since ML-DSA and FN-DSA are both similar lattice-based designs, we choose to only support one of them as the -additional value in diversity of cryptographic assumptions would be marginal. +additional value in diversity of cryptographic assumptions would be marginal. It should be noted that ML-DSA and FN-DSA do +rely on different lattice assumptions and it may be that case that a break in one algorithm's assumptions would not necessarily +break the assumptions used by the other other algorithm. We also considered SQIsign. While it outperforms the three other PQ signature algorithms by having the smallest signatures, it has the worst verification performance and requires a much more complex implementation. We may revisit SQIsign separately in the @@ -399,16 +403,16 @@ to quantum threats. == Specification == -We define the signature scheme and transaction structure as follows. +We define the Pay to Quantum Resistant Hash (P2QRH) output structure as follows. === Pay to Quantum Resistant Hash (P2QRH) === -A P2QRH output is simply the root of the tapleaf merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] +A P2QRH output is simply the root of the tapleaf Merkle tree defined in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] and used as an internal value in P2TR. To construct a P2QRH output we follow the same process as [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hashed together with the internal -key in P2QRH the root is hashed by itself using the tag "QuantumRoot". +key in P2QRH the root is hashed by itself using the tag "QuantumRoot" and then set as the witness program. === Address Format === @@ -483,19 +487,19 @@ processing rules. Nodes that do not recognize SegWit version 3 will treat these === Security === -P2QRH outputs provide the same tapscript functionality as P2TR outputs, but without the quantum-vulnerable key spend +P2QRH outputs provide the same tapscript functionality as P2TR outputs, but without the quantum-vulnerable key-spend path. This enables users, exchanges and other hodlers to easily move their coins from taproot outputs to P2QRH outputs and thereby protect their coins from long-exposure quantum attacks. The protection from long-exposure quantum attacks does not depend on the activation of post-quantum signatures in Bitcoin but does require that users do not expose their quantum vulnerable public keys to attackers via address reuse or other unsafe practices. -P2QRH provides similar resistance to long-exposure quantum attacks as provided by P2SH or P2PKH -but with a greater level of security. This is because P2SH or P2PKH use a 160-bit hash output and thus can only provide +P2QRH provides similar resistance to long-exposure quantum attacks as provided by P2SH or P2WSH. Both P2QRH and P2WSH provide +a greater level of security than P2SH. This is because P2SH uses a 160-bit hash output and thus can only provide 80 bits of collision resistance and 160-bits of preimage resistance. P2QRH uses a 256-bit and provides 128 bits of -collision resistance and 256 bits of preimage resistance. From a functionality standard P2QRH is compatible with tapscript -whereas P2SH and P2PKH are not. As the upgrade path for tapscript is far easier and safer than for pre-tapscript outputs -like P2SH and P2PKH, PQ signatures are unlikely to be added to pre-tapscript outputs. Thus, even if we were comfortable -with the weaker security offered by P2SH or P2PKH, they do not present a viable upgrade path to full quantum resistance. +collision resistance and 256 bits of preimage resistance. From a functionality standard, P2QRH is compatible with tapscript +whereas P2SH and P2WSH are not. As the upgrade path for tapscript is far easier and safer than for pre-tapscript outputs +like P2SH and P2WSH, PQ signatures are unlikely to be added to pre-tapscript outputs. Thus, P2SH and P2WSH do not present +a viable upgrade path to full quantum resistance. P2QRH does not, by itself, protect against short-exposure quantum attacks, but such attacks can be mitigated by the future activation of post-quantum signatures in Bitcoin. With P2QRH hash, these would provide full quantum resistance to P2QRH outputs in Bitcoin. @@ -505,6 +509,31 @@ attacks. ==== Transaction Size and Fees ==== +P2QRH inputs can be slightly larger or smaller than their equivalent P2TR inputs. Lets consider the case: + +'''P2TR Key-spend''' P2QRH inputs will be larger than P2TR inputs when the P2TR output would have been spent via the key-spend path. +P2QRH quantum resistance comes from removing the P2TR key-spend path. Consequently it can not make use of taproot's optimization +where P2TR key-spends do not require including a merkle path in the P2TR input. The size difference is roughly: +len(tapleaf executed) + 32m - len(pubkey) - len(signature) bytes, where m=log2(number of tapleafs). For a single tapleaf +P2QRH would be 4 bytes longer. + + +'''P2TR Script-spend''' P2QRH inputs will be smaller than P2TR inputs if the P2TR output would have been spent via +the script-spend path. This is because P2QRH inputs do not require that the input includes a public key in the witness control block to +open the commitment to the tapleaf merkle root. An equivalent P2QRH input will be 32 bytes smaller than a P2TR script-spend input. + +Equivalent P2QRH and P2TR outputs are always the same size. + +==== Performance Impact ==== + +P2QRH is slightly more computationally performant than P2TR, as the operations to spending a P2QRH output is a strict +subset of the operations needed to spend a P2TR output. + + + + ==== Backward Compatibility ==== @@ -530,6 +561,8 @@ Older wallets and nodes that have not been made compatible with SegWit version 3 outputs. Users should ensure they are using updated wallets and nodes to use P2QRH addresses and validate transactions using P2QRH outputs. +P2QRH is fully compatible with tapscript and existing tapscript programs can be used in P2QRH outputs without modification. + == Security == {| class="wikitable" @@ -646,4 +679,4 @@ the design of the P2TR (Taproot) output type using Schnorr signatures. Much gratitude to my co-founder, Kyle Crews for proofreading and editing, to David Croisant, who suggested the name "QuBit", and Guy Swann for pointing out the earlier name for the attestation, "quitness", was imperfect. Thank you as well to those who took the time to review and contribute, including Jeff Bride, Adam Borcany, Antoine Riard, Pierre-Luc -Dallaire-Demers, Ethan Heilman, Jon Atack, Jameson Lopp, Murchandamus, and VojtÄ›ch Strnad. +Dallaire-Demers, Mark Erhardt, Joey Yandle, Jon Atack, Jameson Lopp, Murchandamus, and VojtÄ›ch Strnad. diff --git a/bip-0360/merkletree.png b/bip-0360/merkletree.png index aaddd3a819a1ff537a05c9b09dcaaa90777c0e34..ddee29f9d40fdd2a0257b88d7c505a6ab718b990 100644 GIT binary patch literal 75716 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 Gy#GHiR%5jQ literal 73326 zcmcF~WmFwO6D1z}L2!2q?h@PyF2OChySoN=3+|Et!QI_G!QJ)YZaewDm9yvU-{qVq z%*^ZQ>8`52b?bJ7l7bWpB0eGn1O$qVw73cc1QZ?cLV$+@ju;A6(gGg{4$@lA5D-Z4 z|6Y*Y9mUJQK|B`;O&3*rGZ*)7PNopi`B} z5I>9yq-X%8;pYoTH1j$GD#MS{=ogTaPzKOlOZ9lDH;qe^Fyw*f0T|j^D2AY>8U!<}o==?|vTA!V zH*GhWH{D2KAMM)XoplXFcglivyEF|eY-&w{L^kwV46fhw zDTHf)XSWpUWH~Q61EW|-T`HF=oOtjx6FKb!+_IG`Umi&To)*-&R42&1Jp^8lT3o5d zLGE*!rmc4t7nr(xXZZexXS3w*!r$W|NTPtIfOm@ni!H56`GCeXt(8tB+Nx}f@M;be z52Y0avEMk$JXnapgVAzeS4wc(K67Q(9-}V1|2<|)82P+d@(R(`=x@D8Vzq)TKN`2( zI9W2`Q#r1lbVYelcJ~z3&PgX(k&&a&4ZUn0r9K3sHZN#SHl_+eUtfzb?4*|1m<`oW zn&f6&$v`yoq&b)d_h;@2ufSHy;=r9~xZ6vwYwj)r!VMas`%@)Ypb}i`CSVjOpfEXy z(wrYtm!+32k@;70WxdpPXeoLr8Xg1Uwc*Ubgr(iy&3Agn+(Ff*1O52YSx{OKa}&NK0@6QNn^xqYEW5To8!YD@r|j0ypL z+Y0iaq1I75Q+4^yHvIb*g6*@nICM&}El4a?)Td_oKr;OD$sX)vF; z=%|ah@Uz^Ce&Ju8kmRIgTxj%(L_FN8h7nn5$OE8ZhWqX{h2#HBg+ut6(^TECia5Q= zl3BB!4zv->5{M^At_(uMW_eL)>Dlsp;cOH--ZZ#mcz2B?{pJiWgrVt%>;R*cok3QR z2py6XGF^@$elJJR?F>;C-^q5;C_DKTtuom3<2%6&ZF`mN!r#Gf=+T`EjSCj9fw<2> zxD-PaZk(x9c-}$v_u-<^-pmC=OJ%mt%YSJshGHNaElnGcX8iRvI~O878&zmA5kq@X zb;$PcOpNTI>idpup$qUHusm?nmD(uug&}aN5y^sW?hyK|G`?AnBeIDsh~(VdhF|P} z4SfjE0=GfpvhgI?pOgH;JI2h!(KN#>Xo%~r({P@Aj^}IzOAWDjo+y?v$Hr<;T|OHX ze$zrc4)N#?u<)RU+8|$7sH~sTM~%&_=vYC*hb0qur(PN}OsjXVy8|ap`SH>0rJ5EN zK@sZwixQDGHZq0^AQLpcxE_kmoyY(_*JC(loaUl;R7A+d`1SWc<3xpXkwGa zsIl1vXC!eJyz6c~kAxzru?$IV62?Z3F}Jg^ZLkOZ7Ux9h8taXo^$qdgzsg<`l9R$h zK?jziSN6My!Am~}4D7Z+P{&q)|rp(l#uF*5N@-XhC5_SBUsZ`hM|gnSKqGAv}*o$wq6T+X0qS%owV&rZIN+} zjEpFZ(%3-_m#<*p?Xm>LGM!E)CWXfo@&PR*w#J<$tCCpmBa>{EN*@2_v2+AU%7 z>F70SmX_Ql0X}!o=|5J;nL0$c_Uyu|=j2aT?z~RWW5l@oW0pD#b{6RoQ+f+TQ!~J*$zX%IdW%W9sprm5M4G z`NZ9h@F7HWX-cmP!L%5KW+e2Y{lZh_f6f0hvj6$<4#OW`4c*{i zm!^(?BWhDbs0_(k>prNr>ht#N!?2}l$$u^_2w@?&+jAVAJ*Dc0w#`9$@@TUY-owPpS46{>Ij5V`Lqhr;Zl~Ilo$I76$mCB0dT|Tzc99=FFqv7qEhB) z!Ciem3=pT>FkSE`s(h!H#zm}itAKEN)3+w?N||H&%>HjJfDs8l_`1Nq{6JO{QIH@s z3PQhkj^9h(NRZpC3FjJ2B=RNSo^i*MVS0qS`alqCg7S_vGJh6p@yU(C(Ph$Tq73EH zTE(cov#^1+-9**CT!z)^?6<|UPaKSPy#r3-Hn|8vp{bCL{1+6H-oq0Ue#B7v!$5u( zpQwE9UD^{LUThnp1u_@< z{qJ!GIaDH*uat8If*7!DeBI>X?(!*8+70VyI*aPoSUxBjwjcl4vjY8yqD@}FEIM1E zX=Ef2#7QJ?+}}6*F;^}OeqW&BEO0njT2CClmfzu@7yV?(dcjcBrz(|~G@vwv3y-gz zC{c)GDAZ(2uNugpL8=gqw1t`#9Nx7b`)HVY*HX5`Dy)|qanV8eE64{L0iy~}W1^{Xh#2la zKhEE}tr)A(iIX(yQn+Kg#j~#D44GCWq?MB{^x~0F$bQX?;-L;LU}=wHXp$3$d6?PN zg=(N-e*Uz=2NF-Z%FxS1a?2HPeDPQMwVQUN0l=y22ZHnp8s4(JSl5dL(WTM%k%31Zo9Ntp# z8}StRZM3JN;A`h_ltnv3p({hkTHPn8#91>+&x06x$7E`W{D=DlIQ|ISL3MGpQ9jBj zSD{_d8Fc^V4XgMy%Lk8+fL9W!w?kA4;tx_p^$23CIUB->-`yl_#E6}z=g|eb(Zu18 z!r=LZ_$=-r6H|9Ejr^~ei~tzhDV`dhBXMe)K|UtpT<<$YHd99rWnF(ckf($RqECQd zt3(g%Kp~e~W$=eIpy(ZG8n!P5v0yFcrwCLKS#w-qIH0jk0)Z$}rI4{UwF6yi)`P%N z83tWD=g;vQskzxHYPW7%=UWuRR)E}bE`>f!9L4ee`EYhS8~i0&?Ta#3-OtP*PVXiG zPIO3P^ljH`Msi(E4}|75GjAAj6C25pk2+`a6uU>R^hO>QmmW{JWtG13mIv17Ih9Jy zABl`K-#(Iy|LOG-dV&r91BfpsasayjxM#eJ~;e(?iUS3X4 z*YG79J4iX`oQ0EHEq3!sT^8@V(@?%_J9BmQ`7hZD_i)wYHe3d9`W(2(B{w%Wa9$m6 zcAJ(R`u+y$>gobXBODVZZ0R>%zNh2q>>F(9a=FJYtrT@;6JFkvS-fYrUa!T`(a}-D zH16*Ag%N(Bwm6}iCZ zU*26YwGa}SNq>=HBb}dF5{=X^%{|#Sb8vTN=Nt3hc2b#BxfRwlGcywjNgjFeCbwLV zf`O-pC+=1q;7Rp|!jScbK$Kv;WH;*0pyA7A8XFoiS2Hs!F+X4L_&_4)v-p{bX|h8$ zjR|D8(pcHv)YRnn{`RU^rQgwNbhg|;qgJIa;I=augQeYQ<5{I&rMOmSuGsQhuMIUK zGIBOozmA-wu1B+`jwU816Bid3>(6&*-U18^752Ki zx_^D2?-;e3?ABg$a&l^bGdhnaRb2`QsHkt{`W;?UTsDg=HJ;b|LQwm`A3&%`C@6X^ zPd7({I83^S|2pK}XtOjc#LL_A(&_u$sSOx`CJ9My8PICw<6fFUPPuC7WbVJtHMyS5 zU;h2|H8aR#ss&TSQso$8%Yac+GR{pv_mAnDi*L2gQ+haiE`;JDrVuJaw5EU0i2iSy zZ6_Ea@EQDeZ_B94?}ZapeV<*4xFN~Z)%VAumZS&U>+^4T>3G>l(>{*Dd_5q)4u?^p zc`N}Yvh*AZIVB#l0i1CE^OghLnFF(=$G5r%$5$_6gX#eJT%Vw-rj9y=o~3$o&{X>^ zwsCIe;A>JgZ0c9qFR{D*;&7Z5A7C+61m7Nvjf3G(1d-w4Jv6JB-{OsBWMn+Ny_4eO z17 zE+|M00)e6>DK0NBJ*>O-ii#*-US6aX6{o-yyu9fZ6%0N;KGJe>{e~=?M@Q*vVVRi( ztgNi!l9F%CY;0FEmUAToZCCB@HAzVYhRrQ4>E&M$#=Eu{BNc7Zk@6nmNSlo$UVMEb z+x-oBH3ojF(0&OkD=S-8R#pbNgICkPqXS#q#{S;a#LcMF*uSvA-L|^1A+%r) z5G1Q>rp3#1bL?&FEBpDqQ&Uylz8;>QrVG!DFZ;I75bz)ni75;2{w5ETN`f-FIo5!} z7b`x4*Lu9V$9;_sCjH2*@?5U#johZ@qAq_vEi-n!bgHJSpGq%L;bqE&k|x5!!Zjpi z+6`6%Oz>;SSfAAL00Vc%=dwAZJ-(LD55Wu-Q@39nTgm5KL z72J70wbMOwO~~iBPG#&2JHu^P{cV9M?RLTC!2vZ_(0A_j#r#MGAC>4!aK0F?A2G$H?7k46b zHcuaah1|Arf9%&UR#tq#U8TBmD%1Jbwf@{B?!^&(4wscST(VF6 z3Pb~eh<2}(zu&&;cK8wb8yJ93|3s9y9z&oJqxZCw(T+Yo)tWuK0j7q_?m+6NfUFD( z4Xfj0h~E99_T+Xd-B$AP^+{I^lfKDj>x&$+pP=B4~F3&gav_i9Ep%`s;Umo z)mj12us^|rw?7YOxrWJjHQ2?5!r1HPZ5`+@qOhnFTe_B3|KJb?0f}Pj(s(BZO|#1x ze#0;I0UIuMmt!^596s3Y$-Xd8lXd=m|2JM@Ft}o+CiuBj(S7kg<7_4UVw4`{1FSMP zWrz$CcJf76j=Q9`JDylz z(eV&XF`6)4kE=q1`TOm$#22ei2{SXNyl&AG-gndO`T`KzoHoOtDp{4Sq3Bqi#3z0CduC0YfDfUh+9QV2%jiNv_ zp7JE>spq#d%M*OrTydQ85f)cNcHj7$!!>bI?Yu!(J02USoVw(<3E?dGnrvND6QcH8 zu77W=-tG@=+xnWt_}l5(k<6LZUmhH+6ftQTX@z|oHB8kFKZ0xpQT*bfVr3EMjWy>} z+>$sU>Q8(b@uMj%K4Gg8wLw1L=V=Vs%>%psgf`H+n1VAv-_bZ*wf@t31Z*x4ljLl zO*5YsU5;8cWoIaE;ri}w65YCpCprlvk8-aQ}Rh)&1g8)O;Nr1TUCT_dALbxJ|Hh@=B&LBqvCCaw4T4N7Vn zb7ojAme!UTI*w#e*Sp}#XBq(tiWTs#m#*#|Yoe+uuiKqXP1c4`ME?U18#`es;g`rb z8VZVz5UJ#(n|h8!3?z~O7Dmn#;B;Cn6%`#q9frK6vW&b887J>ju`l-bigCG*M#dvf zF)Zh)Sy{Sc>0C=G0MPv&9v*Haq@e8R?mo1!@g6c`;o^BCS1hB56}Cz^+&maH&AOKBWPnK>KE6H6+3&KhyTcVKMmzvoijTzi8l@eF|j1v zT?M_V}dz(&qKruzpSbDA#x}92|r2@bLPmTS)C5jVrSk zznWv)SX5kcwb0t&Lcqe(W;4+CNM5HF}Z)|_1xrQF$|Z(j3FHl&*y&T z1L4C7vz=~KiIX&ZAB|kW&pW*=evf#AREGVRk)&q4HH(EhoIV=C@0pnlBGfe0+j~2G zy?AqY?6(6iJn#i+rp$0;&M$Vje1lS z(ST0IO=WBB`auA`)L$Z>*@*%VKkUj*O-bpn*&V3+%wfBn?36KhvpbSRDC9>7fXwB3 zOEJT|>){Q(Hn)zSHQ3zi>+3Gy)yD<(N^LziV1IX`$oM zMJ1?+lDgJ&4^jVVlY)(%Z4sw2X6X5L?=__hUAM4g?)9UQJ&XHxVMSDU>(3qk$9?~@ zm3qA3!Dv|V2i{t9&?^b9{GJur>1uV3<$cWVNp{;Mvq4T@o103586%j`lldpz2!oF& zAD-n=w4d3h{R)PCA=U^!__T~uSUdOo#pt# zsDFA&1R#C_4vt^9*jn3+Z8td20H_Tjc^z$krM(gfZxY|uu_CEM)Vlw z>9#oi3;UHiO;mKl*8%cN zTOjGCHyi)4HCz1v%sj1bKxU6HMVnAO9A~zo66vEg;a)YJc~T~{aMhf0hm+~A&zf<+ z2|kMIeNa4==hAxdM zYv>THki^wA<2ORwXn6FRe&4fL;2)O09GWA*l= z;>ijxid!3_$NTYt#eF1gX~i{zr}JT^O@SV6dGzxb~CN>dKinWNir zy(=o~uIJQZ`wo%arMmIQ7o<^3E@ksrqCLRJlaY{3=0>qRfaaWLF?8E72UPZ*H`?BCRY`QcwuQw904B zSRbx=czN&a984XS=5BSJclHHUA!RsoaO2_OjR47~K9~!H+xYPG#O8UmtLsK-R+o-K zz{TRQDJ&U-FX83ISJi%n2=EGK{o&}S&tK%^80PNG{QUg>{MLI81L&dEtp2lr+S1P& ztBG>N8*wxZdqfiJ96$9kMb;3TiX6(Pe|;0vCl<3-?>Xa0`;}PEOJ-nykz zghXpJ<2;x1&RLGZpUsn?^|#lYN;jVW@Io9M=HRigLD`SB7CU6Zrgt=3JT}zn2Eu9t zc%Jxg=FqM?gD7t2>+%4@1j&LQ!(sI&Jc%ZIWuw7vErXirK^_YSE;uj}i(V4QuUc0( zr7cx3neu&j4}{bt6hsL)Nb5y{XNe`#OC?{QIIR9g8g#t`ZFD_;4=wjQD0i=r)%1UP z5a2vsFh6ykgRofHaT|0252qVTA^fD599GqT2Hj>J=nKBwq_kuSIA(boFt}P+Up`t_ zv3d5K)Sv#rgHW`$Pi=q0hbG27b7`jm5m5?o#&o@DjxFsBrN3JMn{>UOlpNn( zjC61`-3Ib*vNPQ+qG|TMFvOn785ovP+&wInct#z6R)Hyq^?hP1v8G{To2|2zwBdC< zBt_9_bm7UV8;ZT2M4C!UP3#RxuOn=&e(P|ACeU~p^&X>AOjD>TRWFnTd@`XaCv)^- zh&mx9J-u(S!LfXPX~%lHfQmVeXySl?yO0}KT2Z#pzhhb4pz~D80qT(52S#x+6C_;v z8NAywN%W(AlhX@CFuA>;zju?+_s4QJnRCNewwy_?Ot*tCMN||pVM@3-qO^|H>ydWe zn-+7;#_tspVX?@Ts{wy@O;EwBA|3k^N1u%_y@JWYY%v0=x`cW-t(@)_Su+}}4;-={ z0p=6GLc8Hu##}2tDKSyA+7QyKBPTu{4cvaMkil)Q;Nrq@baa&5gx=}n>l+alH)O;0 z`6cJ>bSb#B)I1$a&2F{1XEOV9DK7GNMF&T06M%!jjAR=t8_G2to$f)#yI1;6bIdLk z=eSwb_2W;Ky<7Tv9u0Uf=Jd=^Ud(XJf5SJ7qRsvC?_D-3EGDps0TcCLF)xRl;jXQ2 zMxCSY$^5P3ew(A+_q9y9OE5~kilXcb7Wq{6UW|FpzLgp!=Lt6{9T}vvprik)O)BUG z8hT`OoRX0Wi+f{L^a~K2QDXuiGa7BjO8xCNM+c(h4(E~NQTa(NUV5pKIWp-z1^Hm;Us*Q%!r6P^F(%oOa?;&O;aIa{d>P zU~6{*c_8bw?s~hy<=`256Z!fJjlg-r^8In^=*W|ol$3OGBkT8AxBeeW~Q*}1uq(b3T@n7oA(8AW%n*8a{;@Q^$%G7dK+BxJqioY~e$63tX= zt35CgU!v>lkrP#CYnwVc1Xx;A)_gD{XG@jK=aGrtS=@!Pyhr+0rqTc-2kOG_yT4>* z?k4aMBi(?eD9e=wYYrIC|fH- zxA%Le;OoelC|AF_-d1$3cf7l?!IRYoR*xh!oJ{k~FMoe27fYfjknm>t3Ig8tttUzG zV)g@xDH7Ek2eNBL{s^m}Q(P5`$PnA?oQ#YDbzYFi1&WsggCfeY;@G4f5M}C5SE;1D zS3JZ8-`$x*l?-22f*8Ypt&S zz^_3|3n>7yY2=dJ0Y1$hul7R1!Z1F544Sc^9HG{eaB^aMdwWx;((C(<62(86NXpKh zM8ItaGcYiK2bsq7NSlc%5pnrCdd6|g%KQAaa83N!)icQ4%wNVz`)IJV8S4i?xrCf; z7%cbEI#Q4S*mF3_)0@(_(QYAM(TCa`2J7i|d2vp?feBriodw^6oM~dO6D(8vxX!$9 z_cQM|Ca~RrCtqq=_q-4_FQTME*Zj!_3}|$;3+mZog5Cj+5^=V^;-5!n&zpGe6tQ0z zmN+B_q8>a__otKVf{pgf2Z}l4*h+6NM^fuQo;aL4A7+0BsALtDYQYX;jdd33*O|e< zM8vDqi9q9rH0}Z`1DnUH*iurXLTMi}X@Kkjv&s2Nr-r>c!)xLXdiAOW0HjdSvnT0g zawX!DC>E+$;@v(Z{jr{B2%GQEN*NfaGcR*;W_oUDv|YKIZm@1?U`;J103fu%;M`mi zK#OAF;!0=px$^jG8|9==m@(rf$k`o%x~fy+Ej2AJN+)rCAKg5C95=MRf^pGqpI` zCEeZO1bMy>J+H|;Mq<^SaUk~D3V2{)xokw)I#o&MmQVOd8zmW`2{n^H|bhYy7F3c7>JGMREH9RSg++zq6Ej?m6e1EBzhCx=Na=W)!mZMxJZRYja*u{AVIM`*g*bV*qRO9vRw*3(UZ>@^tgJQPPV~IRv zanW?1B+B=7zs~@Da_Qhcg|28ilrL7X+=>+txYjzO&i?B&0p3WgSeS)MDXLJVfuffr z90-IbTKVg1)T=f}rD_<>St9=Y_zuDh`d_Ps{V`jA-U@>E-YDM24*&}HyI-3EmjBC( zt5LVVoS73ZJ`cEpZu?LqRnP1zjYU2Kkv>lcaI^IcjpvL85p8KS5Pp!5KLnq%ib7z1 z>$Qq2Ij{gjj5>q~B+x=6f~nR&KjfK~PWp5>rC&=viX$z{uuIRTKN zoBR8cKXmt}Zz?up)=(fKKrGI+cz?veSnBfkw@(_m z`8i_Jx;@&N5??^;$RxF~+2T3IL=!8X4tKOYMymxU4G;=F}s58oym6t^I zlw}kYPzBvi7rPO$KJ8wCEvNG!QLZjF+3{nL33;Y1I|M$vozl)}#jC2S0>yCzPF!Ta z0D$jp;*uG$v{`aY?l z>PnOS@7+)cdnTRlmc1}=?&qih0NrQrcZ=1r()2;x`*JMPzF_W1T3)trGEYP|GPdN` z8bY5JjwF*}LqS91u^4v0OixccXx!_$O=(}o6}#Pjd1){b{P6A(l}586 z2Gk(y)?ZR9Dpr#&D}_%aW6IQP$h*Qq6LJ!I?)_hS4*fn}y&tBt``oVB*ORb+zcU`3 zew~rJyu8{5N>dO(S!M|eQTUxnulXZ}*va$x!B&g&quZJGX;tKs&HipE($WYlWX3}I z(516Fv|M4PPNUai-x?7KGxJAT)|$)$56g{m?zIo7pU%Fma&QuGHRToIll8>k^7Z)|>D|NX2*4sUq6p2eX=pt1pDA=PGc^(4^ zV(gN)s1|%Y^9+PK-(KBUk>QRP%0zq_1;eVExZ~n*dyM;>4mkLn_}nG0tx`VK++I)d zdR$SifQU`jw+ARoOW5WmIV*sQ^W_z}OkFXAw4A~uJEpIe{**ecodl3`zgFqC%ra3? z!RBUaiqgY}fk>F<#sv7XQL`1yCxH^lV^RrVT2u-TOR@lzN>5I{v02!m8C>_2RV=!{ zIUb;o!ok4683Ksfx-su2>!HsE{u9;u9c5*(6gmJ+?qYq$qr3wI{j#qOR&Hv`eOp^g z+BiC`O?DFt$=7#}NdGXItztq(dXF^7t7c>%^P zZ_bTSggF5=Ss_bEG3|2aCm!MW0KEo0gGTIa6gKZE4L^C%2YtVEz`zp{Q@=Nr(y)_w zQfjoN$MN@SCPl2!$dS_1BLNef`a^EO)$5;3H)%xe_F}6qKPM+AxlP9S@+CYnvKOdf zG{ErRM2gDEA+I#rdM}xk)os$CH3aAwS;{9mZVmE7ulq~c@G#$F?uU%kD*Uotj4OpE?=YkMFH zkSe5UkqrQmJ})m%0FV-Rh6yo2{f7YzX`A^WCR{Vnx0WrbZAgOz*OB9dYNYDn=`mex z_Inzs#YVw}FS~D%<{$s(RzpKb1PBB%v(pUx9=8G0eLp!kaChz;hs{$hRT%IM&+Hu< z3IqJ~7N}Cud9hK_G^1|NX&>N)uN`G-eG$tftHL7+IBDsn)=MCe;o zR0OP`sRFTp&-V8A?&BkWCvgN4Xbr9HKajd$5j$ui>r9wAiv-0oz&TM3J%u?jUvxn=-okE2IWi!k6t;P%&aCNC*{LKWB!2wJ zACMc^c5Q9VmL3EJ1;wORsr}bus~6UHD3-`IAtAvMfbMQ>XN@Z^QgOr+9GMeO)bbfW z+|QOJl$7E-0oe~8V211*7SqD#J3C2@_8Wptsf;?u09`Pvkj3-u^v};EfCqNA1nj`B zQoCW62ms}C797WOv$H_@D%rG0A)I+Crsf&Gy^o=BBZH1_y6D z(6bL2T(+(2V`KE53%~VV+uYCJ#DGZH0N9QzE}O~lHc-)YkBEt>bUDa&f2(&pTNcsR z*LMVJ7i-M`CT4B0`n#;r=5}@=^#08q<~TTQ3?lFYtb&@IO0 zIE2i3aMd`?S&BNL1(Xpb0m}hPb>{c1nG=%P3f#RmTvdOLTma&JRlaoY)r>3C8u}|B zb3514(sDn#eWL8p@8Y7MFwRma{cOsC?_OM58poA6@lCSu(n(TsP`YmEB}t+58gd!B zeB8`gl@#p(5YUBM4n;x5LIej02op|2FTy`SR|XmcQVU}N$SZ8b(iW{~e#T5rQ2Gsqj%~kOlvquaS zfZIiwLPrPy^f0uT0}8g?r@O92m_xUUrc{$v?ps$Q^ruV6r%o3cni;{Zp_bv--mcPg zv9kF}$&R{5Yf0%+dI3mrg=n7+HpG?1MIB#uyBdo=T!F}#+Za-WJ%s z5fs?N#6RDa?G0(pI-L|4Oa(~l$Xj-%kr-uNFy9Hi4wMg0wf}W_%oA<6w?>;A#e+x- zTLqJtIgj}Qdh+Xmr7&2|?YGnijt^jAhLNZYy)h#6##KEICXGwD$*N1FveNgUZ8$k$ zn^{7=F%~spnNZP$4+9A`WkMIkA3qPEn{DD&6YzvKhw6*2;xS6PL=1=Mpw$LwR{9zx zNS)#PpndB#cs@nIr2H8?P(7`>vVp@wj$ej9++g!%-T&|;aHKn*Jhme*1Y)d#HRr=I zxvXMR05j5(hO42_G}JIN>sRJYnJkm|McX?{=}fU_2htX1T?)$Vr$Z;8`TuhXXZOL39AnjP zcWN=6ucO(3J6@PODW0b5Io);mF!>nN}j2nsZam+|H{(lLw>e8M!!{6o-!8WVrcjXh)1 z5yyZ;MLOo=IP9Jq08bYdXkLF-JS^ZPR9q6()$e*la{{;knQXf@e&^O7XH7&T3a1mHcZ+-!L$Q9&G2(v zr`QonrJNJKmeCKy)nHulAqatnr^ayKzPfIR{`CWNM5ZE!58%1GIJj18S5CCHu%UpN zGUS1nk>^gm9Ul##on}s@z+@AZ@v-I$9~qQg>@CzyJMlw{I1hUlm{{vuf9N$d=#}|! z>l;LqZJ&kTRUDg~PJ{it!5+cIWTKM>+K--wFh)AbFh1wK&aGIyk+`Mm?kZg^Fhd2v zMwJ0kORsxc%sU&Yf{*XI%g`+n7Lm^GyHT2Fo`8jJr-}nL7gGdTC3cA(9^mx<*##5n zPgLBoiV*+fs9dh8Xd%jcm ze+A{r8ID57q=WvpXdnW2%D`1~iPI`V*fDfWn2@CRmL`Z2Oh<;$Jx}prl~uk6vil*B z^v&8rg7>4@PZW-p5y3&|v8ytn;AU2wRJ5xp<07C>Oobe_D#Vh=R6~m?+_fvj4^MfNiH<;(n@6+}?lG(O zchZ{Olv(_(D`j-}-Vt2}{3FPN&sGxL@xsP;Fz`D3dT}9tvlV!)hDwS*UeK?I7tmi$ z7a{itun^^6KhPk1wC)TA$UROabTyiwq8eIZHoK%B&I_e;aws&7UE8Dh8NqO!qT9CZ zWq*AG;Au7}9u>8Dc;DbDwM#=K!{e(pR@@0{O-wF-KXikCECd|Xw_U zDT|jqqRLDj1U6s&o^9l|K98*J!3m$Xu8JuS{mKI`Y1GjkblVBjVn8ervRWEneP3DM zIvT#&_SM=sS6vWOtH35aq`s;k#T{;+yywPhkcVsVS(wdoz2w!WiC)KQp?{XUR|az`3gu!eMg1tEd1gWkftqj)n!A$90yH9} z@-ZFpwf!ZX^ohoU;c_r$R|a55$|6egB+&AkMtlU6?Mv=reHT$W^35(|5d?#9P>z;G z6uf$)G4il^dt_oyz^d%)wS_9tOl^B0Jo!)!6A>KQ{RZUj=Xb)E+;Y;OVYA(J%>a{j zxJ3jTk&vYgG{#jP@jfnCbPlF(e?_syrFmmk>&`8Q?89F4W1;(OmIZ?-H;_dO5Ob#o zxunXwK#$pizp|~1=F@;cu*y-~vg!<*9=$^9Z*>-6AJ5MMB7^Mp6H8TMScFs834K}m zypt&Z>efv#)66rvtF1H}NPFgt&4#|TFJ2QPTZ7`shEj4tD7NZ&PkzvXZtdYAar7~K zu`p}6aKbrUa#zdNTfhm#RBP${dERu8OPEHyS~JSRM4y!Aq#6;9Z&QPE`y4xyYc9c} z9rhb;wbXM~toYSh#4cP$$l`LIZ%!2aL>K9pKx)kqnn*dj!xwsIXle^zI!wd?dF5q< z>+x`|JuymW@LD*WgyK4s^fy*3-{q1R_fT_HGh$cpGAqN-___8=(KxB;1B zRpjiD5l(WNSvfB+&5_vfz0Obx!{q+8X@BP@=DQ`I-_aIaHgT6YlW9yu-{>pOp^vR{ zyM&2}@hN(xNXgN7$;AnV@cY5^gsf0iTH%iWd|&m8sx)5k%gB-nin5qFnSb|d!pOR) z^7{)|q#i>9{Vx|!Q>Y_WADa6ifwUcge+7mPDKAY6jFXkgFVZo@cQO7PePIsS$XOax zRu6EFRHliOWDqCmy<=k1otE3mBf|8EHo?k^M2_c8E{Wi^Ry3o8 zw|y);uWN#LlRNs*zx{l?v=e(d*xf_JPtWM$!j_29e~#ayzEX8yJyP(8lqDkdiuX?| z#qp!B7pBmVAKz~@?Dz@W{k=ikv=pb+mhAa@sAzSt`5hiBHM$cA9aK~~oZ&C#t07!m3>+bPas)IvZ4kBfl$YSa8$%M|pY77#5s)muG-WaF<3t}6%&y^R7moVHX8k%#QNiK$K9W5!pX~-YB6MBqk$dXtZ^=C z^Bb_CSki?pknO4SHBTepd@m=SIOw=v5<%7YT%X>EJjj@K*G6nfE2XwiU8qVsA|Pwz zYxKAfByHjt9w>UPY;D`{TSA@CdRo{M2UfVi5kf{y+tJ#~m#vo1%goPSqZcvb!p^=V(K{{v7=KapM*7&lHqyVC60urvoK2&V#rq3u!fU9G zkKymCy4H2ebEkul3D7{$x^*{;-dfJh4NyYV1Z@+3c>U_Bx9bvAzcbcwzIr_<&q^1Q z|B)r^1NgR6O_B3^;~WM*!`2#yVRkdTu7wfippfJ$dq|_t`k->!`*j^T3ye{Y)RgRA zb$!PE^0_xYKDd51h;=1%=sS_Xod>vePm1s56HDOy088S^R<=VFNZ@)yeD_m0QNGvG^2#PfG z1C8nNe!JD-zIGV?gd?9|Z_15RH#vJbn=JfiI5hiMmd+OMni6ECtIP5`GZx-&=ifQq z@5lV=%U=;WRmavBaCBwq$IW-+_FDMO7+!}<@?SfQbIHQLhllM3%1cs+=VHw`-T1u} zsw!`fV3flMMXOhB-QmdKntk~jsI8fj?c5NELr@ia zbPuCU;4yfTF>ByuC>2iXRQS!&L_J$kj8UhO?g4AhX+5`K#s^itYgt!k+ z4xb8^&f2RM)Zg%ACLjr% zG@kXDC+F!CRnH8NFo}Kr>4g1UuD*$01Y{+mvo26#HsuVr3TYIb1Nz!sT~|Y&9TUjk zTy4c`DLxWo>pTfD#&XUEeXgsK7O|MAPFWyq+sa?E6LBOqoo2gjqA#FVVvQGscH3$@kj730JV`^c{5#W6M4Yt{PBh)^EE{wlMoH}vV z9>(`v5_C%D9o1|;6l5?M_ateq=T%R*D@}eOqk%6?6=EaF_UNM`O4<66e&j@5AnTt+ z;zuG1jQ6?*Syx4-~#MN5NM0mv%!MV54}stAP=Zhy>Im-xaFgh_784fDN%T zU|rlxBfRT^Kn!U2Of~CLc<^ko9lWY@d(>a7ji50bCL>xjUym}xBd9LSrQJmj@L{*sf9 z94uK7EAV7CtQ%RFPSs=hJe$1_&i?Ez_wLt|S$5okx(WWdx}3_C99+0vH6y5=j3olz z7o)Z)`zcR(Ib8zS>4fRG+#0T*_jzO6;E)GfNzY9U*Bjn{uKkot!;;?4*sIRs9 z?VU+}|8b@`PF{22RKni(3ve%bsyZ@0no#>BWq&%fh#*!aZVlua!FfNZ?QfOUk{iL% zcPF3GyvJq637ZnJd1r8HFHmfgMDR^JFvVm3XZtKZ|4g0gX#1|Z8CB-wV4(WmOr$OQ zN=PhBgxGO@&>(ts3%M;~WejSs+E;Y=q6PW%umBR&n0hufD>HJ>V!ap~GJQ42@qLSkWD>$-(P#1uSX&6-(V&d1H+X+I0iCdi{xIX z853-)ml0CEr>VZ<)gIAqDo^mfE6nc$55o9B|2^~okE_5GUowh~Eh^#>Gutx)w#RZ@ zPczQq>otljweH-dUOw~9l^PPiN|v_ymMv_bR*Q3GdG&}8KUo!mAs&NPz@&J{vCg{t zRuBBl^3LZhLz9NvBWOCsTp>m!ab-l^>R}9t79^hHsp-6ofmGnMkx0Knq~E* z0^idb7U zu$}KD?RMH4lZRv1cU#^XgdIYNV8;NPK$k&kCo zJn*N9zM=S8>#Y1HGD78Xw`VqaedfU!Ed%acO#bq{HK__#u&CA(!-1J6c&A4aA*t4P zYIJi6D+ZjZnn6qS5E(k-qp-8}v9X%sG3gMKjC1Fj-!QF48RC(Bx%0T%?;Ye~))bhc z>|Yx!CWBsx=EGm?Nfw5_6shY`xa`EJEan6Ec(C87>#iGgyiD<0m*>|#V`{AYyos&_vB>0NlZ z)m^34ywR~E`mbm4IJ@-jg7DHtnbSAHM0BPh!p!x(GSiK{c&W}tGeR&LQ?tPr*yx1^ zo8c9~4@s5EOcCR|pv-VW0xZ$a3L14G22Z|UgvKR|hG1v?)VVuNXTJDV88?HJP{FW75S=wQyzb0iPCBSZP(06K=6gZgS3^~?VB%}oG`Cde)#wT5ic^OXPkeMAWo+kS^LdGFns|j<&PmYlNMI$O|({o|0?^mwCp8GuU_?8=D)LAq1O*Qif3`R=&%)yC>$KA33n( zD`H5kRwBl8Fx-Pza7Z`n+Q38ZHjt~)RisHpH8U`L#QIMa^zg=;M?E;d4$Wbj5mtBy z@uQ6?-s(@s_vJN*zm^ty(S)Gz^_F#AVc578V{EyfIO!cl|cP!n?2dRI91G9gEd$W9hRUfDm-WkBLcP0;y{z$`Fvr8uS`X7BkfY7MEbHs7PS z0oRh~wxq--%7T8!w*7I;BY+b3aD*l3+zcRW=<04l2}yk}w~LR`w6(N+HZp9QcFM{h zNcjkOF9nJUS&t6#2Lo62Af~T=y`bYa9{mw7li7K_mZTx*wx;qeDd`ANY1sUYBQHQO z*!NG#d!PZCka;u9x#RDc=n}yrVc`_u&WHQ0Xd=g2$2pPP4_Ejm=@0>sHIaXN!i9i# z%P>mT@d;V1;q_N8j-f1(BaO*aL2>xbvylhB<0<}u*$b^+|9aKWTwWnMV#IE~;jPP?53!%Vww%yN9*M%pFP>Y4A9^*2$+ zI1gb3g(#iJS&0AUiWUi>acY`zw}jCA3%n^0mxg4eqhzl|0!c*QN?*d=75&E?Qod;Vi%BF z9ZujM0G;gLa&uWcvZn#|`U>5Ne=9)&?mI@x-v&F~n>%XEkn$Cjy*|K?rsEwp5%oWH zcqh5{5?EguzvHd0U*F|{*37`jDqX#+<&?W>!GT);7*kBLJx9dZ}rj&r`NQ0%`yyk|B3h^p(8JoW5h1C2IVd|sf@jynejJ5*9q(qTq6 zOC%{LvQsvPVEKIvCIcy91{SPqX|Z?_$uEBVQZDQoH_aXF3{KeB6ZG+;O0xNPHvRB5J`I z=rnOyXh{iY4H64B0w^WmI3DD-so_+0V*FTq*QkgnS=0bB>eMF~oSy#R@(exE8%fOo zFpL0Arj{iVD>NaMG&(wZz1JVhn1*#v<1>078zi+0ujD@QRkgR*5@dv5t9z)utd+g^ zwp0Jf%`(qI@87`vkJr#IF?D1QnPwx5Z?5jsJICMC7Yu$}zl*T4pQKCWH&okw$1Jw; zCHHHt#kO-a=y3OS*>uTxq)pD->4(#}pju0D)nIH=-JWFWQq$x1%RGgYPaiHg>`0F~ zGS$cAKS7tTn(I)=RKS(ci8%$NaMj5ckealeQP~*FL;%P9Vr`Ez+r_#we=k6WwKL!d z|L%zHREZvSoa_yaxw*x`MZopJwl0(ZP9(6Ky_YHW;u|I$G-4A4&7E4}d~p=YUYwe# zml`DQo!4>4Id)90*Dvb!|2#$sBQsiZo*mIo9wp0ET)J~gYJ0l?k32LoX0e}Ei)`|e z=9Q@Xo1PR;Ig73~!7f*u?D??6q{REsJ1x+W&rfUn(q85ef3H% zh3i9TgF*c#TKCQIF)WGWYdqUOB~*ahUAfpK4RTwe);02^MR#2B0WBo~2VKP3Zo`~^ zO0|n&UH~I&4#;$4m?cvI3rcWzhoMbA#B@4@W*01?+u$W`pp6#vm=U_3P~ZC{iu z#{3){Jv0nC+fHgMhB$QPSr+{~+N)y#+>VwPdbaPhlJjZhoSb>LAKfS>qwplsES}uu zcSL!{;Y!xp#@gW+ao+EnbBmItCbOVsz{`Y`D+^jo66;hMX6Q{>yDcqewY_F}=*AdN z)}GYL$1?n-*qBXn+53*^Mj@r|M#GCgj`R7jW(1$n(3p+Uc#$XL;MkDW==75ep`$Fw ziJBT{VpVi;jG5kWVD-uV-_Nepw?|_0@UI#xmZG($CjDSdRZ4mXa~-(o|4*HzbDKqQ zO6Yw1NN?U}w$HN21|t0|g_ltj`fLrb+)~?N>7*K~5jqO#<6n5Y7Ut%+J7LgpekBO_ zvKpU%=J)U4_xaaH&miGp8#w`(+e0@uH&C0;i>V@Y(obHTZvhX~1UN?DePHT^kTn^v ze%*4(kGPd6?y7uX1johPSo(|4fMZzWMq$9XXQv$} zxi1C?3wn>Yrx*Ye)h<%wge+X1>^9$=&b`slumK{9PMJ>WpG}_1kKv80gVb@)8nk#2 z7#mB>%)Q)a^eOIZ>2iekI+4V-M@^VfXM7ZNyeQc(I;tYoSXpQP*-GV<Y8Hhz=etHnvBv8*RyQyPpU@D7gBmXhk6o>T|R=4_?gjPT%N&tZ zk6k7xh0iQ4-9|d#xVm&fx|n8)>4645vSw$UM1-=!({IDlDnNUN4WQ{T8}Ztoe*=s~ zIZ7+m$QwUf3f4$sS8oE6oGnDP3G$|!LDY!}X!|Y%=6=Mm%H}#PwBX)jW{#cMnVV>HpnHtH}i~)<4gb5ayn}-4x~roSEyP$U}uqt`4&(6+rcM5^bgRA)fBeFXIs8w#{P;eTpjXj)nr`(6A?#+HvX|LZOY9nI{H{d*uwrmxhfwVM zO{0`fKJgck4Mr5i%L5E1M}O^;kPwLweNX!&s8G%^*gg4=qNs6Cy1kOy=+J<>ZFx`V za4NPV{iGZ&SbvbSpUycyD^u+WBb2pjbeu~qukOfnpO9`u9!-~OhXeZqwH*2uLC6`>g~)t1 zah_Qk~{01>tAngKS5=DWbF4h(biHg)~EANQdU+}08eDm zgI@W5mw)ZdrnyMtAA&3U$-Awg-yEkaD^v)Y=h1O-MaoNy^9Re!uXfu<- zC+BOGXHB1uBOr4M0}4Xde}C6)GyS4`##PpP5*Hc!Oq4^^Hs{Qnj*(H-$;stcTB{_- zma~8%jE7AtG1)&a`8LsJmh?J6)lPiNvd3xyDQgoJbG5zHDI3cu%7-}e-i60aFj&rt7zVA*Q7uG<_ld)-_me&1F%%wfX?e%Ls!1a+Z7VeRLu-D=6 z+-AlZ$V&8ODUu-vB8W?h76ekU|!{w=t?`L02 zpoSL}mGu46f1De+&XG%9?u*^tK*r|;+wC-Ug8Xs*cdGg@-k|-Xdc%H~=6+B7et)<4 z(c#rrAttH&@T=;UkB)9;qrIY+5*;@Nga_v5kM~`=mMga4v90*{a8QOeq6eEVkMD^*x3~Iun=(FyM zmpTHQuMbCXN1WP@Csm~|=c_=cI1PlNR73hiC&XbSx9OmpG(*7b^{cPXhuD5o;3@c=2gO2X6_v>Ha{ zzx7VZ+5!pXO`#=CJ3tLkmr(t(qKhaubr&Lf};#SeL_9gm19u^y!XAI{SADjL0)lF=$;Hcl7wp!CZqxa;ZN{o2!>(p!+ zheM~9D<$sWWePMkq2`;DfL)@0Pzlrz@79M?RHrYdcIWP=4^yN7)1iRF8~ae0L{iHd zXxMO=srkAyT|Nad>&Xvdv$M17?dv0)=H=iB2c|-m=~m}<0=+l^nl`heqiSyM?njOP zfT}JrGxIGFF-r8Nf`5#Rj6C7x<+aV>0K}_6VJ*A!95_t9y$XQzQtbGbd?_%335i&! zw@0*PXJ^lWZAjb2mKpzTNoPwpS@yK|%+$D2+ox9Ko7J-4=EFd;c71tcSf*3{_H0oa z3AuF6tg}@zO!4VAl>X*4z^tCd$2_!NE@PwJ_%{6kpd_o~p5!yT*A2SsbC~`|fqq;vvyu@Cz!xR9hohh=wiLr&R_pHdT#M zaIq2p418Fa+#k)~F$lzl?o=RnM+4JYl81aLbgsBmW~eQyScVb<;}&c-lLA!%Bq2G) z&3S*upeLL%-h;LV9#nWj%|<74gVabVlZMPrl(J;ObcxZeE*hA?)td ziS0V@qe2JVT-A5)_*Q#{jrBFvF5D#>e%4qR?8ubHFwtx%wcy=i9{+z{TDXeM=y2SV z5E|1;1A20%zd^<%mZ-V1bxE=ZM1^?qDP8||S}o|T2_dy)hJ95Aj8tA5h<7TMGi<;t;lQk7j_}J@PW;#<$yzqjU7V5~HPncSH zr;S0^+w*X-mFr8eESCi?FU`#*sicP4N1O@Va6D1mV)L%uSll_CE?~}27h**FF6qV! zI0g5l`gPZmFxr#oa&THw)H2X9pW&3Hg4BIcQyqeu^$V>vfg;iJ!l*NG0Rz3Bl;YO) zQ`ipJQNIb1w3hki7ViYJ!kd2@w zuX`3?$`X4+@%bk1yxZXkn^ws;YpqQDCF*O=Gi_9!iKA(w!Dis_naqvs-_!}$k-wRD z!`>fIANQOKaSp*aaIH+tL<7NLRV*P_L7~ElG<}kb)Q@+=zm$%Mo@0N@tif+$2!&-( zO2WM<;Uk4)caZQAuNc$C*#Fi7khxnK!>D~a)M0j20iG&)W}F`AusYJ#$X6gT+gRP^tMQFjm7NwqJm3*etB{Q3VVH)~1#P2=E&ETA1LHy8j-Lk=5ovESXd(N| zjr%uX&qfQxFUbwMyM3}E)xq5_my^!$m_)g|sg=KX^srfXJ~AeUV} zuMzzDL$=23`x`9^W+D4&k9UjB(X#s|)pwpB?d)17egM{3Lz1K9WjRaDp#esDq!sn1l-Nb4IPQA2*Y zX1c5Jt(&Bd@^pj|C}EPdiTvs~h{`MJ5Vx_(jbBBNXr8QXBXtU*vH1PfTYD7yvFI=6 zt*`|bFAH2FE1m}rA_&SP*$`=a^xANq>! z9YM|>O|-+qkm|zZq$FYH8HF^BW06R7GQE^qcMxJWyj0aT!L8K*(>1+k*ccoya3#`P zLoH*Ke_Km! zU#@6+v>pbwARA!yz^=fJ!mJWxyhcPV^uEc?AF3_izwX2bfaO9pAJM)}DC0E^s-Nyb z;U5yvsf0-GN^1M@&6v~07+8=$!7g&aCjgfC_0KA&E=C8|;u5IU#yDz)Ebf&;g&lKw z$sdH4#z*@ud?n<30fKLed&itSJ~<4fLFc)=Ox^xxCffDukyVL-@&1k|-*P&AlOx4I zXqh*ZEcT3ZA!!?4&$n{o^JqyB584={|Y$57(R6L1?_vpWSo;uW_G^hkM0}N{YYLbE0M4 z&dK+|S5k5<%xbC-q%*$t4(t3q&G60xZ%tx*V{t?ZFF6PsVQ|)9a2lFCvQXn~RMfKm z?)^{j7aJ zT+7DR7e%3m!ELoO24nMna0p0u@~*Y&ZV(c3n2TQQ!E&4y`apDM%ygDC&&tvd_xAl? zo|eA!xJm)Rw2-k7F=sQoQw(S+ak|eTFT4{i*A(3SS4Mgq22_*h^j<%j=v%i(=T;vQ zs}A7xflx$}+=XpKUaL6R`m4F=&8!5+o)dXoQWkee7O3`hLup7Sevx;s=f0E){RIhX zBZv?qhfV+sqR)5*B94NpwAC&aJvste>|3I`1XVfJNtg{MGf@q%AO~kii$H) zdRwfOf|TMD?tqzS?W*BS-u{(7D$h%|LVOvp(pDrQs;k&qSX!)q2@xby=FDZQDGwHnxm?JVG9i~TgXPBBbjR>H=VViR}! zn1V?Uf|0^GF~ZT;G3}kvQ1)zN8TxSm&>XdV4oP6xftEo`|e8GV? z$`y&e{6}Eph&M5XKO$1mg;yAaYZY$M$z8f%?{mUW>WU;Lgz!+G<7ZibDItGRA$a%^ zvmiQ$lq+Mxk->od;Vg566z-LO#aE*|U(iPmO?;l`#3MyCh%Q5grz&qG$0_=1i0qKX zB@4({P8ZOwJnoedm0JMosYaQ==XnwFb0N~dnf`6;#OQPR18*{;5aIGQQ_8%gR^JP9o;A1m<_+a zDm0Ag6t@*V-S!cMkK$uCa=$+w_*ZrF6B%p&)8JGhFzobAb4kKcfc~KU9fa%Yhejt! zFGqWeu6P8^s&I}kbJUN6vl&qMN#tR3%SZ3I`ABRgKVB7?cG|CvTv5o%7pQq;}j{8i4+PPce+ZDugal{b#v@uVcnv0)dtm*DJ?azRNX~vXz=I&rN zSkWU_IV5B;sm-2|ATM4L`@<3U-83`A3;JLiyK4Lf(YJ%UvOi@w*=ls#>YSgUtR)$- zvTM&#Nm!9-< zZ%s|N+Q?~%b-~LOBpl6+7GUEO@ zTAMA1j?rn!-#Io9;qN_)B~Ob%#dE*RDwbIfZ}3k$LS^!`jMHspTQt)z>W*T{(bCeaiH|sZ>st{}BsoDO+=%wsg^1Y_hn! zx`tXDTiY~V%^e8~mtGwIv&WNuBV>^D?K9k_@Mo>*=>)(O0E{Hody5$;aUV9IBD41Y z<`we(lxc`y0s+)+a_tq-Qg1PJQSuP9!2#I|usC}su0`>Aqt&$=0su1LA=_aSa+ngG z>bCh+-Um~KC92Fjy?nag=5lB0UDo>@_X*6gYE5lTPwLo309}UN_D>lvJqGt_-hgYk ze_|ETBcbssN=5wbQlipFC3c`ro;f}vYIx>M_{hTMA%FmNub2b@{EkZl8$giO2-PA} z+fw>Euiy0pEdK=5!hkCnbIk|<=l}IYhZ8@q#hr11f|+=F`;2wtH$W!6bXrUX(CRSh zeKSV`DDVydJ|~p(`Y0mA5vY=ut4xO!0T5Z)U<~h8J%H8@O*8>zGF_(hOlI=vY2{pZ z>N;xNYzKsG=ymE7jjf@2EW?mzAhDZDyM#`; zUXHM8s{6ihn#)YdcN~B-VJv-L&JH|Wsa7QyP>>$3{rOjCyVL^vC+oM$e2b~sF0~7l z)AO%xb+j{_{>s6b_vp9Mi7Qu&ovjBQAxPe}FFRDVdeg`TpD?Qi84WIR!w+saOx(s6 zMBV>Hwv#YPHn=^*1kT7U1_nv}FbPQJU%HC0(2#!d{NBHd0I6U^@Ws*QlI`#Bys8`g zYc=l??w3FDXKEfNKIWiYE1*IgEJizPmAYBU7+%W%5)aD$C(OTe_B6g-G!6i?iBl>~ za$uhkaRu*dyuR*ja$$g2VSi|LVm-yypmP* zgk6LPd+PZ`Lr5QX>05k@0b&+j{(==u9lJP2(0}-n?U9r)j zv%Z(Z2&oXqX5JIvSn|nQGiNv{LF*26Y(}ZnVlJc zRj>qZTJ^{Ja&=y}Zs*my?n(3q9^w9e@!MfBVK5vEFn6iiRoY z`4-sg^|Lm?4New+XQnaz#^)~k&_>z8pN(XH3*Cuu4&bZ&2m7SX0xOBFJ#f#Fes#lu zDd8BOW0ry+KY(G-{GfUthU&nx$0@5TAb=-6GxDWY&UWG12IL7l_!>utY3SdD>t=;} z$RXjt@t>QVfnwX)xB;R!?zh|&APj*F?ml5#2ap>Tf{JT*&L#D{p|ZXaWNu9?s=`5V za%+~;{_118LYr4!0oTB3;uC)GP2N~ zRp`kG^us>mlZgwF=i_&oH?bKrn?&mRq840VI!?FA`2rRlJZ>PDL^lRHU**SnTB*TP zGgPb?E|Trz1+1ZLP^JbNmqS~ej{^Kox<&h^{s%ap(JQwVYhW)`lTyQRHQTMp{f_s> zSlxr}&SgJiOZ@&w(UR5Ra*l1k)tmqk-yHi&l&r{lPd|HVzv*=&FlW4fle*FX$Ct6Dk*k=d+A83cd1+_gC+Et7BWCx63Rz&{XPt^PDn`Jtqi)?>AVZz+k90BX5deDRqKTqazW z*0iX{kn!pY@7BrzhdGm>rxR7qq(eu~s{B#OIx?Q0ZT&wEwVa7w`J?qm%;6+q^i}{W zk*w)l3MSD+w;nHkWQRC8z}q!oUCf_>fD@=H6L?kYmX7KVl@*`fQdrSDypgd#_F^99EpGAHSQ18jawcn zUA3EmI%@h>N`z}xzsCpmI5aMY*@Zb8fD{cDWkI?*uG(ZvEWAaC%^y%i<{;9ek1F7t06<_-kHJP{450{p4BM zT!yY8jDx!9V4j)scZ({q^}EZ2DSp|!%UDLOPFMMsQ;AIf>ZU~MiTw%S&~pGn&}t4p-`4HIBa3*mk`hyu zfcKQl<+JRyco(=CGL6mEubfX|`ru;*$PQ0N0KHyov*#N^lQEUJ1u&@_2p8MQ5zi01 zrih<}*3NuO?@c9tb1Z%Ka=a50b$v)ZzNM_=@iLg-M1A+&Uh}`i)>2d^7+4ww;G`yG zrz_No@QS}wOVY7xKk7sTinqF3P~TwJ>U!xs_wAGauU9$>YjU^60`2Gmzbw@@ z7a*m(GyH!Q&Hdjqy~%r)iT8c5>y789Jq$p`#DwEzgPshRPrMH(@wDnHO48FWfFvl( ziAPJMpdbL&e=FWoSTp^(85()3%sZyml$}humw1zU2(*_!FwcZcZ1 z^g}-Rv!%?MCpcG~spQE}QYepYp7(f)bjU9hda0AnF5+ zr`-3=MNg%^6D;$ia3dbl@oI(G<KpAF`3$wzy9IugQ5n%ZjMXc*QYUpb{~Y4iSD86X_yNp(JX~Y-bYX@gJdO zrWvyMV(y7iV*4-h2gLKW#8>lMr{Wzog`Vzxi8+#|uHUGW+LzubqPrR4Im)uT}{RIB#{N(rQt- z5T{Q2GLy1!Pqy&`kA3y$1O)rlnsAtSUW>bkxB;0aGS*<6mu(wOUcyHcH-{St9hT-D z-RbCj&J8opj@ql*9v&#cUIf5i^O)k45C_m}HhiA6(UKt*3ubqT<97Z+_%x(ih)Rqz zKTcb|O7Y>Z$Yr(RUT_|^J2RBTJy~*d%>O_FIEEC@Q^55|^#%bWu=Br(G(m#aND+LN zZtMI#N;TKHfR)qM`@zdDLL!{m-nGtgR+bIT>!Kl~;5-1UGjjpI%5?Q-t68dLP(t)V zgE+{=RTN_#w+F(;>V#(b@0k5C4ZxlAWj3XBpS$MIpQm?;!8RSroL{*(bQf(ekzel* zJKsf$G7nm#v;5-*mhL{_`Mko6Rp!Z}M$RA6!DECcjKUo%s?{aCMbBaemM)salv^FI zP+hxJiS7B12ia)l>92oSMIG^-HqKFxgpGDdH1GF@=B&dUkrC+%jT5pU>orRUf>A-9 zrURu*ocS-pDRl#a{PE^9Ih9obBJj>tHitWIQt;wc3tbsF^R5YuWZ8b%u;QY$u*h7U z+Zb+*e;|gjE~AISN+=;jjC(HymW8E4$iU`!!P%b3g!O?1FJmGrc6eIo zBFGfU&`QUqHGWL^vTgyxD|Z|-aF5^HoTWz5~U5eM5cO? z6a?Oeys>rB}A&9@zELpbG)h|P`8u;R~U^0L7a}m$@3*^ajLudw;{IYZ9Xns^e5ylqT7xr z8|)d1C1Q`pye_#*8{V#&=9_K7fm=08h0jp2)|UFq3{MYd(bC?3n-XY%!(0E?*n} zz`JHxkDqGaviHeig1rm{_aC5~7hxIf#*Q+B(NJFy-gMu_S39{^uKQAscyL9tqh1G( z&GNBa^&SDDECLM%TPiB?t+v>)p7-;yM>;(AS{!OKT-O@Mf%sXmaCbow`AQC4d$vou z){8|J&4zpFA;OM4J(p%LJ*`L~kB2*3s^Lg^N-QHJSmV03x4&sMI7WKmoRvrW5L}LS zYaHKAa+eYbF3~AG(9Ca^Q?}1PXXNe06ONG}c9$Z`OT+}gZ$HdJ`i5LXSBsRdu9G`+OYh7rSeS@X*ca!KYNXd3tAh(d-o z@J*Ype47kTk9)BKuOUSlM&~wjHxKOh-*jbGFS0egvEfanJ*@M%8o;Th&i;*?rBGFU zC7w8W;&?$e^1P3x@q0wXV8~7Yiuy`i(IE*eJtp?&11L!$c`n#kPVc42rxIRxn#HpN zL3rKdgLAxKoFg#zQJwphpEjLCcg>SrZOG;x0m;0zVAs^(QjB!);1nqqAMXdmW;=U1 zmBTF1S?UBbuCi^kQLF zcPUzPsi2IaCwpp|<0q{R31{$g8pwpeGDB2sIIebL>Q5ELwzjF;^yeO6bID_5stYPTJ<^o`;1`YzN#f!pEE{&ODff4(pgQYb86 zTm&&l3=%PAhQF*~9Pz2>3(dJe4rb}^Ukl;KdETM(aPYKJg|g>6!uXv!ZFwLU6r_(f znk*2Wn^$AZ+$^mZ8a<)R^Wrw9U2=|%=rZsTc71%kM^KHm39-m*KiNXK+k*$s8z5%d z-0{Q55I^N}pR4au;-wYkoJ#`z@^}V!RtB~ecA1@sJG}|4l0X1t4r>}`kR+Dyks=-2cep?byU77_deS>Zg zOFyVXDO!w4ya8d;grXJ=fjdaWLOWPwDl`VCk%k;K-eqP-eLVeDdpg%byFeGvAd48w z?w`zXb#+@)cDDc40$?ADeE!7haI6}zR+d^Vf|>cm{mlpUFb8~cmJt7S%gUiZF>`9j>iO$7`;M@S8-r(l z_RL=R8e8SOQ2Qwku3_=?i(};$Dywxd+Z-yx}zP57tcS=nsybE{B8H zFRy@AcLV?WJgiX2V@Z6?6fJz^^X<&lNMQ{J0FV@h^=*NMDJ`yBlDp!zjuHH?-|~pm zC@WZ211S(t+1%DIcLBU#3vLc90h^Va5TJt++rirdE6IJx*Z;Efn}SpeuCR5j_y&J6 zL>)%*NccZ>n7BY6o(-NejyjD>7S2*u3qQ+gkvIUaF3Q1^0+a*RLwW{xVkV<2B%$m>+cl+j~dkr3m#FRZ+zYk%GZ(+dXYdTsNKD% z;X239S$wJHHPBi4WiBsj?CQ`|d>XJ6%g#y4*2G1SiZ8dWF;a7t3n|6*wNz*H;z!gB zD^IQFPl8S4+@qf*Exp>u_K^jqn}}bJem2?T9^lZGFzJOl0?$JMf`Vj|Svdpvet05d zMJO2suUZYTY;dW+>K_|Onj}m+yb8tEZia6kWVr&jBQ}CdL5vq6KfsoLMyx zCYT>A=PPTMJvMSBWRkX48^c5?yBJ^5hSxl8+AJ9=H8j#8E$*D z?r7TJpTihcYVwT7Hq)RR@d(hx$+a-GMuypM{A*ijm?4)UigDe|!_S2Y3SfI=ZZ^$t zq|8HP7lKFuf9CAuTQP^_YiwiodFV66>+HF%4#|Ja(1g=OkYybtsY#hd!@IC2MC+42 zd20{E%dOz`ai=V0!y6}$rFPRb7oOH{JE`cN%e=ObF>ZX!BP&S(W>S{`*hJr--It9E z;QJjEfWhF8<1I&uSxN*=yd_;Gtp$s1bk>u?Sa~M|u8@O<~AZnb?Sbntb z*LYnnIgkVD?;*|(vEmK@74>P;1!~=&Z*gC6d--c52d!rs%`Hpp@AW>{AZTg2`3Z*o z2hdB44!|boJ3aGtRw#_w(xYXgRn=X-vplVZGGMS@Nhc>G%rqCZhgkpc+uvjcX}=L$ z6tO4ebl&J-4U6qy_#(`B6LupjKAOTmceF##ITIM~x_N=;PXZ>(MJzOBua*Ib&M6>Dg%gjpBvq2;i5+L%y=v3z{W>Fb_g+aa4j4}{_(S3&l7Z&R#HjVB z*UU1}HFrs^&7nmpl#ubdX1Tx${-I(JEBOS`GBb+(iUHo{8Z_vd=QYqoV!z_cQ5f(L z&Tytu;f`(vZCH!{!u6pXF+J|Dq34FEDeKLCG0H0g;T%4u6Y$M!K6(cWeSxOJ3sKkn zc|v(Wd@2*EB0jaIz(zYV1sgyfSwww{J|Qjre8N8yB}`S>n`!t7pVdrs_XI{(F|_uC zXBYCYwaa-xklLixy^26)pytJrspzFUlsyp&!Vw(Gk!7)sB_v~QvT(-PFbnDCt0-M} zK3gYL>MIQsmb{7U#42-FFl>_YJktL{D0>3AFmK}-rw55VU)-Bw7-<6h81b&{JPk6E zke7SDK^^+8k2NJfNZFLqE1;BME^5&Dxr5J-2$X-gX`mt>F?;HixKr1qc14%cbxdz) zXcF|%Pa!yiSH~RYQ$C}J;6|CC7K3d-#%s(Mad3v_04TL}?v5$38YK zk+v*vw?u=z93@cx@|*s!ZNH2xP=)NUm6JGq`u&=T#VxhpIq$H1KaP@%EgeFeK7o?5 zfQX1&O?oH;m7M?ZZo~qp8rMDR|d89eO+V0r9gnm7BQt zCj4JCK!<(^Xioojw-mt0SJx&%R7c1VD%9pU9$YfiQjb9#rL&eGkQvrD;(?~QAIx-T zxRO=G^;M*h^+wbr0zjxG8R-ArA~0I9ZQpe1@y$jQy5g&se0^@AE+V!jIuo!p9Wt z%`NJ>HrWlXPcvPI63nfpqyO+9#7-B6QBr7}VFnznqC~l9SK0`zf*u|v;hvQZi#cDL zm)E}b5^nS6#{usoBzub)!1uq+b|F^DqOJRj^|}58EiW&1pV7`*-z|CgBH1I8brh1B z^X)YEqePyEV#IebFbjqEE1j%`0O$)NKvmHI;oZ6v9Z8Ohf7mz>(aew3h-FLVl!Jo~ z%aLK}vy{$Tid=BFuSk9{T^;}AKha)h{h~`2Qhpzg&`Cz&Yj>9CXuN{Y>aK!=f$L%F z%jXhI^_-*^5rWI}7&X2BTskAWtZT1N&CXg2FzR{%Coq}&$Zx@T-k(L0k0p_#BA1)_ z+drN!|5k9E%S0HCCkz)_!LX|uvaHCX0ek}3>qdyCDODrD+Cr$T7NJ|Fd@q`reK9{M z3dvlYf0)_o+4koe&QYZ4gHj7wsLPr^y@g^;cdo@qVYZR^kD3+j)~jjbF5uqiD#M!e z6}Rb6mZiPTXO56_Eg@u?#g~)4FTh>?NAd#c3Z!_s1*d*qA**d1$DnNJ8LkmEj`7I0 z%h|+Wp_Rz@&oitH45_tm-l8A7w$V(`An^}}rDzVEcu3rRdzyEzoDs*CjJCmXHSE1| zddSVwU=Y403K#G--pRCSKSf=S>@k2)Wnx_pT2QMb5$N9|Eo7mdL`g^$aZns*{pvgI zpbXXl7s1!t#D8EF_JI;q>$bK#d4=`d3_r?!>FE!$3DB<-K%RikuV8q-B1{SIHPEL` zbF3bK+=f7X%*mh0)ld~IspZn@%*(6a4?%&aveOw+R`Pz9nm8JLD9j=Lbq86<`sSA@ z@HlsPxrNLyUG?>;el_gyb<2xIQE)G8$AsG1bHpDBho!UVkjEQWlgwNEJhXE2V|Ff= z{@vb7o%EjSBQo9DAvfX)8ghvCj0^0+O>C<8Zc%$F!V$lV>Rxxy$fKXBKoCblm?H6u z#)0PI;}e4+3DiVeE+N;vu!wBy+`PSI#k_D-&c%_;oZ3=qAS^O#z1duyv({4RFZohM zfD6N@;u0!mS1sbS43KG0vdU6S(NE2n4=7T|w3dO8jllvkG*Tu&qVv)2f-gnK^<=;3 znBQ{3<>Tq%=W*ttFtwB0SDo`TZuJ6b9+-=2#rGWYgW+44l>yBFFMFs#=7@2&H3=fW zFR437yj_~Cvb>lfgtquuAPTZNLKZmKR%fEGMCi`6W+Y1GoWO8r23lqzGa=>di}|dU z5feit-;OM`<+5UDfPZLRT*VP?`1iqtBUMl#YFR|cYYl&@y#D@yh%#~UNnAAJp;Pi03b#=5% zOU;sJ))Im5KB6D{#z9M37b^PKJBw$>9w!uWG0G9X>S9K9Cxfrkv9rRJ-j$y$Mw=iC zKVj@I@xk*N4WoKWOgnM8(3j-@NTIzgEey)0v~YE!O>RWJ^DVg(1g9OK$t?oG5rvgD z|3YKhXZ0vg)*MyYvNDv4lg-fb6EZ>&pF~{+>fy(4$5AOi5=Vp7b?)M0(nH(z=QOx3 z#O~gk5`v64f2Kb%FffzGdm^a~(G+>}p&b9QX zE=EJfZ*S+X4e?nLLPzQi41-6kC?yU|`w_BQ|)?Tnp=UlmtH)nGaI#ilk6#2GO!o4(j5^8E;YC<6gvBnut`a zRl;4j>ZiR$+H%u?BG(WKWyrhUD*X!vhO3v8d~bw_(e2Bo5lHo%gCT~Wq(fipy|fnp zooUIJB~^ay9((>~TQ&X^w&5>JMkmxp{Baf-Bxo|)^4ev}=T_e5=See@E(NQ1cU|{q z)9~B&+I9az!5O|8gq`kmHXnIC_gg#=69G#8wIM}P#r7ZkHB?9WxY4d&nNh!;cL{pE zwp(1lk!CC(B-)GPOP^n56d-1LU|x%VQ2g#CKU+oV^e3K+V4oqT+(wk3=*)5b$c5`G zAMt{+N@+e%Jrvc+m!M(^O`T$q3)-?gsSrKkyS=EpQ792gL0O%Jzc`I1GA|XN)nGA^ z>}Nr_yn{Ik_JcU6N5KwEm4FhssT3DKvU?d(Pd?pr%`;AOe96z8gZv^#Iv99moLN3f zWBcz$KHX_?_tK|Q{wz<|mU$uVl5as=J*{K*`{013<8f?i1&Lqsp{u#zMF955np2{P zAjbY*$7zY&JtB!SKsA77T*d$qMM^#GTVjRfP3*=g7dP>OPB#uHLjk!B+{qeVNKq~S z*X=FWPYHwJTuY4^8Q=D7k7#8{%3F~23y%n!X4)Y4#U4oTU(x)s5~>U8ND*k5MpLJZ z8vLsehPEvXcrKvX{?bMS1+@F)WCMG{7Or~(b_s5y`BUIGa?e;U#rCrjVdP$wy2 z!zt3sI7xek3{VjUKIv|P5n+=KQ!k#CCZWKrZ#;>3^h4;;maFjAg0{pU(k*8 z-@}uR1dmj^51%+doAP%595aQ!H=PiU9r2bE3T!+nV z_vru*Z0KT!?lsCTysBypv~J$C?e2-=5cx6rbi-`?PK5e(td8xprdADQ@~_=AB|q_m zFWsY!_JGy@3rQ<45*S&4br(;P_6xTaMLpLf^7ylqz-r;!&01`#2EvN6rH7QF)m>*q z7zzjQdu7B9yvG0tz{IKh9HFUHR2z@!6_AM=Q5YR+5O*!~n7o@q?ctQ;E7K6#M~r!e zIZdHUYchM?{x;J8a7JlnsaDSEgm~-2 zDER8W_wM$4{>NkY{A!Sqx9^5uWpR1Nmwak>CEJHdc>@^jcJlt zXKqkUWlD2|ex_a_t^^l;)H@Nu&tl_Q>uch6U1drH@0k9aeM6(cb9@o5>+$5yk4YVg z)KZd~czp41=wbz1GoV^Z39jBNWyX$f&8w|R_!FI-i6mcy82A@1tb1sFzEW4@5vyO5 z@OqIyqe)i7DK?OyNvcq;m+?PNS^l@@cYo(2UbGC#b>&Kvzfp`E<7v&77DK5(9{6b+ zECtC&Zgcf3vFk9II;Wr4$juG(qq8b!g`Vg~GA%`^rey5N@99yH3)Ao`_#uvuG~mAD zgR@THAH2@3tjULUe=sj}($YGse7!m`)ugG2+#u)XT(8n_9u&ISEVv10(ryOx6aOgz zo*@to_zI(xa0Z>cto>( zxmQw?(Ln>FY*bCI3Z-_m|CW`pN;7bBvftBvN+n<%Evdq`Qnn@^j}7*V`|3aV_i4+W zw-6GCePp;O3?M7{a+wL#l+!|?icHn;l-EIdQM;OhA;40&>hf&Xf^LzNJ82}1ezkN~ z9#eg6m7!(Z8p9;H^x9kA?y_fm7M6=9nVrkJ znqE{1ul;#5Oc^5M0~p#JV@aFblyG-FBQh>u2B&NEIGDq~HX;`QNXT1z6UhVpm)nxaZAONgH~^DMv8#2%zUl#W%>g+!rbnW2udmu z1x#&81{|n(oUNi*89>G_=*BUP!l7LjHE=vbY8b&m9&1U27ky*zPX2*k{HQ6Wyht6= zm;xdQ)@lbELL!dEWTVi(2*_Ebs~Y?!(m5P%%VH|7lEQG^4BMbKFbz8^CYX{e((q>l z*C4tcFGZ7cbQ6=&gJ#QZxCRo#x#v&XvTbLffd{1uC=*(|O>+#1E(xT-yw4sEy1CHC z+Cx*FZ6A;B{Dx1Gh&dU=P-(Y}#bPt#?|sCVZNv@vSeI`ezVT98Md3qz#LAB8_m0`u0|DBD6f z29k|Y42;9D)si*cF1e6;82#TZPAkoDlF3XVkPQFpXwx+xk!TiCS7*n_uAPrF#zGOk zL@rfiHI)okZ=08NU-|LRxW1wr*uoV!44q#y_k19QhzNo?e$R{fC*B$#uq#_L*ye@Q zEJt2-dh;h+nFs4ExCQp|!MdZVEWPO4%#V~R(4Q4w3gN8Dze%Yr>uHf5zTyQ;iIRo*K{um;Ln3XY!<2;f*-~!6SIG8Du;eY9YM!d)s zxR1#C=$(luA8qKWqMK~FS1XaTu$ed~uqBZ7MYs zl_OU$vQIX~9COflFxTQ4I$k=mpm=aph?Uo!k2)G(^6YBLQk z!udJ!XbNzotUssg&%&{dDrcen9G`ov=EK{@i#UkqDym5yd%+!Ydg&uBQbv{SnN^xH z1E{3;7cY3!#-`kE2S=Wa5oL>dvbhYR%nmA-`WfIM_`T5t&U5l_fD zQwDuQmF!b0_ZN?p_1`iz7j^GKCrP)eEX4&USjZe{ImXO9<^>AMVVxW$$4^z5U--Do z1Kba*r6rxtS1x_9(@5D~@mH3~A28LYqu3Px?Vy}Rg1ipuYF1;D$vp5+iFYC&|GTqq zg%5hy8DBxzz^!86C~$!}&VJ$XAAI^)fWyFjh4EoJEsCh|rIk{4`jm|&m&>CiP&6M5 zK!0#NQT^|O>iHpcP>#$z#?<370iuBTIAB-F) zGk@hOj6`JmZiw|7fDZ^t_%#r|Lsx@pImz1~R5#koGzcdhzXqbqxm5{8Yc;PEUl}qW7WZ%Rh(e<{4~uno-JeF2=O@kAbhAiJ zd_CKALWu!;a+Q(7DP}D30>!ByTl8L*^o4Gx|Ne2G)G|uL7b{SmQNhGc?9{{{ew_&t zRl$h6uQ))Hb_;9XoaI$lP2|Wf$k?xB=x-28^O%Q$_@zkhMVVh!@(wTh>n}YP0veq# zDS>fqwUK7q`YJ&-+3r`i$e$ITe|=-q^^i130{a9fO_tIk#Umosqz7Z2pf~~?L#u-_ zd^xqBE2Wn$r4$`5+!YABHySiV#9Mqv8whb4MpUu4tUyZoIFgqv~go-cA zLk%w_5j+lQW8?Yt23tw%(^uD2z9z*6;(tZIRpdrLKe1u&nYNMWQRNPu=UXrL4;J`s{7o^5dQ}F0O^Lp*m@%UpT#!#M!qqOs5-y zkP;Qm&Auu0XP`fRSHKyf6H<{9X(e%?nOAqqkC%f?#t0CI2$SQM8$&ZXs5c%`bTH@M zdIJ%_L*AqplJ|X%`(4&b{SXZc_9)ByJVNj&fj1}(X~#k4E@A#Dv0RKwRHGWQ&(@ab zvXoHxQF(ha0$TC!OZ-Va-vtx2NTaWU+!k|%aUyeHdEP89t8m9BhlrJq?`V<#5qzi~ zt1+rZfl@HUs$gH8j*oE^JP=keD)AtcPC66+upahF(@q%i1diy1z z?R5gYDUDv)`QAW{tYI0Dp@Bc6E4X0d7f^)Opw@ZHTPElAlh(z(C5$Vk!p)71;xr+l z{zt0qizWRpcJjFAzS0s))*=D(~6+0pfEQPA#kMG9LgtKYR>%q8`>vt=v`kY3YB%=P{ca!{_ zc-%x+nB~T>F151>)V3(p9o4OWyYmqAhdDno!izFJ=7UA;|JMSG?- zLMq(zmEbMrRNOpdqY?X7i{be}130@0$UVuCXTSTf8p_KYursAY;J zC&+eTKHYEpA2!t5Bth@>lV}3`VlOMRwl7SOgyT*6g1)3zp5ti zlX5I;za00NG4V8Mug~5*3Pw4mcR-P5N#)Y^nlsK@D3v5Kb?#fe2R=of1oBCop8A~+ z*c$Cfe>c1Ap2aUP>Ts&rld#7HC5Te^ZbsR4<&q{pX>#Ss?UfH8)U$wbNuJu)3oZ z$Iw97CxJWJ0&V;d(f@Li_-h0DFFmf< zX-&|4rDMz~T)>8yVPv%OA7iM&kUJsWJqau6`OImFsaN>mZb_y!lQn7sp*!jE@cgKk@5@0r8u+-=Z)*UG5~B7m9P^SPgue?9XAO4y0==sl<)tSn!3wy5%_Tsjy( zK1qUOPVN#9$d}F=v@1LqH2%haeg~84|Dk!tFC>lsr*#0atKC>fhqHAFWkL}ez_#cAC#U~tqp1sEDubellSW+ zv(e@1Wt;vVAbyflk6nTmaI`IB2=94i$y9n(_!kd_slr1G67%xBBi9 zd&*nd*!1)d49!LprsA7HysJ(}PqgafQi`X43HP|_^`abWdZ2H1;4s^vH92kf4&}%v z#VwjWmL)QSWEMiHhqVGJ?UjgkqZzuB4L{;C%!-8vM=mp~)9uDp#@U!Ki2?k}rxIFp zCaR4=npjY0<5)D052u71F;Csfa~6vn)<0~Z_!N;fV5<}A(qm}L!j z8>MJKUADn&KO{&YVfvNBPt;c5ET=LzaB%;l!S&Qe+q|qWLyM|WhU+sV{Tc7T<->Ig zRhKH=*KL*gZ|L=zF%2ODv5B=0R0h~y($1NTSl(pLvZTbxsz=!KQTs0H@-XR`(ui?;nXs-+VY&?Z53Mqf8A@!0?4GjKyd4mun<^_-I zeX(LgURmjNnLv4ARW0kN@I^d{+NDtBE|1xhuSFdr!#f-bjB^R)YI0LBhINU<)VvN1 zh>QWAaZdk}&((y{fz^9z@Gt|LtfT}t0+BA zvZN`mpr#=l#CM(SD2HFno6U%XB_kXPvs?Y~nby`lc(`7BiB1Eo)+J_g4ta^&YL1cx zn#AhYB{Z`)xztJ=;a>s+SMDA!{NER1u&&JR+J4tb#wbY)vL}L1%ap=qM*-LLMDqTq z7WWchL>*T^fe+P;q z6In~&25l9Uoo!q)U=QZob-T#w(I%7oVpCAl#sM3nQ5W^YQSgI#_Z=dE**23dbbwN9 z*t$%9U$%0+>LANJ$ZFut?wG`CQKGjV5qu*_bfxc)NkNF{32m~4IQ5Wpg6ui)&-x~E z*LB99r+`i4xpr{`vKjuPs~VddrLf^-BGyt07FMCvO5B(to4U)Ly1kRf?pG?u9qX*k z6r1H>s!9)tsD}yGj999=q=Kv!GOyUZ%=mb7C2BXC z=aLznOgk&sHHw}-11mrF?yu4n|7<;f9!;Me?J40?o+Hh z(Cm8%O7&kSlax?{z0et$Z9zGqS$272m_)3F9W;OeQr>ti6O*(0I?}_LlS7?b~z|eEQGk?>69bc_k(0>R5$FE=PMSmM*-XG%*meot& zMx-^xbMI~Ls}-P`)^nnu0-Svk+FrW=Jv1blY`L9G9|p6%rz>|n~m?Z(d86r7B+M@N)6u7DH^sd zKGN%VTtredM#MA~^+*6>!B0pF3$`jIC7-*p-y&Jf-vA{Wetu53ZWU)+-h1V7rXQeT z?c5ib9Htv@VbIOo74a$CT{y=+uS#uVJ;jqZn_RzO?V8aQJIBO}e*03FMovc;+^x`W zD^x<9ZWSJ$jDi-oRgjPy1sBZ*fj$(OuYOauJx?m9qe<-(nfoYA0oaR6WJ9_tr!pN# zlPKT0x(`S;-+cdVkh4V#ohlUCyn;I{m6Dx$^)}~CC$8ttfOZZnDsf#n^aO2s#PY+n zQ1(1dLDV*L`p;|b%JqORn>#+(v6p*#bRlbYsQQ5=r9>@$d%52G}YUTG3Ao>)7Fhq zg$+RD=P69@kX73wdJ#zdYw|Ex(+JY#J7nxax=n6Ys1SR=Lf^25p5V9yM%rFJ=$mTKrBodJsFQz%18UWx-Q$@xj5y&EgZdAeSseyO}tN)FHL2}`!w~TnCoY8#!fjeg;U#w{^ zYX9Q&Qq;w5xHT#(M)zjYwKi>dddwJG{cmhw(ytZAO;oI|QmmF~wAvOiu22&!qM|;9 z5!0csB|UgpfnxTY3MwX={J8_=i_M4R@4S|9hXjoCzFzxMM1`l^I@D5`?n=qGEc5nr zviHd3OZ+i03FiP7dGV0_I7J2j$to7Sja|Oa>}}(ci<@#a7W+=uscsSq)d;s}%G@<( zC#ei1P&_@fY!poS8V}2hNWa=RxIdi@VKU-^4QQ{QWFjVlCYkWSZ~l9Wh1a6c-gn50 zm5+t9Wxr2;lU}jU%zu;@eJ$t3x^l%!T2ZzZr{{QTDJe#m^&8b1t}u#6T*i4-+hbp2 zqm)0k`w`!Oq@slUlX*EM98Vj~kJ~(mZJrqNsy}6QyeApO10h7faG@gryd+3|o&TNpdM2 z7OFp3fcM!GU=HQT&&^R@RPl)hN3N;nrzC$C(siRU%o>G?ef!}8rZvjtHO{wH(v)#Wp}K==h zv1mFP=pkUZRwn}GqOosIVqClWMbu{VZwDBotnjElU!$Vc9=2saj+*@Yg7-R@4}wgN zpwkG9X_kVSrk#9ARQ$-|XS82+?t}S9$IvT^M3=c$53lzU-!L`wNS}Wn8L(2;I?dm| z_EI`nG5@(nqYQ#Fep4y)(Vx54@8{%ZOx`ag@$(fzenMGYEhbxe!-9ipw*3i6R4KUB zB;p7AVRYc!uRb&IlLI5U%@1!IZ|L8p)DUMSCUomDdh(le(8Kb>p!tvr78E)~56`UI zb;Y?i;F8mmRrQDbK6dO@>aOY;nfgN+$&oG7tcXK;7Pjyb+sMBm?XxB=;I6KheQrkF zy)ZA(+cWu+MJ(~P8(X3xLD>!}o)qsf7Gb})kx)V9i=8Ahnjhqi=p}$~$5Y5}l=w@= zGtDKiL9b+*rThPIH73qr*hW|~K1wO7^yAs02@_O^<0+Mn24~Ntl}`pM$$nDpC!zZ} z(M{MEKgE!Q{zI8?l@I6e zYA=aXyK}w)BJ^=jc#jmzodP^qD^EIB>lWwbaMRrr0{rW*wbkmWY8w8F@R7VJNl80b zY}N6FWEO-S6u+{5J_{GcXfjG(wUgM!z6*Bau|`eVks@u%Vof>r=6BBcSM&?j0 zf3^jC7|a+NHmGzF=9x__D3{R$=0XW!Wet6L@|qIp3D6qZuquZwKhD`0M@%B~3gUu3 z57j-Tmco<>O|z54TmTRf(YAqQT^K%j&a9k*jXiIYg0=b!<;Pop!tsG$R3JAQGSX4C z{BN&1F$Km8Q&RPGU(O0pz5<}HIpkGtPa)j72Qu>BYgVH>uEh3at2--wL8HIjU%6vE zQ5Y~|IZ6!#1SOO&V`QAK$2t#?^!l(1N>IKOB`^Hlxb#2(J;GCNEUj?k!!!WfPufsme|E5qLU0Xs*y%-t zPMEFa30}v^vHzSc4!>LgX-raNuTa4nrb^>p)KIF-At`?9WD(!00sW)_z@w6zFy@zk z4E`RYf<$eK(*kaoAgo(F{67{KmeKQauNEuA^FmZ37PKDoPYe{}BRRDzn(>)k(9~UO z6g(TS0i+|)c0cT-zDfyLI!rwVdr$KjoAte1rR5q;o7Qu*V#qz=8Tb+s4Tc02B%u%| zeO`JN-}WSy9pCkVP~7ijf%hZ>D5sF(tE)!UrU$f5xaD|Wt9yzh8vnut5Y{S|p7(`1 zePuJ3)K{9&J_=u_Z2nTf-->pt6wR_StMf<|L2-;;0yr+~4YC?N@5EIwctPD~x`Zf- z?Y$Jn7Qpxho0A>m*CbLr8?g=A0`Nm0!3n_h^O%~_{fLnd`l6*<$D;GG1xh}Cewu!t zUF9%H9na{CV%!vtraHaWoCQu2Q8Zgm2KJChrVAeiFuMp&KCXh^@_A# z$1Z$_o=dv4C(+ir_a#}xlk`aW191V*Lh1c?>Kt$zVElUr_qe=a=$d_S$@3oACEJn% zCnb!J#`9Cb;~Zd03#X>`M)G!MdIey>OCXbfBsNOI4^Wpdi&~Q_uzizau}FZI6ICjx z8(psO68qrh^xKvc{C2~c6ih`s#2In~QWM=>8FiiaLI?)(lLf3KDAXV2pO(SwDc??= zwU(ZfJ@#Ebw1fD#S@rNHs?71u3 zIDO%LKhu>m1SOfRq7w2HWMFp1g8Bs{r6;@>2C6$ek^T_6VN$ueQ|LX4GK@&x4 z>5Q!)oJ9e|PmLt}sVMan7LSZhFhd5-zsUFBeD2H`)d@2$rCgXlx_%eZ{mnyg{PM!hXWqoQ70r4@yF>a`N+e$W2kKp#-#Q~2kk&I%U%w%e`e z3wqG8j5PS%rG63un}AEEDckop8#q6eg^6_kG$GoutnBH<@&N)5 zO`H^Aym=OX#Gu1USYT-(qVCtF6?JWZsfhTd$GD1^C9EkL9|{)=2etHKwTj&2iRm=T zH`=S;`Z|^<_(*yu*tpZpwi<-%s)lF25*|{G&qsHX7`}C(Y;@IgXw)(-)(X|5`5{AY zeNEoijjwPxBZIZiQc|@3p7EyP9U1Vtp7AGb*B_@NiIO@tndjxmJ;@eDYQyDw)*G(C z7&LiF_dR~Oco}?|_@rC;+syb|xAxqb7B+1o9w>Ik6Z@72|Lt9cc*a*eLtgW@-#fT~ z8o3Qs-?*h`s$c0x?r>WdKfXUNDzk3b|cUJ>6u8Kyjp?!oa3fQugq=Qc$Nk$LI}}fEo@ZOVTYIQeIQZRl0TY5dQIn&vMQ~6omIN?KN@*UwFV#3?p6}z7A$Rp?8b5Kf zMIw`pn*~%3+?HvWrL+E(D60;L2KE?FzNwPtD`2_)}HHfvrcYzh0<5y3r`3=%7y zZbY{tKhGWVIE*75P1eHwEE{Ky=|kl!{;QmvH#RESs6-WE5Ht9dn#*9>V>GW2FDPM+ zsF1ju_d9DxI^D!Pf;?T~8o0hy>RuDD9e3f{Q5Ux`DuXyPh`y+bewMD8D^w23M$+^< ziSEbCWSj^p&kJ2E*GY!%jNvhl@;2cbg#0q>ZNY9sTiC6j7G#QM^j=Y7d&^E-BaMB~ zr95}HSHPJPVw7m1{Oh9<5LX-r@YUa46Yv(1gY;Ot7BHqv1`tbCIf2i+SfA98w>xahyK>z)Yq%bx$e2-6`%67?LN+fj*#L(sfB2HD)bGBnk)lA* zc6eO{TxYr-iUPS$s(0e^D4DWwWM_&h0U2;txK2t<@wAO%%ueU|3y#_S?VxAAyyUO( zq;scSC$cnRe;*wFOV~w@4^^TT@7_TIFF9eBYkys@OsryNBqj2B@)C)*dxh%=EB=AF|1qj;pHBi({8LY|1R#`|}y-84}MUI8sK6*@9o z{OIB_U8^H()2$ypp5v&s_PXIE*yDYH_arPy)%|5k%cL`X@0p-9k;~Nln#$uzR->RJ!lqG0=Bk$6S62dfc5(X=!3SeHKuTOG{7V#doczN6#|TC6Y;C z8CyvyImx1ImCVWGk{sFlL zp2VSDpfmz~3HWoK`yE|k)02Wm)1S?lS~>HzFW%$u7KV4>)RAF_1b*0cPs6mR)GDu}`AXrH!7aCId4{Q*_UJVVwSS-g;k`5A%DQ-TA-& z4M$UFX~^^2;(r)%gW-Dd7fz2FJ_y*C34~fk=LC*xX)PMbv+`2LZKP!Xp-vo1Qtk^t z7nuK7ZBeQf_cEu&p~3{;5^eox`{tCgQsZ8xzZthF|FRMxz36&hq+hWSv8W2L7cwe3 z+~^N59a;DGzTwg<6};!zjy-8sI$r?us;X**ijHou)mVOqb*XN3vnRjx$3i%(z^NjS zyy!0^XJ??S)4yy}#&` zK&)&U4w@c?^y&1s3jH1*oZ?sBlcaLG5azqiNX9c)p4rD(OHjzG$&l7>va(%oPHyVN zober{Wp$Juu8ggXWF6eE^j^Xl41@@5=rPA9OqDk>ivOLwYwT>~U2I;*3U%7AJcH9Q zix3Nr7{t7UJKQgzECIU0%@}>jCN&$l{YXia1s{`KVW{7Q*tthWKm+3QX9aSoH%gYL zpQwq%FZt^|+!#^dZ8V-M^zUVw4qin08_>#(11NTvUOCVEM2fJuciiILD`Lyx+1nn^ z$~Clsnq|U3SN|u3O&`iE*4f&yM_CQFX}*^YV}XoY7Y=FlbArq;p3S0l9xZ0cv7UpO zw4d|Um#5C%-inn3#I8~7&iWJnMMvaS zem+?bam$qQQd#+-s+MarMDsi$q80kL7ROygp3e0J9Rk_3@uHg~%A-r(OK%ttUv1Ew z9On2CFbzMgT87Pd5j!ickn@~*2so4ez6^D0KKlW7;RIbz@!UO(&7TK}teglz3j#%p zY&;NT9S6(5<@93mH2Si}rA?ciHQ$O7n^(Rka@PI?ThXsq}Ylq&gvB<&wx3tYcj!F_-b-_+s4{)ONW54;JV;t3`-+9M3 z!mGz=S%RA*?Y+(BhyJRcE#+E&m)|oOD=sJLj!&d?3^q3b4uY%R>lRh-FDGZ=q?C|w z$dz^CZXC+zbvB|t;DvguK@yv;+%@E3L{mln$e>njY!8Qd@?mI^{z{SWF8y^20awPq zAY~lqQ1@>UKaFie;$68{@NM}U7akXAg;MLd)mY0EB3-fj(+)aJV0Y%%PbSw-%-2r_ zH}3h4-4&%};?ew4{{jXDoel-G{FVUvZH#&)-2%7Nl%i(Q4EJ!=d z-6X*@)fwv!@oFJmrUqn`YDfKumuyuOCj!ZTt-Nl?*RXl7)TE3oN`sYkY2Bd<-VoZP zRk($#_7}d?AHa8&rJEI3yf||1OcGWGM1 zJLP*9YS*}ezzRpnuo28!GIqyPkHYAqF7_jH*-D!4TCAN!hwR-#t_g{)Ha>#(9h%AA zsqQ>q`KOZpzZQTZds(9wJ%~VhA;*2qF>&k8?f@Qn;P1H=TvZkjUd_;hZCu;!U4;f} zb@|;eqg&~ux7aXK)O*{EW$b~;m2JUo{B#yAN?&Dcny|8+fVgpbeGfnL=HB4yy<4VP zL}#CLNkds&LR~~okoUY7`3nL$q&P0oHaWlx!qSne_z@z%h*z$_)Nguijpr{&YaG;7 zWt|BeQ9@tNV|lxp6&6D3Z%?jq{aAmcWWkH?^ujpMWPC-Cn(hsO1ixt(vyGUC+JDn1 zUj1R}&j7M_R15U^u~m19Bf2XzprdtVGt;2>e*#8PMV)J8WVB@ISx+gQ2uK10RqZOm zj1cNY@VH}PfwHNyW}a?au$3TFd!IfJD5KX(nXU$Rt@5;!mc_UzWbO-mcSot4z_BOX zm3d#um{oA~5sy9;yXNDGeYXuGi&Z5|ax;Ki&TwnB5_t)pXVY9r^x!1IJC&bcx`!C= zp76=o;-ksiTh57fJdj_k;w^%w#+M6|`bF`ZK%mil1l<|vgVioo^=W1H9yvlP*r-s| zRVKAr8&9Fnh@L5eV>#wsJ@pxaxqq%K2xeF_6nrfq=TDoPJoZ4k7Q@ZUvj4WEP*vPi zDbAR~R92=r_KRf=+2?nE6D*{yw>hMm*U^rxSQ~nr$eJewgP7PRPb;02Zq{TgYaF|l zZTy75|70t}n;?uVLy7V~0QD4}`g~ZlzZ3XY3vnLrP{B+0ysH*NW%>ZRSw|H1R?8u* z32>C<+u2Dj4t zYgfMPFw!{$_uXk1)KLFvHJ3M7vvuf{|NZ@D&bgVjVE%BzP?P@@pVppLH~BpA${E=;}h|-606=z2N?BNzutgi_r6YCv!HHb7X{`FEhAvrsE{HowAn&ynjVQ{zUiY z1xxt>(Xe)iIgM8J`jNqW@IdTZ-l$y7a9PMSLtfouqCL_@VbE7j*HbDWwz?GVb8913 zPdZrWOT-(@T7pgqA=P+g)9_69NKPP6t&7(_Gd4_)Us)=sA?$cR)@9F>cy zyz;+rVkVUyMeMK<8O-fm@~SihaYN1X;)t>7KfT=kjt`WKJ#xaMh(UwVwEVN@I>v*% zqYgVdW?;I|z;ToUc+c2-gY+eHs3SaMb9I zQe5MMC#!kwR*gaKStC%YrNEuv`5C2~uc&?giD(dx-L=c~wL65KH85V-%)^WmCSnO? zi3;bAldaKcCy5&)zbn^tX6cx~rVESZ3ykdG zV`2D`Xe=xD1moQVY2RT73D{hyxcL^V-Niw`IOOO=X!MQHXnxu_#{$M z=e$I_gnCS!XO&yg&|Gg3@OB9vK$|en@U+|`bMGd6MYfva!ODB6kY~V6%9wHh^T<0T zH3~MFwf#yentPP82thZKmL)_vGeaJ zoo=D#vbqnqg;2LaB7bBBzv?hOxg*v-nUcaZy9*SBVk45l35?1b(b9W2QSd)MdZ7bT z<@yOhFUZqtzbuCH>zO~~_%hIM_?{@))8z)?qRaZnyb1C%2VJjM!>R{BZq1Avlj%+p zITTOS+tdrm`jO+=thas`QykCsU~@) zYph}>J2N6vZ<7>-Lwty?@bKeC!DJQ&j7nlr-?N1_btaxTZ$RVdPgJ=PfxOf7_{50T zA?0VG+=#TSq+&^K-pwx=(J%5(CXkTYAFJ!h-a8UE8lUB#9JEXmrByy~?e8-xYvbRo z!WjS;6gQ4FJUuq)2ODo`x;kE7+6-D0d1K#uF^l`0`rU+KOl1f@Ott%ur?k!FEVAxS z2I(0|k{-$$L|q%1S~h=RRObR-)*sYw3(t9Bwp4y#IVilxSO*w9P|ER&L902#!4z1~jmQ9N>t zC_E^&`zxk(!ia$4G}&q9)gT>SV>0dLd^cxa2lu9Xo6X4X%7i5wgf?4mG=t%|%&Dhv zdnE-=MIza@!3)zsi(b6aPp$}ek;&H#u_H$C%dd8SXS@@gcnAN5b>hF})qEq;j^0V@ zQsmj*#cj2teT%ua3nsj1>)Q15_^g2LRjX4uWf=?*|H4!k`fqj2d;BJaOn!fS%3#Qk z2|5GPPpB(1^wxzRPnbd|! z9D(jPJq3L~@{5&4^yL&=u2u~Qy-+JWZ1)R8l1HI%Db{T1h74oQc+WJ#XS6~spymX@ z-CTE@SuS`X^xQn?VjeGIS3=J88Xt!TfsLK@V+!ru`tLQH$oMEKl3$=yqONVB^3y+y zmgJXJf%oEt#B1!0UkiNpcOH<<^Xo@urS54JqFsdY#u4Kh$)n{?{kbj(qB-ZOjM?T* zEsYjaO;4>EJow3pjICU+W8+gCq=X=9AWS#Crk>f5BD8kD=A`{XH{){1Kd7g+fbJ)f zR3g&IMfSpVJVA^hV#VPZR-JUD6OAw}r`#iA@z)9YJ%S)aoJB6rGfOz!qrqa(0illM zf0T4Ba3;a-*nT&vE9HJG8gasUO(Pj|F1_1UCUR4Q)~1_%mxFzXr1I5x|NHd4u5jMz z?yiqYF7lJhuFq~>BN2D%VlN&a0?bZi{%s^rV3|tGM<36bWm_hg&F^QLy3;1d)##tH zUG<1O&OA0(i(SMR<~^FwB3k>mAeKFH#)=~r);`lUuN$ptn^qHyM_> zL%-EGqm_P_T5jaJ!gh+)UD5p3#B6zG`sq`)%(hML?f zyg2GTsQQIO4PDZ2r@xG5xUOyB$+UEAB3Gj##dxK<3QpW$O|2;etskgJn2C3GOah08 z5$$HPW{XbQa_&qKfs7$(Hzc3mY8CbvgyWdCgiJ^OM1;MFOiq6?eJSR?0HZ#vkdXAl zAKh1KGh6Bp@$~^m`IWBU31W8eC8y0aThwuKIl%eH-Fxg~dvRU@NX&qXt%_|t! zJnHjt4J=IZL8JVgpi!`<*zzr`_suNrBr{C=@TlGF4=sCyLo1VY8a!&dyqk72y>onp zfwBaqmHXdfuaYk}81x;Ag!UgcFu3eG*ITyFo5yoxyvW8L8Q_xifPb#EpIybN#{A8Y z^>{>wy+gC61xNFTmnJQlCg~a5{GdD<(KH?I^u zPr^U3^PN7{5KE4|hDFSl!SMyf16{^-y9Y(>&AF4EiWD*i7Sk#Jwnz@g&8zY=t%C&0 z9xbIe58_i8@DZSzb3ELk5TN~UE>(@tO9c`q*`u9laF>NQ3n+NO40@3fMXck1L(0a~#)twjHka-=0v|}L+SFMKSl>w|S+B69 zI+J@Y8mqp_8w%iZ_#pwWHgqn~Q|AUK%H;M_*fa~YQq**d)~|m?6&sZx;jE>GR4M$MFgHSe zJM_%5fWb1y19blyG=q<&qx`QM?}f^~rV!T? zeS_eM?LhXts5BaXc}M4H*IX;?PArlOGVDidZTwi@onE|yhPf7yw1l3$U@MV5n@y_2 zMVnMs$JX((7k+jKGDF=Gd)iAM7+ev5JQ{-%_#D2H|*!7^z#&&hg`hT_Rz8p*$K3E zDV5JMi5MIo3(#Rr5SvqpwB?KCf(-JQ5T0=((c<;Z4$bQ!V3_rxQ-hGP*Pme!=5{r5 z#Xk&3cR8r6x4h&JNA9l-2=Tw~MY0Ou8uQuK<$o_NnT2+tiGV;&pSE>q#?2D3?2{$> z2n%Z@tF!tOBFr!Z@U0p?P`)jA8oKudHjQCgaQluvxycjdNdU82TJI$m@d6h zXH7yswE+Lz_Wn_LD%O5&6plH)nl+7hg(VTzJCOy(mYk#=Ql$mu-FpqK&p-4QE_*3R zgf>aL+);Ppi@(++@nVy0;JmW^mhy$MvJIxe;)yPHhM;3;p)HAul3%7X(IY0QjzA^fZ1#yfL97C0Nx_>OgFt+vyjzw?)FmHiH_C0WeeaFPlQWb>2j z*p~Y8YCpW#oA=!bG@*rY?V_iWzv^V*&?rLuIjIB^YSE*xal4S>}+AGt~=*EvFJctOH zjc>%8vA!+ncNBYI>+`(V_p=wYuA>SbkBYP$wo5jdu{uG>PVoVc75J4Xd^w?6ZQ1x= zm9R4r+Nfo$sRC=LOm)ka`ULVziA5z@k)#&?1!fq8%J0eT$(*dpS zJS1m|s+D|lCq~(X0rNN5?jW~8AR|}$)d_c~wFx6-ny<$=;v0c^4tkNjEZf{scxE@^ z{>O0%kbPU!fDIs}X5vvnFj@?4SSxUQ57C!(R7OZlEN=IB3sRer;$rK=h_ z(+_FH1?RSnRs$}Nm&0Oer;+ilX}$)sT2yBhyKg*`EF)_h7$oK2t*a3&!hCyZZRQC` zM>QfAb?T?Q3cHb5vO`E4bw#QRa*k}EC!HI34xPBOBTvNB!*a47UcpJ$pG7iiN9S?8 zFkQZ1*5e?ozDCr<-wH|+I0;xk@oSmPx5>XO(6k3J@GO}8jMQrQG`)r%+KLxpWCAyR zyV^e}Y02S+HCW9IJ+6=TZ7s&^kGB6Mew*KL1}j8itCJu&R-skPyh2;-(&39t48*nn zOl|@*ZfK32C036iH_K2p!l7ni4!)SYLe zaUYx?vHX_oc4V4Jccfl(-k!?ZBAYVB-YEa>lUn==xbKpegV}?9xl6Nca=%J)UF$9< zyf~&-2zLKs_o*O|n)l&1BnrgEW-1;3ncFxNb&QBQ=4?$Hgz@jX3w>^)FiQs8KD>M} z|J4@8-M6I4lEXxAdv&XT_%x<@j*`>HAS$>Z(TN|VIG7C z83-RK`z$u~nm8}1x#u5jN8ePy?eHcgns9?p7i7a)p+LjF#WctJqcmPzjG_Gt*j!Lx z^oq(9;u8W9REA{zlWWL|zBYlbVBp`iOfJ5kF1X#%3_4OE@yA#60d^kbCb(k{UbfQx z{zj)`q*Fy66n3h{_pE(`e&gcEF5We&9 zgiI)er<9Jt4!sk>s8BEBp%JBHj_##qlH9S{=B4O17O2ZRpltMbLcx@3;l}avHLgI` zay*32rImg#dgnl`D>u%&lowf;1LgV>jTctyMi3P*xb$Uq%K+|_?3=SMu9E1ATt@kK zXE$gClmKfRIy$m5Xcp*asKGJT#+lAa;%@Y*UUW#NE0@YBp`O9C;oipTTOp-6Thk6`$wDQ#F&^v*X&)YsLVvVh> zXh{ejG<5YlFkMTg(H+@7|1`$x`zg6pblA4xyC3IK+Em$R8m8206f5AY_bNY8>tV7$ z{DCNg{5Nl{(q9#*sS_z2Dg!sIR#y7%dOe`{e0UNP>wBYRA?;=P5|j(F#Cu(6s}PZz z;^fU+;X7A#I#{$$Q6YK)KE%R@q#S4SvUOY$uqhl-;-bxZ-77fd?Tlz~#7f&)cTGkSJKSz6*O|aA!JBx992>rP!#j^N~W-@Xhyd(B!46ZA3`9Pc0 z{ohNPWu?o=ee6#=D@Mzyf^U5vWwXMd?D*$Ye6L>YyH*m&bLBZXhP8ZQ1GwdNqX9n@ zxn!D(M;~MeF%v!&O}8w>YjUy5K7;PsG1eu~wdQ`tN`fUyY^_yyG5udp-v3dV^eH-x zRhQ?Qizha=po2juhr*Hd{hHkYzAw!tAe$ohb5` zXeTI?#Hi$Pyy-t0TPks0|FlX!vs3xPHc?+nQyV>|2_A;gtcHv1JdrLkLTV7vcIft; z(G&Gv$mcta^naYw4k?2LD8l;-9YrN6%J11iE~JRDH6iLz8K%9S=M3D&zNkh#6!I+- z)@|H0dXqJhyESZ>IZr!A?xuD5ZGTt?_>#0jdAS{ybjl`jk1P`+evXfIvbfxr1Za40 zDE{NQF~=)K8DpZ5k(2wcnZnL2=t+>hkt1-Oqs_Qf!z&>!@ODJ8$~V0aMgiDjvmcwj zjQV&%H1&1#HGM`D8TVo;xjT!l)?cfnmotS{(EFXu)%2-p-|9sxbQwnW>%s%N&3P4M zb=S^ihIArh(U&pljpUB(J8sRer{3Hltvp-M*K96#2y%K^_N58|YX^wKq}>gu<5?=} zr~UU73~$!?+ftpqI}43eo)H9gDoKjb=w(Rv+%~f|0*`q~r^JW4dQ_-od@Qk}@&Rjb zF#MKXwF&=l+oXu05mk- zD`jKalBSRghlx5~FB5%KgxfCUg`QcM<)H4O9uT!K#rhD?nu==ORw{7gg|=a7tCTBt z6A&Zr`4txG!;H0E%A=P(%t5)>lVv`OXrF~~oL|ppmsQA!#`>?VJov$ANu!g@Yjm59 z>sJlOzg7dhVH)61{LA!S1Bsxz@5j+~RyPURVWWkL?SFG)g7Y-$J zSLmko(V?k~$n}Df7W&MTW>o(C;k`+gwcX{VGRvfW0B-)s|N9g=owPW~M z$jS8vq@5k({G9Ex&@!AXd8~tgU{p}?8SW%Bn^9-hY|~sTBC$(_s$-E*shrK^)qa@wKF%U^X>y@j+&To9jM1h##q)TJ_cCh#=6>fmPe#8it)Q= zo~xA_nFsl+s-p6GvgpPWx?@{@T}%FRT8LzCaz$d`X=I=w_R8Ii%)zW?Xe_(^r0f5| z); z^w!OUbNtW`EDc4zuCh2vd4CHvj7&~5dL5H;78F>`0+S^>EENklnH1^zN23R!JoDVr zW+?WjD-+Ybf9ASHaBX7@sfAZu?*3F2val6MQb8FY5rzvdeN#%?9Lg`rKXTq zH3`wwsrnUCOy%EsQm)x~*5v-FzR|*YDOn-diaqW_?5Hj3}AUt#xG-p|Yon_+CVTp*4nqZo--!RgEr2JH~X)2*B4VrGnB;#1II z%l(W?f|U22!c-3`Zw=Q%<|R9LY>|+A?s?z%aZn+HY)MJoFK~+63~Ky?1NGOfN!(En zoS!(ayKcj3Ojh3&zwrr8<@Luc9CjA}gBbmX<%f3uew(*a!cd>CI<+RGyx->|b;q*JZ zzK%}(Z6(Cqj_BtwV&VAE`v)C%c$AzV;5>K3c0gG!ta{2LG?*{9SyQUJ9Bcynl9m0K zCaX`2wIA}E^Kkh%RWfrk2d}OQDI{t29PO)1)o-Mm%AW_6-^g-2N;?ajZqYt18*iPB0OoKb2? zL<^uub}lnV?Oc)!mYSUetq$ZmP-~Rg!ukm5>`U6+Q5#xV3vS@g72denB$B+P5eA(wCR^ObYR8S)iI5p;CTa9Z zo}#JZTNSpyrs$bSEdwouOo5!r`WUSAhA<8Jw+EGWlxFwXEuE`5vc_sf;{u&x4M%t_R zEq?0PQ8^_Afb3|p_Ul0=_FG4ljTC|yl387?_h!?O7r%4!Sr%cfdhTT^8ZT~CwcI$> zTUid9uOvbX9xsH9!**z?;&fn5`P+~#s`?Wgj?Tc$_O8IqEVsBtrQ5rg|a8`f71KJQts=$e&;=r zeRJuBMum_mm=d9=kCp189e(_4*`C?J3K!n#eTDe|L_w$a-&Q5WP*zeqC3W?MyaG~E zVN>Jc(o#ziadGC_R`z!}az$nN`T3uf?W!2+>g!!9(W08FTFZ{#xN2>*onRL(>ny1j z>ud&hdAMGEbDHcGtq0QyFqCa(%e#M)av6Ba$e8DWRa}%aK-A zo}5_0SXz42IKSNkoG`23 zUvJH>tfGW=-GV)sdUG_aQlX>0TB=%!@L^Nd!qQUmzh5e9YPeUQ-LZ@%8Z_7p=x>Re zIqb^uNxIW*iiNpp8=Ss_u|p*#R9r5{jf@UU)yBg^|GmZKe5e%7lwVO1$?3SuB6t9; zp!0z-k+eYF+S)q!Xq-Dr0G;l_?YtliAWW^Pe^&*SONb+P;J==}i+H0GK zwa3*MciK+28mDoRZf4Iu@{;{ZZ-4!-s;2d`y++4A8;_@MHOTaBEJinmJ6%s}V~nur zuh%@!=My$9Cn{V<1JPAPq14XfkX!wZ2i6UY;0sN9 z$<}Dum+b^ce@h=6U_*M|Rk*)Ia>MHU7OL)sA^)@U<9#?DXLWmZ(o7Alt=0S=KU~{Z z#*?kBW=|Qe^Y2tcVZ*rBv)hButq!E#Pq(A4^8ZX$TjR_1zeItP=U5~{#|q-;cSlmX zyMo}Dd1Wck3}(yJy)FmIjhI5IP1t678YC*T8~jq%jAZ4P&Ki%BFMD0Fv-V<4$(Zi5 zhv!Z1ZBt%%mPg=J0;i`9S2P=Jv{lyj?6>-=EM~x|%gpwhLVc0=!=vnL=?PcpxXw99 zM{GjwTd#a!nDizuk2m%WgpcdnU3_EB5{PBUyZWTUTE98^Oy?Q_{RYWw=D)YWvE1HZ)q7x+J(04pD*>=3J{nwy{ z>g8TknGDvj%9?AUj+cYNW6wTp>@3rV5@o!{mbI!Ic~Sen4}1N~rn~G{91s5X*t)~j z4mXP)+;c{1)mG?pk>0VQeJ?);>ED8UyqisnohGH8c5yLi)MFFCQPYc->2|&7VDy56 z;IQ4tIN`r-Ld!Hg9wtAHq%a3#>bMbZS*j<}YKmxUn`|J5VbE^oMe%MCP&B zdk^jlOd^?%pIf4^yY(@((Hygc!!Rz6YsO8yXor6y;4;}*ma3E+bOpksyYHrG`8@16 zou;=L&!Rj!>Uh6-lgXrXA?&5cUG%ceOxwNi+}T~y`|ukJKT7V?Xf($M&^7)*{mk*h z1RdR;;5;0gdEWQ!WvX3T(ppi3qA7tFQ<(D+`{m|QsvV=%z*m(@?eU%{lWMyQ*b)sk!=B8gYWFCach9wU zlxr{N%rh%o=Y2in=98_l#3E-RVY^j=-+VM00SI&mb&*n z$#8X2ntA+_l_JiRQY(JeCV(P99;lPwknMEfuY-Q$kN%>6CLxc6Rsb!g{J}4fNZCJd zLR^fvtwH>ZIpr*hWN$1Q28HxT7O$mo`Sy0Y_gD&#=b3BA&7IjLtYi!}4nvXayG$FG zcgN495QfB*7vc-s+er+68s6Go%|7rhH^xlx2P7{>#yM)L*H~h{G&^m~FV=Cff1pYT z4G)JeDJl6C67oLVusR8$NsEIo5`n9R(~@e-t}l{&ox z1Ha13Xr!d2?VX*ilg7zgvVZhat1wi{X1SQZjmv4scNVVs%J%d{aHwe>;n_YsJSZtE z$Hc_&3kpIeCMI%la3En~1`FhTFHq38v0}Wd5^}{cUm)iz9o^>wg^-2@_Q=S{ zcku}c$OHtk!onY+prG75Jq=CgI6zB8aw{vx%QYJqn3!_G6xE%d3b;Q2U_N zIXjDKy37A)etc{}5jjkd5F$eMh)wk2Yd*C=CqGwQI|^KbN@a> zsOzsEWK~_A@!jbPm{1~&FnbplljHfSgSm7rN)oefHs_Tv%8h8u%`+(l`5u;h2UNd$omKbUbU%!s}bY%uFLE$NBt3&OjPQ zgf20$y`$Z_g#g54gUuxK*B@0cPe)d|VA)7XoP zO1c)tB1MDYJ07%{{@bGM}EFwI{1)Z2sfQuIm#P zzB6w-cX8!J!mZjVTIy?Z)M=>97T=jR zWG~5DZ>W(M3v2)4-ch%Db94b79_H(%1d%>@#roNilny^kUi)HyJ$+W8DW+|OP@$Z< z@^H$4TKX~VlC)TexC~io_7BIoO2tB@&5eDr4m$05*F!WIbI`V#jjcn8{cQe$RI*cD znXKP6mGq{SI;51$aqm}}8H+q!Gft?LscthlI!CvS@T{%eyrwC_jU#v~gU2#S$tXio zo4LNFrzdl`F_1A~v)im}K1bkQ!$a#?s$m7Rxb`=h8(4@GD8yuC$x2Hj3=R&ybK0Nq zOJlcV6GNiWRwfNj!}0V@?;m^85Cke-nd5*kWGNf{D?N?z}FdVlX0 z`GrSfu0mU$D!~ePjud8715;B`0Rf2O;^O)F`RKT~?#hnWArRjg85s$|)z62A7O`=0 zRW&u1?1aW^#fo4Ws!itT-u?beAmeOJ`y`V=B%AYBh|ExIJd=fc;kSvYBO%$($S+^; zo=@1XZ?2PhOyKJi6S)9km)uHXHl?U6Gt#>|g+EwGHvd}qCps&VfV`myIwgk?vc)-1 zH;L|@SDh!j2MP=yK40YWbi8_=XoHz*j+~sPrlgKe=ASedJG=F}HQ)Z;-j9%wkTMxu z!l1ib{ZXIR*E<8mNKlrSm!ri<{_EUAjp^3rX6{VAM!CsSy)_mt?$+UH%3%P6g_G&QBt)V8s5hf3e`DNMR8JTjSnT z?G~)*yia~QI<$*)^z?-}Is6knrAk!)rltnR#`=baLWhPV+MiCj0U8Sk2!K>qSI6UW zg0{4@1pNmtl9-I_CotUxGj3ASAjnUjC-OuQ^A#vtT+aYZWW2w>k4{JsHZdWaot;%u zRjo0fA_M>TD=noqHa4b6kO&P6lV9yje=}{|f=y9W8~B9FCa0_@c%II=FHRz4wLDOA zvh?7vCv#1L0$dieNaXft5FB!dP}y2b67|K!HZ_`%h^QfHQjN=j!lTRSa_-A=E|HE# zUFiL^lEu*x_P-kPthRHAM-Pwx-jMBh`vN?W8jZ>3dZ$;T8S=uzL+k5|Dp+eM-%LLf z3ktZ22B%v8{qbI_)lD8rAUr%=jw%73fLALTzPqc7!+!GvSOB8HJ`xgwqM{I)O~>-f z%EB|aT{jO8Lt9!}RF;547ZMR+^1QVIQ7R-n+-R-c8vsKBZ*T7}?%T-e>FG#ey?ER% z;d!D_OzxLPP@nNAzQt8lF{0oLEVN~}w`Xz{#HKE4NDL1%vax)?QI2H;Hwm{iJM3N> z`#>Y^-OuSl{(0TYYD!5TIbUtF|5LwPH&aSUL#cn-XivN7dpadsTwH1>)#1}qSitBo zNhIU@L@V<1XL_p}vLZ2YtG0GXt9`)er_XkeOSZ+Om4(gqi6yBx;OjJ5A9y$&v6Au> z?~mV1VEW0T5cDtS`>vr9l6Su0N$G@e zJz?=wzSDAVcCZBx3-j)8=dAzDlCQCz*gM0YE`}o$Hoyr>DLdl_%jy;YpO@+3g*9o9 ztua3RC0d@9e+WEZNNMiG>;~&oiEPyeri~Lx&b3 zfq{AkMm_$nYsRCcmG$#8>_szDzAw&N$H)6?b<{DFlTuy>q+P0&B19OD_sg8i`1rtT z_6E*6uBI-wjy2oUtA`{?faOtB5z&$dQ{lhDfiUWHwwiIZH_j}x_4Kd7R(IpBxtU8s zLPAVN<~P9R?>M-)m<;>i!3qSc)(da|cziB2fJ!#F>NG}k1cQ?~9m(qJ>)-7k9N2Gk zee8?C6&=syIasJQo12-D*U=dRaT)sa=ih*c2nh?D^Gv-EG4f=9mFlIfU0haSvdVq- z$L2r*%H>GJKm@AN>wz@G+Y4(s?^BY2VT#)&NnyuJeXq#L-O-$StHH-{sm$=gI8@t8 zU0Hs6Mqtt8q|{*}&tA{V%S9FCJ1J3o;K<`Jtf@)@1PkZV#UT?er~U8XZb2T8>xspO zu{3r>GnTc+#>PLMcQ*WD@1YS8(07H1iHYg78YcwALLwtYh+@v?4Wr&qw0XL!lxqm{ z^S@_fV;f0jm23HG}>)4;&4wyJY+Ih{F) z{%U@h-qGU4<6V7F5OP+c2nbpnON*DCKM~@URjR+T)CzOMt$Je`ri5QWenN>$A1T_) z+-f*$?^YutrXqu)Zc6`rdJ3$YS$_~^%x3-_i_hBIz_*ohP4<8P{<&?(hz1(+^YefB z_;GS#;=8gkIw>hB2^krz1|9HCnQogfV76{5wr$cEAFr}$_ST_YSQSGUOU7CqBNdv}fJ%Arpdk>dF!S9>i|fqy0+pcL zymn7Tc@B2aF?Q*;En3-9Ty*x=*7OW)KD{4_O{U&)y5hhp z+AAugw42ciB*0~b!3IKv2Ne|zrj&3HOaWF}x=!~^ z0A%X^b)CQb>}Eoz4QsI!Q<;?&47dX`XNn>wJ<}h}ysyUx+dZ%7)Ia*PUB}gH?oWo$ zq3-r`W^O;>vR`i0jKjWI>YMcKX*Mu9-`hPpol0emWfT{elLGJp{q8?&;}~Q&kNH0SYXo1c{lFrZb(XMX&2u=J9Nm(!rteelS22q>=-)R9&k> zus_%_>CkG)|65OM_2po&vGJunZ0I^FG=s%R4BXCEwSGnJ3Mrv&LBX$sNbV=XoKsm! z&6mN!uOagppXb~D`l-w(SJ%u8rUL1+xQvX^i>-c23W~oyJ%M28^uyonA05FNO6%$p z04x9Bfd4B)UTLt+va`8Lg^Jki1k@rXDe1rVva+%Q_)&Yn`3CPhG`kLlvRE>y(d~+? zNm#fD2S;ppFvqn}=KGe>QkyuFE)vcVz#h>tN#sQ>*^`yq0#fibB2l}4Q<%T!$vIu@ zO7Di_hXu!>7Sd}IQIY*j&n2=rJQRBh`!Zl}Z-2bjk(HhO6_^=-3!vDV4REmL=H}ju z>S`t-q8ODgDZJi~6TnR=D4_7Y-V+1r3#cdN??>iEPKa7t!&O zLI0#VWUgGyHJ@7+4;03;ipPt{In}voeFK9cXDJd3Gy&B%9!yNpqc?m^_S=mbTQAA1 zFFs{2c7%@}D2cv~Kb~{{vGKTiW-ArDy|tWiINj1XprX?3H~_i`e)z>ES%RV5+^cRT zaxhMMNJxQC?>jerOQNW&&Gq*R@`tKRm1VOv0ni<5*l1o;9WeUhisDWompe*1mM7@~ zg(~kSm!F^UsmvsOo-f8;RCIOMy56$gCsTR7n-k5IXfX0rN*CI_xd{mgrPA0CV#KZ| zgaWi8qD&W>owq5`8s`_}baiQ0)litY9S(ucoFZr>NN7PvHBUl=-AHk*#tC;@2^sH;yJ8+;Mps zQi#yB8MJxo%PeqoQuxSORg{$ZyW10s@O%^WZ{xt{5O(ET-hFOFRH zP>bM<)fz)#+JZGs*Bku@W%tj?N=eLEW@b(2%gHz~1}2vL%lf22MGB-aAq~i>;RWm{ zvO$~MG+PBNmA>#8;sbm%AsK%DG{wHqUIW^~#iAk#C{M-iI9+1qvOJYIzIal@ zG24cY~iqftnS0>9{WPA05!91PT=7H8et72ZPsr z9G;%zpD^`&*b zmZ5y5COD0&7ROb9DnUVBp72>)M<+5OA|iYAAG*rwa|Hqdf>wtQzO3vx#$IDfi{tv= z_fYUyU+;lX77u+_Q(cYX@+f>qk$N(oyIAc zmygl=()Pl`%)~@NO>L=vh#c12*wpkN&;_dNPtgBzmAJUL0HEujqoa56C{dvUN$&)M zv2c(8meK;wjeZG!1E-oo*s`mGE1_X^+ zh{$UUUBF@fdO9E3yB~0H{UEm~4+A{$XL?kdT5s>tMpSl$^q__N{dyyGr!x1!54; zmKsx{`F~_lAMv?|VxvA?jU280Yl|ZfDQ?<75{Eurd@UJSib+e3&SNykOiJ3)GY*oT z3iP2R%;{wveNm}Yx)gM49P>E>w8+xsY*$4DYE}9ba!_3z3mfOZR!0N{ea+r)?kCtd zK9=(K<^i}~Kvp)&eCqec+1dDS>9jvpRXKnD{1Hae0a^wwyN!^pZWcf@WHRYRQ!(FI zSmJ>PLqbIj0AlXK!oq(-Q4Fyt3L09^Y`Lbron3bJ!PBbF=jw8O8w&|zXVwCAbbn$G zbz@Te)RCTae_;+5k|YK6b>J@Ws!vHJ(HS6&ELx z<>xlzpb`_8rPV?wZEb4YkFk!YNF;=w-JTe#ovqR?o}i-j99hmH*`K7Yhoz)uM3m(C z4V6$C{ru@4cO9YGP-M1+XKrmB0W`BUuPX$g&q}3p#DFwMHHd-$C{WPRiRkL;N{S7R zj2NvnJBt-40ML%b?P3Kd4f{8l(Qv-all=%}FqfCpLCe2=`m z&inU(hB-cWebkq4)db|0d|ove0k>}=N01Zf#oR8(e^*yC>9m`nQ8k%?WSGw5iP5Ar zw%p|SQG9ZCR%Jd1a1BO~sT|AV8wXk$BNG#fl_SuKw!tSHFE^p$;^K0-o|YvD&rVI% ztl*ij!T`)FUfC*OWkF?gd+T-C1qaY%MEljQK1Bi%JEOV$?fQyshw;|y3&qfo9gskt zTvyE}D{3k3S{v5-RwiSbA3gp#IxgJLYF?i#V*@(L3*NUd3d~Vj-2Dd&5Yi`h zdeXy1*WOpJckl4i#D(~kXyLDK?EciOXJ8gGc!;TnN>c5A*$z@DK2e*corpuX9VO%` zjgI7%nb&x+b-j8i*|W2RRlRkp+nLL-bzmk8Xzfza!t0-`qWti%^A>I@w)XuJPVxX} zf3lX?yfvz$5-v@3HOs>xj=(+e&Fh}9kWMGRG>hOZg(alY_c^9hmM2J|0ObRWG=}#j z%vgQ>fAs6@pm-{CrFT3^)nwe{*!L|gD-G8;Apzi_=jVsL@WZKKde>8_A3I2?O#6z@r09tf3!;&+U@0+u@_6q_n=io(;T1 zW> z4Ug6Rskl(>dXW4&l?NA-n|pKW9~K6l6wtWcOfHRHTf8`RPZk7y;?xK0BF>fyBrySB z020#mXJ3IY=N%4Qr;IKDnc|2yl0vQDbyw5T|p2mnSf%Rg~B9A8p9d%w_@TaV|2ID3=a!pN@wrdnw-)rQ042=Im zftJqLZo}Gd-?<8aeCMD06}z+&{gJ!Wg`U%3nxkig{Q(@En_lJ0o+PpM*z`tYe{XT?>$&YPP& zH}^kXNOEtqTe7=lX?i~S{1?-B(!_PK*O_k`WvpoPgi-Tb{CfqhrLP^WMi; zz;WL(pV%`@|^Ztdm7?tks zUJOJ~^xU5o6m4>SL*jJnI=3KlCqp|k`>sz!fiO$Llet!ve$0ANNJgKq;`TN)hw%)rt-1kgb2rY0;4np;a4=^a5hU_XT`pmL}yAAcdkAJ0Yrxe($T58w@f zzcPV91C(|*)o~kO>d@X3W(HH?x05rN%?^1WmC*o=$;Qk)R4=Wf=*N0IF+YZ7zgjgsaEXAUO;SEX2ej z!}Zx>g12s8$+Wk-u%7YT$NJrC?*I%)GA0xsi9Rlgr|{_{{iOWcf6niqXk8S z1VudTV%;sRZqsGkp-Dz@|D?aipehkV1QjGsGW0)X#>Y4ko+beBFguq}`j38+_4SO>uuBf-4zL zc*U$}Xg+j)#<5-=MJ4{4Je7*f&Z)B+86q_+(8!QD2>ov(hCWWBZUiCq?#~lyY64%^ z*qBUV_s$x6jM%inG2pcac!s0N*tmwjyC-Lqf-}};|0xvy9G>ih62)KOAvIt$If>RK zp`h4rzb9O#2Mpq328$b{G&GvTx4Brjnrlx5`n+#a^w#v+xvg;S}d3MdgltpKlI$W_z zFN){(_LC`^TW5d&sKh3{peA#A)F#?pxaP2)^sfbZ(&c|+ceY5&v-<)CCPGE)fiI%p zIS}@BxO;r6AqC@YXQO{*68Vl#ZuD)q`#)q)a83M7+_WbUs?R;6exKy~@c%y;Z>gTI zJ8#?-efbXi_oU^97!If+@WvaG6RSA8pgPHwpU z6>m;st^XQ5>GM_)8XR*?@IUcKfWAOg1!0U>GT=P#-@gY)w@$42Ue@?~gN+;4N|xL` zUpI)HcCN1E#KZxA{xE>#E2rDJURXT*8wrT$*i)5j0Y2d>RrU24uo4i6I~*-k1S`>%@I>)48XJ)nV2|$ z;+bF#0Ck7A&d)k5g^>WVL2|iX>oa_DM(ofgxsxF>WUUCZ0xT84Jo4F z@^G8zUd!?>l(DB|!w`go6!7;4U?F_^?{{k5V1T$!f)O2Q3Ezw2;_d=i>O~%z$rn}E z#0hE$gjO5P|{+%>HOZR|5IQ+Tn_^q!r(l8UJ~~6 zNr0pKkFB(EI}4Ol(ueba3JZ^VJT4(G3#!bqu@QWBnftd@RPz1(jZTol1)&LP|73Jz zGH)q;;o8RRizz_<#6^_bi__EbfIBIus=AJ!xmM2GZ$oRpJlB5c0HWaJ%s3)}s;UGv z)x6jGJMom1`^Ls|Au|e~v?$Gh8mc#+Opjy6&sp4}D*W%?+>aSI6%-e)jw(T3ZT;YQ z#8B|39*9{A1p-%!9YCs=C6|!{bbEl;J8(159roh}GV(PHtij%7Uc9ObljpHoM)A!V zDWKT`k-$IojAd{)xnGe1W`9S@si`S8He~R2Fhw&G932NOis|10Ut!=Zk^KAtv(DA|7`g=Ec^?8`Sqwh*#Q#-0$8Q1*#z*@i4($X=GL znGhlrW5!OH5m^Rfn{3Z;9b2x$kq%`~AAd%p=zyA-@cGCcZ+@pt0u%uHpN< zlR{>u|G!V2qqv_{fX@JpKodMRJUriXxOutW9-sCcofu#5jU0G}R0t0d#TFWw-+N_< zp2^%?T#yd9`ChE~4(3|c<(qt`US7O+PXR8LzNq!!-e(oI#aB8cC8bJk)(p-6+nIfe zQp#*5|Djbs(b$*9vzKLM@HLF@F55?2DphR3+CcIBL75SS;4=)4-L4hlvu|Y1q{}f^ zoV_?qp>9t)ph2Nf!0*t!gg`+& zEfvISvbP%gB+gO!APx4+!VsDkO(fC$ofHVj?$}P^QprIQNL)kWnW2&>D#<}Vh)?-R;_hA2$HqZSY`O{uPQGr ztx%hD8RK<6v@iDy^*%jnr(tP6RJsQY2rBz0ZFX=U><2&&UM9SMzv@5L{rz`iL2)Zk zLm;nv!FC2a=An_{nZPx59^63+n4{~Xu16mRsgU9^(f#@3M_>QLIkk5UiH6RI;=tiM zUEL3HTg$Cekc@YSN`cKO%xy^T2L~q9To+8kM+Bm{>xjfL!Q$d)!ELAcg&(xWb;fyv zO#(d@KjxnxP#<9@PbIuVU61K?x3e2};%LLzVETF-eyl$A%8kS*SCmu9}))g5Jo_8Zdu00S_J!AuUz z2C1cbasPnMZ!mv;aY6hFZy0xL+rmgvj_Y=R9y}_KjJRD}b71}>M{pStFtd*MYzV+Z z_JUXR!Bi0GQcSAcsu_ycLciF@>YHU`T&xO^xsnh??(c8aYbdQW{GPHi)1ACQL-*+L zH8Tt@67CCz&11E3h1Ya*KbOaXd1QiFr%`S?R61JR*y51uvJ#08Xr2=su9mmtprSlI zH^L07*8;67DMjR>1aIt%71;uX^(cefJuR;Avlj;jZe3t*PhK7qhpq`EfNwE$um#A3 zyf>%zv$CYLhS6qe=?6v6b=+I<+I>It<1~xhY=5?Rb1M0VH-#`lIh-ut-me;dV7`8* z!g@*Jc~ZM1!od2z`m@_7!9q^~tO7Dn8^TXJS_F4G(Rt@1;ZpkC0oDF?76Vj{)+8Fk|K_gBjzt~T@4^mP^%r0*Px(6!$DYvrU zN)zAS+vj6E3n*mzZe7|WEh6?(@5^x7>!Lz!tvxXl0DDOAo&>kICSdE=HGwfa4TdUB5LlfL2>?0^Z>p{Pl=^$K|)${?*LN@5FqUY}aDgp^(r!>1=JmTWeKt z0@F`S$n?tN^+nldTf#^`fr951{Y!0;_rAJiU9E*f1NSoy&O}Abf#A+iV4dexYSS`C zwRRA~kLp6J*^zUT<^S{pw2LYF6 z?3s&$Vvc>ko$TAn?K_7#SR!&uW570+k|L5BR@Y~0>b(~T%Wt5L!oUam+Hk-+?*j^D zgPzVU;Y&rq=MHsW*FnWN{d7^IS*<_!{NNXrB4b7_ zu5(f@##>7xS9c05K_APSB3Vnoa<;&81&J9nmTxcyl?MeSnHa|dVN@zJ#rv#}GvrUt z^lWd&^^#Jia-UCCSZy23WvL`T%x)~tA%&qLh=TqYFvQEF$OXq1&lgFlf=s<%X>8KE z^57#cH&;nYCX18%sd_Rcq7Hjpq*5(0s0c&cDz&N7t)n*|+ZO3;P%;wymx)JJ_15Tc zd}5|9EaqxGl;-P=1P;c+)%t?qn zJ>Fiiwx;N%F%igpa@tl zFP~lA$p28C)SAdxAZjHTQ-fIcl#IpW&G~;i7V1o6Nti;?9!24B#L*ldiAa=?SREAL zIsV2qzhL!)EXll^XuSC3PID@ly0b(g-`==&_@3QwhCoB`^B0yDe?U=#K|~dNh=nTJ zyV@U$%5dodHYmkL^%^YVsO$OmP~3w45&@kov;Z9zetQzDooa1q9cx~O*Vc5ib9tRx zs^gf^dmvagL9U38k5>WYmJu1&+NxGoNz~HPVnCPGuq(^Rz&tJcWR4CvQ&xUml=17^ z!gHy~LL|8fO8)!*jxY~nougkmj?c8;b|1<00ma`lTI*wFgSq2tk2+;~^LBJH3=L`N zqjFmj(#1WEr=RCsbGA^e*zNkdGC>tp_dFR|)hfbTC)Evc3AHN;=RbMQTH%yKI*{G~ z^Z}puahsskA!6Nw8yoDbWj#3gp}5HZ@;<)8M%mEFNK0Se@kfft&hD-esB^?0sSD%v z7%zn+Jzu-cg_ck($Eq(AGqywN)r4v=u z>dx0IdQf>jSs?Y^=fHUj6&K$Cy@63cx}JM>`7f>{AB|2xp|s4+IiO_R%hTX_Y)|!N zH{1iuN%^sW<&+CZk=6CiN9sgCkiK>&`&qe3KK*rBBO>gHG|wxLlP(2N97HGhhtoLz zM_Z7I=oS(Z4|wT%2Y6*WjyVe$$|6Nyuaq|{R&~bM1w6Yo#=wn$fqfICiu9#X-pHy!rzE~yd3m?uMyUtDl zz|D3!l9qdzJbvzBLKG@blibqrhQP`ySy!Zz1C-?oJw1e4^HyzjuG&tMk0szg=XNE|2i*- zwhTmi{kPL!0*t`Rh2EoD$F40TbOfZiqLGo-Pf@Nz)l#YHma)-SrR6h#n(ASfPw5Zb zHOzCv>tYF)Mb!B~)vj_ycJ1>@ZOaB-|w42eX_d7n_wfd_f%u!tA8`>i4( z*|Xjr?Z5R_e_q@hVgF6ngoT!0&&|hfl!c|^Zi&hC?2H;fC;(@*1Hqq0cr?vfk33sq z{TxXlHHD^DNy6x*!=+>yb*nBrh8rK+ta!-Ue)U51r#w`k8@>iZ8K+}S?MIaF1UmL#B;cshcq55KSW$zLT?E8W^ zww58~{cpT)6fTAaZ2Vr(ddv37>4F{@2trJtY~6y3pnbmU%rpg<137v;9*6{9#l;{o+BsRkRsn*&WWLZ@h_**AEp8T<}mAcLL&@AOSO)-bWIJU_q45h8FQlbeWTFZ!YqURo7#NR zK0aw2?EUt59gTD6W+qY#KCdNn(-$aKRUT|mGF)FB9!z(MjL1pwKI)kBo9s`=k(h$A zjm+*itDkyIPp_staX@j&DiIKBYwy$h@VS^WB4Y&IE+iC4*5>>EyW553%~{XUjP@ux z67nK0@ZT2mrvLZE=m`;5d}$F_3YMo|Om^ILf7Nt^LLj()?bqMTGcLOGv$x%h|6)(+ zITvYSad4Vlnn4gLqCuEeqI~Um-i3AJaJndZQLT1m6mJVGl}?;e7~gV zMtaeQ@`9W?wg90L7IGm!d}#GMPR`OYlAOPDD!b(BI(gTE}gI;29G-pMLP}4xe~|Bb((AH>(BQM#~c-c77lH+oZoaUgN7Bl_mCLuBzmKE z*4BNZb-JmhOK+&YK`8)W>P&m`7AdYJ@cZ2jKce20vm!D-yvtmev4%~#clp`;nKrz1 ziU(4&>h(#GwlvmNx>auzLCiAdQe$((oXrzp>4mC3l$EZTe@MtcgIxzV; z8Dm(~BwwUT4dBxAS4IU2O(-gh_xZVMn2mJ@kX=g-ca|b)Ys^KCA3V*jaao~Y^*3HR z8`>!~q3|omKbgI-LL1iLQ1+Ksw+9Xf03c9U>Pys4`d9s>a0{j`OLE zhX%!CzB=bPTzD&Qe^OzL{->An4eH}By}wR9Zo&S(5kK7F`tSJml-A1RZw7%^k@DuV heS0UFsyA~FsjEN!&((EEmUs+)wAA%(m#f)^{2%C@RBr$P diff --git a/bip-0360/merkletree.svg b/bip-0360/merkletree.svg index ac301398db..ea6c0b199c 100644 --- a/bip-0360/merkletree.svg +++ b/bip-0360/merkletree.svg @@ -26,9 +26,9 @@ inkscape:pagecheckerboard="0" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="0.77771465" - inkscape:cx="439.74998" - inkscape:cy="585.6904" + inkscape:zoom="1.0998546" + inkscape:cx="140.01851" + inkscape:cy="248.66923" inkscape:window-width="2560" inkscape:window-height="1369" inkscape:window-x="-8" @@ -652,6 +652,18 @@ width="394.88538" height="34.549486" id="rect2700-7-7-27" /> + + P2QRH Witness (input) + id="tspan17853">P2QRH Witness (input) annex + id="tspan17857">annex 50 + id="tspan17861">50 Script Script Inputs + id="tspan17865">Script Inputs Merkle Path (32*m bytes) + id="tspan17867">Merkle path (32*m bytes) Control block + id="tspan17869">Control block + Witness Program + SegWit version 3 tapleaf tapleaf version + id="tspan17877">version tapleaf tapleaf version + id="tspan17881">version 1 + id="tspan17883">1 { + id="tspan17885">{ { + id="tspan17889">{ P2QRH scriptPubkey (output) + id="tspan17893">P2QRH scriptPubkey (output) How the Tapleaf Merkle Root is computed: + id="tspan17897">How the tapleaf Merkle Root is computed: @@ -1023,16 +1057,16 @@ id="rect12088-0-7-9-5" width="52.433285" height="10.544161" - x="48.429337" - y="56.130188" + x="48.08913" + y="63.198704" inkscape:export-filename="C:\Users\e0\Documents\GitHub\bips\bip-0360\merkletree.png" inkscape:export-xdpi="71.752861" inkscape:export-ydpi="71.752861" /> OP_PUSHNUM3 + x="10.558981" + y="69.920135">OP_PUSHNUM3 tapleaf Merkle root @@ -1070,14 +1104,14 @@ xml:space="preserve" style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583" x="79.033226" - y="88.103836" + y="99.745514" id="text14922-4-7-8-4-8" inkscape:export-filename="C:\Users\e0\Documents\GitHub\bips\bip-0360\merkletree.png" inkscape:export-xdpi="71.752861" inkscape:export-ydpi="71.752861">tapleaf Merkle root tagged_hashtagged_hashQuantumRoot tagged_hashtagged_hash Tapleaf tagged_hashtagged_hash TapBranch tagged_hashtagged_hash TapBranch tagged_hashtagged_hash TapBranch tagged_hashtagged_hash TapBranch tapleaf + id="tspan17901">tapleaf A + id="tspan17903">A tapleaf tapleaf version + id="tspan17909">version tapleaf + id="tspan17911">tapleaf B + id="tspan17913">B tapleaf tapleaf version + id="tspan17919">version tapleaf + id="tspan17921">tapleaf C + id="tspan17923">C tapleaf tapleaf version + id="tspan17929">version tapleaf + id="tspan17931">tapleaf D + id="tspan17933">D tapleaf tapleaf version + id="tspan17939">version tapleaf + id="tspan17941">tapleaf E + id="tspan17943">E tagged_hashtagged_hash Tapleaf tagged_hashtagged_hash Tapleaf tagged_hashtagged_hash Tapleaf tagged_hashtagged_hash Tapleaf Date: Mon, 30 Jun 2025 14:56:54 -0400 Subject: [PATCH 28/46] Minor rewording --- bip-0360.mediawiki | 54 +++++++++++++--------------------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 7b6af46bf8..62a698d5f7 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -249,11 +249,23 @@ can be used in a quantum resistant manner. In a future BIP, we enable tapscript algorithms, ML-DSA (CRYSTALS-Dilithium) and SLH-DSA (SPHINCS+). It is important to consider these two changes together because P2QRH must be designed to support the addition of these PQ signature algorithms. The full description of these signatures will be provided in a future BIP. +==== P2QRH ==== + P2QRH is simply P2TR with the quantum vulnerable key-spend path removed so that it commits to the root of the tapleaf merkle tree in the output. This allows P2QRH to reuse the mature and battle tested P2TR, tapleaf and tapscript code already in Bitcoin. This reduces the implementation burden on wallets, exchanges, and libraries since they can reuse code they already have. +Both P2WSH (Pay 2 Witness Script Hash) and P2QRH protect against long-exposure quantum attacks and both provide +the same 256-bit security level. One may ask why not use the existing output type P2WSH instead of add a new one? +The problem with P2WSH is that it can only execute pre-tapscript scripts and not tapscript. +New programs in Bitcoin ecosystem have largely moved to tapscript for new scripts. Using P2WSH would require turning +back the clock and forcing projects to move from tapscript to pre-tapscript. More importantly, tapscript provides a far +easier and safer upgrade path for adding PQ signatures. Changes to pre-script to enable it to support PQ signatures would likely +require adding tapscript features into pre-tapscript. Even if this was possible, it would represent far more work and +risk than adding a new output type like P2QRH. Tapscript, and thereby a tapscript compatible output such as P2QRH, +is the most plausible and convenient upgrade path to full quantum resistance. + ==== PQ signatures ==== By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH @@ -390,12 +402,7 @@ tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKMLSIGVERIFY] ==== Future considerations ==== -While P2QRH lacks features like signature aggregation, it offers a pragmatic first step -toward quantum resistance. Future BIPs can add enhancements like signature aggregation, and possibly full -BIP-32 compatibility once tested and viable. Until quantum cryptography hardware and advanced schemes are widespread, -P2QRH provides meaningful protection against quantum threats as early as possible. - -Additional follow-on BIPs will be needed to implement signature aggregation, and full BIP-32 compatibility +Additional follow-on BIPs will be needed to implement PQ signature algorithms, signature aggregation, and full BIP-32 compatibility (if possible) BIP-32 relies on elliptic curve operations to derive keys from xpubs to support watch-only wallets, which PQC schemes may not support.. However, until specialized quantum cryptography hardware is widespread and signature aggregation schemes are thoroughly vetted, P2QRH addresses are an intermediate solution @@ -493,13 +500,8 @@ and thereby protect their coins from long-exposure quantum attacks. The protecti does not depend on the activation of post-quantum signatures in Bitcoin but does require that users do not expose their quantum vulnerable public keys to attackers via address reuse or other unsafe practices. -P2QRH provides similar resistance to long-exposure quantum attacks as provided by P2SH or P2WSH. Both P2QRH and P2WSH provide -a greater level of security than P2SH. This is because P2SH uses a 160-bit hash output and thus can only provide -80 bits of collision resistance and 160-bits of preimage resistance. P2QRH uses a 256-bit and provides 128 bits of -collision resistance and 256 bits of preimage resistance. From a functionality standard, P2QRH is compatible with tapscript -whereas P2SH and P2WSH are not. As the upgrade path for tapscript is far easier and safer than for pre-tapscript outputs -like P2SH and P2WSH, PQ signatures are unlikely to be added to pre-tapscript outputs. Thus, P2SH and P2WSH do not present -a viable upgrade path to full quantum resistance. +P2QRH uses a 256-bit hash output, providing 128 bits of collision resistance and 256 bits of preimage resistance. +This is the same level of security as P2WSH, which also uses a 256-bit hash output. P2QRH does not, by itself, protect against short-exposure quantum attacks, but such attacks can be mitigated by the future activation of post-quantum signatures in Bitcoin. With P2QRH hash, these would provide full quantum resistance to P2QRH outputs in Bitcoin. @@ -529,32 +531,6 @@ Equivalent P2QRH and P2TR outputs are always the same size. P2QRH is slightly more computationally performant than P2TR, as the operations to spending a P2QRH output is a strict subset of the operations needed to spend a P2TR output. - - - - ==== Backward Compatibility ==== Older wallets and nodes that have not been made compatible with SegWit version 3 and P2QRH will not recognize these From c8fa63a58e6b56f576932d1a78fec32ae15b5bae Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 30 Jun 2025 15:34:11 -0400 Subject: [PATCH 29/46] Review suggestions Co-authored-by: Hunter Beast --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 62a698d5f7..b11c6f0a49 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -16,7 +16,7 @@ === Abstract === -This document proposes the introduction of a new output type Pay to Quantum Resistant Hash (P2QRH) via a soft fork. +This document proposes the introduction of a new output type, Pay to Quantum Resistant Hash (P2QRH), via a soft fork. P2QRH provides the same tapscript functionality as Pay to TapRoot (P2TR) but removes the quantum-vulnerable key-spend path in P2TR. By itself, P2QRH provides protection against long-exposure quantum attacks, but requires PQ signatures to provide full security against Cryptanalytically-Relevant Quantum Computing (CRQCs). From 6671a3e54570efc140cf13512c46dee645e5aeb1 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 30 Jun 2025 15:44:20 -0400 Subject: [PATCH 30/46] Clarified size differences --- bip-0360.mediawiki | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index b11c6f0a49..d88d2795e7 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -208,13 +208,13 @@ script input_0, ..., script input_N, tapleaf script, -control block = [control byte, m*32 byte merkle path] # m is the depth of the merkle tree +control block = [control byte, 32m byte Merkle path] # m is the depth of the Merkle tree The script inputs provide the same functionality as they does in P2TR. That is, they place input values on the stack to be evaluated by the tapleaf script, a.k.a. the redeem script. -The control block is a 1 + 32*m byte array, where the first byte is the control byte and the next 32*m bytes are the +The control block is a 1 + 32m byte array, where the first byte is the control byte and the next 32*m bytes are the Merkle path to the tapleaf script. The control byte is the same as the control byte in a P2TR control block, including the 7 bits are used to specify the tapleaf version. The parity bit of the control byte is always 1 since P2QRH does not have a key-spend path. We omit the public key from the control block as it is not needed in P2QRH. @@ -511,18 +511,40 @@ attacks. ==== Transaction Size and Fees ==== -P2QRH inputs can be slightly larger or smaller than their equivalent P2TR inputs. Lets consider the case: +P2QRH inputs can be slightly larger or smaller than their equivalent P2TR inputs. Let's consider the cases: -'''P2TR Key-spend''' P2QRH inputs will be larger than P2TR inputs when the P2TR output would have been spent via the key-spend path. -P2QRH quantum resistance comes from removing the P2TR key-spend path. Consequently it can not make use of taproot's optimization -where P2TR key-spends do not require including a merkle path in the P2TR input. The size difference is roughly: -len(tapleaf executed) + 32m - len(pubkey) - len(signature) bytes, where m=log2(number of tapleafs). For a single tapleaf -P2QRH would be 4 bytes longer. +'''P2TR key-spend''' P2QRH inputs will be larger than P2TR inputs when the P2TR output would have been spent via the key-spend path. +P2QRH quantum resistance comes from removing the P2TR key-spend path. Consequently it cannot make use of taproot's optimization +where P2TR key-spends do not require including a merkle path in the P2TR input. If the Merkle tree only has a single tapleaf, +no Merkle path is needed in the control block giving use a 1 byte control block and the 34 byte tapleaf itself. +P2QRH witness (99 bytes) + +signature (64 bytes), +tapleaf script = [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIGVERIFY] (34 bytes), +control block = [control byte] (1 byte) + + +P2TR key-spend witness (64 bytes): + +signature (64 bytes) + + +Thus, the P2QRH input would be 35 = 99-64 bytes larger than a P2TR key-spend input. + +If the Merkle tree has more than a single tapleaf, then the Merkle path must be included in +the control block. For a Merkle path of length m, it would add an additional ~32m bytes to the P2QRH input. + +P2QRH witness (99+32m bytes) + +signature (64 bytes), +tapleaf script = [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIGVERIFY] (34 bytes), +control block = [control byte, 32m byte Merkle path] (1 + 32m bytes) + -'''P2TR Script-spend''' P2QRH inputs will be smaller than P2TR inputs if the P2TR output would have been spent via +'''P2TR script-spend''' P2QRH inputs will be smaller than P2TR inputs if the P2TR output would have been spent via the script-spend path. This is because P2QRH inputs do not require that the input includes a public key in the witness control block to -open the commitment to the tapleaf merkle root. An equivalent P2QRH input will be 32 bytes smaller than a P2TR script-spend input. +open the commitment to the tapleaf merkle root. An equivalent P2QRH input will be 32 bytes smaller than a P2TR script-spend input. Equivalent P2QRH and P2TR outputs are always the same size. From d15870d3739b602fd9548648b9f34fb0d2e1272b Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 30 Jun 2025 15:46:58 -0400 Subject: [PATCH 31/46] Changed header size and order --- bip-0360.mediawiki | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index d88d2795e7..b053f59153 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -492,24 +492,8 @@ By adhering to the SegWit transaction structure and versioning, P2QRH outputs ar processing rules. Nodes that do not recognize SegWit version 3 will treat these outputs as anyone-can-spend but, per [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP-141], will not relay or mine such transactions. -=== Security === -P2QRH outputs provide the same tapscript functionality as P2TR outputs, but without the quantum-vulnerable key-spend -path. This enables users, exchanges and other hodlers to easily move their coins from taproot outputs to P2QRH outputs -and thereby protect their coins from long-exposure quantum attacks. The protection from long-exposure quantum attacks -does not depend on the activation of post-quantum signatures in Bitcoin but does require that users do not expose their -quantum vulnerable public keys to attackers via address reuse or other unsafe practices. - -P2QRH uses a 256-bit hash output, providing 128 bits of collision resistance and 256 bits of preimage resistance. -This is the same level of security as P2WSH, which also uses a 256-bit hash output. - -P2QRH does not, by itself, protect against short-exposure quantum attacks, but such attacks can be mitigated by the future -activation of post-quantum signatures in Bitcoin. With P2QRH hash, these would provide full quantum resistance to P2QRH outputs in Bitcoin. -That said, the protection offered by resistance to long-exposure quantum attacks should not be underestimated. It is likely -that the first CRQCs (Cryptographically Relevant Quantum Computers) will not be able to perform short-exposure quantum -attacks. - -==== Transaction Size and Fees ==== +=== Transaction Size and Fees === P2QRH inputs can be slightly larger or smaller than their equivalent P2TR inputs. Let's consider the cases: @@ -548,12 +532,12 @@ open the commitment to the tapleaf merkle root. An equivalent P2QRH input will b Equivalent P2QRH and P2TR outputs are always the same size. -==== Performance Impact ==== +=== Performance Impact === P2QRH is slightly more computationally performant than P2TR, as the operations to spending a P2QRH output is a strict subset of the operations needed to spend a P2TR output. -==== Backward Compatibility ==== +=== Backward Compatibility === Older wallets and nodes that have not been made compatible with SegWit version 3 and P2QRH will not recognize these outputs. Users should ensure they are using updated wallets and nodes to use P2QRH addresses and validate transactions @@ -563,6 +547,22 @@ P2QRH is fully compatible with tapscript and existing tapscript programs can be == Security == +P2QRH outputs provide the same tapscript functionality as P2TR outputs, but without the quantum-vulnerable key-spend +path. This enables users, exchanges and other hodlers to easily move their coins from taproot outputs to P2QRH outputs +and thereby protect their coins from long-exposure quantum attacks. The protection from long-exposure quantum attacks +does not depend on the activation of post-quantum signatures in Bitcoin but does require that users do not expose their +quantum vulnerable public keys to attackers via address reuse or other unsafe practices. + +P2QRH uses a 256-bit hash output, providing 128 bits of collision resistance and 256 bits of preimage resistance. +This is the same level of security as P2WSH, which also uses a 256-bit hash output. + +P2QRH does not, by itself, protect against short-exposure quantum attacks, but such attacks can be mitigated by the future +activation of post-quantum signatures in Bitcoin. With P2QRH hash, these would provide full quantum resistance to P2QRH outputs in Bitcoin. +That said, the protection offered by resistance to long-exposure quantum attacks should not be underestimated. It is likely +that the first CRQCs (Cryptographically Relevant Quantum Computers) will not be able to perform short-exposure quantum +attacks. + + {| class="wikitable" |+ Candidate quantum-resistant signature algorithms ordered by largest to smallest NIST Level V signature size |- From 0f78bab4f1e62e96ab20871ab590d56d0e7f82ac Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 30 Jun 2025 15:48:23 -0400 Subject: [PATCH 32/46] does --> doUpdate bip-0360.mediawiki Co-authored-by: Hunter Beast --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index b053f59153..22d8fd3a30 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -211,7 +211,7 @@ tapleaf script, control block = [control byte, 32m byte Merkle path] # m is the depth of the Merkle tree -The script inputs provide the same functionality as they does in P2TR. That is, they place input values on the stack to +The script inputs provide the same functionality as they do in P2TR. That is, they place input values on the stack to be evaluated by the tapleaf script, a.k.a. the redeem script. The control block is a 1 + 32m byte array, where the first byte is the control byte and the next 32*m bytes are the From 4c8fed8a80940d0d513e56bc529e1d8235e272fc Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 30 Jun 2025 19:12:48 -0400 Subject: [PATCH 33/46] Add related work section --- bip-0360.mediawiki | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 22d8fd3a30..4098ddd930 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -271,7 +271,7 @@ is the most plausible and convenient upgrade path to full quantum resistance. By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQ signatures. Simply moving coins from P2TR to P2QRH protects those coins from long-exposure quantum attacks. Then to gain full quantum resistance, -verification of PQ signatures can be added as an additional tapleaf alongside Schnorr signaturesInspired by Matt Corallo's discussion of this idea on the Bitcoin-dev mailing list [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update]. +verification of PQ signatures can be added as an additional tapleaf alongside Schnorr signaturesMatt Corallo, [https://groups.google.com/g/bitcoindev/c/8O857bRSVV8/m/rTrpeFjWDAAJ Trivial QC signatures with clean upgrade path], (2024). When quantum attacks become practical, users would then be fully protected as the P2QRH output would allow them to switch to sending their coins using the PQ signature algorithms. This allows the upgrade to quantum resistance to be largely invisible to users. @@ -641,6 +641,38 @@ proposed solution] in an Ethereum quantum emergency is quite different from the a hard fork of the chain, reverting all blocks after a sufficient amount of theft, and using STARKs based on BIP-32 seeds to act as the authoritative secret when signing. These measures are deemed far too heavy-handed for Bitcoin. +P2QRH and MAST (Merkelized Abstract Syntax Tree) [https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki BIP-114], +and related BIPs [https://github.com/bitcoin/bips/blob/master/bip-0116.mediawiki BIP-116], [https://github.com/bitcoin/bips/blob/master/bip-0117.mediawiki BIP-117], +share the idea of committing to a Merkle tree of scripts. While MAST was never activated, taproot +[https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] incorporated this idea of a Merkle tree of +scripts into its design. For the purposes of compatibility, simplicity and code reuse P2QRH inherits this capability from taproot +rather than implementing MAST directly. + +Below we attempt to summarize some of the ideas discussed on the Bitcoin Bitcoin-Dev that relate to P2QRH. + +The idea of a taproot but with the key-spend path removed has been discussed a number of times in the Bitcoin community. +[https://gnusha.org/pi/bitcoindev/CAD5xwhgzR8e5r1e4H-5EH2mSsE1V39dd06+TgYniFnXFSBqLxw@mail.gmail.com/ OP_CAT Makes Bitcoin Quantum Secure] +notes that if we disable the key-spend in taproot and activated CAT [https://github.com/bitcoin/bips/blob/master/bip-0347.mediawik BIP-347], +we could achieve quantum resistance by using Lamport signatures with CAT. +[https://groups.google.com/g/bitcoindev/c/8O857bRSVV8/m/rTrpeFjWDAAJ Trivial QC signatures with clean upgrade path] and +[https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update] discusses the idea of +taproot but with the future ability to disable the key-spend path. +The design of P2QRH is partly inspired by these discussions as P2QRH can be understood as P2TR without the key-spend path. + +Commit-reveal schemes such as +[https://gnusha.org/pi/bitcoindev/1518710367.3550.111.camel@mmci.uni-saarland.de/ Re: Transition to post-quantum (2018)] +and [https://groups.google.com/g/bitcoindev/c/LpWOcXMcvk8/m/YEiH-kTHAwAJ Post-Quantum commit / reveal Fawkescoin variant as a soft fork (2025)] +have been proposed as a way to safely spend bitcoins if CRQCs become practical prior to Bitcoin adopting achieving quantum resistance. +The essential idea is to leverage the fact that a CRQC can only learn your private key after a user has revealed their public key. +Thus, Bitcoin could fork in an alternative way to spend an output that would leverage this property. +Spending via commit-reveal would require two steps, first the user's commits on-chain to their public key along with a set of outputs the user wishes +to spend to. Then, in reveal, the user sign and reveals their public key. While CRQC might be able to generate competing signatures it can not produce +a commitment to the user's public key earlier than the user's commitment as it does not learn it until the reveal step. + +Commit-reveal schemes can only be spent from and to outputs that are not vulnerable to long-exposure quantum attacks, such as +P2PKH, P2SK, P2WPKH, etc... To use tapscript outputs with this system either a soft fork could disable the key-spend path of P2TR outputs +or P2QRH could be used here as it does not have a key-spend path and thus is not vulnerable to long-exposure quantum attacks. + == References == * [https://groups.google.com/g/bitcoindev/c/Aee8xKuIC2s/m/cu6xej1mBQAJ Mailing list discussion] From 7c5c13dc6202e23088886b6b52dcd6c51d05e9b0 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 30 Jun 2025 19:28:55 -0400 Subject: [PATCH 34/46] Better scale figure --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 4098ddd930..11eac5d6fc 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -187,7 +187,7 @@ identical to a P2TR (Pay to Taproot) output with no quantum vulnerable key-spend output type with no internal key and key tweak. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree defined as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. -[[File:bip-0360/merkletree.png|center|740px|thumb|]] +[[File:bip-0360/merkletree.png|center|550px|thumb|]] To construct a P2QRH output we follow the same process as [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] to compute the tapscript merkle root. However, instead of the root of the Merkle tree being hashed together with the internal From af118afd4879f828c0c2e7af7704fa5c482afc75 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Tue, 1 Jul 2025 17:22:04 -0400 Subject: [PATCH 35/46] Respond to review comments --- bip-0360.mediawiki | 63 +++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 11eac5d6fc..41a2ec8dc8 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -390,15 +390,15 @@ more than 520 bytes onto the stack. To solve this issue, for signature schemes with public keys greater than 520 bytes, we use the hash of the public key in the tapleaf script. We then package the public key and signature together as the same stack element on the input stack. Since the hash of the public key is only 32 bytes, the tapleaf script can push it on the stack as it does today. Consider the following example with a -OP_CHECKMLSIGVERIFY opcode for ML-DSA: +OP_CHECKMLSIG opcode for ML-DSA: stack = [pubkey||signature] -tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKMLSIGVERIFY] +tapscript = [OP_PUSHDATA HASH256(expected_pubkey), OP_CHECKMLSIG] 1. OP_PUSHDATA HASH256(expected_pubkey) updates the stack to [HASH256(expected_pubkey), pubkey||signature] -2. OP_CHECKMLSIGVERIFY pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. +2. OP_CHECKMLSIG pops HASH256(expected_pubkey) and pubkey||signature, checks HASH256(expected_pubkey) == pubkey and verifies signature against pubkey. ==== Future considerations ==== @@ -495,42 +495,50 @@ processing rules. Nodes that do not recognize SegWit version 3 will treat these === Transaction Size and Fees === -P2QRH inputs can be slightly larger or smaller than their equivalent P2TR inputs. Let's consider the cases: +Equivalent P2QRH and P2TR outputs are always the same size. P2QRH inputs can be slightly larger or smaller than +their equivalent P2TR inputs. Let's consider the cases: '''P2TR key-spend''' P2QRH inputs will be larger than P2TR inputs when the P2TR output would have been spent via the key-spend path. P2QRH quantum resistance comes from removing the P2TR key-spend path. Consequently it cannot make use of taproot's optimization where P2TR key-spends do not require including a merkle path in the P2TR input. If the Merkle tree only has a single tapleaf, -no Merkle path is needed in the control block giving use a 1 byte control block and the 34 byte tapleaf itself. +no Merkle path is needed in the control block giving us a 1 byte control block. -P2QRH witness (99 bytes) +P2QRH witness (103 bytes): -signature (64 bytes), -tapleaf script = [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIGVERIFY] (34 bytes), -control block = [control byte] (1 byte) +[count] (1 byte), # Number of elements in the witness +[size] signature (1 + 64 bytes = 65 bytes), +tapleaf script = [size] [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIG] (1 + 1 + 32 + 1 bytes = 35 bytes), +control block = [size] [control byte] (1 + 1 = 2 bytes) -P2TR key-spend witness (64 bytes): +P2TR key-spend witness (66 bytes): -signature (64 bytes) +[count] (1 byte), # Number of elements in the witness +[size] signature (1 + 64 bytes = 65 bytes) -Thus, the P2QRH input would be 35 = 99-64 bytes larger than a P2TR key-spend input. +Thus, the P2QRH input would be 103 - 66 = 37 bytes larger than a P2TR key-spend input. -If the Merkle tree has more than a single tapleaf, then the Merkle path must be included in -the control block. For a Merkle path of length m, it would add an additional ~32m bytes to the P2QRH input. - -P2QRH witness (99+32m bytes) +If the Merkle tree has more than a single tapleaf, then the Merkle path must be included in +the control block. +P2QRH witness (103+32m bytes) -signature (64 bytes), -tapleaf script = [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIGVERIFY] (34 bytes), -control block = [control byte, 32m byte Merkle path] (1 + 32m bytes) +[count] (1 byte), # Number of elements in the witness +[size] signature (64 + 1 bytes = 65 bytes), +tapleaf script = [size] [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIG] (34 + 1 bytes = 35 bytes), +control block = [size] [control byte, 32m byte Merkle path] (1 + 1 + 32m = 2 + 32m bytes) -'''P2TR script-spend''' P2QRH inputs will be smaller than P2TR inputs if the P2TR output would have been spent via -the script-spend path. This is because P2QRH inputs do not require that the input includes a public key in the witness control block to -open the commitment to the tapleaf merkle root. An equivalent P2QRH input will be 32 bytes smaller than a P2TR script-spend input. +For a Merkle path of length m, it would add an additional ~32m bytes to the P2QRH inputIf the number is large enough we will the compact size will need 2 bytes, increasing the size by 1 byte.. +This would make it 37 + 32m bytes larger than a P2TR key-spend input. + +Considering a P2QRH output that has a PQ signature tapleaf and a Schnorr tapleaf. The P2QRH witness to spend the Schnorr path +would be 103 + 32*1 = 135 bytes. It is unfortunate that we can not use the key-spend optimization for P2QRH inputs, but the key-spend optimization is +exactly what makes P2TR vulnerable to quantum attacks. If spend-key was quantum resistant we wouldn't need P2QRH at all. -Equivalent P2QRH and P2TR outputs are always the same size. +'''P2TR script-spend''' P2QRH inputs will be smaller than equivalent script-spend path P2TR inputs. This is because P2QRH inputs +do not require that the input includes a public key in the witness control block to open the commitment to the tapleaf merkle root. +An equivalent P2QRH input will be 32 bytes smaller than a P2TR script-spend input. === Performance Impact === @@ -645,15 +653,18 @@ P2QRH and MAST (Merkelized Abstract Syntax Tree) [https://github.com/bitcoin/bip and related BIPs [https://github.com/bitcoin/bips/blob/master/bip-0116.mediawiki BIP-116], [https://github.com/bitcoin/bips/blob/master/bip-0117.mediawiki BIP-117], share the idea of committing to a Merkle tree of scripts. While MAST was never activated, taproot [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] incorporated this idea of a Merkle tree of -scripts into its design. For the purposes of compatibility, simplicity and code reuse P2QRH inherits this capability from taproot -rather than implementing MAST directly. +scripts into its design. P2QRH inherits this capability from taproot because P2QRH is simply taproot with the key-spend +path removed. As a result, P2QRH does have the taproot internal key or tweak key, instead P2QRH commits directly to the +Merkle tree of scripts. Below we attempt to summarize some of the ideas discussed on the Bitcoin Bitcoin-Dev that relate to P2QRH. The idea of a taproot but with the key-spend path removed has been discussed a number of times in the Bitcoin community. [https://gnusha.org/pi/bitcoindev/CAD5xwhgzR8e5r1e4H-5EH2mSsE1V39dd06+TgYniFnXFSBqLxw@mail.gmail.com/ OP_CAT Makes Bitcoin Quantum Secure] notes that if we disable the key-spend in taproot and activated CAT [https://github.com/bitcoin/bips/blob/master/bip-0347.mediawik BIP-347], -we could achieve quantum resistance by using Lamport signatures with CAT. +we could achieve quantum resistance by using Lamport signatures with CAT. Lamport and WOTS (Winternitz One-Time Signatures) built from CAT +are quantum resistant but are one-time signatures. This means that if you sign twice for the same public key, you leak your secret key. +This would require major changes to wallet behavior and would represent a significant security downgrade. [https://groups.google.com/g/bitcoindev/c/8O857bRSVV8/m/rTrpeFjWDAAJ Trivial QC signatures with clean upgrade path] and [https://groups.google.com/g/bitcoindev/c/oQKezDOc4us/m/T1vSMkZNAAAJ Re: P2QRH / BIP-360 Update] discusses the idea of taproot but with the future ability to disable the key-spend path. From c85267ea49809d14d044f13b3917cf0b352327d5 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 2 Jul 2025 12:08:04 -0400 Subject: [PATCH 36/46] remove double space Co-authored-by: Armin Sabouri --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 41a2ec8dc8..816dd250f0 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -543,7 +543,7 @@ An equivalent P2QRH input will be 32 bytes smaller than a P2TR script-spend inpu === Performance Impact === P2QRH is slightly more computationally performant than P2TR, as the operations to spending a P2QRH output is a strict -subset of the operations needed to spend a P2TR output. +subset of the operations needed to spend a P2TR output. === Backward Compatibility === From 93862fc9c3dba1c6ed39bb24f57facfafe3bd2b4 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Wed, 2 Jul 2025 12:09:48 -0400 Subject: [PATCH 37/46] Address review comments --- bip-0360.mediawiki | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 816dd250f0..2f34a3617d 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -208,13 +208,13 @@ script input_0, ..., script input_N, tapleaf script, -control block = [control byte, 32m byte Merkle path] # m is the depth of the Merkle tree +control block = [control byte, 32 * m byte Merkle path] # m is the depth of the Merkle tree The script inputs provide the same functionality as they do in P2TR. That is, they place input values on the stack to be evaluated by the tapleaf script, a.k.a. the redeem script. -The control block is a 1 + 32m byte array, where the first byte is the control byte and the next 32*m bytes are the +The control block is a 1 + 32 * m byte array, where the first byte is the control byte and the next 32*m bytes are the Merkle path to the tapleaf script. The control byte is the same as the control byte in a P2TR control block, including the 7 bits are used to specify the tapleaf version. The parity bit of the control byte is always 1 since P2QRH does not have a key-spend path. We omit the public key from the control block as it is not needed in P2QRH. @@ -323,8 +323,8 @@ new ones as needed. Additionally this approach allows developers to be very expl The main disadvantage is that it uses five OP_SUCCESSx opcodes per signature algorithm. Supporting ML-DSA and SLH-DSA would require ten new opcodes. Adding PQ signatures via a tapleaf version increase does not introduce any new opcodes and allows previously written tapscript programs to be used with PQ signatures -by simply using the new tapleaf version. Developers rather than being able explicitly specify the intended signature algorithm by using an opcode, -the algorithm must be signaled in the public key or public key hash'''Why not have CHECKSIG infer the algorithm based on signature size?''' Each of the three signature algorithms, Schnorr, ML-DSA, and SLH-DSA, have unique signature sizes. The problem with using signature size to infer algorithm is that spender specifies the signature. This would allow a public key which was intended to be verified by Schnorr to be verified using ML-DSA as the spender specified a ML-DSA signature. Signature algorithms are not often not secure if you can mix and match public key and signature across algorithms.. +by simply using the new tapleaf version. Instead of developers explicitly specifying the intended signature algorithm through an opcode, the algorithm +to use must be indicated within the public key or public key hash'''Why not have CHECKSIG infer the algorithm based on signature size?''' Each of the three signature algorithms, Schnorr, ML-DSA, and SLH-DSA, have unique signature sizes. The problem with using signature size to infer algorithm is that spender specifies the signature. This would allow a public key which was intended to be verified by Schnorr to be verified using ML-DSA as the spender specified a ML-DSA signature. Signature algorithms are not often not secure if you can mix and match public key and signature across algorithms.. The disadvantage of this approach is that it requires a new tapleaf version each time we want to add a new signature algorithm. Both approaches must raise the stack element size limit. In the OP_SUCCESSx case, the increased size limit would only be effect for transaction outputs @@ -453,7 +453,7 @@ language verbatim from the [[bip-0341.mediawiki|BIP341]] script validation secti * If there are at least three witness elements, and the first byte of the last element is 0x50, this last element is called ''annex'' ''a'' and is removed from the witness stack. The annex (or the lack of thereof) is always covered by the signature and contributes to transaction weight, but is otherwise ignored during taproot validation. * There must be at least two witness elements left. ** Call the last stack element ''s'', the script (as defined in [[bip-0341.mediawiki|BIP341]]) -** The last stack element is called the control block ''c'', and must have length ''1 + 32m'', for a value of ''m'' that is an integer between 0 and 128, inclusive. Fail if it does not have such a length. +** The last stack element is called the control block ''c'', and must have length ''1 + 32 * m'', for a value of ''m'' that is an integer between 0 and 128, inclusive. Fail if it does not have such a length. ** Let ''v = c[0] & 0xfe'' be the ''leaf version'' (as defined in [[bip-0341.mediawiki|BIP-341]]). To maintain ''leaf version'' encoding compatibility the last bit of c[0] is unused and must be 1 '''Why set the last bit of c[0] to one?''' Consider a faulty implementation that deserializes the ''leaf version'' as c[0] rather than c[0] & 0xfe for both P2TR and P2QRH. If they test against P2QRH outputs and require that last bit is 1, this deserialization bug will cause an immediate error.. ** Let ''k0 = hashTapLeaf(v || compact_size(size of s) || s)''; also call it the ''tapleaf hash''. ** For ''j'' in ''[0,1,...,m-1]'': @@ -521,19 +521,19 @@ Thus, the P2QRH input would be 103 - 66 = 37 bytes larger than a P2TR key-spend If the Merkle tree has more than a single tapleaf, then the Merkle path must be included in the control block. -P2QRH witness (103+32m bytes) +P2QRH witness (103+32*m bytes) [count] (1 byte), # Number of elements in the witness [size] signature (64 + 1 bytes = 65 bytes), tapleaf script = [size] [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIG] (34 + 1 bytes = 35 bytes), -control block = [size] [control byte, 32m byte Merkle path] (1 + 1 + 32m = 2 + 32m bytes) +control block = [size] [control byte, 32 * m byte Merkle path] (1 + 1 + 32 * m = 2 + 32 * m bytes) -For a Merkle path of length m, it would add an additional ~32m bytes to the P2QRH inputIf the number is large enough we will the compact size will need 2 bytes, increasing the size by 1 byte.. -This would make it 37 + 32m bytes larger than a P2TR key-spend input. +For a Merkle path of length m, it would add an additional ~32 * m bytes to the P2QRH inputIf the number is large enough we will the compact size will need 2 bytes, increasing the size by 1 byte.. +This would make it 37 + 32 * m bytes larger than a P2TR key-spend input. -Considering a P2QRH output that has a PQ signature tapleaf and a Schnorr tapleaf. The P2QRH witness to spend the Schnorr path -would be 103 + 32*1 = 135 bytes. It is unfortunate that we can not use the key-spend optimization for P2QRH inputs, but the key-spend optimization is +Considering a P2QRH output that has a PQ signature tapleaf and a Schnorr tapleaf. The P2QRH witness to spend the Schnorr path +would be 103 + 32 * 1 = 135 bytes. It is unfortunate that we can not use the key-spend optimization for P2QRH inputs, but the key-spend optimization is exactly what makes P2TR vulnerable to quantum attacks. If spend-key was quantum resistant we wouldn't need P2QRH at all. '''P2TR script-spend''' P2QRH inputs will be smaller than equivalent script-spend path P2TR inputs. This is because P2QRH inputs From 2dcba412f1d9d613ecc888ab1ce67ae014d03d9e Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 4 Jul 2025 17:23:18 -0400 Subject: [PATCH 38/46] Addressing Ademan comments --- bip-0360.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 2f34a3617d..7a28fda132 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -183,9 +183,9 @@ remember that these are quantum (r)esistant addresses. This is referencing the l [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32 BIP-173]. P2QRH (Pay to Quantum Resistant Hash) is a new output type that commits to the root of a tapleaf merkle tree. It is functionally -identical to a P2TR (Pay to Taproot) output with no quantum vulnerable key-spend path. The lack of a key-spend path in P2QRH in a simple -output type with no internal key and key tweak. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree defined -as in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. +the same as a P2TR (Pay to Taproot) output with the quantum vulnerable key-spend path removed. Since P2QRH has no key-spend path, P2QRH omits the +taptweak public key as it is not needed. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree as defined + in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. [[File:bip-0360/merkletree.png|center|550px|thumb|]] From af3f4fe28a41e747521817ed6545679ee01baf20 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Fri, 4 Jul 2025 17:23:46 -0400 Subject: [PATCH 39/46] Sync source svg --- bip-0360/merkletree.svg | 94 ++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/bip-0360/merkletree.svg b/bip-0360/merkletree.svg index ea6c0b199c..ac81ebab8e 100644 --- a/bip-0360/merkletree.svg +++ b/bip-0360/merkletree.svg @@ -679,9 +679,9 @@ inkscape:export-ydpi="71.752861">P2QRH Witness (input) + id="tspan18239">P2QRH Witness (input) annex + id="tspan18243">annex 50 + id="tspan18247">50 Script Inputs + id="tspan18251">Script Inputs Merkle path (32*m bytes) + id="tspan18253">Merkle path (32*m bytes) Control block + id="tspan18255">Control block Witness Program + id="tspan18257">Witness Program SegWit version 3 + id="tspan18259">SegWit version 3 tapleaf tapleaf version + id="tspan18263">version tapleaf tapleaf version + id="tspan18267">version 1 + id="tspan18269">1 { + id="tspan18271">{ { + id="tspan18275">{ P2QRH scriptPubkey (output) + id="tspan18279">P2QRH scriptPubkey (output) How the tapleaf Merkle Root is computed: + id="tspan18283">How the tapleaf Merkle Root is computed: tapleaf + id="tspan18287">tapleaf A + id="tspan18289">A tapleaf tapleaf version + id="tspan18295">version tapleaf + id="tspan18297">tapleaf B + id="tspan18299">B tapleaf tapleaf version + id="tspan18305">version tapleaf + id="tspan18307">tapleaf C + id="tspan18309">C tapleaf tapleaf version + id="tspan18315">version tapleaf + id="tspan18317">tapleaf D + id="tspan18319">D tapleaf tapleaf version + id="tspan18325">version tapleaf + id="tspan18327">tapleaf E + id="tspan18329">E Date: Fri, 4 Jul 2025 18:10:46 -0400 Subject: [PATCH 40/46] Address review --- bip-0360.mediawiki | 7 +-- bip-0360/merkletree.png | Bin 75716 -> 75700 bytes bip-0360/merkletree.svg | 96 ++++++++++++++++++++-------------------- 3 files changed, 52 insertions(+), 51 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 7a28fda132..014da70372 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -204,20 +204,21 @@ Root = tagged_hash("QuantumRoot", ABCDE) A P2QRH input witness provides the following: -script input_0, +initial stack element 0, ..., -script input_N, +initial stack element N, tapleaf script, control block = [control byte, 32 * m byte Merkle path] # m is the depth of the Merkle tree -The script inputs provide the same functionality as they do in P2TR. That is, they place input values on the stack to +The initial stack elements provide the same functionality as they do in P2TR. That is, they place elements on the stack to be evaluated by the tapleaf script, a.k.a. the redeem script. The control block is a 1 + 32 * m byte array, where the first byte is the control byte and the next 32*m bytes are the Merkle path to the tapleaf script. The control byte is the same as the control byte in a P2TR control block, including the 7 bits are used to specify the tapleaf version. The parity bit of the control byte is always 1 since P2QRH does not have a key-spend path. We omit the public key from the control block as it is not needed in P2QRH. +We maintain support for the optional annex in the witness (see specification for more details). === Rationale === diff --git a/bip-0360/merkletree.png b/bip-0360/merkletree.png index ddee29f9d40fdd2a0257b88d7c505a6ab718b990..62c73f3139243ce88ef0a0e88f28f5c53d483472 100644 GIT binary patch delta 73784 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 dP2QRH Witness (input) + id="tspan12545">P2QRH Witness (input) annex + id="tspan12549">annex 50 + id="tspan12553">50 Script Inputs + id="tspan12557">Initial stack Merkle path (32*m bytes) + id="tspan12559">Merkle path (32*m bytes) Control block + id="tspan12561">Control block Witness Program + id="tspan12563">Witness Program SegWit version 3 + id="tspan12565">SegWit version 3 tapleaf tapleaf version + id="tspan12569">version tapleaf tapleaf version + id="tspan12573">version 1 + id="tspan12575">1 { + id="tspan12577">{ { + id="tspan12581">{ P2QRH scriptPubkey (output) + id="tspan12585">P2QRH scriptPubkey (output) How the tapleaf Merkle Root is computed: + id="tspan12589">How the tapleaf Merkle Root is computed: tapleaf + id="tspan12593">tapleaf A + id="tspan12595">A tapleaf tapleaf version + id="tspan12601">version tapleaf + id="tspan12603">tapleaf B + id="tspan12605">B tapleaf tapleaf version + id="tspan12611">version tapleaf + id="tspan12613">tapleaf C + id="tspan12615">C tapleaf tapleaf version + id="tspan12621">version tapleaf + id="tspan12623">tapleaf D + id="tspan12625">D tapleaf tapleaf version + id="tspan12631">version tapleaf + id="tspan12633">tapleaf E + id="tspan12635">E Date: Sat, 5 Jul 2025 16:46:56 -0400 Subject: [PATCH 41/46] Addresses review --- bip-0360.mediawiki | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 014da70372..34ac2fc23f 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -313,8 +313,7 @@ ML-DSA and SLH-DSA could be independently activated. If at some future point ano algorithm was desired it could follow this pattern. We consider two different paths for activating PQ signatures in Bitcoin. The first approach is to redefine OP_SUCCESSx opcodes for each -signature algorithm. For ML-DSA this would give us OP_CHECKMLSIG, OP_CHECKMLSIGVERIFY, OP_CHECKMLSIGADD, OP_CHECKMLMULTISIG -and OP_CHECKMLMULTISIGVERIFY. The second approach is to use a new tapleaf version that changes the OP_CHECKSIG opcodes to support the +signature algorithm. For ML-DSA this would give us OP_CHECKMLSIG, OP_CHECKMLSIGVERIFY and OP_CHECKMLSIGADD. The second approach is to use a new tapleaf version that changes the OP_CHECKSIG opcodes to support the new PQ signature algorithms. In both cases, we would need to include as part of the soft fork an increase in the tapscript stack element size to accommodate the larger signatures and public keys sizes of the PQ signature algorithms. @@ -359,7 +358,7 @@ It is an open question if Post-Quantum signature algorithms can be designed to p ==== Raising tapscript's stack element size ==== A problem faced by any attempt to add PQ signatures to tapscript is that the stack elements in tapscript can not be larger than 520 bytes -because the MAX_SCRIPT_ELEMENT_SIZE=520. This is programmatic because PQ signature algorithms often have signatures and +because the MAX_SCRIPT_ELEMENT_SIZE=520. This is problematic because PQ signature algorithms often have signatures and public keys in excess of 520 bytes. For instance: * ML-DSA public keys are 1,312 bytes and signatures are 2,420 bytes @@ -453,7 +452,7 @@ language verbatim from the [[bip-0341.mediawiki|BIP341]] script validation secti * Fail if the witness stack does not have two or more elements. * If there are at least three witness elements, and the first byte of the last element is 0x50, this last element is called ''annex'' ''a'' and is removed from the witness stack. The annex (or the lack of thereof) is always covered by the signature and contributes to transaction weight, but is otherwise ignored during taproot validation. * There must be at least two witness elements left. -** Call the last stack element ''s'', the script (as defined in [[bip-0341.mediawiki|BIP341]]) +** Call the second-to-last stack element ''s'', the script (as defined in [[bip-0341.mediawiki|BIP341]]) ** The last stack element is called the control block ''c'', and must have length ''1 + 32 * m'', for a value of ''m'' that is an integer between 0 and 128, inclusive. Fail if it does not have such a length. ** Let ''v = c[0] & 0xfe'' be the ''leaf version'' (as defined in [[bip-0341.mediawiki|BIP-341]]). To maintain ''leaf version'' encoding compatibility the last bit of c[0] is unused and must be 1 '''Why set the last bit of c[0] to one?''' Consider a faulty implementation that deserializes the ''leaf version'' as c[0] rather than c[0] & 0xfe for both P2TR and P2QRH. If they test against P2QRH outputs and require that last bit is 1, this deserialization bug will cause an immediate error.. ** Let ''k0 = hashTapLeaf(v || compact_size(size of s) || s)''; also call it the ''tapleaf hash''. @@ -530,8 +529,8 @@ tapleaf script = [size] [OP_PUSHBYTES_32, 32 byte public key, OP_CHECKSIG] (34 + control block = [size] [control byte, 32 * m byte Merkle path] (1 + 1 + 32 * m = 2 + 32 * m bytes) -For a Merkle path of length m, it would add an additional ~32 * m bytes to the P2QRH inputIf the number is large enough we will the compact size will need 2 bytes, increasing the size by 1 byte.. -This would make it 37 + 32 * m bytes larger than a P2TR key-spend input. +For a Merkle path of length m, it would add an additional ~32 * m bytes to the P2QRH input. This would +make it 37 + 32 * m bytes larger than a P2TR key-spend inputIf m >= 8, then the compact size will use 3 bytes rather than 1 byte. Considering a P2QRH output that has a PQ signature tapleaf and a Schnorr tapleaf. The P2QRH witness to spend the Schnorr path would be 103 + 32 * 1 = 135 bytes. It is unfortunate that we can not use the key-spend optimization for P2QRH inputs, but the key-spend optimization is From 5b861b23d29578bd8ff8e36327d8e9e4276f932e Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 7 Jul 2025 09:40:43 -0400 Subject: [PATCH 42/46] Apply suggestions from code review Co-authored-by: Joey Yandle --- bip-0360.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 34ac2fc23f..161566897f 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -184,7 +184,7 @@ remember that these are quantum (r)esistant addresses. This is referencing the l P2QRH (Pay to Quantum Resistant Hash) is a new output type that commits to the root of a tapleaf merkle tree. It is functionally the same as a P2TR (Pay to Taproot) output with the quantum vulnerable key-spend path removed. Since P2QRH has no key-spend path, P2QRH omits the -taptweak public key as it is not needed. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree as defined +taproot internal key as it is not needed. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree as defined in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. [[File:bip-0360/merkletree.png|center|550px|thumb|]] @@ -366,7 +366,7 @@ public keys in excess of 520 bytes. For instance: We will first look at our approach to the problem of PQ signatures and then give our solution for public keys larger than 520 bytes. -To keep P2QRH small and simple we have opted not to raise the stack element size limit as part of P2QRH but instead make this change when +To keep P2QRH small and simple, we have opted not to raise the stack element size limit as part of P2QRH, but instead make this change when adding of PQ signatures. That said, we are not strongly opposed to putting this increase in P2QRH. We propose a stack element size limit of 8,000 bytes. We arrive at 8,000 by rounding up from the needed 7,856 bytes. From a47c41db146a0d68f956f07ac1c55f3239c47f5c Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 7 Jul 2025 09:41:47 -0400 Subject: [PATCH 43/46] Update bip-0360.mediawiki Co-authored-by: Joey Yandle --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 161566897f..891d15ce92 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -357,7 +357,7 @@ It is an open question if Post-Quantum signature algorithms can be designed to p ==== Raising tapscript's stack element size ==== -A problem faced by any attempt to add PQ signatures to tapscript is that the stack elements in tapscript can not be larger than 520 bytes +A problem faced by any attempt to add PQ signatures to tapscript is that the stack elements in tapscript cannot be larger than 520 bytes because the MAX_SCRIPT_ELEMENT_SIZE=520. This is problematic because PQ signature algorithms often have signatures and public keys in excess of 520 bytes. For instance: From 6b0597bf179aac5e5c676fb3f681a9924b6be22f Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 7 Jul 2025 09:42:29 -0400 Subject: [PATCH 44/46] Update bip-0360.mediawiki Co-authored-by: Joey Yandle --- bip-0360.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 891d15ce92..5673b60756 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -269,7 +269,7 @@ is the most plausible and convenient upgrade path to full quantum resistance. ==== PQ signatures ==== -By separating P2QRH from the introduction of PQ signatures relying parties can move from P2TR to P2QRH +By separating P2QRH from the introduction of PQ signatures, relying parties can move from P2TR to P2QRH without simultaneously having to change from Schnorr signatures to PQ signatures. Simply moving coins from P2TR to P2QRH protects those coins from long-exposure quantum attacks. Then to gain full quantum resistance, verification of PQ signatures can be added as an additional tapleaf alongside Schnorr signaturesMatt Corallo, [https://groups.google.com/g/bitcoindev/c/8O857bRSVV8/m/rTrpeFjWDAAJ Trivial QC signatures with clean upgrade path], (2024). From cd1969553499b6a00e336377b2e2bef113263439 Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 7 Jul 2025 09:57:31 -0400 Subject: [PATCH 45/46] Addressing review comments --- bip-0360.mediawiki | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 5673b60756..47754da6f8 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -83,8 +83,9 @@ As the value being sent increases, so too should the fee in order to commit the possible. Once the transaction is mined, it makes useless the public key revealed by spending a UTXO, so long as it is never reused. -It is proposed to implement a Pay to Quantum Resistant Hash (P2QRH) output type that relies on a PQ signature -algorithm. This new output type protects transactions submitted to the mempool and helps preserve the fee market by +As the first step to address these issues we propose Pay to Quantum Resistant Hash (P2QRH), an output type that allows +tapscript to be used in a quantum resistant manner. +This new output type protects transactions submitted to the mempool and helps preserve the fee market by preventing the need for private, out-of-band mempool transactions. The following table is intended to inform the average Bitcoin user whether their bitcoin is vulnerable to a long-exposure @@ -259,10 +260,10 @@ libraries since they can reuse code they already have. Both P2WSH (Pay 2 Witness Script Hash) and P2QRH protect against long-exposure quantum attacks and both provide the same 256-bit security level. One may ask why not use the existing output type P2WSH instead of add a new one? -The problem with P2WSH is that it can only execute pre-tapscript scripts and not tapscript. -New programs in Bitcoin ecosystem have largely moved to tapscript for new scripts. Using P2WSH would require turning +The problem with P2WSH is that it only works with pre-tapscript Script and cannot work with tapscript Script. +New protocols and programs in the Bitcoin ecosystem have largely moved to tapscript. Using P2WSH would require turning back the clock and forcing projects to move from tapscript to pre-tapscript. More importantly, tapscript provides a far -easier and safer upgrade path for adding PQ signatures. Changes to pre-script to enable it to support PQ signatures would likely +easier and safer upgrade path for adding PQ signatures. Changes to pre-tapscript to enable it to support PQ signatures would likely require adding tapscript features into pre-tapscript. Even if this was possible, it would represent far more work and risk than adding a new output type like P2QRH. Tapscript, and thereby a tapscript compatible output such as P2QRH, is the most plausible and convenient upgrade path to full quantum resistance. From 27d67c66dc79bf360778c019cb2e695d24a9fcbb Mon Sep 17 00:00:00 2001 From: Ethan Heilman Date: Mon, 7 Jul 2025 10:54:59 -0400 Subject: [PATCH 46/46] Addressing reviews --- bip-0360.mediawiki | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bip-0360.mediawiki b/bip-0360.mediawiki index 47754da6f8..66a28a08f4 100644 --- a/bip-0360.mediawiki +++ b/bip-0360.mediawiki @@ -186,7 +186,7 @@ remember that these are quantum (r)esistant addresses. This is referencing the l P2QRH (Pay to Quantum Resistant Hash) is a new output type that commits to the root of a tapleaf merkle tree. It is functionally the same as a P2TR (Pay to Taproot) output with the quantum vulnerable key-spend path removed. Since P2QRH has no key-spend path, P2QRH omits the taproot internal key as it is not needed. Instead a P2QRH output is just the 32 byte root of the tapleaf merkle tree as defined - in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341]. +in [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki BIP-341] and hashed with the tag "QuantumRoot" as shown below. [[File:bip-0360/merkletree.png|center|550px|thumb|]] @@ -286,6 +286,9 @@ Consider the P2QRH output with three tapscripts: In the event that Schnorr signatures are broken, users can spend their coins using ML-DSA. If both Schnorr and ML-DSA are broken, the user can still rely on SLH-DSA. +While this pattern allows users to spend their coins securely without revealing the public +keys associated with vulnerable algorithms, the user can compromise their own security if +they leak these public keys in other contexts, e.g. key reuse. One intent in supporting Schnorr, ML-DSA, and SLH-DSA in tapscript, is to allow parties to construct outputs such that funds are still secure even if two of the three the signature algorithms are completely broken. This is motivated by the use case