@witnet/solidity 3.0.4 → 3.0.5

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.
Files changed (222) hide show
  1. package/LICENSE +2 -2
  2. package/build/contracts/Bech32.json +1 -1
  3. package/build/contracts/Clonable.json +1 -1
  4. package/build/contracts/Context.json +1 -1
  5. package/build/contracts/Create3.json +1 -1
  6. package/build/contracts/ERC165.json +1 -1
  7. package/build/contracts/Escrowable.json +1 -1
  8. package/build/contracts/IChainlinkAggregatorV3.json +1 -1
  9. package/build/contracts/IERC165.json +1 -1
  10. package/build/contracts/IERC20.json +1 -1
  11. package/build/contracts/IERC2362.json +1 -1
  12. package/build/contracts/IPythChainlinkAggregatorV3.json +1 -1
  13. package/build/contracts/IWitAppliance.json +1 -1
  14. package/build/contracts/IWitOracle.json +1 -1
  15. package/build/contracts/IWitOracleAppliance.json +1 -1
  16. package/build/contracts/IWitOracleConsumer.json +1 -1
  17. package/build/contracts/IWitOracleConsumerLegacy.json +1 -1
  18. package/build/contracts/IWitOracleLegacy.json +1 -1
  19. package/build/contracts/IWitOracleQueriable.json +1 -1
  20. package/build/contracts/IWitOracleQueriableConsumer.json +1 -1
  21. package/build/contracts/IWitOracleQueriableEvents.json +1 -1
  22. package/build/contracts/IWitOracleQueriableExperimental.json +1 -1
  23. package/build/contracts/IWitOracleQueriableTrustableReporter.json +1 -1
  24. package/build/contracts/IWitOracleQueriableTrustlessReporter.json +1 -1
  25. package/build/contracts/IWitOracleRadonRegistry.json +1 -1
  26. package/build/contracts/IWitOracleRadonRegistryEvents.json +1 -1
  27. package/build/contracts/IWitOracleRadonRegistryLegacy.json +1 -1
  28. package/build/contracts/IWitOracleRadonRequestFactory.json +1 -1
  29. package/build/contracts/IWitOracleRadonRequestModal.json +1 -1
  30. package/build/contracts/IWitOracleRadonRequestTemplate.json +1 -1
  31. package/build/contracts/IWitOracleRequest.json +1 -1
  32. package/build/contracts/IWitOracleRequestFactory.json +1 -1
  33. package/build/contracts/IWitOracleRequestFactoryEvents.json +1 -1
  34. package/build/contracts/IWitOracleRequestTemplate.json +1 -1
  35. package/build/contracts/IWitOracleTrustableAdmin.json +1 -1
  36. package/build/contracts/IWitOracleTrustless.json +1 -1
  37. package/build/contracts/IWitPriceFeeds.json +1 -1
  38. package/build/contracts/IWitPriceFeedsAdmin.json +1 -1
  39. package/build/contracts/IWitPriceFeedsConsumer.json +1 -1
  40. package/build/contracts/IWitPriceFeedsEvents.json +1 -1
  41. package/build/contracts/IWitPriceFeedsLegacy.json +1 -1
  42. package/build/contracts/IWitPriceFeedsLegacyAdmin.json +1 -1
  43. package/build/contracts/IWitPriceFeedsLegacySolver.json +1 -1
  44. package/build/contracts/IWitPriceFeedsLegacySolverFactory.json +1 -1
  45. package/build/contracts/IWitPriceFeedsTypes.json +1 -1
  46. package/build/contracts/IWitPyth.json +1 -1
  47. package/build/contracts/IWitPythChainlinkAggregator.json +1 -1
  48. package/build/contracts/IWitPythErrors.json +1 -1
  49. package/build/contracts/IWitPythEvents.json +1 -1
  50. package/build/contracts/IWitPythReporter.json +1 -1
  51. package/build/contracts/IWitRandomness.json +1 -1
  52. package/build/contracts/IWitRandomnessAdmin.json +1 -1
  53. package/build/contracts/IWitRandomnessAdminV2.json +1 -1
  54. package/build/contracts/IWitRandomnessConsumer.json +1 -1
  55. package/build/contracts/IWitRandomnessEvents.json +1 -1
  56. package/build/contracts/IWitRandomnessLegacy.json +1 -1
  57. package/build/contracts/IWitRandomnessTypes.json +1 -1
  58. package/build/contracts/Initializable.json +1 -1
  59. package/build/contracts/OVM_GasPriceOracle.json +1 -1
  60. package/build/contracts/Ownable.json +1 -1
  61. package/build/contracts/Ownable2Step.json +1 -1
  62. package/build/contracts/Payable.json +1 -1
  63. package/build/contracts/Proxiable.json +1 -1
  64. package/build/contracts/ReentrancyGuard.json +1 -1
  65. package/build/contracts/Secp256k1.json +1 -1
  66. package/build/contracts/Slices.json +1 -1
  67. package/build/contracts/TestBech32.json +1 -1
  68. package/build/contracts/TestSecp256k1.json +1 -1
  69. package/build/contracts/Upgradeable.json +1 -1
  70. package/build/contracts/UsingWitOracle.json +1 -1
  71. package/build/contracts/UsingWitPriceFeeds.json +1 -1
  72. package/build/contracts/UsingWitRandomness.json +1 -1
  73. package/build/contracts/WitOracle.json +2 -13
  74. package/build/contracts/WitOracleBasePushOnly.json +1 -1
  75. package/build/contracts/WitOracleBasePushOnlyTrustable.json +1 -1
  76. package/build/contracts/WitOracleBasePushOnlyTrustless.json +1 -1
  77. package/build/contracts/WitOracleBasePushOnlyUpgradable.json +1 -1
  78. package/build/contracts/WitOracleBaseQueriable.json +1 -1
  79. package/build/contracts/WitOracleBaseQueriableTrustable.json +1 -1
  80. package/build/contracts/WitOracleBaseQueriableTrustless.json +1 -1
  81. package/build/contracts/WitOracleBaseQueriableUpgradable.json +1 -1
  82. package/build/contracts/WitOracleDataLib.json +2 -254
  83. package/build/contracts/WitOraclePushOnly.json +1 -1
  84. package/build/contracts/WitOracleRadonEncodingLib.json +2 -13
  85. package/build/contracts/WitOracleRadonRegistry.json +2 -13
  86. package/build/contracts/WitOracleRadonRegistryBase.json +1 -1
  87. package/build/contracts/WitOracleRadonRegistryBaseUpgradable.json +1 -1
  88. package/build/contracts/WitOracleRadonRegistryData.json +1 -1
  89. package/build/contracts/WitOracleRadonRegistryDefaultV21.json +1 -1
  90. package/build/contracts/WitOracleRadonRegistryUpgradableDefault.json +2 -17
  91. package/build/contracts/WitOracleRadonRegistryUpgradableNoSha256.json +1 -1
  92. package/build/contracts/WitOracleRadonRegistryUpgradableZkSync.json +1 -1
  93. package/build/contracts/WitOracleRadonRequestFactory.json +2 -13
  94. package/build/contracts/WitOracleRadonRequestFactoryBase.json +1 -1
  95. package/build/contracts/WitOracleRadonRequestFactoryBaseUpgradable.json +1 -1
  96. package/build/contracts/WitOracleRadonRequestFactoryModals.json +2 -13
  97. package/build/contracts/WitOracleRadonRequestFactoryModalsDefault.json +2 -13
  98. package/build/contracts/WitOracleRadonRequestFactoryTemplates.json +2 -13
  99. package/build/contracts/WitOracleRadonRequestFactoryTemplatesDefault.json +2 -13
  100. package/build/contracts/WitOracleRadonRequestFactoryUpgradableConfluxCore.json +1 -1
  101. package/build/contracts/WitOracleRadonRequestFactoryUpgradableDefault.json +2 -13
  102. package/build/contracts/WitOracleResultStatusLib.json +2 -14
  103. package/build/contracts/WitOracleTrustableDefault.json +2 -259
  104. package/build/contracts/WitOracleTrustableExperimental.json +1 -1
  105. package/build/contracts/WitOracleTrustableObscuro.json +1 -1
  106. package/build/contracts/WitOracleTrustableOvm2.json +1 -1
  107. package/build/contracts/WitOracleTrustablePushOnly.json +1 -1
  108. package/build/contracts/WitOracleTrustableReef.json +1 -1
  109. package/build/contracts/WitOracleTrustableZkSync.json +1 -1
  110. package/build/contracts/WitOracleTrustlessDataLib.json +1 -1
  111. package/build/contracts/WitOracleTrustlessDefaultV22.json +1 -1
  112. package/build/contracts/WitOracleTrustlessUpgradableDefault.json +1 -1
  113. package/build/contracts/WitPriceFeeds.json +2 -13
  114. package/build/contracts/WitPriceFeedsDataLib.json +2 -14
  115. package/build/contracts/WitPriceFeedsLegacy.json +2 -8
  116. package/build/contracts/WitPriceFeedsLegacyDataLib.json +2 -84
  117. package/build/contracts/WitPriceFeedsLegacyUpgradable.json +1 -1
  118. package/build/contracts/WitPriceFeedsLegacyUpgradableBypass.json +2 -80
  119. package/build/contracts/WitPriceFeedsSolverBase.json +1 -1
  120. package/build/contracts/WitPriceFeedsV3.json +1 -1
  121. package/build/contracts/WitPriceFeedsV3Upgradable.json +2 -17
  122. package/build/contracts/WitPythChainlinkAggregator.json +1 -1
  123. package/build/contracts/WitRandomness.json +2 -13
  124. package/build/contracts/WitRandomnessLegacy.json +1 -1
  125. package/build/contracts/WitRandomnessV3.json +2 -13
  126. package/build/contracts/WitRngConsumer.json +1 -1
  127. package/build/contracts/Witnet.json +1 -1
  128. package/build/contracts/WitnetBuffer.json +1 -1
  129. package/build/contracts/WitnetCBOR.json +1 -1
  130. package/build/contracts/WitnetDeployer.json +2 -13
  131. package/build/contracts/WitnetDeployerConfluxCore.json +1 -1
  132. package/build/contracts/WitnetDeployerDeferred.json +1 -1
  133. package/build/contracts/WitnetDeployerMeter.json +1 -1
  134. package/build/contracts/WitnetProxy.json +2 -9
  135. package/build/contracts/WitnetUpgradableBase.json +1 -1
  136. package/{migrations → dist/migrations}/addresses.json +1 -25
  137. package/{migrations → dist/migrations}/constructorArgs.json +1 -6
  138. package/dist/migrations/settings/artifacts.d.ts +95 -0
  139. package/dist/migrations/settings/artifacts.d.ts.map +1 -0
  140. package/dist/migrations/settings/artifacts.js +80 -0
  141. package/dist/migrations/settings/networks.d.ts +593 -0
  142. package/dist/migrations/settings/networks.d.ts.map +1 -0
  143. package/dist/migrations/settings/networks.js +593 -0
  144. package/dist/src/bin/helpers.cjs +350 -0
  145. package/dist/src/bin/helpers.d.cts +76 -0
  146. package/dist/src/bin/helpers.d.cts.map +1 -0
  147. package/dist/src/index.d.ts +6 -0
  148. package/dist/src/index.d.ts.map +1 -0
  149. package/dist/src/index.js +33 -0
  150. package/dist/src/lib/types.d.ts +99 -0
  151. package/dist/src/lib/types.d.ts.map +1 -0
  152. package/dist/src/lib/types.js +18 -0
  153. package/dist/src/lib/utils.d.ts +22 -0
  154. package/dist/src/lib/utils.d.ts.map +1 -0
  155. package/dist/src/lib/utils.js +267 -0
  156. package/dist/src/lib/wrappers/ContractWrapper.d.ts +47 -0
  157. package/dist/src/lib/wrappers/ContractWrapper.d.ts.map +1 -0
  158. package/dist/src/lib/wrappers/ContractWrapper.js +81 -0
  159. package/dist/src/lib/wrappers/WitAppliance.d.ts +7 -0
  160. package/dist/src/lib/wrappers/WitAppliance.d.ts.map +1 -0
  161. package/dist/src/lib/wrappers/WitAppliance.js +17 -0
  162. package/dist/src/lib/wrappers/WitArtifact.d.ts +6 -0
  163. package/dist/src/lib/wrappers/WitArtifact.d.ts.map +1 -0
  164. package/dist/src/lib/wrappers/WitArtifact.js +16 -0
  165. package/dist/src/lib/wrappers/WitOracle.d.ts +105 -0
  166. package/dist/src/lib/wrappers/WitOracle.d.ts.map +1 -0
  167. package/dist/src/lib/wrappers/WitOracle.js +217 -0
  168. package/dist/src/lib/wrappers/WitOracleConsumer.d.ts +16 -0
  169. package/dist/src/lib/wrappers/WitOracleConsumer.d.ts.map +1 -0
  170. package/dist/src/lib/wrappers/WitOracleConsumer.js +30 -0
  171. package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts +102 -0
  172. package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts.map +1 -0
  173. package/dist/src/lib/wrappers/WitOracleRadonRegistry.js +140 -0
  174. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts +81 -0
  175. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts.map +1 -0
  176. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.js +257 -0
  177. package/dist/src/lib/wrappers/WitPriceFeeds.d.ts +91 -0
  178. package/dist/src/lib/wrappers/WitPriceFeeds.d.ts.map +1 -0
  179. package/dist/src/lib/wrappers/WitPriceFeeds.js +356 -0
  180. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts +14 -0
  181. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts.map +1 -0
  182. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.js +64 -0
  183. package/dist/src/lib/wrappers/WitRandomness.d.ts +55 -0
  184. package/dist/src/lib/wrappers/WitRandomness.d.ts.map +1 -0
  185. package/dist/src/lib/wrappers/WitRandomness.js +165 -0
  186. package/dist/src/lib/wrappers.d.ts +8 -0
  187. package/dist/src/lib/wrappers.d.ts.map +1 -0
  188. package/dist/src/lib/wrappers.js +8 -0
  189. package/package.json +78 -54
  190. package/scripts/clean.cjs +21 -0
  191. package/scripts/eth-create2.cjs +38 -0
  192. package/scripts/eth-create3.cjs +45 -0
  193. package/scripts/postinstall.cjs +9 -0
  194. package/scripts/prepare.cjs +27 -0
  195. package/scripts/vanity2gen.cjs +121 -0
  196. package/scripts/vanity3gen.cjs +84 -0
  197. package/scripts/verify-proxies.cjs +50 -0
  198. package/scripts/verify-truffle.cjs +69 -0
  199. package/scripts/verify.js +95 -0
  200. package/scripts/wof-acls.js +17 -0
  201. package/src/bin/bots/bridge.cjs +0 -0
  202. package/src/bin/bots/randomizer.cjs +290 -0
  203. package/src/bin/bots/reporter.cjs +0 -0
  204. package/src/bin/cli/accounts.cjs +47 -0
  205. package/src/bin/cli/assets.cjs +466 -0
  206. package/src/bin/cli/framework.cjs +100 -0
  207. package/src/bin/cli/gateway.cjs +26 -0
  208. package/src/bin/cli/networks.cjs +63 -0
  209. package/src/bin/cli/priceFeeds.cjs +170 -0
  210. package/src/bin/cli/queries.cjs +217 -0
  211. package/src/bin/cli/randomness.cjs +367 -0
  212. package/src/bin/cli/reports.cjs +272 -0
  213. package/src/bin/cli/wizard.cjs +352 -0
  214. package/src/bin/helpers.cjs +388 -0
  215. package/src/bin/index.cjs +407 -0
  216. package/settings/artifacts.js +0 -71
  217. package/settings/index.js +0 -49
  218. package/settings/networks.js +0 -593
  219. package/settings/solidity.js +0 -11
  220. package/settings/specs.js +0 -102
  221. package/src/index.js +0 -96
  222. package/src/utils.js +0 -305
@@ -0,0 +1,105 @@
1
+ import type { Witnet } from "@witnet/sdk";
2
+ import { type BlockTag, type JsonRpcSigner } from "ethers";
3
+ import type { WitOracleQuery, WitOracleQueryParams, WitOracleQueryResponse, WitOracleQueryStatus } from "../types.js";
4
+ import { WitArtifact } from "./WitArtifact.js";
5
+ import { WitOracleConsumer } from "./WitOracleConsumer.js";
6
+ import { WitOracleRadonRegistry } from "./WitOracleRadonRegistry.js";
7
+ import { WitOracleRadonRequestFactory, WitOracleRadonRequestModal, WitOracleRadonRequestTemplate } from "./WitOracleRadonRequestFactory.js";
8
+ import { WitPriceFeeds } from "./WitPriceFeeds.js";
9
+ import { WitPriceFeedsLegacy } from "./WitPriceFeedsLegacy.js";
10
+ import { WitRandomness } from "./WitRandomness.js";
11
+ /**
12
+ * Wrapper class for the Wit/Oracle contract as deployed in some specified EVM network.
13
+ * It provides wrappers to other main artifacts of the Wit/Oracle Framework, as well
14
+ * as factory methods for wrapping existing `WitOracleRadonRequestTemplate` and `WitOracleConsumer`
15
+ * compliant contracts, provably bound to the Wit/Oracle core contract.
16
+ *
17
+ */
18
+ export declare class WitOracle extends WitArtifact {
19
+ constructor(signer: JsonRpcSigner, network: string);
20
+ /**
21
+ * Create a WitOracle attached to the Wit/Oracle main address on the connected EVM network.
22
+ * Fails if the EVM network served at the specified JSON ETH/RPC endpoint, is not currently bridged
23
+ * to the Witnet blockchain.
24
+ * @param url ETH/RPC endpoint URL.
25
+ * @param signer Specific signer address, other than default, to use for signing EVM transactions.
26
+ */
27
+ static fromJsonRpcUrl(url: string, signerId?: number | string): Promise<WitOracle>;
28
+ estimateBaseFee(evmGasPrice: bigint): Promise<bigint>;
29
+ estimateBaseFeeWithCallback(evmGasPrice: bigint, evmCallbackGas: number): Promise<bigint>;
30
+ estimateExtraFee(evmGasPrice: bigint, evmWitPrice: bigint, queryParams: WitOracleQueryParams): Promise<bigint>;
31
+ filterWitOracleQueryEvents(options: {
32
+ fromBlock: BlockTag;
33
+ toBlock?: BlockTag;
34
+ where?: {
35
+ evmRequester?: string;
36
+ queryRadHash?: Witnet.Hash;
37
+ };
38
+ }): Promise<Array<{
39
+ evmBlockNumber: bigint;
40
+ evmRequester: string;
41
+ evmTransactionHash: string;
42
+ queryId: bigint;
43
+ queryRadHash: Witnet.Hash;
44
+ queryParams: WitOracleQueryParams;
45
+ }>>;
46
+ filterWitOracleReportEvents(options: {
47
+ fromBlock: BlockTag;
48
+ toBlock?: BlockTag;
49
+ where?: {
50
+ evmOrigin?: string;
51
+ evmConsumer?: string;
52
+ queryRadHash?: Witnet.Hash;
53
+ };
54
+ }): Promise<Array<{
55
+ evmBlockNumber: bigint;
56
+ evmOrigin: string;
57
+ evmConsumer: string;
58
+ evmReporter: string;
59
+ evmTransactionHash: string;
60
+ witDrTxHash: Witnet.Hash;
61
+ queryRadHash: Witnet.Hash;
62
+ queryParams: WitOracleQueryParams;
63
+ resultCborBytes: Witnet.HexString;
64
+ resultTimestamp: number;
65
+ }>>;
66
+ getEvmChainId(): Promise<number>;
67
+ getEvmChannel(): Promise<Witnet.HexString>;
68
+ getNextQueryId(): Promise<bigint>;
69
+ getQuery(queryId: bigint): Promise<WitOracleQuery>;
70
+ getQueryResponse(queryId: bigint): Promise<WitOracleQueryResponse>;
71
+ getQueryResultStatusDescription(queryId: bigint): Promise<string>;
72
+ getQueryStatuses(queryIds: bigint[]): Promise<Array<WitOracleQueryStatus>>;
73
+ getWitOracleConsumerAt(target: string): Promise<WitOracleConsumer>;
74
+ /**
75
+ * Wrapper class for the Wit/Oracle Radon Registry core contract as deployed in some supported EVM network.
76
+ * It allows formal verification of Radon Requests and Witnet-compliant data sources into such network,
77
+ * as to be securely referred on both Wit/Oracle queries pulled from within smart contracts,
78
+ * or Wit/Oracle query results pushed into smart contracts from offchain workflows.
79
+ */
80
+ getWitOracleRadonRegistry(): Promise<WitOracleRadonRegistry>;
81
+ /**
82
+ * Wrapper class for the Wit/Oracle Request Factory core contract as deployed in some supported EVM network.
83
+ * It allows construction of `WitOracleRadonRequestTemplate` minimal-proxy contracts out of one ore more
84
+ * parameterized Radon Retievals (Witnet-compliant data sources). Template addresses are counter-factual to
85
+ * the set of data sources they are built on.
86
+ */
87
+ getWitOracleRadonRequestFactory(): Promise<WitOracleRadonRequestFactory>;
88
+ /**
89
+ * Wrapper class for Wit/Oracle Radon Template artifacts as deployed in some supported EVM network.
90
+ * `IWitOracleRadonRequestTemplate` contracts enable smart contracts to formally verify Radon Requests
91
+ * built out out of a set of parameterized Witnet-compliant data sources, on the fly.
92
+ */
93
+ getWitOracleRadonRequestTemplateAt(target: string): Promise<WitOracleRadonRequestTemplate>;
94
+ /**
95
+ * Wrapper class for Wit/Oracle Radon Modal artifacts as deployed in some supported EVM network.
96
+ * `IWitOracleRadonRequestModal` contracts enable smart contracts to formally verify Radon Requests
97
+ * built out out of a single Radon Retrieval and multiple data providers, all of them expected to
98
+ * provided exactly the same data.
99
+ */
100
+ getWitOracleRadonRequestModalAt(target: string): Promise<WitOracleRadonRequestModal>;
101
+ getWitPriceFeedsAt(target: string): Promise<WitPriceFeeds>;
102
+ getWitPriceFeedsLegacyAt(target: string): Promise<WitPriceFeedsLegacy>;
103
+ getWitRandomnessAt(target: string): Promise<WitRandomness>;
104
+ }
105
+ //# sourceMappingURL=WitOracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WitOracle.d.ts","sourceRoot":"","sources":["../../../../src/lib/wrappers/WitOracle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ import { Contract, JsonRpcProvider, } from "ethers";
2
+ import { abiDecodeQueryStatus, abiEncodeWitOracleQueryParams, getEvmNetworkByChainId, } from "../utils.js";
3
+ import { WitArtifact } from "./WitArtifact.js";
4
+ import { WitOracleConsumer } from "./WitOracleConsumer.js";
5
+ import { WitOracleRadonRegistry } from "./WitOracleRadonRegistry.js";
6
+ import { WitOracleRadonRequestFactory, WitOracleRadonRequestModal, WitOracleRadonRequestTemplate, } from "./WitOracleRadonRequestFactory.js";
7
+ import { WitPriceFeeds } from "./WitPriceFeeds.js";
8
+ import { WitPriceFeedsLegacy } from "./WitPriceFeedsLegacy.js";
9
+ import { WitRandomness } from "./WitRandomness.js";
10
+ /**
11
+ * Wrapper class for the Wit/Oracle contract as deployed in some specified EVM network.
12
+ * It provides wrappers to other main artifacts of the Wit/Oracle Framework, as well
13
+ * as factory methods for wrapping existing `WitOracleRadonRequestTemplate` and `WitOracleConsumer`
14
+ * compliant contracts, provably bound to the Wit/Oracle core contract.
15
+ *
16
+ */
17
+ export class WitOracle extends WitArtifact {
18
+ constructor(signer, network) {
19
+ super(signer, network, "WitOracle");
20
+ }
21
+ /**
22
+ * Create a WitOracle attached to the Wit/Oracle main address on the connected EVM network.
23
+ * Fails if the EVM network served at the specified JSON ETH/RPC endpoint, is not currently bridged
24
+ * to the Witnet blockchain.
25
+ * @param url ETH/RPC endpoint URL.
26
+ * @param signer Specific signer address, other than default, to use for signing EVM transactions.
27
+ */
28
+ static async fromJsonRpcUrl(url, signerId) {
29
+ const provider = new JsonRpcProvider(url, undefined, {
30
+ pollingInterval: 5000,
31
+ });
32
+ const signer = await provider.getSigner(signerId);
33
+ const chainId = Number((await provider.getNetwork()).chainId);
34
+ const network = getEvmNetworkByChainId(chainId);
35
+ if (!network) {
36
+ throw new Error(`WitOracle: unsupported chain id: ${chainId}`);
37
+ }
38
+ return new WitOracle(signer, network);
39
+ }
40
+ async estimateBaseFee(evmGasPrice) {
41
+ return this.contract
42
+ .getFunction("estimateBaseFee(uint256)")
43
+ .staticCall(evmGasPrice);
44
+ }
45
+ async estimateBaseFeeWithCallback(evmGasPrice, evmCallbackGas) {
46
+ return this.contract
47
+ .getFunction("estimateBaseFeeWithCallback(uint256,uint24)")
48
+ .staticCall(evmGasPrice, evmCallbackGas);
49
+ }
50
+ async estimateExtraFee(evmGasPrice, evmWitPrice, queryParams) {
51
+ return this.contract
52
+ .getFunction("estimateExtraFee(uint256,uint256,(uint16,uint16,uint64)")
53
+ .staticCall(evmGasPrice, evmWitPrice, abiEncodeWitOracleQueryParams(queryParams));
54
+ }
55
+ async filterWitOracleQueryEvents(options) {
56
+ const witOracleQueryEvent = this.contract.filters["WitOracleQuery(address indexed,uint256,uint256,uint64,bytes32,(uint16,uint16,uint64))"](options?.where?.evmRequester);
57
+ return this.contract
58
+ .queryFilter(witOracleQueryEvent, options.fromBlock, options?.toBlock)
59
+ .then((logs) => logs.filter((log) => !log.removed &&
60
+ // && (!options?.where?.evmRequester || (log as EventLog).args?.requester === options.where.evmRequester)
61
+ (!options?.where?.queryRadHash ||
62
+ log.args?.radonHash.indexOf(options.where.queryRadHash) >= 0)))
63
+ .then((logs) => logs.map((log) => ({
64
+ evmBlockNumber: BigInt(log.blockNumber),
65
+ evmRequester: log.args?.evmRequester,
66
+ evmTransactionHash: log.transactionHash,
67
+ queryId: BigInt(log.args.queryId),
68
+ queryRadHash: log.args.radonHash,
69
+ queryParams: {
70
+ witnesses: log.args.radonParams[1],
71
+ unitaryReward: BigInt(log.args.radonParams[2]),
72
+ resultMaxSize: log.args.radonParams[0],
73
+ },
74
+ })));
75
+ }
76
+ async filterWitOracleReportEvents(options) {
77
+ const witOracleReportEvent = this.contract.filters.WitOracleReport(options?.where?.evmOrigin, options?.where?.evmConsumer);
78
+ return this.contract
79
+ .queryFilter(witOracleReportEvent, options.fromBlock, options?.toBlock)
80
+ .then((logs) => logs.filter((log) => !log.removed &&
81
+ (!options?.where?.queryRadHash ||
82
+ log.args?.queryRadHash.indexOf(options.where.queryRadHash) >= 0)))
83
+ .then((logs) => logs.map((log) => ({
84
+ evmBlockNumber: BigInt(log.blockNumber),
85
+ evmOrigin: log.args.evmOrigin,
86
+ evmConsumer: log.args.evmConsumer,
87
+ evmReporter: log.args.evmReporter,
88
+ evmTransactionHash: log.transactionHash,
89
+ witDrTxHash: log.args.witDrTxHash,
90
+ queryRadHash: log.args.queryRadHash,
91
+ queryParams: {
92
+ witnesses: log.args.queryParams[1],
93
+ unitaryReward: BigInt(log.args.queryParams[2]),
94
+ resultMaxSize: log.args.queryParams[0],
95
+ },
96
+ resultCborBytes: log.args.resultCborBytes,
97
+ resultTimestamp: Number(log.args.resultTimestamp),
98
+ })));
99
+ }
100
+ async getEvmChainId() {
101
+ return this.provider.getNetwork().then((network) => Number(network.chainId));
102
+ }
103
+ async getEvmChannel() {
104
+ return this.contract.getFunction("channel()").staticCall();
105
+ }
106
+ async getNextQueryId() {
107
+ return this.contract.getFunction("getNextQueryId()").staticCall();
108
+ }
109
+ async getQuery(queryId) {
110
+ return this.contract.getQuery.staticCall(queryId).then((result) => ({
111
+ checkpoint: BigInt(result[5]),
112
+ hash: result[3],
113
+ params: {
114
+ resultMaxSize: result[2][0],
115
+ unitaryReward: result[2][2],
116
+ witnesses: result[2][1],
117
+ },
118
+ request: {
119
+ callbackGas: Number(result[0][1]),
120
+ radonHash: result[0][3],
121
+ requester: result[0][0],
122
+ },
123
+ response: {
124
+ disputer: result[1][4],
125
+ reporter: result[1][0],
126
+ resultTimestamp: Number(result[1][1].toString()),
127
+ resultDrTxHash: result[1][2],
128
+ resultCborBytes: result[1][3],
129
+ },
130
+ }));
131
+ }
132
+ async getQueryResponse(queryId) {
133
+ return this.contract.getQueryResponse
134
+ .staticCall(queryId)
135
+ .then((result) => ({
136
+ disputer: result[4],
137
+ reporter: result[0],
138
+ resultTimestamp: Number(result[1].toString()),
139
+ resultDrTxHash: result[2],
140
+ resultCborBytes: result[3],
141
+ }));
142
+ }
143
+ async getQueryResultStatusDescription(queryId) {
144
+ let reason;
145
+ try {
146
+ try {
147
+ reason =
148
+ await this.contract.getQueryResultStatusDescription.staticCall(queryId);
149
+ }
150
+ catch {
151
+ const legacy = new Contract(this.address, [
152
+ "function getQueryResultError(uint256) public view returns ((uint8,string))",
153
+ ], this.signer);
154
+ reason = await legacy.getQueryResultError
155
+ .staticCall(queryId)
156
+ .then((result) => result[1]);
157
+ }
158
+ }
159
+ catch {
160
+ reason = "(unparsable error)";
161
+ }
162
+ return reason;
163
+ }
164
+ async getQueryStatuses(queryIds) {
165
+ return this.contract.getQueryStatusBatch
166
+ .staticCall(queryIds)
167
+ .then((statuses) => statuses.map((value) => abiDecodeQueryStatus(value)));
168
+ }
169
+ async getWitOracleConsumerAt(target) {
170
+ return WitOracleConsumer.at(this, target);
171
+ }
172
+ /**
173
+ * Wrapper class for the Wit/Oracle Radon Registry core contract as deployed in some supported EVM network.
174
+ * It allows formal verification of Radon Requests and Witnet-compliant data sources into such network,
175
+ * as to be securely referred on both Wit/Oracle queries pulled from within smart contracts,
176
+ * or Wit/Oracle query results pushed into smart contracts from offchain workflows.
177
+ */
178
+ async getWitOracleRadonRegistry() {
179
+ return new WitOracleRadonRegistry(this.signer, this.network);
180
+ }
181
+ /**
182
+ * Wrapper class for the Wit/Oracle Request Factory core contract as deployed in some supported EVM network.
183
+ * It allows construction of `WitOracleRadonRequestTemplate` minimal-proxy contracts out of one ore more
184
+ * parameterized Radon Retievals (Witnet-compliant data sources). Template addresses are counter-factual to
185
+ * the set of data sources they are built on.
186
+ */
187
+ async getWitOracleRadonRequestFactory() {
188
+ return WitOracleRadonRequestFactory.deployed(this, await this.getWitOracleRadonRegistry());
189
+ }
190
+ /**
191
+ * Wrapper class for Wit/Oracle Radon Template artifacts as deployed in some supported EVM network.
192
+ * `IWitOracleRadonRequestTemplate` contracts enable smart contracts to formally verify Radon Requests
193
+ * built out out of a set of parameterized Witnet-compliant data sources, on the fly.
194
+ */
195
+ async getWitOracleRadonRequestTemplateAt(target) {
196
+ return WitOracleRadonRequestTemplate.at(this, target);
197
+ }
198
+ /**
199
+ * Wrapper class for Wit/Oracle Radon Modal artifacts as deployed in some supported EVM network.
200
+ * `IWitOracleRadonRequestModal` contracts enable smart contracts to formally verify Radon Requests
201
+ * built out out of a single Radon Retrieval and multiple data providers, all of them expected to
202
+ * provided exactly the same data.
203
+ */
204
+ async getWitOracleRadonRequestModalAt(target) {
205
+ return WitOracleRadonRequestModal.arguments(this, target);
206
+ }
207
+ async getWitPriceFeedsAt(target) {
208
+ return WitPriceFeeds.at(this, target);
209
+ }
210
+ async getWitPriceFeedsLegacyAt(target) {
211
+ return WitPriceFeedsLegacy.at(this, target);
212
+ }
213
+ async getWitRandomnessAt(target) {
214
+ return WitRandomness.at(this, target);
215
+ }
216
+ }
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2l0T3JhY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi93cmFwcGVycy9XaXRPcmFjbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVOLFFBQVEsRUFFUixlQUFlLEdBRWYsTUFBTSxRQUFRLENBQUE7QUFPZixPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLDZCQUE2QixFQUM3QixzQkFBc0IsR0FDdEIsTUFBTSxhQUFhLENBQUE7QUFFcEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ3BFLE9BQU8sRUFDTiw0QkFBNEIsRUFDNUIsMEJBQTBCLEVBQzFCLDZCQUE2QixHQUM3QixNQUFNLG1DQUFtQyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFbEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFNBQVUsU0FBUSxXQUFXO0lBQ3pDLFlBQVksTUFBcUIsRUFBRSxPQUFlO1FBQ2pELEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FDakMsR0FBVyxFQUNYLFFBQTBCO1FBRTFCLE1BQU0sUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUU7WUFDcEQsZUFBZSxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxNQUFNLEdBQUcs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QUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBYztRQUM3QyxPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV2l0bmV0IH0gZnJvbSBcIkB3aXRuZXQvc2RrXCJcbmltcG9ydCB7XG5cdHR5cGUgQmxvY2tUYWcsXG5cdENvbnRyYWN0LFxuXHR0eXBlIEV2ZW50TG9nLFxuXHRKc29uUnBjUHJvdmlkZXIsXG5cdHR5cGUgSnNvblJwY1NpZ25lcixcbn0gZnJvbSBcImV0aGVyc1wiXG5pbXBvcnQgdHlwZSB7XG5cdFdpdE9yYWNsZVF1ZXJ5LFxuXHRXaXRPcmFjbGVRdWVyeVBhcmFtcyxcblx0V2l0T3JhY2xlUXVlcnlSZXNwb25zZSxcblx0V2l0T3JhY2xlUXVlcnlTdGF0dXMsXG59IGZyb20gXCIuLi90eXBlcy5qc1wiXG5pbXBvcnQge1xuXHRhYmlEZWNvZGVRdWVyeVN0YXR1cyxcblx0YWJpRW5jb2RlV2l0T3JhY2xlUXVlcnlQYXJhbXMsXG5cdGdldEV2bU5ldHdvcmtCeUNoYWluSWQsXG59IGZyb20gXCIuLi91dGlscy5qc1wiXG5cbmltcG9ydCB7IFdpdEFydGlmYWN0IH0gZnJvbSBcIi4vV2l0QXJ0aWZhY3QuanNcIlxuaW1wb3J0IHsgV2l0T3JhY2xlQ29uc3VtZXIgfSBmcm9tIFwiLi9XaXRPcmFjbGVDb25zdW1lci5qc1wiXG5pbXBvcnQgeyBXaXRPcmFjbGVSYWRvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vV2l0T3JhY2xlUmFkb25SZWdpc3RyeS5qc1wiXG5pbXBvcnQge1xuXHRXaXRPcmFjbGVSYWRvblJlcXVlc3RGYWN0b3J5LFxuXHRXaXRPcmFjbGVSYWRvblJlcXVlc3RNb2RhbCxcblx0V2l0T3JhY2xlUmFkb25SZXF1ZXN0VGVtcGxhdGUsXG59IGZyb20gXCIuL1dpdE9yYWNsZVJhZG9uUmVxdWVzdEZhY3RvcnkuanNcIlxuaW1wb3J0IHsgV2l0UHJpY2VGZWVkcyB9IGZyb20gXCIuL1dpdFByaWNlRmVlZHMuanNcIlxuaW1wb3J0IHsgV2l0UHJpY2VGZWVkc0xlZ2FjeSB9IGZyb20gXCIuL1dpdFByaWNlRmVlZHNMZWdhY3kuanNcIlxuaW1wb3J0IHsgV2l0UmFuZG9tbmVzcyB9IGZyb20gXCIuL1dpdFJhbmRvbW5lc3MuanNcIlxuXG4vKipcbiAqIFdyYXBwZXIgY2xhc3MgZm9yIHRoZSBXaXQvT3JhY2xlIGNvbnRyYWN0IGFzIGRlcGxveWVkIGluIHNvbWUgc3BlY2lmaWVkIEVWTSBuZXR3b3JrLlxuICogSXQgcHJvdmlkZXMgd3JhcHBlcnMgdG8gb3RoZXIgbWFpbiBhcnRpZmFjdHMgb2YgdGhlIFdpdC9PcmFjbGUgRnJhbWV3b3JrLCBhcyB3ZWxsXG4gKiBhcyBmYWN0b3J5IG1ldGhvZHMgZm9yIHdyYXBwaW5nIGV4aXN0aW5nIGBXaXRPcmFjbGVSYWRvblJlcXVlc3RUZW1wbGF0ZWAgYW5kIGBXaXRPcmFjbGVDb25zdW1lcmBcbiAqIGNvbXBsaWFudCBjb250cmFjdHMsIHByb3ZhYmx5IGJvdW5kIHRvIHRoZSBXaXQvT3JhY2xlIGNvcmUgY29udHJhY3QuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgV2l0T3JhY2xlIGV4dGVuZHMgV2l0QXJ0aWZhY3Qge1xuXHRjb25zdHJ1Y3RvcihzaWduZXI6IEpzb25ScGNTaWduZXIsIG5ldHdvcms6IHN0cmluZykge1xuXHRcdHN1cGVyKHNpZ25lciwgbmV0d29yaywgXCJXaXRPcmFjbGVcIilcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBXaXRPcmFjbGUgYXR0YWNoZWQgdG8gdGhlIFdpdC9PcmFjbGUgbWFpbiBhZGRyZXNzIG9uIHRoZSBjb25uZWN0ZWQgRVZNIG5ldHdvcmsuXG5cdCAqIEZhaWxzIGlmIHRoZSBFVk0gbmV0d29yayBzZXJ2ZWQgYXQgdGhlIHNwZWNpZmllZCBKU09OIEVUSC9SUEMgZW5kcG9pbnQsIGlzIG5vdCBjdXJyZW50bHkgYnJpZGdlZFxuXHQgKiB0byB0aGUgV2l0bmV0IGJsb2NrY2hhaW4uXG5cdCAqIEBwYXJhbSB1cmwgRVRIL1JQQyBlbmRwb2ludCBVUkwuXG5cdCAqIEBwYXJhbSBzaWduZXIgU3BlY2lmaWMgc2lnbmVyIGFkZHJlc3MsIG90aGVyIHRoYW4gZGVmYXVsdCwgdG8gdXNlIGZvciBzaWduaW5nIEVWTSB0cmFuc2FjdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGFzeW5jIGZyb21Kc29uUnBjVXJsKFxuXHRcdHVybDogc3RyaW5nLFxuXHRcdHNpZ25lcklkPzogbnVtYmVyIHwgc3RyaW5nLFxuXHQpOiBQcm9taXNlPFdpdE9yYWNsZT4ge1xuXHRcdGNvbnN0IHByb3ZpZGVyID0gbmV3IEpzb25ScGNQcm92aWRlcih1cmwsIHVuZGVmaW5lZCwge1xuXHRcdFx0cG9sbGluZ0ludGVydmFsOiA1MDAwLFxuXHRcdH0pXG5cdFx0Y29uc3Qgc2lnbmVyID0gYXdhaXQgcHJvdmlkZXIuZ2V0U2lnbmVyKHNpZ25lcklkKVxuXHRcdGNvbnN0IGNoYWluSWQgPSBOdW1iZXIoKGF3YWl0IHByb3ZpZGVyLmdldE5ldHdvcmsoKSkuY2hhaW5JZClcblx0XHRjb25zdCBuZXR3b3JrID0gZ2V0RXZtTmV0d29ya0J5Q2hhaW5JZChjaGFpbklkKVxuXHRcdGlmICghbmV0d29yaykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBXaXRPcmFjbGU6IHVuc3VwcG9ydGVkIGNoYWluIGlkOiAke2NoYWluSWR9YClcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBXaXRPcmFjbGUoc2lnbmVyLCBuZXR3b3JrKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGVzdGltYXRlQmFzZUZlZShldm1HYXNQcmljZTogYmlnaW50KTogUHJvbWlzZTxiaWdpbnQ+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdFxuXHRcdFx0LmdldEZ1bmN0aW9uKFwiZXN0aW1hdGVCYXNlRmVlKHVpbnQyNTYpXCIpXG5cdFx0XHQuc3RhdGljQ2FsbChldm1HYXNQcmljZSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBlc3RpbWF0ZUJhc2VGZWVXaXRoQ2FsbGJhY2soXG5cdFx0ZXZtR2FzUHJpY2U6IGJpZ2ludCxcblx0XHRldm1DYWxsYmFja0dhczogbnVtYmVyLFxuXHQpOiBQcm9taXNlPGJpZ2ludD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0XG5cdFx0XHQuZ2V0RnVuY3Rpb24oXCJlc3RpbWF0ZUJhc2VGZWVXaXRoQ2FsbGJhY2sodWludDI1Nix1aW50MjQpXCIpXG5cdFx0XHQuc3RhdGljQ2FsbChldm1HYXNQcmljZSwgZXZtQ2FsbGJhY2tHYXMpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZXN0aW1hdGVFeHRyYUZlZShcblx0XHRldm1HYXNQcmljZTogYmlnaW50LFxuXHRcdGV2bVdpdFByaWNlOiBiaWdpbnQsXG5cdFx0cXVlcnlQYXJhbXM6IFdpdE9yYWNsZVF1ZXJ5UGFyYW1zLFxuXHQpOiBQcm9taXNlPGJpZ2ludD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0XG5cdFx0XHQuZ2V0RnVuY3Rpb24oXCJlc3RpbWF0ZUV4dHJhRmVlKHVpbnQyNTYsdWludDI1NiwodWludDE2LHVpbnQxNix1aW50NjQpXCIpXG5cdFx0XHQuc3RhdGljQ2FsbChcblx0XHRcdFx0ZXZtR2FzUHJpY2UsXG5cdFx0XHRcdGV2bVdpdFByaWNlLFxuXHRcdFx0XHRhYmlFbmNvZGVXaXRPcmFjbGVRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcyksXG5cdFx0XHQpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZmlsdGVyV2l0T3JhY2xlUXVlcnlFdmVudHMob3B0aW9uczoge1xuXHRcdGZyb21CbG9jazogQmxvY2tUYWdcblx0XHR0b0Jsb2NrPzogQmxvY2tUYWdcblx0XHR3aGVyZT86IHtcblx0XHRcdGV2bVJlcXVlc3Rlcj86IHN0cmluZ1xuXHRcdFx0cXVlcnlSYWRIYXNoPzogV2l0bmV0Lkhhc2hcblx0XHR9XG5cdH0pOiBQcm9taXNlPFxuXHRcdEFycmF5PHtcblx0XHRcdGV2bUJsb2NrTnVtYmVyOiBiaWdpbnRcblx0XHRcdGV2bVJlcXVlc3Rlcjogc3RyaW5nXG5cdFx0XHRldm1UcmFuc2FjdGlvbkhhc2g6IHN0cmluZ1xuXHRcdFx0cXVlcnlJZDogYmlnaW50XG5cdFx0XHRxdWVyeVJhZEhhc2g6IFdpdG5ldC5IYXNoXG5cdFx0XHRxdWVyeVBhcmFtczogV2l0T3JhY2xlUXVlcnlQYXJhbXNcblx0XHR9PlxuXHQ+IHtcblx0XHRjb25zdCB3aXRPcmFjbGVRdWVyeUV2ZW50ID0gdGhpcy5jb250cmFjdC5maWx0ZXJzW1xuXHRcdFx0XCJXaXRPcmFjbGVRdWVyeShhZGRyZXNzIGluZGV4ZWQsdWludDI1Nix1aW50MjU2LHVpbnQ2NCxieXRlczMyLCh1aW50MTYsdWludDE2LHVpbnQ2NCkpXCJcblx0XHRdKG9wdGlvbnM/LndoZXJlPy5ldm1SZXF1ZXN0ZXIpXG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3Rcblx0XHRcdC5xdWVyeUZpbHRlcih3aXRPcmFjbGVRdWVyeUV2ZW50LCBvcHRpb25zLmZyb21CbG9jaywgb3B0aW9ucz8udG9CbG9jaylcblx0XHRcdC50aGVuKChsb2dzKSA9PlxuXHRcdFx0XHRsb2dzLmZpbHRlcihcblx0XHRcdFx0XHQobG9nKSA9PlxuXHRcdFx0XHRcdFx0IWxvZy5yZW1vdmVkICYmXG5cdFx0XHRcdFx0XHQvLyAmJiAoIW9wdGlvbnM/LndoZXJlPy5ldm1SZXF1ZXN0ZXIgfHwgKGxvZyBhcyBFdmVudExvZykuYXJncz8ucmVxdWVzdGVyID09PSBvcHRpb25zLndoZXJlLmV2bVJlcXVlc3Rlcilcblx0XHRcdFx0XHRcdCghb3B0aW9ucz8ud2hlcmU/LnF1ZXJ5UmFkSGFzaCB8fFxuXHRcdFx0XHRcdFx0XHQobG9nIGFzIEV2ZW50TG9nKS5hcmdzPy5yYWRvbkhhc2guaW5kZXhPZihcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLndoZXJlLnF1ZXJ5UmFkSGFzaCxcblx0XHRcdFx0XHRcdFx0KSA+PSAwKSxcblx0XHRcdFx0KSxcblx0XHRcdClcblx0XHRcdC50aGVuKChsb2dzKSA9PlxuXHRcdFx0XHRsb2dzLm1hcCgobG9nKSA9PiAoe1xuXHRcdFx0XHRcdGV2bUJsb2NrTnVtYmVyOiBCaWdJbnQobG9nLmJsb2NrTnVtYmVyKSxcblx0XHRcdFx0XHRldm1SZXF1ZXN0ZXI6IChsb2cgYXMgRXZlbnRMb2cpLmFyZ3M/LmV2bVJlcXVlc3RlciBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0ZXZtVHJhbnNhY3Rpb25IYXNoOiBsb2cudHJhbnNhY3Rpb25IYXNoLFxuXHRcdFx0XHRcdHF1ZXJ5SWQ6IEJpZ0ludCgobG9nIGFzIEV2ZW50TG9nKS5hcmdzLnF1ZXJ5SWQpLFxuXHRcdFx0XHRcdHF1ZXJ5UmFkSGFzaDogKGxvZyBhcyBFdmVudExvZykuYXJncy5yYWRvbkhhc2ggYXMgV2l0bmV0Lkhhc2gsXG5cdFx0XHRcdFx0cXVlcnlQYXJhbXM6IHtcblx0XHRcdFx0XHRcdHdpdG5lc3NlczogKGxvZyBhcyBFdmVudExvZykuYXJncy5yYWRvblBhcmFtc1sxXSBhcyBudW1iZXIsXG5cdFx0XHRcdFx0XHR1bml0YXJ5UmV3YXJkOiBCaWdJbnQoKGxvZyBhcyBFdmVudExvZykuYXJncy5yYWRvblBhcmFtc1syXSksXG5cdFx0XHRcdFx0XHRyZXN1bHRNYXhTaXplOiAobG9nIGFzIEV2ZW50TG9nKS5hcmdzLnJhZG9uUGFyYW1zWzBdIGFzIG51bWJlcixcblx0XHRcdFx0XHR9IGFzIFdpdE9yYWNsZVF1ZXJ5UGFyYW1zLFxuXHRcdFx0XHR9KSksXG5cdFx0XHQpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZmlsdGVyV2l0T3JhY2xlUmVwb3J0RXZlbnRzKG9wdGlvbnM6IHtcblx0XHRmcm9tQmxvY2s6IEJsb2NrVGFnXG5cdFx0dG9CbG9jaz86IEJsb2NrVGFnXG5cdFx0d2hlcmU/OiB7XG5cdFx0XHRldm1PcmlnaW4/OiBzdHJpbmdcblx0XHRcdGV2bUNvbnN1bWVyPzogc3RyaW5nXG5cdFx0XHRxdWVyeVJhZEhhc2g/OiBXaXRuZXQuSGFzaFxuXHRcdH1cblx0fSk6IFByb21pc2U8XG5cdFx0QXJyYXk8e1xuXHRcdFx0ZXZtQmxvY2tOdW1iZXI6IGJpZ2ludFxuXHRcdFx0ZXZtT3JpZ2luOiBzdHJpbmdcblx0XHRcdGV2bUNvbnN1bWVyOiBzdHJpbmdcblx0XHRcdGV2bVJlcG9ydGVyOiBzdHJpbmdcblx0XHRcdGV2bVRyYW5zYWN0aW9uSGFzaDogc3RyaW5nXG5cdFx0XHR3aXREclR4SGFzaDogV2l0bmV0Lkhhc2hcblx0XHRcdHF1ZXJ5UmFkSGFzaDogV2l0bmV0Lkhhc2hcblx0XHRcdHF1ZXJ5UGFyYW1zOiBXaXRPcmFjbGVRdWVyeVBhcmFtc1xuXHRcdFx0cmVzdWx0Q2JvckJ5dGVzOiBXaXRuZXQuSGV4U3RyaW5nXG5cdFx0XHRyZXN1bHRUaW1lc3RhbXA6IG51bWJlclxuXHRcdH0+XG5cdD4ge1xuXHRcdGNvbnN0IHdpdE9yYWNsZVJlcG9ydEV2ZW50ID0gdGhpcy5jb250cmFjdC5maWx0ZXJzLldpdE9yYWNsZVJlcG9ydChcblx0XHRcdG9wdGlvbnM/LndoZXJlPy5ldm1PcmlnaW4sXG5cdFx0XHRvcHRpb25zPy53aGVyZT8uZXZtQ29uc3VtZXIsXG5cdFx0KVxuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0XG5cdFx0XHQucXVlcnlGaWx0ZXIod2l0T3JhY2xlUmVwb3J0RXZlbnQsIG9wdGlvbnMuZnJvbUJsb2NrLCBvcHRpb25zPy50b0Jsb2NrKVxuXHRcdFx0LnRoZW4oKGxvZ3MpID0+XG5cdFx0XHRcdGxvZ3MuZmlsdGVyKFxuXHRcdFx0XHRcdChsb2cpID0+XG5cdFx0XHRcdFx0XHQhbG9nLnJlbW92ZWQgJiZcblx0XHRcdFx0XHRcdCghb3B0aW9ucz8ud2hlcmU/LnF1ZXJ5UmFkSGFzaCB8fFxuXHRcdFx0XHRcdFx0XHQobG9nIGFzIEV2ZW50TG9nKS5hcmdzPy5xdWVyeVJhZEhhc2guaW5kZXhPZihcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLndoZXJlLnF1ZXJ5UmFkSGFzaCxcblx0XHRcdFx0XHRcdFx0KSA+PSAwKSxcblx0XHRcdFx0KSxcblx0XHRcdClcblx0XHRcdC50aGVuKChsb2dzKSA9PlxuXHRcdFx0XHRsb2dzLm1hcCgobG9nKSA9PiAoe1xuXHRcdFx0XHRcdGV2bUJsb2NrTnVtYmVyOiBCaWdJbnQobG9nLmJsb2NrTnVtYmVyKSxcblx0XHRcdFx0XHRldm1PcmlnaW46IChsb2cgYXMgRXZlbnRMb2cpLmFyZ3MuZXZtT3JpZ2luLFxuXHRcdFx0XHRcdGV2bUNvbnN1bWVyOiAobG9nIGFzIEV2ZW50TG9nKS5hcmdzLmV2bUNvbnN1bWVyLFxuXHRcdFx0XHRcdGV2bVJlcG9ydGVyOiAobG9nIGFzIEV2ZW50TG9nKS5hcmdzLmV2bVJlcG9ydGVyLFxuXHRcdFx0XHRcdGV2bVRyYW5zYWN0aW9uSGFzaDogbG9nLnRyYW5zYWN0aW9uSGFzaCxcblx0XHRcdFx0XHR3aXREclR4SGFzaDogKGxvZyBhcyBFdmVudExvZykuYXJncy53aXREclR4SGFzaCxcblx0XHRcdFx0XHRxdWVyeVJhZEhhc2g6IChsb2cgYXMgRXZlbnRMb2cpLmFyZ3MucXVlcnlSYWRIYXNoLFxuXHRcdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7XG5cdFx0XHRcdFx0XHR3aXRuZXNzZXM6IChsb2cgYXMgRXZlbnRMb2cpLmFyZ3MucXVlcnlQYXJhbXNbMV0gYXMgbnVtYmVyLFxuXHRcdFx0XHRcdFx0dW5pdGFyeVJld2FyZDogQmlnSW50KChsb2cgYXMgRXZlbnRMb2cpLmFyZ3MucXVlcnlQYXJhbXNbMl0pLFxuXHRcdFx0XHRcdFx0cmVzdWx0TWF4U2l6ZTogKGxvZyBhcyBFdmVudExvZykuYXJncy5xdWVyeVBhcmFtc1swXSBhcyBudW1iZXIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXN1bHRDYm9yQnl0ZXM6IChsb2cgYXMgRXZlbnRMb2cpLmFyZ3MucmVzdWx0Q2JvckJ5dGVzLFxuXHRcdFx0XHRcdHJlc3VsdFRpbWVzdGFtcDogTnVtYmVyKChsb2cgYXMgRXZlbnRMb2cpLmFyZ3MucmVzdWx0VGltZXN0YW1wKSxcblx0XHRcdFx0fSkpLFxuXHRcdFx0KVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldEV2bUNoYWluSWQoKTogUHJvbWlzZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm92aWRlci5nZXROZXR3b3JrKCkudGhlbigobmV0d29yaykgPT4gTnVtYmVyKG5ldHdvcmsuY2hhaW5JZCkpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0RXZtQ2hhbm5lbCgpOiBQcm9taXNlPFdpdG5ldC5IZXhTdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5nZXRGdW5jdGlvbihcImNoYW5uZWwoKVwiKS5zdGF0aWNDYWxsKClcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXROZXh0UXVlcnlJZCgpOiBQcm9taXNlPGJpZ2ludD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0LmdldEZ1bmN0aW9uKFwiZ2V0TmV4dFF1ZXJ5SWQoKVwiKS5zdGF0aWNDYWxsKClcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRRdWVyeShxdWVyeUlkOiBiaWdpbnQpOiBQcm9taXNlPFdpdE9yYWNsZVF1ZXJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QuZ2V0UXVlcnkuc3RhdGljQ2FsbChxdWVyeUlkKS50aGVuKChyZXN1bHQpID0+ICh7XG5cdFx0XHRjaGVja3BvaW50OiBCaWdJbnQocmVzdWx0WzVdKSxcblx0XHRcdGhhc2g6IHJlc3VsdFszXSxcblx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRyZXN1bHRNYXhTaXplOiByZXN1bHRbMl1bMF0sXG5cdFx0XHRcdHVuaXRhcnlSZXdhcmQ6IHJlc3VsdFsyXVsyXSxcblx0XHRcdFx0d2l0bmVzc2VzOiByZXN1bHRbMl1bMV0sXG5cdFx0XHR9LFxuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRjYWxsYmFja0dhczogTnVtYmVyKHJlc3VsdFswXVsxXSksXG5cdFx0XHRcdHJhZG9uSGFzaDogcmVzdWx0WzBdWzNdLFxuXHRcdFx0XHRyZXF1ZXN0ZXI6IHJlc3VsdFswXVswXSxcblx0XHRcdH0sXG5cdFx0XHRyZXNwb25zZToge1xuXHRcdFx0XHRkaXNwdXRlcjogcmVzdWx0WzFdWzRdLFxuXHRcdFx0XHRyZXBvcnRlcjogcmVzdWx0WzFdWzBdLFxuXHRcdFx0XHRyZXN1bHRUaW1lc3RhbXA6IE51bWJlcihyZXN1bHRbMV1bMV0udG9TdHJpbmcoKSksXG5cdFx0XHRcdHJlc3VsdERyVHhIYXNoOiByZXN1bHRbMV1bMl0sXG5cdFx0XHRcdHJlc3VsdENib3JCeXRlczogcmVzdWx0WzFdWzNdLFxuXHRcdFx0fSxcblx0XHR9KSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRRdWVyeVJlc3BvbnNlKFxuXHRcdHF1ZXJ5SWQ6IGJpZ2ludCxcblx0KTogUHJvbWlzZTxXaXRPcmFjbGVRdWVyeVJlc3BvbnNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QuZ2V0UXVlcnlSZXNwb25zZVxuXHRcdFx0LnN0YXRpY0NhbGwocXVlcnlJZClcblx0XHRcdC50aGVuKChyZXN1bHQpID0+ICh7XG5cdFx0XHRcdGRpc3B1dGVyOiByZXN1bHRbNF0sXG5cdFx0XHRcdHJlcG9ydGVyOiByZXN1bHRbMF0sXG5cdFx0XHRcdHJlc3VsdFRpbWVzdGFtcDogTnVtYmVyKHJlc3VsdFsxXS50b1N0cmluZygpKSxcblx0XHRcdFx0cmVzdWx0RHJUeEhhc2g6IHJlc3VsdFsyXSxcblx0XHRcdFx0cmVzdWx0Q2JvckJ5dGVzOiByZXN1bHRbM10sXG5cdFx0XHR9KSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRRdWVyeVJlc3VsdFN0YXR1c0Rlc2NyaXB0aW9uKFxuXHRcdHF1ZXJ5SWQ6IGJpZ2ludCxcblx0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRsZXQgcmVhc29uXG5cdFx0dHJ5IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlYXNvbiA9XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5jb250cmFjdC5nZXRRdWVyeVJlc3VsdFN0YXR1c0Rlc2NyaXB0aW9uLnN0YXRpY0NhbGwoXG5cdFx0XHRcdFx0XHRxdWVyeUlkLFxuXHRcdFx0XHRcdClcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRjb25zdCBsZWdhY3kgPSBuZXcgQ29udHJhY3QoXG5cdFx0XHRcdFx0dGhpcy5hZGRyZXNzLFxuXHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFwiZnVuY3Rpb24gZ2V0UXVlcnlSZXN1bHRFcnJvcih1aW50MjU2KSBwdWJsaWMgdmlldyByZXR1cm5zICgodWludDgsc3RyaW5nKSlcIixcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdHRoaXMuc2lnbmVyLFxuXHRcdFx0XHQpXG5cdFx0XHRcdHJlYXNvbiA9IGF3YWl0IGxlZ2FjeS5nZXRRdWVyeVJlc3VsdEVycm9yXG5cdFx0XHRcdFx0LnN0YXRpY0NhbGwocXVlcnlJZClcblx0XHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiByZXN1bHRbMV0pXG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZWFzb24gPSBcIih1bnBhcnNhYmxlIGVycm9yKVwiXG5cdFx0fVxuXHRcdHJldHVybiByZWFzb25cblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRRdWVyeVN0YXR1c2VzKFxuXHRcdHF1ZXJ5SWRzOiBiaWdpbnRbXSxcblx0KTogUHJvbWlzZTxBcnJheTxXaXRPcmFjbGVRdWVyeVN0YXR1cz4+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5nZXRRdWVyeVN0YXR1c0JhdGNoXG5cdFx0XHQuc3RhdGljQ2FsbChxdWVyeUlkcylcblx0XHRcdC50aGVuKChzdGF0dXNlczogQXJyYXk8YmlnaW50PikgPT5cblx0XHRcdFx0c3RhdHVzZXMubWFwKCh2YWx1ZSkgPT4gYWJpRGVjb2RlUXVlcnlTdGF0dXModmFsdWUpKSxcblx0XHRcdClcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRXaXRPcmFjbGVDb25zdW1lckF0KFxuXHRcdHRhcmdldDogc3RyaW5nLFxuXHQpOiBQcm9taXNlPFdpdE9yYWNsZUNvbnN1bWVyPiB7XG5cdFx0cmV0dXJuIFdpdE9yYWNsZUNvbnN1bWVyLmF0KHRoaXMsIHRhcmdldClcblx0fVxuXG5cdC8qKlxuXHQgKiBXcmFwcGVyIGNsYXNzIGZvciB0aGUgV2l0L09yYWNsZSBSYWRvbiBSZWdpc3RyeSBjb3JlIGNvbnRyYWN0IGFzIGRlcGxveWVkIGluIHNvbWUgc3VwcG9ydGVkIEVWTSBuZXR3b3JrLlxuXHQgKiBJdCBhbGxvd3MgZm9ybWFsIHZlcmlmaWNhdGlvbiBvZiBSYWRvbiBSZXF1ZXN0cyBhbmQgV2l0bmV0LWNvbXBsaWFudCBkYXRhIHNvdXJjZXMgaW50byBzdWNoIG5ldHdvcmssXG5cdCAqIGFzIHRvIGJlIHNlY3VyZWx5IHJlZmVycmVkIG9uIGJvdGggV2l0L09yYWNsZSBxdWVyaWVzIHB1bGxlZCBmcm9tIHdpdGhpbiBzbWFydCBjb250cmFjdHMsXG5cdCAqIG9yIFdpdC9PcmFjbGUgcXVlcnkgcmVzdWx0cyBwdXNoZWQgaW50byBzbWFydCBjb250cmFjdHMgZnJvbSBvZmZjaGFpbiB3b3JrZmxvd3MuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0V2l0T3JhY2xlUmFkb25SZWdpc3RyeSgpOiBQcm9taXNlPFdpdE9yYWNsZVJhZG9uUmVnaXN0cnk+IHtcblx0XHRyZXR1cm4gbmV3IFdpdE9yYWNsZVJhZG9uUmVnaXN0cnkodGhpcy5zaWduZXIsIHRoaXMubmV0d29yaylcblx0fVxuXG5cdC8qKlxuXHQgKiBXcmFwcGVyIGNsYXNzIGZvciB0aGUgV2l0L09yYWNsZSBSZXF1ZXN0IEZhY3RvcnkgY29yZSBjb250cmFjdCBhcyBkZXBsb3llZCBpbiBzb21lIHN1cHBvcnRlZCBFVk0gbmV0d29yay5cblx0ICogSXQgYWxsb3dzIGNvbnN0cnVjdGlvbiBvZiBgV2l0T3JhY2xlUmFkb25SZXF1ZXN0VGVtcGxhdGVgIG1pbmltYWwtcHJveHkgY29udHJhY3RzIG91dCBvZiBvbmUgb3JlIG1vcmVcblx0ICogcGFyYW1ldGVyaXplZCBSYWRvbiBSZXRpZXZhbHMgKFdpdG5ldC1jb21wbGlhbnQgZGF0YSBzb3VyY2VzKS4gVGVtcGxhdGUgYWRkcmVzc2VzIGFyZSBjb3VudGVyLWZhY3R1YWwgdG9cblx0ICogdGhlIHNldCBvZiBkYXRhIHNvdXJjZXMgdGhleSBhcmUgYnVpbHQgb24uXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0V2l0T3JhY2xlUmFkb25SZXF1ZXN0RmFjdG9yeSgpOiBQcm9taXNlPFdpdE9yYWNsZVJhZG9uUmVxdWVzdEZhY3Rvcnk+IHtcblx0XHRyZXR1cm4gV2l0T3JhY2xlUmFkb25SZXF1ZXN0RmFjdG9yeS5kZXBsb3llZChcblx0XHRcdHRoaXMsXG5cdFx0XHRhd2FpdCB0aGlzLmdldFdpdE9yYWNsZVJhZG9uUmVnaXN0cnkoKSxcblx0XHQpXG5cdH1cblxuXHQvKipcblx0ICogV3JhcHBlciBjbGFzcyBmb3IgV2l0L09yYWNsZSBSYWRvbiBUZW1wbGF0ZSBhcnRpZmFjdHMgYXMgZGVwbG95ZWQgaW4gc29tZSBzdXBwb3J0ZWQgRVZNIG5ldHdvcmsuXG5cdCAqIGBJV2l0T3JhY2xlUmFkb25SZXF1ZXN0VGVtcGxhdGVgIGNvbnRyYWN0cyBlbmFibGUgc21hcnQgY29udHJhY3RzIHRvIGZvcm1hbGx5IHZlcmlmeSBSYWRvbiBSZXF1ZXN0c1xuXHQgKiBidWlsdCBvdXQgb3V0IG9mIGEgc2V0IG9mIHBhcmFtZXRlcml6ZWQgV2l0bmV0LWNvbXBsaWFudCBkYXRhIHNvdXJjZXMsIG9uIHRoZSBmbHkuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0V2l0T3JhY2xlUmFkb25SZXF1ZXN0VGVtcGxhdGVBdChcblx0XHR0YXJnZXQ6IHN0cmluZyxcblx0KTogUHJvbWlzZTxXaXRPcmFjbGVSYWRvblJlcXVlc3RUZW1wbGF0ZT4ge1xuXHRcdHJldHVybiBXaXRPcmFjbGVSYWRvblJlcXVlc3RUZW1wbGF0ZS5hdCh0aGlzLCB0YXJnZXQpXG5cdH1cblxuXHQvKipcblx0ICogV3JhcHBlciBjbGFzcyBmb3IgV2l0L09yYWNsZSBSYWRvbiBNb2RhbCBhcnRpZmFjdHMgYXMgZGVwbG95ZWQgaW4gc29tZSBzdXBwb3J0ZWQgRVZNIG5ldHdvcmsuXG5cdCAqIGBJV2l0T3JhY2xlUmFkb25SZXF1ZXN0TW9kYWxgIGNvbnRyYWN0cyBlbmFibGUgc21hcnQgY29udHJhY3RzIHRvIGZvcm1hbGx5IHZlcmlmeSBSYWRvbiBSZXF1ZXN0c1xuXHQgKiBidWlsdCBvdXQgb3V0IG9mIGEgc2luZ2xlIFJhZG9uIFJldHJpZXZhbCBhbmQgbXVsdGlwbGUgZGF0YSBwcm92aWRlcnMsIGFsbCBvZiB0aGVtIGV4cGVjdGVkIHRvXG5cdCAqIHByb3ZpZGVkIGV4YWN0bHkgdGhlIHNhbWUgZGF0YS5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRXaXRPcmFjbGVSYWRvblJlcXVlc3RNb2RhbEF0KFxuXHRcdHRhcmdldDogc3RyaW5nLFxuXHQpOiBQcm9taXNlPFdpdE9yYWNsZVJhZG9uUmVxdWVzdE1vZGFsPiB7XG5cdFx0cmV0dXJuIFdpdE9yYWNsZVJhZG9uUmVxdWVzdE1vZGFsLmFyZ3VtZW50cyh0aGlzLCB0YXJnZXQpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0V2l0UHJpY2VGZWVkc0F0KHRhcmdldDogc3RyaW5nKTogUHJvbWlzZTxXaXRQcmljZUZlZWRzPiB7XG5cdFx0cmV0dXJuIFdpdFByaWNlRmVlZHMuYXQodGhpcywgdGFyZ2V0KVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldFdpdFByaWNlRmVlZHNMZWdhY3lBdChcblx0XHR0YXJnZXQ6IHN0cmluZyxcblx0KTogUHJvbWlzZTxXaXRQcmljZUZlZWRzTGVnYWN5PiB7XG5cdFx0cmV0dXJuIFdpdFByaWNlRmVlZHNMZWdhY3kuYXQodGhpcywgdGFyZ2V0KVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldFdpdFJhbmRvbW5lc3NBdCh0YXJnZXQ6IHN0cmluZyk6IFByb21pc2U8V2l0UmFuZG9tbmVzcz4ge1xuXHRcdHJldHVybiBXaXRSYW5kb21uZXNzLmF0KHRoaXMsIHRhcmdldClcblx0fVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import type { ContractTransactionReceipt, TransactionReceipt } from "ethers";
2
+ import type { DataPushReport } from "../types.js";
3
+ import { WitAppliance } from "./WitAppliance.js";
4
+ import type { WitOracle } from "./WitOracle.js";
5
+ export declare class WitOracleConsumer extends WitAppliance {
6
+ protected constructor(witOracle: WitOracle, target: string);
7
+ static at(witOracle: WitOracle, target: string): Promise<WitOracleConsumer>;
8
+ pushDataReport(report: DataPushReport, options?: {
9
+ confirmations?: number;
10
+ gasPrice?: bigint;
11
+ gasLimit?: bigint;
12
+ onDataPushReportTransaction?: (txHash: string) => any;
13
+ timeout?: number;
14
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
15
+ }
16
+ //# sourceMappingURL=WitOracleConsumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WitOracleConsumer.d.ts","sourceRoot":"","sources":["../../../../src/lib/wrappers/WitOracleConsumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,qBAAa,iBAAkB,SAAQ,YAAY;IAClD,SAAS,aAAa,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;WAI7C,EAAE,CACd,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC;IAWhB,cAAc,CAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;QACT,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,2BAA2B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAA;QACrD,OAAO,CAAC,EAAE,MAAM,CAAA;KAChB,GACC,OAAO,CAAC,0BAA0B,GAAG,kBAAkB,GAAG,IAAI,CAAC;CAclE"}
@@ -0,0 +1,30 @@
1
+ import { abiEncodeDataPushReport } from "../utils.js";
2
+ import { WitAppliance } from "./WitAppliance.js";
3
+ export class WitOracleConsumer extends WitAppliance {
4
+ constructor(witOracle, target) {
5
+ super(witOracle, "WitOracleConsumer", target);
6
+ }
7
+ static async at(witOracle, target) {
8
+ const consumer = new WitOracleConsumer(witOracle, target);
9
+ const consumerWitOracleAddr = await consumer.contract.witOracle.staticCall();
10
+ if (consumerWitOracleAddr !== witOracle.address) {
11
+ throw new Error(`${WitOracleConsumer.constructor.name} at ${target}: mismatching Wit/Oracle address (${consumerWitOracleAddr})`);
12
+ }
13
+ return consumer;
14
+ }
15
+ async pushDataReport(report, options) {
16
+ return this.contract.pushDataReport
17
+ .populateTransaction(abiEncodeDataPushReport(report), report?.evm_proof)
18
+ .then((tx) => {
19
+ tx.gasPrice = options?.gasPrice || tx?.gasPrice;
20
+ tx.gasLimit = options?.gasLimit || tx?.gasLimit;
21
+ return this.signer.sendTransaction(tx);
22
+ })
23
+ .then((response) => {
24
+ if (options?.onDataPushReportTransaction)
25
+ options.onDataPushReportTransaction(response.hash);
26
+ return response.wait(options?.confirmations || 1, options?.timeout);
27
+ });
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2l0T3JhY2xlQ29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3dyYXBwZXJzL1dpdE9yYWNsZUNvbnN1bWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFHaEQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFlBQVk7SUFDbEQsWUFBc0IsU0FBb0IsRUFBRSxNQUFjO1FBQ3pELEtBQUssQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNkLFNBQW9CLEVBQ3BCLE1BQWM7UUFFZCxNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN6RCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDNUUsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDZCxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sTUFBTSxxQ0FBcUMscUJBQXFCLEdBQUcsQ0FDL0csQ0FBQTtRQUNGLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FDMUIsTUFBc0IsRUFDdEIsT0FNQztRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO2FBQ2pDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7YUFDdkUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDWixFQUFFLENBQUMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQTtZQUMvQyxFQUFFLENBQUMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQTtZQUMvQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZDLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xCLElBQUksT0FBTyxFQUFFLDJCQUEyQjtnQkFDdkMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNuRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3BFLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb250cmFjdFRyYW5zYWN0aW9uUmVjZWlwdCwgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSBcImV0aGVyc1wiXG5pbXBvcnQgdHlwZSB7IERhdGFQdXNoUmVwb3J0IH0gZnJvbSBcIi4uL3R5cGVzLmpzXCJcbmltcG9ydCB7IGFiaUVuY29kZURhdGFQdXNoUmVwb3J0IH0gZnJvbSBcIi4uL3V0aWxzLmpzXCJcbmltcG9ydCB7IFdpdEFwcGxpYW5jZSB9IGZyb20gXCIuL1dpdEFwcGxpYW5jZS5qc1wiXG5pbXBvcnQgdHlwZSB7IFdpdE9yYWNsZSB9IGZyb20gXCIuL1dpdE9yYWNsZS5qc1wiXG5cbmV4cG9ydCBjbGFzcyBXaXRPcmFjbGVDb25zdW1lciBleHRlbmRzIFdpdEFwcGxpYW5jZSB7XG5cdHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih3aXRPcmFjbGU6IFdpdE9yYWNsZSwgdGFyZ2V0OiBzdHJpbmcpIHtcblx0XHRzdXBlcih3aXRPcmFjbGUsIFwiV2l0T3JhY2xlQ29uc3VtZXJcIiwgdGFyZ2V0KVxuXHR9XG5cblx0c3RhdGljIGFzeW5jIGF0KFxuXHRcdHdpdE9yYWNsZTogV2l0T3JhY2xlLFxuXHRcdHRhcmdldDogc3RyaW5nLFxuXHQpOiBQcm9taXNlPFdpdE9yYWNsZUNvbnN1bWVyPiB7XG5cdFx0Y29uc3QgY29uc3VtZXIgPSBuZXcgV2l0T3JhY2xlQ29uc3VtZXIod2l0T3JhY2xlLCB0YXJnZXQpXG5cdFx0Y29uc3QgY29uc3VtZXJXaXRPcmFjbGVBZGRyID0gYXdhaXQgY29uc3VtZXIuY29udHJhY3Qud2l0T3JhY2xlLnN0YXRpY0NhbGwoKVxuXHRcdGlmIChjb25zdW1lcldpdE9yYWNsZUFkZHIgIT09IHdpdE9yYWNsZS5hZGRyZXNzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGAke1dpdE9yYWNsZUNvbnN1bWVyLmNvbnN0cnVjdG9yLm5hbWV9IGF0ICR7dGFyZ2V0fTogbWlzbWF0Y2hpbmcgV2l0L09yYWNsZSBhZGRyZXNzICgke2NvbnN1bWVyV2l0T3JhY2xlQWRkcn0pYCxcblx0XHRcdClcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnN1bWVyXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgcHVzaERhdGFSZXBvcnQoXG5cdFx0cmVwb3J0OiBEYXRhUHVzaFJlcG9ydCxcblx0XHRvcHRpb25zPzoge1xuXHRcdFx0Y29uZmlybWF0aW9ucz86IG51bWJlclxuXHRcdFx0Z2FzUHJpY2U/OiBiaWdpbnRcblx0XHRcdGdhc0xpbWl0PzogYmlnaW50XG5cdFx0XHRvbkRhdGFQdXNoUmVwb3J0VHJhbnNhY3Rpb24/OiAodHhIYXNoOiBzdHJpbmcpID0+IGFueVxuXHRcdFx0dGltZW91dD86IG51bWJlclxuXHRcdH0sXG5cdCk6IFByb21pc2U8Q29udHJhY3RUcmFuc2FjdGlvblJlY2VpcHQgfCBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QucHVzaERhdGFSZXBvcnRcblx0XHRcdC5wb3B1bGF0ZVRyYW5zYWN0aW9uKGFiaUVuY29kZURhdGFQdXNoUmVwb3J0KHJlcG9ydCksIHJlcG9ydD8uZXZtX3Byb29mKVxuXHRcdFx0LnRoZW4oKHR4KSA9PiB7XG5cdFx0XHRcdHR4Lmdhc1ByaWNlID0gb3B0aW9ucz8uZ2FzUHJpY2UgfHwgdHg/Lmdhc1ByaWNlXG5cdFx0XHRcdHR4Lmdhc0xpbWl0ID0gb3B0aW9ucz8uZ2FzTGltaXQgfHwgdHg/Lmdhc0xpbWl0XG5cdFx0XHRcdHJldHVybiB0aGlzLnNpZ25lci5zZW5kVHJhbnNhY3Rpb24odHgpXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vbkRhdGFQdXNoUmVwb3J0VHJhbnNhY3Rpb24pXG5cdFx0XHRcdFx0b3B0aW9ucy5vbkRhdGFQdXNoUmVwb3J0VHJhbnNhY3Rpb24ocmVzcG9uc2UuaGFzaClcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLndhaXQob3B0aW9ucz8uY29uZmlybWF0aW9ucyB8fCAxLCBvcHRpb25zPy50aW1lb3V0KVxuXHRcdFx0fSlcblx0fVxufVxuIl19
@@ -0,0 +1,102 @@
1
+ import { Witnet } from "@witnet/sdk";
2
+ import type { ContractTransactionReceipt, JsonRpcSigner } from "ethers";
3
+ import { WitArtifact } from "./WitArtifact.js";
4
+ /**
5
+ * Wrapper class for the Wit/Oracle Radon Registry core contract as deployed in some supported EVM network.
6
+ * It allows formal verification of Radon Requests and Witnet-compliant data sources into such network,
7
+ * as to be securely referred on both Wit/Oracle queries pulled from within smart contracts,
8
+ * or Wit/Oracle query results pushed into smart contracts from offchain workflows.
9
+ */
10
+ export declare class WitOracleRadonRegistry extends WitArtifact {
11
+ constructor(signer: JsonRpcSigner, network: string);
12
+ /**
13
+ * Determines the unique hash that would identify the given Radon Retrieval, if it was
14
+ * formally verified into the connected EVM network.
15
+ * @param retrieval Instance of a Radon Retrieval object.
16
+ */
17
+ determineRadonRetrievalHash(retrieval: Witnet.Radon.RadonRetrieval): Promise<string>;
18
+ /**
19
+ * Returns information related to some previously verified Radon Request, on the connected EVM network.
20
+ * @param radHash The RAD hash that uniquely identifies the Radon Request.
21
+ */
22
+ lookupRadonRequest(radHash: string): Promise<Witnet.Radon.RadonRequest>;
23
+ /**
24
+ * Returns the bytecode of some previously verified Radon Request, on the connected EVM network.
25
+ * @param radHash The RAD hash that uniquely identifies the Radon Request.
26
+ */
27
+ lookupRadonRequestBytecode(radHash: string): Promise<Witnet.HexString>;
28
+ /**
29
+ * Returns information about some previously verified Radon Retrieval on the connected EVM network.
30
+ * This information includes retrieval the method, URL, body, headers and the Radon script in charge
31
+ * to transform data before delivery, on the connected EVM network.
32
+ * @param radHash The RAD hash that uniquely identifies the Radon Request.
33
+ */
34
+ lookupRadonRetrieval(hash: string): Promise<Witnet.Radon.RadonRetrieval>;
35
+ /**
36
+ * Formally verify the given Radon Request object into the connected EVM network.
37
+ * It also verifies all the Radon Retrieval scripts (i.e. data source) the Request
38
+ * relies on, if not yet done before.
39
+ *
40
+ * Verifying Radon assets modifies the EVM storage and therefore requires
41
+ * spending gas in proportion to the number and complexity of the data sources,
42
+ * and whether these had been previously verified before or not.
43
+ *
44
+ * If the given Radon Request happened to be already verified, no gas would be actually consumed.
45
+ *
46
+ * @param request Instance of a Radon Request object.
47
+ * @param options Async EVM transaction handlers.
48
+ * @returns The RAD hash of the Radon Request, as verified on the connected EVM network.
49
+ */
50
+ verifyRadonRequest(request: Witnet.Radon.RadonRequest, options?: {
51
+ /**
52
+ * Number of block confirmations to wait for after verifying transaction gets mined (defaults to 1).
53
+ */
54
+ confirmations?: number;
55
+ /**
56
+ * Callback handler called just in case a `verifyRadonRequest` transaction is ultimately required.
57
+ */
58
+ onVerifyRadonRequest: (radHash: string) => any;
59
+ /**
60
+ * Callback handler called once the `verifyRadonRequest` transaction gets confirmed.
61
+ * @param receipt The `verifyRadonRequest` transaction receipt.
62
+ */
63
+ onVerifyRadonRequestReceipt?: (receipt: ContractTransactionReceipt | null) => any;
64
+ /**
65
+ * Callback handler called for every involved `verifyRadonRetrieval` transaction.
66
+ */
67
+ onVerifyRadonRetrieval?: (hash: string) => any;
68
+ /**
69
+ * Callback handler called after every involved `verifyRadonRetrieval` transaction gets confirmed.
70
+ * @param receipt The `verifyRadonRetrieval` transaction receipt.
71
+ */
72
+ onVerifyRadonRetrievalReceipt?: (receipt: ContractTransactionReceipt | null) => any;
73
+ }): Promise<string>;
74
+ /**
75
+ * Formally verify the given Radon Retrieval script (i.e. data source), into the connected EVM network.
76
+ *
77
+ * Verifying Radon assets modifies the EVM storage and therefore requires
78
+ * spending gas in proportion to the size of the data source parameters (e.g. URL, body, headers, or Radon script).
79
+ *
80
+ * If the given Radon Retrieval object happened to be already verified, no EVM gas would be actually consumed.
81
+ *
82
+ * @param request Instance of a Radon Retrieval object.
83
+ * @param options Async EVM transaction handlers.
84
+ * @returns The unique hash of the Radon Retrieval object, as verified on the connected EVM network.
85
+ */
86
+ verifyRadonRetrieval(retrieval: Witnet.Radon.RadonRetrieval, options?: {
87
+ /**
88
+ * Number of block confirmations to wait for after verifying transaction gets mined (defaults to 1).
89
+ */
90
+ confirmations?: number;
91
+ /**
92
+ * Callback handler called just in case a `verifyRadonRequest` transaction is ultimately required.
93
+ */
94
+ onVerifyRadonRetrieval?: (hash: string) => any;
95
+ /**
96
+ * Callback handler called once the `verifyRadonRetrieval` transaction gets confirmed.
97
+ * @param receipt The `verifyRadonRetrieval` transaction receipt.
98
+ */
99
+ onVerifyRadonRetrievalReceipt?: (receipt: ContractTransactionReceipt | null) => any;
100
+ }): Promise<string>;
101
+ }
102
+ //# sourceMappingURL=WitOracleRadonRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WitOracleRadonRegistry.d.ts","sourceRoot":"","sources":["../../../../src/lib/wrappers/WitOracleRadonRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAU,MAAM,QAAQ,CAAA;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAC1C,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;IAOlD;;;;OAIG;IACU,2BAA2B,CACvC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,GACpC,OAAO,CAAC,MAAM,CAAC;IAWlB;;;OAGG;IACU,kBAAkB,CAC9B,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;IAOrC;;;OAGG;IACU,0BAA0B,CACtC,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IAM5B;;;;;OAKG;IACU,oBAAoB,CAChC,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;IAevC;;;;;;;;;;;;;;OAcG;IACU,kBAAkB,CAC9B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,EAClC,OAAO,CAAC,EAAE;QACT;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB;;WAEG;QACH,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAA;QAC9C;;;WAGG;QACH,2BAA2B,CAAC,EAAE,CAC7B,OAAO,EAAE,0BAA0B,GAAG,IAAI,KACtC,GAAG,CAAA;QACR;;WAEG;QACH,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAA;QAC9C;;;WAGG;QACH,6BAA6B,CAAC,EAAE,CAC/B,OAAO,EAAE,0BAA0B,GAAG,IAAI,KACtC,GAAG,CAAA;KACR,GACC,OAAO,CAAC,MAAM,CAAC;IA4BlB;;;;;;;;;;;OAWG;IACU,oBAAoB,CAChC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,EACtC,OAAO,CAAC,EAAE;QACT;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB;;WAEG;QACH,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAA;QAC9C;;;WAGG;QACH,6BAA6B,CAAC,EAAE,CAC/B,OAAO,EAAE,0BAA0B,GAAG,IAAI,KACtC,GAAG,CAAA;KACR,GACC,OAAO,CAAC,MAAM,CAAC;CAqBlB"}