forked from drivechain-project/mainchain-old
-
Notifications
You must be signed in to change notification settings - Fork 5
/
sidechaindeposit_tests.cpp
295 lines (228 loc) · 65.7 KB
/
sidechaindeposit_tests.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
// Copyright (c) 2017-2022 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <core_io.h>
#include <sidechain.h>
#include <sidechaindb.h>
#include <validation.h>
#include <test/test_skydoge.h>
#include <boost/test/unit_test.hpp>
BOOST_FIXTURE_TEST_SUITE(sidechaindeposit_tests, TestingSetup)
std::vector<SidechainDeposit> GetTestDeposits()
{
// Serialization of 30 sidechain deposits in valid CTIP spend order.
std::string strD1 = "00227351504579556374715152675170755847686663545637324868336a7a7047664e5702000000082b1391da7ce8498bde6ec20672deca736a967193d44d3b89335bde858fc34f07010000006b483045022100b20f8dc132f7329f78a488d2258334d692b23b83655477bf865c7acecab08bec022045141d9a381ccf7a124ee58fa66df02c7d4ff8f96be58dd9d993036307ebd008012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffff4f1a5f0e9f9b26f0df2c695a5a407329f6f38e83bc0ebd212cd2de5f1d1b6e9a000000006a47304402206387fb429f502995d0a67ee2310f6c79371583d6033c14726ccb4cd63bc87d74022007593acfcc5cbfe1e69b18539604b87a2a8d7131ea28264bff44efa5496ef367012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffff7e5594f6f4670eecacd10166b452fbaa91ee2f9fd202d13c534ede76e0ce434c010000006b483045022100a9013cf039f63391d9527c6feef1d3b76025ca467e6f7abaea5f9354d99425e302207ca96e966f8b2b05876787ad68d321721fac34020c45a0420af14aab36706293012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffff9bf59fe211d06509b3fed5a6a185b591fcc12dac76378e97c5becdd83514faf0000000006a4730440220787dc04a445ee8b9bfb5c71faa44e11a5bf6a581507a16b6fcfd94e00c136e2a0220074bd991cf2efcb26a5e6b62c94134270ae67b7ead1495456cb215773c8c6f4a012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffffba1ec26e329ed8d471b8d22c92ec52ebd7931a0465a5bb6e43091e58cc9d274a010000006b483045022100a7e6aa625ea61003624752fccec6a70fb0aff0859773e7435582e4181932817102200be405c9229c27eda97082da877e9d7523095b569c21c47792db4a94047c7f22012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffffd18d75d8025f0b0edfa9ff82678ac3fe2297ec5270d735b0dae0a4a2a1a865bb010000006b483045022100f46fb551ee0a72ebea25d83379f61a7afa7fdcabd0c71faacd5c80f945e3a545022048c0c88423173b5f760d17994bf8261a9335fd5253c1a940ec3e5c1752c7080c012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffffd41e61a2ff5c5e68edc25b55908b94a0a47ac8bd80d2fc8c64dddc85f046f211010000006a473044022051d6a431c8bf2a4e45fcd3a0c0b0c7f49d30f90e0765c8d64fb9e110d189def402206ce4f931383aa2c267caae72a3330bb10aaef3e14c6cc2180e3c8ebd5d4e5648012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffffe5695e56a9789b07f73daece564d72436b3df1be68391b9fe5800f801b453576010000006b483045022100d5024bb0d7943999d593bb1e1e7cac10093266255d00a7a7672bd5d791502c3802204b773f8f78b43faa36cf7e63dfbe8ea25c1840b475b6dcb5820e94aa939ca44a012102884ee2b446e1f8361a1a1d3e14f4b37769c1f5fdf0e345154f6af36b4e8b3fd6ffffffff0398417c3b000000001976a9146768cf7f55730ac25dcdbe0657ef316005ad326b88ac0000000000000000246a227351504579556374715152675170755847686663545637324868336a7a7047664e5700863ba1010000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000719dc01213d6701f3f6e0ba101b629a545fc90fe105bd4c2764c52b5de796f5d";
std::string strD2 = "0022734b624d4c5367515a683659576879505a64314e736267355658704c37746d736f32020000000001110940a6c1723560e198b5ae08171721560d8a7b721630f6baf1eeb700c5c656db0000000049483045022100d843cfab92614f46480ac498338c623868550a953ed3a377d6ff637407fd90cd02204be5f07eff6b17133bc08c459fd9bc7cd36c99b25f9c1de7c4144feb8d269eca01ffffffff306ac266f33860e7520dff7ede795de6f3b8e1baeb5e6dd3ca2d9e55830752a5000000004847304402202f8b573138d512b1cd0f349b3c340b986d7d59c6fc55166b206b1002d15f1905022069227f27010d89b26b007efe7a4172110573f2531b725e1235b916538905162501ffffffff3188d9dd6657441448ad53a9b1ba57f8c52b9f5a0b3d9bda8f2fec724b14c843000000004847304402201beaeea8ad19efc9de07e5031f5fc2295cd05f8b14439d404a2d04e5f409655802203ca1585882694c0b8d3acf4183f032152a077187ea02dcc4a63aad5a4234df5901ffffffff3e41ad606aa741892c45a23dfbe8fbc66067266f83aca58850724ee16c69eed3000000004847304402204ac7aa90b16fdcab25e4547449443cfa44edb120ebecb4aa598c51c7d61dd742022043ea815f27ffe6284948d407856572c2181ef7f50e433f151fb43f6ca08b07c601ffffffff4f7efc0853ac03feb52481ccbdeb1c4fea15647543521d7125c663bab97f6b780000000048473044022019fa9772160f9b9e6371cc5c93f6276f0ef6e9654bfaf207e72c6457650b66bc0220225158d42b0813b30b4972256af23434a4661bd7f1edd9dd52094e01a124dbd401ffffffff5a40f393815b7669ac8a704d99efba75f743637623bf51256bb42bc39b161338000000004948304502210096007d738e7c3d07983affad2f7b88ca883fc5ca48cb9bec92dd3f2ae3dcf9f60220732b1b8200dc477b0f1a104d8b2c0c9efcca845afc85f50d990d788412bef1d701ffffffff6fdabceac1d75d7beea7255f4c55f82500ac6287fb0d911dca0b81330cb252760000000048473044022013d428eee166d3bcf4f1cb12530bc36b2dc9c468bbfbcea178f6a4ab292483f602201687d83b6f28ddf4772f1848a4017c851c12265b75a905b3610dc643abca6e8601ffffffff96af831038547337a7d83b9e059cba85a2bdf96824dd7fabc51479902c116d9400000000484730440220674cf40a7bbcf2a82354f4848731adef048b720499a0ee786648a91cbdd91ede02207fd730f4478d20014239d1dd3352a3361c9f80d679c6ffdce03dfa73b216a6f701ffffffff9c5c56c0820515da836998c11e9f4acec6e0b6112a3d3a175d7289004a6db6b80000000049483045022100a3a8d5fc98ba7f05311f205a16bd3ec3e43fb7bbf2a5bf13a8005b4a1af889c502203c653e607723de539d0df67e066be0a9b87061737f89982b546adf9d9bfe4d3b01ffffffffa736dcc0ede53ee5404270dd452ad58f3b97c637c8e78ab4921bd75d6af41612000000004948304502210085a2769c17ca86972716f88ee1a9dd3b41174704c0ce493cd36323ba4d7725b402201596f47502bf5c36e94ca0ce457be4fafa3e5494ae0641616b6d43e0a6492a0a01ffffffffa8dec57cb3ed6aee9ffea95525d429d92d07abf5ada437799b45cfe914dbe3340000000049483045022100e25cc1b961bdc66bac85f51d75eeaae0d23e7e815a48d59b161962aaa5d49b9302205d008cf805cbd0ec7628f513eebfbdb0cf7ba8dd4b394e101150020effaefb9c01ffffffffb592a363adff59678db5aa03bdc8f1d0cb33baac01124deebe76264ad408cb97000000004847304402203aac421302e192520c1bc1c1c6c0743ac9cdd0d465fdf8bcdc9775f19da0a60202207ab52901671acb83f2f560fd4138bee4e5f6ffc496a5b8e9ab4f5df9e230f00301ffffffffc223288f210425effb7b202a41e06641c68210514ca3ac2e5721f57bf6f72eaf0000000048473044022040935d646aab7efcd281c740059b9e0da16b7f44271524107f18d8722f683d11022029e44cc04e84f49b180e71534e01130759c1a21650d3e7c9c4441e4d402cae4e01ffffffffc8576dbcf090267bf7dd09426925b96034a929461376e574bb7dca6e788453c10000000049483045022100d0f689c76bba60f3acaef3ff199c204503952933a41f9c892d13063087890f7602205782d2c40ce3b93fa658399f8bb409b7edd81c68a9cb614bae93109a8057ffc101ffffffffcce0a926ab02872b1ffbcdb7b09acb426c39404b8e1081c168eaadcd2a04376501000000171600144af794ddd7c86ec8765769fbc3a812f5081b503ffffffffff1386ad53e2a62ab98b1d440df96056187738f326ec31c3798dd0f8f6539ccd00000000049483045022100d1c9b2eb8734a0fbd4206f3fcb7a66580e4c59c02784cafaa081107491b0909302202ce155237e5343df97220d3477a121ec2ad13d26ee235e8c03d37d021409461701ffffffff03f0f050976fec16fd96c0f0587442bda53e646df91ce44bb00a4cbde5b97e07020000008b48304502210088b369edc56505be1019f047eeb396c54dddd9ba0c7d60a8db098aa1c58d9d17022013144c4cc6ffcc84bc8b0793d56185c923561d8551b902d67d3f048d48a48cca0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a8c7e34c000000001976a914e33063fdc5c4580e25cb498be1357bd6bf53508c88ac0000000000000000246a22734b624d4c5367515a683659576879505a64314e736267355658704c37746d736f32006f83b8130000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0000000000000000000000000000024730440220617776e29339f4c7cffb2bc485891ae069657a220babaafdaf4b65a820349d5902201f6c1a442ce91c9c2785aef8a711998b8cee1aeab1227ade727156d42e7504e8012102495ed8311a2c9aac6c806080e8069788566ed28531a330aaed934a77ffd2fef500000000000002000000010000003c22aa59272290ef6f723a2a78415bb9470d328c599a3d73f1dbe2f963a1f073";
std::string strD3 = "0001440200000001126db210cddd2c8429f6c5562e842ccc62117a65d22d73b7bbd80520c102e554020000008a47304402205f22323a83c21e858a77ddbfa8345f479783c0902272581e57e388a3607b8e600220105e0d74ae8ac5897a1881b9e6cbf5f3bc6249ffcd98517c526b613928829a0d0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff0d0000000000000000036a014400000000000000000a6a0840d2df030000000000e40b54020000001976a9140b3acb5a0170c683fb60cf5102aa9ab7a00ce1a988ac00e40b54020000001976a9140b3acb5a0170c683fb60cf5102aa9ab7a00ce1a988ac00e40b54020000001976a9140b3acb5a0170c683fb60cf5102aa9ab7a00ce1a988ac00e40b54020000001976a9140b3acb5a0170c683fb60cf5102aa9ab7a00ce1a988ac00e40b54020000001976a9140b3acb5a0170c683fb60cf5102aa9ab7a00ce1a988ac0084d717000000001976a914763bfdc265dc0eab5039748b67bf905829a8d0fd88ac1e84d717000000001976a914763bfdc265dc0eab5039748b67bf905829a8d0fd88ac1484d717000000001976a914763bfdc265dc0eab5039748b67bf905829a8d0fd88ac0a84d717000000001976a914763bfdc265dc0eab5039748b67bf905829a8d0fd88ac2884d717000000001976a914763bfdc265dc0eab5039748b67bf905829a8d0fd88ac5c943299070000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000c00000001000000d7f6e1f078d30021e498ce5800eb21590a67e2e693dedfbaa1213cb406bff9cd";
std::string strD4 = "00227363367468766b6d774c4634505647457134753646664e4862547a7570727a48695202000000000102449ca9ee8ba5d082716f97a4c52d3d1c0d4407d4ffdd65dd224e6052aa4594a2000000001716001439b6ac9cb238d73d973b221cd626f7fc16571f5bffffffff8499ff8b3baa86095f7451fdbed6e3b1b70b4a4540c9fb07c04afa7f8c0742660c0000008a4730440220541f142683b9df5aaca595a865ae72a3a0588eca635b0ff7cc829c8df5da237302203dc6f6b7959d3bf7580aba5546e876bd7bccf7b79e9d8e65db8e07565721c7590141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03e84fb670000000001976a914184d0522d8b03e80b31670408bb16f7b69cbbb7088ac0000000000000000246a227363367468766b6d774c4634505647457134753646664e4862547a7570727a4869525c095e16080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac02483045022100f37667d508dba2f5eca4cd215b22434d556b6b80b0803e977326cdcd9f400e750220642295d99ff89fbf23415eb21ed85b4f1beaf8d8e62449ca041cc2f2ae0a1c9a01210349a4fe52961fa4d81d62c8c329b8a65bfc476f1c7053a1edf4ede64ee593bd9600000000000200000001000000e39ed68ba164cd1f6c23993743cf1d40a7b7c26f0e9dc33acd544be249080d70";
std::string strD5 = "002273534461376e31534b476a505233707454344b4632336138344848364d755a516f4c0200000002126db210cddd2c8429f6c5562e842ccc62117a65d22d73b7bbd80520c102e554000000006a47304402201007128fc6b1dd4109f8684dfc57ff267c96c709e376b5264c29c1eed018415702207e7d7422203539db93aa289e492c95e254eaa7f1440774ef8115a2b2606c559c012103258e812ed11d7b67aaf7d0533da9430ee59e1bd5ca9c3a34125cf5a1375f0ee4ffffffff9fc8c0401b382d489d900ec6f408f8f1536920d3d5f493c808937d2bcc1743a6020000008a4730440220466fae8855fd7ddf3f28cb7b21c4d4bc486cea0568e0afe7da58c71d17d1fbee02201e921e308a6f7eba9fb77b6cd0e1b13465e97d48c7888fc8304a926e6b69929a0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a88eb022000000001976a91430fec005a46bcb511e4de7d819f4cb7787fb22e188ac0000000000000000246a2273534461376e31534b476a505233707454344b4632336138344848364d755a516f4c5c301740080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000002000000e39ed68ba164cd1f6c23993743cf1d40a7b7c26f0e9dc33acd544be249080d70";
std::string strD6 = "002273564c4a51374742446638374a6159476264793164654773436b707a745274314871020000000001027e5594f6f4670eecacd10166b452fbaa91ee2f9fd202d13c534ede76e0ce434c000000001716001445e17afe847dd3322bff4e6a2d76e9c7361e365cffffffffc1e10dffa80e76e4ac924dee2f9ecf89b61521f2df035920d8e9756b069be21d020000008a473044022071435ff831aafabb32f797c807f20d164cb43daac3300efd49bc9cbdbf816389022010829d06976e0cd17f581917be2f1d5d9c37d786072d28a89b5a593bdb39b4f00141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff032826fbe7000000001976a914fb8d4ceab8e302406e4c8410922448d82cb15f3988ac0000000000000000246a2273564c4a51374742446638374a6159476264793164654773436b707a7452743148715c110d46080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac02483045022100b3c417d891b8bd08bd0697135e9b401bcfe514a7d0fd39c50552e07970135c12022056e7014440fe5e5231ae4b1871bc4b6b54f21447430a2093e940495da831b0e4012102b1ca694ef66b40ababa033cfb6e2be0ba1297a68094976c160087b4371a9e06d00000000000200000003000000e39ed68ba164cd1f6c23993743cf1d40a7b7c26f0e9dc33acd544be249080d70";
std::string strD7 = "002273564c4a51374742446638374a6159476264793164654773436b707a74527431487102000000000102722cfb40b850f290f7dd451c459e5703327ae96ca5de0fe95a3446d5c06d8d480100000017160014e09072e044dc3f53b8aaf2bd1fac675cab3d7f3cffffffffca66c560e92ace2b8eea5288801213e8a1a4757b8c1e5e70eba7a3bfce3791ee020000008a47304402203d0206df82cf96035163681db924182ea37e15ec7368f7d67535c07760d6c5fd02202b7decb966cca47107fd24aeecd1e8672c3792f6e5a15eb1ac516c6666c735e90141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff032826fbe7000000001976a914f28a5ba23cb6f6b98e9c01a3441d8bd51a1a131c88ac0000000000000000246a2273564c4a51374742446638374a6159476264793164654773436b707a7452743148715cf2024c080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac024730440220510ac711c1d2bd54f8752a1fc9d6eea8b20cfad30852275395abd613d6181155022021c964c96c9d1809a98f5377a2c3f00d732b8bb8a054968527f797715458c9840121032a80b21dad88867ca707f0a055c2b74ec0f076659e7f3b05159a8287489dd75200000000000200000004000000e39ed68ba164cd1f6c23993743cf1d40a7b7c26f0e9dc33acd544be249080d70";
std::string strD8 = "0022734b366f37545365463765485764554c426235437557423635704e54785a4470466302000000000102d4f538f9f41e6c4bd7a70733f42c1a7f7b05845dfb63f49cc47b30a0aa54cab50100000017160014e8d63d3f369b07a3e2ae032842cb4cd1749b6f43ffffffff3f374ea4afe992cb3bc87489848e6fdd8f9000318a1c6f69caeddaab0177cd21020000008a473044022011b719d221a15febd1ae840d7eee787dcaf73e3490b37f444b00a45b70748a80022000aaeb25f10b22ec51ce35dcc198c35307b0d912357e0e605bad49a82f62e5d80141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff032826fbe7000000001976a914dabe7000a79daecba7e4860243857530ecbd391988ac0000000000000000246a22734b366f37545365463765485764554c426235437557423635704e54785a447046635cd3f851080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac02483045022100db4c8880949b091e3a49da3a6c032579e6c5ed8848686cde8c93f219014f40ac02207f2d78023daca02b7ded82a1fb4905eddd243e9ebf81306826f29b5e5d8d000a012102a72510f732d00d06ce0819170ed4bab1d14c4a264d05775b453a5ae68c5b589400000000000200000005000000e39ed68ba164cd1f6c23993743cf1d40a7b7c26f0e9dc33acd544be249080d70";
std::string strD9 = "0022734b366f37545365463765485764554c426235437557423635704e54785a4470466302000000000102ac14c61e9047c22a87a546a61057c8f87c3a22b8a501ec051007e6d58e818a30000000001716001403885d4a43d243f518ed92018a33679234bb8c6cffffffff6bcfcc9841a1943fb444442accd4a39c8158c16efea6ec4f539707b929f88b12020000008a473044022020285e5fa0014cfe34aa1cf58854f534c3c64ce2c3ea9abe7c1ba3ae7e445fea02202a5eccc833891aaad579ac2db086ecd6c8670d92990e1174a86473574e60a5920141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff032826fbe7000000001976a9146a0037ebe641a334c4615c4f1b466e5754545cc788ac0000000000000000246a22734b366f37545365463765485764554c426235437557423635704e54785a447046635cb4ee57080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac02483045022100f3a10cff62c5e7af6b4b9bdda81b86a3b557b950d3abba2227a9b34504eea50b022069c74c759ae955325fe0f9997372bc888594937b18c0e84116b6a4b7bc8d34c10121038cd5f5dccbcb78c8a7f0d37d4eb19eadf523fca8ae612c2fd20fe495a2d2f6d200000000000200000006000000e39ed68ba164cd1f6c23993743cf1d40a7b7c26f0e9dc33acd544be249080d70";
std::string strD10 = "002273555a6a424d317447454a436135313661353639426e65484d4c533237794c4e366f0200000002c1e10dffa80e76e4ac924dee2f9ecf89b61521f2df035920d8e9756b069be21d000000006a4730440220082ceb69af2b186f54956449f3419a7286faa8d026c89c0889b89a30ef44179d022010001618d22ad2bca99da1d5ee189658293766dd096840ebebacd5d2da6e005f0121028ecaf9623f1d353fb387bf19ee293b5625f7939e9057f8f6a320c95ae8f7e870ffffffff4f6d9c063b72dfec943ae768e48b7f33461247a9258f57a809aa5b8eccd16885020000008a47304402202315e9609815f5f6f2c44ef5524da1231cff7a110f4c0ae5d838bc5976a3da0002200700a665789d8046d4edf51d685d263b221f7664b751d246835ee66521dac4940141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff0328934a04000000001976a914d0b461c91ca7f358e21dc4c54c44908bb8b8fadc88ac0000000000000000246a2273555a6a424d317447454a436135313661353639426e65484d4c533237794c4e366f5c19bc75080000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000270faec2b3bc2681f6f99fc9d8e67804e0d14b2a96b1ee7272369e2fb01d56be";
std::string strD11 = "002273555a6a424d317447454a436135313661353639426e65484d4c533237794c4e366f02000000110e38b453e50d06a27868a175df138568edbff56fb8969ea4e11172bc521257f10000000049483045022100f3640918db7242c5277a51ee6ef2b75dfa0a2bbb13da78ccd202cd2d1be0365f022046dafe2f578b0411e11163284a5e1875c77b6e41d41e6df37dcff224d2602fb201ffffffff3332c31bc9f6689c1c0b5b0330f26c53e86ddadd893975c43987065179a79ba90000000048473044022075e154c0903007626a115db0d60c95479346abaa33353cf7cef6d8daa110551002200feca377ae07487a1ecc2c3dca0c5f7a6430ac77846b182c1aeb670dd51d7c8a01ffffffff3a96dbc6ddea63ea7d08cdce7c1e2c4882219b73e0d9c9566a7320feb9fdfd770000000049483045022100cd9f8af9433af20684dd8e47a8483b8c5451de967f1d8396080b25a865ec0906022071c7268ae7ebdeb11ab0d991c639aa31ec5d623038b60b5cbcfd8aa2ecfaac0b01ffffffff5adce653ba8caafcf0e06a2d16bf5762f18f5c8133f9528b710090b341f6f91b0000000048473044022030a5dde5cb09aaec33de1e5d6000da68bc0249fb36093703dea867244a5f88f402201bcc032cf8ddf4f7f09eb7cdffc42f9d4b95a6d332cda3ff8c0a25de27f6d8a801ffffffff5bff8367c31638e9929cbf0edba8b396a07753272fdd592152e0fd0226977ba700000000484730440220063c418a6c081aaa94874ae6fc4db68fc5f46d2778114d22cd6f749a47a78210022002d794bfadea5e192c65764b4c099e8fc772ee6b614998c4fbd5857457e43c9d01ffffffff6a2bcc805a5d4b46bea2e74b12d9a794145000c3d35a71cfe5a45f09b7f7f69b000000004847304402202a20ac727d130383f4c9f84f68128f866366c9988bdd426a3549b81c3af61c4302200b60d5553aa1a44df6af4b2f56edec0053eee2620ad942741e1b85b68572a78101ffffffff7a39186b88e6756f3cc695a8a7a15e25b5bcc1ef1f4d0d3139e56b687652926b0000000048473044022038847fdd5dabdfcd94b981a884d4bf5159f8df885a9cc5f7313e75273a17ba9502203ceef355ece6d86905a8f11d3e0f81f87987bc06bffb1ebba3ccb3bc7d25cce101ffffffff8499ff8b3baa86095f7451fdbed6e3b1b70b4a4540c9fb07c04afa7f8c074266020000006a47304402204b1204b4abe2d448b4b98b70bbe4e8cd88618d7df9f8623fc1957c55060dc23c02203f06a7f5aac7cb9ae3bed3c78ea0093d62824a698c3157fb86e65dba163d4d04012102a162509adef6d192e0f320d3e2e740e03a72424f16721bd00cf6bb3be2bfbb63ffffffff8499ff8b3baa86095f7451fdbed6e3b1b70b4a4540c9fb07c04afa7f8c074266030000006b483045022100e644c576964ee6e5dd62581258224b20786c32ceb5c4a8a6cec046af9b1da0b002202a0013b13b1f6927b5772dfc37e4ab6a8029dadb9d5663aadc0fd02051d4c77a012102a162509adef6d192e0f320d3e2e740e03a72424f16721bd00cf6bb3be2bfbb63ffffffff8499ff8b3baa86095f7451fdbed6e3b1b70b4a4540c9fb07c04afa7f8c074266040000006b4830450221008469a16253a51783fdbc27b489b1b2fbd083c3ef35c1a0f2a7de3d5114193fcf022042d3aa24c448a17e869b685f65c20822d403c5cc642f9c7aafbea47ea17db0b1012102a162509adef6d192e0f320d3e2e740e03a72424f16721bd00cf6bb3be2bfbb63ffffffff8499ff8b3baa86095f7451fdbed6e3b1b70b4a4540c9fb07c04afa7f8c074266050000006b483045022100845a371466b8bc54024eb3ca54ff603ba8b3884dd556a66bafb8b6ba3bdc4d5702204a7c67b1f35fe33013c73d6335968a8192f5ebf612f8d994949de8572a501918012102a162509adef6d192e0f320d3e2e740e03a72424f16721bd00cf6bb3be2bfbb63ffffffff9365cb772b2ffe1a614582ce565110d2c2ab7e0450223d3abae4a326622e5c5c0000000049483045022100a4e3e208e40236b681cdf3601468e9dfe719c92dba7c098cc7e5dae53261d5bb022054157a948fecef18ae527679121ec46fee3ade409bf594a7c9a2e4f17c8fdf8c01ffffffff99f92c2e332a5d87ccb3ee8b7ec0e71056ac01ca90cc0e4fbd2bc7792e10abdc00000000494830450221009e19c869a3618a8cc9faa697e7735c4dfdc4981e985e1038ea2072ef2db4f4d1022065639ab8ab15f855af7513d0d09774c297375591eb0218935582ae67582f4a6201ffffffffb39a0af5b5853f14b7bcc25557b662880ffea21ed8e3f6411acdf8fc4168fb970000000048473044022047e62b6dd7e7be3e8b8a9d33e7c7dcc7d7110cc406ee0074cb80cdc8d1db75d80220371afc13cb4c198ffd7d842d4ad603b21fb0be954071630e4a746a9da22f764a01ffffffffb54e2d298ca12ed0659273b82052bfbe39f0db852739e5577ff95f50929f989a0000000049483045022100e4ac8b3d1295b5b4052fb4df3224288e2358728ffdbd771b8082f92ec3e864bc022027de063666ad24f57ea14a38be5335462dc6607e25fa7ba78235664d24183ed701ffffffffc7aa3ef1331cf79cc0e24ec4da906229f63b7cfe28bc53eb68ce3add3410ff0a0000000048473044022020017658196bfc722ed914cb975fb5adde7807436b0ef3479bdafab303cd5b7502205d117bddb065e05fb6765e1854fd7a2477138ecf2104fa3760e3819c68e6042201ffffffff3570da7e7bbd8b84657c72ff429168f239e34fd24083e734df10306b60c0a73e020000008a47304402204b3b79270515f716d6444b95235bdeed1ca7c5eca0c2ac9446dee9adebfe246102205b708b73250dc84ee38c373655ebc6dfb42b296068e41775bb375278013303f50141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a42d1f00000000001976a914df30fd7648c2cad889bcd411ebf76332e5618e0188ac0000000000000000246a2273555a6a424d317447454a436135313661353639426e65484d4c533237794c4e366f5c0133be1f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000a23749f1230d64c2bdb4617679fb42b3924d1f1f6b1aef10f7cdee48796616a8";
std::string strD12 = "002273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e6602000000023570da7e7bbd8b84657c72ff429168f239e34fd24083e734df10306b60c0a73e000000006b483045022100ef0b3746d4a06ca1c6ce0a6d99210a38bee7a6e2fb0e72435024c23cbd64d083022031acb24cc82a668835d0c7c5b3cebc98b9b6fdff81d5adad343da4130c54be5b0121020a6f9381178378d309f684783e3e3bd9a8d766df0502621716baa309ae774d14ffffffff4bbff95a7f608bb101887e329ce0e5390dae199edc7c50f80cc4674ee3f72f86020000008a47304402202ca38ecbd90e65230d8ee11c0200bda67882115ac525745159fd55b8a4c258cb02201d6d2d289e27985b6d5065ea9629a6fdf23ab166edfea712a80872c53a3e6c900141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03280cb700000000001976a914e69a753c7b0becb56a93d68bae2e3a00b543ba9788ac0000000000000000246a2273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e66dcf12dc11f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac00000000020000000100000079bb61d7c9909066e3315d32c49d8ea5858cfeb59ff59e60dbec6dfc960c0130";
std::string strD13 = "002273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e6602000000029fc8c0401b382d489d900ec6f408f8f1536920d3d5f493c808937d2bcc1743a6000000006a473044022070aa0b0160714d4a13c6a77ece7eacc0217bc7433b7444943e74fa726da5967f02206326b0cfc4b9a72db8677762f55546a69640d28c6c34fc86de75fa982ac9bf05012102abd93beafdc474a3f990bdc39a836c3f652a42dd78ff8785b8c8c3c2e39488c7ffffffff7229f3664833c6dd801f54290983aa082cdf7cdb955a7f00065048d34cbcf750020000008b483045022100aaebef61c50ecc630ab13304775889eabc547658dc4d1fc16033ac67be62973502202c654c9ae87f9cf21802ba2a5bfbd038ca212c884855fc3a09957486d50008a20141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03e8c8226d000000001976a9144b84d18094ef69f9dc011e1d5510a43fed30624188ac0000000000000000246a2273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e665ce228c41f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac00000000020000000200000079bb61d7c9909066e3315d32c49d8ea5858cfeb59ff59e60dbec6dfc960c0130";
std::string strD14 = "002273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e660200000002ca66c560e92ace2b8eea5288801213e8a1a4757b8c1e5e70eba7a3bfce3791ee000000006b483045022100cc4b8d6f97e2bc7e646fc41ff7d6de1295e656ba26e3d3388cbd3256e93afc870220555e9b507b5937de052d1c5fd83bedb0af94d7fdbc404a78eccba3f864b56d1a0121027379c6af3efbed7ff266f5271e117caaa0003cf6f32850c41bd1777c8a97d89dffffffff85221a31ba55e160ea82489e55669cb22820f1d8405af282698acf548f7470fd020000008b483045022100bde51baef651be682509945d582f6933ba323c73d788c27795215bdb3883f04e02203149f3821b3409166d37d7b2e23be975710f345216b3b58c51b548bbfe496be70141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a808cfe3000000001976a914a34279a328d96299e189729d809f3e4f137436bb88ac0000000000000000246a2273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e665c69bcc71f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac00000000020000000300000079bb61d7c9909066e3315d32c49d8ea5858cfeb59ff59e60dbec6dfc960c0130";
std::string strD15 = "002273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e66020000000285221a31ba55e160ea82489e55669cb22820f1d8405af282698acf548f7470fd000000006a47304402202b09004339f5257a1a6c4def2efd789e7b91652bd408ae45ea043b9e5cf2d2e002207620024e95cb7557bb673676c031b1f4152e1ee8cb2238ccc07116c7d7c3e34f012103766cf398bc0f83349a454866aae8de4d4a5f9f47c75feabd74252dd13da455dfffffffffeccd85ac03d105be31d9dd8be7cb5b5f77ca1898a95c2e935f593aac0f937b7c020000008a473044022046d015b26b25bb999262f4eaa72eb12d9d69997ee52348a732437cc19eef0afc02206ff7f5cc5953d3508fa2186a3fc4860da92410bc6913e23639d83d56761c58930141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff0368abf668000000001976a9141bcecb53edf490227a3894e78b64fe8b1b4d638b88ac0000000000000000246a2273516f44516d5a7031446155646f417664714d5643456f50547367374b7157696e665cf04fcb1f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0000000002000000010000008cb072a53b10dc40c1d14494f2428fabae7517e934b8c9636f0b771ec576881d";
std::string strD16 = "0022735572626f456a327457446f644d77436e37653254645636517062396159467272580200000002eccd85ac03d105be31d9dd8be7cb5b5f77ca1898a95c2e935f593aac0f937b7c000000006b483045022100baecd25f26c8e0b10b5a4ff6c256a013123ba9ada8a7e7ac2c853fbf24f5b36f022048077941cf9fcade879cd8680f3b4afa3e45e6fc4e0c71689eba2ed60caa5abf012102b8a6f6b05fe4c0ed2007f8edea5573eb502ae7465625ccedc5b04d0b752748dbffffffffcdedf0928497ee8648f578c9349fede4f372d5f5a862407c4d0adcd4cdd86c2a020000008a473044022045d2804c86fc3d9fd4c1eb940898ce4742d8adf5738ef282cbf9af6a64630e3602202f842023f2f606cd48df39b45883b1fa2d434511993a7163f59b1d43eb30fa100141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff034abce6df000000001976a914970bed79129d3e2164abeed92bc46eced819d95488ac0000000000000000246a22735572626f456a327457446f644d77436e37653254645636517062396159467272583aa69fce1f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0000000002000000020000008cb072a53b10dc40c1d14494f2428fabae7517e934b8c9636f0b771ec576881d";
std::string strD17 = "002273627a3946644a7170485a484a33694a36337442386558457574455064787177517002000000037229f3664833c6dd801f54290983aa082cdf7cdb955a7f00065048d34cbcf750000000006b4830450221009a3aba29154ebfdaee0273185cd9384e9d08f7ae36fb3b2fb93293eccdee1a86022051945a63d29d1fe0cf753c43dfd4c5053c223b234bd0d067f9d5cce46e9bb587012103b85496d5f5c286fb03429fa0793295fcf6073c29b33b25cd00bf5e4751f12806ffffffff8ea6ace2bd905b784235b1343e5338ebeb4d78a0b92f0b1092fda3fd8abd88ad0000000049483045022100b1218026f7cb1b799160daa903a69fe7f312b3d9216c0d03928ca386639ca73702201dbc4af05f23e43fc2d884fd09e38db71a34fd5c80a3dacc9343cb08e9f73da401ffffffff99624f63854dba63273e4ea5aece18f108125085714e087a8f0f29d247e99caf020000008a47304402202c12f2eb79d9c58eb5a44cf9050a76721836a4d244b18043ea2b71931690ce9c02205bdb73581551bd8505ee67a8f334ace737be7c6257009b8258dc79056e3500f30141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff034c861e00000000001976a91452511e9ac80246bef1c0b30c140238d67cd9b54988ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703a98a5f8200000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0000000002000000030000008cb072a53b10dc40c1d14494f2428fabae7517e934b8c9636f0b771ec576881d";
std::string strD18 = "002273627a3946644a7170485a484a33694a363374423865584575744550647871775170020000000c01d780a380a843b032d0cfd8d51984d3a4315a62fc79940129881971ec0e03c80000000049483045022100f7f8bb2164226583305603b6f7c18b3af36987352523508adebdb9befd9c8d21022077f21db7c302af5aa5545ef68c3ebf919a3925b45b21abddaa8e9652812ef88801ffffffff05de359b4ba1a57f74057ffc236c26f061b6232f1377767bd26381c15db0768f0000000049483045022100c880ec17b01ef36f32865df4bb570b05d210c39e9651537c9438a58ddb9df77a022047a4ce1ceeab42720528d3d3dba2d6ee5bf5dbf66fa8cf33892086f9a0b5ffc901ffffffff267740ab4f7fb02dc200433eca230e58e8f1cb2c99edef20c65a0e55c7126d750000000049483045022100e46a0d7c893f56c6746525ed73bff00b0c6a115d7aa7187d628a2bafe60a1cc002203323f5a8ea9e42f246efa9447870cb86feb8fdf6a92eeb5832e7647b31e7217601ffffffff3253a53ec2871bd73d943a04af7552447bfb6b5e21f16bc97dcf7b660304e2c30000000049483045022100fc8ea4863296ea933979a559e53f22c774ce78d34ad69b06cdb2c79fdb32fdbc02205bee85195d46ce6c454e17bee098796d310794f132105c20e604ae4c43fe133101ffffffff32afcee4e1adb52aab34ae1429aaa51397f0a06727ecd8519a198620e168fe64000000004847304402200bcfe4232f30a93311d77d97b8bd995a56d8433444f51c2ca1c2a4569e7e37b20220419bacc34895c60c42617d50941b45373cffa88d4a6230be313b20863219c37d01ffffffff4f6d9c063b72dfec943ae768e48b7f33461247a9258f57a809aa5b8eccd16885000000006a473044022023a7bc40443967400834dd7a14d29253fb755f2e52092d9732ca336aa56f0da20220450b9e55440bc9f686fb5277e0ca9698a1377db5d4aeca921774be02df434668012102daed033e2ea417f2ddc4f3a4e60190375678182a71119d373cf32370d9a10e4fffffffff77d5204b7d71c8e5277772372aa38eedc6c7311629ed21c1b4293cb86ad9f627000000004847304402203c9b2a407f2faeb8a564744ecba0bbf372b8848ae7202ecc9b90c723416c0733022004a89bd6ecd4e1ef515847f17e1ab6c1c78700a08bd39ccf28c8074b53e4a6af01ffffffff8499ff8b3baa86095f7451fdbed6e3b1b70b4a4540c9fb07c04afa7f8c074266060000006a473044022011d083217d76cc54cac466c59c02697b2267c5624cf9a4c1a2f8b2c5438789b302207295f5fa513e54f92145b1645257fe9bd9778328d852d73f1d99d323c545c7fc012102a162509adef6d192e0f320d3e2e740e03a72424f16721bd00cf6bb3be2bfbb63ffffffff9ca799a4d53ba705fb1cf9ab2f265dd062992ff88e2dc90cb1dcc557c6816c4a0000000049483045022100a2cfd60b7d5e443d6819838ba51a39c75a82cbd37dcce0f4b557361b8f2d5a9f022047b2bb7481134a52f91e8c857577fa03aa2e0d8d13eb1c9f56fd7eb9ffaae9b101ffffffffea04e99c0ccd1fac8c3d9785138912c6c1c2c03bc4492c7be9541bf959342cb600000000484730440220480e763bed5fe26c9da848cfb71553e485547950d5c1a42ac567cce2d26efdc702200a0f25d184ed66ce571b4e9b9667d4959bbdb18875a1e6417e52adb7b0a30b7a01fffffffffef17a6bf488e41a4980f4da4530d152ecd935e67044a13a93e20731590e99010000000049483045022100ca62f9fe2990a6cfd48d8b4448681d39e4d419dac539080282221d25a1b9676102207f12c23652eef2f1fd269acf096f4c55c56b0ed7def384b89287e94fb52bea4801ffffffffd6a12cdf396a6014a0273702db408d2b38939adcbdb28aea55d1259c7ec26a6d020000008a47304402207efa7df81db95efaab8e739e89ed36f21c375e23fd6fe019209a17f17695fe6802207956eb37df36454f04a007b551eb0f48f7b1f86969309dc55f7657430fadd50a0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff0328aa95c9000000001976a914d0c03ad399dbc00e0a92b33926b30b233ea79ce288ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703a63b4e42d0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0000000002000000040000008cb072a53b10dc40c1d14494f2428fabae7517e934b8c9636f0b771ec576881d";
std::string strD19 = "002273627a3946644a7170485a484a33694a36337442386558457574455064787177517002000000026bcfcc9841a1943fb444442accd4a39c8158c16efea6ec4f539707b929f88b12000000006b483045022100e1517bdc1700ca340bf3d574766b969fb5b588b700d7f992228afedd73e01bc90220687fc0500e7da5fa8b3ab01638f4dd17d0c2bccf3d1f4e61572af45ee902d43c012102b8398d0b7f54a0f71918e4abe881c1942b23269919fd044e06fa42730ec1e5bdffffffff1ceaacfeea92ce775238aff2550fc04f0357988af0258d254c47144a494d1fe5020000008a47304402207e4c036fe873675f32c7f5e1b075df3d82535ac2b1208adb77db51255b3ea762022006cbe11011c1baf0a9cbc14508672040634a2dc87b1b002c81661eb5ea40785f0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a81a376a000000001976a914c2d8de28198ebcf3a632e207c015b3924e96a7da88ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703ad8df612e0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0000000002000000050000008cb072a53b10dc40c1d14494f2428fabae7517e934b8c9636f0b771ec576881d";
std::string strD20 = "002273627a3946644a7170485a484a33694a36337442386558457574455064787177517002000000023f374ea4afe992cb3bc87489848e6fdd8f9000318a1c6f69caeddaab0177cd21000000006b483045022100c238695521d7bcb12f29f2b3b97dd9a9b91350e40d93ee83cf13479a9ee0b74602201fbfeb2398f57ba851c0870f48f7a767e3f49baf3ac2f1382b2761a45c9a600901210358beb81334b9ab7dd210aef161b43aa6f3a76d634ae96a229dd61e30093f7b7cffffffff3871d7bb5b6e1d5c19370a0d68677b07e4c993244c9e75492133986be51999a7020000008b483045022100e228374f4c2b902ab6d02f8a238d95ac8529ad8f5b7f1070ae86fc9fbec5e0a90220607cf0d2670604a3ad3210f50b857a52c85ee4e0577ede69bc95e9b769caaf7d0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a81a376a000000001976a9142e971b0ce46c4c94e8461a66f057171b6e799bc188ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703a4d0bdf2e0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000707dbec7daa94810098d39a78f3209bfaf9bc59325fb7492ee74a10641b91132";
std::string strD21 = "002273627a3946644a7170485a484a33694a36337442386558457574455064787177517002000000000102d18d75d8025f0b0edfa9ff82678ac3fe2297ec5270d735b0dae0a4a2a1a865bb0000000017160014ac634a2f15cbec818f2e113e7a98ab5072d7a022ffffffff897bf80d24fc30065a6a7a9f751a41c277c7df4d04a62f81619704481ef6d10e020000008b483045022100cb711b97493ff909f028fd8deeab76f07a74aca7526df23a6b5cd3014ce83b7602206dfd7c5e2a159735071d416a782db498975d03edddb07c074c47af0a8328754f0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a80da770000000001976a914fc920b424829aedb069792d912415a247bafcbc588ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703ac2365c2f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0247304402202adff76b2db72bcf70a43927ea076513c80a6ca34a777065995b3cb815ad69ad02202bc71a2fce2f786f4623db3853a930e26e3ac29dea15326e75c97557c641369e012102f87c62ed1da20714b9abed3bc519c6a4d4cf57b0820ae910303dc51f6fa75be600000000000200000002000000707dbec7daa94810098d39a78f3209bfaf9bc59325fb7492ee74a10641b91132";
std::string strD22 = "002273627a3946644a7170485a484a33694a363374423865584575744550647871775170020000000001022a1d3f7e9cf2037b385df2fbea0abb07ab475c3cb24a5d6a5a12ae176d3f12d1010000001716001476dd08b0634af7877f933b4940d92fbb99598c85ffffffff0bb43c0201456afa405e875b0f9e4a7de8c975786171b91cacfcd6b768ed7056020000008b483045022100d40020950e24cb47740ce4ed676e2f5dc6ea0155273a1fe16283b250e507a8c80220025b83a46bb5a12e75e3ad2580d5bb7b4975de79c0df0a7843d4c02f7d286aba0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a80da770000000001976a914c8654dbdea370231a35ac5336bc8a6050c54581488ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703a3762d92f0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac0247304402203c5732eb9b2bbf653871b003bd2d1f30b2299d94800854cbec712457d5cc1de002203100e28dcacd75cb1771160c8a8554332b47918a035db3752a01cfa9ae5e35b3012103e9ddb954653c5fb6776ee4392cb4415e5a5c0cdd25b1e53eba20e19422e1855300000000000200000003000000707dbec7daa94810098d39a78f3209bfaf9bc59325fb7492ee74a10641b91132";
std::string strD23 = "002273627a3946644a7170485a484a33694a363374423865584575744550647871775170020000000001022aa7beae85520b3b5922dba876662996342ddda303ecacc2d3eff406ddc91590010000001716001485c6721977e79e872c660dfbac7cd7c960ed3054ffffffff08dd1db03d999b2e2318aa2b35afb8a0ff986d0e12909f7bb3803b99850403c0020000008a47304402206895e30af7236e0078e9fa01f1fc193ec845fce3c3df47592b6f4d63b380720f02202e84deb51f59ce75a20da38b33486b0564190c30798275775aa2602d6317189d0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a80da770000000001976a914f90bdc423caa17acc95647d0892cb65190ff8b0c88ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703aac8d56300000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac02483045022100e49a4f0fd8756be63935b166529ae22c9fd595ffd0c543accbb46e21c5fae655022027dad41131f8b719a500ab5d766215ca346e0570fd62866631383a46da7e9e0401210201eb8ea54a025520f19731ac01610fa7dedd480b66b17d4b18c7d549e7b9e4e000000000000200000004000000707dbec7daa94810098d39a78f3209bfaf9bc59325fb7492ee74a10641b91132";
std::string strD24 = "002273627a3946644a7170485a484a33694a36337442386558457574455064787177517002000000000102bf8b90967db2142aad79886140a677e298ad2f919e85f4a2c407637051880ea80000000017160014a6d5b61755bc4816bdd86b6004081c17c40cf187ffffffff0822f88a261999bbcde9ea1b43100f1aa4deaadfef0a684c5690e087cc93f6f4020000008a47304402206010c6a67807e4d2345da7a4cd207c8a831e7c06c251c4c7996045fc43f7e59102204b75b002f07446571480361a84376e16d54276f6cf30cca60d202e2c9254e2f50141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03a80da770000000001976a9141ea75d70fb27ff6a054d2b937c6ad023a98fa87488ac0000000000000000246a2273627a3946644a7170485a484a33694a3633744238655845757445506478717751703a21b9d3300000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac02483045022100a19d27996a76d1ab631cd76e210446c40c405a0cad29c2610ebcf8e6cf613ca8022068bddb64de9da0583e736c893808d195721d19dc77d290401d7a8fa14592d5f9012102dd0971a26154c1a1d620da890ef816f9e2b6d835b7b2abf1425fa89206a4f4c500000000000200000005000000707dbec7daa94810098d39a78f3209bfaf9bc59325fb7492ee74a10641b91132";
std::string strD25 = "002273647a434c6b75463776314738596d324b6f4234436d6847314864463268633558340200000002cdedf0928497ee8648f578c9349fede4f372d5f5a862407c4d0adcd4cdd86c2a000000006a473044022021e532fc5d68cd7c3477db611cfb3789015f97b7467e56af5a89aaa8a99a40cc022045b177afad311690044a6c1f9ef0c7af60ba3f53e55c38d4463df154aa9069d701210326382ebea55c00b15a7de013a4647150bb4ef1edd5c6c14875ee3d835d04e588ffffffffcf6cbcf36193579d1b979295ad3ca54167abf2113c348898f460cd75f2f62b4e020000008a473044022004c491d064cddc439a83b58ba46765314f2d35f50ce731448ff0a3adfcc45b81022016f112e89c5c0d7793de9935203b360dc8401616d9cff09c8b69a0d25c29ebc60141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03687ec567000000001976a9142263908aaa1da68d97f313bb965be7dfb8e51aa588ac0000000000000000246a2273647a434c6b75463776314738596d324b6f4234436d684731486446326863355834bab751d4300000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000cba29b385fa5c7a4d244d639426a47a9c870efd3ca6d4ddb8810ed4d5de33fca";
std::string strD26 = "0022736468744b3537763457754d367467736e68567134476e6562633853505037634a5a0200000002e338477eeb7b46d9ceae9497e500577e5878d3bc5a0fe25c92c7cf69b2f46528000000004847304402201a3c6e9adb0182aec9779aaf54ff144295c47503d96fb0dc2d92fc0b1ba247560220396e2cef792d4ec8ffbdb82c63be2654bb5a48bdcae45add4e337cb3e10ee0d401ffffffff85a2169833c98aaf3c4a7e03dffcd82f24b179cd362edc624939d4ac2cb37872020000008a47304402204da391e2b95396015abc170f8638bd4c844a5a0cacffb3844cc11243297dfeb20220549a889ffb334dcf12ebfd7d2858def270a664bb9c434aac3c9dd6389f6cf76e0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03800c4911000000001976a9149696423c7853d491176a688dff1158235e58ea3488ac0000000000000000246a22736468744b3537763457754d367467736e68567134476e6562633853505037634a5aba0676ec310000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000d4a94d212f4ac578c7c27eb26dc77ed45be13c4454908890e86bdd04ba19a0da";
std::string strD27 = "0022735138766d773734357157506564734335483268383144357a57377457475744654502000000041fa53d0a00b81c2534eaa3dc1b45e932326604953feaa7e7e7634368d7947b390000000048473044022052cd2c0ab271dd25a72c71c78f90e48c02178b765bf90081a7724d1ece016844022052ac45ea043e0ace7120854cc5e2c965895a3394f37e403aa980969fe62b0cc001ffffffff2a2a2687879787f00d4c766977d0c8b1110b9536c6c90bcf8f30c15339504e87000000004847304402207ae9cb2290a6a26ff893ffab41b2978df289f479b40b2fc1e9dcd4287ecea9c3022045bb41f976b5a9e5bd14c532a4e61e6c919cb67a1f3996711860b682f44efe6701ffffffff85a2169833c98aaf3c4a7e03dffcd82f24b179cd362edc624939d4ac2cb37872000000006a473044022031b7ac0f1397a07f129c602c4266683f8c185215e2060345178910e6fa2ce95e02207f7e19615a07f99bc2b5fb47af361f733ae11f7c2d73e434b5ad421b77a21b250121023bfc59c3637388d44da879eb16587df41b1cfca800effa49ce81fda1504863ddffffffffa4526312e467d8ec526552b8c2cd1ed0278e731a824d5873c82583624d479d37020000008a4730440220074f3aca005f21114c39669bf1c4f3ff3715ca359c4aa8e552fa1b61f9cc2f470220228d6bcb554f569df73cd77facf8153cad75b43fcf35fe5657a64579e80a38a30141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff033018d901000000001976a914c5c9caa5603d04a82e1fe57964a2ff141033499688ac0000000000000000246a22735138766d773734357157506564734335483268383144357a573774574757446545badbd5a5340000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000ae9b4fee14e946f8b59ac7c90807d4a5b44c0508ec12cae30911907e1e83df0b";
std::string strD28 = "0022735138766d773734357157506564734335483268383144357a573774574757446545020000001c13cb4fb6e531208ce2a7c90e75393c0440d5ddb2b61187732d7a59da002180f50000000048473044022017421ec4d111fd897613e42e4398979a78203382d8ad4486b6d141ee84a65753022026a57cd0091723687fac80eee0506aa829f3db83933a310cb12d2f2a4ca1fe6501ffffffff19fc072c0af5738e84e8efd84d1e44f72c362b11f24d3732e8377d3d05a3e31b0000000048473044022073dae80680cdbdc4234aead50b6f6b00af23e56ae9d76a8e84e82c0dcce0e59902202063ca8689c069047f9e17ca52a6cc019f00d5b2fe1a0e2bc5f67f8e57bba32601ffffffff1c91d3721b348d46e3206386066ea9e93c61a8b777b80fc380e8714cb6caff83000000004948304502210091efff65223fc14c7408d4feeaaba195cc900620e6f911b3f7e433e31dad51ef022048aa58ec7eb266c1a01bf7527d68bc89fafe762478b1f8323efe730c4d0525cb01ffffffff306286b4c03d37b90f43917906d5e65b77a5746cbb83e8f20d0e98f65d378b61000000004847304402204aca7a5a287a7ae8ffd61811ec611ad1487d2de4744ce1d86d79e603e272a0c202202d6ecbcc9ae7ee3dbd45c2be7c6629b9b3a2a23fc3d4250f4002b1478a3cd8c201ffffffff3c4c7ccb3b27c9675091d88bbbe7d519bcfa6f40193575f29b18c7ce302fac6c000000004847304402201ef2073f47bf18e4d3c665c437968ebdb2f6acd3445f3f085fa5ee526144038402206d91f53279390ba7679000a81144d9c38f8f28bd4787e7afa070afa66fb74af901ffffffff4572589ab97dc81f989ba09e16dcf64893f37b676d19a66f7fbb77375c8cb96a0000000048473044022015d3551071993a25fe994ef97d78773dbe7a47275c1a2bfa67ce36a7e72a03fb02202cef30b611d4eb6cd263129a4ce00fb37995c4e283436e8732a95c361893bcdd01ffffffff4b6d6834ae106be29a02fcff420f9c9b921e624d72b454178eb1438948f043810000000049483045022100babd628303c3651379fc6d719eed7e969e4af3cf7aaa7bbfe842340af9dd7ac9022066c834b227b9415a4279e2db4f99f849988dec61619a17c675e6bcfee6640adf01ffffffff4e6b3c3989e143a48e2e49ed2b5058afea5e9132ec3337b7080147a7fd9ea992000000004847304402204d941013709433e7a769e3ff70418565828671db47142030fa4a23959c08dc900220125bfd8ca692d670e0a66f3556e8fa24895411f44d801483722fc561d27745e101ffffffff50f95d76a9be567e9236867b22d806162f6c8e0bf14e2733cff0a0e9c63178f70000000048473044022040e2dcb5da5af79ec41cddc0a7725768d17243e5deb65e51771405e7dd5c5fc602207136daa7504e6c9f07c7123cce9973ba254ac2739a19a740b167ed838618043101ffffffff53a4abd408bb6003d7c6a8d1dcd48c0ab70eb507363be922180174201874395e0000000048473044022071389ca1686eb0eeb0a44c6c6372e39f41693c875efc5f69f1377a0e2ebe724302203b624b76b59375c9ae9d0c9a17fa122b4646fd31e1273946800e2765868b837101ffffffff576a3d0b48c867d58f256bee90ab4751307c12c12741257aa08d983de2112c7e0000000048473044022071fdea11028acf3522a9c7a99c2b77c3156776b59bf4adbba3e797cd775baaeb02202fb576b6d7083360e2797091363874b78f4f76f0340ac3a976d5b18f79e9bb1f01ffffffff6d6c60e90cf28c4f8f7da782e0446a5e14dd9801fb2d6ee63f44f96d61c26dac000000004847304402205d37adde51eef924f9ec96f127d27592015a002f66eb3f1b6657be2147c6729102206cbfec5cecb33f73a5686563b8a0bffae56aa59b1426e784e2fe363ddfb6472801ffffffff99624f63854dba63273e4ea5aece18f108125085714e087a8f0f29d247e99caf000000006a47304402206be97e1be7ac60d81e206b1ec5b21746e1b63c70c7b7040676384ef61212a6570220717570304abf83c7c010af06e208b7743c8bca3fad70d1cc39635795a841455f0121022cd67b972f2a6c0abab8c5785deb7d57b6dfac7d0f2f2d50872785b0a194e520ffffffff9cbedb246252fc409bb3d8a4b6dde3a0092192c261bcf54ee7d1470e1d75e59a0000000049483045022100cadf1a5fb8b2e69e9559112d48733c5cbd4c4f9657c7b1925df4a564c978ba7602201aecdbbed26e0d474a0d4e7b2695750cbdafca95a5c11e9d89f7d5d6d13978f101ffffffffa0b9b427df10f487dae935a6ec2fba5e0dbfe6814463b2a3dcb132baaa21e4c20000000048473044022031f584b675d6d1a139d3b597358fbd05d5bead1b093d7af583ad291b9deab246022023242bdf27b9fc1f109fb285184d240db67f9a4df64dded74aaa75ba5243868101ffffffffa46cb1a35b2fafc2054ca8009eaf688c126f2f31256d3b0d0651601718fa110b00000000484730440220500ee8185fd6d1544e97b9055a6da25e37e83b28897e0d4b4edb323b4709bdb402205fe67a8150da6e59860958dd26c5d0c0506aab610b144d0ddcf05762ec1b159301ffffffffb4592e638d296f5e579616e567392bfc76272cd62615f5e666b28aef0cb4eac30000000049483045022100ac5496dca5506853946f6ab3f6ce686ac85de566cea364d6c1eaab305e71c85202201c28a5446ddfa92d21652b1bea8b05d4020f25faf76a19b7d1526100675ed7a501ffffffffc14e28b6d6cb17de013c371eac952f8c40309cee84aff3e3432924ddaa216af6000000004847304402205e70745dcedce49a831ee7ecd1bcc38572bd86c8311d628ef12683016df175bb0220283d7f2989dcbacdfc67522091a53c038ab39414a5443889103b6db9949e141101ffffffffc55f7973e27fa4f58a58e7da769de619d499622a2585d3ae9206765e5dd0821b00000000494830450221009a49674e94942c24d75db077bf92525689b982b14625705521de6f8417aa1b5d0220238cbe6eaa56233a3266421551abf0b11884f8baa36b47fdb22152172702d4ea01ffffffffc90b3ddbc199a21509fed2f0dfa6302aa06a1916da0dfa6281eb93c4105e96c50000000049483045022100f51c04f01118b62051b14013f7e7ca361ce8d55d2ba9a6142c4b6354e4dff08b02202458f1da11c7c102acb2405e35707a7969cbf60fc99e4ef583c3eb59156dd94b01ffffffffce8926b07e685a067fca209cb4e75fc2599e7a2bc136374e7cf0ed733db230c90000000048473044022039ae5bf61c71eccda0e68af8b47949f207504387159ecbfb853fe7cb482aa55402205f05284da419054b656339c97284c945cea02ba9572fedd1dae3dce1e239f5a301ffffffffd9a3c83a659f45a3e4c3f1307a9e7873dcb056d1e19247143b33791a5585b6800000000049483045022100ecdb9103b8420ad44675edc769c2be527a7b92e8bc8aa06b09c14f83cedfce7102200940048269914f0b9cb624fbd2206c1ca1bc737da46f59e6a351ee261604ca6e01ffffffffebc81b607eadf4267de01f07fff2d44d68ff08adb64c2f9a054aa5a0a532cb2e000000004847304402206db1c29b9814a40011be05620d99a01392215d3218256ad5837003b71fe05d3e0220116ec9fd26ced100da2cdbaa9ab746cfd05eac17ab1cc3925962d32d503e53b001ffffffffec9b04d97c1ba00fcb5168c90fcc8636ed482eb6a460a3abc22be819eb7fc6c90000000049483045022100d1d827eda256ca3e4d0ed7458809b3dcdd5952de4160a0fa126295e204a0feca0220366f60722c1688c48d142921c111f29e1fde723c1ed816833cebb1a64452a41101fffffffff91df5c660c3e6d541d7de0d7781884d05e9ea10e7b86ff2d1b79884f8684b48000000004847304402203577fab6f50b0f37cfb8eca0230e5563459806360f64ec8947ab83672b3fc18f02201411a52e9c1f61b74962f4be9e93ad624c6235b9ba5c13ce6317ae8834dd008301fffffffffb9ab923c7cfc5f6fbca2e644b702ed6b0888091dc5a1e46a95e6c01bfefe10b0000000048473044022073017c7b4f5fdb48e1041be54ac65a22301d4d63f3d529aa034ddad6d18b152202205c3bde2e6c4d33fa2b177a76294320557e3839e4786bafe3b826d651e9a2150201fffffffffda87584cbc2f133d709013e22600c273fc1bbf7c842ad7067e9c340858ae7480000000048473044022058e281ed4869855bd4554b5c91a33781beb801ba82d3d95fd151eab41c955b9402206af4ea04c3a93785e978b813edff45503032b1ba649f45dccca095623c6c108801ffffffff62ab55012c324b7053a70ed8a5cbdcf4f10a6a9359389b9ca5577c5863c4138d020000008b483045022100a1f9b7b0c3afff894dd4e28c4de230456c9a81a6fb53cde73119496ef86c3062022030962fda891288f636a68dc6be3d374861d7e6176e19ff1c5888cd547b3424840141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff038efac402000000001976a91441c47586f410a6696a43877423c42b2db897100c88ac0000000000000000246a22735138766d773734357157506564734335483268383144357a573774574757446545baf4f9c6530000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000ce6c3361c66f240f80c9b2cbea43693be43f915b6ec020cf5e11a27e41ef9638";
std::string strD29 = "0022735138766d773734357157506564734335483268383144357a573774574757446545020000002508cb527dbc38612f9e7f7ca477f9feb89e4b49cb728f93476112603a00bfefab0000000049483045022100f752ee13261a3355218750d488490f2359af0bcd309fe95febfbe821ea32272f022051eb1e8dfd01a85cf0192d38e43c06a4ab7e7ff1506eb9487f7449a72f96c9cb01ffffffff0c1ee7ffe0bd4c1c1b3022ab2c42ac05d7da0a425ce1055cebdf856cd494981a0000000048473044022009650c5f8777c43e0ce056fc71448c918deace97b0f9009e32180bc145f46557022044e71ebbde7fd4622327ba00933252388c786b8b7acb4c9f2f45faa8adfe1c9001ffffffff0e9429c7662a2f1574f2254bf2ec86fef4409f8385a28b9cb4c1b89f060b55310000000049483045022100a22c7fd1a86e303bf35a102b342eaeed7df917d88039105e1553ec9d5d4c603c02204e31a9a1a0912f21f32aac22a0d88bebc84a02e28fa0a04e1906eb55acb595a201ffffffff1085a713241ed145dca69677f01b3afc78e295798901413bd236c915de1c4d5f0000000049483045022100a396c9ed62c7054df78f88557303d9115114e7c607fb56aea812f18c3c7eb2f50220385b384ac08e9ad3c4a2b56df525c7ce725044c438827ea09a362b481d0b37ad01ffffffff128554acfe8038d8fc061768501ab06c4ecdd4488e4368b89afdab451cfcc22d0000000048473044022050aed4958dcc7730278f6cc4875632cdcaa176d73de4d317c1b9cba5e78da9f602204abbfc0b39162bf1196a4c59ca62bd56dee156c987a29d65fe126a55c28a74d701ffffffff1ceaacfeea92ce775238aff2550fc04f0357988af0258d254c47144a494d1fe5000000006b483045022100b915b39cd679d01fdc48746b6bd66b6ab3c0dc59e9b3ce3935587a783b7ba72102205466da89481e849c9cccb983a29f66cb0464f0de1013385f130e4e53eb4f6cd8012103d920df2b08d954911ede46ffc4c79e3a00ddde0c58fe359c775efa9b806e98c1ffffffff206f8cf92ccd097534aefb1af0b2592265e0bb3d20bce4aab030b43b2920e949000000004847304402204bd715de9fca5c156f332af8c560da6f7be7f02bc40761cb32ded24482bd08db022032243b2f21d5969e8873d2615ce3a1cb4d6f4aa0e8cc8db8d86291adbce2d1b701ffffffff22b3968930fb9b96dfac660bdeecc5af9697e9a1f68f38bbf17973e5796cab55000000004847304402204c9df870f05f8669aa37e4d0a539b9a50724bd98300a10551aebcded60aa667f02202e7bc90f135dbd981c03039c7d5962c9dd3751311825e71fc7aaf43be74644ac01ffffffff27e0eeb94738b0d61e1b81d956e62dae89242ec23624d29d0af4e11bc030810200000000494830450221009fec674770a1c88f2227fc6ff1877086d13ec4acc305ff12516c3ee1eed10f4702205b4ee5eee2073689ccd7b11fc6a6533499e68ee0445ef41e805d5be1ee69565901ffffffff2a7fa722179aa5dac83170b27ed7d0a709402ce5f34f8fb64a235685c03901d4000000004948304502210094cfb1b524c1e5ae3a66c1832b8f6f07d84ffbe6e94ef294db6e14ab018bdb2e0220093763fea9252cfe8b166e77d95a747672076f604c3858764bea420524e5ee3b01ffffffff2fd3fbec2727c82a6995678a22c1ef869c8824d8ef829e908a83cf8429a73d0000000000484730440220310705a835713699b13e255a627c3d39ec61bdb19472c7e27cc0f4387c506bd702204217204be176c29b20fa2dff4e9b972fbf2bb3bb382c43f870bc616fd3b0e43701ffffffff3b283da0b8c96c8408e341e01fcf07f7310c46bfee7a2b6beef2cf6b13480fe9000000004847304402207169572e4efc1d0985f2dd116577adee5009bbadbecc006dfaacab631a7484c102201a0bf586c837d17afb77ed251b78c8851d5ebae8128a677d465e191341cda51301ffffffff439931bf5cdca2c14a3419b4d4305ac63aefda0c821b5fec83d4c945c8331d40000000004847304402206e80230724061a94f399d3ee06739b926a350afeb6142c75e73a73c0b040ba1302203b37d08a9f63e61715588656401d42290c5d87cf6c90ffb0a504e79d335afb4501ffffffff4dfd42ce3c6890ed8d3fd75c3d04f9664fa5954d64c7b9ff0d5698b90e7f58d3000000004847304402203b954bd53a8bd818721b75b5e07eb5fcab0cf3d5507adbe9bb54097908b886ff022020aa7c4462408bfc4f3ed0efc48efe7b044c3ca4773bdd935970862d80cac9c001ffffffff60b5c72614119db1271a58e101d701720ff38b982150df0e592a409c5b84c6f10000000048473044022047d8474b93d254dc4ab7abd32c6901042a238f1ef14907465968a3e7f47ab0270220094f20117d9a9b2a5ee29bc3b468aed9924b6a1891375e8cf88a0eb033df2d9701ffffffff75d9dd43cee65257f1301e46bcf35f1166c6a6994eb2e8f0e0db473cdd3240c80000000049483045022100b33e99c7f19fc7fe622d5feb8fc23b0337f29959950a86f1074e593890116f6202206d3ef952eda879177ec64f4f1e6f05b457eba801a42e8999b79db676be89e3b901ffffffff82305aa2a2006d0051c506f8ab30ce5c93a900e3eb785ac1708522319c6af18f0000000048473044022030283beea778ffb9b4f1b658ae9124788de375d331294f599c175a404b8318ee02203924155c480f24e62e54916caf287a441ab652a404e2d10a0a1f55fff6e3bb5e01ffffffff825d2b92771ee679cddea0737b598167892a18de9f4eb122954b5a2241f8f2bc0000000049483045022100aae0e5f1b69a1d5f0983156f59f9be4d34e8890e98b6e8e8cb32ceac58da3d7802200b0d4d944df5c4acff38123ba16df67afcebb0cf818253c67366358929b4a99f01ffffffff86e869a42df959c22d0e61727bb8d083be895403198abc6abab9dc4a4751159f0000000048473044022039cc746e3d8cd4911b3c886ea62955022418c338d52b9f5ccbe8b7307d39116302207cc4fbea36b9fb5701ffd7a3b3f2d755df102473df6c5127c2ad76ab0f820a7501ffffffff86fffe120bb92d0b3c0ad273a586f4cc8340f221b599c6d97ee9069ca1ffd15900000000484730440220350efce17af181bb7c7348fd248b77340d39dc3c25981461c6d1a39e3950bccb02207b4175c0c8e96087ecc9125bf716560bd644ea7dbf179d945a344b4d09c2675701ffffffff91cd7f0331ea007a1934bb0553a18542d0bbee02d49f65797eff3c3e912fc6700000000049483045022100a721364f965f89f71ba8e3799e6d08c6e93685b522598c986dfc22498c60022e022055baf242dabea76924b270c5ed365ad4d3f2081cfb9da5025669c7c4bf48958101ffffffff96d1d8f2377f82bcdfc5667fb40bf9f965fdbfa4e672ea2170edfa224f1ee896000000004847304402205595fa007ec9e62d67f8f8e6df3c11ecbc2449d273e827f2a225d6238ef5d49002202e7af7a37d5fc689497809d389108f78f3e9b7e174f23ef5919e0b104c95463b01ffffffff9a58ec045564fa6a8ba3e6544deac863d73121a717cd3cb8ef7fd1733f1302c40000000048473044022069e805122597caaeaf229ecc2427d6464159781f1c4c7b38ac168e9afa479892022002a61eef928b07d67967f4d70474bace23360250c025b8bb0200636114ed7f4201ffffffffa1938997ef36c2bdb5595fbf41705deddeff8de1276e9b81d263d2a5c4da96be0000000049483045022100ca7e34b7bd92f54d084eb8d9ff889dd39553dcd4af07725490124d6840eab0fb022042c177ec184e6fbf0d4aa2c5a90357ffaba351c66faf24dc21b3f128d2ba09c701ffffffffaacb9c249a75ee9c02daedbb7aef285474e2a642d9d918fa98ca86b86ae34dda00000000494830450221008fe8b3cd43db99f03eab8999349dcff93cbfb4c4c643a68ef3bb87d088b73590022000fac0b5638414d24f8749b6e5c6aa109992ee7168d922041290bb875f4c684101ffffffffad3b65537feec635aee6e3f0bb0744c81bf90fe2c41fc8001dd2049fa93fef9300000000494830450221008bd598d30fcbd9f758bf9b7c24a5c82eb692940817cd23f5f7dc14257029b6bf022077537257cd54fc389b0081036220528da9d81cce21cd94e8611d71e06c875b9201ffffffffb00722169dfc6f8716b1569a49a79c7129a5a3db2f61ead181ac4000c2cd5d840000000049483045022100ff4ee3be9d7fe81cb63dbd9cfb8bb623208197e342c33d85ef6e6e67e573af7f02206e344374c601c99a924db93a1ff331588c8cab463cb7705377c5671364c1b74f01ffffffffbf56fbcb66fa4dd22f57343206b292725d91db23559e6f3a10cb7e725ca8e8c9000000004847304402204a3a64d080694c00bb51971bffcc4c9e1370aff4234c776ef72993937c30a51b02201ed8e492d9293f19b90e4c37863f77dc2014459ce3e16a37084b35d15b536e8b01ffffffffca6008dfcb8c9329f91bc61baa3ee4c45adb0d71ec2ee50f39ba206adbd46f83000000004847304402207e5e5ced0424dfe5c4a7993785dbb677d3124f226ddc501e291218fea3299fb0022064e46ce9d34dc942d01b70bc98104ca39f413853c8639bc78d0069fc4166bc0a01ffffffffcd285937daecca126518aa7ea584ea77a32a310810ff7d87f9262e0110ab5a4e000000004847304402201f2a40c93d62116033243506a7bf44b08740096fe7b122cf7eafc4f784da7a8902207a3b1292ba2d422e91bf645bf2a4810a40ee92e9ab6b005a9572202facb55a4001ffffffffd4f2c28fb5b7f281bc665ee320bdcd80e64ffdc832a337eeaa19a0b1a939be230000000048473044022035d623f67338d3cf0540d4cff36a1d2cce04f8515c4520811af36dbe572b3f2a0220219040569972603023a0f1e232561f209a18c69aca28552373b05ebdbcc4eaf401ffffffffd8d371fb7b89fe5cdd2fc0edd2b8be1bd81b2cb645a79f70854dd6e28aacb312000000004847304402204c78f9d63fcb85c87b6a86ecc7e66a439152c11175ba7c803c32ad02b45db5ed02205b6c51bb425a00b71c684ea9a81996f41b04a492d35481e76c3165425d16351c01ffffffffddfdb8c016e9728b7f49c520239ffe19e474d2ad6fad42b908a37e1e90aa073b00000000494830450221008d0e60c83fe5e355ffcc482c20adf0bdb26458679411577da780527f6ba196e002207a1a11a8179e76a261136a8e3dc55b605ae3fb9b3202b503f6d6f524c344bde701ffffffffdee84d079c1ab6435f0149a94b397e8ad852403439f1c2b330a9bc2a76b860380000000049483045022100f50b454c0d4cab7cb74bfb045972e8195da586a50b3f8caf69c2e64e15434deb02204d8d490ea74322c616700bc852b7124b4b2a2e91e6784005865f4b0033ab417101ffffffffed77ff7b761af3d5cf8e8c21cee1e6cfab5ec13513a278157c69386342eee03c0000000049483045022100fb8eabd748222fbee370a3909d2a2931331a31fd2f457486c4f9d4110b45b812022005c670f1ed267cab0ec279ec7d6bfad80aa4bd1c12fe1d67d3a60bb381b9e94a01ffffffffef9862b772815974b58920c76a4816c9ea5136e700d0ad50edb886de3871082d0000000049483045022100ae91e43e8fbe4ff2024fe7771ee083abc456f33041ed62e1b21ef6fe98a316c50220323001b3adcc33f6f5407d3c1a3e8755bc57df182c0c499adc4db680d908330c01ffffffff7b1179c4da436ad8292826f262481a79aac85a215280986b3f72b8379cfa1a34020000008a47304402207f960a118640e68e0f22f7377c51d1b1285e6203a1eb4b8e86936b4051a77bc002202e989b0b140bd1376d0586f05a8f1371dc7ce3f467ee0afd65af21a564fccbe50141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff03549c042e000000001976a914d34bca93da8bfda82ba5afbe3e27b903debc9ea088ac0000000000000000246a22735138766d773734357157506564734335483268383144357a573774574757446545bae4c2207d0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000002000000ce6c3361c66f240f80c9b2cbea43693be43f915b6ec020cf5e11a27e41ef9638";
std::string strD30 = "0022735138766d773734357157506564734335483268383144357a5737745747574465450200000003351402ff1207dde7f7a0ada0ee2e29b51ede18496c580f07f69064a818ae79de00000000494830450221008850a30df26aae210ba6c544484a1ec572dd56e1b44447dd106838cfe786de3a022027a537d403f322cda9122915ddb705b5e9557bd0414f6c44801c20e553d9e58f01ffffffff62ab55012c324b7053a70ed8a5cbdcf4f10a6a9359389b9ca5577c5863c4138d000000006a47304402200b575ee2fdea727235d879529990394fa5093d116bdd2e8f47ecb1f6f679c8a902206d12b7be6bab689d6fff9bdaffda6c8b7678ddf6a6979b7c98766b4d86adec880121028f4b8bc8090244dc9082c37dc141511536a0e8dd0cc3ba834c51413e4b67cb85ffffffff004a40ea5bef7d9dcda244d688e3155ff3582a7a619916acc628d537dc1be175020000008a473044022035d8da20e6ab7a58365c437b00661081f40d7f4a14797458b471895a22f39da602202db60716bfe50d3cda60daec24aca943bddb0436bbbd0464ef1c51f887fd20ca0141043a6a472d711c6b4751af0cf82f397909469f943788f89bb7dfb1292d2a40e662ef2c32e6798315cc5fc21432e1db5513de3ddb3bda295199b065959cd76cf01cffffffff0354924001000000001976a914cf2fc9faca850ed043ef942f1b8e5a410de8d7ad88ac0000000000000000246a22735138766d773734357157506564734335483268383144357a573774574757446545bad6c84a7e0000001976a91458c63096724814c3dcdf088b9bb0dc48e6e1a89c88ac000000000200000001000000b17c8dd6a71d8f6e5eb837159a5697de1c8f4a6962745d37e1491f4ea10d5911";
CDataStream ss1(ParseHex(strD1), SER_DISK, CLIENT_VERSION);
CDataStream ss2(ParseHex(strD2), SER_DISK, CLIENT_VERSION);
CDataStream ss3(ParseHex(strD3), SER_DISK, CLIENT_VERSION);
CDataStream ss4(ParseHex(strD4), SER_DISK, CLIENT_VERSION);
CDataStream ss5(ParseHex(strD5), SER_DISK, CLIENT_VERSION);
CDataStream ss6(ParseHex(strD6), SER_DISK, CLIENT_VERSION);
CDataStream ss7(ParseHex(strD7), SER_DISK, CLIENT_VERSION);
CDataStream ss8(ParseHex(strD8), SER_DISK, CLIENT_VERSION);
CDataStream ss9(ParseHex(strD9), SER_DISK, CLIENT_VERSION);
CDataStream ss10(ParseHex(strD10), SER_DISK, CLIENT_VERSION);
CDataStream ss11(ParseHex(strD11), SER_DISK, CLIENT_VERSION);
CDataStream ss12(ParseHex(strD12), SER_DISK, CLIENT_VERSION);
CDataStream ss13(ParseHex(strD13), SER_DISK, CLIENT_VERSION);
CDataStream ss14(ParseHex(strD14), SER_DISK, CLIENT_VERSION);
CDataStream ss15(ParseHex(strD15), SER_DISK, CLIENT_VERSION);
CDataStream ss16(ParseHex(strD16), SER_DISK, CLIENT_VERSION);
CDataStream ss17(ParseHex(strD17), SER_DISK, CLIENT_VERSION);
CDataStream ss18(ParseHex(strD18), SER_DISK, CLIENT_VERSION);
CDataStream ss19(ParseHex(strD19), SER_DISK, CLIENT_VERSION);
CDataStream ss20(ParseHex(strD20), SER_DISK, CLIENT_VERSION);
CDataStream ss21(ParseHex(strD21), SER_DISK, CLIENT_VERSION);
CDataStream ss22(ParseHex(strD22), SER_DISK, CLIENT_VERSION);
CDataStream ss23(ParseHex(strD23), SER_DISK, CLIENT_VERSION);
CDataStream ss24(ParseHex(strD24), SER_DISK, CLIENT_VERSION);
CDataStream ss25(ParseHex(strD25), SER_DISK, CLIENT_VERSION);
CDataStream ss26(ParseHex(strD26), SER_DISK, CLIENT_VERSION);
CDataStream ss27(ParseHex(strD27), SER_DISK, CLIENT_VERSION);
CDataStream ss28(ParseHex(strD28), SER_DISK, CLIENT_VERSION);
CDataStream ss29(ParseHex(strD29), SER_DISK, CLIENT_VERSION);
CDataStream ss30(ParseHex(strD30), SER_DISK, CLIENT_VERSION);
// Unserialize the testing deposits
SidechainDeposit d1;
ss1 >> d1;
SidechainDeposit d2;
ss2 >> d2;
SidechainDeposit d3;
ss3 >> d3;
SidechainDeposit d4;
ss4 >> d4;
SidechainDeposit d5;
ss5 >> d5;
SidechainDeposit d6;
ss6 >> d6;
SidechainDeposit d7;
ss7 >> d7;
SidechainDeposit d8;
ss8 >> d8;
SidechainDeposit d9;
ss9 >> d9;
SidechainDeposit d10;
ss10 >> d10;
SidechainDeposit d11;
ss11 >> d11;
SidechainDeposit d12;
ss12 >> d12;
SidechainDeposit d13;
ss13 >> d13;
SidechainDeposit d14;
ss14 >> d14;
SidechainDeposit d15;
ss15 >> d15;
SidechainDeposit d16;
ss16 >> d16;
SidechainDeposit d17;
ss17 >> d17;
SidechainDeposit d18;
ss18 >> d18;
SidechainDeposit d19;
ss19 >> d19;
SidechainDeposit d20;
ss20 >> d20;
SidechainDeposit d21;
ss21 >> d21;
SidechainDeposit d22;
ss22 >> d22;
SidechainDeposit d23;
ss23 >> d23;
SidechainDeposit d24;
ss24 >> d24;
SidechainDeposit d25;
ss25 >> d25;
SidechainDeposit d26;
ss26 >> d26;
SidechainDeposit d27;
ss27 >> d27;
SidechainDeposit d28;
ss28 >> d28;
SidechainDeposit d29;
ss29 >> d29;
SidechainDeposit d30;
ss30 >> d30;
std::vector<SidechainDeposit> vDeposit { d1, d2, d3, d4, d5, d6, d7, d8,
d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20, d21, d22,
d23, d24, d25, d26, d27, d28, d29, d30 };
// Enable this for debugging
//int i = 0;
//for (const SidechainDeposit& d : vDeposit) {
// std::cout << "Deposit " << i << ":\n";
// std::cout << d.ToString() << std::endl;
// i++;
//}
return vDeposit;
}
BOOST_AUTO_TEST_CASE(sidechain_sort_deposits_1)
{
// Get deposits in valid CTIP spend order
std::vector<SidechainDeposit> vD = GetTestDeposits();
// Test sorting the deposits when they are already in valid order
std::vector<SidechainDeposit> vDepositSorted;
BOOST_CHECK(SortDeposits(vD, vDepositSorted));
BOOST_CHECK(vD == vDepositSorted);
vDepositSorted.clear();
// Test sorting from reverse order
std::vector<SidechainDeposit> vReverse = vD;
std::reverse(vReverse.begin(), vReverse.end());
BOOST_CHECK(SortDeposits(vReverse, vDepositSorted));
BOOST_CHECK(vD == vDepositSorted);
vDepositSorted.clear();
// Test sorting random order
std::vector<SidechainDeposit> vRandom {vD[1], vD[0], vD[21], vD[16], vD[4],
vD[24], vD[15], vD[7], vD[26], vD[9], vD[8], vD[27], vD[13], vD[11],
vD[12], vD[10], vD[28], vD[14], vD[6], vD[3], vD[17], vD[20], vD[19],
vD[18], vD[25], vD[2], vD[22], vD[23], vD[5], vD[29] };
BOOST_CHECK(vRandom != vD);
BOOST_CHECK(SortDeposits(vRandom, vDepositSorted));
BOOST_CHECK(vDepositSorted == vD);
}
BOOST_AUTO_TEST_CASE(sidechain_sort_deposits_2)
{
// Get deposits in valid CTIP spend order
std::vector<SidechainDeposit> vD = GetTestDeposits();
// Test sorting the deposits when they are already in valid order
std::vector<SidechainDeposit> vDepositSorted;
BOOST_CHECK(SortDeposits(vD, vDepositSorted));
BOOST_CHECK(vD == vDepositSorted);
vDepositSorted.clear();
// Test sorting from reverse order
std::vector<SidechainDeposit> vReverse = vD;
std::reverse(vReverse.begin(), vReverse.end());
BOOST_CHECK(SortDeposits(vReverse, vDepositSorted));
BOOST_CHECK(vD == vDepositSorted);
vDepositSorted.clear();
// Test sorting random order
std::vector<SidechainDeposit> vRandom {vD[24], vD[0], vD[21], vD[11], vD[4],
vD[1], vD[15], vD[12], vD[9], vD[8], vD[25], vD[26],vD[13], vD[2],
vD[28], vD[7], vD[10], vD[14], vD[6], vD[27], vD[19], vD[23], vD[20],
vD[3], vD[18], vD[16], vD[22], vD[17], vD[5], vD[29]};
BOOST_CHECK(vRandom != vD);
BOOST_CHECK(SortDeposits(vRandom, vDepositSorted));
BOOST_CHECK(vDepositSorted == vD);
}
BOOST_AUTO_TEST_CASE(sidechain_sort_deposits_invalid)
{
// Check that sorting fails when invalid (duplicate and missing)
// deposits try to be sorted
// Get deposits in valid CTIP spend order
std::vector<SidechainDeposit> vD = GetTestDeposits();
// Test sorting the deposits when they are already in valid order
std::vector<SidechainDeposit> vDepositSorted;
BOOST_CHECK(SortDeposits(vD, vDepositSorted));
BOOST_CHECK(vD == vDepositSorted);
vDepositSorted.clear();
// Test sorting from reverse order
std::vector<SidechainDeposit> vReverse = vD;
std::reverse(vReverse.begin(), vReverse.end());
BOOST_CHECK(SortDeposits(vReverse, vDepositSorted));
BOOST_CHECK(vD == vDepositSorted);
vDepositSorted.clear();
// Test failure when there are duplicate deposits
std::vector<SidechainDeposit> vDuplicate {vD[0], vD[0], vD[2], vD[3], vD[4],
vD[5], vD[6], vD[7], vD[8], vD[9], vD[10], vD[11], vD[11], vD[11],
vD[14], vD[15], vD[16], vD[17], vD[18], vD[19], vD[20], vD[21],
vD[22], vD[22], vD[22], vD[25], vD[26], vD[27], vD[28], vD[29], vD[29]};
BOOST_CHECK(!SortDeposits(vDuplicate, vDepositSorted));
BOOST_CHECK(vDepositSorted != vD);
vDepositSorted.clear();
// Test failure when there are missing deposits
std::vector<SidechainDeposit> vMissing {vD[0], vD[1], /* vD[2], */ vD[3],
vD[4], vD[5], vD[6], vD[7], vD[8], vD[9], vD[10], vD[11], vD[12],
vD[13], vD[14], vD[15], vD[16], vD[17], vD[18], vD[19], vD[20], vD[21],
vD[22], vD[23] /* vD[24] */, vD[25], vD[26], vD[27], vD[28], vD[29] };
BOOST_CHECK(!SortDeposits(vMissing, vDepositSorted));
BOOST_CHECK(vDepositSorted != vD);
}
BOOST_AUTO_TEST_SUITE_END()