PNG  IHDRxsBIT|d pHYs+tEXtSoftwarewww.inkscape.org<,tEXtComment File Manager

File Manager

Path: /home/u491334613/domains/web-default.net/public_html/vendor/bitwasp/bitcoin/doc/

Viewing File: Transaction.md

# Transactions

 The library has classes for the transaction primitives in Bitcoin:
 
## Structures

### OutPoint
 OutPoints wrap a Buffer of the transaction ID, and the vout index that is to be spent. 
```php
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Transaction\OutPoint;

$txid = Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1');
$vout = 0;
$outpoint = new OutPoint($txid, $vout);
```
 
### TransactionInput
 TransactionInputs consist of an OutPoint, the scriptSig, and a sequence number. 
 The $script has a default value of null, where an empty script will be used.  
 The $sequence has a default value of TransactionInput::SEQUENCE_FINAL (0xffffffff)
 
```php
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Transaction\OutPoint;
use BitWasp\Bitcoin\Script\Script;
use BitWasp\Bitcoin\Transaction\TransactionInput;

$txid = Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1');
$vout = 0;
$outpoint = new OutPoint($txid, $vout);

$sequence = TransactionInput::SEQUENCE_FINAL;
$script = new Script();
$input = new TransactionInput($outpoint, $script, $sequence);
```

The TransactionInput class derives it's methods from TransactionInputInterface:
[../src/Transaction/TransactionInputInterface.php]

### TransactionOutput
```php
use BitWasp\Bitcoin\Script\Script;
use BitWasp\Bitcoin\Transaction\TransactionOutput;

$value = 100000000; /* amounts are satoshis */
$script = new Script();
$output = new TransactionOutput($value, $script);
```

The TransactionOutput class derives it's methods from TransactionOutputInterface:
[../src/Transaction/TransactionOutputInterface.php]

### Transaction
```php
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Script\Script;
use BitWasp\Bitcoin\Transaction\OutPoint;
use BitWasp\Bitcoin\Transaction\Transaction;
use BitWasp\Bitcoin\Transaction\TransactionInput;
use BitWasp\Bitcoin\Transaction\TransactionOutput;

$txid = Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1');
$vout = 0;
$outpoint = new OutPoint($txid, $vout);
$input = new TransactionInput($outpoint, new Script());

$value = 100000000; /* amounts are satoshis */
$scriptPubKey = new Script();
$output = new TransactionOutput($value, $scriptPubKey);

$transaction = new Transaction(
    1, /* version */
    [$input], /* vTxIn */
    [$output], /* vTxOut */
    [], /* vWit */
    0 /* locktime */
);
```

## Transaction Builder

 The library has a simplified interface for creating transactions. The TransactionBuilder
 is used to create unsigned transactions, or simply to create a transaction from an API response. 
 
 An input can be added to the transaction using:
 
   `TxBuilder::input()` - providing the txid string, and vout index, along with a script (default is empty), and sequence (default is MAX)
   
   `TxBuilder::inputs()` - by providing an array of `TransactionInputInterface`
   
   `TxBuilder::spendOutPoint()` - which takes an OutPoint, and optionally a script and sequence.
   
   `TxBuilder::spendOutPointFrom()` - which takes a transaction, and a vout index, and optionally a script and sequence
  
 An output can be added using:
  `TxBuilder::output()` - providing a value, and a script.
  `TxBuilder::payToAddress()` - providing a value, and an AddressInterface
  `TxBuilder::outputs()` - providing an array of `TransactionOutputInterface`
  
 Witness data can be added using:
  `TxBuilder::witnesses()` - providing an array of `ScriptWitnessInterface` 
  
```php
use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Transaction\TransactionFactory;
use BitWasp\Bitcoin\Script\Script;
use BitWasp\Bitcoin\Locktime;

$math = Bitcoin::getMath();
$lockTime = new Locktime($math);
$scriptPubKey = new Script();

$transaction = TransactionFactory::build()
    ->version(1)
    ->input('abcdb7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1eabcd', 0)
    ->output(1500000, $scriptPubKey)
    ->payToAddress(1500000, \BitWasp\Bitcoin\Address\AddressFactory::fromString('1DUzqgG31FvNubNL6N1FVdzPbKYWZG2Mb6'))
    ->lockToBlockHeight($lockTime, 400000)
    ->get();
```
 
## Transaction Signer

 Transactions can be signed using `BitWasp\Bitcoin\Transaction\Factory\Signer`
 
 This class handles P2SH and witness transactions or plain output scripts, but only
 if the actual script type is a pay-to-pubkey, pay-to-pubkey-hash, or multisig script. 
 
 The transaction to-be-signed must be passed via the constructor. Signatures will be extracted wherever a full set is found.
  
 Sign is the only method in this class. `$nInput`, `$key`, and `$txOut` are always required. 
 Signing should be viewed as a generic operation, where a known scriptPubKey is solved by a key. 
 In all cases, the key and output script are provided. 
  
 Signing a plain output script (including Witness V0 KeyHash) will not require any additional parameters. 
 Signing a Witness V0 ScriptHash: the witness script must be provided 
 Signing a P2SH output: the redeem script must be provided
 P2SH and Witness scripts can be used together, in which case, the witness & redeem script must both be provided. 
 
 It should be noted that a transaction can *always* be validated, but signing requires code specific to the script type. 
 While the above listed types are supported, others will require modification to the InputSigner.
 
 InputSigners are managed by the Signer, but they have some important responsibilities:
  - Extracting signatures for supported types
  - Signing supported types
  - Re-serializing the scriptSig and scriptWitness fields
 
### Simple output script: pay to pubkey hash
```php
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Transaction\OutPoint;
use BitWasp\Bitcoin\Transaction\TransactionOutput;
use BitWasp\Bitcoin\Transaction\TransactionFactory;
use BitWasp\Bitcoin\Transaction\Factory\Signer;
use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Key\PrivateKeyFactory;

$privateKey = PrivateKeyFactory::fromWif('5Hwig3iZrm6uxS6Ch1egmJGyC89Q76X5tgVgtbEcLTPTx3aW5Zi');

// Utxo is: outpoint.txid, outpoint.vout, txout.scriptPubKey, txout.amount
$outpoint = new OutPoint(Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1'), 0);
$outputScript = ScriptFactory::scriptPubKey()->payToPubKeyHash($privateKey->getPubKeyHash());
$amount = 1501000;
$txOut = new TransactionOutput($amount, $outputScript);

$transaction = TransactionFactory::build()
    ->spendOutPoint($outpoint)
    ->payToAddress(1500000, \BitWasp\Bitcoin\Address\AddressFactory::fromString('1DUzqgG31FvNubNL6N1FVdzPbKYWZG2Mb6'))
    ->get();

$ec = \BitWasp\Bitcoin\Bitcoin::getEcAdapter();
$signed = (new Signer($transaction, $ec))
    ->sign(0, $privateKey, $txOut)
    ->get();
```

### P2SH: 1 of 2 multisig
```php
$privateKey = PrivateKeyFactory::fromWif('5Hwig3iZrm6uxS6Ch1egmJGyC89Q76X5tgVgtbEcLTPTx3aW5Zi');
$privateKey2 = PrivateKeyFactory::create();

// Utxo is: outpoint.txid, outpoint.vout, txout.scriptPubKey, txout.amount
$outpoint = new OutPoint(Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1'), 0);

$redeemScript = ScriptFactory::p2sh()->multisig(1, [$privateKey->getPublicKey(), $privateKey2->getPublicKey()]);
$outputScript = $redeemScript->getOutputScript();

$amount = 1501000;
$txOut = new TransactionOutput($amount, $outputScript);

$transaction = TransactionFactory::build()
    ->spendOutPoint($outpoint)
    ->payToAddress(1500000, \BitWasp\Bitcoin\Address\AddressFactory::fromString('1DUzqgG31FvNubNL6N1FVdzPbKYWZG2Mb6'))
    ->get();

$ec = \BitWasp\Bitcoin\Bitcoin::getEcAdapter();
$signed = (new Signer($transaction, $ec))
    ->sign(0, $privateKey, $txOut, $redeemScript)
    ->get();
```

### Witness V0 ScriptHash: 1 of 2 multisig
```php
use BitWasp\Bitcoin\Transaction\Factory\Signer;
use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Transaction\OutPoint;
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Transaction\TransactionOutput;
use BitWasp\Bitcoin\Transaction\TransactionFactory;
use BitWasp\Bitcoin\Key\PrivateKeyFactory;
use BitWasp\Bitcoin\Crypto\Hash;
use BitWasp\Bitcoin\Script\WitnessProgram;

$privateKey = PrivateKeyFactory::fromWif('5Hwig3iZrm6uxS6Ch1egmJGyC89Q76X5tgVgtbEcLTPTx3aW5Zi');
$privateKey2 = PrivateKeyFactory::create();

// Utxo is: outpoint.txid, outpoint.vout, txout.scriptPubKey, txout.amount
$outpoint = new OutPoint(Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1'), 0);

$witnessScript = ScriptFactory::scriptPubKey()->multisig(1, [$privateKey->getPublicKey(), $privateKey2->getPublicKey()]);
$witnessProgram = new WitnessProgram(0, Hash::sha256($witnessScript->getBuffer()));
$outputScript = $witnessProgram->getScript();

$amount = 1501000;
$txOut = new TransactionOutput($amount, $outputScript);

$transaction = TransactionFactory::build()
    ->spendOutPoint($outpoint)
    ->payToAddress(1500000, \BitWasp\Bitcoin\Address\AddressFactory::fromString('1DUzqgG31FvNubNL6N1FVdzPbKYWZG2Mb6'))
    ->get();

$ec = \BitWasp\Bitcoin\Bitcoin::getEcAdapter();
$signed = (new Signer($transaction, $ec))
    ->sign(0, $privateKey, $txOut, null, $witnessScript)
    ->get();

echo "Get non-witness transaction " . $signed->getBuffer()->getHex() . PHP_EOL . PHP_EOL;
echo "Get witness bearing transaction: " . $signed->getWitnessBuffer()->getHex() . PHP_EOL;
```


### P2SH | Witness V0 Script Hash: 1 of 2 multisig
```php

use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Transaction\OutPoint;
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Transaction\TransactionOutput;
use BitWasp\Bitcoin\Transaction\TransactionFactory;
use BitWasp\Bitcoin\Key\PrivateKeyFactory;

$privateKey = PrivateKeyFactory::fromWif('5Hwig3iZrm6uxS6Ch1egmJGyC89Q76X5tgVgtbEcLTPTx3aW5Zi');
$privateKey2 = PrivateKeyFactory::fromHex('1a0733d2c0cde1ec521bee36f16775eb3e5e368431484eeb02afe72499c5865f');

$outpoint = new OutPoint(Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1'), 0);
$multisig = ScriptFactory::scriptPubKey()->multisig(1, [$privateKey->getPublicKey(), $privateKey2->getPublicKey()], false);
$witnessProgram = new \BitWasp\Bitcoin\Script\WitnessProgram(0, \BitWasp\Bitcoin\Crypto\Hash::sha256($multisig->getBuffer()));
$p2shOutScript = ScriptFactory::scriptPubKey()->payToScriptHash($witnessProgram->getScript());


$amount = 1501000;
$txOut = new TransactionOutput($amount, $p2shOutScript);

$transaction = TransactionFactory::build()
    ->spendOutPoint($outpoint)
    ->payToAddress(1500000, \BitWasp\Bitcoin\Address\AddressFactory::fromString('1DUzqgG31FvNubNL6N1FVdzPbKYWZG2Mb6'))
    ->get();

$ec = \BitWasp\Bitcoin\Bitcoin::getEcAdapter();
$signed = (new \BitWasp\Bitcoin\Transaction\Factory\Signer($transaction, $ec))
    ->sign(0, $privateKey, $txOut, $witnessProgram->getScript(), $multisig)
    ->get();

echo "Witness bearing transaction " . $signed->getWitnessBuffer()->getHex() . PHP_EOL. PHP_EOL;
echo "Non-witness transaction " . $signed->getBuffer()->getHex() . PHP_EOL;

```


## Checking Signatures

Signed transactions can be checked, so long as the txOut is known. For non-witness transactions, the amount does not have to be known, but it's better to keep it available.  

Checking signatures is done using the script interpreter. Since there exist multiple bindings to choose from, `ScriptFactory::consensus()`
will always return the most suitable. 

The example below validates a transaction produced in the `P2SH | Witness V0 Script Hash: 1 of 2 multisig` example.

### Checking a P2SH | witness v0 script hash: 1 of 2 multisig
```php

use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Transaction\OutPoint;
use BitWasp\Buffertools\Buffer;
use BitWasp\Bitcoin\Transaction\TransactionOutput;
use BitWasp\Bitcoin\Transaction\TransactionFactory;

$outpoint = new OutPoint(Buffer::hex('87f7b7639d132e9817f58d3fe3f9f65ff317dc780107a6c10cba5ce2ad1e4ea1'), 0);
$multisig = ScriptFactory::fromHex('5141047695c66e05a2b57dac3cbd84ff9d65f35d110cf0c5229811a952fe94f039480c8d10942adfd39d2597ba394380b05e78034cf1a385a388cb38fad8a45cf180b34104edfd1a26415f325d999bc17373a6f91072c88883d5cf045087bac80dd8c2ce2adfd154dadc1b8996941e2f0f0adc5837b2acc94915547e33814d785a18e81a7652ae');
$witnessProgram = new \BitWasp\Bitcoin\Script\WitnessProgram(0, \BitWasp\Bitcoin\Crypto\Hash::sha256($multisig->getBuffer()));
$p2shOutScript = ScriptFactory::scriptPubKey()->payToScriptHash($witnessProgram->getScript());

$amount = 1501000;
$txOut = new TransactionOutput($amount, $p2shOutScript);

$parsed = TransactionFactory::fromHex('01000000000101a14e1eade25cba0cc1a6070178dc17f35ff6f9e33f8df517982e139d63b7f78700000000232200205aa8b7caaf9b2bfa6d9f9fb3bc6da6aa37fe66b56647962f5375d448796e7b18ffffffff0160e31600000000001976a91488ed05abdbc1f46d1e6b3f482cae3965e9679d5888ac030047304402205c2aed1832621e4cfb023789b9ed43e7787479590652f4422e8d3e1f9643e98f022070fddab960b5e30b6b70ba9c6c31263e4d7303eb4046bd816da08cc574fd817801875141047695c66e05a2b57dac3cbd84ff9d65f35d110cf0c5229811a952fe94f039480c8d10942adfd39d2597ba394380b05e78034cf1a385a388cb38fad8a45cf180b34104edfd1a26415f325d999bc17373a6f91072c88883d5cf045087bac80dd8c2ce2adfd154dadc1b8996941e2f0f0adc5837b2acc94915547e33814d785a18e81a7652ae00000000');
$consensus = ScriptFactory::consensus();
$r = $parsed->validator()->checkSignature($consensus, 0, $txOut);
var_dump($r);

```


b IDATxytVսϓ22 A@IR :hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-EIENT ;@xT.i%-X}SvS5.r/UHz^_$-W"w)Ɗ/@Z &IoX P$K}JzX:;` &, ŋui,e6mX ԵrKb1ԗ)DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA݀!I*]R;I2$eZ#ORZSrr6mteffu*((Pu'v{DIߔ4^pIm'77WEEE;vƎ4-$]'RI{\I&G :IHJ DWBB=\WR޽m o$K(V9ABB.}jѢv`^?IOȅ} ڶmG}T#FJ`56$-ھ}FI&v;0(h;Б38CӧOWf!;A i:F_m9s&|q%=#wZprrrla A &P\\СC[A#! {olF} `E2}MK/vV)i{4BffV\|ۭX`b@kɶ@%i$K z5zhmX[IXZ` 'b%$r5M4º/l ԃߖxhʔ)[@=} K6IM}^5k㏷݆z ΗÿO:gdGBmyT/@+Vɶ纽z񕏵l.y޴it뭷zV0[Y^>Wsqs}\/@$(T7f.InݺiR$푔n.~?H))\ZRW'Mo~v Ov6oԃxz! S,&xm/yɞԟ?'uaSѽb,8GלKboi&3t7Y,)JJ c[nzӳdE&KsZLӄ I?@&%ӟ۶mSMMњ0iؐSZ,|J+N ~,0A0!5%Q-YQQa3}$_vVrf9f?S8`zDADADADADADADADADAdqP,تmMmg1V?rSI꒟]u|l RCyEf٢9 jURbztѰ!m5~tGj2DhG*{H9)꒟ר3:(+3\?/;TUݭʴ~S6lڧUJ*i$d(#=Yݺd{,p|3B))q:vN0Y.jkק6;SɶVzHJJЀ-utѹսk>QUU\޲~]fFnK?&ߡ5b=z9)^|u_k-[y%ZNU6 7Mi:]ۦtk[n X(e6Bb."8cۭ|~teuuw|ήI-5"~Uk;ZicEmN/:]M> cQ^uiƞ??Ңpc#TUU3UakNwA`:Y_V-8.KKfRitv޲* 9S6ֿj,ՃNOMߤ]z^fOh|<>@Å5 _/Iu?{SY4hK/2]4%it5q]GGe2%iR| W&f*^]??vq[LgE_3f}Fxu~}qd-ږFxu~I N>\;͗O֊:̗WJ@BhW=y|GgwܷH_NY?)Tdi'?խwhlmQi !SUUsw4kӺe4rfxu-[nHtMFj}H_u~w>)oV}(T'ebʒv3_[+vn@Ȭ\S}ot}w=kHFnxg S 0eޢm~l}uqZfFoZuuEg `zt~? b;t%>WTkķh[2eG8LIWx,^\thrl^Ϊ{=dž<}qV@ ⠨Wy^LF_>0UkDuʫuCs$)Iv:IK;6ֲ4{^6եm+l3>݆uM 9u?>Zc }g~qhKwڭeFMM~pМuqǿz6Tb@8@Y|jx](^]gf}M"tG -w.@vOqh~/HII`S[l.6nØXL9vUcOoB\xoǤ'T&IǍQw_wpv[kmO{w~>#=P1Pɞa-we:iǏlHo׈꒟f9SzH?+shk%Fs:qVhqY`jvO'ρ?PyX3lх]˾uV{ݞ]1,MzYNW~̈́ joYn}ȚF߾׮mS]F z+EDxm/d{F{-W-4wY듏:??_gPf ^3ecg ҵs8R2מz@TANGj)}CNi/R~}c:5{!ZHӋӾ6}T]G]7W6^n 9*,YqOZj:P?Q DFL|?-^.Ɵ7}fFh׶xe2Pscz1&5\cn[=Vn[ĶE鎀uˌd3GII k;lNmشOuuRVfBE]ۣeӶu :X-[(er4~LHi6:Ѻ@ԅrST0trk%$Č0ez" *z"T/X9|8.C5Feg}CQ%͞ˣJvL/?j^h&9xF`њZ(&yF&Iݻfg#W;3^{Wo^4'vV[[K';+mӍִ]AC@W?1^{එyh +^]fm~iԵ]AB@WTk̏t uR?l.OIHiYyԶ]Aˀ7c:q}ힽaf6Z~қm(+sK4{^6}T*UUu]n.:kx{:2 _m=sAߤU@?Z-Vކеz왍Nэ{|5 pڶn b p-@sPg]0G7fy-M{GCF'%{4`=$-Ge\ eU:m+Zt'WjO!OAF@ik&t݆ϥ_ e}=]"Wz_.͜E3leWFih|t-wZۍ-uw=6YN{6|} |*={Ѽn.S.z1zjۻTH]흾 DuDvmvK.`V]yY~sI@t?/ϓ. m&["+P?MzovVЫG3-GRR[(!!\_,^%?v@ҵő m`Y)tem8GMx.))A]Y i`ViW`?^~!S#^+ѽGZj?Vģ0.))A꨷lzL*]OXrY`DBBLOj{-MH'ii-ϰ ok7^ )쭡b]UXSְmռY|5*cֽk0B7镹%ڽP#8nȎq}mJr23_>lE5$iwui+ H~F`IjƵ@q \ @#qG0".0" l`„.0! ,AQHN6qzkKJ#o;`Xv2>,tێJJ7Z/*A .@fفjMzkg @TvZH3Zxu6Ra'%O?/dQ5xYkU]Rֽkق@DaS^RSּ5|BeHNN͘p HvcYcC5:y #`οb;z2.!kr}gUWkyZn=f Pvsn3p~;4p˚=ē~NmI] ¾ 0lH[_L hsh_ғߤc_њec)g7VIZ5yrgk̞W#IjӪv>՞y睝M8[|]\շ8M6%|@PZڨI-m>=k='aiRo-x?>Q.}`Ȏ:Wsmu u > .@,&;+!!˱tﭧDQwRW\vF\~Q7>spYw$%A~;~}6¾ g&if_=j,v+UL1(tWake:@Ș>j$Gq2t7S?vL|]u/ .(0E6Mk6hiۺzښOrifޱxm/Gx> Lal%%~{lBsR4*}{0Z/tNIɚpV^#Lf:u@k#RSu =S^ZyuR/.@n&΃z~B=0eg뺆#,Þ[B/?H uUf7y Wy}Bwegל`Wh(||`l`.;Ws?V@"c:iɍL֯PGv6zctM̠':wuW;d=;EveD}9J@B(0iհ bvP1{\P&G7D޴Iy_$-Qjm~Yrr&]CDv%bh|Yzni_ˆR;kg}nJOIIwyuL}{ЌNj}:+3Y?:WJ/N+Rzd=hb;dj͒suݔ@NKMԄ jqzC5@y°hL m;*5ezᕏ=ep XL n?מ:r`۵tŤZ|1v`V뽧_csج'ߤ%oTuumk%%%h)uy]Nk[n 'b2 l.=͜E%gf$[c;s:V-͞WߤWh-j7]4=F-X]>ZLSi[Y*We;Zan(ӇW|e(HNNP5[= r4tP &0<pc#`vTNV GFqvTi*Tyam$ߏWyE*VJKMTfFw>'$-ؽ.Ho.8c"@DADADADADADADADADA~j*֘,N;Pi3599h=goضLgiJ5փy~}&Zd9p֚ e:|hL``b/d9p? fgg+%%hMgXosج, ΩOl0Zh=xdjLmhݻoO[g_l,8a]٭+ӧ0$I]c]:粹:Teꢢ"5a^Kgh,&= =՟^߶“ߢE ܹS J}I%:8 IDAT~,9/ʃPW'Mo}zNƍ쨓zPbNZ~^z=4mswg;5 Y~SVMRXUյڱRf?s:w ;6H:ºi5-maM&O3;1IKeamZh͛7+##v+c ~u~ca]GnF'ټL~PPPbn voC4R,ӟgg %hq}@#M4IÇ Oy^xMZx ) yOw@HkN˖-Sǎmb]X@n+i͖!++K3gd\$mt$^YfJ\8PRF)77Wא!Cl$i:@@_oG I{$# 8磌ŋ91A (Im7֭>}ߴJq7ޗt^ -[ԩSj*}%]&' -ɓ'ꫯVzzvB#;a 7@GxI{j޼ƌ.LÇWBB7`O"I$/@R @eee@۷>}0,ɒ2$53Xs|cS~rpTYYY} kHc %&k.], @ADADADADADADADADA@lT<%''*Lo^={رc5h %$+CnܸQ3fҥK}vUVVs9G R,_{xˇ3o߾;TTTd}馛]uuuG~iԩ@4bnvmvfϞ /Peeeq}}za I~,誫{UWW뮻}_~YƍSMMMYχ֝waw\ďcxꩧtEƍկ_?۷5@u?1kNׯWzz/wy>}zj3 k(ٺuq_Zvf̘:~ ABQ&r|!%KҥKgԞ={<_X-z !CyFUUz~ ABQIIIjݺW$UXXDٳZ~ ABQƍecW$<(~<RSSvZujjjԧOZQu@4 8m&&&jԩg$ď1h ͟?_{768@g =@`)))5o6m3)ѣƌJ;wҿUTT /KZR{~a=@0o<*狔iFɶ[ˎ;T]]OX@?K.ۈxN pppppppppppppppppPfl߾] ,{ァk۶mڿo5BTӦMӴiӴ|r DB2e|An!Dy'tkΝ[A $***t5' "!駟oaDnΝ:t֭[gDШQ06qD;@ x M6v(PiizmZ4ew"@̴ixf [~-Fٱc&IZ2|n!?$@{[HTɏ#@hȎI# _m(F /6Z3z'\r,r!;w2Z3j=~GY7"I$iI.p_"?pN`y DD?: _  Gÿab7J !Bx@0 Bo cG@`1C[@0G @`0C_u V1 aCX>W ` | `!<S `"<. `#c`?cAC4 ?c p#~@0?:08&_MQ1J h#?/`7;I  q 7a wQ A 1 Hp !#<8/#@1Ul7=S=K.4Z?E_$i@!1!E4?`P_  @Bă10#: "aU,xbFY1 [n|n #'vEH:`xb #vD4Y hi.i&EΖv#O H4IŶ}:Ikh @tZRF#(tXҙzZ ?I3l7q@õ|ۍ1,GpuY Ꮿ@hJv#xxk$ v#9 5 }_$c S#=+"K{F*m7`#%H:NRSp6I?sIՖ{Ap$I$I:QRv2$Z @UJ*$]<FO4IENDB`