Skip to content

Instantly share code, notes, and snippets.

@chjj chjj/tx-pool-fix-clean.js
Last active Aug 29, 2015

Embed
What would you like to do?
var fs = require('fs');
var assert = require('assert');
var bcoin = require('bcoin');
var bn = require('bn.js');
var parser = new bcoin.protocol.parser;
var wallet = new bcoin.wallet({
pub: bcoin.utils.fromBase58('hY29VUa4xfrs4vDUd4aF3cjkMoH5xegU6VzGNBqjTtCm')
});
var text = fs.readFileSync(__dirname + '/txs.hex', 'utf8');
var txs = text.trim().split(/\n+/).map(function(tx) {
tx = parser.parseTX(bcoin.utils.toArray(tx, 'hex'));
tx = bcoin.tx(tx);
return tx;
});
console.log('Starting Balance: %s.', bcoin.utils.toBTC(wallet.balance()));
txs.forEach(function(tx) {
console.log('Adding TX: %s', bcoin.utils.revHex(tx.hash('hex')));
wallet.addTX(tx);
console.log('Current Balance: %s.', bcoin.utils.toBTC(wallet.balance()));
});
console.log('Final Balance: %s.', bcoin.utils.toBTC(wallet.balance()));
console.log(Object.keys(wallet.tx._unspent).map(function(key) {
var parts = key.split('/');
//var hash = bcoin.utils.revHex(parts[0]);
var hash = parts[0];
return hash + '/' + parts[1];
}));
console.log(Object.keys(wallet.tx._orphans).map(function(key) {
var parts = key.split('/');
//var hash = bcoin.utils.revHex(parts[0]);
var hash = parts[0];
return hash + '/' + parts[1];
}));
assert.equal(+wallet.balance().toString(10), 0);
var fs = require('fs');
var assert = require('assert');
var bcoin = require('bcoin');
var bn = require('bn.js');
var ind = 0;
bcoin.txPool.prototype.add = function add(tx, noWrite) {
var hash = tx.hash('hex');
// Ignore stale pending transactions
if (tx.ts === 0 && tx.ps + 2 * 24 * 3600 < +new Date() / 1000) {
this._removeTX(tx, noWrite);
return;
}
// Do not add TX two times
if (this._all[hash]) {
// Transaction was confirmed, update it in storage
if (tx.ts !== 0 && this._all[hash].ts === 0) {
this._all[hash].ts = tx.ts;
this._all[hash].block = tx.block;
this._storeTX(hash, tx, noWrite);
}
return false;
}
this._all[hash] = tx;
var ownInput = this._wallet.ownInput(tx);
var ownOutput = this._wallet.ownOutput(tx);
var updated = false;
ind++;
if (hash === t1) console.log('t1: %d', ind);
if (hash === t2) console.log('t2: %d', ind);
if (hash === r1) console.log('r1: %d', ind);
if (hash === r2) console.log('r2: %d', ind);
// Consume unspent money or add orphans
for (var i = 0; i < tx.inputs.length; i++) {
var input = tx.inputs[i];
var key = input.out.hash + '/' + input.out.index;
var unspent = this._unspent[key];
if (unspent) {
// Add TX to inputs and spend money
var index = tx._input(unspent.tx, unspent.index);
// Skip invalid transactions
if (!tx.verify(index))
return;
delete this._unspent[key];
updated = true;
continue;
}
// Only add orphans if the tx has outputs that are ours.
// if (!ownOutput)
// continue;
// Only add orphans if this input is ours or the tx has outputs that are ours.
// if (!ownOutput && (!ownInput || !~ownInput.indexOf(input)))
// continue;
// Only add orphans if this input is ours.
if (!ownInput || !~ownInput.indexOf(input))
continue;
// Add orphan, if no parent transaction is yet known
var orphan = { tx: tx, index: input.out.index };
if (this._orphans[key])
this._orphans[key].push(orphan);
else
this._orphans[key] = [orphan];
}
if (!ownOutput) {
if (updated)
this.emit('update', this._lastTs, tx);
// Save spending TXs without adding unspents
if (this._wallet.ownInput(tx)) {
this._storeTX(hash, tx, noWrite);
}
return;
}
function checkOrphan(orphan) {
var index = orphan.tx._input(tx, orphan.index);
// Verify that input script is correct, if not - add output to unspent
// and remove orphan from storage
if (!orphan.tx.verify(index)) {
this._removeTX(orphan.tx, noWrite);
return false;
}
return true;
}
// Add unspent outputs or fullfill orphans
for (var i = 0; i < tx.outputs.length; i++) {
var out = tx.outputs[i];
var key = hash + '/' + i;
var orphans = this._orphans[key];
// Do not add unspents for outputs that aren't ours.
if (!~ownOutput.indexOf(out)) continue;
// Add input to orphan
if (orphans) {
var some = orphans.some(checkOrphan, this);
if (!some)
orphans = null;
}
if (hash === t2 || hash === t1) {
console.log('key: %s', key);
console.log('orphans 1: %d', orphans ? orphans.length : 0);
console.log('orphans 2: %d', this._orphans[key] ? this._orphans[key].length : 0);
console.log(tx.outputs.map(function(output) {
var hash, addr;
if (bcoin.script.isPubkeyhash(output.script)) {
hash = output.script[2];
addr = bcoin.wallet.hash2addr(hash);
}
return {
value: bcoin.utils.toBTC(output.value),
address: addr
};
}));
}
delete this._orphans[key];
if (!orphans) {
this._unspent[key] = { tx: tx, index: i };
updated = true;
}
}
this._lastTs = Math.max(tx.ts, this._lastTs);
if (updated)
this.emit('update', this._lastTs, tx);
this._storeTX(hash, tx, noWrite);
this.emit('tx', tx);
return true;
};
var parser = new bcoin.protocol.parser;
var wallet = new bcoin.wallet({
pub: bcoin.utils.fromBase58('hY29VUa4xfrs4vDUd4aF3cjkMoH5xegU6VzGNBqjTtCm')
});
var text = fs.readFileSync(__dirname + '/txs.hex', 'utf8');
var txs = text.trim().split(/\n+/).map(function(tx) {
tx = parser.parseTX(bcoin.utils.toArray(tx, 'hex'));
tx = bcoin.tx(tx);
return tx;
});
/*
txs = txs.sort(function(a, b) {
return a.ts - b.ts;
});
*/
/*
var uniq = {};
var txs_ = [];
txs.forEach(function(tx) {
var hash = tx.hash('hex');
if (uniq[hash]) return;
uniq[hash] = true;
txs_.push(tx);
});
txs = txs_;
*/
var t1 = 'c6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c2';
// redeemed at:
var r1 = 'e0225ccaf7af92e981a5128366efe06f13d3d1ac5bab2935fef0b9c9e6f7aeb4';
var t2 = 'abd74105343b0b659b54b2840af1ea00f6c4e4638fa28d4db593640f9580521c';
// redeemed at:
var r2 = 'be6c8b87e768faf5609a4712eb8cbba2eb0a6a1731a4346e267dec03243c6ccd';
console.log('Starting Balance: %s.', bcoin.utils.toBTC(wallet.balance()));
txs.forEach(function(tx) {
console.log('Adding TX: %s', bcoin.utils.revHex(tx.hash('hex')));
wallet.addTX(tx);
console.log('Current Balance: %s.', bcoin.utils.toBTC(wallet.balance()));
});
console.log('Final Balance: %s.', bcoin.utils.toBTC(wallet.balance()));
console.log(Object.keys(wallet.tx._unspent).map(function(key) {
var parts = key.split('/');
//var hash = bcoin.utils.revHex(parts[0]);
var hash = parts[0];
return hash + '/' + parts[1];
}));
console.log(Object.keys(wallet.tx._orphans).map(function(key) {
var parts = key.split('/');
//var hash = bcoin.utils.revHex(parts[0]);
var hash = parts[0];
return hash + '/' + parts[1];
}));
assert.equal(+wallet.balance().toString(10), 0);
/*
#
# Old Problem
#
#
# Glossary
#
rev = revHex
nrev = non-revHex'd
Description:
Lots of useless unspents are getting added.
Note: This was fixed with `if (!~ownoutput.indexof(out)) ...`
index is wrong - says is index 1 when it is 0
https://blockchain.info/tx/b31c3ba021e19b3b69dc50a7183b450e8aeda42c828e6d4112a064ca4da8d5ec?show_adv=true
http://blockexplorer.com/tx/b31c3ba021e19b3b69dc50a7183b450e8aeda42c828e6d4112a064ca4da8d5ec
Unspent:
rev:
[ '9b67c42d2273cb0b3340c53c7496087699e5daba2bff58228e8b6d1e06d2d3ad/1',
'b31c3ba021e19b3b69dc50a7183b450e8aeda42c828e6d4112a064ca4da8d5ec/1',
'bebcf46a714c2aae5641e89e8145b479e4c134b5b282e63e801b146086ffe28f/1',
'c278f3fd613fa47a6bd3c3476d81a5700c409e617167a2cb0a81bef7055f84c6/0',
'c278f3fd613fa47a6bd3c3476d81a5700c409e617167a2cb0a81bef7055f84c6/1',
'1c5280950f6493b54d8da28f63e4c4f600eaf10a84b2549b650b3b340541d7ab/0',
'1c5280950f6493b54d8da28f63e4c4f600eaf10a84b2549b650b3b340541d7ab/1',
'c6d43b3eb7236b5794c3be4c6e739fc63f187d656e1ee6592dbfa9006a7e0b60/1',
'48764fb55b7e133f01980f4e83289de1d6e8426c76ea5aba43d787b2719d28c0/1' ]
Unspent:
rev:
[ 'c278f3fd613fa47a6bd3c3476d81a5700c409e617167a2cb0a81bef7055f84c6/1',
'1c5280950f6493b54d8da28f63e4c4f600eaf10a84b2549b650b3b340541d7ab/1' ]
#
# New Problem
#
Description:
Inputs are correct, but tx-pool thinks they haven't been redeemed when they have.
MAJOR Problem:
r1 and r2 aren't getting orphaned, this is the (one?) problem.
#
# Glossary
#
rev = revHex
nrev = non-revHex'd
t1 = Transaction #1 (the first transaction where unspent outputs are kept, even though they've been redeemed)
r1 = Redemption #1 (the transaction in which t1's output has been redeemed in an input)
t2 = ...
r2 = ...
Unspent:
nrev:
[ 'c6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c2/1',
'abd74105343b0b659b54b2840af1ea00f6c4e4638fa28d4db593640f9580521c/1' ]
rev:
[ 'c278f3fd613fa47a6bd3c3476d81a5700c409e617167a2cb0a81bef7055f84c6/1',
'1c5280950f6493b54d8da28f63e4c4f600eaf10a84b2549b650b3b340541d7ab/1' ]
t1:
nrev: 'c6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c2'
rev: 'c278f3fd613fa47a6bd3c3476d81a5700c409e617167a2cb0a81bef7055f84c6'
url: http://blockexplorer.com/tx/c278f3fd613fa47a6bd3c3476d81a5700c409e617167a2cb0a81bef7055f84c6
r1 - was redeemed at - redeemed?:
nrev: 'e0225ccaf7af92e981a5128366efe06f13d3d1ac5bab2935fef0b9c9e6f7aeb4'
rev: 'b4aef7e6c9b9f0fe3529ab5bacd1d3136fe0ef668312a581e992aff7ca5c22e0'
url: https://blockexplorer.com/tx/b4aef7e6c9b9f0fe3529ab5bacd1d3136fe0ef668312a581e992aff7ca5c22e0#i95260564
t2:
nrev: 'abd74105343b0b659b54b2840af1ea00f6c4e4638fa28d4db593640f9580521c'
rev: '1c5280950f6493b54d8da28f63e4c4f600eaf10a84b2549b650b3b340541d7ab'
url: https://blockexplorer.com/tx/1c5280950f6493b54d8da28f63e4c4f600eaf10a84b2549b650b3b340541d7ab
r2 - was redeemed at:
nrev: 'be6c8b87e768faf5609a4712eb8cbba2eb0a6a1731a4346e267dec03243c6ccd'
rev: 'cd6c3c2403ec7d266e34a431176a0aeba2bb8ceb12479a60f5fa68e7878b6cbe'
url: https://blockexplorer.com/tx/cd6c3c2403ec7d266e34a431176a0aeba2bb8ceb12479a60f5fa68e7878b6cbe#i95235931
Order of addition to tx-pool:
r2: 5
r1: 7
t1: 8
t2: 9
How things should work (?):
- r2 becomes an orphan because it has our address in an input, but the
unspent output it references (t2) doesn't exist yet.
- t2 gets added and sees r2 is orphaned, and that this output has already been
redeemed, removes unspent.
Note:
t2 = output
r2 = input
*/
01000000028383f8b01884a19fe61ba630ec2b81c0ef94f28bdd931c14e4e99a64081391fc000000006b4830450220074a7f7d1e5b4c942f3b5c3d7ff55c0eadb1543aba967f7495ad7ca4f50805a10221009ad92bac262530814ee7bcc62d8b6697e67614512f586bad47a7f90a26251db6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff3ed28803b90fbd606d02814de56acebc9cd78f18ec593242bf6330daf5c64f36000000006a473044022061c303c1d9cae88a0689de5a5576f8f231ddd5ad3949ae51035581387fc67f1b02205d74e5cf0a7738d8fc504bc4d02b54111bec638a562aa85febd1697ee9031533012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02401f0000000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac16420100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6000000006a4730440220608d9e73c9cc514eca1777007991bb0bb8be3c5c9b5cfa2fd19434d5b3240f8602202700632d1d63397f74faddfb972cbe077a5c7308dcff6d9b5b75df16fa734fbf012102e8c3d188cffb8bedf2a037ef7bb9df27dc42e616e9be3c3f57b89f63462010eeffffffff01301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
01000000010f21a0c99337d18672e36bb9e7fe6b0e3a9fb7823689384f8adb0b82628f95e8000000006b483045022100be3193305e4a692b7fc3d1521d93d773905ac0d7818a319c8d549fa9cec3883302207b968dd85aa3b6b3f074165a574e0a89453d203caa1fe2d5131053777ec0b7ef012102b750ab2bef86da10a62cde6ec9dd93ee3f0f1e79eb5d44d0927972b2f2cee4c7ffffffff0220a10700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac40694700000000001976a9142d622a3ed4ee84952a87b735cc02a12e7a0dec5588ac00000000
01000000028383f8b01884a19fe61ba630ec2b81c0ef94f28bdd931c14e4e99a64081391fc000000006b4830450220074a7f7d1e5b4c942f3b5c3d7ff55c0eadb1543aba967f7495ad7ca4f50805a10221009ad92bac262530814ee7bcc62d8b6697e67614512f586bad47a7f90a26251db6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff3ed28803b90fbd606d02814de56acebc9cd78f18ec593242bf6330daf5c64f36000000006a473044022061c303c1d9cae88a0689de5a5576f8f231ddd5ad3949ae51035581387fc67f1b02205d74e5cf0a7738d8fc504bc4d02b54111bec638a562aa85febd1697ee9031533012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02401f0000000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac16420100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a000000006b48304502207b7fff37c50e275a23911c98050b3732e9a823f1df07af30557fc66cbbbc14b9022100f2cb5f1b71afa39d57afb000b1b5c6ba6583490d649828c0e57e1f7aa530b4f7012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffe0225ccaf7af92e981a5128366efe06f13d3d1ac5bab2935fef0b9c9e6f7aeb4010000006a47304402200870052855de9f5fc9799d29be8e20c5854cae2cb48398484972e2a4e21c623502201c9a9cbe1823e2d9a862c64965ee24e76e6d6ce08cc6a3742f7c2ddb8aab2e77012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a010000006c493046022100ad77785e44f87ae2e669f6276edb908da9fd1c743f55d85640726dd77af7303a0221009220588486bec6c224ef0b2a4c26f21f77fa5671ccf10923eb7e5edaa62f1025012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff0240548900000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac4ada1600000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003c0289d71b287d743ba5aea766c42e8d6e19d28834e0f98013f137e5bb54f7648010000006c493046022100b6223313d92f025f8a85bb93c9b03b9374176a3e82166715f6d4d9609cec2c17022100e1851755c046cc1e15720676de94ccfccfd1da12b5b06f17cb582b7d11337ace012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffc6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c2000000006b483045022100df8534636feed8b87030e185b113ceafb05b60ead8bdca88423accd329a251c602201f443edfbc5d36884f5dda010c68a35077ff2b6e81e91dad6d6bdff6503df183012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffabd74105343b0b659b54b2840af1ea00f6c4e4638fa28d4db593640f9580521c010000006b48304502210087a2f80434e257958a95f8761b2f17558fe324be3af14ad5fffe6534260b8b3802207ff13da10942fa8bd13b1c988465a4a1d9f6a747decb7c8ea824857c028223790121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240548900000000001976a91458a07f5d18e312df2f6eedf929fb882fad0e284488ac1ae90000000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a000000006b48304502207b7fff37c50e275a23911c98050b3732e9a823f1df07af30557fc66cbbbc14b9022100f2cb5f1b71afa39d57afb000b1b5c6ba6583490d649828c0e57e1f7aa530b4f7012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffe0225ccaf7af92e981a5128366efe06f13d3d1ac5bab2935fef0b9c9e6f7aeb4010000006a47304402200870052855de9f5fc9799d29be8e20c5854cae2cb48398484972e2a4e21c623502201c9a9cbe1823e2d9a862c64965ee24e76e6d6ce08cc6a3742f7c2ddb8aab2e77012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a010000006c493046022100ad77785e44f87ae2e669f6276edb908da9fd1c743f55d85640726dd77af7303a0221009220588486bec6c224ef0b2a4c26f21f77fa5671ccf10923eb7e5edaa62f1025012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff0240548900000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac4ada1600000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002be6c8b87e768faf5609a4712eb8cbba2eb0a6a1731a4346e267dec03243c6ccd010000006c4930460221008ac9490ce1395a382b6af942e0a577f6aba184f8e565d743ae75126f34d4edbe02210082fcc650efc320998cc065d78700efcafe3e1ccf37392fde05e875edf9eb616b012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff5ba85dc7c45925b6ebc08581ef257d6e5afb7e0174672b7c3a064bc9185ee3e1000000006b4830450220163d7250be1908c50cee88962ec72256a51c216719083732de692b8d93db412b022100c6bd886f4a2004890d97dd25e8cae34a58686533589da868d2d1fede1a704594012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff0200093d00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac3ae64c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
010000000306bd46f405eaa7e5ddd580f8fe35dcd4506948ae126f0af88dfa33694d2ee058010000006b483045022100bf9dcaabab434b83e45036d4d85d5d1db98e69c57c33ff680a85e241da6f64f202204fe9549d9d2a61326cb61976bee52b8d27ff4fc5def614c68e9c0304a4acc7ea012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffc6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c20100000069463043021f588cdd8f367ebb2fa6b9713c2bc611101cd70ed776c6c39056c8f5df95b451022033ab5413a02517c71a4db1d8742ba4297fe12acf2cfe804ca57cec3a945942110121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff06bd46f405eaa7e5ddd580f8fe35dcd4506948ae126f0af88dfa33694d2ee058000000006b48304502204c0d83998dc88332097245892c29e22fd9c19fdb1bdd424673916a32f3a7dcb10221009de64ca510bfa9ea38d363762894efcd87bc0fe4d522d5ab456b94c92ba513b70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240548900000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac2ae60700000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003add3d2061e6d8b8e2258ff2bbadae599760896743cc540330bcb73222dc4679b000000006c493046022100a48ab4f517e2e2cc35def1b3bd7f7486286cf6e8e7797deb225552eac193b6cf022100cf7bd931b04e1dcdf0d191bf2419e3d4ad8a38f9a85aa2e284691d7e051e27c70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff518b0ee06a6e2cef0fed6977ec084801a7e57d9a04d651db9b2e469c37f9e6a7000000006c493046022100c1663d30f0749b39eb2d88700a22bd010376d35eb4a3355b55b1ce70ce34abaf022100b58b1e2ae11a95af5bd5e40f9a308fbf1a9d72a3263b04b2a25a1e760d6c89e70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffffecd5a84dca64a012416d8e822ca4ed8a0e453b18a750dc693b9be121a03b1cb3000000006b483045022100e7416f8501f894c84bf3815d1344f4702a789b09d9acb19735ca581bafc721740220348d5180e0b705fbb824b7b4742661a943e65cb29765d6fb9509dc7fa3d2fdfe0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac40720700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
0100000003c0289d71b287d743ba5aea766c42e8d6e19d28834e0f98013f137e5bb54f7648010000006c493046022100b6223313d92f025f8a85bb93c9b03b9374176a3e82166715f6d4d9609cec2c17022100e1851755c046cc1e15720676de94ccfccfd1da12b5b06f17cb582b7d11337ace012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffc6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c2000000006b483045022100df8534636feed8b87030e185b113ceafb05b60ead8bdca88423accd329a251c602201f443edfbc5d36884f5dda010c68a35077ff2b6e81e91dad6d6bdff6503df183012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffabd74105343b0b659b54b2840af1ea00f6c4e4638fa28d4db593640f9580521c010000006b48304502210087a2f80434e257958a95f8761b2f17558fe324be3af14ad5fffe6534260b8b3802207ff13da10942fa8bd13b1c988465a4a1d9f6a747decb7c8ea824857c028223790121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240548900000000001976a91458a07f5d18e312df2f6eedf929fb882fad0e284488ac1ae90000000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002be6c8b87e768faf5609a4712eb8cbba2eb0a6a1731a4346e267dec03243c6ccd010000006c4930460221008ac9490ce1395a382b6af942e0a577f6aba184f8e565d743ae75126f34d4edbe02210082fcc650efc320998cc065d78700efcafe3e1ccf37392fde05e875edf9eb616b012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff5ba85dc7c45925b6ebc08581ef257d6e5afb7e0174672b7c3a064bc9185ee3e1000000006b4830450220163d7250be1908c50cee88962ec72256a51c216719083732de692b8d93db412b022100c6bd886f4a2004890d97dd25e8cae34a58686533589da868d2d1fede1a704594012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff0200093d00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac3ae64c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
010000000306bd46f405eaa7e5ddd580f8fe35dcd4506948ae126f0af88dfa33694d2ee058010000006b483045022100bf9dcaabab434b83e45036d4d85d5d1db98e69c57c33ff680a85e241da6f64f202204fe9549d9d2a61326cb61976bee52b8d27ff4fc5def614c68e9c0304a4acc7ea012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffc6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c20100000069463043021f588cdd8f367ebb2fa6b9713c2bc611101cd70ed776c6c39056c8f5df95b451022033ab5413a02517c71a4db1d8742ba4297fe12acf2cfe804ca57cec3a945942110121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff06bd46f405eaa7e5ddd580f8fe35dcd4506948ae126f0af88dfa33694d2ee058000000006b48304502204c0d83998dc88332097245892c29e22fd9c19fdb1bdd424673916a32f3a7dcb10221009de64ca510bfa9ea38d363762894efcd87bc0fe4d522d5ab456b94c92ba513b70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240548900000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac2ae60700000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6000000006a4730440220608d9e73c9cc514eca1777007991bb0bb8be3c5c9b5cfa2fd19434d5b3240f8602202700632d1d63397f74faddfb972cbe077a5c7308dcff6d9b5b75df16fa734fbf012102e8c3d188cffb8bedf2a037ef7bb9df27dc42e616e9be3c3f57b89f63462010eeffffffff01301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
01000000010f21a0c99337d18672e36bb9e7fe6b0e3a9fb7823689384f8adb0b82628f95e8000000006b483045022100be3193305e4a692b7fc3d1521d93d773905ac0d7818a319c8d549fa9cec3883302207b968dd85aa3b6b3f074165a574e0a89453d203caa1fe2d5131053777ec0b7ef012102b750ab2bef86da10a62cde6ec9dd93ee3f0f1e79eb5d44d0927972b2f2cee4c7ffffffff0220a10700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac40694700000000001976a9142d622a3ed4ee84952a87b735cc02a12e7a0dec5588ac00000000
0100000001c0289d71b287d743ba5aea766c42e8d6e19d28834e0f98013f137e5bb54f7648000000006a47304402204c55572729390d5b619fd54dc1977d2f2b85bbaed86c35c61f37065cbb81e61802203972d887a4b41f58669de675055b0919c8e020ccaefbb9e8cc851c31962d8d690121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
0100000003466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a000000006b48304502207b7fff37c50e275a23911c98050b3732e9a823f1df07af30557fc66cbbbc14b9022100f2cb5f1b71afa39d57afb000b1b5c6ba6583490d649828c0e57e1f7aa530b4f7012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffe0225ccaf7af92e981a5128366efe06f13d3d1ac5bab2935fef0b9c9e6f7aeb4010000006a47304402200870052855de9f5fc9799d29be8e20c5854cae2cb48398484972e2a4e21c623502201c9a9cbe1823e2d9a862c64965ee24e76e6d6ce08cc6a3742f7c2ddb8aab2e77012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a010000006c493046022100ad77785e44f87ae2e669f6276edb908da9fd1c743f55d85640726dd77af7303a0221009220588486bec6c224ef0b2a4c26f21f77fa5671ccf10923eb7e5edaa62f1025012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff0240548900000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac4ada1600000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018000000006b48304502202b9d41c7cf570553861d759522ef0f5a13ba67fba7cd21d0cd697390b53d0e9f0221009d2e315e24a7d08fa6fa225a13a4c7d05d27523f8136f193aa5be5abc26bdb88012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac70f30500000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2010000006b483045022100bfc401ad6fc88b32ebb83496ac198af9d9d06802e7da66908cfdb665a451a21c022022d02bc61834a2e753cf86d26b16e04be7048c1825257a718bacb5c8ca82a6e6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acc0450400000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002600b7e6a00a9bf2d59e61e6e657d183fc69f736e4cbec394576b23b73e3bd4c6000000006a47304402205ef1ccbc02ce51e40f07a801ff36e2bb82071f6296102f24133c735b0de7212902206828b97518c918a695a351750af93abecbef72503b83d01f2d074ab0be0ad7ea0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2000000006a47304402204ed38aa035bf6fe2bd0f3230d2c42eedffc985cca4f3bf99e9fdae893f24ddaa022057179264ae2c66f79dcd542e90a4af00cd2d7380bedc9fa1381d31ef7a0031770121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02a0860100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac905f0100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6000000006a4730440220608d9e73c9cc514eca1777007991bb0bb8be3c5c9b5cfa2fd19434d5b3240f8602202700632d1d63397f74faddfb972cbe077a5c7308dcff6d9b5b75df16fa734fbf012102e8c3d188cffb8bedf2a037ef7bb9df27dc42e616e9be3c3f57b89f63462010eeffffffff01301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
01000000010f21a0c99337d18672e36bb9e7fe6b0e3a9fb7823689384f8adb0b82628f95e8000000006b483045022100be3193305e4a692b7fc3d1521d93d773905ac0d7818a319c8d549fa9cec3883302207b968dd85aa3b6b3f074165a574e0a89453d203caa1fe2d5131053777ec0b7ef012102b750ab2bef86da10a62cde6ec9dd93ee3f0f1e79eb5d44d0927972b2f2cee4c7ffffffff0220a10700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac40694700000000001976a9142d622a3ed4ee84952a87b735cc02a12e7a0dec5588ac00000000
0100000001c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018000000006b48304502202b9d41c7cf570553861d759522ef0f5a13ba67fba7cd21d0cd697390b53d0e9f0221009d2e315e24a7d08fa6fa225a13a4c7d05d27523f8136f193aa5be5abc26bdb88012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac70f30500000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2010000006b483045022100bfc401ad6fc88b32ebb83496ac198af9d9d06802e7da66908cfdb665a451a21c022022d02bc61834a2e753cf86d26b16e04be7048c1825257a718bacb5c8ca82a6e6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acc0450400000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001c0289d71b287d743ba5aea766c42e8d6e19d28834e0f98013f137e5bb54f7648000000006a47304402204c55572729390d5b619fd54dc1977d2f2b85bbaed86c35c61f37065cbb81e61802203972d887a4b41f58669de675055b0919c8e020ccaefbb9e8cc851c31962d8d690121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
0100000002600b7e6a00a9bf2d59e61e6e657d183fc69f736e4cbec394576b23b73e3bd4c6000000006a47304402205ef1ccbc02ce51e40f07a801ff36e2bb82071f6296102f24133c735b0de7212902206828b97518c918a695a351750af93abecbef72503b83d01f2d074ab0be0ad7ea0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2000000006a47304402204ed38aa035bf6fe2bd0f3230d2c42eedffc985cca4f3bf99e9fdae893f24ddaa022057179264ae2c66f79dcd542e90a4af00cd2d7380bedc9fa1381d31ef7a0031770121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02a0860100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac905f0100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018000000006b48304502202b9d41c7cf570553861d759522ef0f5a13ba67fba7cd21d0cd697390b53d0e9f0221009d2e315e24a7d08fa6fa225a13a4c7d05d27523f8136f193aa5be5abc26bdb88012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac70f30500000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2010000006b483045022100bfc401ad6fc88b32ebb83496ac198af9d9d06802e7da66908cfdb665a451a21c022022d02bc61834a2e753cf86d26b16e04be7048c1825257a718bacb5c8ca82a6e6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acc0450400000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002600b7e6a00a9bf2d59e61e6e657d183fc69f736e4cbec394576b23b73e3bd4c6000000006a47304402205ef1ccbc02ce51e40f07a801ff36e2bb82071f6296102f24133c735b0de7212902206828b97518c918a695a351750af93abecbef72503b83d01f2d074ab0be0ad7ea0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2000000006a47304402204ed38aa035bf6fe2bd0f3230d2c42eedffc985cca4f3bf99e9fdae893f24ddaa022057179264ae2c66f79dcd542e90a4af00cd2d7380bedc9fa1381d31ef7a0031770121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02a0860100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac905f0100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003add3d2061e6d8b8e2258ff2bbadae599760896743cc540330bcb73222dc4679b000000006c493046022100a48ab4f517e2e2cc35def1b3bd7f7486286cf6e8e7797deb225552eac193b6cf022100cf7bd931b04e1dcdf0d191bf2419e3d4ad8a38f9a85aa2e284691d7e051e27c70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff518b0ee06a6e2cef0fed6977ec084801a7e57d9a04d651db9b2e469c37f9e6a7000000006c493046022100c1663d30f0749b39eb2d88700a22bd010376d35eb4a3355b55b1ce70ce34abaf022100b58b1e2ae11a95af5bd5e40f9a308fbf1a9d72a3263b04b2a25a1e760d6c89e70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffffecd5a84dca64a012416d8e822ca4ed8a0e453b18a750dc693b9be121a03b1cb3000000006b483045022100e7416f8501f894c84bf3815d1344f4702a789b09d9acb19735ca581bafc721740220348d5180e0b705fbb824b7b4742661a943e65cb29765d6fb9509dc7fa3d2fdfe0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac40720700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
0100000001c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018000000006b48304502202b9d41c7cf570553861d759522ef0f5a13ba67fba7cd21d0cd697390b53d0e9f0221009d2e315e24a7d08fa6fa225a13a4c7d05d27523f8136f193aa5be5abc26bdb88012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac70f30500000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6010000006a473044022053128aab165f2b639c0f27139345bf409f443735e148d0a7e194f63fac144f2d022032745168202a9758f4984d1ec51a6b58033819a602ae297b2d8d11413320127c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff0280841e00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acfa066c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001c0289d71b287d743ba5aea766c42e8d6e19d28834e0f98013f137e5bb54f7648000000006a47304402204c55572729390d5b619fd54dc1977d2f2b85bbaed86c35c61f37065cbb81e61802203972d887a4b41f58669de675055b0919c8e020ccaefbb9e8cc851c31962d8d690121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6000000006a4730440220608d9e73c9cc514eca1777007991bb0bb8be3c5c9b5cfa2fd19434d5b3240f8602202700632d1d63397f74faddfb972cbe077a5c7308dcff6d9b5b75df16fa734fbf012102e8c3d188cffb8bedf2a037ef7bb9df27dc42e616e9be3c3f57b89f63462010eeffffffff01301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
01000000010f21a0c99337d18672e36bb9e7fe6b0e3a9fb7823689384f8adb0b82628f95e8000000006b483045022100be3193305e4a692b7fc3d1521d93d773905ac0d7818a319c8d549fa9cec3883302207b968dd85aa3b6b3f074165a574e0a89453d203caa1fe2d5131053777ec0b7ef012102b750ab2bef86da10a62cde6ec9dd93ee3f0f1e79eb5d44d0927972b2f2cee4c7ffffffff0220a10700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac40694700000000001976a9142d622a3ed4ee84952a87b735cc02a12e7a0dec5588ac00000000
0100000002c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018010000006b483045022100a77afa5cbb57a007e2635a66ff58d8ade873861f720b794c7d58f816d67d1a5b022061e9da430bf19001db79edfb6e57f089da00bc7d058e3b2169a26f390166554c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff8fe2ff8660141b803ee682b2b534c1e479b445819ee84156ae2a4c716af4bcbe000000006b48304502207e3e392b7756f08bcd940472d33aad3928ab99d4813a88563a9b5e0bd02adc05022100ae70ed5f01bc577f9ea4f8fdc8ce06bf6326715b8b3f88ce49f2ce96c8ba3fa10121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02808d5b00000000001976a91430ecf63c84e7eeac15d4fee29276098366b5991a88accab13c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018010000006b483045022100a77afa5cbb57a007e2635a66ff58d8ade873861f720b794c7d58f816d67d1a5b022061e9da430bf19001db79edfb6e57f089da00bc7d058e3b2169a26f390166554c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff8fe2ff8660141b803ee682b2b534c1e479b445819ee84156ae2a4c716af4bcbe000000006b48304502207e3e392b7756f08bcd940472d33aad3928ab99d4813a88563a9b5e0bd02adc05022100ae70ed5f01bc577f9ea4f8fdc8ce06bf6326715b8b3f88ce49f2ce96c8ba3fa10121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02808d5b00000000001976a91430ecf63c84e7eeac15d4fee29276098366b5991a88accab13c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a000000006b48304502207b7fff37c50e275a23911c98050b3732e9a823f1df07af30557fc66cbbbc14b9022100f2cb5f1b71afa39d57afb000b1b5c6ba6583490d649828c0e57e1f7aa530b4f7012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffe0225ccaf7af92e981a5128366efe06f13d3d1ac5bab2935fef0b9c9e6f7aeb4010000006a47304402200870052855de9f5fc9799d29be8e20c5854cae2cb48398484972e2a4e21c623502201c9a9cbe1823e2d9a862c64965ee24e76e6d6ce08cc6a3742f7c2ddb8aab2e77012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff466b56bfff7c43b134abf517b7c4d935822c0cda18c6d0235851c8e56779115a010000006c493046022100ad77785e44f87ae2e669f6276edb908da9fd1c743f55d85640726dd77af7303a0221009220588486bec6c224ef0b2a4c26f21f77fa5671ccf10923eb7e5edaa62f1025012103b5175c6117a8a8e7061bbef182ca6739fd57d80bc198adb2fdc6615dd7bf729fffffffff0240548900000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac4ada1600000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6010000006a473044022053128aab165f2b639c0f27139345bf409f443735e148d0a7e194f63fac144f2d022032745168202a9758f4984d1ec51a6b58033819a602ae297b2d8d11413320127c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff0280841e00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acfa066c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018010000006b483045022100a77afa5cbb57a007e2635a66ff58d8ade873861f720b794c7d58f816d67d1a5b022061e9da430bf19001db79edfb6e57f089da00bc7d058e3b2169a26f390166554c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff8fe2ff8660141b803ee682b2b534c1e479b445819ee84156ae2a4c716af4bcbe000000006b48304502207e3e392b7756f08bcd940472d33aad3928ab99d4813a88563a9b5e0bd02adc05022100ae70ed5f01bc577f9ea4f8fdc8ce06bf6326715b8b3f88ce49f2ce96c8ba3fa10121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02808d5b00000000001976a91430ecf63c84e7eeac15d4fee29276098366b5991a88accab13c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2010000006b483045022100bfc401ad6fc88b32ebb83496ac198af9d9d06802e7da66908cfdb665a451a21c022022d02bc61834a2e753cf86d26b16e04be7048c1825257a718bacb5c8ca82a6e6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02a0860100000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acc0450400000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000002600b7e6a00a9bf2d59e61e6e657d183fc69f736e4cbec394576b23b73e3bd4c6000000006a47304402205ef1ccbc02ce51e40f07a801ff36e2bb82071f6296102f24133c735b0de7212902206828b97518c918a695a351750af93abecbef72503b83d01f2d074ab0be0ad7ea0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff200741e7edb67c30454485e9e6860d3690bf1d6707c0d7fb57a9fae0b21226b2000000006a47304402204ed38aa035bf6fe2bd0f3230d2c42eedffc985cca4f3bf99e9fdae893f24ddaa022057179264ae2c66f79dcd542e90a4af00cd2d7380bedc9fa1381d31ef7a0031770121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02a0860100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac905f0100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000001c0289d71b287d743ba5aea766c42e8d6e19d28834e0f98013f137e5bb54f7648000000006a47304402204c55572729390d5b619fd54dc1977d2f2b85bbaed86c35c61f37065cbb81e61802203972d887a4b41f58669de675055b0919c8e020ccaefbb9e8cc851c31962d8d690121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac301b0f00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
0100000002c30586174117ceb22ac36235a44b4010ca64e5d4e8067e61a10ea43ceea0e018010000006b483045022100a77afa5cbb57a007e2635a66ff58d8ade873861f720b794c7d58f816d67d1a5b022061e9da430bf19001db79edfb6e57f089da00bc7d058e3b2169a26f390166554c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff8fe2ff8660141b803ee682b2b534c1e479b445819ee84156ae2a4c716af4bcbe000000006b48304502207e3e392b7756f08bcd940472d33aad3928ab99d4813a88563a9b5e0bd02adc05022100ae70ed5f01bc577f9ea4f8fdc8ce06bf6326715b8b3f88ce49f2ce96c8ba3fa10121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff02808d5b00000000001976a91430ecf63c84e7eeac15d4fee29276098366b5991a88accab13c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000028383f8b01884a19fe61ba630ec2b81c0ef94f28bdd931c14e4e99a64081391fc000000006b4830450220074a7f7d1e5b4c942f3b5c3d7ff55c0eadb1543aba967f7495ad7ca4f50805a10221009ad92bac262530814ee7bcc62d8b6697e67614512f586bad47a7f90a26251db6012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff3ed28803b90fbd606d02814de56acebc9cd78f18ec593242bf6330daf5c64f36000000006a473044022061c303c1d9cae88a0689de5a5576f8f231ddd5ad3949ae51035581387fc67f1b02205d74e5cf0a7738d8fc504bc4d02b54111bec638a562aa85febd1697ee9031533012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff02401f0000000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac16420100000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
0100000003add3d2061e6d8b8e2258ff2bbadae599760896743cc540330bcb73222dc4679b000000006c493046022100a48ab4f517e2e2cc35def1b3bd7f7486286cf6e8e7797deb225552eac193b6cf022100cf7bd931b04e1dcdf0d191bf2419e3d4ad8a38f9a85aa2e284691d7e051e27c70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff518b0ee06a6e2cef0fed6977ec084801a7e57d9a04d651db9b2e469c37f9e6a7000000006c493046022100c1663d30f0749b39eb2d88700a22bd010376d35eb4a3355b55b1ce70ce34abaf022100b58b1e2ae11a95af5bd5e40f9a308fbf1a9d72a3263b04b2a25a1e760d6c89e70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffffecd5a84dca64a012416d8e822ca4ed8a0e453b18a750dc693b9be121a03b1cb3000000006b483045022100e7416f8501f894c84bf3815d1344f4702a789b09d9acb19735ca581bafc721740220348d5180e0b705fbb824b7b4742661a943e65cb29765d6fb9509dc7fa3d2fdfe0121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240420f00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac40720700000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488ac00000000
010000000306bd46f405eaa7e5ddd580f8fe35dcd4506948ae126f0af88dfa33694d2ee058010000006b483045022100bf9dcaabab434b83e45036d4d85d5d1db98e69c57c33ff680a85e241da6f64f202204fe9549d9d2a61326cb61976bee52b8d27ff4fc5def614c68e9c0304a4acc7ea012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffffc6845f05f7be810acba26771619e400c70a5816d47c3d36b7aa43f61fdf378c20100000069463043021f588cdd8f367ebb2fa6b9713c2bc611101cd70ed776c6c39056c8f5df95b451022033ab5413a02517c71a4db1d8742ba4297fe12acf2cfe804ca57cec3a945942110121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff06bd46f405eaa7e5ddd580f8fe35dcd4506948ae126f0af88dfa33694d2ee058000000006b48304502204c0d83998dc88332097245892c29e22fd9c19fdb1bdd424673916a32f3a7dcb10221009de64ca510bfa9ea38d363762894efcd87bc0fe4d522d5ab456b94c92ba513b70121025a45c74334ebaa81764929916b9e7720aadfcc1102b80bbc1e9c21c50bbd1786ffffffff0240548900000000001976a9147142459debffcdd3feaf54509a1e82590892b49588ac2ae60700000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
01000000013e22109bc1de2afdb1997aee0abb87ff0859a3f6383ff403529f9deed1dbecc6010000006a473044022053128aab165f2b639c0f27139345bf409f443735e148d0a7e194f63fac144f2d022032745168202a9758f4984d1ec51a6b58033819a602ae297b2d8d11413320127c012102a03f669b63fac92eeca557493712be64bf6a3a25f8a214bd47eccf5b970a7ceaffffffff0280841e00000000001976a914fcd6972b99457e296c53b4b9e08dd4ed7fc6b4d488acfa066c00000000001976a914db50087a385e867b547345e150f67503c4a0b6a688ac00000000
010000000163fa526a44e676b34e13685ffbcd3ae4359542cfe109102d34290362e3fe381e010000006b483045022100af801bbcd31993fead3aa9e43c55dc05d247e23216c0c2c85734ce91ec855f16022079a24fc789ad9b9a49d539a7b3186aa738b624c678e5b42799fa4639012712460121021c2096f2f457da2f88270f038399d41bdc47eba548eb7fbe45ef220cd7cda21bffffffff02d09b4c0b000000001976a9141f55960f620c44146deef7a05d67dc3b9ba2550f88acc085a000000000001976a9140921d8cd59564e31fa305f8e61c3a28dface0c4888ac00000000
01000000020a10e46b3633707ee8b69fe3c612d7bde74d6bb8846cd0898481af23f45d97a2000000008c4930460221009568e7e8fab3033811264884c7fa1e86aa2714706d2256ff8700997db0f2145e022100a32239e7bded6354067881776dfad0588b9acc24512a27b94e4424e855797823014104579a418ab8fbcafa0fa6dd13bf55f8a53f71f0775606df626cbf02b58549205305afe23e06e25cf553afc652e95acab97796cd93fbdade96871ce5a3dbafde30ffffffffa07da570b23036894a6bd0805f56e8caf8518f92e321ecb96f91db0746b652ba010000008b483045022100f2caa95d229b8545fdf8f66dd2514a4c7aed5a45e5de4235cdae85ab88806b56022047e3c77d0db007657846f604025266f7cff69fbc3d465765c120cc8780dfa36b014104c1af4a49bda0232dabf7bbbaf537cd394b3384ee8e5a2455d68151a786a83434d8c4e31f9186a15b4b96268deedc91341280d3b59135b8b5c7ebdd23cc20a900ffffffff03f09b1801000000001976a91487a22176adec84b08698919614e9712726f38e4d88ac45fb0400000000001976a9147c6ab174604e717bc404ef52660c9990fde1ba5688acfdc00100000000001976a914517684b4c2546f653f6f85863e7d6c785561c9da88ac00000000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.