Skip to content

Commit

Permalink
Merge branch 'v0.11'
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-orlovsky committed Apr 18, 2024
2 parents 7b1ff00 + 40d1551 commit 2273095
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 176 deletions.
41 changes: 7 additions & 34 deletions dbc/src/anchor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,9 @@
//! defined by LNPBP-4.

use std::error::Error;
use std::marker::PhantomData;

use bc::{Tx, Txid};
use bc::Tx;
use commit_verify::mpc::{self, Message, ProtocolId};
use commit_verify::ReservedBytes;
use strict_encoding::{StrictDumb, StrictEncode};

use crate::{DbcMethod, Method, LIB_NAME_BPCORE};
Expand Down Expand Up @@ -69,37 +67,24 @@ pub enum VerifyError<E: Error> {
serde(crate = "serde_crate", rename_all = "camelCase")
)]
pub struct Anchor<L: mpc::Proof + StrictDumb, D: dbc::Proof<M>, M: DbcMethod = Method> {
/// Bytes reserved for enum tag for the future versions of anchors.
pub reserved1: ReservedBytes<1>,

/// Transaction containing deterministic bitcoin commitment.
pub txid: Txid,

/// Bytes reserved for the optional SPV information.
pub reserved2: ReservedBytes<1>,

/// Structured multi-protocol LNPBP-4 data the transaction commits to.
pub mpc_proof: L,

/// Proof of the DBC commitment.
pub dbc_proof: D,

#[doc(hidden)]
#[strict_type(skip)]
pub _method: PhantomData<M>,
/// Method used by the anchor
pub method: M,
}

impl<L: mpc::Proof + StrictDumb, D: dbc::Proof<M>, M: DbcMethod> Anchor<L, D, M> {
/// Constructs anchor for a given witness transaction id, MPC and DBC
/// proofs.
pub fn new(witness_txid: Txid, mpc_proof: L, dbc_proof: D) -> Self {
pub fn new(mpc_proof: L, dbc_proof: D) -> Self {
Self {
reserved1: default!(),
txid: witness_txid,
reserved2: default!(),
mpc_proof,
dbc_proof,
_method: PhantomData,
method: D::METHOD,
}
}
}
Expand All @@ -113,9 +98,6 @@ pub enum MergeError {
#[from]
MpcMismatch(mpc::MergeError),

/// anchors can't be merged since they have different witness transactions
TxidMismatch,

/// anchors can't be merged since they have different DBC proofs
DbcMismatch,
}
Expand All @@ -130,12 +112,9 @@ impl<D: dbc::Proof<M>, M: DbcMethod> Anchor<mpc::MerkleProof, D, M> {
let lnpbp4_proof =
mpc::MerkleBlock::with(&self.mpc_proof, protocol_id.into(), message.into())?;
Ok(Anchor {
reserved1: self.reserved1,
txid: self.txid,
reserved2: self.reserved2,
mpc_proof: lnpbp4_proof,
dbc_proof: self.dbc_proof,
_method: default!(),
method: self.method,
})
}

Expand Down Expand Up @@ -192,12 +171,9 @@ impl<D: dbc::Proof<M>, M: DbcMethod> Anchor<mpc::MerkleBlock, D, M> {
) -> Result<Anchor<mpc::MerkleProof, D, M>, mpc::LeafNotKnown> {
let lnpbp4_proof = self.mpc_proof.to_merkle_proof(protocol.into())?;
Ok(Anchor {
reserved1: self.reserved1,
txid: self.txid,
reserved2: self.reserved2,
mpc_proof: lnpbp4_proof,
dbc_proof: self.dbc_proof,
_method: default!(),
method: self.method,
})
}

Expand All @@ -211,9 +187,6 @@ impl<D: dbc::Proof<M>, M: DbcMethod> Anchor<mpc::MerkleBlock, D, M> {

/// Merges two anchors keeping revealed data.
pub fn merge_reveal(mut self, other: Self) -> Result<Self, MergeError> {
if self.txid != other.txid {
return Err(MergeError::TxidMismatch);
}
if self.dbc_proof != other.dbc_proof {
return Err(MergeError::DbcMismatch);
}
Expand Down
9 changes: 4 additions & 5 deletions seals/src/txout/witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,8 @@ use std::marker::PhantomData;

use bc::{Tx, Txid};
use commit_verify::mpc;
use dbc::{Anchor, DbcMethod, Method};
use dbc::{DbcMethod, Method};
use single_use_seals::SealWitness;
use strict_encoding::StrictDumb;

use crate::txout::{TxoSeal, VerifyError};
use crate::SealCloseMethod;
Expand All @@ -50,11 +49,11 @@ pub struct Witness<D: dbc::Proof<M>, M: DbcMethod = Method> {
impl<D: dbc::Proof<M>, M: DbcMethod> Witness<D, M> {
/// Constructs witness from a witness transaction and extra-transaction
/// proof, taken from an anchor.
pub fn with<L: mpc::Proof + StrictDumb>(tx: Tx, anchor: Anchor<L, D, M>) -> Witness<D, M> {
pub fn with(tx: Tx, dbc: D) -> Witness<D, M> {
Witness {
txid: tx.txid(),
tx,
txid: anchor.txid,
proof: anchor.dbc_proof,
proof: dbc,
_phantom: default!(),
}
}
Expand Down
14 changes: 7 additions & 7 deletions src/stl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,20 @@ use strict_types::{CompileError, LibBuilder, TypeLib};
/// Strict types id for the library providing data types from [`dbc`] and
/// [`seals`] crates.
pub const LIB_ID_BPCORE: &str =
"urn:ubideco:stl:9pKFs7Gw7gwerYGVcPCDqiCv5fa165qC6PvFxiotJjaG#rebel-herbert-tourist";
"urn:ubideco:stl:C5EbVby4rry8esHwoPrGUfhe7yqJgoyA1DBcyuBRf2rZ#granite-target-table";

fn _bp_core_stl() -> Result<TypeLib, CompileError> {
LibBuilder::new(libname!(LIB_NAME_BPCORE), tiny_bset! {
strict_types::stl::std_stl().to_dependency(),
bc::stl::bp_tx_stl().to_dependency(),
commit_verify::stl::commit_verify_stl().to_dependency()
})
.transpile::<dbc::Anchor<mpc::MerkleTree, OpretProof, Method>>()
.transpile::<dbc::Anchor<mpc::MerkleBlock, OpretProof, Method>>()
.transpile::<dbc::Anchor<mpc::MerkleProof, OpretProof, Method>>()
.transpile::<dbc::Anchor<mpc::MerkleTree, TapretProof, Method>>()
.transpile::<dbc::Anchor<mpc::MerkleBlock, TapretProof, Method>>()
.transpile::<dbc::Anchor<mpc::MerkleProof, TapretProof, Method>>()
.transpile::<dbc::Anchor<mpc::MerkleTree, TapretProof>>()
.transpile::<dbc::Anchor<mpc::MerkleBlock, TapretProof>>()
.transpile::<dbc::Anchor<mpc::MerkleProof, TapretProof>>()
.transpile::<dbc::Anchor<mpc::MerkleTree, OpretProof>>()
.transpile::<dbc::Anchor<mpc::MerkleBlock, OpretProof>>()
.transpile::<dbc::Anchor<mpc::MerkleProof, OpretProof>>()
.transpile::<seals::txout::ExplicitSeal<TxPtr, Method>>()
.transpile::<seals::txout::ExplicitSeal<Txid, Method>>()
.transpile::<seals::SecretSeal>()
Expand Down
3 changes: 0 additions & 3 deletions stl/Anchor.MerkleBlock.Tapret.vesper
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
AnchorMerkleBlockTapretProof rec
reserved1 bytes len=1 aka=ReservedBytes1
txid bytes len=32 aka=Txid
reserved2 bytes len=1 aka=ReservedBytes1
mpcProof rec MerkleBlock
depth enum {
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
Expand Down
3 changes: 0 additions & 3 deletions stl/Anchor.MerkleProof.Tapret.vesper
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
AnchorMerkleProofTapretProof rec
reserved1 bytes len=1 aka=ReservedBytes1
txid bytes len=32 aka=Txid
reserved2 bytes len=1 aka=ReservedBytes1
mpcProof rec MerkleProof
pos is U32
cofactor is U16
Expand Down
3 changes: 0 additions & 3 deletions stl/Anchor.MerkleTree.Opret.vesper
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
AnchorMerkleTreeOpretProof rec
reserved1 bytes len=1 aka=ReservedBytes1
txid bytes len=32 aka=Txid
reserved2 bytes len=1 aka=ReservedBytes1
mpcProof rec MerkleTree
depth enum {
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
Expand Down
3 changes: 0 additions & 3 deletions stl/Anchor.MerkleTree.Tapret.vesper
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
AnchorMerkleTreeTapretProof rec
reserved1 bytes len=1 aka=ReservedBytes1
txid bytes len=32 aka=Txid
reserved2 bytes len=1 aka=ReservedBytes1
mpcProof rec MerkleTree
depth enum {
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
Expand Down
133 changes: 53 additions & 80 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
-----BEGIN STRICT TYPE LIB-----
Id: urn:ubideco:stl:9pKFs7Gw7gwerYGVcPCDqiCv5fa165qC6PvFxiotJjaG#rebel-herbert-tourist
Id: urn:ubideco:stl:6skrch4mJzDzVaTYnCgCxFJLw23SSUxNhK7PKgPdSapR#roof-parent-reunion
Name: BPCore
Dependency: 7EpM1uymEteG4g4xmF5ntKYX1wXXpbQj5iLiDreH4jWa#protein-donald-cool
Dependency: DzTvt9gGhPUKD8Dkkjk9PDBhkJ4gtWxXWQjxnmUYLNrs#voyage-kimono-disco
Dependency: HX2UBak8vPsTokug1DGMDvTpzns3xUdwZ7QJdyt4qBA9#speed-atlanta-trilogy
Checksum-SHA256: f7bced17d414c08d760e039a06c43277e985cc1fba332ddfe415af8a36008cb3
Checksum-SHA256: f0890e90f6a52f1697d3a4dc5aaeb8b1d758afb15e825d2d8ea2cbe275c49196

20~CnZ*pY=T(C5e*2&|@7ZL8K8p|GAt|gDDdvc%!k2x;ddcL`H3`1{iZE18?WpZg
|dBFtCMqVsrZe&e(V->r|?y|b&t*2isXxNhAA_oAshyzn}Wc6$lVk7oBr%DNv+($
Expand All @@ -15,88 +15,61 @@ a87SzWk_LjXkV<^ZRI~s#T41Gjc0(`3ajfaCJX&HEu+ACq+L0mO$tn9VP;cfa%pg
Mqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B1XOrwWT}OOcT=8d`>?<6$C@
F;S3|*6`1-v+nBdcqJ?FPKcnV2wbY*gGVQf%qwlfK-7{9iX4Q|L-q$GzUMp|h<az
h8d{~gylbAe9D2TWyQW>#f#{Gz8SzLEaTf~c{WkYggkPIjuQHS#3Ua|L6d7%qre2
Ut&TY<W;?3`1{iZE18?WpZg|c?bXqR`-7%<v!(6CSPt8P+`uam~C7&J!(5--hXnL
Ut&TY<W;?3`1{iZE18?WpZg|c?SRpR`-7%<v!(6CSPt8P+`uam~C7&J!(5--hXnL
)^zd;O=WUxY-Ln(Wo0mxe&!uvG+Da^2;||fJ!&Dp*8BS%F@mRg<wbPhR<R0Da&L5
RV{dFpWHmRbQ5DGQh1^p2tAX-yWl;qtQ<OqiuZa`rd(@k;(+5pub8}&5WjLNgh9?
yTI7S;;e;>sZfv!yd427@;7veO2zMB=|GYU;*a%*g5NMUnmT+QYFd;Umr-dgNEFC
uu*?Wk)@WS(Jw`th(K{eY_63r%HmYiwmgY;R+0h0#5^R?l+2>x*OcO&#*^E;5@PQ
20HKbE5LJk_Il(3r%HmYiwmua&K>DllNeFa6}P}rq7L!(40)FbL%msz%JU8hqvFy
oea2o4pL=vWpZ|9WI}m#WpgpuwYiq_Rlwao{(T?aUNqayF^88E^#IUpx^^~;)zDW
6RB~lyPH$vo15<Ql0RU!LaM+Gq(Fu_0Ocz)^+@GUUoV7w&pu=F9->y0X3z7m=H4*
?DL2hGcZ*om#a%*g5LTqniYfo@;Wpq$-Z*OJ>1qpIxb7gXNWn?h|T(C5e*2&|@7Z
L8K8p|GAt|gDDdvc%!k2x;ddcL`HllNeFa6}P}rq7L!(40)FbL%msz%JU8hqvFyo
ea2o1ax?5WCHbU6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VaL=Li5Yl(a@n1
+Ku60FILp}Zw|!7cE!MGSxid=WmXAtWpib6c4cHT0$i{(k=DuM$QKdrry9#1TdpO
Kse5vu1&=u{+IqgZbCdUAcyL4!ji%3ykI<Y<s&nfxrNA!QlZUt8$DItgdI)WBV^D
H$Z)O5qur!g@$>Ycu5$>lN%N|><C6B3la-ao|IWF3IzPWQ;&E@`k{z!7(TI@Y9B6
!g4sB24Po?(Fc@vtHNfU4XGWMX4ba&K>D0Y^^HT+rxDK6vW;JU&?LxLM72H?wDC1
Zo}=N}D)4mmEQEV`y)3O=WUxY-K`hZ)0mzVQ_L~bWn0{Z)OGs336p~WpZ|9WHAC<
ur!g@$>Ycu5$>lN%N|><C6B3la-ao|IWF3IzPWRg_h5K%L=laq&yA1JoJ^{7>oKL
kF4~iax8KK|47hp(ba-iG0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3Zs
HT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1Rta)tb7gXNWn?k}T(C5e*2&|@7Z
L8K8p|GAt|gDDdvc%!k2x;ddcL`HllNeFa6}P}rq7L!(40)FbL%msz%JU8hqvFyo
ea2o2yJj<P;zf?W&&KWG?CWH<H#2g?xz~d9$T&@kEwfdpaqXPF4}s&xpQ32<^FsA
NOIm<>^(0cc+l;rYfEIFVSxJaup#|`s@w=<Vq;KpZ*OJ+54IneKN{_;j(f`H9Ifk
FzO$PG<c0G$nQ(}f*%Js18$oVkXm4^&WpZn5Wl(Z&Z)Q($a%FT-a&K>D1_cRnWpi
b6c4cHS0$i{(k=DuM$QKdrry9#1TdpOKse5vu1&=u{+IqgZbCdUAcyL4!ji%3ykI
<Y<s&nfxrNA!QlZUt8$DItgdIWTMX=DQRY!hN5_Bp3Y36tDMM#=e#tGI($UA5U3K
Nx<*C>jc*f<p7l*U`|S655U7U@unG_-_ux#CFBNXjx241Z7qUa%FR6a&~28G6Gz%
G?CWH<H#2g?xz~d9$T&@kEwfdpaqXPF4}s&xpR~EV0dsu5sjwLjgQcrOsaG1F{Qv
R+LMR3-^ZN{xOxa}aAQz%Z*OJ-T(C5e*2&|@7ZL8K8p|GAt|gDDdvc%!k2x;ddcL
`Hh0#5^R?l+2>x*OcO&#*^E;5@PQ20HKbE5LJk_Il(2xMYoP;zf?W&uY|&s@;xOg
?z(`#e5a?6_IYcQ><VWCUs+6H1#nJC__mZewU~a!qA&Yiwmua&K>DRAF#(Wpq$-Z
*OJ>1qpIxb7gXNWn?h|T(C5e*2&|@7ZL8K8p|GAt|gDDdvc%!k2x;ddcL`HllNeF
a6}P}rq7L!(40)FbL%msz%JU8hqvFyoea2o1ax?5WCHbU6JjIwIj2eqliWu}$@z+
_xPw?-wb>Rw7=FYk8VaL=Li5Yl(a@n1+Ku60FILp}Zw|!7cE!MGSxid=WmXAtWpi
b6c4cHT0$i{(k=DuM$QKdrry9#1TdpOKse5vu1&=u{+IqgZbCdUAcyL4!ji%3ykI
<Y<s&nfxrNA!QlZUt8$DItgdI)WBV^DH$Z)O5qur!g@$>Ycu5$>lN%N|><C6B3la
-ao|IWF3IzPWRS(LK3V&vL%&i(~ao9rExlGMgPx_&tqtqVlwo1}@PEWMX4ba&K>D
0S~qxm_HirtB!lh<{Yi-S-!KI0_27BH<@sVme~^s3>rahV`y)3O=WUxY-Ln(Wo1u
ra%FT-a&K>D1_cRnWpib6c4cHS0$i{(k=DuM$QKdrry9#1TdpOKse5vu1&=u{+Iq
gZbCdUAcyL4!ji%3ykI<Y<s&nfxrNA!QlZUt8$DItgdIWTMX=DQRY!hN5_Bp3Y36
tDMM#=e#tGI($UA5U3KNx<*C>jc*f<p7l*U`|S655U7U@unG_-_ux#CFBNXjx241
Z7qUa%FR6a&~28G6Gz%G?CWH<H#2g?xz~d9$T&@kEwfdpaqXPF4}s&xpR~EV0dsu
5sjwLjgQcrOsaG1F{QvR+LMR3-^ZN{xOxa}aAQz%Z*OJ-T(C5e*2&|@7ZL8K8p|G
At|gDDdvc%!k2x;ddcL`H2v+xh9_2peQ6^t*6i{K#qnK@6H9cxOWZr*rnbvgj2xM
YoP;zf?W&uY|&s@;xOg?z(`#e5a?6_IYcQ><VWCUs+6H1#nJC_?lZewU~a!qA&Yi
wmya%E*yVQ_L~bWn0{Z)OGs336p~WpZ|9WHAC<ur!g@$>Ycu5$>lN%N|><C6B3la
-ao|IWF3IzPWRg_h5K%L=laq&yA1JoJ^{7>oKLkF4~iax8KK|47hp(ba-iG0`+VY
Vk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQ
E#lUD;OiKi1Rta)tb7gXNWn?k}T(C5e*2&|@7ZL8K8p|GAt|gDDdvc%!k2x;ddcL
`HllNeFa6}P}rq7L!(40)FbL%msz%JU8hqvFyoea2o2yJj<P;zf?W&&KWG?CWH<H
#2g?xz~d9$T&@kEwfdpaqXPF4}s&xpN3s_kSMcKIKs+Uv3moVa}tNZCo`yYCB}!e
{z}Dbn*yfVq;KpZ*OJ+54IneKN{_;j(f`H9IfkFzO$PG<c0G$nQ(}f*%Js14nk~c
Ze&wsVQf@*P;_zz1O{zobZBp60WP-?CAn^87TS9h9ibhaZ&^Bcn*B*;w|~I;-PD|
t>jZRoX=DMh<v2MM3OK&-ZyL|O9AKqy;o<ascnBzYztQ^B5Fy<Jc5iib0`+VYVk7
oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3L)b@L&d6G@+l`%qd385?K@+fP1(-9sg
E>i7rMzqbqHc?X>Md`Zf5`h2n|APX>MdwWnpYocxhw?1O{zobZBp60WP-?CAn^87
TS9h9ibhaZ&^Bcn*B*;w|~I;-PD|t>jZRoX=DQRY!hN5_Bp3Y36tDMM#=e#tGI($
UA5U3KNx<*C>jc*f<p7l*U`|S655U7U@unG_-_ux#CFBNXjx241Z7qPc5iib0`+V
YVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3L)b@L&d6G@+l`%qd385?K@+fP1(
-9sgE>i7rMzqbqHc?X>Md`Zf5`h2oXhiaBOK~X>?O%VQf@*P;_zz0|sqnbZBp60W
P-?CAn^87TS9h9ibhaZ&^Bcn*B*;w|~I;-PD|t>jZRoX=DMh<v2MM3OK&-ZyL|O9
AKqy;o<ascnBzYztQ^B5Fy<Jc5iib0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-
e#9sm3L)b@L&d6G@+l`%qd385?K@+fP1(-9sgE>i7rMzqbr3~(aBOK~X>?O%VQf@
*X=DZi25n_@Xm4ZzF1HXRxo%|^+Itiop&gxXSvq){{YhrGf57_P)SQy*1ax?5WCH
bU6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VaL=Li5Yl(a@n1+Ku60FILp}Zw
|!7cE!MGSxid=WmW`sZ*_D6^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jHA
>%$n#j0HLDJN5-IKgM_J7b(p+0MPGk2Gl)y2(Rz22EvjXm4Z#0t#<%a%FTzX>xOP
01I?saB^jIMrm?$bO8!aaB^jIP;zf?W(5HN000V8Wn*$>bW>$vYy|-T2LJ#-AOI0
mVQ_L~bWU$%Wl&*qbZ%vG1OosFY-MJ2PH$vo00jX8^=uPjBlbC`N(qzPM@Gr{imS
MTSY5T*7C#t%#3&jHF}tqlgo$^>um>@6G0l?pFt#Zz&53{9y57aQ#OZ(80SR(xXJ
~XxWnpFj1pxx}Y!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>jc1tl4elKTgFI*
|CjhfZ7VH>n$b={WmS6z<Q)zIiF1e3vy{^XmmnyVQyn+00jX7I6q=8aZ}RBA(1@G
cO9QSWZ!o3C{<Z4_(nsN7ENsh4^&}ra%FT-VRUFva&K>D1_BFkVRCeCWpYk$WMu#
Z0ssVVZ*FA(00035b8l^B00jX70elBt06<F?m6#hB!(lDPxazJAe{fl1k`{GZ<r$
L^1#WL{V`TsU0Si=NaB^jIP;zf?W(EQYaA9<4P;zf?W&sn#Q&MIpyF?|7J7@IF!h
Zhz<R`b!UJw0&k1u|E*nA3UZggdGZeeUtYXbFb6JjIwIj2eqliWu}$@z+_xPw?-w
b>Rw7=FYk8Vad}gm+V(X#23g?#G%T#8*SXRQUS6KbYXtkv-?PH+T_LVQ_L~bW&+&
XmmnyVQyn+1_BIhWoC3vZ)9aiVRL8#^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t
%#3&jHF}tqlgo$^>um>@6G0l?pFt#Zz&53{9y57aQ#OZ(84RUE`Xmn0*WMxQUb7%
tfY!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>jbeyRPVjiFd`Y2QhLn&64&owk
a*miGSR>-o?7a>3`V;RCrKyas&bZ33q99Ze??GRCoXY009Jacxhw+1pxx}Y!hN5_
Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>jc*f<p7l*U`|S655U7U@unG_-_ux#CFBN
Xjx241Z7q
20HKbE5LJk_Il(3r%HmYiwmua&K>D*tNNq^HspzKK^|l-Ci`?%`u0U6ZHVlY`S(f
i`CFq2vl-qWlnEoWdl=mWB~wXSa8^mT+s=T=}Z?`J=~w8Q=GLzSfImTncuED0}GM
@RW%X-8$oVkXm4^&WpZn5WkPIkV{1=va%FT-a&K>D1_B6eaAQz%Z*OJ-T(C5e*2&
|@7ZL8K8p|GAt|gDDdvc%!k2x;ddcL`HT+QYFd;Umr-dgNEFCuu*?Wk)@WS(Jw`t
h(K{eY_62xMYoP;zf?W&uY|&s@;xOg?z(`#e5a?6_IYcQ><VWCUs+6H1#nJC__mZ
ewU~a!qA&YiwmgY;R+0RAF#(Wpq$-Z*OJ>0tjtzV^DH$Z)O5qur!g@$>Ycu5$>lN
%N|><C6B3la-ao|IWF3IzPWQ;&E@`k{z!7(TI@Y9B6!g4sB24Po?(Fc@vtHNfU4X
GWMX4ba&K>D0S~qxm_HirtB!lh<{Yi-S-!KI0_27BH<@sVme~^s3>!giV`y)3O=W
UxY-Lb#Z*OK#aB^jIP;zf?W(EQXZE#~ya&K>D0$i{(k=DuM$QKdrry9#1TdpOKse
5vu1&=u{+IqgZbA{18xmM3|zUzx)^-Ue}@Gdf&9Z>i^jdP;%w2}rc(FkN>V^DH$Z
)O2UPS0G>=uAF%>iaxCSnRl2&38AmXJiCw9urENI6IddL2hGcZ*om#a%*g5P;zf?
W>jHta%FT-a&K>D1_B6eaAQz%Z*OJ-T(C5e*2&|@7ZL8K8p|GAt|gDDdvc%!k2x;
ddcL`Hh0#5^R?l+2>x*OcO&#*^E;5@PQ20HKbE5LJk_Il(2xMYoP;zf?W&sbjADB
NH?W>M^%H|xc>sh|Dn*!v8^Ea7rh?dzC2n-rQZewU~a!qA&Yiwmya%E*taB^jIP;
zf?W(EQXZE#~ya&K>D0$i{(k=DuM$QKdrry9#1TdpOKse5vu1&=u{+IqgZa|l-Ve
;(yN<xwVIZWK^q&ZC%ZTs1vvJ7nH}a+%h2@(5&NV^DH$Z)O2UPS0G>=uAF%>iaxC
SnRl2&38AmXJiCw9urENI6IdcL2hGcZ*om#a%*g5RB~lyRAF#(Wpq$-Z*OJ>0tjt
zV^DH$Z)O5qur!g@$>Ycu5$>lN%N|><C6B3la-ao|IWF3IzPWP<R`-7%<v!(6CSP
t8P+`uam~C7&J!(5--hXnL)^zd+WMX4ba&K>D0S~qxm_HirtB!lh<{Yi-S-!KI0_
27BH<@sVme~^s3=TqUX>MdwWnpYocu;h51_TCeWprq7WC1R>5GA>8Wft0d6dj=*o
o`t>c$)o5X19O9`rXu=lIsL?cxhw-vE?{96bd-L@NXK=z8qksZ{gweeRv2cdB4&6
(-0xu1a@zAbOQBk6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VVufK10Q-T=FR
=Q=>S+XYD&<oK4xzy{V5hX&1W5Lv;vZY-w&}X>Ml#00<32Y-w&}Q)OXnRCsA*1_T
CeWprq7WC1R>5GA>8Wft0d6dj=*oo`t>c$)o5X19O9`rXu=lIsL?cxhw;^=uPjBl
bC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jHqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz
-U=aO9W+B1a@zAbOQBk6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VVufK10Q-
T=FR=Q=>S+XYD&<oK4xzy{V5hX&1W5Lv;vZY-w&}X>Ml#00<F9cyMfKV`+3#WnpY
ocu;h51_K6dWprq7WC1R>5GA>8Wft0d6dj=*oo`t>c$)o5X19O9`rXu=lIsL?cxh
w-vE?{96bd-L@NXK=z8qksZ{gweeRv2cdB4&6(-0xu1a@zAbOQBk6JjIwIj2eqli
Wu}$@z+_xPw?-wb>Rw7=FYk8VVufK10Q-T=FR=Q=>S+XYD&<oK4xzy{V5hX&1W5L
v;{EcyMfKV`+3#WnpYocxhw?0|sqnbZBp60WP-?CAn^87TS9h9ibhaZ&^Bcn*B*;
w|~I;-PD|t>jZRoX=DQRY!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>jc*f<p7
l*U`|S655U7U@unG_-_ux#CFBNXjx241Z7qPc5iib0`+VYVk7oBr%DNv+($;q`HH
K!gIHa)*%m(-e#9sm3L)b@L&d6G@+l`%qd385?K@+fP1(-9sgE>i7rMzqbp}mkbZ
Bp60|E+faB^jIMrm?$bN~x<VQ_L~bVg}%b94a;PjGT&bWn0{Z)ODn0000AQ)OdvW
pq<zVQd8f00#g7Kp+4SRAF#(Wpqw&WMxoca&&HGas&ea2yA6$bWU$%WdH>M0`+VY
Vk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3NgE`=!A)P#jpo4axu-4_As_7EzOC
4+`8Vyy2R;!*#QZ1X=iA3Ol4ta00jX8^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#
t%#3&jHU#!_}<v&iv6xp$jXMoxYtLrT$3;j1OqriHkT{)jk0t<3!XJ~Xna$#;`Xa
EHP0XRQmE^$-R$RUwD%Xb~0J!Ic@@+ehVE%-)5lom~G1rJnVaB^jIP+@dvP;zf?W
(EQaaA9(EZe?;#Z)9Zv1OfmAZf|a7000011aog~WdH>M0RemmT>wB!7L}MA7sFvK
#<=RP4S#T1Vv-hhTICs&5e05<ZewKt009eBVQ_L~bWn0{Z)OGp32<R_Xi#!*Z)O1
##8XmcC%Z%?j5}xa%));D{NyLM&t4DxfsZeKd)RymX>N37a&BR4P-_D9Y!hN5_Bp
3Y36tDMM#=e#tGI($UA5U3KNx<*C>jc>g@kugo@o29zwXDHA;ech!BqJAy+4@X(~
&*rw>NkZRAF#(Wpq+$XJ~Xna$#;`Xa)idY-MJ2PH$voNMUnm0`+VYVk7oBr%DNv+
($;q`HHK!gIHa)*%m(-e#9sm3NgE`=!A)P#jpo4axu-4_As_7EzOC4+`8Vyy2R;!
*$r}OXJ~XzZ)9aiVRL8#^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jHF}tq
lgo$^>um>@6G0l?pFt#Zz&53{9y57aQ#OZ(81yp!YbaDg&010<#bZ%vHb5wW$000
35ba-iG00jX8^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jHqk=;7%h%D+p%
U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B

-----END STRICT TYPE LIB-----

Binary file modified stl/[email protected]
Binary file not shown.
Loading

0 comments on commit 2273095

Please sign in to comment.