@sidhujag/sysweb3-keyring 1.0.544 → 1.0.547
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/clover.xml +2875 -0
- package/coverage/coverage-final.json +29468 -0
- package/coverage/lcov-report/base.css +354 -0
- package/coverage/lcov-report/block-navigation.js +85 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +320 -0
- package/coverage/lcov-report/prettify.css +101 -0
- package/coverage/lcov-report/prettify.js +1008 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +191 -0
- package/coverage/lcov-report/src/index.html +276 -0
- package/coverage/lcov-report/src/index.ts.html +114 -0
- package/coverage/lcov-report/src/initial-state.ts.html +558 -0
- package/coverage/lcov-report/src/keyring-manager.ts.html +6279 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.html +178 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/index.ts.html +144 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/appClient.ts.html +1560 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/bip32.ts.html +276 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/buffertools.ts.html +495 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/clientCommands.ts.html +1138 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/index.html +363 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts.html +289 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkle.ts.html +486 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/merkleMap.ts.html +240 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/policy.ts.html +342 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/psbtv2.ts.html +2388 -0
- package/coverage/lcov-report/src/ledger/bitcoin_client/lib/varint.ts.html +453 -0
- package/coverage/lcov-report/src/ledger/consts.ts.html +177 -0
- package/coverage/lcov-report/src/ledger/index.html +216 -0
- package/coverage/lcov-report/src/ledger/index.ts.html +1371 -0
- package/coverage/lcov-report/src/ledger/utils.ts.html +102 -0
- package/coverage/lcov-report/src/signers.ts.html +591 -0
- package/coverage/lcov-report/src/storage.ts.html +198 -0
- package/coverage/lcov-report/src/transactions/ethereum.ts.html +5826 -0
- package/coverage/lcov-report/src/transactions/index.html +216 -0
- package/coverage/lcov-report/src/transactions/index.ts.html +93 -0
- package/coverage/lcov-report/src/transactions/syscoin.ts.html +1521 -0
- package/coverage/lcov-report/src/trezor/index.html +176 -0
- package/coverage/lcov-report/src/trezor/index.ts.html +2655 -0
- package/coverage/lcov-report/src/types.ts.html +1443 -0
- package/coverage/lcov-report/src/utils/derivation-paths.ts.html +486 -0
- package/coverage/lcov-report/src/utils/index.html +196 -0
- package/coverage/lcov-report/src/utils/psbt.ts.html +159 -0
- package/coverage/lcov-report/test/helpers/constants.ts.html +627 -0
- package/coverage/lcov-report/test/helpers/index.html +176 -0
- package/coverage/lcov.info +4832 -0
- package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/appClient.js +1 -124
- package/dist/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/{cjs → dist/cjs}/transactions/ethereum.js +24 -11
- package/dist/cjs/transactions/ethereum.js.map +1 -0
- package/dist/package.json +50 -0
- package/{types → dist/types}/ledger/bitcoin_client/lib/appClient.d.ts +0 -6
- package/examples/basic-usage.js +140 -0
- package/jest.config.js +32 -0
- package/package.json +31 -13
- package/readme.md +201 -0
- package/src/declare.d.ts +7 -0
- package/src/errorUtils.ts +83 -0
- package/src/hardware-wallet-manager.ts +655 -0
- package/src/index.ts +12 -0
- package/src/initial-state.ts +108 -0
- package/src/keyring-manager.ts +2698 -0
- package/src/ledger/bitcoin_client/index.ts +19 -0
- package/src/ledger/bitcoin_client/lib/appClient.ts +405 -0
- package/src/ledger/bitcoin_client/lib/bip32.ts +61 -0
- package/src/ledger/bitcoin_client/lib/buffertools.ts +134 -0
- package/src/ledger/bitcoin_client/lib/clientCommands.ts +356 -0
- package/src/ledger/bitcoin_client/lib/constants.ts +12 -0
- package/src/ledger/bitcoin_client/lib/merkelizedPsbt.ts +65 -0
- package/src/ledger/bitcoin_client/lib/merkle.ts +136 -0
- package/src/ledger/bitcoin_client/lib/merkleMap.ts +49 -0
- package/src/ledger/bitcoin_client/lib/policy.ts +91 -0
- package/src/ledger/bitcoin_client/lib/psbtv2.ts +768 -0
- package/src/ledger/bitcoin_client/lib/varint.ts +120 -0
- package/src/ledger/consts.ts +3 -0
- package/src/ledger/index.ts +685 -0
- package/src/ledger/types.ts +74 -0
- package/src/network-utils.ts +99 -0
- package/src/providers.ts +345 -0
- package/src/signers.ts +158 -0
- package/src/storage.ts +63 -0
- package/src/transactions/__tests__/integration.test.ts +303 -0
- package/src/transactions/__tests__/syscoin.test.ts +409 -0
- package/src/transactions/ethereum.ts +2503 -0
- package/src/transactions/index.ts +2 -0
- package/src/transactions/syscoin.ts +542 -0
- package/src/trezor/index.ts +1050 -0
- package/src/types.ts +366 -0
- package/src/utils/derivation-paths.ts +133 -0
- package/src/utils/psbt.ts +24 -0
- package/src/utils.ts +191 -0
- package/test/README.md +158 -0
- package/test/__mocks__/ledger-mock.js +20 -0
- package/test/__mocks__/trezor-mock.js +75 -0
- package/test/cleanup-summary.md +167 -0
- package/test/helpers/README.md +78 -0
- package/test/helpers/constants.ts +79 -0
- package/test/helpers/setup.ts +714 -0
- package/test/integration/import-validation.spec.ts +588 -0
- package/test/unit/hardware/ledger.spec.ts +869 -0
- package/test/unit/hardware/trezor.spec.ts +828 -0
- package/test/unit/keyring-manager/account-management.spec.ts +970 -0
- package/test/unit/keyring-manager/import-watchonly.spec.ts +181 -0
- package/test/unit/keyring-manager/import-wif.spec.ts +126 -0
- package/test/unit/keyring-manager/initialization.spec.ts +782 -0
- package/test/unit/keyring-manager/key-derivation.spec.ts +996 -0
- package/test/unit/keyring-manager/security.spec.ts +505 -0
- package/test/unit/keyring-manager/state-management.spec.ts +375 -0
- package/test/unit/network/network-management.spec.ts +372 -0
- package/test/unit/transactions/ethereum-transactions.spec.ts +382 -0
- package/test/unit/transactions/syscoin-transactions.spec.ts +615 -0
- package/tsconfig.json +14 -0
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +0 -1
- package/cjs/transactions/ethereum.js.map +0 -1
- /package/{README.md → dist/README.md} +0 -0
- /package/{cjs → dist/cjs}/errorUtils.js +0 -0
- /package/{cjs → dist/cjs}/errorUtils.js.map +0 -0
- /package/{cjs → dist/cjs}/hardware-wallet-manager.js +0 -0
- /package/{cjs → dist/cjs}/hardware-wallet-manager.js.map +0 -0
- /package/{cjs → dist/cjs}/index.js +0 -0
- /package/{cjs → dist/cjs}/index.js.map +0 -0
- /package/{cjs → dist/cjs}/initial-state.js +0 -0
- /package/{cjs → dist/cjs}/initial-state.js.map +0 -0
- /package/{cjs → dist/cjs}/keyring-manager.js +0 -0
- /package/{cjs → dist/cjs}/keyring-manager.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/index.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/bip32.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/buffertools.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/clientCommands.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/constants.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkle.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/merkleMap.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/policy.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/psbtv2.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js +0 -0
- /package/{cjs → dist/cjs}/ledger/bitcoin_client/lib/varint.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/consts.js +0 -0
- /package/{cjs → dist/cjs}/ledger/consts.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/index.js +0 -0
- /package/{cjs → dist/cjs}/ledger/index.js.map +0 -0
- /package/{cjs → dist/cjs}/ledger/types.js +0 -0
- /package/{cjs → dist/cjs}/ledger/types.js.map +0 -0
- /package/{cjs → dist/cjs}/network-utils.js +0 -0
- /package/{cjs → dist/cjs}/network-utils.js.map +0 -0
- /package/{cjs → dist/cjs}/providers.js +0 -0
- /package/{cjs → dist/cjs}/providers.js.map +0 -0
- /package/{cjs → dist/cjs}/signers.js +0 -0
- /package/{cjs → dist/cjs}/signers.js.map +0 -0
- /package/{cjs → dist/cjs}/storage.js +0 -0
- /package/{cjs → dist/cjs}/storage.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/integration.test.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js +0 -0
- /package/{cjs → dist/cjs}/transactions/__tests__/syscoin.test.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/index.js +0 -0
- /package/{cjs → dist/cjs}/transactions/index.js.map +0 -0
- /package/{cjs → dist/cjs}/transactions/syscoin.js +0 -0
- /package/{cjs → dist/cjs}/transactions/syscoin.js.map +0 -0
- /package/{cjs → dist/cjs}/trezor/index.js +0 -0
- /package/{cjs → dist/cjs}/trezor/index.js.map +0 -0
- /package/{cjs → dist/cjs}/types.js +0 -0
- /package/{cjs → dist/cjs}/types.js.map +0 -0
- /package/{cjs → dist/cjs}/utils/derivation-paths.js +0 -0
- /package/{cjs → dist/cjs}/utils/derivation-paths.js.map +0 -0
- /package/{cjs → dist/cjs}/utils/psbt.js +0 -0
- /package/{cjs → dist/cjs}/utils/psbt.js.map +0 -0
- /package/{cjs → dist/cjs}/utils.js +0 -0
- /package/{cjs → dist/cjs}/utils.js.map +0 -0
- /package/{types → dist/types}/errorUtils.d.ts +0 -0
- /package/{types → dist/types}/hardware-wallet-manager.d.ts +0 -0
- /package/{types → dist/types}/index.d.ts +0 -0
- /package/{types → dist/types}/initial-state.d.ts +0 -0
- /package/{types → dist/types}/keyring-manager.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/index.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/bip32.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/buffertools.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/clientCommands.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/constants.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/merkle.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/merkleMap.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/policy.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/psbtv2.d.ts +0 -0
- /package/{types → dist/types}/ledger/bitcoin_client/lib/varint.d.ts +0 -0
- /package/{types → dist/types}/ledger/consts.d.ts +0 -0
- /package/{types → dist/types}/ledger/index.d.ts +0 -0
- /package/{types → dist/types}/ledger/types.d.ts +0 -0
- /package/{types → dist/types}/network-utils.d.ts +0 -0
- /package/{types → dist/types}/providers.d.ts +0 -0
- /package/{types → dist/types}/signers.d.ts +0 -0
- /package/{types → dist/types}/storage.d.ts +0 -0
- /package/{types → dist/types}/transactions/__tests__/integration.test.d.ts +0 -0
- /package/{types → dist/types}/transactions/__tests__/syscoin.test.d.ts +0 -0
- /package/{types → dist/types}/transactions/ethereum.d.ts +0 -0
- /package/{types → dist/types}/transactions/index.d.ts +0 -0
- /package/{types → dist/types}/transactions/syscoin.d.ts +0 -0
- /package/{types → dist/types}/trezor/index.d.ts +0 -0
- /package/{types → dist/types}/types.d.ts +0 -0
- /package/{types → dist/types}/utils/derivation-paths.d.ts +0 -0
- /package/{types → dist/types}/utils/psbt.d.ts +0 -0
- /package/{types → dist/types}/utils.d.ts +0 -0
|
@@ -0,0 +1,1138 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<title>
|
|
5
|
+
Code coverage report for src/ledger/bitcoin_client/lib/clientCommands.ts
|
|
6
|
+
</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../../base.css" />
|
|
10
|
+
<link
|
|
11
|
+
rel="shortcut icon"
|
|
12
|
+
type="image/x-icon"
|
|
13
|
+
href="../../../../favicon.png"
|
|
14
|
+
/>
|
|
15
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
16
|
+
<style type="text/css">
|
|
17
|
+
.coverage-summary .sorter {
|
|
18
|
+
background-image: url(../../../../sort-arrow-sprite.png);
|
|
19
|
+
}
|
|
20
|
+
</style>
|
|
21
|
+
</head>
|
|
22
|
+
|
|
23
|
+
<body>
|
|
24
|
+
<div class="wrapper">
|
|
25
|
+
<div class="pad1">
|
|
26
|
+
<h1>
|
|
27
|
+
<a href="../../../../index.html">All files</a> /
|
|
28
|
+
<a href="index.html">src/ledger/bitcoin_client/lib</a>
|
|
29
|
+
clientCommands.ts
|
|
30
|
+
</h1>
|
|
31
|
+
<div class="clearfix">
|
|
32
|
+
<div class="fl pad1y space-right2">
|
|
33
|
+
<span class="strong">10.66% </span>
|
|
34
|
+
<span class="quiet">Statements</span>
|
|
35
|
+
<span class="fraction">16/150</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="fl pad1y space-right2">
|
|
39
|
+
<span class="strong">8.69% </span>
|
|
40
|
+
<span class="quiet">Branches</span>
|
|
41
|
+
<span class="fraction">2/23</span>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="fl pad1y space-right2">
|
|
45
|
+
<span class="strong">4.76% </span>
|
|
46
|
+
<span class="quiet">Functions</span>
|
|
47
|
+
<span class="fraction">1/21</span>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div class="fl pad1y space-right2">
|
|
51
|
+
<span class="strong">11.26% </span>
|
|
52
|
+
<span class="quiet">Lines</span>
|
|
53
|
+
<span class="fraction">16/142</span>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<p class="quiet">
|
|
57
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block,
|
|
58
|
+
<em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
59
|
+
</p>
|
|
60
|
+
<template id="filterTemplate">
|
|
61
|
+
<div class="quiet">
|
|
62
|
+
Filter:
|
|
63
|
+
<input type="search" id="fileSearch" />
|
|
64
|
+
</div>
|
|
65
|
+
</template>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="status-line low"></div>
|
|
68
|
+
<pre><table class="coverage">
|
|
69
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
70
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
71
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
72
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
73
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
74
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
75
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
76
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
77
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
78
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
79
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
80
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
81
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
82
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
83
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
84
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
85
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
86
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
87
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
88
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
89
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
90
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
91
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
92
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
93
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
94
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
95
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
96
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
97
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
98
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
99
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
100
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
101
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
102
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
103
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
104
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
105
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
106
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
107
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
108
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
109
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
110
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
111
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
112
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
113
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
114
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
115
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
116
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
117
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
118
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
119
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
120
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
121
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
122
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
123
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
124
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
125
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
126
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
127
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
128
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
129
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
130
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
131
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
132
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
133
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
134
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
135
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
136
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
137
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
138
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
139
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
140
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
141
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
142
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
143
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
144
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
145
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
146
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
147
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
148
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
149
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
150
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
151
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
152
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
153
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
154
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
155
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
156
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
157
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
158
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
159
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
160
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
161
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
162
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
163
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
164
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
165
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
166
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
167
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
168
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
169
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
170
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
171
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
172
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
173
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
174
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
175
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
176
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
177
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
178
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
179
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
180
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
181
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
182
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
183
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
184
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
185
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
186
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
187
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
188
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
189
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
190
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
191
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
192
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
193
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
194
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
195
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
196
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
197
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
198
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
199
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
200
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
201
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
202
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
203
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
204
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
205
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
206
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
207
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
208
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
209
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
210
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
211
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
212
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
213
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
214
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
215
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
216
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
217
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
218
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
219
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
220
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
221
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
222
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
223
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
224
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
225
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
226
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
227
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
228
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
229
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
230
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
231
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
232
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
233
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
234
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
235
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
236
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
237
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
238
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
239
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
240
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
241
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
242
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
243
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
244
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
245
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
246
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
247
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
248
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
249
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
250
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
251
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
252
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
253
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
254
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
255
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
256
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
257
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
258
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
259
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
260
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
261
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
262
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
263
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
264
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
265
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
266
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
267
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
268
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
269
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
270
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
271
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
272
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
273
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
274
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
275
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
276
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
277
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
278
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
279
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
280
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
281
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
282
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
283
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
284
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
285
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
286
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
287
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
288
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
289
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
290
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
291
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
292
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
293
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
294
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
295
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
296
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
297
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
298
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
299
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
300
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
301
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
302
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
303
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
304
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
305
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
306
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
307
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
308
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
309
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
310
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
311
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
312
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
313
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
314
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
315
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
316
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
317
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
318
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
319
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
320
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
321
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
322
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
323
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
324
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
325
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
326
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
327
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
328
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
329
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
330
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
331
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
332
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
333
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
334
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
335
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
336
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
337
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
338
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
339
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
340
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
341
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
342
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
343
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
344
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
345
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
346
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
347
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
348
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
349
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
350
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
351
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
352
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
353
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
354
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
355
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
356
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
357
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
358
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
359
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
360
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
361
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
362
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
363
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
364
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
365
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
366
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
367
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
368
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
369
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
370
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
371
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
372
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
373
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
374
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
375
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
376
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
377
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
378
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
379
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
380
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
381
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
382
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
383
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
384
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
385
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
386
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
387
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
388
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
389
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
390
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
391
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
392
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
393
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
394
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
395
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
396
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
397
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
398
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
399
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
400
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
401
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
402
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
403
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
404
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
405
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
406
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
407
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
408
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
409
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
410
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
411
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
412
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
413
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
414
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
415
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
416
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
417
|
+
<a name='L349'></a><a href='#L349'>349</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-yes">2x</span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-yes">2x</span>
|
|
421
|
+
<span class="cline-any cline-yes">2x</span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-yes">2x</span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-yes">2x</span>
|
|
427
|
+
<span class="cline-any cline-yes">2x</span>
|
|
428
|
+
<span class="cline-any cline-yes">2x</span>
|
|
429
|
+
<span class="cline-any cline-yes">2x</span>
|
|
430
|
+
<span class="cline-any cline-yes">2x</span>
|
|
431
|
+
<span class="cline-any cline-yes">2x</span>
|
|
432
|
+
<span class="cline-any cline-neutral"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-neutral"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-yes">2x</span>
|
|
440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-neutral"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-no"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-no"> </span>
|
|
449
|
+
<span class="cline-any cline-no"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-neutral"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-no"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-no"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-no"> </span>
|
|
458
|
+
<span class="cline-any cline-neutral"> </span>
|
|
459
|
+
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
461
|
+
<span class="cline-any cline-yes">2x</span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
465
|
+
<span class="cline-any cline-no"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
468
|
+
<span class="cline-any cline-no"> </span>
|
|
469
|
+
<span class="cline-any cline-no"> </span>
|
|
470
|
+
<span class="cline-any cline-no"> </span>
|
|
471
|
+
<span class="cline-any cline-neutral"> </span>
|
|
472
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
474
|
+
<span class="cline-any cline-no"> </span>
|
|
475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
477
|
+
<span class="cline-any cline-no"> </span>
|
|
478
|
+
<span class="cline-any cline-no"> </span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-neutral"> </span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-no"> </span>
|
|
487
|
+
<span class="cline-any cline-no"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-no"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-no"> </span>
|
|
493
|
+
<span class="cline-any cline-no"> </span>
|
|
494
|
+
<span class="cline-any cline-no"> </span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-no"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-no"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-no"> </span>
|
|
503
|
+
<span class="cline-any cline-no"> </span>
|
|
504
|
+
<span class="cline-any cline-no"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-neutral"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-yes">2x</span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-no"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-no"> </span>
|
|
527
|
+
<span class="cline-any cline-no"> </span>
|
|
528
|
+
<span class="cline-any cline-no"> </span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-no"> </span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-no"> </span>
|
|
535
|
+
<span class="cline-any cline-no"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-no"> </span>
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-no"> </span>
|
|
541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-no"> </span>
|
|
545
|
+
<span class="cline-any cline-no"> </span>
|
|
546
|
+
<span class="cline-any cline-no"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-no"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
553
|
+
<span class="cline-any cline-no"> </span>
|
|
554
|
+
<span class="cline-any cline-no"> </span>
|
|
555
|
+
<span class="cline-any cline-no"> </span>
|
|
556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-no"> </span>
|
|
559
|
+
<span class="cline-any cline-no"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-no"> </span>
|
|
563
|
+
<span class="cline-any cline-no"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-no"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-no"> </span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
|
+
<span class="cline-any cline-no"> </span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-no"> </span>
|
|
578
|
+
<span class="cline-any cline-no"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-no"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-yes">2x</span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-no"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-no"> </span>
|
|
597
|
+
<span class="cline-any cline-no"> </span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-no"> </span>
|
|
602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
603
|
+
<span class="cline-any cline-no"> </span>
|
|
604
|
+
<span class="cline-any cline-no"> </span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-no"> </span>
|
|
609
|
+
<span class="cline-any cline-no"> </span>
|
|
610
|
+
<span class="cline-any cline-no"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-no"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-no"> </span>
|
|
616
|
+
<span class="cline-any cline-no"> </span>
|
|
617
|
+
<span class="cline-any cline-no"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-no"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-no"> </span>
|
|
622
|
+
<span class="cline-any cline-no"> </span>
|
|
623
|
+
<span class="cline-any cline-no"> </span>
|
|
624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-neutral"> </span>
|
|
628
|
+
<span class="cline-any cline-no"> </span>
|
|
629
|
+
<span class="cline-any cline-no"> </span>
|
|
630
|
+
<span class="cline-any cline-no"> </span>
|
|
631
|
+
<span class="cline-any cline-no"> </span>
|
|
632
|
+
<span class="cline-any cline-no"> </span>
|
|
633
|
+
<span class="cline-any cline-no"> </span>
|
|
634
|
+
<span class="cline-any cline-no"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
637
|
+
<span class="cline-any cline-no"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-yes">2x</span>
|
|
642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-no"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-no"> </span>
|
|
648
|
+
<span class="cline-any cline-no"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-no"> </span>
|
|
653
|
+
<span class="cline-any cline-no"> </span>
|
|
654
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
|
+
<span class="cline-any cline-neutral"> </span>
|
|
656
|
+
<span class="cline-any cline-no"> </span>
|
|
657
|
+
<span class="cline-any cline-no"> </span>
|
|
658
|
+
<span class="cline-any cline-neutral"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-no"> </span>
|
|
662
|
+
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-no"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-no"> </span>
|
|
669
|
+
<span class="cline-any cline-no"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-no"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-no"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-yes">2x</span>
|
|
697
|
+
<span class="cline-any cline-no"> </span>
|
|
698
|
+
<span class="cline-any cline-no"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-no"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-no"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-no"> </span>
|
|
708
|
+
<span class="cline-any cline-neutral"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-neutral"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-no"> </span>
|
|
716
|
+
<span class="cline-any cline-no"> </span>
|
|
717
|
+
<span class="cline-any cline-no"> </span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-no"> </span>
|
|
720
|
+
<span class="cline-any cline-neutral"> </span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-no"> </span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-no"> </span>
|
|
733
|
+
<span class="cline-any cline-no"> </span>
|
|
734
|
+
<span class="cline-any cline-no"> </span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-no"> </span>
|
|
737
|
+
<span class="cline-any cline-no"> </span>
|
|
738
|
+
<span class="cline-any cline-neutral"> </span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-no"> </span>
|
|
742
|
+
<span class="cline-any cline-no"> </span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-neutral"> </span>
|
|
746
|
+
<span class="cline-any cline-no"> </span>
|
|
747
|
+
<span class="cline-any cline-no"> </span>
|
|
748
|
+
<span class="cline-any cline-no"> </span>
|
|
749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-neutral"> </span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-no"> </span>
|
|
753
|
+
<span class="cline-any cline-no"> </span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-no"> </span>
|
|
757
|
+
<span class="cline-any cline-no"> </span>
|
|
758
|
+
<span class="cline-any cline-no"> </span>
|
|
759
|
+
<span class="cline-any cline-no"> </span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-neutral"> </span>
|
|
762
|
+
<span class="cline-any cline-no"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-neutral"> </span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable camelcase */
|
|
766
|
+
import { crypto } from 'bitcoinjs-lib';
|
|
767
|
+
|
|
768
|
+
import { BufferReader } from './buffertools';
|
|
769
|
+
import { hashLeaf, Merkle } from './merkle';
|
|
770
|
+
import { MerkleMap } from './merkleMap';
|
|
771
|
+
import { WalletPolicy } from './policy';
|
|
772
|
+
import { createVarint, sanitizeBigintToNumber } from './varint';
|
|
773
|
+
|
|
774
|
+
enum ClientCommandCode {
|
|
775
|
+
YIELD = 0x10,
|
|
776
|
+
GET_PREIMAGE = 0x40,
|
|
777
|
+
GET_MERKLE_LEAF_PROOF = 0x41,
|
|
778
|
+
GET_MERKLE_LEAF_INDEX = 0x42,
|
|
779
|
+
GET_MORE_ELEMENTS = 0xa0,
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
abstract class ClientCommand {
|
|
783
|
+
abstract code: ClientCommandCode;
|
|
784
|
+
abstract execute(request: Buffer): Buffer;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
export class YieldCommand extends ClientCommand {
|
|
788
|
+
private results: Buffer[];
|
|
789
|
+
|
|
790
|
+
readonly <span class="cstat-no" title="statement not covered" >code = ClientCommandCode.YIELD;</span>
|
|
791
|
+
|
|
792
|
+
<span class="fstat-no" title="function not covered" > constructor(</span>
|
|
793
|
+
results: Buffer[],
|
|
794
|
+
private readonly <span class="cstat-no" title="statement not covered" >progressCallback?: () => void</span>
|
|
795
|
+
) {
|
|
796
|
+
<span class="cstat-no" title="statement not covered" > super();</span>
|
|
797
|
+
<span class="cstat-no" title="statement not covered" > this.results = results;</span>
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
<span class="fstat-no" title="function not covered" > execute(</span>request: Buffer): Buffer {
|
|
801
|
+
<span class="cstat-no" title="statement not covered" > this.results.push(Buffer.from(request.subarray(1)));</span>
|
|
802
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.progressCallback) {</span>
|
|
803
|
+
<span class="cstat-no" title="statement not covered" > this.progressCallback();</span>
|
|
804
|
+
}
|
|
805
|
+
<span class="cstat-no" title="statement not covered" > return Buffer.from('');</span>
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
export class GetPreimageCommand extends ClientCommand {
|
|
810
|
+
private readonly known_preimages: ReadonlyMap<string, Buffer>;
|
|
811
|
+
private queue: Buffer[];
|
|
812
|
+
|
|
813
|
+
readonly <span class="cstat-no" title="statement not covered" >code = ClientCommandCode.GET_PREIMAGE;</span>
|
|
814
|
+
|
|
815
|
+
<span class="fstat-no" title="function not covered" > constructor(k</span>nown_preimages: ReadonlyMap<string, Buffer>, queue: Buffer[]) {
|
|
816
|
+
<span class="cstat-no" title="statement not covered" > super();</span>
|
|
817
|
+
<span class="cstat-no" title="statement not covered" > this.known_preimages = known_preimages;</span>
|
|
818
|
+
<span class="cstat-no" title="statement not covered" > this.queue = queue;</span>
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
<span class="fstat-no" title="function not covered" > execute(</span>request: Buffer): Buffer {
|
|
822
|
+
const req = <span class="cstat-no" title="statement not covered" >Buffer.from(request.subarray(1));</span>
|
|
823
|
+
|
|
824
|
+
// we expect no more data to read
|
|
825
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (req.length != 1 + 32) {</span>
|
|
826
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Invalid request, unexpected trailing data');</span>
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (req[0] != 0) {</span>
|
|
830
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Unsupported request, the first byte should be 0');</span>
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// read the hash
|
|
834
|
+
const hash = <span class="cstat-no" title="statement not covered" >Buffer.alloc(32);</span>
|
|
835
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i < 32; i++) {</span>
|
|
836
|
+
<span class="cstat-no" title="statement not covered" > hash[i] = req[1 + i];</span>
|
|
837
|
+
}
|
|
838
|
+
const req_hash_hex = <span class="cstat-no" title="statement not covered" >hash.toString('hex');</span>
|
|
839
|
+
|
|
840
|
+
const known_preimage = <span class="cstat-no" title="statement not covered" >this.known_preimages.get(req_hash_hex);</span>
|
|
841
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (known_preimage != undefined) {</span>
|
|
842
|
+
const preimage_len_varint = <span class="cstat-no" title="statement not covered" >createVarint(known_preimage.length);</span>
|
|
843
|
+
|
|
844
|
+
// We can send at most 255 - len(preimage_len_out) - 1 bytes in a single message;
|
|
845
|
+
// the rest will be stored in the queue for GET_MORE_ELEMENTS
|
|
846
|
+
const max_payload_size = <span class="cstat-no" title="statement not covered" >255 - preimage_len_varint.length - 1;</span>
|
|
847
|
+
|
|
848
|
+
const payload_size = <span class="cstat-no" title="statement not covered" >Math.min(max_payload_size, known_preimage.length);</span>
|
|
849
|
+
|
|
850
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (payload_size < known_preimage.length) {</span>
|
|
851
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >payload_size;</span> i < known_preimage.length; i++) {</span>
|
|
852
|
+
<span class="cstat-no" title="statement not covered" > this.queue.push(Buffer.from([known_preimage[i]]));</span>
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
<span class="cstat-no" title="statement not covered" > return Buffer.concat([</span>
|
|
857
|
+
preimage_len_varint,
|
|
858
|
+
Buffer.from([payload_size]),
|
|
859
|
+
Buffer.from(known_preimage.subarray(0, payload_size)),
|
|
860
|
+
]);
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
<span class="cstat-no" title="statement not covered" > throw Error(`Requested unknown preimage for: ${req_hash_hex}`);</span>
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
export class GetMerkleLeafProofCommand extends ClientCommand {
|
|
868
|
+
private readonly known_trees: ReadonlyMap<string, Merkle>;
|
|
869
|
+
private queue: Buffer[];
|
|
870
|
+
|
|
871
|
+
readonly <span class="cstat-no" title="statement not covered" >code = ClientCommandCode.GET_MERKLE_LEAF_PROOF;</span>
|
|
872
|
+
|
|
873
|
+
<span class="fstat-no" title="function not covered" > constructor(k</span>nown_trees: ReadonlyMap<string, Merkle>, queue: Buffer[]) {
|
|
874
|
+
<span class="cstat-no" title="statement not covered" > super();</span>
|
|
875
|
+
<span class="cstat-no" title="statement not covered" > this.known_trees = known_trees;</span>
|
|
876
|
+
<span class="cstat-no" title="statement not covered" > this.queue = queue;</span>
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
<span class="fstat-no" title="function not covered" > execute(</span>request: Buffer): Buffer {
|
|
880
|
+
const req = <span class="cstat-no" title="statement not covered" >Buffer.from(request.subarray(1));</span>
|
|
881
|
+
|
|
882
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (req.length < 32 + 1 + 1) {</span>
|
|
883
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Invalid request, expected at least 34 bytes');</span>
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
const reqBuf = <span class="cstat-no" title="statement not covered" >new BufferReader(req);</span>
|
|
887
|
+
const hash = <span class="cstat-no" title="statement not covered" >reqBuf.readSlice(32);</span>
|
|
888
|
+
const hash_hex = <span class="cstat-no" title="statement not covered" >hash.toString('hex');</span>
|
|
889
|
+
|
|
890
|
+
let tree_size: number;
|
|
891
|
+
let leaf_index: number;
|
|
892
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
893
|
+
<span class="cstat-no" title="statement not covered" > tree_size = sanitizeBigintToNumber(reqBuf.readVarInt());</span>
|
|
894
|
+
<span class="cstat-no" title="statement not covered" > leaf_index = sanitizeBigintToNumber(reqBuf.readVarInt());</span>
|
|
895
|
+
} catch (e) {
|
|
896
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
897
|
+
"Invalid request, couldn't parse tree_size or leaf_index"
|
|
898
|
+
);
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
const mt = <span class="cstat-no" title="statement not covered" >this.known_trees.get(hash_hex);</span>
|
|
902
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!mt) {</span>
|
|
903
|
+
<span class="cstat-no" title="statement not covered" > throw Error(`Requested Merkle leaf proof for unknown tree: ${hash_hex}`);</span>
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (leaf_index >= tree_size || mt.size() != tree_size) {</span>
|
|
907
|
+
<span class="cstat-no" title="statement not covered" > throw Error('Invalid index or tree size.');</span>
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.queue.length != 0) {</span>
|
|
911
|
+
<span class="cstat-no" title="statement not covered" > throw Error(</span>
|
|
912
|
+
'This command should not execute when the queue is not empty.'
|
|
913
|
+
);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
const proof = <span class="cstat-no" title="statement not covered" >mt.getProof(leaf_index);</span>
|
|
917
|
+
|
|
918
|
+
const n_response_elements = <span class="cstat-no" title="statement not covered" >Math.min(</span>
|
|
919
|
+
Math.floor((255 - 32 - 1 - 1) / 32),
|
|
920
|
+
proof.length
|
|
921
|
+
);
|
|
922
|
+
const n_leftover_elements = <span class="cstat-no" title="statement not covered" >proof.length - n_response_elements;</span>
|
|
923
|
+
|
|
924
|
+
// Add to the queue any proof elements that do not fit the response
|
|
925
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (n_leftover_elements > 0) {</span>
|
|
926
|
+
<span class="cstat-no" title="statement not covered" > this.queue.push(...proof.slice(-n_leftover_elements));</span>
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
<span class="cstat-no" title="statement not covered" > return Buffer.concat([</span>
|
|
930
|
+
mt.getLeafHash(leaf_index),
|
|
931
|
+
Buffer.from([proof.length]),
|
|
932
|
+
Buffer.from([n_response_elements]),
|
|
933
|
+
...proof.slice(0, n_response_elements),
|
|
934
|
+
]);
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
export class GetMerkleLeafIndexCommand extends ClientCommand {
|
|
939
|
+
private readonly known_trees: ReadonlyMap<string, Merkle>;
|
|
940
|
+
|
|
941
|
+
readonly <span class="cstat-no" title="statement not covered" >code = ClientCommandCode.GET_MERKLE_LEAF_INDEX;</span>
|
|
942
|
+
|
|
943
|
+
<span class="fstat-no" title="function not covered" > constructor(k</span>nown_trees: ReadonlyMap<string, Merkle>) {
|
|
944
|
+
<span class="cstat-no" title="statement not covered" > super();</span>
|
|
945
|
+
<span class="cstat-no" title="statement not covered" > this.known_trees = known_trees;</span>
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
<span class="fstat-no" title="function not covered" > execute(</span>request: Buffer): Buffer {
|
|
949
|
+
const req = <span class="cstat-no" title="statement not covered" >Buffer.from(request.subarray(1));</span>
|
|
950
|
+
|
|
951
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (req.length != 32 + 32) {</span>
|
|
952
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Invalid request, unexpected trailing data');</span>
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
// read the root hash
|
|
956
|
+
const root_hash = <span class="cstat-no" title="statement not covered" >Buffer.alloc(32);</span>
|
|
957
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i < 32; i++) {</span>
|
|
958
|
+
<span class="cstat-no" title="statement not covered" > root_hash[i] = req.readUInt8(i);</span>
|
|
959
|
+
}
|
|
960
|
+
const root_hash_hex = <span class="cstat-no" title="statement not covered" >root_hash.toString('hex');</span>
|
|
961
|
+
|
|
962
|
+
// read the leaf hash
|
|
963
|
+
const leef_hash = <span class="cstat-no" title="statement not covered" >Buffer.alloc(32);</span>
|
|
964
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i < 32; i++) {</span>
|
|
965
|
+
<span class="cstat-no" title="statement not covered" > leef_hash[i] = req.readUInt8(32 + i);</span>
|
|
966
|
+
}
|
|
967
|
+
const leef_hash_hex = <span class="cstat-no" title="statement not covered" >leef_hash.toString('hex');</span>
|
|
968
|
+
|
|
969
|
+
const mt = <span class="cstat-no" title="statement not covered" >this.known_trees.get(root_hash_hex);</span>
|
|
970
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!mt) {</span>
|
|
971
|
+
<span class="cstat-no" title="statement not covered" > throw Error(</span>
|
|
972
|
+
`Requested Merkle leaf index for unknown root: ${root_hash_hex}`
|
|
973
|
+
);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
let leaf_index = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
977
|
+
let found = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
978
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i < mt.size(); i++) {</span>
|
|
979
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mt.getLeafHash(i).toString('hex') == leef_hash_hex) {</span>
|
|
980
|
+
<span class="cstat-no" title="statement not covered" > found = 1;</span>
|
|
981
|
+
<span class="cstat-no" title="statement not covered" > leaf_index = i;</span>
|
|
982
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
<span class="cstat-no" title="statement not covered" > return Buffer.concat([Buffer.from([found]), createVarint(leaf_index)]);</span>
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
export class GetMoreElementsCommand extends ClientCommand {
|
|
990
|
+
queue: Buffer[];
|
|
991
|
+
|
|
992
|
+
readonly <span class="cstat-no" title="statement not covered" >code = ClientCommandCode.GET_MORE_ELEMENTS;</span>
|
|
993
|
+
|
|
994
|
+
<span class="fstat-no" title="function not covered" > constructor(q</span>ueue: Buffer[]) {
|
|
995
|
+
<span class="cstat-no" title="statement not covered" > super();</span>
|
|
996
|
+
<span class="cstat-no" title="statement not covered" > this.queue = queue;</span>
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
<span class="fstat-no" title="function not covered" > execute(</span>request: Buffer): Buffer {
|
|
1000
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (request.length != 1) {</span>
|
|
1001
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Invalid request, unexpected trailing data');</span>
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.queue.length === 0) {</span>
|
|
1005
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('No elements to get');</span>
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
// all elements should have the same length
|
|
1009
|
+
const element_len = <span class="cstat-no" title="statement not covered" >this.queue[0].length;</span>
|
|
1010
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.queue.some(<span class="fstat-no" title="function not covered" >(e</span>l) => <span class="cstat-no" title="statement not covered" >el.length != element_len)</span>) {</span>
|
|
1011
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1012
|
+
'The queue contains elements with different byte length, which is not expected'
|
|
1013
|
+
);
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
const max_elements = <span class="cstat-no" title="statement not covered" >Math.floor(253 / element_len);</span>
|
|
1017
|
+
const n_returned_elements = <span class="cstat-no" title="statement not covered" >Math.min(max_elements, this.queue.length);</span>
|
|
1018
|
+
|
|
1019
|
+
const returned_elements = <span class="cstat-no" title="statement not covered" >this.queue.splice(0, n_returned_elements);</span>
|
|
1020
|
+
|
|
1021
|
+
<span class="cstat-no" title="statement not covered" > return Buffer.concat([</span>
|
|
1022
|
+
Buffer.from([n_returned_elements]),
|
|
1023
|
+
Buffer.from([element_len]),
|
|
1024
|
+
...returned_elements,
|
|
1025
|
+
]);
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
/**
|
|
1030
|
+
* This class will dispatch a client command coming from the hardware device to
|
|
1031
|
+
* the appropriate client command implementation. Those client commands
|
|
1032
|
+
* typically requests data from a merkle tree or merkelized maps.
|
|
1033
|
+
*
|
|
1034
|
+
* A ClientCommandInterpreter is prepared by adding the merkle trees and
|
|
1035
|
+
* merkelized maps it should be able to serve to the hardware device. This class
|
|
1036
|
+
* doesn't know anything about the semantics of the data it holds, it just
|
|
1037
|
+
* serves merkle data. It doesn't even know in what context it is being
|
|
1038
|
+
* executed, ie SignPsbt, getWalletAddress, etc.
|
|
1039
|
+
*
|
|
1040
|
+
* If the command yelds results to the client, as signPsbt does, the yielded
|
|
1041
|
+
* data will be accessible after the command completed by calling getYielded(),
|
|
1042
|
+
* which will return the yields in the same order as they came in.
|
|
1043
|
+
*/
|
|
1044
|
+
export class ClientCommandInterpreter {
|
|
1045
|
+
private readonly <span class="cstat-no" title="statement not covered" >roots: Map<string, Merkle> = new Map();</span>
|
|
1046
|
+
private readonly <span class="cstat-no" title="statement not covered" >preimages: Map<string, Buffer> = new Map();</span>
|
|
1047
|
+
|
|
1048
|
+
private <span class="cstat-no" title="statement not covered" >yielded: Buffer[] = [];</span>
|
|
1049
|
+
|
|
1050
|
+
private <span class="cstat-no" title="statement not covered" >queue: Buffer[] = [];</span>
|
|
1051
|
+
|
|
1052
|
+
private readonly <span class="cstat-no" title="statement not covered" >commands: Map<ClientCommandCode, ClientCommand> = new Map();</span>
|
|
1053
|
+
|
|
1054
|
+
<span class="fstat-no" title="function not covered" > constructor(p</span>rogressCallback?: () => void) {
|
|
1055
|
+
const commands = <span class="cstat-no" title="statement not covered" >[</span>
|
|
1056
|
+
new YieldCommand(this.yielded, progressCallback),
|
|
1057
|
+
new GetPreimageCommand(this.preimages, this.queue),
|
|
1058
|
+
new GetMerkleLeafIndexCommand(this.roots),
|
|
1059
|
+
new GetMerkleLeafProofCommand(this.roots, this.queue),
|
|
1060
|
+
new GetMoreElementsCommand(this.queue),
|
|
1061
|
+
];
|
|
1062
|
+
|
|
1063
|
+
<span class="cstat-no" title="statement not covered" > for (const cmd of commands) {</span>
|
|
1064
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.commands.has(cmd.code)) {</span>
|
|
1065
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(`Multiple commands with code ${cmd.code}`);</span>
|
|
1066
|
+
}
|
|
1067
|
+
<span class="cstat-no" title="statement not covered" > this.commands.set(cmd.code, cmd);</span>
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
<span class="fstat-no" title="function not covered" > getYielded(</span>): readonly Buffer[] {
|
|
1072
|
+
<span class="cstat-no" title="statement not covered" > return this.yielded;</span>
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
<span class="fstat-no" title="function not covered" > addKnownPreimage(</span>preimage: Buffer): void {
|
|
1076
|
+
<span class="cstat-no" title="statement not covered" > this.preimages.set(crypto.sha256(preimage).toString('hex'), preimage);</span>
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
<span class="fstat-no" title="function not covered" > addKnownList(</span>elements: readonly Buffer[]): void {
|
|
1080
|
+
<span class="cstat-no" title="statement not covered" > for (const el of elements) {</span>
|
|
1081
|
+
const preimage = <span class="cstat-no" title="statement not covered" >Buffer.concat([Buffer.from([0]), el]);</span>
|
|
1082
|
+
<span class="cstat-no" title="statement not covered" > this.addKnownPreimage(preimage);</span>
|
|
1083
|
+
}
|
|
1084
|
+
const mt = <span class="cstat-no" title="statement not covered" >new Merkle(elements.map(<span class="fstat-no" title="function not covered" >(e</span>l) => <span class="cstat-no" title="statement not covered" >hashLeaf(el))</span>);</span>
|
|
1085
|
+
<span class="cstat-no" title="statement not covered" > this.roots.set(mt.getRoot().toString('hex'), mt);</span>
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
<span class="fstat-no" title="function not covered" > addKnownMapping(</span>mm: MerkleMap): void {
|
|
1089
|
+
<span class="cstat-no" title="statement not covered" > this.addKnownList(mm.keys);</span>
|
|
1090
|
+
<span class="cstat-no" title="statement not covered" > this.addKnownList(mm.values);</span>
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
<span class="fstat-no" title="function not covered" > addKnownWalletPolicy(</span>wp: WalletPolicy): void {
|
|
1094
|
+
<span class="cstat-no" title="statement not covered" > this.addKnownPreimage(wp.serialize());</span>
|
|
1095
|
+
<span class="cstat-no" title="statement not covered" > this.addKnownList(wp.keys.map(<span class="fstat-no" title="function not covered" >(k</span>) => <span class="cstat-no" title="statement not covered" >Buffer.from(k, 'ascii'))</span>);</span>
|
|
1096
|
+
<span class="cstat-no" title="statement not covered" > this.addKnownPreimage(Buffer.from(wp.descriptorTemplate));</span>
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
<span class="fstat-no" title="function not covered" > execute(</span>request: Buffer): Buffer {
|
|
1100
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (request.length == 0) {</span>
|
|
1101
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Unexpected empty command');</span>
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
const cmdCode = <span class="cstat-no" title="statement not covered" >request[0];</span>
|
|
1105
|
+
const cmd = <span class="cstat-no" title="statement not covered" >this.commands.get(cmdCode);</span>
|
|
1106
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!cmd) {</span>
|
|
1107
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(`Unexpected command code ${cmdCode}`);</span>
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
<span class="cstat-no" title="statement not covered" > return cmd.execute(request);</span>
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
</pre></td></tr></table></pre>
|
|
1114
|
+
|
|
1115
|
+
<div class="push"></div>
|
|
1116
|
+
<!-- for sticky footer -->
|
|
1117
|
+
</div>
|
|
1118
|
+
<!-- /wrapper -->
|
|
1119
|
+
<div class="footer quiet pad2 space-top1 center small">
|
|
1120
|
+
Code coverage generated by
|
|
1121
|
+
<a
|
|
1122
|
+
href="https://istanbul.js.org/"
|
|
1123
|
+
target="_blank"
|
|
1124
|
+
rel="noopener noreferrer"
|
|
1125
|
+
>istanbul</a
|
|
1126
|
+
>
|
|
1127
|
+
at 2025-06-20T17:45:56.456Z
|
|
1128
|
+
</div>
|
|
1129
|
+
<script src="../../../../prettify.js"></script>
|
|
1130
|
+
<script>
|
|
1131
|
+
window.onload = function () {
|
|
1132
|
+
prettyPrint();
|
|
1133
|
+
};
|
|
1134
|
+
</script>
|
|
1135
|
+
<script src="../../../../sorter.js"></script>
|
|
1136
|
+
<script src="../../../../block-navigation.js"></script>
|
|
1137
|
+
</body>
|
|
1138
|
+
</html>
|