Merge branch 'implement-name-coin' into testing

This commit is contained in:
julian 2022-09-21 06:54:57 -06:00
commit 0cc937db70
8 changed files with 416 additions and 2995 deletions

View file

@ -532,9 +532,9 @@ class _NodeFormState extends ConsumerState<NodeForm> {
case Coin.namecoin: case Coin.namecoin:
case Coin.bitcoincash: case Coin.bitcoincash:
case Coin.bitcoinTestNet: case Coin.bitcoinTestNet:
case Coin.bitcoincashTestnet:
case Coin.firoTestNet: case Coin.firoTestNet:
case Coin.dogecoinTestNet: case Coin.dogecoinTestNet:
case Coin.bitcoincashTestnet:
return false; return false;
case Coin.epicCash: case Coin.epicCash:

View file

@ -44,7 +44,7 @@ import 'package:uuid/uuid.dart';
import 'package:bitbox/bitbox.dart' as Bitbox; import 'package:bitbox/bitbox.dart' as Bitbox;
const int MINIMUM_CONFIRMATIONS = 3; const int MINIMUM_CONFIRMATIONS = 3;
const int DUST_LIMIT = 1000000; const int DUST_LIMIT = 546;
const String GENESIS_HASH_MAINNET = const String GENESIS_HASH_MAINNET =
"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"; "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f";

View file

@ -44,10 +44,12 @@ import 'package:uuid/uuid.dart';
const int MINIMUM_CONFIRMATIONS = 2; const int MINIMUM_CONFIRMATIONS = 2;
// Find real dust limit // Find real dust limit
const int DUST_LIMIT = 1000000; const int DUST_LIMIT = 546;
const String GENESIS_HASH_MAINNET = const String GENESIS_HASH_MAINNET =
"000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770"; "000000000062b72c5e2ceb45fbc8587e807c155b0da735e6483dfba2f0a9c770";
const String GENESIS_HASH_TESTNET =
"00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008";
enum DerivePathType { bip44, bip49, bip84 } enum DerivePathType { bip44, bip49, bip84 }
@ -2033,15 +2035,18 @@ class NamecoinWallet extends CoinServiceAPI {
}) async { }) async {
try { try {
final Map<String, List<dynamic>> args = {}; final Map<String, List<dynamic>> args = {};
print("Address $addresses");
for (final entry in addresses.entries) { for (final entry in addresses.entries) {
args[entry.key] = [_convertToScriptHash(entry.value, _network)]; args[entry.key] = [_convertToScriptHash(entry.value, _network)];
} }
print("Args ${jsonEncode(args)}");
final response = await electrumXClient.getBatchHistory(args: args); final response = await electrumXClient.getBatchHistory(args: args);
print("Response ${jsonEncode(response)}");
final Map<String, int> result = {}; final Map<String, int> result = {};
for (final entry in response.entries) { for (final entry in response.entries) {
result[entry.key] = entry.value.length; result[entry.key] = entry.value.length;
} }
return result; return result;
} catch (e, s) { } catch (e, s) {
Logging.instance.log( Logging.instance.log(

View file

@ -24,10 +24,10 @@ Uri getBlockExplorerTransactionUrlFor({
return Uri.parse("https://testexplorer.firo.org/tx/$txid"); return Uri.parse("https://testexplorer.firo.org/tx/$txid");
case Coin.bitcoincash: case Coin.bitcoincash:
return Uri.parse("https://blockchair.com/bitcoin-cash/transaction/$txid"); return Uri.parse("https://blockchair.com/bitcoin-cash/transaction/$txid");
case Coin.bitcoincashTestnet:
return Uri.parse(
"https://blockexplorer.one/bitcoin-cash/testnet/tx/$txid");
case Coin.namecoin: case Coin.namecoin:
return Uri.parse("https://chainz.cryptoid.info/nmc/tx.dws?$txid.htm"); return Uri.parse("https://chainz.cryptoid.info/nmc/tx.dws?$txid.htm");
case Coin.bitcoincashTestnet:
throw UnimplementedError("missing block explorer for epic cash");
break;
} }
} }

View file

@ -34,8 +34,8 @@ abstract class DefaultNodes {
); );
static NodeModel get bitcoincash => NodeModel( static NodeModel get bitcoincash => NodeModel(
host: "electrum1.cipig.net", host: "bitcoincash.stackwallet.com",
port: 20055, port: 8332,
name: defaultName, name: defaultName,
id: _nodeId(Coin.bitcoincash), id: _nodeId(Coin.bitcoincash),
useSSL: true, useSSL: true,
@ -96,8 +96,8 @@ abstract class DefaultNodes {
); );
static NodeModel get namecoin => NodeModel( static NodeModel get namecoin => NodeModel(
host: "46.229.238.187", host: "namecoin.stackwallet.com",
port: 57002, port: 8336,
name: defaultName, name: defaultName,
id: _nodeId(Coin.namecoin), id: _nodeId(Coin.namecoin),
useSSL: true, useSSL: true,

View file

@ -21,15 +21,15 @@ import 'bitcoincash_history_sample_data.dart';
import 'bitcoincash_wallet_test.mocks.dart'; import 'bitcoincash_wallet_test.mocks.dart';
import 'bitcoincash_wallet_test_parameters.dart'; import 'bitcoincash_wallet_test_parameters.dart';
@GenerateMocks([CachedElectrumX, PriceAPI, TransactionNotificationTracker], @GenerateMocks(
customMocks: [MockSpec<ElectrumX>(returnNullOnMissingStub: true)]) [ElectrumX, CachedElectrumX, PriceAPI, TransactionNotificationTracker])
void main() { void main() {
group("bitcoincash constants", () { group("bitcoincash constants", () {
test("bitcoincash minimum confirmations", () async { test("bitcoincash minimum confirmations", () async {
expect(MINIMUM_CONFIRMATIONS, 3); expect(MINIMUM_CONFIRMATIONS, 3);
}); });
test("bitcoincash dust limit", () async { test("bitcoincash dust limit", () async {
expect(DUST_LIMIT, 1000000); expect(DUST_LIMIT, 546);
}); });
test("bitcoincash mainnet genesis block hash", () async { test("bitcoincash mainnet genesis block hash", () async {
expect(GENESIS_HASH_MAINNET, expect(GENESIS_HASH_MAINNET,
@ -1891,7 +1891,7 @@ void main() {
bch = BitcoinCashWallet( bch = BitcoinCashWallet(
walletId: testWalletId, walletId: testWalletId,
walletName: testWalletName, walletName: testWalletName,
coin: Coin.bitcoincash, coin: Coin.bitcoincashTestnet,
client: client!, client: client!,
cachedClient: cachedClient!, cachedClient: cachedClient!,
tracker: tracker!, tracker: tracker!,
@ -2123,9 +2123,20 @@ void main() {
when(client?.getBatchHistory(args: historyBatchArgs0)) when(client?.getBatchHistory(args: historyBatchArgs0))
.thenAnswer((_) async => historyBatchResponse); .thenAnswer((_) async => historyBatchResponse);
// when(client?.getBatchHistory(args: historyBatchArgs1)) when(client?.getBatchHistory(args: historyBatchArgs1))
// .thenAnswer((_) async => historyBatchResponse); .thenAnswer((_) async => historyBatchResponse);
when(cachedClient?.clearSharedTransactionCache(coin: Coin.bitcoincash)) when(client?.getBatchHistory(args: {
"0": [
"04818da846fe5e03ac993d2e0c1ccc3848ff6073c3aba6a572df4efc5432ae8b"
]
})).thenAnswer((realInvocation) async => {"0": []});
when(client?.getBatchHistory(args: {
"0": [
"f0c86f888f2aca0efaf1705247dbd1ebc02347c183e197310c9062ea2c9d2e34"
]
})).thenAnswer((realInvocation) async => {"0": []});
when(cachedClient?.clearSharedTransactionCache(coin: Coin.dogecoin))
.thenAnswer((realInvocation) async {}); .thenAnswer((realInvocation) async {});
final wallet = await Hive.openBox(testWalletId); final wallet = await Hive.openBox(testWalletId);
@ -2184,18 +2195,13 @@ void main() {
verify(client?.getServerFeatures()).called(1); verify(client?.getServerFeatures()).called(1);
verify(client?.getBatchHistory(args: historyBatchArgs0)).called(2); verify(client?.getBatchHistory(args: historyBatchArgs0)).called(2);
// verify(client?.getBatchHistory(args: historyBatchArgs1)).called(1); verify(client?.getBatchHistory(args: historyBatchArgs1)).called(1);
verify(cachedClient?.clearSharedTransactionCache(coin: Coin.bitcoincash)) verify(cachedClient?.clearSharedTransactionCache(coin: Coin.bitcoincash))
.called(1); .called(1);
expect(secureStore?.writes, 7); expect(secureStore?.writes, 7);
expect(secureStore?.reads, 12); expect(secureStore?.reads, 12);
expect(secureStore?.deletes, 4); expect(secureStore?.deletes, 4);
verifyNoMoreInteractions(client);
verifyNoMoreInteractions(cachedClient);
verifyNoMoreInteractions(tracker);
verifyNoMoreInteractions(priceAPI);
}); });
// // test("fetchBuildTxData succeeds", () async { // // test("fetchBuildTxData succeeds", () async {
@ -2678,11 +2684,21 @@ void main() {
}); });
when(client?.getBatchHistory(args: historyBatchArgs0)) when(client?.getBatchHistory(args: historyBatchArgs0))
.thenAnswer((_) async => historyBatchResponse); .thenAnswer((_) async => historyBatchResponse);
// when(client?.getBatchHistory(args: historyBatchArgs1)) when(client?.getBatchHistory(args: historyBatchArgs1))
// .thenAnswer((_) async => historyBatchResponse); .thenAnswer((_) async => historyBatchResponse);
when(client?.getBatchHistory(args: {
"0": [
"f0c86f888f2aca0efaf1705247dbd1ebc02347c183e197310c9062ea2c9d2e34"
]
})).thenAnswer((realInvocation) async => {"0": []});
when(client?.getBatchHistory(args: {
"0": [
"04818da846fe5e03ac993d2e0c1ccc3848ff6073c3aba6a572df4efc5432ae8b"
]
})).thenAnswer((realInvocation) async => {"0": []});
final wallet = await Hive.openBox(testWalletId); final wallet = await Hive.openBox(testWalletId);
// recover to fill data // recover to fill data
await bch?.recoverFromMnemonic( await bch?.recoverFromMnemonic(
mnemonic: TEST_MNEMONIC, mnemonic: TEST_MNEMONIC,
@ -2696,7 +2712,7 @@ void main() {
verify(client?.getServerFeatures()).called(1); verify(client?.getServerFeatures()).called(1);
verify(client?.getBatchHistory(args: historyBatchArgs0)).called(1); verify(client?.getBatchHistory(args: historyBatchArgs0)).called(1);
// verify(client?.getBatchHistory(args: historyBatchArgs1)).called(1); verify(client?.getBatchHistory(args: historyBatchArgs1)).called(1);
expect(secureStore?.interactions, 6); expect(secureStore?.interactions, 6);
expect(secureStore?.writes, 3); expect(secureStore?.writes, 3);
@ -2723,8 +2739,19 @@ void main() {
}); });
when(client?.getBatchHistory(args: historyBatchArgs0)) when(client?.getBatchHistory(args: historyBatchArgs0))
.thenAnswer((_) async => historyBatchResponse); .thenAnswer((_) async => historyBatchResponse);
// when(client?.getBatchHistory(args: historyBatchArgs1)) when(client?.getBatchHistory(args: historyBatchArgs1))
// .thenAnswer((_) async => historyBatchResponse); .thenAnswer((_) async => historyBatchResponse);
when(client?.getBatchHistory(args: {
"0": [
"f0c86f888f2aca0efaf1705247dbd1ebc02347c183e197310c9062ea2c9d2e34"
]
})).thenAnswer((realInvocation) async => {"0": []});
when(client?.getBatchHistory(args: {
"0": [
"04818da846fe5e03ac993d2e0c1ccc3848ff6073c3aba6a572df4efc5432ae8b"
]
})).thenAnswer((realInvocation) async => {"0": []});
when(client?.getHistory(scripthash: anyNamed("scripthash"))) when(client?.getHistory(scripthash: anyNamed("scripthash")))
.thenThrow(Exception("some exception")); .thenThrow(Exception("some exception"));
@ -2741,7 +2768,7 @@ void main() {
verify(client?.getServerFeatures()).called(1); verify(client?.getServerFeatures()).called(1);
verify(client?.getBatchHistory(args: historyBatchArgs0)).called(1); verify(client?.getBatchHistory(args: historyBatchArgs0)).called(1);
// verify(client?.getBatchHistory(args: historyBatchArgs1)).called(1); verify(client?.getBatchHistory(args: historyBatchArgs1)).called(1);
verify(client?.getBlockHeadTip()).called(1); verify(client?.getBlockHeadTip()).called(1);
verify(client?.getHistory(scripthash: anyNamed("scripthash"))).called(1); verify(client?.getHistory(scripthash: anyNamed("scripthash"))).called(1);

View file

@ -1,13 +1,101 @@
final Map<String, List<dynamic>> historyBatchArgs0 = { final Map<String, List<dynamic>> historyBatchArgs0 = {
"k_0_0": ["bd84ae7e09414b0ccf5dcbf70a1f89f2fd42119a98af35dd4ecc80210fed0487"], "k_0_0": ["d17132f41b2d55c730db5b27db721020abbd4a5087c15edcccbaa106eef8cbf3"],
"k_0_1": ["3ef543d0887c3e9f9924f1b2d3b21410d0238937364663ed3414a2c2ddf4ccc6"] "k_0_1": ["cd3dd4abe4f9efc7149ba334d2d6790020331805b0bd5c7ed89a3ac6a22f10b9"],
"k_0_2": ["82a12031d679c9dd3124047742dc22c2c7c03afa9644bddf55d4c95da41bca1c"],
"k_0_3": ["bbe10c5d3c102fd805770ed2d6c5438dce42c04d3f87e3260056d04245b17ddd"],
"k_0_4": ["d9ca5255516f963d8f348911451e2c69489a70dec7f34a4810ee8b0e32fcb04d"],
"k_0_5": ["2284461fd01b17e7443775e39b19f4378a063ff148938d2e4191cea3fd80368d"],
"k_0_6": ["cd3c32fddbf265410c34a58fefcc849b02fc16978d75e501f88f9effcbecd8fe"],
"k_0_7": ["a3bcc0c3c4a140fbcc4c4f4dff18790d8a2d5f868821f47460f68f0426291b57"],
"k_0_8": ["e400f9431798c87ea35ea19b265d9e56a73fd44c239957d9947ae79e16718fb4"],
"k_0_9": ["1fe8bb16b49725bf3703274e205a4695c398e664284cc68d92d15087a54da299"],
"k_0_10": [
"2fabf8d61308c8b2d914489a9f02f669ed9fa68047666815cf1f3cd1bb5d8819"
],
"k_0_11": ["42a567d344189430afe7d45d6854ef6e9d256d9ef4186afd31a1a5ff90a6a0dd"]
}; };
final Map<String, List<dynamic>> historyBatchArgs1 = { final Map<String, List<dynamic>> historyBatchArgs1 = {
"k_0_0": ["dffa9543852197f9fb90f8adafaab8a0b9b4925e9ada8c6bdcaf00bf2e9f60d7"], "k_0_0": ["bcf7aec7c10dfba33ce80149300a7c4fe66460c1dd05503b5df5780884498186"],
"k_0_1": ["71b56532e9e7321bd8c30d0f8b14530743049d2f3edd5623065c46eee1dda04d"] "k_0_1": ["587943864cefed4f1643a5ee2ce2b3c13a0c6ad7c435373f0ac328e144a15c1e"],
"k_0_2": ["fe6ad514f7427782f964b25995a90a3233589904b88f66a2d0e73e2560c9af7c"],
"k_0_3": ["6b962c5f9b4cfc004c74c5ab849304c405b02fc0e2f34ee17c185984f13c9da4"],
"k_0_4": ["720b79fab9a163ce6534828e8a673c5bf600161eba92c2b81555e79add59994c"],
"k_0_5": ["a10f4cf239abd4bcdb03dbe40b5c1d57ae3a7982adf8f177d481feb0ad3a52cd"],
"k_0_6": ["061f28e17ba1a56404b08a5899163011c7d6317e534ccd8e4d38911574f574b0"],
"k_0_7": ["ffc6297d487a13cb80689c448a3aef16cbd367a503d236d0aebd7218cc568e88"],
"k_0_8": ["f4a6c41fc432300509f97ca68db3b9d802d29f90c35a429e3886c480cdce44a2"],
"k_0_9": ["52f3bf96d02cd7e8c631b8ef36262994a3ec658427b930197ed004c8599cd7fd"],
"k_0_10": [
"7993aef51bebe79bae2d29b775c499f390e99fdb6b9accb8034f657b6e72927a"
],
"k_0_11": ["430214c9805d90c6a8c4489187db08157a93e60509e96b518dc8b5ba3d567206"]
}; };
final Map<String, List<dynamic>> historyBatchArgs2 = { final Map<String, List<dynamic>> historyBatchArgs2 = {
"k_0_0": ["c7e700f7e23a85bbdd9de86d502322a933607ee7ea7e16adaf02e477cdd849b9"] "k_0_0": ["afe5085dd514032810d5b266007557ba8a0f4bee84535cb10754c6d46ab8689b"],
"k_0_1": ["dd63fc12f5e6c1ada2cf3c941d1648e6d561ce4024747bb2117d72112d83287c"],
"k_0_2": ["e65d4274e8edc5cc1e7b676652e2e13b0b00648d15cf13caa982ecd6a67731ba"],
"k_0_3": ["6c69ca274f7d7f2fae882a87bcee93d9429328995c5bc6b326b548b4cefcaa9f"],
"k_0_4": ["86f1a5e17dc42c27cdb0dff8a41c2434575ab05ed2f3689fd7b674677e5ea446"],
"k_0_5": ["a5d9b8df5b80c56e6053497a8c89a37267010926e80e0d225a019b78673a7aa7"],
"k_0_6": ["a0030024518874720b82b38d965fb5b3083d9f42fab40e6be4797c789eeb06f2"],
"k_0_7": ["f20077f7c6a6b92a1f75bbbad8dbece9ae4609cfdfc85e40ccac7d463bdfd6e0"],
"k_0_8": ["07b7bb4020c377e0741587efe9c0b3931e2e45f667bc6f1fa81a8f15fbe86ce4"],
"k_0_9": ["ca0322fc293f6e4d8c8adac178ed4aaedbd9acd2ec84acaaf1529f9ab7bda6d2"],
"k_0_10": [
"06df1d13aa43375775d7d2838595a0c4c642f8af15b06a99d5115d9236e9a79e"
],
"k_0_11": ["1a146c5a8dd5bf49faca3c6f65c9d955d361c6c00893c48d69cf7ff42c7b387b"]
};
final Map<String, List<dynamic>> historyBatchArgs3 = {
"k_0_0": ["5c2c77a3671417c5831c336805770344b81e6c7ef0d873c986ba65a7bacd5f68"],
"k_0_1": ["c068e7fa4aa0b8a63114f6d11c047ca4be6a8fa333eb0dac48506e8f150af73b"],
"k_0_2": ["f430c440e90c48b9e4c7e5356083e7c1495b7cad53f39ebba64cca9fb3d05c82"],
"k_0_3": ["30a7ac6789383f7f6def9a927f3b6fb661cf9406fec71a1d118c7d86052382fb"],
"k_0_4": ["a797225a9155417ab18e16b9d7ce9bf4962ae5c05df572a33c60b36a0523f257"],
"k_0_5": ["24d1e3ac9e53727d943688e67eb5c000d993e9c3cf9585d630624197fb73bed3"],
"k_0_6": ["d667a44404519649cb65632d6a3be948a1f0971025c96cb4211943d301fe0d3e"],
"k_0_7": ["be8da400f004546b528fb989c14a88324b8b0c2d5680cf080ae1e1dac4401f68"],
"k_0_8": ["addfa7682c0a2461ab0e82b3c9302b38986b442a1a76c3c839b6c2f0eaa805fe"],
"k_0_9": ["98bb3aab55f4f305fd9994334b8dd3321eda50b25fad2ef3e636714b650d0bb0"],
"k_0_10": [
"bee1eee20d7169d03ce68d340a17f4598f589920513ec19c458db45399639a9f"
],
"k_0_11": ["928a988dd65d100d1677a0478abfcd4d2a70aabb0812c58a2b1b4b51c395ed54"]
};
final Map<String, List<dynamic>> historyBatchArgs4 = {
"k_0_0": ["6bbfd9c1c28d6984646db4736196f67f2d1075894bb1d8990294ca7d663bece6"],
"k_0_1": ["42d6e40636f4740f9c7f95ef0bbc2a4c17f54da2bc98a32a622e2bf73eb675c3"],
"k_0_2": ["191c977174dc50a57628aea6684c428d3a5e90bbe16c4e412be51b0cfc589d38"],
"k_0_3": ["0daaf61564fd07a25ef106d958216992896f931f5bed4fbf56cc3f94443dc164"],
"k_0_4": ["ac5aca40fed2903def31c9ef1d60874247cdcc5b85238c7a1d83c67d2924d6b9"],
"k_0_5": ["c4102ff0556d863b4bab9d8232fe1f0c0fde4b6e4fe23064b4ecd0958f9726cc"],
"k_0_6": ["1c4bd1554e4992e5914dcd8f3e13927ffd46302dfdcbd2dca0cfd47c040c4256"],
"k_0_7": ["eaf5562ebef7cafa58e2c1fc4ae023e5ae8dd71ee637b08c4bc7e274e401a9a4"],
"k_0_8": ["06f7f55c221fee1b36284b5360155b8380cb9d7172b7e28eb37c61b7ebb6f227"],
"k_0_9": ["7e7ca801131ec1c5797f2c4aa46908ee50e9958cf1cbf53c2481d110800c3d6d"],
"k_0_10": [
"3895e073aa034add7d2589bfdd1e54f6b9a8d7688d63fff0c3aac7950c6f9697"
],
"k_0_11": ["ec17dd7c4fe8fbcfce94e9237d3c7ed7f5c91a45b1a060406e206df7e814b006"]
};
final Map<String, List<dynamic>> historyBatchArgs5 = {
"k_0_0": ["83b744ccb88827d544081c1a03ea782a7d00d6224ff9fddb7d0fbad399e1cae7"],
"k_0_1": ["86906979fc9107d06d560275d7de8305b69d7189c3206ac9070ad76e6abff874"],
"k_0_2": ["5baba32b1899d5e740838559ef39b7d8e9ba302bd24b732eeedd4c0e6ec65b51"],
"k_0_3": ["9892eb48394b0e155f63879fb89c3b068fcc071fed2e5cb11fe0729b85b53d67"],
"k_0_4": ["64192782cdaecb5e2a871a2d0fb3f541873e4750cd4e7d28e4d858ab40664a36"],
"k_0_5": ["4047ff48e96d25628acfeaec6ca75c1a668c54fd70a14414827cb59976a3b666"],
"k_0_6": ["299e8bc634ef6438c5bf99c12c2340c77c56ab974ffd767e77c17994e5cfaef8"],
"k_0_7": ["ab649fa14452563b385eb025e0b4cf2dd869c02fcdf2ec0f72725bbe2adaa3bd"],
"k_0_8": ["6be1ca4f8ee923e32137b6cdae324b841a0a60afbee4f4ae457fe31f29e001a6"],
"k_0_9": ["2a99ceea87df667135cc1801682d2c5dc7b95b7efadc48e156345ba46f4c0dc6"],
"k_0_10": [
"9304094916a19040d3c8f10df90dae1144d1f09ac9e676e66bb76341c70388ac"
],
"k_0_11": ["01b12fb2ea2533226471dfa863133ce390e3e13a804734e8af995a45aa7c7582"]
}; };
final Map<String, List<Map<String, dynamic>>> historyBatchResponse = { final Map<String, List<Map<String, dynamic>>> historyBatchResponse = {
@ -89,7 +177,10 @@ final Map<String, List<Map<String, dynamic>>> emptyHistoryBatchResponse = {
}; };
final List<String> activeScriptHashes = [ final List<String> activeScriptHashes = [
"83b744ccb88827d544081c1a03ea782a7d00d6224ff9fddb7d0fbad399e1cae7", "dd63fc12f5e6c1ada2cf3c941d1648e6d561ce4024747bb2117d72112d83287c",
"587943864cefed4f1643a5ee2ce2b3c13a0c6ad7c435373f0ac328e144a15c1e",
"cd3dd4abe4f9efc7149ba334d2d6790020331805b0bd5c7ed89a3ac6a22f10b9",
"86906979fc9107d06d560275d7de8305b69d7189c3206ac9070ad76e6abff874", "86906979fc9107d06d560275d7de8305b69d7189c3206ac9070ad76e6abff874",
"5baba32b1899d5e740838559ef39b7d8e9ba302bd24b732eeedd4c0e6ec65b51", "c068e7fa4aa0b8a63114f6d11c047ca4be6a8fa333eb0dac48506e8f150af73b",
"42d6e40636f4740f9c7f95ef0bbc2a4c17f54da2bc98a32a622e2bf73eb675c3"
]; ];

File diff suppressed because it is too large Load diff