@typeberry/lib 0.2.0-5746fdc → 0.2.0-663eeb1
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/index.cjs +659 -453
- package/index.d.ts +1342 -1120
- package/index.js +631 -426
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,51 +1,46 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
|
-
import fs
|
|
2
|
+
import fs from 'node:fs';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
4
|
|
|
6
5
|
var GpVersion;
|
|
7
6
|
(function (GpVersion) {
|
|
8
7
|
GpVersion["V0_6_7"] = "0.6.7";
|
|
9
8
|
GpVersion["V0_7_0"] = "0.7.0";
|
|
10
9
|
GpVersion["V0_7_1"] = "0.7.1";
|
|
11
|
-
GpVersion["V0_7_2"] = "0.7.2
|
|
10
|
+
GpVersion["V0_7_2"] = "0.7.2";
|
|
12
11
|
})(GpVersion || (GpVersion = {}));
|
|
13
12
|
var TestSuite;
|
|
14
13
|
(function (TestSuite) {
|
|
15
14
|
TestSuite["W3F_DAVXY"] = "w3f-davxy";
|
|
16
15
|
TestSuite["JAMDUNA"] = "jamduna";
|
|
17
16
|
})(TestSuite || (TestSuite = {}));
|
|
17
|
+
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
18
18
|
const DEFAULT_SUITE = TestSuite.W3F_DAVXY;
|
|
19
|
-
const DEFAULT_VERSION = GpVersion.
|
|
19
|
+
const DEFAULT_VERSION = GpVersion.V0_7_2;
|
|
20
20
|
const env$1 = typeof process === "undefined" ? {} : process.env;
|
|
21
21
|
let CURRENT_VERSION = parseCurrentVersion(env$1.GP_VERSION) ?? DEFAULT_VERSION;
|
|
22
22
|
let CURRENT_SUITE = parseCurrentSuite(env$1.TEST_SUITE) ?? DEFAULT_SUITE;
|
|
23
|
-
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
24
23
|
function parseCurrentVersion(env) {
|
|
25
24
|
if (env === undefined) {
|
|
26
25
|
return undefined;
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
case GpVersion.V0_7_2:
|
|
33
|
-
return env;
|
|
34
|
-
default:
|
|
35
|
-
throw new Error(`Configured environment variable GP_VERSION is unknown: '${env}'. Use one of: ${ALL_VERSIONS_IN_ORDER}`);
|
|
27
|
+
for (const v of Object.values(GpVersion)) {
|
|
28
|
+
if (env === v) {
|
|
29
|
+
return v;
|
|
30
|
+
}
|
|
36
31
|
}
|
|
32
|
+
throw new Error(`Configured environment variable GP_VERSION is unknown: '${env}'. Use one of: ${ALL_VERSIONS_IN_ORDER}`);
|
|
37
33
|
}
|
|
38
34
|
function parseCurrentSuite(env) {
|
|
39
35
|
if (env === undefined) {
|
|
40
36
|
return undefined;
|
|
41
37
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
default:
|
|
47
|
-
throw new Error(`Configured environment variable TEST_SUITE is unknown: '${env}'. Use one of: ${Object.values(TestSuite)}`);
|
|
38
|
+
for (const s of Object.values(TestSuite)) {
|
|
39
|
+
if (env === s) {
|
|
40
|
+
return s;
|
|
41
|
+
}
|
|
48
42
|
}
|
|
43
|
+
throw new Error(`Configured environment variable TEST_SUITE is unknown: '${env}'. Use one of: ${Object.values(TestSuite)}`);
|
|
49
44
|
}
|
|
50
45
|
class Compatibility {
|
|
51
46
|
static override(version) {
|
|
@@ -205,6 +200,13 @@ class WithDebug {
|
|
|
205
200
|
return inspect(this);
|
|
206
201
|
}
|
|
207
202
|
}
|
|
203
|
+
function lazyInspect(obj) {
|
|
204
|
+
return {
|
|
205
|
+
toString() {
|
|
206
|
+
return inspect(obj);
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
208
210
|
|
|
209
211
|
const env = typeof process === "undefined" ? {} : process.env;
|
|
210
212
|
/**
|
|
@@ -577,7 +579,7 @@ function isResult(x) {
|
|
|
577
579
|
* as an afterthought.
|
|
578
580
|
*/
|
|
579
581
|
|
|
580
|
-
var index$
|
|
582
|
+
var index$v = /*#__PURE__*/Object.freeze({
|
|
581
583
|
__proto__: null,
|
|
582
584
|
get CURRENT_SUITE () { return CURRENT_SUITE; },
|
|
583
585
|
get CURRENT_VERSION () { return CURRENT_VERSION; },
|
|
@@ -599,6 +601,7 @@ var index$u = /*#__PURE__*/Object.freeze({
|
|
|
599
601
|
deepEqual: deepEqual,
|
|
600
602
|
inspect: inspect,
|
|
601
603
|
isBrowser: isBrowser,
|
|
604
|
+
lazyInspect: lazyInspect,
|
|
602
605
|
measure: measure,
|
|
603
606
|
resultToString: resultToString,
|
|
604
607
|
safeAllocUint8Array: safeAllocUint8Array,
|
|
@@ -733,7 +736,7 @@ class Ordering {
|
|
|
733
736
|
}
|
|
734
737
|
}
|
|
735
738
|
|
|
736
|
-
var index$
|
|
739
|
+
var index$u = /*#__PURE__*/Object.freeze({
|
|
737
740
|
__proto__: null,
|
|
738
741
|
Ordering: Ordering
|
|
739
742
|
});
|
|
@@ -763,12 +766,13 @@ class BytesBlob {
|
|
|
763
766
|
}
|
|
764
767
|
/** Display a hex-encoded version of this byte blob, but truncated if it's large. */
|
|
765
768
|
toStringTruncated() {
|
|
769
|
+
const bytes = `${this.raw.length} ${this.raw.length === 1 ? "byte" : "bytes"}`;
|
|
766
770
|
if (this.raw.length > 32) {
|
|
767
771
|
const start = bytesToHexString(this.raw.subarray(0, 16));
|
|
768
772
|
const end = bytesToHexString(this.raw.subarray(this.raw.length - 16));
|
|
769
|
-
return `${start}...${end.substring(2)} (${
|
|
773
|
+
return `${start}...${end.substring(2)} (${bytes})`;
|
|
770
774
|
}
|
|
771
|
-
return this.toString()
|
|
775
|
+
return `${this.toString()} (${bytes})`;
|
|
772
776
|
}
|
|
773
777
|
toJSON() {
|
|
774
778
|
return this.toString();
|
|
@@ -984,7 +988,7 @@ function u8ArraySameLengthEqual(self, other) {
|
|
|
984
988
|
}
|
|
985
989
|
const bytesBlobComparator = (a, b) => a.compare(b);
|
|
986
990
|
|
|
987
|
-
var index$
|
|
991
|
+
var index$t = /*#__PURE__*/Object.freeze({
|
|
988
992
|
__proto__: null,
|
|
989
993
|
BitVec: BitVec,
|
|
990
994
|
Bytes: Bytes,
|
|
@@ -1086,7 +1090,7 @@ const minU64 = (a, ...values) => values.reduce((min, value) => (value > min ? mi
|
|
|
1086
1090
|
/** Get the biggest value between U64 a and values given as input parameters. */
|
|
1087
1091
|
const maxU64 = (a, ...values) => values.reduce((max, value) => (value < max ? max : value), a);
|
|
1088
1092
|
|
|
1089
|
-
var index$
|
|
1093
|
+
var index$s = /*#__PURE__*/Object.freeze({
|
|
1090
1094
|
__proto__: null,
|
|
1091
1095
|
isU16: isU16,
|
|
1092
1096
|
isU32: isU32,
|
|
@@ -2525,7 +2529,7 @@ function sequenceViewFixLen(type, { fixedLength }) {
|
|
|
2525
2529
|
}, skipper);
|
|
2526
2530
|
}
|
|
2527
2531
|
|
|
2528
|
-
var index$
|
|
2532
|
+
var index$r = /*#__PURE__*/Object.freeze({
|
|
2529
2533
|
__proto__: null,
|
|
2530
2534
|
Decoder: Decoder,
|
|
2531
2535
|
Descriptor: Descriptor,
|
|
@@ -3726,7 +3730,7 @@ var keyDerivation = /*#__PURE__*/Object.freeze({
|
|
|
3726
3730
|
trivialSeed: trivialSeed
|
|
3727
3731
|
});
|
|
3728
3732
|
|
|
3729
|
-
var index$
|
|
3733
|
+
var index$q = /*#__PURE__*/Object.freeze({
|
|
3730
3734
|
__proto__: null,
|
|
3731
3735
|
BANDERSNATCH_KEY_BYTES: BANDERSNATCH_KEY_BYTES,
|
|
3732
3736
|
BANDERSNATCH_PROOF_BYTES: BANDERSNATCH_PROOF_BYTES,
|
|
@@ -4364,7 +4368,7 @@ var keccak = /*#__PURE__*/Object.freeze({
|
|
|
4364
4368
|
// TODO [ToDr] (#213) this should most likely be moved to a separate
|
|
4365
4369
|
// package to avoid pulling in unnecessary deps.
|
|
4366
4370
|
|
|
4367
|
-
var index$
|
|
4371
|
+
var index$p = /*#__PURE__*/Object.freeze({
|
|
4368
4372
|
__proto__: null,
|
|
4369
4373
|
Blake2b: Blake2b,
|
|
4370
4374
|
HASH_SIZE: HASH_SIZE,
|
|
@@ -5001,7 +5005,7 @@ class TruncatedHashDictionary {
|
|
|
5001
5005
|
}
|
|
5002
5006
|
}
|
|
5003
5007
|
|
|
5004
|
-
var index$
|
|
5008
|
+
var index$o = /*#__PURE__*/Object.freeze({
|
|
5005
5009
|
__proto__: null,
|
|
5006
5010
|
ArrayView: ArrayView,
|
|
5007
5011
|
FixedSizeArray: FixedSizeArray,
|
|
@@ -5050,6 +5054,8 @@ const EC_SEGMENT_SIZE = 4104;
|
|
|
5050
5054
|
* Additional data that has to be passed to the codec to correctly parse incoming bytes.
|
|
5051
5055
|
*/
|
|
5052
5056
|
class ChainSpec extends WithDebug {
|
|
5057
|
+
/** Human-readable name of the chain spec. */
|
|
5058
|
+
name;
|
|
5053
5059
|
/** Number of validators. */
|
|
5054
5060
|
validatorsCount;
|
|
5055
5061
|
/** 1/3 of number of validators */
|
|
@@ -5092,6 +5098,7 @@ class ChainSpec extends WithDebug {
|
|
|
5092
5098
|
maxLookupAnchorAge;
|
|
5093
5099
|
constructor(data) {
|
|
5094
5100
|
super();
|
|
5101
|
+
this.name = data.name;
|
|
5095
5102
|
this.validatorsCount = data.validatorsCount;
|
|
5096
5103
|
this.thirdOfValidators = tryAsU16(Math.floor(data.validatorsCount / 3));
|
|
5097
5104
|
this.validatorsSuperMajority = tryAsU16(Math.floor(data.validatorsCount / 3) * 2 + 1);
|
|
@@ -5112,6 +5119,7 @@ class ChainSpec extends WithDebug {
|
|
|
5112
5119
|
}
|
|
5113
5120
|
/** Set of values for "tiny" chain as defined in JAM test vectors. */
|
|
5114
5121
|
const tinyChainSpec = new ChainSpec({
|
|
5122
|
+
name: "tiny",
|
|
5115
5123
|
validatorsCount: tryAsU16(6),
|
|
5116
5124
|
coresCount: tryAsU16(2),
|
|
5117
5125
|
epochLength: tryAsU32(12),
|
|
@@ -5133,6 +5141,7 @@ const tinyChainSpec = new ChainSpec({
|
|
|
5133
5141
|
* Please note that only validatorsCount and epochLength are "full", the rest is copied from "tiny".
|
|
5134
5142
|
*/
|
|
5135
5143
|
const fullChainSpec = new ChainSpec({
|
|
5144
|
+
name: "full",
|
|
5136
5145
|
validatorsCount: tryAsU16(1023),
|
|
5137
5146
|
coresCount: tryAsU16(341),
|
|
5138
5147
|
epochLength: tryAsU32(600),
|
|
@@ -5183,7 +5192,7 @@ var PvmBackend;
|
|
|
5183
5192
|
PvmBackend[PvmBackend["Ananas"] = 1] = "Ananas";
|
|
5184
5193
|
})(PvmBackend || (PvmBackend = {}));
|
|
5185
5194
|
|
|
5186
|
-
var index$
|
|
5195
|
+
var index$n = /*#__PURE__*/Object.freeze({
|
|
5187
5196
|
__proto__: null,
|
|
5188
5197
|
Bootnode: Bootnode,
|
|
5189
5198
|
ChainSpec: ChainSpec,
|
|
@@ -6690,7 +6699,7 @@ function reencodeAsView(codec, object, chainSpec) {
|
|
|
6690
6699
|
return Decoder.decodeObject(codec.View, encoded, chainSpec);
|
|
6691
6700
|
}
|
|
6692
6701
|
|
|
6693
|
-
var index$
|
|
6702
|
+
var index$m = /*#__PURE__*/Object.freeze({
|
|
6694
6703
|
__proto__: null,
|
|
6695
6704
|
Block: Block,
|
|
6696
6705
|
EpochMarker: EpochMarker,
|
|
@@ -6947,7 +6956,7 @@ var json;
|
|
|
6947
6956
|
json.object = object;
|
|
6948
6957
|
})(json || (json = {}));
|
|
6949
6958
|
|
|
6950
|
-
var index$
|
|
6959
|
+
var index$l = /*#__PURE__*/Object.freeze({
|
|
6951
6960
|
__proto__: null,
|
|
6952
6961
|
get json () { return json; },
|
|
6953
6962
|
parseFromJson: parseFromJson
|
|
@@ -7217,7 +7226,7 @@ const blockFromJson = (spec) => json.object({
|
|
|
7217
7226
|
extrinsic: getExtrinsicFromJson(spec),
|
|
7218
7227
|
}, ({ header, extrinsic }) => Block.create({ header, extrinsic }));
|
|
7219
7228
|
|
|
7220
|
-
var index$
|
|
7229
|
+
var index$k = /*#__PURE__*/Object.freeze({
|
|
7221
7230
|
__proto__: null,
|
|
7222
7231
|
blockFromJson: blockFromJson,
|
|
7223
7232
|
disputesExtrinsicFromJson: disputesExtrinsicFromJson,
|
|
@@ -7711,7 +7720,7 @@ class Logger {
|
|
|
7711
7720
|
}
|
|
7712
7721
|
}
|
|
7713
7722
|
|
|
7714
|
-
var index$
|
|
7723
|
+
var index$j = /*#__PURE__*/Object.freeze({
|
|
7715
7724
|
__proto__: null,
|
|
7716
7725
|
get Level () { return Level; },
|
|
7717
7726
|
Logger: Logger,
|
|
@@ -7741,8 +7750,8 @@ const DEV_CONFIG = "dev";
|
|
|
7741
7750
|
const DEFAULT_CONFIG = "default";
|
|
7742
7751
|
const NODE_DEFAULTS = {
|
|
7743
7752
|
name: isBrowser() ? "browser" : os.hostname(),
|
|
7744
|
-
config: DEFAULT_CONFIG,
|
|
7745
|
-
pvm: PvmBackend.
|
|
7753
|
+
config: [DEFAULT_CONFIG],
|
|
7754
|
+
pvm: PvmBackend.Ananas,
|
|
7746
7755
|
};
|
|
7747
7756
|
/** Chain spec chooser. */
|
|
7748
7757
|
var KnownChainSpec;
|
|
@@ -7794,27 +7803,139 @@ class NodeConfiguration {
|
|
|
7794
7803
|
this.authorship = authorship;
|
|
7795
7804
|
}
|
|
7796
7805
|
}
|
|
7797
|
-
function loadConfig(
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7806
|
+
function loadConfig(config, withRelPath) {
|
|
7807
|
+
logger$5.log `🔧 Loading config`;
|
|
7808
|
+
let mergedJson = {};
|
|
7809
|
+
for (const entry of config) {
|
|
7810
|
+
logger$5.log `🔧 Applying '${entry}'`;
|
|
7811
|
+
if (entry === DEV_CONFIG) {
|
|
7812
|
+
mergedJson = structuredClone(configs.dev); // clone to avoid mutating the original config. not doing a merge since dev and default should theoretically replace all properties.
|
|
7813
|
+
continue;
|
|
7814
|
+
}
|
|
7815
|
+
if (entry === DEFAULT_CONFIG) {
|
|
7816
|
+
mergedJson = structuredClone(configs.default);
|
|
7817
|
+
continue;
|
|
7818
|
+
}
|
|
7819
|
+
// try to parse as JSON
|
|
7820
|
+
try {
|
|
7821
|
+
const parsed = JSON.parse(entry);
|
|
7822
|
+
deepMerge(mergedJson, parsed);
|
|
7823
|
+
continue;
|
|
7824
|
+
}
|
|
7825
|
+
catch { }
|
|
7826
|
+
// if not, try to load as file
|
|
7827
|
+
if (entry.indexOf("=") === -1 && entry.endsWith(".json")) {
|
|
7828
|
+
try {
|
|
7829
|
+
const configFile = fs.readFileSync(withRelPath(entry), "utf8");
|
|
7830
|
+
const parsed = JSON.parse(configFile);
|
|
7831
|
+
deepMerge(mergedJson, parsed);
|
|
7832
|
+
}
|
|
7833
|
+
catch (e) {
|
|
7834
|
+
throw new Error(`Unable to load config from ${entry}: ${e}`);
|
|
7835
|
+
}
|
|
7836
|
+
}
|
|
7837
|
+
else {
|
|
7838
|
+
// finally try to process as a pseudo-jq query
|
|
7839
|
+
try {
|
|
7840
|
+
processQuery(mergedJson, entry, withRelPath);
|
|
7841
|
+
}
|
|
7842
|
+
catch (e) {
|
|
7843
|
+
throw new Error(`Error while processing '${entry}': ${e}`);
|
|
7844
|
+
}
|
|
7845
|
+
}
|
|
7805
7846
|
}
|
|
7806
7847
|
try {
|
|
7807
|
-
|
|
7808
|
-
|
|
7809
|
-
|
|
7810
|
-
return parseFromJson(parsed, NodeConfiguration.fromJson);
|
|
7848
|
+
const parsed = parseFromJson(mergedJson, NodeConfiguration.fromJson);
|
|
7849
|
+
logger$5.log `🔧 Config ready`;
|
|
7850
|
+
return parsed;
|
|
7811
7851
|
}
|
|
7812
7852
|
catch (e) {
|
|
7813
|
-
throw new Error(`Unable to
|
|
7853
|
+
throw new Error(`Unable to parse config: ${e}`);
|
|
7854
|
+
}
|
|
7855
|
+
}
|
|
7856
|
+
function deepMerge(target, source) {
|
|
7857
|
+
if (!isJsonObject(source)) {
|
|
7858
|
+
throw new Error(`Expected object, got ${source}`);
|
|
7859
|
+
}
|
|
7860
|
+
for (const key in source) {
|
|
7861
|
+
if (isJsonObject(source[key])) {
|
|
7862
|
+
if (!isJsonObject(target[key])) {
|
|
7863
|
+
target[key] = {};
|
|
7864
|
+
}
|
|
7865
|
+
deepMerge(target[key], source[key]);
|
|
7866
|
+
}
|
|
7867
|
+
else {
|
|
7868
|
+
target[key] = source[key];
|
|
7869
|
+
}
|
|
7814
7870
|
}
|
|
7815
7871
|
}
|
|
7872
|
+
/**
|
|
7873
|
+
* Caution: updates input directly.
|
|
7874
|
+
* Processes a pseudo-jq query. Syntax:
|
|
7875
|
+
* .path.to.value = { ... } - updates value with the specified object by replacement
|
|
7876
|
+
* .path.to.value += { ... } - updates value with the specified object by merging
|
|
7877
|
+
* .path.to.value = file.json - updates value with the contents of file.json
|
|
7878
|
+
* .path.to.value += file.json - merges the contents of file.json onto value
|
|
7879
|
+
*/
|
|
7880
|
+
function processQuery(input, query, withRelPath) {
|
|
7881
|
+
const queryParts = query.split("=");
|
|
7882
|
+
if (queryParts.length === 2) {
|
|
7883
|
+
let [path, value] = queryParts.map((part) => part.trim());
|
|
7884
|
+
let merge = false;
|
|
7885
|
+
// detect += syntax
|
|
7886
|
+
if (path.endsWith("+")) {
|
|
7887
|
+
merge = true;
|
|
7888
|
+
path = path.slice(0, -1);
|
|
7889
|
+
}
|
|
7890
|
+
let parsedValue;
|
|
7891
|
+
if (value.endsWith(".json")) {
|
|
7892
|
+
try {
|
|
7893
|
+
const configFile = fs.readFileSync(withRelPath(value), "utf8");
|
|
7894
|
+
const parsed = JSON.parse(configFile);
|
|
7895
|
+
parsedValue = parsed;
|
|
7896
|
+
}
|
|
7897
|
+
catch (e) {
|
|
7898
|
+
throw new Error(`Unable to load config from ${value}: ${e}`);
|
|
7899
|
+
}
|
|
7900
|
+
}
|
|
7901
|
+
else {
|
|
7902
|
+
try {
|
|
7903
|
+
parsedValue = JSON.parse(value);
|
|
7904
|
+
}
|
|
7905
|
+
catch (e) {
|
|
7906
|
+
throw new Error(`Unrecognized syntax '${value}': ${e}`);
|
|
7907
|
+
}
|
|
7908
|
+
}
|
|
7909
|
+
let pathParts = path.split(".");
|
|
7910
|
+
// allow leading dot in path
|
|
7911
|
+
if (pathParts[0] === "") {
|
|
7912
|
+
pathParts = pathParts.slice(1);
|
|
7913
|
+
}
|
|
7914
|
+
let target = input;
|
|
7915
|
+
for (let i = 0; i < pathParts.length; i++) {
|
|
7916
|
+
const part = pathParts[i];
|
|
7917
|
+
if (!isJsonObject(target[part])) {
|
|
7918
|
+
target[part] = {};
|
|
7919
|
+
}
|
|
7920
|
+
if (i === pathParts.length - 1) {
|
|
7921
|
+
if (merge) {
|
|
7922
|
+
deepMerge(target[part], parsedValue);
|
|
7923
|
+
}
|
|
7924
|
+
else {
|
|
7925
|
+
target[part] = parsedValue;
|
|
7926
|
+
}
|
|
7927
|
+
return;
|
|
7928
|
+
}
|
|
7929
|
+
target = target[part];
|
|
7930
|
+
}
|
|
7931
|
+
}
|
|
7932
|
+
throw new Error("Unrecognized syntax.");
|
|
7933
|
+
}
|
|
7934
|
+
function isJsonObject(value) {
|
|
7935
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7936
|
+
}
|
|
7816
7937
|
|
|
7817
|
-
var index$
|
|
7938
|
+
var index$i = /*#__PURE__*/Object.freeze({
|
|
7818
7939
|
__proto__: null,
|
|
7819
7940
|
DEFAULT_CONFIG: DEFAULT_CONFIG,
|
|
7820
7941
|
DEV_CONFIG: DEV_CONFIG,
|
|
@@ -8058,7 +8179,7 @@ function accumulationOutputComparator(a, b) {
|
|
|
8058
8179
|
if (result > 0) {
|
|
8059
8180
|
return Ordering.Greater;
|
|
8060
8181
|
}
|
|
8061
|
-
return
|
|
8182
|
+
return a.output.compare(b.output);
|
|
8062
8183
|
}
|
|
8063
8184
|
|
|
8064
8185
|
/** `O`: Maximum number of items in the authorizations pool. */
|
|
@@ -8955,26 +9076,6 @@ class InMemoryStateView {
|
|
|
8955
9076
|
}
|
|
8956
9077
|
}
|
|
8957
9078
|
|
|
8958
|
-
/** Dictionary entry of services that auto-accumulate every block. */
|
|
8959
|
-
class AutoAccumulate {
|
|
8960
|
-
service;
|
|
8961
|
-
gasLimit;
|
|
8962
|
-
static Codec = codec$1.Class(AutoAccumulate, {
|
|
8963
|
-
service: codec$1.u32.asOpaque(),
|
|
8964
|
-
gasLimit: codec$1.u64.asOpaque(),
|
|
8965
|
-
});
|
|
8966
|
-
static create({ service, gasLimit }) {
|
|
8967
|
-
return new AutoAccumulate(service, gasLimit);
|
|
8968
|
-
}
|
|
8969
|
-
constructor(
|
|
8970
|
-
/** Service id that auto-accumulates. */
|
|
8971
|
-
service,
|
|
8972
|
-
/** Gas limit for auto-accumulation. */
|
|
8973
|
-
gasLimit) {
|
|
8974
|
-
this.service = service;
|
|
8975
|
-
this.gasLimit = gasLimit;
|
|
8976
|
-
}
|
|
8977
|
-
}
|
|
8978
9079
|
/**
|
|
8979
9080
|
* https://graypaper.fluffylabs.dev/#/ab2cdbd/114402114402?v=0.7.2
|
|
8980
9081
|
*/
|
|
@@ -8992,7 +9093,9 @@ class PrivilegedServices {
|
|
|
8992
9093
|
registrar: Compatibility.isGreaterOrEqual(GpVersion.V0_7_1)
|
|
8993
9094
|
? codec$1.u32.asOpaque()
|
|
8994
9095
|
: ignoreValueWithDefault(tryAsServiceId(2 ** 32 - 1)),
|
|
8995
|
-
autoAccumulateServices:
|
|
9096
|
+
autoAccumulateServices: codec$1.dictionary(codec$1.u32.asOpaque(), codec$1.u64.asOpaque(), {
|
|
9097
|
+
sortKeys: (a, b) => a - b,
|
|
9098
|
+
}),
|
|
8996
9099
|
});
|
|
8997
9100
|
static create(a) {
|
|
8998
9101
|
return new PrivilegedServices(a.manager, a.delegator, a.registrar, a.assigners, a.autoAccumulateServices);
|
|
@@ -9227,6 +9330,15 @@ class InMemoryService extends WithDebug {
|
|
|
9227
9330
|
}),
|
|
9228
9331
|
};
|
|
9229
9332
|
}
|
|
9333
|
+
/** Return identical `InMemoryService` which does not share any references. */
|
|
9334
|
+
clone() {
|
|
9335
|
+
return new InMemoryService(this.serviceId, {
|
|
9336
|
+
info: ServiceAccountInfo.create(this.data.info),
|
|
9337
|
+
preimages: HashDictionary.fromEntries(Array.from(this.data.preimages.entries())),
|
|
9338
|
+
lookupHistory: HashDictionary.fromEntries(Array.from(this.data.lookupHistory.entries()).map(([k, v]) => [k, v.slice()])),
|
|
9339
|
+
storage: new Map(this.data.storage.entries()),
|
|
9340
|
+
});
|
|
9341
|
+
}
|
|
9230
9342
|
/**
|
|
9231
9343
|
* Create a new in-memory service from another state service
|
|
9232
9344
|
* by copying all given entries.
|
|
@@ -9597,7 +9709,7 @@ class InMemoryState extends WithDebug {
|
|
|
9597
9709
|
assigners: tryAsPerCore(new Array(spec.coresCount).fill(tryAsServiceId(0)), spec),
|
|
9598
9710
|
delegator: tryAsServiceId(0),
|
|
9599
9711
|
registrar: tryAsServiceId(MAX_VALUE),
|
|
9600
|
-
autoAccumulateServices:
|
|
9712
|
+
autoAccumulateServices: new Map(),
|
|
9601
9713
|
}),
|
|
9602
9714
|
accumulationOutputLog: SortedArray.fromArray(accumulationOutputComparator, []),
|
|
9603
9715
|
services: new Map(),
|
|
@@ -9616,11 +9728,10 @@ const serviceDataCodec = codec$1.dictionary(codec$1.u32.asOpaque(), serviceEntri
|
|
|
9616
9728
|
sortKeys: (a, b) => a - b,
|
|
9617
9729
|
});
|
|
9618
9730
|
|
|
9619
|
-
var index$
|
|
9731
|
+
var index$h = /*#__PURE__*/Object.freeze({
|
|
9620
9732
|
__proto__: null,
|
|
9621
9733
|
AUTHORIZATION_QUEUE_SIZE: AUTHORIZATION_QUEUE_SIZE,
|
|
9622
9734
|
AccumulationOutput: AccumulationOutput,
|
|
9623
|
-
AutoAccumulate: AutoAccumulate,
|
|
9624
9735
|
AvailabilityAssignment: AvailabilityAssignment,
|
|
9625
9736
|
BASE_SERVICE_BALANCE: BASE_SERVICE_BALANCE,
|
|
9626
9737
|
BlockState: BlockState,
|
|
@@ -10691,7 +10802,7 @@ const bitLookup = [
|
|
|
10691
10802
|
[0b00000000, 8],
|
|
10692
10803
|
];
|
|
10693
10804
|
|
|
10694
|
-
var index$
|
|
10805
|
+
var index$g = /*#__PURE__*/Object.freeze({
|
|
10695
10806
|
__proto__: null,
|
|
10696
10807
|
BranchNode: BranchNode,
|
|
10697
10808
|
InMemoryTrie: InMemoryTrie,
|
|
@@ -10741,7 +10852,6 @@ function* serializeRemovedServices(servicesRemoved) {
|
|
|
10741
10852
|
return;
|
|
10742
10853
|
}
|
|
10743
10854
|
for (const serviceId of servicesRemoved) {
|
|
10744
|
-
// TODO [ToDr] what about all data associated with a service?
|
|
10745
10855
|
const codec = serialize.serviceData(serviceId);
|
|
10746
10856
|
yield [StateEntryUpdateAction.Remove, codec.key, EMPTY_BLOB];
|
|
10747
10857
|
}
|
|
@@ -11059,7 +11169,7 @@ function loadState(spec, blake2b, entries) {
|
|
|
11059
11169
|
* hashmap of `key -> value` entries.
|
|
11060
11170
|
*/
|
|
11061
11171
|
|
|
11062
|
-
var index$
|
|
11172
|
+
var index$f = /*#__PURE__*/Object.freeze({
|
|
11063
11173
|
__proto__: null,
|
|
11064
11174
|
SerializedService: SerializedService,
|
|
11065
11175
|
SerializedState: SerializedState,
|
|
@@ -11304,7 +11414,7 @@ class InMemoryStates {
|
|
|
11304
11414
|
async close() { }
|
|
11305
11415
|
}
|
|
11306
11416
|
|
|
11307
|
-
var index$
|
|
11417
|
+
var index$e = /*#__PURE__*/Object.freeze({
|
|
11308
11418
|
__proto__: null,
|
|
11309
11419
|
InMemoryBlocks: InMemoryBlocks,
|
|
11310
11420
|
InMemorySerializedStates: InMemorySerializedStates,
|
|
@@ -11668,7 +11778,7 @@ const initEc = async () => {
|
|
|
11668
11778
|
await init.reedSolomon();
|
|
11669
11779
|
};
|
|
11670
11780
|
|
|
11671
|
-
var index$
|
|
11781
|
+
var index$d = /*#__PURE__*/Object.freeze({
|
|
11672
11782
|
__proto__: null,
|
|
11673
11783
|
N_CHUNKS_REDUNDANCY: N_CHUNKS_REDUNDANCY,
|
|
11674
11784
|
N_CHUNKS_REQUIRED: N_CHUNKS_REQUIRED,
|
|
@@ -12102,7 +12212,7 @@ class FuzzTarget {
|
|
|
12102
12212
|
}
|
|
12103
12213
|
}
|
|
12104
12214
|
|
|
12105
|
-
var index$
|
|
12215
|
+
var index$c = /*#__PURE__*/Object.freeze({
|
|
12106
12216
|
__proto__: null,
|
|
12107
12217
|
AncestryItem: AncestryItem,
|
|
12108
12218
|
ErrorMessage: ErrorMessage,
|
|
@@ -12120,9 +12230,9 @@ var index$b = /*#__PURE__*/Object.freeze({
|
|
|
12120
12230
|
stateRootCodec: stateRootCodec
|
|
12121
12231
|
});
|
|
12122
12232
|
|
|
12123
|
-
var index$
|
|
12233
|
+
var index$b = /*#__PURE__*/Object.freeze({
|
|
12124
12234
|
__proto__: null,
|
|
12125
|
-
v1: index$
|
|
12235
|
+
v1: index$c
|
|
12126
12236
|
});
|
|
12127
12237
|
|
|
12128
12238
|
/** Size of the transfer memo. */
|
|
@@ -12193,13 +12303,6 @@ var ForgetPreimageError;
|
|
|
12193
12303
|
})(ForgetPreimageError || (ForgetPreimageError = {}));
|
|
12194
12304
|
/**
|
|
12195
12305
|
* Errors that may occur when the transfer is invoked.
|
|
12196
|
-
*
|
|
12197
|
-
* TODO [ToDr] Since I don't fully understand yet which of these
|
|
12198
|
-
* could be checked directly in the host call (i.e. if we will
|
|
12199
|
-
* have access to the service account state there) for now I keep
|
|
12200
|
-
* them safely in the `AccumulationPartialState` implementation.
|
|
12201
|
-
* However, if possible, these should be moved directly to the
|
|
12202
|
-
* host call implementation.
|
|
12203
12306
|
*/
|
|
12204
12307
|
var TransferError;
|
|
12205
12308
|
(function (TransferError) {
|
|
@@ -12409,7 +12512,7 @@ function deepCloneMapWithArray(map) {
|
|
|
12409
12512
|
class AccumulationStateUpdate {
|
|
12410
12513
|
services;
|
|
12411
12514
|
transfers;
|
|
12412
|
-
|
|
12515
|
+
yieldedRoot;
|
|
12413
12516
|
/** Updated authorization queues for cores. */
|
|
12414
12517
|
authorizationQueues = new Map();
|
|
12415
12518
|
/** New validators data. */
|
|
@@ -12422,10 +12525,10 @@ class AccumulationStateUpdate {
|
|
|
12422
12525
|
/** Pending transfers. */
|
|
12423
12526
|
transfers,
|
|
12424
12527
|
/** Yielded accumulation root. */
|
|
12425
|
-
|
|
12528
|
+
yieldedRoot = null) {
|
|
12426
12529
|
this.services = services;
|
|
12427
12530
|
this.transfers = transfers;
|
|
12428
|
-
this.
|
|
12531
|
+
this.yieldedRoot = yieldedRoot;
|
|
12429
12532
|
}
|
|
12430
12533
|
/** Create new empty state update. */
|
|
12431
12534
|
static empty() {
|
|
@@ -12455,7 +12558,7 @@ class AccumulationStateUpdate {
|
|
|
12455
12558
|
storage: deepCloneMapWithArray(from.services.storage),
|
|
12456
12559
|
};
|
|
12457
12560
|
const transfers = [...from.transfers];
|
|
12458
|
-
const update = new AccumulationStateUpdate(serviceUpdates, transfers,
|
|
12561
|
+
const update = new AccumulationStateUpdate(serviceUpdates, transfers, from.yieldedRoot);
|
|
12459
12562
|
// update entries
|
|
12460
12563
|
for (const [k, v] of from.authorizationQueues) {
|
|
12461
12564
|
update.authorizationQueues.set(k, v);
|
|
@@ -12477,6 +12580,12 @@ class AccumulationStateUpdate {
|
|
|
12477
12580
|
this.transfers = [];
|
|
12478
12581
|
return transfers;
|
|
12479
12582
|
}
|
|
12583
|
+
/** Retrieve and clear yielded root. */
|
|
12584
|
+
takeYieldedRoot() {
|
|
12585
|
+
const yieldedRoot = this.yieldedRoot;
|
|
12586
|
+
this.yieldedRoot = null;
|
|
12587
|
+
return yieldedRoot;
|
|
12588
|
+
}
|
|
12480
12589
|
}
|
|
12481
12590
|
class PartiallyUpdatedState {
|
|
12482
12591
|
state;
|
|
@@ -12554,6 +12663,16 @@ class PartiallyUpdatedState {
|
|
|
12554
12663
|
}
|
|
12555
12664
|
/** Get status of a preimage of current service taking into account any updates. */
|
|
12556
12665
|
getLookupHistory(currentTimeslot, serviceId, hash, length) {
|
|
12666
|
+
const updatedService = this.stateUpdate.services.updated.get(serviceId);
|
|
12667
|
+
/** Return lookup history item for newly created service */
|
|
12668
|
+
if (updatedService !== undefined && updatedService.action.kind === UpdateServiceKind.Create) {
|
|
12669
|
+
const lookupHistoryItem = updatedService.action.lookupHistory;
|
|
12670
|
+
if (lookupHistoryItem !== null &&
|
|
12671
|
+
hash.isEqualTo(lookupHistoryItem.hash) &&
|
|
12672
|
+
length === BigInt(lookupHistoryItem.length)) {
|
|
12673
|
+
return lookupHistoryItem;
|
|
12674
|
+
}
|
|
12675
|
+
}
|
|
12557
12676
|
const preimages = this.stateUpdate.services.preimages.get(serviceId) ?? [];
|
|
12558
12677
|
// TODO [ToDr] This is most likely wrong. We may have `provide` and `remove` within
|
|
12559
12678
|
// the same state update. We should however switch to proper "updated state"
|
|
@@ -12669,304 +12788,87 @@ function preimageLenAsU32(length) {
|
|
|
12669
12788
|
return length >= 2n ** 32n ? null : tryAsU32(Number(length));
|
|
12670
12789
|
}
|
|
12671
12790
|
|
|
12672
|
-
|
|
12673
|
-
|
|
12674
|
-
|
|
12675
|
-
|
|
12676
|
-
*/
|
|
12677
|
-
const HostCallResult = {
|
|
12678
|
-
/** The return value indicating an item does not exist. */
|
|
12679
|
-
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
12680
|
-
/** Name unknown. */
|
|
12681
|
-
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
12682
|
-
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
12683
|
-
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
12684
|
-
/** Index unknown. */
|
|
12685
|
-
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
12686
|
-
/** Storage full or resource already allocated. */
|
|
12687
|
-
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
12688
|
-
/** Core index unknown. */
|
|
12689
|
-
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
12690
|
-
/** Insufficient funds. */
|
|
12691
|
-
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
12692
|
-
/** Gas limit too low. */
|
|
12693
|
-
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
12694
|
-
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
12695
|
-
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
12696
|
-
/** The return value indicating general success. */
|
|
12697
|
-
OK: tryAsU64(0n),
|
|
12791
|
+
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12792
|
+
const tryAsRegisterIndex = (index) => {
|
|
12793
|
+
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12794
|
+
return asOpaqueType(index);
|
|
12698
12795
|
};
|
|
12699
|
-
|
|
12700
|
-
|
|
12701
|
-
|
|
12702
|
-
|
|
12703
|
-
|
|
12704
|
-
|
|
12705
|
-
|
|
12706
|
-
|
|
12707
|
-
|
|
12796
|
+
class Registers {
|
|
12797
|
+
bytes;
|
|
12798
|
+
asSigned;
|
|
12799
|
+
asUnsigned;
|
|
12800
|
+
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12801
|
+
this.bytes = bytes;
|
|
12802
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12803
|
+
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12804
|
+
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12708
12805
|
}
|
|
12709
|
-
|
|
12710
|
-
|
|
12711
|
-
|
|
12712
|
-
|
|
12713
|
-
|
|
12714
|
-
|
|
12806
|
+
getAllEncoded() {
|
|
12807
|
+
return this.bytes;
|
|
12808
|
+
}
|
|
12809
|
+
setAllEncoded(bytes) {
|
|
12810
|
+
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12811
|
+
this.bytes.set(bytes, 0);
|
|
12812
|
+
}
|
|
12813
|
+
static fromBytes(bytes) {
|
|
12814
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12815
|
+
return new Registers(bytes);
|
|
12816
|
+
}
|
|
12817
|
+
getBytesAsLittleEndian(index, len) {
|
|
12818
|
+
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12819
|
+
return this.bytes.subarray(offset, offset + len);
|
|
12820
|
+
}
|
|
12821
|
+
copyFrom(regs) {
|
|
12822
|
+
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12823
|
+
this.asUnsigned.set(array);
|
|
12824
|
+
}
|
|
12825
|
+
reset() {
|
|
12826
|
+
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12827
|
+
this.asUnsigned[i] = 0n;
|
|
12828
|
+
}
|
|
12829
|
+
}
|
|
12830
|
+
getLowerU32(registerIndex) {
|
|
12831
|
+
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12832
|
+
}
|
|
12833
|
+
getLowerI32(registerIndex) {
|
|
12834
|
+
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12835
|
+
}
|
|
12836
|
+
setU32(registerIndex, value) {
|
|
12837
|
+
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12838
|
+
}
|
|
12839
|
+
setI32(registerIndex, value) {
|
|
12840
|
+
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12841
|
+
}
|
|
12842
|
+
getU64(registerIndex) {
|
|
12843
|
+
return this.asUnsigned[registerIndex];
|
|
12844
|
+
}
|
|
12845
|
+
getI64(registerIndex) {
|
|
12846
|
+
return this.asSigned[registerIndex];
|
|
12847
|
+
}
|
|
12848
|
+
setU64(registerIndex, value) {
|
|
12849
|
+
this.asUnsigned[registerIndex] = value;
|
|
12850
|
+
}
|
|
12851
|
+
setI64(registerIndex, value) {
|
|
12852
|
+
this.asSigned[registerIndex] = value;
|
|
12853
|
+
}
|
|
12854
|
+
getAllU64() {
|
|
12855
|
+
return this.asUnsigned;
|
|
12715
12856
|
}
|
|
12716
|
-
return null;
|
|
12717
|
-
}
|
|
12718
|
-
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
12719
|
-
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
12720
|
-
destination.set(u32AsLeBytes(serviceId));
|
|
12721
|
-
}
|
|
12722
|
-
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
12723
|
-
function clampU64ToU32(value) {
|
|
12724
|
-
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
12725
12857
|
}
|
|
12726
|
-
function
|
|
12727
|
-
|
|
12728
|
-
|
|
12729
|
-
|
|
12730
|
-
|
|
12731
|
-
|
|
12732
|
-
|
|
12733
|
-
|
|
12734
|
-
|
|
12735
|
-
|
|
12736
|
-
|
|
12737
|
-
|
|
12738
|
-
|
|
12739
|
-
|
|
12740
|
-
get NewServiceError () { return NewServiceError; },
|
|
12741
|
-
NoMachineError: NoMachineError,
|
|
12742
|
-
get PagesError () { return PagesError; },
|
|
12743
|
-
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
12744
|
-
get PeekPokeError () { return PeekPokeError; },
|
|
12745
|
-
PendingTransfer: PendingTransfer,
|
|
12746
|
-
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
12747
|
-
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
12748
|
-
get RequestPreimageError () { return RequestPreimageError; },
|
|
12749
|
-
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
12750
|
-
SegmentExportError: SegmentExportError,
|
|
12751
|
-
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
12752
|
-
get TransferError () { return TransferError; },
|
|
12753
|
-
UnprivilegedError: UnprivilegedError,
|
|
12754
|
-
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
12755
|
-
get ZeroVoidError () { return ZeroVoidError; },
|
|
12756
|
-
clampU64ToU32: clampU64ToU32,
|
|
12757
|
-
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
12758
|
-
getServiceId: getServiceId,
|
|
12759
|
-
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
12760
|
-
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
12761
|
-
toMemoryOperation: toMemoryOperation,
|
|
12762
|
-
tryAsMachineId: tryAsMachineId,
|
|
12763
|
-
tryAsProgramCounter: tryAsProgramCounter,
|
|
12764
|
-
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
12765
|
-
});
|
|
12766
|
-
|
|
12767
|
-
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
12768
|
-
/**
|
|
12769
|
-
* Merkle Mountain Range.
|
|
12770
|
-
*
|
|
12771
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
12772
|
-
*/
|
|
12773
|
-
class MerkleMountainRange {
|
|
12774
|
-
hasher;
|
|
12775
|
-
mountains;
|
|
12776
|
-
/** Construct an empty MMR. */
|
|
12777
|
-
static empty(hasher) {
|
|
12778
|
-
return new MerkleMountainRange(hasher);
|
|
12779
|
-
}
|
|
12780
|
-
/** Construct a new MMR from existing peaks. */
|
|
12781
|
-
static fromPeaks(hasher, mmr) {
|
|
12782
|
-
return new MerkleMountainRange(hasher, mmr.peaks
|
|
12783
|
-
.reduce((acc, peak, index) => {
|
|
12784
|
-
if (peak !== null) {
|
|
12785
|
-
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
12786
|
-
}
|
|
12787
|
-
return acc;
|
|
12788
|
-
}, [])
|
|
12789
|
-
.reverse());
|
|
12790
|
-
}
|
|
12791
|
-
constructor(hasher,
|
|
12792
|
-
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
12793
|
-
mountains = []) {
|
|
12794
|
-
this.hasher = hasher;
|
|
12795
|
-
this.mountains = mountains;
|
|
12796
|
-
}
|
|
12797
|
-
/**
|
|
12798
|
-
* Append a new hash to the MMR structure.
|
|
12799
|
-
*
|
|
12800
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
12801
|
-
*/
|
|
12802
|
-
append(hash) {
|
|
12803
|
-
let newMountain = Mountain.fromPeak(hash, 1);
|
|
12804
|
-
for (;;) {
|
|
12805
|
-
const last = this.mountains.pop();
|
|
12806
|
-
if (last === undefined) {
|
|
12807
|
-
this.mountains.push(newMountain);
|
|
12808
|
-
return;
|
|
12809
|
-
}
|
|
12810
|
-
if (last.size !== newMountain.size) {
|
|
12811
|
-
this.mountains.push(last);
|
|
12812
|
-
this.mountains.push(newMountain);
|
|
12813
|
-
return;
|
|
12814
|
-
}
|
|
12815
|
-
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
12816
|
-
}
|
|
12817
|
-
}
|
|
12818
|
-
/**
|
|
12819
|
-
* Root of the entire structure.
|
|
12820
|
-
*
|
|
12821
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
12822
|
-
*/
|
|
12823
|
-
getSuperPeakHash() {
|
|
12824
|
-
if (this.mountains.length === 0) {
|
|
12825
|
-
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
12826
|
-
}
|
|
12827
|
-
const revMountains = this.mountains.slice().reverse();
|
|
12828
|
-
const length = revMountains.length;
|
|
12829
|
-
let lastHash = revMountains[0].peak;
|
|
12830
|
-
for (let i = 1; i < length; i++) {
|
|
12831
|
-
const mountain = revMountains[i];
|
|
12832
|
-
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
12833
|
-
}
|
|
12834
|
-
return lastHash;
|
|
12835
|
-
}
|
|
12836
|
-
/** Get current peaks. */
|
|
12837
|
-
getPeaks() {
|
|
12838
|
-
const peaks = [];
|
|
12839
|
-
const mountains = this.mountains;
|
|
12840
|
-
// always 2**index
|
|
12841
|
-
let currentSize = 1;
|
|
12842
|
-
let currentIdx = mountains.length - 1;
|
|
12843
|
-
while (currentIdx >= 0) {
|
|
12844
|
-
const currentItem = mountains[currentIdx];
|
|
12845
|
-
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
12846
|
-
peaks.push(currentItem.peak);
|
|
12847
|
-
currentIdx -= 1;
|
|
12848
|
-
}
|
|
12849
|
-
else {
|
|
12850
|
-
peaks.push(null);
|
|
12851
|
-
}
|
|
12852
|
-
// move to the next index.
|
|
12853
|
-
currentSize = currentSize << 1;
|
|
12854
|
-
}
|
|
12855
|
-
return { peaks };
|
|
12856
|
-
}
|
|
12857
|
-
}
|
|
12858
|
-
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
12859
|
-
class Mountain {
|
|
12860
|
-
peak;
|
|
12861
|
-
size;
|
|
12862
|
-
constructor(peak, size) {
|
|
12863
|
-
this.peak = peak;
|
|
12864
|
-
this.size = size;
|
|
12865
|
-
}
|
|
12866
|
-
static fromPeak(peak, size) {
|
|
12867
|
-
return new Mountain(peak, size);
|
|
12868
|
-
}
|
|
12869
|
-
static fromChildren(hasher, children) {
|
|
12870
|
-
const [left, right] = children;
|
|
12871
|
-
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
12872
|
-
const size = left.size + right.size;
|
|
12873
|
-
return new Mountain(peak, size);
|
|
12874
|
-
}
|
|
12875
|
-
/** Merge with another montain of the same size. */
|
|
12876
|
-
mergeWith(hasher, other) {
|
|
12877
|
-
return Mountain.fromChildren(hasher, [this, other]);
|
|
12878
|
-
}
|
|
12879
|
-
toString() {
|
|
12880
|
-
return `${this.size} @ ${this.peak}`;
|
|
12881
|
-
}
|
|
12882
|
-
}
|
|
12883
|
-
|
|
12884
|
-
var index$8 = /*#__PURE__*/Object.freeze({
|
|
12885
|
-
__proto__: null,
|
|
12886
|
-
MerkleMountainRange: MerkleMountainRange
|
|
12887
|
-
});
|
|
12888
|
-
|
|
12889
|
-
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12890
|
-
const tryAsRegisterIndex = (index) => {
|
|
12891
|
-
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12892
|
-
return asOpaqueType(index);
|
|
12893
|
-
};
|
|
12894
|
-
class Registers {
|
|
12895
|
-
bytes;
|
|
12896
|
-
asSigned;
|
|
12897
|
-
asUnsigned;
|
|
12898
|
-
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12899
|
-
this.bytes = bytes;
|
|
12900
|
-
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12901
|
-
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12902
|
-
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12903
|
-
}
|
|
12904
|
-
getAllEncoded() {
|
|
12905
|
-
return this.bytes;
|
|
12906
|
-
}
|
|
12907
|
-
setAllEncoded(bytes) {
|
|
12908
|
-
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12909
|
-
this.bytes.set(bytes, 0);
|
|
12910
|
-
}
|
|
12911
|
-
static fromBytes(bytes) {
|
|
12912
|
-
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12913
|
-
return new Registers(bytes);
|
|
12914
|
-
}
|
|
12915
|
-
getBytesAsLittleEndian(index, len) {
|
|
12916
|
-
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12917
|
-
return this.bytes.subarray(offset, offset + len);
|
|
12918
|
-
}
|
|
12919
|
-
copyFrom(regs) {
|
|
12920
|
-
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12921
|
-
this.asUnsigned.set(array);
|
|
12922
|
-
}
|
|
12923
|
-
reset() {
|
|
12924
|
-
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12925
|
-
this.asUnsigned[i] = 0n;
|
|
12926
|
-
}
|
|
12927
|
-
}
|
|
12928
|
-
getLowerU32(registerIndex) {
|
|
12929
|
-
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12930
|
-
}
|
|
12931
|
-
getLowerI32(registerIndex) {
|
|
12932
|
-
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12933
|
-
}
|
|
12934
|
-
setU32(registerIndex, value) {
|
|
12935
|
-
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12936
|
-
}
|
|
12937
|
-
setI32(registerIndex, value) {
|
|
12938
|
-
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12939
|
-
}
|
|
12940
|
-
getU64(registerIndex) {
|
|
12941
|
-
return this.asUnsigned[registerIndex];
|
|
12942
|
-
}
|
|
12943
|
-
getI64(registerIndex) {
|
|
12944
|
-
return this.asSigned[registerIndex];
|
|
12945
|
-
}
|
|
12946
|
-
setU64(registerIndex, value) {
|
|
12947
|
-
this.asUnsigned[registerIndex] = value;
|
|
12948
|
-
}
|
|
12949
|
-
setI64(registerIndex, value) {
|
|
12950
|
-
this.asSigned[registerIndex] = value;
|
|
12951
|
-
}
|
|
12952
|
-
getAllU64() {
|
|
12953
|
-
return this.asUnsigned;
|
|
12954
|
-
}
|
|
12955
|
-
}
|
|
12956
|
-
function signExtend32To64(value) {
|
|
12957
|
-
// Convert to BigInt if the value is a number
|
|
12958
|
-
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12959
|
-
// Ensure the value is treated as a 32-bit integer
|
|
12960
|
-
const mask32 = BigInt(0xffffffff);
|
|
12961
|
-
const signBit = BigInt(0x80000000);
|
|
12962
|
-
const maskedValue = bigValue & mask32;
|
|
12963
|
-
// Check the sign bit and extend the sign if necessary
|
|
12964
|
-
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12965
|
-
// If the sign bit is set, extend with ones
|
|
12966
|
-
return maskedValue | ~mask32;
|
|
12967
|
-
}
|
|
12968
|
-
// If the sign bit is not set, return as is
|
|
12969
|
-
return maskedValue;
|
|
12858
|
+
function signExtend32To64(value) {
|
|
12859
|
+
// Convert to BigInt if the value is a number
|
|
12860
|
+
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12861
|
+
// Ensure the value is treated as a 32-bit integer
|
|
12862
|
+
const mask32 = BigInt(0xffffffff);
|
|
12863
|
+
const signBit = BigInt(0x80000000);
|
|
12864
|
+
const maskedValue = bigValue & mask32;
|
|
12865
|
+
// Check the sign bit and extend the sign if necessary
|
|
12866
|
+
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12867
|
+
// If the sign bit is set, extend with ones
|
|
12868
|
+
return maskedValue | ~mask32;
|
|
12869
|
+
}
|
|
12870
|
+
// If the sign bit is not set, return as is
|
|
12871
|
+
return maskedValue;
|
|
12970
12872
|
}
|
|
12971
12873
|
|
|
12972
12874
|
/** Attempt to convert a number into `HostCallIndex`. */
|
|
@@ -13951,7 +13853,7 @@ function getRegisters(argsLength) {
|
|
|
13951
13853
|
return regs;
|
|
13952
13854
|
}
|
|
13953
13855
|
|
|
13954
|
-
var index$
|
|
13856
|
+
var index$a = /*#__PURE__*/Object.freeze({
|
|
13955
13857
|
__proto__: null,
|
|
13956
13858
|
MemorySegment: MemorySegment,
|
|
13957
13859
|
SpiMemory: SpiMemory,
|
|
@@ -14010,7 +13912,7 @@ function extractCodeAndMetadata(blobWithMetadata) {
|
|
|
14010
13912
|
return { metadata, code };
|
|
14011
13913
|
}
|
|
14012
13914
|
|
|
14013
|
-
var index$
|
|
13915
|
+
var index$9 = /*#__PURE__*/Object.freeze({
|
|
14014
13916
|
__proto__: null,
|
|
14015
13917
|
Program: Program,
|
|
14016
13918
|
extractCodeAndMetadata: extractCodeAndMetadata
|
|
@@ -16882,7 +16784,7 @@ class Interpreter {
|
|
|
16882
16784
|
}
|
|
16883
16785
|
}
|
|
16884
16786
|
|
|
16885
|
-
var index$
|
|
16787
|
+
var index$8 = /*#__PURE__*/Object.freeze({
|
|
16886
16788
|
__proto__: null,
|
|
16887
16789
|
Interpreter: Interpreter,
|
|
16888
16790
|
Memory: Memory,
|
|
@@ -16893,7 +16795,7 @@ var index$5 = /*#__PURE__*/Object.freeze({
|
|
|
16893
16795
|
tryAsSbrkIndex: tryAsSbrkIndex
|
|
16894
16796
|
});
|
|
16895
16797
|
|
|
16896
|
-
async function instantiate(module, imports = {}) {
|
|
16798
|
+
async function instantiate$1(module, imports = {}) {
|
|
16897
16799
|
const adaptedImports = {
|
|
16898
16800
|
env: Object.setPrototypeOf({
|
|
16899
16801
|
abort(message, fileName, lineNumber, columnNumber) {
|
|
@@ -17270,9 +17172,28 @@ async function instantiate(module, imports = {}) {
|
|
|
17270
17172
|
return adaptedExports;
|
|
17271
17173
|
}
|
|
17272
17174
|
|
|
17273
|
-
//
|
|
17274
|
-
|
|
17275
|
-
|
|
17175
|
+
// Auto-generated inline WASM module
|
|
17176
|
+
// Target: release-stub
|
|
17177
|
+
// Source: build/release-stub.wasm
|
|
17178
|
+
|
|
17179
|
+
|
|
17180
|
+
const wasmBase64 = "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IAckACAGIAM2AgAFIAMgB0EBdCIGIAMgBksbEA0iAyACIAf8CgAAIAMhAgsFIAgEQCACIANqJAAgBiADNgIACwsgAkEEayABNgIQIAJBEGoiAiAEakEAIAEgBGv8CwAgAiAFRwRAIAAgAjYCACAAIAI2AgQLIAAgATYCCAsLTQEBfyABIAAoAgxPBEAgAUEASARAQfDEAEGwxQBBggFBFhAAAAsgACABQQFqIgNBAkEBEBEgACADNgIMCyAAKAIEIAFBAnRqIAI2AgAL4xcBAX9BjKUBJABBwA5BAEEAEA4kAUHwD0EIQQAQDiQCQecBQQJBCUEAEBAiAEEAQZAQQQBBARAOEBIgAEEBQbAQQQBBARAOEBIgAEECIwEQEiAAQQMjARASIABBBCMBEBIgAEEFIwEQEiAAQQYjARASIABBByMBEBIgAEEIIwEQEiAAQQkjARASIABBCkHgEEEBQQAQDhASIABBCyMBEBIgAEEMIwEQEiAAQQ0jARASIABBDiMBEBIgAEEPIwEQEiAAQRAjARASIABBESMBEBIgAEESIwEQEiAAQRMjARASIABBFEGAEUEFQQAQDhASIABBFSMBEBIgAEEWIwEQEiAAQRcjARASIABBGCMBEBIgAEEZIwEQEiAAQRojARASIABBGyMBEBIgAEEcIwEQEiAAQR0jARASIABBHkGwEUECQQAQDhASIABBH0HgEUECQQAQDhASIABBIEGQEkECQQAQDhASIABBIUHAEkECQQAQDhASIABBIiMBEBIgAEEjIwEQEiAAQSQjARASIABBJSMBEBIgAEEmIwEQEiAAQScjARASIABBKEHwEkEDQQEQDhASIABBKSMBEBIgAEEqIwEQEiAAQSsjARASIABBLCMBEBIgAEEtIwEQEiAAQS4jARASIABBLyMBEBIgAEEwIwEQEiAAQTEjARASIABBMkGQE0EEQQEQDhASIABBM0HAE0EEQQAQDhASIABBNEHwE0EEQQAQDhASIABBNUGgFEEEQQAQDhASIABBNkHQFEEEQQAQDhASIABBN0GAFUEEQQAQDhASIABBOEGwFUEEQQAQDhASIABBOUHgFUEEQQAQDhASIABBOkGQFkEEQQAQDhASIABBO0HAFkEEQQAQDhASIABBPEHwFkEEQQAQDhASIABBPUGgF0EEQQAQDhASIABBPkHQF0EE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QQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnZ603AwAgAEEANgIAIABBADYCCCAAC0cBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAHo3AwAgAEEANgIAIABBADYCCCAAC0kBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdorTcDACAAQQA2AgAgAEEANgIIIAALSQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp8CsNwMAIABBADYCACAAQQA2AgggAAtJAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnwaw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdB//8Dca03AwAgAEEANgIAIABBADYCCCAAC4cBAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAiBEIIiEL/gfyH8J/A/wCDIARC/4H8h/CfwP8Ag0IIhoQiBEIQiEL//4OA8P8/gyAEQv//g4Dw/z+DQhCGhEIgijcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRSBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVARAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFgEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRaBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVgRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRXBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEWQRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFUEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFIEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFQEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikD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QQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiENwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAgzcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIU3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCENwMAIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQn+FgzcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEJ/hYQ3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCFQn+FNwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCHzENwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATUCCH7ENwMAIABBADYCACAAQQA2AgggAAtUAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNQIIQoCAgIAQhCACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9xDcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0Agh8NwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCH43AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAfTcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnaqw3AwAgAEEANgIAIABBADYCCCAAC2oBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAEKAgICAEHwgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp619xDcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAH7ENwMAIABBADYCACAAQQA2AgggAAuGAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgMEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyADbqw3AwAFIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMACyAAQQA2AgAgAEEANgIIIAALuAEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAxCEEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDAMQiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAeFEgBUJ/UXEEQCACQQwgATUCCCIFpyAFQg1aG0EDdGogBDcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBX83AwALCyAAQQA2AgAgAEEANgIIIAALjQECAX4BfyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnIQMgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyIFBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAMgBXCsNwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6w3AwALIABBADYCACAAQQA2AgggAAu8AQIBfgF/IAJBDCABNQIEIgSnIARCDVobQQN0aikDAKchAyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgUEQCADQYCAgIB4RiAFQX9GcQRAIAJBDCABNQIIIgSnIARCDVobQQN0akIANwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6wgBayBNwMACwUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAOsNwMACyAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAHw3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9NwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAfjcDACAAQQA2AgAgAEEANgIIIAALmQEBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAUARAIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIA3AwALIABBADYCACAAQQA2AgggAAu7AQEDfiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAhBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAgICAgIB/USAFQn9RcQRAIAJBDCABNQIIIgWnIAVCDVobQQN0aiAENwMABSACQQwgATUCCCIGpyAGQg1aG0EDdGogBCAFfzcDAAsLIABBADYCACAAQQA2AgggAAuwAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBQBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDADcDAAUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCCNwMACyAAQQA2AgAgAEEANgIIIAALuwEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgVQBEAgAkEMIAE1AggiBacgBUINWhtBA3RqIAQ3AwAFIARCgICAgICAgICAf1EgBUJ/UXEEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCADcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBYE3AwALCyAAQQA2AgAgAEEANgIIIAAL2wIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgQiBacgBUINWhtBA3RqKQMAIgVCAFMEfyAFQn+FQgF8IQVBAQVBAAshASAEQgBTBH8gBEJ/hUIBfCEEIAFFBSABCwRAIARCIIgiCCAFQv////8PgyIJfiEGIAVCIIgiByAEQv////8PgyIKfiELIAQgBX5QrSAHIAh+IAZCIIh8IAtCIIh8IAZC/////w+DIAkgCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARCIIgiBiAFQv////8PgyIHfiEIIAVCIIgiBSAEQv////8PgyIEfiEJIAUgBn4gCEIgiHwgCUIgiHwgCEL/////D4MgBCAHfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC7oBAQZ+IAJBDCABNQIEIgSnIARCDVobQQN0aikDACIFQiCIIQQgBUL/////D4MiBSACQQwgATUCACIGpyAGQg1aG0EDdGopAwAiBkIgiCIHfiEIIAJBDCABNQIIIgmnIAlCDVobQQN0aiAEIAd+IAhCIIh8IAZC/////w+DIgYgBH4iBEIgiHwgCEL/////D4MgBSAGfkIgiHwgBEL/////D4N8QiCIfDcDACAAQQA2AgAgAEEANgIIIAALtwIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQYgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgRCAFMEQCAEQn+FQgF8IgdC/////w+DIgggBkIgiCIJfiEEIAdCIIgiBSAGQv////8PgyIKfiELIAYgB35QrSAFIAl+IARCIIh8IAtCIIh8IARC/////w+DIAggCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARC/////w+DIgUgBkIgiCIHfiEIIARCIIgiBCAGQv////8PgyIGfiEJIAQgB34gCEIgiHwgCUIgiHwgCEL/////D4MgBSAGfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVUbNwMAIABBADYCACAAQQA2AgggAAtpAQJ+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAiBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBSAEIAVWGzcDACAAQQA2AgAgAEEANgIIIAALaQECfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgUgBCAFUxs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVQbNwMAIABBADYCACAAQQA2AgggAAsSACAAQQM2AgAgAEEANgIMIAALEgAgAEEANgIAIABBADYCCCAACyAAIAEoAgAhASAAQQM2AgAgAEEDNgIMIAAgATYCECAAC6IBAQJ/IAAoAgAiASgCDCICQQBKBEAgAkEATARAQYDdAEGwxQBBjwJBEhAAAAsgASgCBCACQQFrIgBBAnRqKAIAIAEgADYCDA8LIAAoAghBDHQiASAAKAIERgRAQbDdABABCyABQYCAgIACSQR/QYAgEBQFQQALIQEgACAAKAIIQQFqNgIIIAAoAgghAEEIQQwQDyICIAA2AgAgAiABNgIEIAILMAEBfyAAQfz///8DSwRAQeDFAEGQxgBBNEErEAAACyAAQQEQDyIBQQAgAPwLACABC5YEAQl/IAAoAgAgASIDQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgFBD3YgAXNB95Svr3hsIgFBDXYgAXNBvdzKlXxsIgFBEHYgAXMiCCAAKAIEcUECdGooAgAhAQJAA0AgAQRAIAEoAggiBEEBcQR/QQAFIAEoAgAgA0YLDQIgBEF+cSEBDAELC0EAIQELIAEEQCABIAI2AgQFIAAoAgwiASAAKAIQRgRAIAAoAhQgAUEDbEEEbUgEfyAAKAIEBSAAKAIEQQF0QQFyCyIGQQFqIgFBAnQQdCEHIAFBA3RBA20iCUEMbBB0IQQgACgCCCIFIAAoAhBBDGxqIQogBCEBA0AgBSAKRwRAIAUoAghBAXFFBEAgASAFKAIAIgs2AgAgASAFKAIENgIEIAEgByALQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgsgC0EPdnNB95Svr3hsIgsgC0ENdnNBvdzKlXxsIgsgC0EQdnMgBnFBAnRqIgsoAgA2AgggCyABNgIAIAFBDGohAQsgBUEMaiEFDAELCyAAIAc2AgAgACAGNgIEIAAgBDYCCCAAIAk2AgwgACAAKAIUNgIQCyAAKAIIIAAgACgCECIEQQFqNgIQIARBDGxqIgEgAzYCACABIAI2AgQgACAAKAIUQQFqNgIUIAEgACgCACAIIAAoAgRxQQJ0aiIAKAIANgIIIAAgATYCAAsLsAICBn8CfgJ+IwghBCADKAIUIQUgAkEMIAE1AgAiCqcgCkINWhtBA3RqKQMApyIGRQRAIARBADoAACAFrQwBCyADNQIUIAatfCIKQoCAgIAQWgRAIARBAToAACAFrQwBCyADIAo+AhQgBa0gAygCACIEIApCAX1CDIenIghGDQAaIARBAWohBANAIAQgCEwEQCADKAIMEHMhBiADKAIQQQhBCxAPIglBAjYCACAJIAY2AgQgBCAJEHUgBEEBaiEEDAELCyADIAg2AgAgBa0LIQojCC0AAARAIwgiAS0AAARAIABBAzYCACAAQQJBASABLQABGzYCDCAAIAEoAgQ2AhALIAAPCyACQQwgATUCBCILpyALQg1aG0EDdGogCjcDACAAQQA2AgAgAEEANgIIIAALRgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMANwMAIABBADYCACAAQQA2AgggAAtPAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCDcDAAsgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQgBSBEAgAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0Agg3AwALIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALZQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCAFIEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiKNwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIo3AwAgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKcgASgCCHisNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKd4rDcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIk3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAKcgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp3esNwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAijcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCneKw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVK03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIU603AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVq03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVa03AwAgAEEANgIAIABBADYCCCAAC2EBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwBUrTcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFOtNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIAEoAgh0rDcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyABKAIIdqw3AwAgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAMQgASgCCEEfca2HNwMAIABBADYCACAAQQA2AgggAAtRAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEIfg6d0rDcDACAAQQA2AgAgAEEANgIIIAALUQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogASgCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCH4Ondqw3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQh+Dh8Q3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYY3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYg3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYc3AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAhjcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwCINwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIfENwMAIABBADYCACAAQQA2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IAAgARDBASAAKAIAIAAoAgQiAiABIAJqELkBIAAgACgCBCABajYCBAtdAQN/QQhBKBAPIgEgADYCACABQQA2AgQgASABEMIBEMMBIQIgASgCACABKAIEQQEkBxC6ASEAIAEgASgCBCAAKAIIajYCBEEIQScQDyIBIAA2AgAgASACNgIEIAELSAECfyAAQQMQwQEgACgCBCIBIAAoAgAoAgQiAmotAAAgAUEBaiACai0AAEEIdHIgAUECaiACai0AAEEQdHIgACABQQNqNgIEC1cBAn8gAEEEEMEBIAAoAgQiASAAKAIAKAIEIgJqLQAAIAFBAWogAmotAABBCHRyIAFBAmogAmotAABBEHRyIAFBA2ogAmotAABBGHRyIAAgAUEEajYCBAsoAQJ/IABBARDBASAAKAIEIgEgACgCACgCBGotAAAgACABQQFqNgIECzQBAX8gAEH///8/SwRAQeDFAEHAhgFBM0E8EAAACyAAQQN0IgBBDhAPIgFBACAA/AsAIAELxAYCDH8DfkEIQSgQDyICIAA2AgAgAkEANgIEIAIQwgEhACACEMcBIQYgAhDCASEHIAIgACAGbBDDASEIIAIgBxDDASIAKAIIELUBIQMDQCABIAAoAghIBEAgAyABIAEgACgCBGotAAAQtgEgAUEBaiEBDAELCyACIAdBB2pBA3YQwwEhCkEEQRsQDyIJQQA2AgACQCAHQf////8ASw0AIAdBAnQiAEEcEA8iAUEAIAD8CwAgCSABNgIAIAooAghBAWshAQNAIAFBAE4EQCABIAooAgRqLQAAIQIgAUEDdCELQQchAANAIABBAE4EQCACQYABcSEMIAJBAXQhAiAAIAtqIgUgB0gEQCAJKAIAIAVBAnRqQRlBACAEQQFqIAwbIgQgBEEZTxs2AgALIABBAWshAAwBCwsgAUEBayEBDAELC0EEQR0QDyICQQA2AgAgBkH/AXEiAAR/IAgoAgggAG0FQQALEMgBIQRBACEAA0AgACAIKAIISARAQgAhDSAGQQFrQf8BcSEBA0AgAUEATgRAQn8gDUIIhiIOIAgoAgQgACABamoxAAB8Ig8gDSAPViANIA5WchshDSABQQFrIQEMAQsLIAQgACAGQf8BcSIBbUEDdGogDTcDACAAIAFqIQAMAQsLIAIgBDYCAEEAIQFBBEEeEA8iAEEANgIA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WhtBA3RqKQMANwMIIAAgBUEMIAI1AggiBqcgBkINWhtBA3RqKQMANwMQDAYLQYCHASABELIBEK8BQfCfAUHQAkEHEAAACyAAIAI0AgA3AwAMBAsgACACNAIENwMIDAMLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgAjQCBDcDCAwBCyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCAsgACACNAIINwMQCyAAC7UDAQl/QQBBAkExQYCjARAQIQQgACgCECICKAIIIQYgAigCECECQRBBJBAPIgVBADYCACAFQQA2AgQgBUEANgIIIAVBADYCDCACQf////8ASwRAQeDFAEGwxQBBxgBBPBAAAAtBCCACIAJBCE0bQQJ0IgdBARAPIghBACAH/AsAIAUgCDYCACAFIAg2AgQgBSAHNgIIIAUgAjYCDANAIAIgA0oEQCAGIANBDGxqIgcoAghBAXFFBEAgBSABIAcoAgAQEiABQQFqIQELIANBAWohAwwBCwsgBSABQQJBABARIAUgATYCDEEAIQFBACEDA0AgAyAFKAIMSARAIAAoAhAgBSgCBCADQQJ0aigCACIHEDYiCCgCBCgCBARAQQAhAgNAIAIgCCgCBBA4KAIISARAIAIgCCgCBBA4KAIEai0AACIGBEAgAQRAIAEoAgQgBhC7AQUQ1wEiASAHQQx0IAJqNgIAQQFBAEEGQQAQECIJQQAgBhC2ASABIAk2AgQLBSABBEAgBCABENIBQQAhAQsLIAJBAWohAgwBCwsLIANBAWohAwwBCwsgAQRAIAQgARDSAQsgBAvZCAINfwF+QQEhAhCuASEJA0ACQCACRQRAIAEEQEGUnAEgACgCBCICIAJBFGsoAhBBA3YQ7QE2AgBBkJwBQYycASgCAEECdkHw9AAQtAEQAQsgAQRAQbScASAAKAIEQdCcARDvASICKAIEIAIoAgxBgIYBELQBNgIAQbCcAUGsnAEoAgBBAnZB8PQAELQBEAELIAEEQEHwnAEgACgCFBCyARCvARABCyABBEBBsJ0BIAAoAhhBChCzARCvARABCwwBCyABBEBB4J0BIAAoAhBBChCzARCvARABCyABBEACQCAAKAIMIgJBCGsoAgBBLEYEQCACKQMA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LABBmBcLGQIAAAASAAAAUwBUAE8AUgBFAF8AVQAzADIAQbwXCwEsAEHIFwsZAgAAABIAAABTAFQATwBSAEUAXwBVADYANABB7BcLATwAQfgXCycCAAAAIAAAAFMAVABPAFIARQBfAEkATQBNAF8ASQBOAEQAXwBVADgAQawYCwE8AEG4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAxADYAQewYCwE8AEH4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAzADIAQawZCwE8AEG4GQspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQA2ADQAQewZCwEsAEH4GQshAgAAABoAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAEGcGgsBLABBqBoLIQIAAAAaAAAAQgBSAEEATgBDAEgAXwBFAFEAXwBJAE0ATQBBzBoLASwAQdgaCyECAAAAGgAAAEIAUgBBAE4AQwBIAF8ATgBFAF8ASQBNAE0AQfwaCwE8AEGIGwslAgAAAB4AAABCAFIAQQBOAEMASABfAEwAVABfAFUAXwBJAE0ATQBBvBsLATwAQcgbCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABFAF8AVQBfAEkATQBNAEH8GwsBPABBiBwLJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBHAEUAXwBVAF8ASQBNAE0AQbwcCwE8AEHIHAslAgAAAB4AAABCAFIAQQBOAEMASABfAEcAVABfAFUAXwBJAE0ATQBB/BwLATwAQYgdCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABUAF8AUwBfAEkATQBNAEG8HQsBPABByB0LJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBMAEUAXwBTAF8ASQBNAE0AQfwdCwE8AEGIHgslAgAAAB4AAABCAFIAQQBOAEMASABfAEcARQBfAFMAXwBJAE0ATQBBvB4LATwAQcgeCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ARwBUAF8AUwBfAEkATQBNAEH8HgsBLABBiB8LFwIAAAAQAAAATQBPAFYARQBfAFIARQBHAEGsHwsBPABBuB8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8ANgA0AEHsHwsBPABB+B8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8AMwAyAEGsIAsBPABBuCALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8ANgA0AEHsIAsBPABB+CALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8AMwAyAEGsIQsBPABBuCELMQIAAAAqAAAAVABSAEEASQBMAEkATgBHAF8AWgBFAFIATwBfAEIASQBUAFMAXwA2ADQAQewhCwE8AEH4IQsxAgAAACoAAABUAFIAQQBJAEwASQBOAEcAXwBaAEUAUgBPAF8AQgBJAFQAUwBfADMAMgBBrCILASwAQbgiCyECAAAAGgAAAFMASQBHAE4AXwBFAFgAVABFAE4ARABfADgAQdwiCwEsAEHoIgsjAgAAABwAAABTAEkARwBOAF8ARQBYAFQARQBOAEQAXwAxADYAQYwjCwEsAEGYIwsjAgAAABwAAABaAEUAUgBPAF8ARQBYAFQARQBOAEQAXwAxADYAQbwjCwEsAEHIIwshAgAAABoAAABSAEUAVgBFAFIAUwBFAF8AQgBZAFQARQBTAEHsIwsBLABB+CMLHwIAAAAYAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADgAQZwkCwEsAEGoJAshAgAAABoAAABTAFQATwBSAEUAXwBJAE4ARABfAFUAMQA2AEHMJAsBLABB2CQLIQIAAAAaAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADMAMgBB/CQLASwAQYglCyECAAAAGgAAAFMAVABPAFIARQBfAEkATgBEAF8AVQA2ADQAQawlCwEsAEG4JQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBVADgAQdwlCwEsAEHoJQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBJADgAQYwmCwEsAEGYJgsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBVADEANgBBvCYLASwAQcgmCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAEkAMQA2AEHsJgsBLABB+CYLHwIAAAAYAAAATABPAEEARABfAEkATgBEAF8AVQAzADIAQZwnCwEsAEGoJwsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBJADMAMgBBzCcLASwAQdgnCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAFUANgA0AEH8JwsBLABBiCgLGwIAAAAUAAAAQQBEAEQAXwBJAE0ATQBfADMAMgBBrCgLASwAQbgoCxUCAAAADgAAAEEATgBEAF8ASQBNAE0AQdwoCwEsAEHoKAsVAgAAAA4AAABYAE8AUgBfAEkATQBNAEGMKQsBHABBmCkLEwIAAAAMAAAATwBSAF8ASQBNAE0AQawpCwEsAEG4KQsbAgAAABQAAABNAFUATABfAEkATQBNAF8AMwAyAEHcKQsBLABB6CkLHwIAAAAYAAAAUwBFAFQAXwBMAFQAXwBVAF8ASQBNAE0AQYwqCwEsAEGYKgsfAgAAABgAAABTAEUAVABfAEwAVABfAFMAXwBJAE0ATQBBvCoLASwAQcgqCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwAzADIAQewqCwEsAEH4KgshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8AMwAyAEGcKwsBLABBqCsLIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADMAMgBBzCsLASwAQdgrCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADMAMgBB/CsLASwAQYgsCx8CAAAAGAAAAFMARQBUAF8ARwBUAF8AVQBfAEkATQBNAEGsLAsBLABBuCwLHwIAAAAYAAAAUwBFAFQAXwBHAFQAXwBTAF8ASQBNAE0AQdwsCwE8AEHoLAspAgAAACIAAABTAEgATABPAF8ATABfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwtCwE8AEGoLQspAgAAACIAAABTAEgATABPAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQdwtCwE8AEHoLQspAgAAACIAAABTAEgAQQBSAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwuCwEsAEGoLgsdAgAAABYAAABDAE0ATwBWAF8ASQBaAF8ASQBNAE0AQcwuCwEsAEHYLgsdAgAAABYAAABDAE0ATwBWAF8ATgBaAF8ASQBNAE0AQfwuCwEsAEGILwsbAgAAABQAAABBAEQARABfAEkATQBNAF8ANgA0AEGsLwsBLABBuC8LGwIAAAAUAAAATQBVAEwAXwBJAE0ATQBfADYANABB3C8LASwAQegvCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwA2ADQAQYwwCwEsAEGYMAshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8ANgA0AEG8MAsBLABByDALIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADYANABB7DALASwAQfgwCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADYANABBnDELATwAQagxCykCAAAAIgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DELATwAQegxCykCAAAAIgAAAFMASABMAE8AXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABBnDILATwAQagyCykCAAAAIgAAAFMASABBAFIAXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DILASwAQegyCx8CAAAAGAAAAFIATwBUAF8AUgBfADYANABfAEkATQBNAEGMMwsBPABBmDMLJwIAAAAgAAAAUgBPAFQAXwBSAF8ANgA0AF8ASQBNAE0AXwBBAEwAVABBzDMLASwAQdgzCx8CAAAAGAAAAFIATwBUAF8AUgBfADMAMgBfAEkATQBNAEH8MwsBPABBiDQLJwIAAAAgAAAAUgBPAFQAXwBSAF8AMwAyAF8ASQBNAE0AXwBBAEwAVABBvDQLASwAQcg0CxkCAAAAEgAAAEIAUgBBAE4AQwBIAF8ARQBRAEHsNAsBLABB+DQLGQIAAAASAAAAQgBSAEEATgBDAEgAXwBOAEUAQZw1CwEsAEGoNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFUAQcw1CwEsAEHYNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFMAQfw1CwEsAEGINgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFUAQaw2CwEsAEG4NgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFMAQdw2CwE8AEHoNgspAgAAACIAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAF8ASQBOAEQAQZw3CwEcAEGoNwsTAgAAAAwAAABBAEQARABfADMAMgBBvDcLARwAQcg3CxMCAAAADAAAAFMAVQBCAF8AMwAyAEHcNwsBHABB6DcLEwIAAAAMAAAATQBVAEwAXwAzADIAQfw3CwEsAEGIOAsXAgAAABAAAABEAEkAVgBfAFUAXwAzADIAQaw4CwEsAEG4OAsXAgAAABAAAABEAEkAVgBfAFMAXwAzADIAQdw4CwEsAEHoOAsXAgAAABAAAABSAEUATQBfAFUAXwAzADIAQYw5CwEsAEGYOQsXAgAAABAAAABSAEUATQBfAFMAXwAzADIAQbw5CwEsAEHIOQsZAgAAABIAAABTAEgATABPAF8ATABfADMAMgBB7DkLASwAQfg5CxkCAAAAEgAAAFMASABMAE8AXwBSAF8AMwAyAEGcOgsBLABBqDoLGQIAAAASAAAAUwBIAEEAUgBfAFIAXwAzADIAQcw6CwEcAEHYOgsTAgAAAAwAAABBAEQARABfADYANABB7DoLARwAQfg6CxMCAAAADAAAAFMAVQBCAF8ANgA0AEGMOwsBHABBmDsLEwIAAAAMAAAATQBVAEwAXwA2ADQAQaw7CwEsAEG4OwsXAgAAABAAAABEAEkAVgBfAFUAXwA2ADQAQdw7CwEsAEHoOwsXAgAAABAAAABEAEkAVgBfAFMAXwA2ADQAQYw8CwEsAEGYPAsXAgAAABAAAABSAEUATQBfAFUAXwA2ADQAQbw8CwEsAEHIPAsXAgAAABAAAABSAEUATQBfAFMAXwA2ADQAQew8CwEsAEH4PAsZAgAAABIAAABTAEgATABPAF8ATABfADYANABBnD0LASwAQag9CxkCAAAAEgAAAFMASABMAE8AXwBSAF8ANgA0AEHMPQsBLABB2D0LGQIAAAASAAAAUwBIAEEAUgBfAFIAXwA2ADQAQfw9CwEcAEGIPgsNAgAAAAYAAABBAE4ARABBnD4LARwAQag+Cw0CAAAABgAAAFgATwBSAEG8PgsBHABByD4LCwIAAAAEAAAATwBSAEHcPgsBLABB6D4LIQIAAAAaAAAATQBVAEwAXwBVAFAAUABFAFIAXwBTAF8AUwBBjD8LASwAQZg/CyECAAAAGgAAAE0AVQBMAF8AVQBQAFAARQBSAF8AVQBfAFUAQbw/CwEsAEHIPwshAgAAABoAAABNAFUATABfAFUAUABQAEUAUgBfAFMAXwBVAEHsPwsBLABB+D8LFwIAAAAQAAAAUwBFAFQAXwBMAFQAXwBVAEGcwAALASwAQajAAAsXAgAAABAAAABTAEUAVABfAEwAVABfAFMAQczAAAsBLABB2MAACxUCAAAADgAAAEMATQBPAFYAXwBJAFoAQfzAAAsBLABBiMEACxUCAAAADgAAAEMATQBPAFYAXwBOAFoAQazBAAsBLABBuMEACxcCAAAAEAAAAFIATwBUAF8ATABfADYANABB3MEACwEsAEHowQALFwIAAAAQAAAAUgBPAFQAXwBMAF8AMwAyAEGMwgALASwAQZjCAAsXAgAAABAAAABSAE8AVABfAFIAXwA2ADQAQbzCAAsBLABByMIACxcCAAAAEAAAAFIATwBUAF8AUgBfADMAMgBB7MIACwEsAEH4wgALFQIAAAAOAAAAQQBOAEQAXwBJAE4AVgBBnMMACwEcAEGowwALEwIAAAAMAAAATwBSAF8ASQBOAFYAQbzDAAsBHABByMMACw8CAAAACAAAAFgATgBPAFIAQdzDAAsBHABB6MMACw0CAAAABgAAAE0AQQBYAEH8wwALARwAQYjEAAsRAgAAAAoAAABNAEEAWABfAFUAQZzEAAsBHABBqMQACw0CAAAABgAAAE0ASQBOAEG8xAALARwAQcjEAAsRAgAAAAoAAABNAEkATgBfAFUAQdzEAAsBPABB6MQACysCAAAAJAAAAEkAbgBkAGUAeAAgAG8AdQB0ACAAbwBmACAAcgBhAG4AZwBlAEGcxQALASwAQajFAAshAgAAABoAAAB+AGwAaQBiAC8AYQByAHIAYQB5AC4AdABzAEHMxQALASwAQdjFAAsjAgAAABwAAABJAG4AdgBhAGwAaQBkACAAbABlAG4AZwB0AGgAQfzFAAsBPABBiMYACy0CAAAAJgAAAH4AbABpAGIALwBhAHIAcgBhAHkAYgB1AGYAZgBlAHIALgB0AHMAQbzGAAsBHABByMYACwkVAAAACAAAAA4AQdzGAAsBHABB6MYACwkVAAAACAAAAA8AQfzGAAsBHABBiMcACwkVAAAACAAAABAAQZzHAAsBHABBqMcACwkVAAAACAAAABEAQbzHAAsBHABByMcACwkVAAAACAAAABIAQdzHAAsBHABB6McACwkVAAAACAAAABMAQfzHAAsBHABBiMgACwkVAAAACAAAABQAQZzIAAsBHABBqMgACwkVAAAACAAAABUAQbzIAAsBHABByMgACwkVAAAACAAAABYAQdzIAAsBHABB6MgACwkVAAAACAAAABcAQfzIAAsBHABBiMkACwkVAAAACAAAABgAQZzJAAsBHABBqMkACwkVAAAACAAAABkAQbzJAAsBHABByMkACwkVAAAACAAAABoAQdzJAAsBHABB6MkACwkVAAAACAAAABsAQfzJAAsBHABBiMoACwkVAAAACAAAABwAQZzKAAsBHABBqMoACwkVAAAACAAAAB0AQbzKAAsBHABByMoACwkVAAAACAAAAB4AQdzKAAsBHABB6MoACwkVAAAACAAAAB8AQfzKAAsBHABBiMsACwkVAAAACAAAACAAQZzLAAsBHABBqMsACwkVAAAACAAAACEAQbzLAAsBHABByMsACwkVAAAACAAAACIAQdzLAAsBHABB6MsACwkVAAAACAAAACMAQfzLAAsBHABBiMwACwkVAAAACAAAACQAQZzMAAsBHABBqMwACwkVAAAACAAAACUAQbzMAAsBHABByMwACwkVAAAACAAAACYAQdzMAAsBHABB6MwACwkVAAAACAAAACcAQfzMAAsBHABBiM0ACwkVAAAACAAAACgAQZzNAAsBHABBqM0ACwkVAAAACAAAACkAQbzNAAsBHABByM0ACwkVAAAACAAAACoAQdzNAAsBHABB6M0ACwkVAAAACAAAACsAQfzNAAsBHABBiM4ACwkVAAAACAAAACwAQZzOAAsBHABBqM4ACwkVAAAACAAAAC0AQbzOAAsBPABByM4ACysCAAAAJAAAAEsAZQB5ACAAZABvAGUAcwAgAG4AbwB0ACAAZQB4AGkAcwB0AEH8zgALASwAQYjPAAsdAgAAABYAAAB+AGwAaQBiAC8AbQBhAHAALgB0AHMAQazPAAsBHABBuM8ACwkVAAAACAAAAC4AQczPAAsBHABB2M8ACwkVAAAACAAAAC8AQezPAAsBHABB+M8ACwkVAAAACAAAADAAQYzQAAsBHABBmNAACwkVAAAACAAAADEAQazQAAsBHABBuNAACwkVAAAACAAAADIAQczQAAsBHABB2NAACwkVAAAACAAAADMAQezQAAsBHABB+NAACwkVAAAACAAAADQAQYzRAAsBHABBmNEACwkVAAAACAAAADUAQazRAAsBHABBuNEACwkVAAAACAAAADYAQczRAAsBHABB2NEACwkVAAAACAAAADcAQezRAAsBHABB+NEACwkVAAAACAAAADgAQYzSAAsBHABBmNIACwkVAAAACAAAADkAQazSAAsBHABBuNIACwkVAAAACAAAADoAQczSAAsBHABB2NIACwkVAAAACAAAADsAQezSAAsBHABB+NIACwkVAAAACAAAADwAQYzTAAsBHABBmNMACwkVAAAACAAAAD0AQazTAAsBHABBuNMACwkVAAAACAAAAD4AQczTAAsBHABB2NMACwkVAAAACAAAAD8AQezTAAsBHABB+NMACwkVAAAACAAAAEAAQYzUAAsBHABBmNQACwkVAAAACAAAAEEAQazUAAsBHABBuNQACwkVAAAACAAAAEIAQczUAAsBHABB2NQACwkVAAAACAAAAEMAQezUAAsBHABB+NQACwkVAAAACAAAAEQAQYzVAAsBHABBmNUACwkVAAAACAAAAEUAQazVAAsBHABBuNUACwkVAAAACAAAAEYAQczVAAsBHABB2NUACwkVAAAACAAAAEcAQezVAAsBHABB+NUACwkVAAAACAAAAEgAQYzWAAsBHABBmNYACwkVAAAACAAAAEkAQazWAAsBHABBuNYACwkVAAAACAAAAEoAQczWAAsBHABB2NYACwkVAAAACAAAAEsAQezWAAsBHABB+NYACwkVAAAACAAAAEwAQYzXAAsBHABBmNcACwkVAAAACAAAAE0AQazXAAsBHABBuNcACwkVAAAACAAAAE4AQczXAAsBHABB2NcACwkVAAAACAAAAE8AQezXAAsBHABB+NcACwkVAAAACAAAAFAAQYzYAAsBHABBmNgACwkVAAAACAAAAFEAQazYAAsBHABBuNgACwkVAAAACAAAAFIAQczYAAsBHABB2NgACwkVAAAACAAAAFMAQezYAAsBHABB+NgACwkVAAAACAAAAFQAQYzZAAsBHABBmNkACwkVAAAACAAAAFUAQazZAAsBHABBuNkACwkVAAAACAAAAFYAQczZAAsBHABB2NkACwkVAAAACAAAAFcAQezZAAsBHABB+NkACwkVAAAACAAAAFgAQYzaAAsBHABBmNoACwkVAAAACAAAAFkAQazaAAsBHABBuNoACwkVAAAACAAAAFoAQczaAAsBHABB2NoACwkVAAAACAAAAFsAQezaAAsBHABB+NoACwkVAAAACAAAAFwAQYzbAAsBHABBmNsACwkVAAAACAAAAF0AQazbAAsBHABBuNsACwkVAAAACAAAAF4AQczbAAsBHABB2NsACwkVAAAACAAAAF8AQezbAAsBHABB+NsACwkVAAAACAAAAGAAQYzcAAsBHABBmNwACwkVAAAACAAAAGEAQazcAAsBHABBuNwACwkVAAAACAAAAGIAQczcAAsBHABB2NwACwkVAAAACAAAAGMAQezcAAsBLABB+NwACyMCAAAAHAAAAEEAcgByAGEAeQAgAGkAcwAgAGUAbQBwAHQAeQBBnN0ACwFcAEGo3QALUwIAAABMAAAAVwBhAHIAbgBpAG4AZwA6ACAAUgB1AG4AIABvAHUAdAAgAG8AZgAgAHAAYQBnAGUAcwAhACAAQQBsAGwAbwBjAGEAdABpAG4AZwAuAEH83QALARwAQYjeAAsJFQAAAAgAAABkAEGc3gALARwAQajeAAsJFQAAAAgAAABlAEG83gALARwAQcjeAAsJFQAAAAgAAABmAEHc3gALARwAQejeAAsJFQAAAAgAAABnAEH83gALARwAQYjfAAsJFQAAAAgAAABoAEGc3wALARwAQajfAAsJFQAAAAgAAABpAEG83wALARwAQcjfAAsJFQAAAAgAAABqAEHc3wALARwAQejfAAsJFQAAAAgAAABrAEH83wALARwAQYjgAAsJFQAAAAgAAABsAEGc4AALARwAQajgAAsJFQAAAAgAAABtAEG84AALARwAQcjgAAsJFQAAAAgAAABuAEHc4AALARwAQejgAAsJFQAAAAgAAABvAEH84AALARwAQYjhAAsJFQAAAAgAAABwAEGc4QALARwAQajhAAsJFQAAAAgAAABxAEG84QALARwAQcjhAAsJFQAAAAgAAAByAEHc4QALARwAQejhAAsJFQAAAAgAAABzAEH84QALARwAQYjiAAsJFQAAAAgAAAB0AEGc4gALARwAQajiAAsJFQAAAAgAAAB1AEG84gALARwAQcjiAAsJFQAAAAgAAAB2AEHc4gALARwAQejiAAsJFQAAAAgAAAB3AEH84gALARwAQYjjAAsJFQAAAAgAAAB4AEGc4wALARwAQajjAAsJFQAAAAgAAAB5AEG84wALARwAQcjjAAsJFQAAAAgAAAB6AEHc4wALARwAQejjAAsJFQAAAAgAAAB7AEH84wALARwAQYjkAAsJFQAAAAgAAAB8AEGc5AALARwAQajkAAsJFQAAAAgAAAB9AEG85AALARwAQcjkAAsJFQAAAAgAAAB+AEHc5AALARwAQejkAAsJFQAAAAgAAAB/AEH85AALARwAQYjlAAsJFQAAAAgAAACAAEGc5QALARwAQajlAAsJFQAAAAgAAACBAEG85QALARwAQcjlAAsJFQAAAAgAAACCAEHc5QALARwAQejlAAsJFQAAAAgAAACDAEH85QALARwAQYjmAAsJFQAAAAgAAACEAEGc5gALARwAQajmAAsJFQAAAAgAAACFAEG85gALARwAQcjmAAsJFQAAAAgAAACGAEHc5gALARwAQejmAAsJFQAAAAgAAACHAEH85gALARwAQYjnAAsJFQAAAAgAAACIAEGc5wALARwAQajnAAsJFQAAAAgAAACJAEG85wALARwAQcjnAAsJFQAAAAgAAACKAEHc5wALARwAQejnAAsJFQAAAAgAAACLAEH85wALARwAQYjoAAsJFQAAAAgAAACMAEGc6AALARwAQajoAAsJFQAAAAgAAACNAEG86AALARwAQcjoAAsJFQAAAAgAAACOAEHc6AALARwAQejoAAsJFQAAAAgAAACPAEH86AALARwAQYjpAAsJFQAAAAgAAACQAEGc6QALARwAQajpAAsJFQAAAAgAAACRAEG86QALARwAQcjpAAsJFQAAAAgAAACSAEHc6QALARwAQejpAAsJFQAAAAgAAACTAEH86QALARwAQYjqAAsJFQAAAAgAAACUAEGc6gALARwAQajqAAsJFQAAAAgAAACVAEG86gALARwAQcjqAAsJFQAAAAgAAACWAEHc6gALARwAQejqAAsJFQAAAAgAAACXAEH86gALARwAQYjrAAsJFQAAAAgAAACYAEGc6wALARwAQajrAAsJFQAAAAgAAACZAEG86wALAqwDAEHI6wALogcBAAAAnAMAACAuAABALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAABgLgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAECcAAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4A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MAA5ADEAOQAyADkAMwA5ADQAOQA1ADkANgA5ADcAOQA4ADkAOQBBzPsACwIcBABB2PsAC4cIAgAAAAAEAAAwADAAMAAxADAAMgAwADMAMAA0ADAANQAwADYAMAA3ADAAOAAwADkAMABhADAAYgAwAGMAMABkADAAZQAwAGYAMQAwADEAMQAxADIAMQAzADEANAAxADUAMQA2ADEANwAxADgAMQA5ADEAYQAxAGIAMQBjADEAZAAxAGUAMQBmADIAMAAyADEAMgAyADIAMwAyADQAMgA1ADIANgAyADcAMgA4ADIAOQAyAGEAMgBiADIAYwAyAGQAMgBlADIAZgAzADAAMwAxADMAMgAzADMAMwA0ADMANQAzADYAMwA3ADMAOAAzADkAMwBhADMAYgAzAGMAMwBkADMAZQAzAGYANAAwADQAMQA0ADIANAAzADQANAA0ADUANAA2ADQANwA0ADgANAA5ADQAYQA0AGIANABjADQAZAA0AGUANABmADUAMAA1ADEANQAyADUAMwA1ADQANQA1ADUANgA1ADcANQA4ADUAOQA1AGEANQBiADUAYwA1AGQANQBlADUAZgA2ADAANgAxADYAMgA2ADMANgA0ADYANQA2ADYANgA3ADYAOAA2ADkANgBhADYAYgA2AGMANgBkADYAZQA2AGYANwAwADcAMQA3ADIANwAzADcANAA3ADUANwA2ADcANwA3ADgANwA5ADcAYQA3AGIANwBjADcAZAA3AGUANwBmADgAMAA4ADEAOAAyADgAMwA4ADQAOAA1ADgANgA4ADcAOAA4ADgAOQA4AGEAOABiADgAYwA4AGQAOABlADgAZgA5ADAAOQAxADkAMgA5ADMAOQA0ADkANQA5ADYAOQA3ADkAOAA5ADkAOQBhADkAYgA5AGMAOQBkADkAZQA5AGYAYQAwAGEAMQBhADIAYQAzAGEANABhADUAYQA2AGEANwBhADgAYQA5AGEAYQBhAGIAYQBjAGEAZABhAGUAYQBmAGIAMABiADEAYgAyAGIAMwBiADQAYgA1AGIANgBiADcAYgA4AGIAOQBiAGEAYgBiAGIAYwBiAGQAYgBlAGIAZgBjADAAYwAxAGMAMgBjADMAYwA0AGMANQBjADYAYwA3AGMAOABjADkAYwBhAGMAYgBjAGMAYwBkAGMAZQBjAGYAZAAwAGQAMQBkADIAZAAzAGQANABkADUAZAA2AGQANwBkADgAZAA5AGQAYQBkAGIAZABjAGQAZABkAGUAZABmAGUAMABlADEAZQAyAGUAMwBlADQAZQA1AGUANgBlADcAZQA4AGUAOQBlAGEAZQBiAGUAYwBlAGQAZQBlAGUAZgBmADAAZgAxAGYAMgBmADMAZgA0AGYANQBmADYAZgA3AGYAOABmADkAZgBhAGYAYgBmAGMAZgBkAGYAZQBmAGYAQeyDAQsBXABB+IMBC08CAAAASAAAADAAMQAyADMANAA1ADYANwA4ADkAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgAeQB6AEHMhAELARwAQdiEAQsLAgAAAAQAAAA6ACAAQeyEAQsBHABB+IQBCwkCAAAAAgAAACgAQYyFAQsBHABBmIUBCwkCAAAAAgAAACkAQayFAQseHAAAAAMAAAAAAAAAIwAAAAwAAACAQgAAAAAAAKBCAEHMhQELARwAQdiFAQsJAgAAAAIAAAAgAEHshQELARwAQfiFAQsLAgAAAAQAAAAsACAAQYyGAQseHAAAAAMAAAAAAAAAIwAAAAwAAADgQgAAAAAAAABDAEGshgELATwAQbiGAQstAgAAACYAAAB+AGwAaQBiAC8AcwB0AGEAdABpAGMAYQByAHIAYQB5AC4AdABzAEHshgELAUwAQfiGAQs7AgAAADQAAABVAG4AaABhAG4AZABsAGUAZAAgAGEAcgBnAHUAbQBlAG4AdABzACAAawBpAG4AZAA6ACAAQbyHAQsBTABByIcBCzkCAAAAMgAAAGEAcwBzAGUAbQBiAGwAeQAvAHAAcgBvAGcAcgBhAG0ALQBiAHUAaQBsAGQALgB0AHMAQYyIAQsBHABBmIgBCwEBAEGsiAELATwAQbiIAQsnAgAAACAAAAB+AGwAaQBiAC8AZABhAHQAYQB2AGkAZQB3AC4AdABzAEHsiAELAUwAQfiIAQs9AgAAADYAAABVAG4AaABhAG4AZABsAGUAZAAgAG4AdQBtAGIAZQByACAAZQBuAGMAbwBkAGkAbgBnADoAIABBvIkBCwE8AEHIiQELKQIAAAAiAAAAYQBzAHMAZQBtAGIAbAB5AC8AYwBvAGQAZQBjAC4AdABzAEH8iQELATwAQYiKAQsrAgAAACQAAAB+AGwAaQBiAC8AdAB5AHAAZQBkAGEAcgByAGEAeQAuAHQAcwBBvIoBCwFMAEHIigELQQIAAAA6AAAATgBvAHQAIABlAG4AbwB1AGcAaAAgAGIAeQB0AGUAcwAgAGwAZQBmAHQALgAgAE4AZQBlAGQAOgAgAEGMiwELASwAQZiLAQsXAgAAABAAAAAsACAAbABlAGYAdAA6ACAAQbyLAQseLAAAAAMAAAAAAAAAIwAAABAAAABQRQAAAAAAAKBFAEHsiwELAWwAQfiLAQtbAgAAAFQAAABOAG8AdAAgAGUAbgBvAHUAZwBoACAAYgB5AHQAZQBzACAAdABvACAAZABlAGMAbwBkAGUAIAAnAHYAYQByAFUAMwAyACcALgAgAE4AZQBlAGQAIABB3IwBCwEsAEHojAELFQIAAAAOAAAALAAgAGcAbwB0ADoAIABBjI0BCx4sAAAAAwAAAAAAAAAjAAAAEAAAAABGAAAAAAAAcEYAQbyNAQsBXABByI0BC0sCAAAARAAAAEEAcgBnAHUAbQBlAG4AdABzACAAbABlAG4AZwB0AGgAIABpAHMAIAB0AG8AbwAgAGIAaQBnAC4AIABHAG8AdAA6ACAAQZyOAQsBLABBqI4BCxUCAAAADgAAACwAIABtAGEAeAA6ACAAQcyOAQseLAAAAAMAAAAAAAAAIwAAABAAAADQRgAAAAAAADBHAEH8jgELATwAQYiPAQslAgAAAB4AAABhAHMAcwBlAG0AYgBsAHkALwBzAHAAaQAuAHQAcwBBvI8BCwF8AEHIjwELbQIAAABmAAAARQB4AHAAZQBjAHQAaQBuAGcAIAB0AG8AIAB1AHMAZQAgAGEAbABsACAAYgB5AHQAZQBzACAAZgByAG8AbQAgAHQAaABlACAAZABlAGMAbwBkAGUAcgAuACAATABlAGYAdAA6ACAAQbyQAQsBHABByJABCwEBAEHckAELAVwAQeiQAQtTAgAAAEwAAABBAHQAdABlAG0AcAB0AGkAbgBnACAAdABvACAAYQBsAGwAbwBjAGEAdABlACAAcgBlAHMAZQByAHYAZQBkACAAcABhAGcAZQA6ACAAQbyRAQsBPABByJEBCysCAAAAJAAAAGEAcwBzAGUAbQBiAGwAeQAvAG0AZQBtAG8AcgB5AC4AdABzAEH8kQELAWwAQYiSAQtdAgAAAFYAAABzAGIAcgBrACAAdwBpAHQAaABpAG4AIAByAGUAcwBlAHIAdgBlAGQAIABtAGUAbQBvAHIAeQAgAGkAcwAgAG4AbwB0ACAAYQBsAGwAbwB3AGUAZAAhAEHskgELAVwAQfiSAQtLAgAAAEQAAABNAGkAcwBtAGEAdABjAGgAaQBuAGcAIAAgAHIAZQBnAGkAcwB0AGUAcgBzACAAcwBpAHoAZQAsACAAZwBvAHQAOgAgAEHMkwELASwAQdiTAQsfAgAAABgAAAAsACAAZQB4AHAAZQBjAHQAZQBkADoAIABB/JMBCx4sAAAAAwAAAAAAAAAjAAAAEAAAAIBJAAAAAAAA4EkAQayUAQsBTABBuJQBCzcCAAAAMAAAAGEAcwBzAGUAbQBiAGwAeQAvAGEAcABpAC0AZABlAGIAdQBnAGcAZQByAC4AdABzAEH8lAELARwAQYiVAQsBAQBBnJUBCwEcAEGolQELAQEAQbyVAQsBHABByJUBCwEBAEHclQELASwAQeiVAQsjAgAAABwAAABVAG4AawBuAG8AdwBuACAAcgBlAHMAdQBsAHQAQYyWAQsBTABBmJYBCzUCAAAALgAAAGEAcwBzAGUAbQBiAGwAeQAvAGkAbgB0AGUAcgBwAHIAZQB0AGUAcgAuAHQAcwBB3JYBCwEcAEHolgELAQEAQfyWAQsBHABBiJcBCwEBAEGclwELARwAQaiXAQsBAQBBvJcBCwEcAEHIlwELAQEAQdyXAQsBLABB6JcBCyMCAAAAHAAAAFUAbgBrAG4AbwB3AG4AIABrAGkAbgBkADoAIABBjJgBCwE8AEGYmAELMQIAAAAqAAAAYQBzAHMAZQBtAGIAbAB5AC8AYQBwAGkALQB1AHQAaQBsAHMALgB0AHMAQcyYAQsBPABB2JgBCzECAAAAKgAAAGEAcwBzAGUAbQBiAGwAeQAvAGcAYQBzAC0AYwBvAHMAdABzAC4AdABzAEGMmQELARwAQZiZAQsBAQBBrJkBCwEcAEG4mQELAQEAQcyZAQsBHABB2JkBCwEBAEHsmQELARwAQfiZAQsBAQBBjJoBCwEsAEGYmgELHQIAAAAWAAAATQBlAHQAYQBkAGEAdABhADoAIAAKAEG8mgELARwAQciaAQsLAgAAAAQAAAAwAHgAQdyaAQsBHABB6JoBCwk2AAAACAAAAJsAQfyaAQsBHABBiJsBCwsCAAAABAAAAAoACgBBnJsBCwEsAEGomwELHwIAAAAYAAAAUgBFAEcASQBTAFQARQBSAFMAIAA9ACAAQcybAQsBLABB2JsBCxcCAAAAEAAAACAAKABmAGkAbgBhAGwAKQBB/JsBCx4cAAAAAwAAAAAAAAAjAAAADAAAALBNAAAAAAAA4E0AQZycAQseHAAAAAMAAAAAAAAAIwAAAAwAAACwTQAAAAAAAOBNAEG8nAELARwAQcicAQsJOgAAAAgAAACcAEHcnAELATwAQeicAQszAgAAACwAAABGAGkAbgBpAHMAaABlAGQAIAB3AGkAdABoACAAcwB0AGEAdAB1AHMAOgAgAEGcnQELASwAQaidAQsdAgAAABYAAABFAHgAaQB0ACAAYwBvAGQAZQA6ACAAQcydAQsBHABB2J0BCxECAAAACgAAAFAAQwAgAD0AIABB7J0BCwEcAEH4nQELEwIAAAAMAAAARwBBAFMAIAA9ACAAQYyeAQsBLABBmJ4BCxkCAAAAEgAAAFMAVABBAFQAVQBTACAAPQAgAEG8ngELARwAQcieAQsJOgAAAAgAAACdAEHcngELASwAQeieAQsjAgAAABwAAABJAE4AUwBUAFIAVQBDAFQASQBPAE4AIAA9ACAAQYyfAQsBHABBmJ8BCwsCAAAABAAAACAAKABBrJ8BCyYsAAAAAwAAAAAAAAAjAAAAFAAAAHBPAAAAAAAAoE8AAAAAAACgQgBB3J8BCwE8AEHonwELLQIAAAAmAAAAYQBzAHMAZQBtAGIAbAB5AC8AcAByAG8AZwByAGEAbQAuAHQAcwBBnKABCwEsAEGooAELIQIAAAAaAAAAQQBSAEcAVQBNAEUATgBUAFMAOgAKACAAIABBzKABCwEcAEHYoAELEwIAAAAMAAAAKQAgAD0AIAAwAHgAQeygAQsBHABB+KABCxECAAAACgAAACwAIAAKACAAIABBjKEBCwEcAEGYoQELDwIAAAAIAAAALAAKACAAIABBrKEBC258AAAAAwAAAAAAAAAjAAAAYAAAADBQAAAAAAAAoE8AAAAAAABgUAAAAAAAAIBQAAAAAAAAoE8AAAAAAABgUAAAAAAAAKBQAAAAAAAAoE8AAAAAAABgUAAAAAAAAKBQAAAAAAAAoE8AAAAAAABgUABBrKIBCwEcAEG4ogELAQEAQcyiAQsBHABB2KIBCwEBAEHsogELARwAQfiiAQsBAQBBkKMBCy08AAAAIAAAACAAAAAgAAAAAAAAAAIJAAAgAAAAQgAAAAJBAAAAAAAAAgEAAEEAQcijAQsGIAAAACQCAEHgowELEgJBAAAQQQIAAAAAACAAAAACQQBBhKQBCwIkAQBBkKQBCxkkCQAAIAAAACAAAAAgAAAABEEAAAIBAABkAEG4pAELASAAQcSkAQsnIAAAAAJBAAAgAAAAAkEAAAAAAAACQQAAIAAAAAJBAAACAgAAEEECAEH4pAELAgJBACkQc291cmNlTWFwcGluZ1VSTBcuL3JlbGVhc2Utc3R1Yi53YXNtLm1hcA==";
|
|
17181
|
+
let compiledModulePromise = null;
|
|
17182
|
+
|
|
17183
|
+
// Helper function to decode and instantiate the module
|
|
17184
|
+
async function instantiate(imports) {
|
|
17185
|
+
if (compiledModulePromise === null) {
|
|
17186
|
+
compiledModulePromise = WebAssembly.compile(getWasmBytes());
|
|
17187
|
+
}
|
|
17188
|
+
const module = await compiledModulePromise;
|
|
17189
|
+
return instantiate$1(module, imports);
|
|
17190
|
+
}
|
|
17191
|
+
|
|
17192
|
+
// Helper function to just get the bytes
|
|
17193
|
+
function getWasmBytes() {
|
|
17194
|
+
return Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0));
|
|
17195
|
+
}
|
|
17196
|
+
|
|
17276
17197
|
// Max u32 value
|
|
17277
17198
|
const INF_STEPS = 2 ** 32 - 1;
|
|
17278
17199
|
class AnanasRegisters {
|
|
@@ -17358,8 +17279,7 @@ class AnanasInterpreter {
|
|
|
17358
17279
|
this.gas = new AnanasGasCounter(instance);
|
|
17359
17280
|
}
|
|
17360
17281
|
static async new() {
|
|
17361
|
-
const
|
|
17362
|
-
const instance = await instantiate(wasmModule, {
|
|
17282
|
+
const instance = await instantiate({
|
|
17363
17283
|
env: {
|
|
17364
17284
|
abort: () => {
|
|
17365
17285
|
throw new Error("Abort called from WASM");
|
|
@@ -17455,7 +17375,7 @@ class InterpreterInstanceManager {
|
|
|
17455
17375
|
}
|
|
17456
17376
|
}
|
|
17457
17377
|
|
|
17458
|
-
var index$
|
|
17378
|
+
var index$7 = /*#__PURE__*/Object.freeze({
|
|
17459
17379
|
__proto__: null,
|
|
17460
17380
|
HostCallMemory: HostCallMemory,
|
|
17461
17381
|
HostCallRegisters: HostCallRegisters,
|
|
@@ -17467,15 +17387,252 @@ var index$4 = /*#__PURE__*/Object.freeze({
|
|
|
17467
17387
|
tryAsHostCallIndex: tryAsHostCallIndex
|
|
17468
17388
|
});
|
|
17469
17389
|
|
|
17390
|
+
/**
|
|
17391
|
+
* Host call result constants.
|
|
17392
|
+
*
|
|
17393
|
+
* https://graypaper.fluffylabs.dev/#/85129da/2c7c022c7c02?v=0.6.3
|
|
17394
|
+
*/
|
|
17395
|
+
const HostCallResult = {
|
|
17396
|
+
/** The return value indicating an item does not exist. */
|
|
17397
|
+
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
17398
|
+
/** Name unknown. */
|
|
17399
|
+
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
17400
|
+
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
17401
|
+
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
17402
|
+
/** Index unknown. */
|
|
17403
|
+
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
17404
|
+
/** Storage full or resource already allocated. */
|
|
17405
|
+
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
17406
|
+
/** Core index unknown. */
|
|
17407
|
+
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
17408
|
+
/** Insufficient funds. */
|
|
17409
|
+
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
17410
|
+
/** Gas limit too low. */
|
|
17411
|
+
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
17412
|
+
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
17413
|
+
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
17414
|
+
/** The return value indicating general success. */
|
|
17415
|
+
OK: tryAsU64(0n),
|
|
17416
|
+
};
|
|
17417
|
+
|
|
17418
|
+
const MAX_U32 = tryAsU32(2 ** 32 - 1);
|
|
17419
|
+
const MAX_U32_BIG_INT = tryAsU64(MAX_U32);
|
|
17420
|
+
const SERVICE_ID_BYTES = 4;
|
|
17421
|
+
const CURRENT_SERVICE_ID = tryAsServiceId(2 ** 32 - 1);
|
|
17422
|
+
function getServiceIdOrCurrent(regNumber, regs, currentServiceId) {
|
|
17423
|
+
const regValue = regs.get(regNumber);
|
|
17424
|
+
if (regValue === 2n ** 64n - 1n) {
|
|
17425
|
+
return currentServiceId;
|
|
17426
|
+
}
|
|
17427
|
+
return getServiceId(regValue);
|
|
17428
|
+
}
|
|
17429
|
+
function getServiceId(serviceId) {
|
|
17430
|
+
const { lower, upper } = u64IntoParts(serviceId);
|
|
17431
|
+
if (upper === 0) {
|
|
17432
|
+
return tryAsServiceId(lower);
|
|
17433
|
+
}
|
|
17434
|
+
return null;
|
|
17435
|
+
}
|
|
17436
|
+
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
17437
|
+
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
17438
|
+
destination.set(u32AsLeBytes(serviceId));
|
|
17439
|
+
}
|
|
17440
|
+
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
17441
|
+
function clampU64ToU32(value) {
|
|
17442
|
+
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
17443
|
+
}
|
|
17444
|
+
function emptyRegistersBuffer() {
|
|
17445
|
+
return safeAllocUint8Array(NO_OF_REGISTERS$1 * REGISTER_BYTE_SIZE);
|
|
17446
|
+
}
|
|
17447
|
+
|
|
17448
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 9 : 11;
|
|
17449
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 10 : 12;
|
|
17450
|
+
/**
|
|
17451
|
+
* Service account details with threshold balance.
|
|
17452
|
+
*
|
|
17453
|
+
* Used exclusively by `info` host call.
|
|
17454
|
+
*
|
|
17455
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33920033b500?v=0.7.2
|
|
17456
|
+
*/
|
|
17457
|
+
const codecServiceAccountInfoWithThresholdBalance = codec$1.object({
|
|
17458
|
+
codeHash: codec$1.bytes(HASH_SIZE),
|
|
17459
|
+
balance: codec$1.u64,
|
|
17460
|
+
thresholdBalance: codec$1.u64,
|
|
17461
|
+
accumulateMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17462
|
+
onTransferMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17463
|
+
storageUtilisationBytes: codec$1.u64,
|
|
17464
|
+
storageUtilisationCount: codec$1.u32,
|
|
17465
|
+
gratisStorage: codec$1.u64,
|
|
17466
|
+
created: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17467
|
+
lastAccumulation: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17468
|
+
parentService: codec$1.u32.convert((x) => x, tryAsServiceId),
|
|
17469
|
+
}, "ServiceAccountInfoWithThresholdBalance");
|
|
17470
|
+
|
|
17471
|
+
var index$6 = /*#__PURE__*/Object.freeze({
|
|
17472
|
+
__proto__: null,
|
|
17473
|
+
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17474
|
+
CURRENT_SERVICE_ID: CURRENT_SERVICE_ID,
|
|
17475
|
+
get EjectError () { return EjectError; },
|
|
17476
|
+
get ForgetPreimageError () { return ForgetPreimageError; },
|
|
17477
|
+
HostCallResult: HostCallResult,
|
|
17478
|
+
InsufficientFundsError: InsufficientFundsError,
|
|
17479
|
+
MachineInstance: MachineInstance,
|
|
17480
|
+
get MemoryOperation () { return MemoryOperation; },
|
|
17481
|
+
get NewServiceError () { return NewServiceError; },
|
|
17482
|
+
NoMachineError: NoMachineError,
|
|
17483
|
+
get PagesError () { return PagesError; },
|
|
17484
|
+
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
17485
|
+
get PeekPokeError () { return PeekPokeError; },
|
|
17486
|
+
PendingTransfer: PendingTransfer,
|
|
17487
|
+
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
17488
|
+
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
17489
|
+
get RequestPreimageError () { return RequestPreimageError; },
|
|
17490
|
+
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
17491
|
+
SegmentExportError: SegmentExportError,
|
|
17492
|
+
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
17493
|
+
get TransferError () { return TransferError; },
|
|
17494
|
+
UnprivilegedError: UnprivilegedError,
|
|
17495
|
+
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
17496
|
+
get ZeroVoidError () { return ZeroVoidError; },
|
|
17497
|
+
clampU64ToU32: clampU64ToU32,
|
|
17498
|
+
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
17499
|
+
getServiceId: getServiceId,
|
|
17500
|
+
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17501
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17502
|
+
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
17503
|
+
toMemoryOperation: toMemoryOperation,
|
|
17504
|
+
tryAsMachineId: tryAsMachineId,
|
|
17505
|
+
tryAsProgramCounter: tryAsProgramCounter,
|
|
17506
|
+
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
17507
|
+
});
|
|
17508
|
+
|
|
17509
|
+
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
17510
|
+
/**
|
|
17511
|
+
* Merkle Mountain Range.
|
|
17512
|
+
*
|
|
17513
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
17514
|
+
*/
|
|
17515
|
+
class MerkleMountainRange {
|
|
17516
|
+
hasher;
|
|
17517
|
+
mountains;
|
|
17518
|
+
/** Construct an empty MMR. */
|
|
17519
|
+
static empty(hasher) {
|
|
17520
|
+
return new MerkleMountainRange(hasher);
|
|
17521
|
+
}
|
|
17522
|
+
/** Construct a new MMR from existing peaks. */
|
|
17523
|
+
static fromPeaks(hasher, mmr) {
|
|
17524
|
+
return new MerkleMountainRange(hasher, mmr.peaks
|
|
17525
|
+
.reduce((acc, peak, index) => {
|
|
17526
|
+
if (peak !== null) {
|
|
17527
|
+
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
17528
|
+
}
|
|
17529
|
+
return acc;
|
|
17530
|
+
}, [])
|
|
17531
|
+
.reverse());
|
|
17532
|
+
}
|
|
17533
|
+
constructor(hasher,
|
|
17534
|
+
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
17535
|
+
mountains = []) {
|
|
17536
|
+
this.hasher = hasher;
|
|
17537
|
+
this.mountains = mountains;
|
|
17538
|
+
}
|
|
17539
|
+
/**
|
|
17540
|
+
* Append a new hash to the MMR structure.
|
|
17541
|
+
*
|
|
17542
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
17543
|
+
*/
|
|
17544
|
+
append(hash) {
|
|
17545
|
+
let newMountain = Mountain.fromPeak(hash, 1);
|
|
17546
|
+
for (;;) {
|
|
17547
|
+
const last = this.mountains.pop();
|
|
17548
|
+
if (last === undefined) {
|
|
17549
|
+
this.mountains.push(newMountain);
|
|
17550
|
+
return;
|
|
17551
|
+
}
|
|
17552
|
+
if (last.size !== newMountain.size) {
|
|
17553
|
+
this.mountains.push(last);
|
|
17554
|
+
this.mountains.push(newMountain);
|
|
17555
|
+
return;
|
|
17556
|
+
}
|
|
17557
|
+
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
17558
|
+
}
|
|
17559
|
+
}
|
|
17560
|
+
/**
|
|
17561
|
+
* Root of the entire structure.
|
|
17562
|
+
*
|
|
17563
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
17564
|
+
*/
|
|
17565
|
+
getSuperPeakHash() {
|
|
17566
|
+
if (this.mountains.length === 0) {
|
|
17567
|
+
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
17568
|
+
}
|
|
17569
|
+
const revMountains = this.mountains.slice().reverse();
|
|
17570
|
+
const length = revMountains.length;
|
|
17571
|
+
let lastHash = revMountains[0].peak;
|
|
17572
|
+
for (let i = 1; i < length; i++) {
|
|
17573
|
+
const mountain = revMountains[i];
|
|
17574
|
+
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
17575
|
+
}
|
|
17576
|
+
return lastHash;
|
|
17577
|
+
}
|
|
17578
|
+
/** Get current peaks. */
|
|
17579
|
+
getPeaks() {
|
|
17580
|
+
const peaks = [];
|
|
17581
|
+
const mountains = this.mountains;
|
|
17582
|
+
// always 2**index
|
|
17583
|
+
let currentSize = 1;
|
|
17584
|
+
let currentIdx = mountains.length - 1;
|
|
17585
|
+
while (currentIdx >= 0) {
|
|
17586
|
+
const currentItem = mountains[currentIdx];
|
|
17587
|
+
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
17588
|
+
peaks.push(currentItem.peak);
|
|
17589
|
+
currentIdx -= 1;
|
|
17590
|
+
}
|
|
17591
|
+
else {
|
|
17592
|
+
peaks.push(null);
|
|
17593
|
+
}
|
|
17594
|
+
// move to the next index.
|
|
17595
|
+
currentSize = currentSize << 1;
|
|
17596
|
+
}
|
|
17597
|
+
return { peaks };
|
|
17598
|
+
}
|
|
17599
|
+
}
|
|
17600
|
+
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
17601
|
+
class Mountain {
|
|
17602
|
+
peak;
|
|
17603
|
+
size;
|
|
17604
|
+
constructor(peak, size) {
|
|
17605
|
+
this.peak = peak;
|
|
17606
|
+
this.size = size;
|
|
17607
|
+
}
|
|
17608
|
+
static fromPeak(peak, size) {
|
|
17609
|
+
return new Mountain(peak, size);
|
|
17610
|
+
}
|
|
17611
|
+
static fromChildren(hasher, children) {
|
|
17612
|
+
const [left, right] = children;
|
|
17613
|
+
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
17614
|
+
const size = left.size + right.size;
|
|
17615
|
+
return new Mountain(peak, size);
|
|
17616
|
+
}
|
|
17617
|
+
/** Merge with another montain of the same size. */
|
|
17618
|
+
mergeWith(hasher, other) {
|
|
17619
|
+
return Mountain.fromChildren(hasher, [this, other]);
|
|
17620
|
+
}
|
|
17621
|
+
toString() {
|
|
17622
|
+
return `${this.size} @ ${this.peak}`;
|
|
17623
|
+
}
|
|
17624
|
+
}
|
|
17625
|
+
|
|
17626
|
+
var index$5 = /*#__PURE__*/Object.freeze({
|
|
17627
|
+
__proto__: null,
|
|
17628
|
+
MerkleMountainRange: MerkleMountainRange
|
|
17629
|
+
});
|
|
17630
|
+
|
|
17470
17631
|
class DebuggerAdapter {
|
|
17471
17632
|
pvm;
|
|
17472
17633
|
constructor(useSbrkGas = false) {
|
|
17473
17634
|
this.pvm = new Interpreter({ useSbrkGas });
|
|
17474
17635
|
}
|
|
17475
|
-
// TODO [MaSi]: a temporary solution that is needed to implement host calls in PVM debugger
|
|
17476
|
-
getInterpreter() {
|
|
17477
|
-
return this.pvm;
|
|
17478
|
-
}
|
|
17479
17636
|
resetGeneric(rawProgram, flatRegisters, initialGas) {
|
|
17480
17637
|
this.pvm.resetGeneric(rawProgram, 0, tryAsGas(initialGas), new Registers(flatRegisters));
|
|
17481
17638
|
}
|
|
@@ -17539,7 +17696,7 @@ class DebuggerAdapter {
|
|
|
17539
17696
|
}
|
|
17540
17697
|
}
|
|
17541
17698
|
|
|
17542
|
-
var index$
|
|
17699
|
+
var index$4 = /*#__PURE__*/Object.freeze({
|
|
17543
17700
|
__proto__: null,
|
|
17544
17701
|
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17545
17702
|
ArgsDecoder: ArgsDecoder,
|
|
@@ -17588,8 +17745,8 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17588
17745
|
asOpaqueType: asOpaqueType,
|
|
17589
17746
|
assertEmpty: assertEmpty,
|
|
17590
17747
|
assertNever: assertNever,
|
|
17591
|
-
block: index$
|
|
17592
|
-
bytes: index$
|
|
17748
|
+
block: index$m,
|
|
17749
|
+
bytes: index$t,
|
|
17593
17750
|
check: check,
|
|
17594
17751
|
clampU64ToU32: clampU64ToU32,
|
|
17595
17752
|
createResults: createResults,
|
|
@@ -17598,13 +17755,15 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17598
17755
|
extractCodeAndMetadata: extractCodeAndMetadata,
|
|
17599
17756
|
getServiceId: getServiceId,
|
|
17600
17757
|
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17601
|
-
hash: index$
|
|
17758
|
+
hash: index$p,
|
|
17759
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17602
17760
|
inspect: inspect,
|
|
17603
17761
|
instructionArgumentTypeMap: instructionArgumentTypeMap,
|
|
17604
|
-
interpreter: index$
|
|
17762
|
+
interpreter: index$8,
|
|
17605
17763
|
isBrowser: isBrowser,
|
|
17764
|
+
lazyInspect: lazyInspect,
|
|
17606
17765
|
measure: measure,
|
|
17607
|
-
numbers: index$
|
|
17766
|
+
numbers: index$s,
|
|
17608
17767
|
resultToString: resultToString,
|
|
17609
17768
|
seeThrough: seeThrough,
|
|
17610
17769
|
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
@@ -17651,7 +17810,7 @@ function hashToNumberSequence(blake2b, entropy, length) {
|
|
|
17651
17810
|
return result;
|
|
17652
17811
|
}
|
|
17653
17812
|
|
|
17654
|
-
var index$
|
|
17813
|
+
var index$3 = /*#__PURE__*/Object.freeze({
|
|
17655
17814
|
__proto__: null,
|
|
17656
17815
|
fisherYatesShuffle: fisherYatesShuffle
|
|
17657
17816
|
});
|
|
@@ -18009,10 +18168,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18009
18168
|
chi_a: json.array("number"),
|
|
18010
18169
|
chi_v: "number",
|
|
18011
18170
|
chi_r: json.optional("number"),
|
|
18012
|
-
chi_g: json.nullable(json.
|
|
18013
|
-
service: "number",
|
|
18014
|
-
gasLimit: json.fromNumber((v) => tryAsServiceGas(v)),
|
|
18015
|
-
})),
|
|
18171
|
+
chi_g: json.nullable(json.map("number", json.fromNumber((v) => tryAsServiceGas(v)))),
|
|
18016
18172
|
},
|
|
18017
18173
|
pi: JsonStatisticsData.fromJson,
|
|
18018
18174
|
omega: json.array(json.array(notYetAccumulatedFromJson)),
|
|
@@ -18053,7 +18209,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18053
18209
|
assigners: chi.chi_a,
|
|
18054
18210
|
delegator: chi.chi_v,
|
|
18055
18211
|
registrar: chi.chi_r ?? tryAsServiceId(2 ** 32 - 1),
|
|
18056
|
-
autoAccumulateServices: chi.chi_g ??
|
|
18212
|
+
autoAccumulateServices: chi.chi_g ?? new Map(),
|
|
18057
18213
|
}),
|
|
18058
18214
|
statistics: JsonStatisticsData.toStatisticsData(spec, pi),
|
|
18059
18215
|
accumulationQueue: omega,
|
|
@@ -18063,7 +18219,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18063
18219
|
});
|
|
18064
18220
|
});
|
|
18065
18221
|
|
|
18066
|
-
var index$
|
|
18222
|
+
var index$2 = /*#__PURE__*/Object.freeze({
|
|
18067
18223
|
__proto__: null,
|
|
18068
18224
|
JsonCoreStatistics: JsonCoreStatistics,
|
|
18069
18225
|
JsonService: JsonService,
|
|
@@ -18081,6 +18237,65 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
|
18081
18237
|
validatorDataFromJson: validatorDataFromJson
|
|
18082
18238
|
});
|
|
18083
18239
|
|
|
18240
|
+
class StateKeyVal {
|
|
18241
|
+
static fromJson = {
|
|
18242
|
+
key: fromJson.bytesN(TRUNCATED_HASH_SIZE),
|
|
18243
|
+
value: fromJson.bytesBlob,
|
|
18244
|
+
};
|
|
18245
|
+
key;
|
|
18246
|
+
value;
|
|
18247
|
+
}
|
|
18248
|
+
class TestState {
|
|
18249
|
+
static fromJson = {
|
|
18250
|
+
state_root: fromJson.bytes32(),
|
|
18251
|
+
keyvals: json.array(StateKeyVal.fromJson),
|
|
18252
|
+
};
|
|
18253
|
+
static Codec = codec$1.object({
|
|
18254
|
+
state_root: codec$1.bytes(HASH_SIZE).asOpaque(),
|
|
18255
|
+
keyvals: codec$1.sequenceVarLen(codec$1.object({
|
|
18256
|
+
key: codec$1.bytes(TRUNCATED_HASH_SIZE),
|
|
18257
|
+
value: codec$1.blob,
|
|
18258
|
+
})),
|
|
18259
|
+
});
|
|
18260
|
+
state_root;
|
|
18261
|
+
keyvals;
|
|
18262
|
+
}
|
|
18263
|
+
class StateTransitionGenesis {
|
|
18264
|
+
static fromJson = {
|
|
18265
|
+
header: headerFromJson,
|
|
18266
|
+
state: TestState.fromJson,
|
|
18267
|
+
};
|
|
18268
|
+
static Codec = codec$1.object({
|
|
18269
|
+
header: Header.Codec,
|
|
18270
|
+
state: TestState.Codec,
|
|
18271
|
+
});
|
|
18272
|
+
header;
|
|
18273
|
+
state;
|
|
18274
|
+
}
|
|
18275
|
+
class StateTransition {
|
|
18276
|
+
static fromJson = {
|
|
18277
|
+
pre_state: TestState.fromJson,
|
|
18278
|
+
post_state: TestState.fromJson,
|
|
18279
|
+
block: blockFromJson(tinyChainSpec),
|
|
18280
|
+
};
|
|
18281
|
+
static Codec = codec$1.object({
|
|
18282
|
+
pre_state: TestState.Codec,
|
|
18283
|
+
block: Block.Codec,
|
|
18284
|
+
post_state: TestState.Codec,
|
|
18285
|
+
});
|
|
18286
|
+
pre_state;
|
|
18287
|
+
post_state;
|
|
18288
|
+
block;
|
|
18289
|
+
}
|
|
18290
|
+
|
|
18291
|
+
var index$1 = /*#__PURE__*/Object.freeze({
|
|
18292
|
+
__proto__: null,
|
|
18293
|
+
StateKeyVal: StateKeyVal,
|
|
18294
|
+
StateTransition: StateTransition,
|
|
18295
|
+
StateTransitionGenesis: StateTransitionGenesis,
|
|
18296
|
+
TestState: TestState
|
|
18297
|
+
});
|
|
18298
|
+
|
|
18084
18299
|
/** Helper function to create most used hashes in the block */
|
|
18085
18300
|
class TransitionHasher {
|
|
18086
18301
|
context;
|
|
@@ -18129,15 +18344,6 @@ class TransitionHasher {
|
|
|
18129
18344
|
const encoded = BytesBlob.blobFromParts([et.raw, ep.raw, eg.raw, ea.raw, ed.raw]);
|
|
18130
18345
|
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), extrinsicView, encoded);
|
|
18131
18346
|
}
|
|
18132
|
-
/** Creates hash for given WorkPackage */
|
|
18133
|
-
workPackage(workPackage) {
|
|
18134
|
-
return this.encode(WorkPackage.Codec, workPackage);
|
|
18135
|
-
}
|
|
18136
|
-
encode(codec, data) {
|
|
18137
|
-
// TODO [ToDr] Use already allocated encoding destination and hash bytes from some arena.
|
|
18138
|
-
const encoded = Encoder.encodeObject(codec, data, this.context);
|
|
18139
|
-
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), data, encoded);
|
|
18140
|
-
}
|
|
18141
18347
|
}
|
|
18142
18348
|
|
|
18143
18349
|
var PreimagesErrorCode;
|
|
@@ -18146,7 +18352,6 @@ var PreimagesErrorCode;
|
|
|
18146
18352
|
PreimagesErrorCode["PreimagesNotSortedUnique"] = "preimages_not_sorted_unique";
|
|
18147
18353
|
PreimagesErrorCode["AccountNotFound"] = "account_not_found";
|
|
18148
18354
|
})(PreimagesErrorCode || (PreimagesErrorCode = {}));
|
|
18149
|
-
// TODO [SeKo] consider whether this module is the right place to remove expired preimages
|
|
18150
18355
|
class Preimages {
|
|
18151
18356
|
state;
|
|
18152
18357
|
blake2b;
|
|
@@ -18208,4 +18413,4 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
18208
18413
|
TransitionHasher: TransitionHasher
|
|
18209
18414
|
});
|
|
18210
18415
|
|
|
18211
|
-
export { index$
|
|
18416
|
+
export { index$m as block, index$k as block_json, index$t as bytes, index$r as codec, index$o as collections, index$n as config, index$i as config_node, index$q as crypto, index$e as database, index$d as erasure_coding, index$b as fuzz_proto, index$p as hash, index$6 as jam_host_calls, index$l as json_parser, index$j as logger, index$5 as mmr, index$s as numbers, index$u as ordering, index$4 as pvm, index$7 as pvm_host_calls, index$8 as pvm_interpreter, index$9 as pvm_program, index$a as pvm_spi_decoder, index$3 as shuffling, index$h as state, index$2 as state_json, index$f as state_merkleization, index$1 as state_vectors, index as transition, index$g as trie, index$v as utils };
|