@rosen-bridge/rosen-extractor 3.5.0 → 4.0.0

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.
@@ -0,0 +1,16 @@
1
+ import { RosenData } from '../abstract/types';
2
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
3
+ import { RosenTokens } from '@rosen-bridge/tokens';
4
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
5
+ import { EvmRpcRosenExtractor } from './EvmRpcRosenExtractor';
6
+ export declare class EvmRosenExtractor extends AbstractRosenDataExtractor<string> {
7
+ protected rpcExtractor: EvmRpcRosenExtractor;
8
+ protected chain: string;
9
+ constructor(lockAddress: string, tokens: RosenTokens, chain: string, nativeToken: string, logger?: AbstractLogger);
10
+ /**
11
+ * extracts RosenData from given lock transaction in ethers Transaction format
12
+ * @param serializedTransaction signed serialized transaction in ethers Transaction format
13
+ */
14
+ get: (serializedTransaction: string) => RosenData | undefined;
15
+ }
16
+ //# sourceMappingURL=EvmRosenExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/evm/EvmRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,iBAAkB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IACvE,SAAS,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC7C,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;gBAGtB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,cAAc;IAazB;;;OAGG;IACH,GAAG,0BAA2B,MAAM,KAAG,SAAS,GAAG,SAAS,CAc1D;CACH"}
@@ -0,0 +1,31 @@
1
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
2
+ import { Transaction } from 'ethers';
3
+ import { EvmRpcRosenExtractor } from './EvmRpcRosenExtractor';
4
+ export class EvmRosenExtractor extends AbstractRosenDataExtractor {
5
+ rpcExtractor;
6
+ chain;
7
+ constructor(lockAddress, tokens, chain, nativeToken, logger) {
8
+ super(lockAddress, tokens, logger);
9
+ this.chain = chain;
10
+ this.rpcExtractor = new EvmRpcRosenExtractor(lockAddress, tokens, chain, nativeToken, logger);
11
+ }
12
+ /**
13
+ * extracts RosenData from given lock transaction in ethers Transaction format
14
+ * @param serializedTransaction signed serialized transaction in ethers Transaction format
15
+ */
16
+ get = (serializedTransaction) => {
17
+ let transaction;
18
+ try {
19
+ transaction = Transaction.from(serializedTransaction);
20
+ }
21
+ catch (e) {
22
+ this.logger.debug(`An error occurred while deserializing ${this.chain} tx to extract rosen data: ${e}`);
23
+ if (e instanceof Error && e.stack) {
24
+ this.logger.debug(e.stack);
25
+ }
26
+ return undefined;
27
+ }
28
+ return this.rpcExtractor.get(transaction);
29
+ };
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZtUm9zZW5FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2V2bS9Fdm1Sb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHckMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLDBCQUFrQztJQUM3RCxZQUFZLENBQXVCO0lBQ25DLEtBQUssQ0FBUztJQUV4QixZQUNFLFdBQW1CLEVBQ25CLE1BQW1CLEVBQ25CLEtBQWEsRUFDYixXQUFtQixFQUNuQixNQUF1QjtRQUV2QixLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksb0JBQW9CLENBQzFDLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLEdBQUcsQ0FBQyxxQkFBNkIsRUFBeUIsRUFBRTtRQUM3RCxJQUFJLFdBQXdCLENBQUM7UUFDN0IsSUFBSTtZQUNGLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdkQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHlDQUF5QyxJQUFJLENBQUMsS0FBSyw4QkFBOEIsQ0FBQyxFQUFFLENBQ3JGLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm9zZW5EYXRhIH0gZnJvbSAnLi4vYWJzdHJhY3QvdHlwZXMnO1xuaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnZXRoZXJzJztcbmltcG9ydCB7IFJvc2VuVG9rZW5zIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBFdm1ScGNSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vRXZtUnBjUm9zZW5FeHRyYWN0b3InO1xuXG5leHBvcnQgY2xhc3MgRXZtUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxzdHJpbmc+IHtcbiAgcHJvdGVjdGVkIHJwY0V4dHJhY3RvcjogRXZtUnBjUm9zZW5FeHRyYWN0b3I7XG4gIHByb3RlY3RlZCBjaGFpbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvY2tBZGRyZXNzOiBzdHJpbmcsXG4gICAgdG9rZW5zOiBSb3NlblRva2VucyxcbiAgICBjaGFpbjogc3RyaW5nLFxuICAgIG5hdGl2ZVRva2VuOiBzdHJpbmcsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXJcbiAgKSB7XG4gICAgc3VwZXIobG9ja0FkZHJlc3MsIHRva2VucywgbG9nZ2VyKTtcbiAgICB0aGlzLmNoYWluID0gY2hhaW47XG4gICAgdGhpcy5ycGNFeHRyYWN0b3IgPSBuZXcgRXZtUnBjUm9zZW5FeHRyYWN0b3IoXG4gICAgICBsb2NrQWRkcmVzcyxcbiAgICAgIHRva2VucyxcbiAgICAgIGNoYWluLFxuICAgICAgbmF0aXZlVG9rZW4sXG4gICAgICBsb2dnZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gZXRoZXJzIFRyYW5zYWN0aW9uIGZvcm1hdFxuICAgKiBAcGFyYW0gc2VyaWFsaXplZFRyYW5zYWN0aW9uIHNpZ25lZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGluIGV0aGVycyBUcmFuc2FjdGlvbiBmb3JtYXRcbiAgICovXG4gIGdldCA9IChzZXJpYWxpemVkVHJhbnNhY3Rpb246IHN0cmluZyk6IFJvc2VuRGF0YSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbi5mcm9tKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBkZXNlcmlhbGl6aW5nICR7dGhpcy5jaGFpbn0gdHggdG8gZXh0cmFjdCByb3NlbiBkYXRhOiAke2V9YFxuICAgICAgKTtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJwY0V4dHJhY3Rvci5nZXQodHJhbnNhY3Rpb24pO1xuICB9O1xufVxuIl19
@@ -1,15 +1,15 @@
1
1
  import { RosenData } from '../abstract/types';
2
2
  import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
3
- import { TransactionResponse } from 'ethers';
3
+ import { Transaction } from 'ethers';
4
4
  import { RosenTokens } from '@rosen-bridge/tokens';
5
5
  import { AbstractLogger } from '@rosen-bridge/abstract-logger';
6
- export declare class EvmRpcRosenExtractor extends AbstractRosenDataExtractor<TransactionResponse> {
6
+ export declare class EvmRpcRosenExtractor extends AbstractRosenDataExtractor<Transaction> {
7
7
  protected chain: string;
8
8
  protected nativeToken: string;
9
9
  constructor(lockAddress: string, tokens: RosenTokens, chain: string, nativeToken: string, logger?: AbstractLogger);
10
10
  /**
11
- * extracts RosenData from given lock transaction in RPC format
12
- * cheks:
11
+ * extracts RosenData from given lock transaction in ethers Transaction object
12
+ * checks:
13
13
  * Native token transfer:
14
14
  * 1. `to` must be the lock address
15
15
  * 2. the entire calldata must represent a valid CallDataRosenData
@@ -18,9 +18,9 @@ export declare class EvmRpcRosenExtractor extends AbstractRosenDataExtractor<Tra
18
18
  * 2. first four bytes of the call data indicate `transfer` function call: a9059cbb
19
19
  * 3. bytes from 5 to 37 must be the lock address
20
20
  * 4. bytes from 37 to 69 show the amount
21
- * 5. bytes after 69 must represnt a valid CallDataRosenData
22
- * @param transaction the lock transaction in RPC format
21
+ * 5. bytes after 69 must represent a valid CallDataRosenData
22
+ * @param transaction the lock transaction in ethers Transaction object
23
23
  */
24
- get: (transaction: TransactionResponse) => RosenData | undefined;
24
+ get: (transaction: Transaction) => RosenData | undefined;
25
25
  }
26
26
  //# sourceMappingURL=EvmRpcRosenExtractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EvmRpcRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/evm/EvmRpcRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAmB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,qBAAa,oBAAqB,SAAQ,0BAA0B,CAAC,mBAAmB,CAAC;IACvF,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;gBAG5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,cAAc;IAOzB;;;;;;;;;;;;;OAaG;IACH,GAAG,gBAAiB,mBAAmB,KAAG,SAAS,GAAG,SAAS,CAwG7D;CACH"}
1
+ {"version":3,"file":"EvmRpcRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/evm/EvmRpcRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAmB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,qBAAa,oBAAqB,SAAQ,0BAA0B,CAAC,WAAW,CAAC;IAC/E,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;gBAG5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,cAAc;IAOzB;;;;;;;;;;;;;OAaG;IACH,GAAG,gBAAiB,WAAW,KAAG,SAAS,GAAG,SAAS,CA+GrD;CACH"}
@@ -9,8 +9,8 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
9
9
  this.nativeToken = nativeToken;
10
10
  }
11
11
  /**
12
- * extracts RosenData from given lock transaction in RPC format
13
- * cheks:
12
+ * extracts RosenData from given lock transaction in ethers Transaction object
13
+ * checks:
14
14
  * Native token transfer:
15
15
  * 1. `to` must be the lock address
16
16
  * 2. the entire calldata must represent a valid CallDataRosenData
@@ -19,12 +19,17 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
19
19
  * 2. first four bytes of the call data indicate `transfer` function call: a9059cbb
20
20
  * 3. bytes from 5 to 37 must be the lock address
21
21
  * 4. bytes from 37 to 69 show the amount
22
- * 5. bytes after 69 must represnt a valid CallDataRosenData
23
- * @param transaction the lock transaction in RPC format
22
+ * 5. bytes after 69 must represent a valid CallDataRosenData
23
+ * @param transaction the lock transaction in ethers Transaction object
24
24
  */
25
25
  get = (transaction) => {
26
26
  const baseError = `No rosen data found for tx [${transaction.hash}]`;
27
27
  try {
28
+ if (transaction.from == null || transaction.hash == null) {
29
+ this.logger.debug(baseError +
30
+ `transaction 'from' ([${transaction.from}]) or 'hash' ([${transaction.hash}]) is unexpected (probably unsigned transaction is passed)`);
31
+ return undefined;
32
+ }
28
33
  if (transaction.to == null) {
29
34
  this.logger.debug(baseError + `: 'to' address is empty.`);
30
35
  return undefined;
@@ -36,7 +41,7 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
36
41
  let tokenAddress;
37
42
  let amount;
38
43
  let sourceTokenId, targetTokenId;
39
- if (transaction.to == this.lockAddress) {
44
+ if (transaction.to.toLowerCase() == this.lockAddress) {
40
45
  // transaction must be a native token transfer
41
46
  rosenDataRaw = callData;
42
47
  tokenAddress = this.nativeToken;
@@ -67,7 +72,7 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
67
72
  }
68
73
  amount = BigInt('0x' + callData.slice(72, 72 + 64)).toString();
69
74
  rosenDataRaw = callData.substring(72 + 64);
70
- tokenAddress = transaction.to;
75
+ tokenAddress = transaction.to.toLowerCase();
71
76
  const tokens = this.tokens.search(this.chain, {
72
77
  [this.tokens.getIdKey(this.chain)]: tokenAddress,
73
78
  });
@@ -77,7 +82,7 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
77
82
  return undefined;
78
83
  }
79
84
  token = tokens[0];
80
- sourceTokenId = tokenAddress;
85
+ sourceTokenId = tokenAddress.toLowerCase();
81
86
  }
82
87
  try {
83
88
  rosenData = parseRosenData(rosenDataRaw);
@@ -99,7 +104,7 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
99
104
  toAddress: rosenData.toAddress,
100
105
  bridgeFee: rosenData.bridgeFee,
101
106
  networkFee: rosenData.networkFee,
102
- fromAddress: transaction.from,
107
+ fromAddress: transaction.from.toLowerCase(),
103
108
  sourceChainTokenId: sourceTokenId,
104
109
  amount: amount,
105
110
  targetChainTokenId: targetTokenId,
@@ -115,4 +120,4 @@ export class EvmRpcRosenExtractor extends AbstractRosenDataExtractor {
115
120
  }
116
121
  };
117
122
  }
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZtUnBjUm9zZW5FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2V2bS9Fdm1ScGNSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBSWhGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFekMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDBCQUErQztJQUM3RSxLQUFLLENBQVM7SUFDZCxXQUFXLENBQVM7SUFFOUIsWUFDRSxXQUFtQixFQUNuQixNQUFtQixFQUNuQixLQUFhLEVBQ2IsV0FBbUIsRUFDbkIsTUFBdUI7UUFFdkIsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxHQUFHLEdBQUcsQ0FBQyxXQUFnQyxFQUF5QixFQUFFO1FBQ2hFLE1BQU0sU0FBUyxHQUFHLCtCQUErQixXQUFXLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDckUsSUFBSTtZQUNGLElBQUksV0FBVyxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksU0FBUyxDQUFDO1lBQ2QsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxLQUFzQyxDQUFDO1lBQzNDLElBQUksWUFBWSxDQUFDO1lBQ2pCLElBQUksWUFBWSxDQUFDO1lB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YnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25SZXNwb25zZSB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBSb3NlblRva2VucywgUm9zZW5DaGFpblRva2VuIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBwYXJzZVJvc2VuRGF0YSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgRXZtUnBjUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxUcmFuc2FjdGlvblJlc3BvbnNlPiB7XG4gIHByb3RlY3RlZCBjaGFpbjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgbmF0aXZlVG9rZW46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsb2NrQWRkcmVzczogc3RyaW5nLFxuICAgIHRva2VuczogUm9zZW5Ub2tlbnMsXG4gICAgY2hhaW46IHN0cmluZyxcbiAgICBuYXRpdmVUb2tlbjogc3RyaW5nLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyXG4gICkge1xuICAgIHN1cGVyKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlcik7XG4gICAgdGhpcy5jaGFpbiA9IGNoYWluO1xuICAgIHRoaXMubmF0aXZlVG9rZW4gPSBuYXRpdmVUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGluIFJQQyBmb3JtYXRcbiAgICogY2hla3M6XG4gICAqICAgICBOYXRpdmUgdG9rZW4gdHJhbnNmZXI6XG4gICAqICAgICAgICAgMS4gYHRvYCBtdXN0IGJlIHRoZSBsb2NrIGFkZHJlc3NcbiAgICogICAgICAgICAyLiB0aGUgZW50aXJlIGNhbGxkYXRhIG11c3QgcmVwcmVzZW50IGEgdmFsaWQgQ2FsbERhdGFSb3NlbkRhdGFcbiAgICogICAgIEVSQzIwIHRyYW5zZmVyOlxuICAgKiAgICAgICAgIDEuIGB0b2AgYWRkcmVzcyBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBhc3NldHNcbiAgICogICAgICAgICAyLiBmaXJzdCBmb3VyIGJ5dGVzIG9mIHRoZSBjYWxsIGRhdGEgaW5kaWNhdGUgYHRyYW5zZmVyYCBmdW5jdGlvbiBjYWxsOiBhOTA1OWNiYlxuICAgKiAgICAgICAgIDMuIGJ5dGVzIGZyb20gNSB0byAzNyBtdXN0IGJlIHRoZSBsb2NrIGFkZHJlc3NcbiAgICogICAgICAgICA0LiBieXRlcyBmcm9tIDM3IHRvIDY5IHNob3cgdGhlIGFtb3VudFxuICAgKiAgICAgICAgIDUuIGJ5dGVzIGFmdGVyIDY5IG11c3QgcmVwcmVzbnQgYSB2YWxpZCBDYWxsRGF0YVJvc2VuRGF0YVxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gdGhlIGxvY2sgdHJhbnNhY3Rpb24gaW4gUlBDIGZvcm1hdFxuICAgKi9cbiAgZ2V0ID0gKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlc3BvbnNlKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaGFzaH1dYDtcbiAgICB0cnkge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLnRvID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYmFzZUVycm9yICsgYDogJ3RvJyBhZGRyZXNzIGlzIGVtcHR5LmApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgbGV0IHJvc2VuRGF0YTtcbiAgICAgIGNvbnN0IGNhbGxEYXRhID0gdHJhbnNhY3Rpb24uZGF0YS5zdWJzdHJpbmcoMik7XG4gICAgICBsZXQgdG9rZW46IFJlY29yZDxzdHJpbmcsIFJvc2VuQ2hhaW5Ub2tlbj47XG4gICAgICBsZXQgcm9zZW5EYXRhUmF3O1xuICAgICAgbGV0IHRva2VuQWRkcmVzcztcbiAgICAgIGxldCBhbW91bnQ7XG4gICAgICBsZXQgc291cmNlVG9rZW5JZCwgdGFyZ2V0VG9rZW5JZDtcblxuICAgICAgaWYgKHRyYW5zYWN0aW9uLnRvID09IHRoaXMubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgLy8gdHJhbnNhY3Rpb24gbXVzdCBiZSBhIG5hdGl2ZSB0b2tlbiB0cmFuc2ZlclxuICAgICAgICByb3NlbkRhdGFSYXcgPSBjYWxsRGF0YTtcbiAgICAgICAgdG9rZW5BZGRyZXNzID0gdGhpcy5uYXRpdmVUb2tlbjtcbiAgICAgICAgYW1vdW50ID0gdHJhbnNhY3Rpb24udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy50b2tlbnMuc2VhcmNoKHRoaXMuY2hhaW4sIHtcbiAgICAgICAgICBbdGhpcy50b2tlbnMuZ2V0SWRLZXkodGhpcy5jaGFpbildOiB0aGlzLm5hdGl2ZVRva2VuLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIHNvdXJjZVRva2VuSWQgPSB0aGlzLm5hdGl2ZVRva2VuO1xuICAgICAgICAgIHRva2VuID0gdG9rZW5zWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYmFzZUVycm9yICtcbiAgICAgICAgICAgICAgYDogbmF0aXZlIHRva2VuIFske3RoaXMubmF0aXZlVG9rZW59XSBpcyBub3QgYXZhaWxhYmxlIGluIHNvdXJjZSBjaGlhbidzIHRva2VucyBtYXAuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJhbnNhY3Rpb24gbXVzdCBiZSBhbiBFUkMtMjAgdG9rZW4gdHJhbnNmZXJcbiAgICAgICAgaWYgKGNhbGxEYXRhLnN1YnN0cmluZygwLCA4KSAhPSAnYTkwNTljYmInKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBOb3QgYSB2YWxpZCBFUkMyMCB0cmFuc2ZlciB0cmFuc2FjdGlvbi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBCaWdJbnQoJzB4JyArIGNhbGxEYXRhLnN1YnN0cmluZyg4LCA3MikpLnRvU3RyaW5nKDE2KSAhPVxuICAgICAgICAgIHRoaXMubG9ja0FkZHJlc3Muc3Vic3RyaW5nKDIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYmFzZUVycm9yICsgYDogJ3RvJyBhZGRyZXNzIGlzIG5vdCB0aGUgbG9jayBhZGRyZXNzLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgYW1vdW50ID0gQmlnSW50KCcweCcgKyBjYWxsRGF0YS5zbGljZSg3MiwgNzIgKyA2NCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJvc2VuRGF0YVJhdyA9IGNhbGxEYXRhLnN1YnN0cmluZyg3MiArIDY0KTtcbiAgICAgICAgdG9rZW5BZGRyZXNzID0gdHJhbnNhY3Rpb24udG87XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLnNlYXJjaCh0aGlzLmNoYWluLCB7XG4gICAgICAgICAgW3RoaXMudG9rZW5zLmdldElkS2V5KHRoaXMuY2hhaW4pXTogdG9rZW5BZGRyZXNzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYmFzZUVycm9yICtcbiAgICAgICAgICAgICAgYDogdG9rZW4gWyR7dG9rZW5BZGRyZXNzfV0gaXMgbm90IHN1cHBvcnRlZCBvbiBjaGFpbjogWyR7dGhpcy5jaGFpbn1dLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4gPSB0b2tlbnNbMF07XG4gICAgICAgIHNvdXJjZVRva2VuSWQgPSB0b2tlbkFkZHJlc3M7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICByb3NlbkRhdGEgPSBwYXJzZVJvc2VuRGF0YShyb3NlbkRhdGFSYXcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gY2FsbCBkYXRhOiAke2V9YFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0YXJnZXRUb2tlbklkID0gdGhpcy50b2tlbnMuZ2V0SUQodG9rZW4sIHJvc2VuRGF0YS50b0NoYWluKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICtcbiAgICAgICAgICAgIGA6IHRva2VuIFske3Rva2VuQWRkcmVzc31dIGlzIG5vdCBzdXBwb3J0ZWQgb24gY2hhaW46IFske3Jvc2VuRGF0YS50b0NoYWlufV0uYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9DaGFpbjogcm9zZW5EYXRhLnRvQ2hhaW4sXG4gICAgICAgIHRvQWRkcmVzczogcm9zZW5EYXRhLnRvQWRkcmVzcyxcbiAgICAgICAgYnJpZGdlRmVlOiByb3NlbkRhdGEuYnJpZGdlRmVlLFxuICAgICAgICBuZXR3b3JrRmVlOiByb3NlbkRhdGEubmV0d29ya0ZlZSxcbiAgICAgICAgZnJvbUFkZHJlc3M6IHRyYW5zYWN0aW9uLmZyb20sXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogc291cmNlVG9rZW5JZCxcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogdGFyZ2V0VG9rZW5JZCxcbiAgICAgICAgc291cmNlVHhJZDogdHJhbnNhY3Rpb24uaGFzaCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIEVWTSByb3NlbiBkYXRhIGZyb20gUlBDOiAke2V9YFxuICAgICAgKTtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZtUnBjUm9zZW5FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2V2bS9Fdm1ScGNSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBSWhGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFekMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDBCQUF1QztJQUNyRSxLQUFLLENBQVM7SUFDZCxXQUFXLENBQVM7SUFFOUIsWUFDRSxXQUFtQixFQUNuQixNQUFtQixFQUNuQixLQUFhLEVBQ2IsV0FBbUIsRUFDbkIsTUFBdUI7UUFFdkIsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxHQUFHLEdBQUcsQ0FBQyxXQUF3QixFQUF5QixFQUFFO1FBQ3hELE1BQU0sU0FBUyxHQUFHLCtCQUErQixXQUFXLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDckUsSUFBSTtZQUNGLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLFNBQVM7b0JBQ1Asd0JBQXdCLFdBQVcsQ0FBQyxJQUFJLGtCQUFrQixXQUFXLENBQUMsSUFBSSw0REFBNEQsQ0FDekksQ0FBQztnQkFDRixPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksV0FBVyxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFD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QUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsNERBQTRELENBQUMsRUFBRSxDQUNoRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QjtZQUNELE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEgfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgUm9zZW5Ub2tlbnMsIFJvc2VuQ2hhaW5Ub2tlbiB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgcGFyc2VSb3NlbkRhdGEgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEV2bVJwY1Jvc2VuRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8VHJhbnNhY3Rpb24+IHtcbiAgcHJvdGVjdGVkIGNoYWluOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBuYXRpdmVUb2tlbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvY2tBZGRyZXNzOiBzdHJpbmcsXG4gICAgdG9rZW5zOiBSb3NlblRva2VucyxcbiAgICBjaGFpbjogc3RyaW5nLFxuICAgIG5hdGl2ZVRva2VuOiBzdHJpbmcsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXJcbiAgKSB7XG4gICAgc3VwZXIobG9ja0FkZHJlc3MsIHRva2VucywgbG9nZ2VyKTtcbiAgICB0aGlzLmNoYWluID0gY2hhaW47XG4gICAgdGhpcy5uYXRpdmVUb2tlbiA9IG5hdGl2ZVRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gZXRoZXJzIFRyYW5zYWN0aW9uIG9iamVjdFxuICAgKiBjaGVja3M6XG4gICAqICAgICBOYXRpdmUgdG9rZW4gdHJhbnNmZXI6XG4gICAqICAgICAgICAgMS4gYHRvYCBtdXN0IGJlIHRoZSBsb2NrIGFkZHJlc3NcbiAgICogICAgICAgICAyLiB0aGUgZW50aXJlIGNhbGxkYXRhIG11c3QgcmVwcmVzZW50IGEgdmFsaWQgQ2FsbERhdGFSb3NlbkRhdGFcbiAgICogICAgIEVSQzIwIHRyYW5zZmVyOlxuICAgKiAgICAgICAgIDEuIGB0b2AgYWRkcmVzcyBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBhc3NldHNcbiAgICogICAgICAgICAyLiBmaXJzdCBmb3VyIGJ5dGVzIG9mIHRoZSBjYWxsIGRhdGEgaW5kaWNhdGUgYHRyYW5zZmVyYCBmdW5jdGlvbiBjYWxsOiBhOTA1OWNiYlxuICAgKiAgICAgICAgIDMuIGJ5dGVzIGZyb20gNSB0byAzNyBtdXN0IGJlIHRoZSBsb2NrIGFkZHJlc3NcbiAgICogICAgICAgICA0LiBieXRlcyBmcm9tIDM3IHRvIDY5IHNob3cgdGhlIGFtb3VudFxuICAgKiAgICAgICAgIDUuIGJ5dGVzIGFmdGVyIDY5IG11c3QgcmVwcmVzZW50IGEgdmFsaWQgQ2FsbERhdGFSb3NlbkRhdGFcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIGV0aGVycyBUcmFuc2FjdGlvbiBvYmplY3RcbiAgICovXG4gIGdldCA9ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBSb3NlbkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGJhc2VFcnJvciA9IGBObyByb3NlbiBkYXRhIGZvdW5kIGZvciB0eCBbJHt0cmFuc2FjdGlvbi5oYXNofV1gO1xuICAgIHRyeSB7XG4gICAgICBpZiAodHJhbnNhY3Rpb24uZnJvbSA9PSBudWxsIHx8IHRyYW5zYWN0aW9uLmhhc2ggPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgK1xuICAgICAgICAgICAgYHRyYW5zYWN0aW9uICdmcm9tJyAoWyR7dHJhbnNhY3Rpb24uZnJvbX1dKSBvciAnaGFzaCcgKFske3RyYW5zYWN0aW9uLmhhc2h9XSkgaXMgdW5leHBlY3RlZCAocHJvYmFibHkgdW5zaWduZWQgdHJhbnNhY3Rpb24gaXMgcGFzc2VkKWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2FjdGlvbi50byA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6ICd0bycgYWRkcmVzcyBpcyBlbXB0eS5gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGxldCByb3NlbkRhdGE7XG4gICAgICBjb25zdCBjYWxsRGF0YSA9IHRyYW5zYWN0aW9uLmRhdGEuc3Vic3RyaW5nKDIpO1xuICAgICAgbGV0IHRva2VuOiBSZWNvcmQ8c3RyaW5nLCBSb3NlbkNoYWluVG9rZW4+O1xuICAgICAgbGV0IHJvc2VuRGF0YVJhdztcbiAgICAgIGxldCB0b2tlbkFkZHJlc3M7XG4gICAgICBsZXQgYW1vdW50O1xuICAgICAgbGV0IHNvdXJjZVRva2VuSWQsIHRhcmdldFRva2VuSWQ7XG5cbiAgICAgIGlmICh0cmFuc2FjdGlvbi50by50b0xvd2VyQ2FzZSgpID09IHRoaXMubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgLy8gdHJhbnNhY3Rpb24gbXVzdCBiZSBhIG5hdGl2ZSB0b2tlbiB0cmFuc2ZlclxuICAgICAgICByb3NlbkRhdGFSYXcgPSBjYWxsRGF0YTtcbiAgICAgICAgdG9rZW5BZGRyZXNzID0gdGhpcy5uYXRpdmVUb2tlbjtcbiAgICAgICAgYW1vdW50ID0gdHJhbnNhY3Rpb24udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy50b2tlbnMuc2VhcmNoKHRoaXMuY2hhaW4sIHtcbiAgICAgICAgICBbdGhpcy50b2tlbnMuZ2V0SWRLZXkodGhpcy5jaGFpbildOiB0aGlzLm5hdGl2ZVRva2VuLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIHNvdXJjZVRva2VuSWQgPSB0aGlzLm5hdGl2ZVRva2VuO1xuICAgICAgICAgIHRva2VuID0gdG9rZW5zWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYmFzZUVycm9yICtcbiAgICAgICAgICAgICAgYDogbmF0aXZlIHRva2VuIFske3RoaXMubmF0aXZlVG9rZW59XSBpcyBub3QgYXZhaWxhYmxlIGluIHNvdXJjZSBjaGlhbidzIHRva2VucyBtYXAuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJhbnNhY3Rpb24gbXVzdCBiZSBhbiBFUkMtMjAgdG9rZW4gdHJhbnNmZXJcbiAgICAgICAgaWYgKGNhbGxEYXRhLnN1YnN0cmluZygwLCA4KSAhPSAnYTkwNTljYmInKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBOb3QgYSB2YWxpZCBFUkMyMCB0cmFuc2ZlciB0cmFuc2FjdGlvbi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBCaWdJbnQoJzB4JyArIGNhbGxEYXRhLnN1YnN0cmluZyg4LCA3MikpLnRvU3RyaW5nKDE2KSAhPVxuICAgICAgICAgIHRoaXMubG9ja0FkZHJlc3Muc3Vic3RyaW5nKDIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYmFzZUVycm9yICsgYDogJ3RvJyBhZGRyZXNzIGlzIG5vdCB0aGUgbG9jayBhZGRyZXNzLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgYW1vdW50ID0gQmlnSW50KCcweCcgKyBjYWxsRGF0YS5zbGljZSg3MiwgNzIgKyA2NCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJvc2VuRGF0YVJhdyA9IGNhbGxEYXRhLnN1YnN0cmluZyg3MiArIDY0KTtcbiAgICAgICAgdG9rZW5BZGRyZXNzID0gdHJhbnNhY3Rpb24udG8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy50b2tlbnMuc2VhcmNoKHRoaXMuY2hhaW4sIHtcbiAgICAgICAgICBbdGhpcy50b2tlbnMuZ2V0SWRLZXkodGhpcy5jaGFpbildOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBiYXNlRXJyb3IgK1xuICAgICAgICAgICAgICBgOiB0b2tlbiBbJHt0b2tlbkFkZHJlc3N9XSBpcyBub3Qgc3VwcG9ydGVkIG9uIGNoYWluOiBbJHt0aGlzLmNoYWlufV0uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IHRva2Vuc1swXTtcbiAgICAgICAgc291cmNlVG9rZW5JZCA9IHRva2VuQWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcm9zZW5EYXRhID0gcGFyc2VSb3NlbkRhdGEocm9zZW5EYXRhUmF3KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGNhbGwgZGF0YTogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGFyZ2V0VG9rZW5JZCA9IHRoaXMudG9rZW5zLmdldElEKHRva2VuLCByb3NlbkRhdGEudG9DaGFpbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArXG4gICAgICAgICAgICBgOiB0b2tlbiBbJHt0b2tlbkFkZHJlc3N9XSBpcyBub3Qgc3VwcG9ydGVkIG9uIGNoYWluOiBbJHtyb3NlbkRhdGEudG9DaGFpbn1dLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvQ2hhaW46IHJvc2VuRGF0YS50b0NoYWluLFxuICAgICAgICB0b0FkZHJlc3M6IHJvc2VuRGF0YS50b0FkZHJlc3MsXG4gICAgICAgIGJyaWRnZUZlZTogcm9zZW5EYXRhLmJyaWRnZUZlZSxcbiAgICAgICAgbmV0d29ya0ZlZTogcm9zZW5EYXRhLm5ldHdvcmtGZWUsXG4gICAgICAgIGZyb21BZGRyZXNzOiB0cmFuc2FjdGlvbi5mcm9tLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogc291cmNlVG9rZW5JZCxcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogdGFyZ2V0VG9rZW5JZCxcbiAgICAgICAgc291cmNlVHhJZDogdHJhbnNhY3Rpb24uaGFzaCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIEVWTSByb3NlbiBkYXRhIGZyb20gUlBDOiAke2V9YFxuICAgICAgKTtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xufVxuIl19
@@ -1,6 +1,7 @@
1
1
  export { default as AbstractRosenDataExtractor } from './getRosenData/abstract/AbstractRosenDataExtractor';
2
2
  export { BitcoinEsploraRosenExtractor } from './getRosenData/bitcoin/BitcoinEsploraRosenExtractor';
3
3
  export { EvmRpcRosenExtractor } from './getRosenData/evm/EvmRpcRosenExtractor';
4
+ export { EvmRosenExtractor } from './getRosenData/evm/EvmRosenExtractor';
4
5
  export { BitcoinRosenExtractor } from './getRosenData/bitcoin/BitcoinRosenExtractor';
5
6
  export { CardanoKoiosRosenExtractor } from './getRosenData/cardano/CardanoKoiosRosenExtractor';
6
7
  export { CardanoOgmiosRosenExtractor } from './getRosenData/cardano/CardanoOgmiosRosenExtractor';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,wDAAwD,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,wDAAwD,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/lib/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { default as AbstractRosenDataExtractor } from './getRosenData/abstract/AbstractRosenDataExtractor';
2
2
  export { BitcoinEsploraRosenExtractor } from './getRosenData/bitcoin/BitcoinEsploraRosenExtractor';
3
3
  export { EvmRpcRosenExtractor } from './getRosenData/evm/EvmRpcRosenExtractor';
4
+ export { EvmRosenExtractor } from './getRosenData/evm/EvmRosenExtractor';
4
5
  export { BitcoinRosenExtractor } from './getRosenData/bitcoin/BitcoinRosenExtractor';
5
6
  export { CardanoKoiosRosenExtractor } from './getRosenData/cardano/CardanoKoiosRosenExtractor';
6
7
  export { CardanoOgmiosRosenExtractor } from './getRosenData/cardano/CardanoOgmiosRosenExtractor';
@@ -9,4 +10,4 @@ export { CardanoBlockFrostRosenExtractor } from './getRosenData/cardano/CardanoB
9
10
  export { CardanoGraphQLRosenExtractor } from './getRosenData/cardano/CardanoGraphQLRosenExtractor';
10
11
  export { ErgoRosenExtractor } from './getRosenData/ergo/ErgoRosenExtractor';
11
12
  export { ErgoNodeRosenExtractor } from './getRosenData/ergo/ErgoNodeRosenExtractor';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmV4cG9ydCB7IEJpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9iaXRjb2luL0JpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUnBjUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQml0Y29pblJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvYml0Y29pbi9CaXRjb2luUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0tvaW9zUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9Lb2lvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9Sb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9lcmdvL0VyZ29Sb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvTm9kZVJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZXJnby9FcmdvTm9kZVJvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzJztcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmV4cG9ydCB7IEJpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9iaXRjb2luL0JpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUnBjUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQml0Y29pblJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvYml0Y29pbi9CaXRjb2luUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0tvaW9zUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9Lb2lvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9Sb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9lcmdvL0VyZ29Sb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvTm9kZVJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZXJnby9FcmdvTm9kZVJvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzJztcbiJdfQ==