@rosen-bridge/abstract-scanner 1.0.3 → 1.1.0-db631ff1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -0
- package/dist/scanner/abstract/generalScanner.d.ts +2 -1
- package/dist/scanner/abstract/generalScanner.d.ts.map +1 -1
- package/dist/scanner/abstract/generalScanner.js +5 -4
- package/dist/scanner/abstract/scanner.d.ts +10 -2
- package/dist/scanner/abstract/scanner.d.ts.map +1 -1
- package/dist/scanner/abstract/scanner.js +34 -2
- package/dist/scanner/abstract/webSocketScanner.d.ts +2 -1
- package/dist/scanner/abstract/webSocketScanner.d.ts.map +1 -1
- package/dist/scanner/abstract/webSocketScanner.js +5 -4
- package/dist/scanner/action.d.ts +22 -1
- package/dist/scanner/action.d.ts.map +1 -1
- package/dist/scanner/action.js +60 -1
- package/dist/scanner/interfaces.d.ts +6 -0
- package/dist/scanner/interfaces.d.ts.map +1 -1
- package/dist/scanner/interfaces.js +1 -1
- package/package.json +3 -3
- package/dist/tsconfig.tsbuildinfo +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @rosen-bridge/abstract-scanner
|
|
2
2
|
|
|
3
|
+
## 1.1.0-db631ff1
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add removeOldUnusedBlocks method to AbstractScanner for cleaning up old unused blocks
|
|
8
|
+
|
|
9
|
+
## 1.0.4
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Update dependencies
|
|
14
|
+
- @rosen-bridge/abstract-extractor@3.1.2
|
|
15
|
+
- @rosen-bridge/extended-typeorm@1.1.0
|
|
16
|
+
|
|
3
17
|
## 1.0.3
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AACrD,eAAO,MAAM,kBAAkB,QAAU,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export const Seven_Days_InSeconds = 7 * 24 * 60 * 60;
|
|
2
|
+
export const One_Hour_InSeconds = 60 * 60;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBTZXZlbl9EYXlzX0luU2Vjb25kcyA9IDcgKiAyNCAqIDYwICogNjA7XG5leHBvcnQgY29uc3QgT25lX0hvdXJfSW5TZWNvbmRzID0gNjAgKiA2MDtcbiJdfQ==
|
|
@@ -2,6 +2,7 @@ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
|
2
2
|
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
3
3
|
import { AbstractNetworkConnector, Block } from '@rosen-bridge/scanner-interfaces';
|
|
4
4
|
import { BlockEntity } from '../../entities/blockEntity';
|
|
5
|
+
import { BlockTimeConfig } from '../interfaces';
|
|
5
6
|
import { AbstractScanner } from './scanner';
|
|
6
7
|
declare abstract class GeneralScanner<TransactionType> extends AbstractScanner<TransactionType> {
|
|
7
8
|
private scannerName;
|
|
@@ -12,7 +13,7 @@ declare abstract class GeneralScanner<TransactionType> extends AbstractScanner<T
|
|
|
12
13
|
private readonly initialHeight;
|
|
13
14
|
protected blockChainLastHeight: number | undefined;
|
|
14
15
|
name: () => string;
|
|
15
|
-
constructor(scannerName: string, dataSource: DataSource, initialHeight: number, network: AbstractNetworkConnector<TransactionType>, blockRetrieveGap
|
|
16
|
+
constructor(scannerName: string, dataSource: DataSource, initialHeight: number, network: AbstractNetworkConnector<TransactionType>, blockRetrieveGap: number | undefined, blockTimeConfig: BlockTimeConfig, logger?: AbstractLogger, suffix?: string | undefined);
|
|
16
17
|
/**
|
|
17
18
|
* Get the first block to process
|
|
18
19
|
* @returns The first block at the configured initial height
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generalScanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/generalScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,uBAAe,cAAc,CAC3B,eAAe,CACf,SAAQ,eAAe,CAAC,eAAe,CAAC;IAOtC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAElB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"generalScanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/generalScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,uBAAe,cAAc,CAC3B,eAAe,CACf,SAAQ,eAAe,CAAC,eAAe,CAAC;IAOtC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAElB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IAGxB,OAAO,CAAC,MAAM,CAAC;IAbjB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,SAAS,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IAE/D,IAAI,eAAmE;gBAG7D,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EAC9B,aAAa,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAClD,gBAAgB,oBAAI,EAC5B,eAAe,EAAE,eAAe,EAChC,MAAM,CAAC,EAAE,cAAc,EACf,MAAM,CAAC,EAAE,MAAM,YAAA;IAgBzB;;;OAGG;IACH,SAAS,CAAC,aAAa,QAAO,OAAO,CAAC,KAAK,CAAC,CAE1C;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,QAAa,OAAO,CAAC,OAAO,CAAC,CAUjD;IAEF;;OAEG;IACH,SAAS,CAAC,4BAA4B,GAAU,WAAW,MAAM,mBAK/D;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,GAAU,OAAO,KAAK,kCAyB1C;IAEF;;;OAGG;IACH,SAAS,CAAC,WAAW,GAAU,gBAAgB,WAAW,mBA8BxD;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,sBAepB;IAEF;;;;OAIG;IACH,SAAS,CAAC,UAAU,6BAYlB;IAEF;;;OAGG;IACI,uBAAuB,QAAO,MAAM,GAAG,SAAS,CAC3B;IAE5B;;;OAGG;IACH,MAAM,sBAyBJ;CACH;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -10,8 +10,8 @@ class GeneralScanner extends AbstractScanner {
|
|
|
10
10
|
initialHeight;
|
|
11
11
|
blockChainLastHeight = undefined;
|
|
12
12
|
name = () => this.scannerName + (this.suffix ? `-${this.suffix}` : '');
|
|
13
|
-
constructor(scannerName, dataSource, initialHeight, network, blockRetrieveGap = 0, logger, suffix) {
|
|
14
|
-
super(logger);
|
|
13
|
+
constructor(scannerName, dataSource, initialHeight, network, blockRetrieveGap = 0, blockTimeConfig, logger, suffix) {
|
|
14
|
+
super(blockTimeConfig, logger);
|
|
15
15
|
this.scannerName = scannerName;
|
|
16
16
|
this.dataSource = dataSource;
|
|
17
17
|
this.network = network;
|
|
@@ -148,16 +148,17 @@ class GeneralScanner extends AbstractScanner {
|
|
|
148
148
|
*/
|
|
149
149
|
update = async () => {
|
|
150
150
|
try {
|
|
151
|
+
let lastSavedBlock = await this.action.getLastSavedBlock();
|
|
151
152
|
const latestHeight = await this.network.getCurrentHeight();
|
|
152
153
|
if (!this.blockChainLastHeight ||
|
|
153
154
|
this.blockChainLastHeight < latestHeight)
|
|
154
155
|
this.blockChainLastHeight = latestHeight;
|
|
155
|
-
let lastSavedBlock = await this.action.getLastSavedBlock();
|
|
156
156
|
if (!lastSavedBlock) {
|
|
157
157
|
lastSavedBlock = await this.initialize();
|
|
158
158
|
}
|
|
159
159
|
else
|
|
160
160
|
await this.verifyExtractorsInitialization(lastSavedBlock);
|
|
161
|
+
await this.removeOldUnusedBlocks(lastSavedBlock);
|
|
161
162
|
if (!(await this.isForkHappen())) {
|
|
162
163
|
await this.stepForward(lastSavedBlock);
|
|
163
164
|
}
|
|
@@ -174,4 +175,4 @@ class GeneralScanner extends AbstractScanner {
|
|
|
174
175
|
};
|
|
175
176
|
}
|
|
176
177
|
export { GeneralScanner };
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9hYnN0cmFjdC9nZW5lcmFsU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSwyQkFBMkIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBZSxjQUViLFNBQVEsZUFBZ0M7SUFPOUI7SUFDQTtJQUVBO0lBQ0E7SUFFQTtJQVpPLGFBQWEsQ0FBUztJQUM3QixvQkFBb0IsR0FBdUIsU0FBUyxDQUFDO0lBRS9ELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLFlBQ1UsV0FBbUIsRUFDbkIsVUFBc0IsRUFDOUIsYUFBcUIsRUFDYixPQUFrRCxFQUNsRCxtQkFBbUIsQ0FBQyxFQUM1QixNQUF1QixFQUNmLE1BQWU7UUFFdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBUk4sZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUV0QixZQUFPLEdBQVAsT0FBTyxDQUEyQztRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQUk7UUFFcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUd2Qjs7O1dBR0c7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FDN0IsSUFBSSxDQUFDLFVB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dCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgSnNvbkJJIGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBCbG9ja0VudGl0eSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL2Jsb2NrRW50aXR5JztcbmltcG9ydCB7IEJsb2NrRGJBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVyJztcblxuYWJzdHJhY3QgY2xhc3MgR2VuZXJhbFNjYW5uZXI8XG4gIFRyYW5zYWN0aW9uVHlwZSxcbj4gZXh0ZW5kcyBBYnN0cmFjdFNjYW5uZXI8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbEhlaWdodDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYmxvY2tDaGFpbkxhc3RIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBuYW1lID0gKCkgPT4gdGhpcy5zY2FubmVyTmFtZSArICh0aGlzLnN1ZmZpeCA/IGAtJHt0aGlzLnN1ZmZpeH1gIDogJycpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2Nhbm5lck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgaW5pdGlhbEhlaWdodDogbnVtYmVyLFxuICAgIHByaXZhdGUgbmV0d29yazogQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4sXG4gICAgcHJpdmF0ZSBibG9ja1JldHJpZXZlR2FwID0gMCxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgICBwcml2YXRlIHN1ZmZpeD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobG9nZ2VyKTtcbiAgICAvKipcbiAgICAgKiBJbiBvcmRlciB0byBrZWVwIHRoZSBzY2FubmVycyBmdW5jdGlvbmFsaXRpZXMgY29uc2lzdGVudCwgd2UgYWRkIGNvbmZpZ1xuICAgICAqIGBpbml0aWFsSGVpZ2h0YCBieSBvbmUgc28gdGhhdCBpdCBtYXRjaGVzIGhvdyBvdGhlciBzY2FubmVycyB3b3JrLlxuICAgICAqL1xuICAgIHRoaXMuaW5pdGlhbEhlaWdodCA9IGluaXRpYWxIZWlnaHQgKyAxO1xuICAgIHRoaXMuc3VmZml4ID0gc3VmZml4O1xuICAgIHRoaXMuYWN0aW9uID0gbmV3IEJsb2NrRGJBY3Rpb24oXG4gICAgICB0aGlzLmRhdGFTb3VyY2UsXG4gICAgICB0aGlzLm5hbWUoKSxcbiAgICAgIHRoaXMubG9nZ2VyLmNoaWxkKCdCbG9ja0RiQWN0aW9uJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpcnN0IGJsb2NrIHRvIHByb2Nlc3NcbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGJsb2NrIGF0IHRoZSBjb25maWd1cmVkIGluaXRpYWwgaGVpZ2h0XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RCbG9jayA9ICgpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubmV0d29yay5nZXRCbG9ja0F0SGVpZ2h0KHRoaXMuaW5pdGlhbEhlaWdodCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGZvcmsgaXMgaGFwcGVuIGluIHRoZSBibG9ja2NoYWluIG9yIG5vdFxuICAgKiBAcmV0dXJuIFByb21pc2U8Qm9vbGVhbj5cbiAgICovXG4gIHByb3RlY3RlZCBpc0ZvcmtIYXBwZW4gPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgbGFzdFNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRMYXN0U2F2ZWRCbG9jaygpO1xuICAgIGlmIChsYXN0U2F2ZWRCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsYXN0U2F2ZWRCbG9ja0Zyb21OZXR3b3JrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoXG4gICAgICAgIGxhc3RTYXZlZEJsb2NrLmhlaWdodCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbGFzdFNhdmVkQmxvY2tGcm9tTmV0d29yay5oYXNoICE9PSBsYXN0U2F2ZWRCbG9jay5oYXNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpbnRyb2R1Y2VzIGRlbGF5IGJldHdlZW4gY29uc2VjdXRpdmUgYmxvY2sgcHJvY2Vzc2luZyBvcGVyYXRpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyA9IGFzeW5jIChzdGFydFRpbWU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHNwZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKG51bGwpLCB0aGlzLmJsb2NrUmV0cmlldmVHYXAgLSBzcGVudFRpbWUpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHByb2Nlc3MgYSBibG9jayBhbmQgZXhlY3V0ZSBhbGwgZXh0cmFjdG9yIG9uIGl0LlxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzQmxvY2sgPSBhc3luYyAoYmxvY2s6IEJsb2NrKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICBgUHJvY2Vzc2luZyBibG9jayBhdCBoZWlnaHQgWyR7YmxvY2suaGVpZ2h0fV0gaW4gc2Nhbm5lciAke3RoaXMubmFtZSgpfWAsXG4gICAgKTtcbiAgICBjb25zdCB0eHMgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tUeHMoYmxvY2suaGFzaCk7XG4gICAgaWYgKGJsb2NrLnR4Q291bnQpIHtcbiAgICAgIGlmICh0eHMubGVuZ3RoICE9IGJsb2NrLnR4Q291bnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEFib3J0aW5nIGJsb2NrIHByb2Nlc3Mgd2l0aCBoYXNoIFske2Jsb2NrLmhhc2h9XSBleHBlY3RlZCB0byBoYXZlICR7YmxvY2sudHhDb3VudH0gdHJhbnNhY3Rpb25zIGJ1dCBoYWQgJHt0eHMubGVuZ3RofWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgcHJvY2Vzc2luZyAke2Jsb2NrLnR4Q291bnR9IHRyYW5zYWN0aW9ucyBvZiBibG9jayB3aXRoIGhhc2ggWyR7YmxvY2suaGFzaH1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQmxvY2tUcmFuc2FjdGlvbnMoYmxvY2ssIHR4cyk7XG5cbiAgICAvLyBTcGVuZGluZyB0aW1lIGJldHdlZW4gYmxvY2sgZmV0Y2hlcyBpZiB0aGUgc2V0dGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmxvY2tSZXRyaWV2ZUdhcClcbiAgICAgIGF3YWl0IHRoaXMuZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyhzdGFydFRpbWUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogcHJvY2VzcyBmb3J3YXJkIGluIHNjYW5uZXIuIGdldCBibG9ja3MgYW5kIHN0b3JlIGluZm9ybWF0aW9uIGZyb20gdHJhbnNhY3Rpb25zLlxuICAgKiBAcGFyYW0gbGFzdFNhdmVkQmxvY2s6IGxhc3Qgc2F2ZWQgYmxvY2sgZW50aXR5IGluIGRhdGFiYXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RlcEZvcndhcmQgPSBhc3luYyAobGFzdFNhdmVkQmxvY2s6IEJsb2NrRW50aXR5KSA9PiB7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRDdXJyZW50SGVpZ2h0KCk7XG4gICAgY29uc3QgZmlyc3RCbG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldEZpcnN0U2F2ZWRCbG9jaygpO1xuICAgIGlmICghZmlyc3RCbG9jayB8fCBmaXJzdEJsb2NrLmhlaWdodCA+PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoXG4gICAgICBsZXQgaGVpZ2h0ID0gbGFzdFNhdmVkQmxvY2suaGVpZ2h0ICsgMTtcbiAgICAgIGhlaWdodCA8PSBjdXJyZW50SGVpZ2h0O1xuICAgICAgaGVpZ2h0KytcbiAgICApIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoaGVpZ2h0KTtcbiAgICAgIGlmIChsYXN0U2F2ZWRCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChibG9jay5wYXJlbnRIYXNoID09PSBsYXN0U2F2ZWRCbG9jay5oYXNoKSB7XG4gICAgICAgICAgY29uc3Qgc2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhdmVkQmxvY2sgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RTYXZlZEJsb2NrID0gc2F2ZWRCbG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgSW52YWxpZCBibG9jayBhdCBoZWlnaHQgJHtoZWlnaHR9LiBCbG9jayBpbmZvIGlzIFske0pzb25CSS5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgICAgKX0gYW5kIHRoZSBleHBlY3RlZCBwYXJlbnQgaGFzaCBpcyBbJHtsYXN0U2F2ZWRCbG9jay5oYXNofV1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0ZXAgYmFja3dhcmQgaW4gYmxvY2tjaGFpbiBhbmQgZmluZCBmb3JrIHBvaW50LlxuICAgKiBhbmQgcmVtb3ZlIGFsbCBmb3JrZWQgYmxvY2tzIGZyb20gZGF0YWJhc2VcbiAgICovXG4gIHByb3RlY3RlZCBzdGVwQmFja3dhcmQgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICB3aGlsZSAoYmxvY2spIHtcbiAgICAgIGNvbnN0IGJsb2NrRnJvbU5ldHdvcmsgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tBdEhlaWdodChcbiAgICAgICAgYmxvY2suaGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgYmxvY2tGcm9tTmV0d29yay5oYXNoID09PSBibG9jay5oYXNoICYmXG4gICAgICAgIGJsb2NrLnBhcmVudEhhc2ggPT09IGJsb2NrRnJvbU5ldHdvcmsucGFyZW50SGFzaFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZm9ya0Jsb2NrKGJsb2NrLmhlaWdodCk7XG4gICAgICBibG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldExhc3RTYXZlZEJsb2NrKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBleHRyYWN0b3JzIHdpdGggdGhlIGZpcnN0IGJsb2NrXG4gICAqIFByb2Nlc3MgYW5kIHN0b3JlIHRoZSBmaXJzdCBibG9jayBpbiBkYXRhYmFzZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLmdldEZpcnN0QmxvY2soKTtcbiAgICBhd2FpdCB0aGlzLnZlcmlmeUV4dHJhY3RvcnNJbml0aWFsaXphdGlvbih7XG4gICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCAtIDEsXG4gICAgICBoYXNoOiBibG9jay5wYXJlbnRIYXNoLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRGaXJzdFNhdmVkQmxvY2soKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBzdG9yZSBibG9jayBpbiBkYXRhYmFzZScpO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhdGVzdCBoZWlnaHQgb2YgdGhlIGJsb2NrY2hhaW5cbiAgICogQHJldHVybnMgeyBudW1iZXIgfCB1bmRlZmluZWQgfVxuICAgKi9cbiAgcHVibGljIGdldEJsb2NrQ2hhaW5MYXN0SGVpZ2h0ID0gKCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQ7XG5cbiAgLyoqXG4gICAqIHdvcmtlciBmdW5jdGlvbiB0aGF0IHJ1bnMgZm9yIHN5bmNpbmcgdGhlIGRhdGFiYXNlIHdpdGggdGhlIENhcmRhbm8gYmxvY2tjaGFpbiBhbmQgY2hlY2tzIGlmIHdlIGhhdmUgYW55IGZvcmtcbiAgICogc2NlbmFyaW8gaW4gdGhlIGJsb2NrY2hhaW4gYW5kIGludmFsaWRhdGUgdGhlIGRhdGFiYXNlIHRpbGwgdGhlIGRhdGFiYXNlIHN5bmNlZCBhZ2Fpbi5cbiAgICovXG4gIHVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGF0ZXN0SGVpZ2h0ID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEN1cnJlbnRIZWlnaHQoKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQgfHxcbiAgICAgICAgdGhpcy5ibG9ja0NoYWluTGFzdEhlaWdodCA8IGxhdGVzdEhlaWdodFxuICAgICAgKVxuICAgICAgICB0aGlzLmJsb2NrQ2hhaW5MYXN0SGVpZ2h0ID0gbGF0ZXN0SGVpZ2h0O1xuXG4gICAgICBsZXQgbGFzdFNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRMYXN0U2F2ZWRCbG9jaygpO1xuICAgICAgaWYgKCFsYXN0U2F2ZWRCbG9jaykge1xuICAgICAgICBsYXN0U2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgfSBlbHNlIGF3YWl0IHRoaXMudmVyaWZ5RXh0cmFjdG9yc0luaXRpYWxpemF0aW9uKGxhc3RTYXZlZEJsb2NrKTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuaXNGb3JrSGFwcGVuKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RlcEZvcndhcmQobGFzdFNhdmVkQmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGVwQmFja3dhcmQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwZGF0ZSBwcm9jZXNzLiAke2V9YCk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYGVycm9yIHN0YWNrOiAke2Uuc3RhY2t9YCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgeyBHZW5lcmFsU2Nhbm5lciB9O1xuIl19
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9hYnN0cmFjdC9nZW5lcmFsU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSwyQkFBMkIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBZSxjQUViLFNBQVEsZUFBZ0M7SUFPOUI7SUFDQTtJQUVBO0lBQ0E7SUFHQTtJQWJPLGFBQWEsQ0FBUztJQUM3QixvQkFBb0IsR0FBdUIsU0FBUyxDQUFDO0lBRS9ELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLFlBQ1UsV0FBbUIsRUFDbkIsVUFBc0IsRUFDOUIsYUFBcUIsRUFDYixPQUFrRCxFQUNsRCxtQkFBbUIsQ0FBQyxFQUM1QixlQUFnQyxFQUNoQyxNQUF1QixFQUNmLE1BQWU7UUFFdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQVR2QixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLFlBQU8sR0FBUCxPQUFPLENBQTJDO1FBQ2xELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBSTtRQUdwQixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBR3ZCOzs7V0FHRztRQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUks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LENBQUMsQ0FBQztDQUNIO0FBRUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcbmltcG9ydCBKc29uQkkgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQge1xuICBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IsXG4gIEJsb2NrLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEJsb2NrRW50aXR5IH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvYmxvY2tFbnRpdHknO1xuaW1wb3J0IHsgQmxvY2tEYkFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbic7XG5pbXBvcnQgeyBCbG9ja1RpbWVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFic3RyYWN0U2Nhbm5lciB9IGZyb20gJy4vc2Nhbm5lcic7XG5cbmFic3RyYWN0IGNsYXNzIEdlbmVyYWxTY2FubmVyPFxuICBUcmFuc2FjdGlvblR5cGUsXG4+IGV4dGVuZHMgQWJzdHJhY3RTY2FubmVyPFRyYW5zYWN0aW9uVHlwZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxIZWlnaHQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGJsb2NrQ2hhaW5MYXN0SGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgbmFtZSA9ICgpID0+IHRoaXMuc2Nhbm5lck5hbWUgKyAodGhpcy5zdWZmaXggPyBgLSR7dGhpcy5zdWZmaXh9YCA6ICcnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNjYW5uZXJOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIGluaXRpYWxIZWlnaHQ6IG51bWJlcixcbiAgICBwcml2YXRlIG5ldHdvcms6IEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxUcmFuc2FjdGlvblR5cGU+LFxuICAgIHByaXZhdGUgYmxvY2tSZXRyaWV2ZUdhcCA9IDAsXG4gICAgYmxvY2tUaW1lQ29uZmlnOiBCbG9ja1RpbWVDb25maWcsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICAgcHJpdmF0ZSBzdWZmaXg/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKGJsb2NrVGltZUNvbmZpZywgbG9nZ2VyKTtcbiAgICAvKipcbiAgICAgKiBJbiBvcmRlciB0byBrZWVwIHRoZSBzY2FubmVycyBmdW5jdGlvbmFsaXRpZXMgY29uc2lzdGVudCwgd2UgYWRkIGNvbmZpZ1xuICAgICAqIGBpbml0aWFsSGVpZ2h0YCBieSBvbmUgc28gdGhhdCBpdCBtYXRjaGVzIGhvdyBvdGhlciBzY2FubmVycyB3b3JrLlxuICAgICAqL1xuICAgIHRoaXMuaW5pdGlhbEhlaWdodCA9IGluaXRpYWxIZWlnaHQgKyAxO1xuICAgIHRoaXMuc3VmZml4ID0gc3VmZml4O1xuICAgIHRoaXMuYWN0aW9uID0gbmV3IEJsb2NrRGJBY3Rpb24oXG4gICAgICB0aGlzLmRhdGFTb3VyY2UsXG4gICAgICB0aGlzLm5hbWUoKSxcbiAgICAgIHRoaXMubG9nZ2VyLmNoaWxkKCdCbG9ja0RiQWN0aW9uJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpcnN0IGJsb2NrIHRvIHByb2Nlc3NcbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGJsb2NrIGF0IHRoZSBjb25maWd1cmVkIGluaXRpYWwgaGVpZ2h0XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RCbG9jayA9ICgpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubmV0d29yay5nZXRCbG9ja0F0SGVpZ2h0KHRoaXMuaW5pdGlhbEhlaWdodCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGZvcmsgaXMgaGFwcGVuIGluIHRoZSBibG9ja2NoYWluIG9yIG5vdFxuICAgKiBAcmV0dXJuIFByb21pc2U8Qm9vbGVhbj5cbiAgICovXG4gIHByb3RlY3RlZCBpc0ZvcmtIYXBwZW4gPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgbGFzdFNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRMYXN0U2F2ZWRCbG9jaygpO1xuICAgIGlmIChsYXN0U2F2ZWRCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsYXN0U2F2ZWRCbG9ja0Zyb21OZXR3b3JrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoXG4gICAgICAgIGxhc3RTYXZlZEJsb2NrLmhlaWdodCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbGFzdFNhdmVkQmxvY2tGcm9tTmV0d29yay5oYXNoICE9PSBsYXN0U2F2ZWRCbG9jay5oYXNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpbnRyb2R1Y2VzIGRlbGF5IGJldHdlZW4gY29uc2VjdXRpdmUgYmxvY2sgcHJvY2Vzc2luZyBvcGVyYXRpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyA9IGFzeW5jIChzdGFydFRpbWU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHNwZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKG51bGwpLCB0aGlzLmJsb2NrUmV0cmlldmVHYXAgLSBzcGVudFRpbWUpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHByb2Nlc3MgYSBibG9jayBhbmQgZXhlY3V0ZSBhbGwgZXh0cmFjdG9yIG9uIGl0LlxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzQmxvY2sgPSBhc3luYyAoYmxvY2s6IEJsb2NrKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICBgUHJvY2Vzc2luZyBibG9jayBhdCBoZWlnaHQgWyR7YmxvY2suaGVpZ2h0fV0gaW4gc2Nhbm5lciAke3RoaXMubmFtZSgpfWAsXG4gICAgKTtcbiAgICBjb25zdCB0eHMgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tUeHMoYmxvY2suaGFzaCk7XG4gICAgaWYgKGJsb2NrLnR4Q291bnQpIHtcbiAgICAgIGlmICh0eHMubGVuZ3RoICE9IGJsb2NrLnR4Q291bnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEFib3J0aW5nIGJsb2NrIHByb2Nlc3Mgd2l0aCBoYXNoIFske2Jsb2NrLmhhc2h9XSBleHBlY3RlZCB0byBoYXZlICR7YmxvY2sudHhDb3VudH0gdHJhbnNhY3Rpb25zIGJ1dCBoYWQgJHt0eHMubGVuZ3RofWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgcHJvY2Vzc2luZyAke2Jsb2NrLnR4Q291bnR9IHRyYW5zYWN0aW9ucyBvZiBibG9jayB3aXRoIGhhc2ggWyR7YmxvY2suaGFzaH1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQmxvY2tUcmFuc2FjdGlvbnMoYmxvY2ssIHR4cyk7XG5cbiAgICAvLyBTcGVuZGluZyB0aW1lIGJldHdlZW4gYmxvY2sgZmV0Y2hlcyBpZiB0aGUgc2V0dGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmxvY2tSZXRyaWV2ZUdhcClcbiAgICAgIGF3YWl0IHRoaXMuZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyhzdGFydFRpbWUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogcHJvY2VzcyBmb3J3YXJkIGluIHNjYW5uZXIuIGdldCBibG9ja3MgYW5kIHN0b3JlIGluZm9ybWF0aW9uIGZyb20gdHJhbnNhY3Rpb25zLlxuICAgKiBAcGFyYW0gbGFzdFNhdmVkQmxvY2s6IGxhc3Qgc2F2ZWQgYmxvY2sgZW50aXR5IGluIGRhdGFiYXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RlcEZvcndhcmQgPSBhc3luYyAobGFzdFNhdmVkQmxvY2s6IEJsb2NrRW50aXR5KSA9PiB7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRDdXJyZW50SGVpZ2h0KCk7XG4gICAgY29uc3QgZmlyc3RCbG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldEZpcnN0U2F2ZWRCbG9jaygpO1xuICAgIGlmICghZmlyc3RCbG9jayB8fCBmaXJzdEJsb2NrLmhlaWdodCA+PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoXG4gICAgICBsZXQgaGVpZ2h0ID0gbGFzdFNhdmVkQmxvY2suaGVpZ2h0ICsgMTtcbiAgICAgIGhlaWdodCA8PSBjdXJyZW50SGVpZ2h0O1xuICAgICAgaGVpZ2h0KytcbiAgICApIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoaGVpZ2h0KTtcbiAgICAgIGlmIChsYXN0U2F2ZWRCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChibG9jay5wYXJlbnRIYXNoID09PSBsYXN0U2F2ZWRCbG9jay5oYXNoKSB7XG4gICAgICAgICAgY29uc3Qgc2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhdmVkQmxvY2sgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RTYXZlZEJsb2NrID0gc2F2ZWRCbG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgSW52YWxpZCBibG9jayBhdCBoZWlnaHQgJHtoZWlnaHR9LiBCbG9jayBpbmZvIGlzIFske0pzb25CSS5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgICAgKX0gYW5kIHRoZSBleHBlY3RlZCBwYXJlbnQgaGFzaCBpcyBbJHtsYXN0U2F2ZWRCbG9jay5oYXNofV1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0ZXAgYmFja3dhcmQgaW4gYmxvY2tjaGFpbiBhbmQgZmluZCBmb3JrIHBvaW50LlxuICAgKiBhbmQgcmVtb3ZlIGFsbCBmb3JrZWQgYmxvY2tzIGZyb20gZGF0YWJhc2VcbiAgICovXG4gIHByb3RlY3RlZCBzdGVwQmFja3dhcmQgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICB3aGlsZSAoYmxvY2spIHtcbiAgICAgIGNvbnN0IGJsb2NrRnJvbU5ldHdvcmsgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tBdEhlaWdodChcbiAgICAgICAgYmxvY2suaGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgYmxvY2tGcm9tTmV0d29yay5oYXNoID09PSBibG9jay5oYXNoICYmXG4gICAgICAgIGJsb2NrLnBhcmVudEhhc2ggPT09IGJsb2NrRnJvbU5ldHdvcmsucGFyZW50SGFzaFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZm9ya0Jsb2NrKGJsb2NrLmhlaWdodCk7XG4gICAgICBibG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldExhc3RTYXZlZEJsb2NrKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBleHRyYWN0b3JzIHdpdGggdGhlIGZpcnN0IGJsb2NrXG4gICAqIFByb2Nlc3MgYW5kIHN0b3JlIHRoZSBmaXJzdCBibG9jayBpbiBkYXRhYmFzZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLmdldEZpcnN0QmxvY2soKTtcbiAgICBhd2FpdCB0aGlzLnZlcmlmeUV4dHJhY3RvcnNJbml0aWFsaXphdGlvbih7XG4gICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCAtIDEsXG4gICAgICBoYXNoOiBibG9jay5wYXJlbnRIYXNoLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRGaXJzdFNhdmVkQmxvY2soKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBzdG9yZSBibG9jayBpbiBkYXRhYmFzZScpO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhdGVzdCBoZWlnaHQgb2YgdGhlIGJsb2NrY2hhaW5cbiAgICogQHJldHVybnMgeyBudW1iZXIgfCB1bmRlZmluZWQgfVxuICAgKi9cbiAgcHVibGljIGdldEJsb2NrQ2hhaW5MYXN0SGVpZ2h0ID0gKCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQ7XG5cbiAgLyoqXG4gICAqIHdvcmtlciBmdW5jdGlvbiB0aGF0IHJ1bnMgZm9yIHN5bmNpbmcgdGhlIGRhdGFiYXNlIHdpdGggdGhlIENhcmRhbm8gYmxvY2tjaGFpbiBhbmQgY2hlY2tzIGlmIHdlIGhhdmUgYW55IGZvcmtcbiAgICogc2NlbmFyaW8gaW4gdGhlIGJsb2NrY2hhaW4gYW5kIGludmFsaWRhdGUgdGhlIGRhdGFiYXNlIHRpbGwgdGhlIGRhdGFiYXNlIHN5bmNlZCBhZ2Fpbi5cbiAgICovXG4gIHVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IGxhc3RTYXZlZEJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICAgIGNvbnN0IGxhdGVzdEhlaWdodCA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRDdXJyZW50SGVpZ2h0KCk7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmJsb2NrQ2hhaW5MYXN0SGVpZ2h0IHx8XG4gICAgICAgIHRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQgPCBsYXRlc3RIZWlnaHRcbiAgICAgIClcbiAgICAgICAgdGhpcy5ibG9ja0NoYWluTGFzdEhlaWdodCA9IGxhdGVzdEhlaWdodDtcblxuICAgICAgaWYgKCFsYXN0U2F2ZWRCbG9jaykge1xuICAgICAgICBsYXN0U2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgfSBlbHNlIGF3YWl0IHRoaXMudmVyaWZ5RXh0cmFjdG9yc0luaXRpYWxpemF0aW9uKGxhc3RTYXZlZEJsb2NrKTtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlT2xkVW51c2VkQmxvY2tzKGxhc3RTYXZlZEJsb2NrKTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuaXNGb3JrSGFwcGVuKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RlcEZvcndhcmQobGFzdFNhdmVkQmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGVwQmFja3dhcmQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwZGF0ZSBwcm9jZXNzLiAke2V9YCk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYGVycm9yIHN0YWNrOiAke2Uuc3RhY2t9YCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgeyBHZW5lcmFsU2Nhbm5lciB9O1xuIl19
|
|
@@ -3,14 +3,17 @@ import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
|
3
3
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
4
4
|
import { ObjectLiteral } from '@rosen-bridge/extended-typeorm';
|
|
5
5
|
import { Block, BlockInfo } from '@rosen-bridge/scanner-interfaces';
|
|
6
|
+
import { BlockEntity } from '../../entities/blockEntity';
|
|
6
7
|
import { BlockDbAction } from '../action';
|
|
8
|
+
import { BlockTimeConfig } from '../interfaces';
|
|
7
9
|
export declare abstract class AbstractScanner<TransactionType> {
|
|
8
10
|
action: BlockDbAction;
|
|
9
11
|
extractors: Array<AbstractExtractor<TransactionType, ObjectLiteral>>;
|
|
10
12
|
newExtractors: Array<AbstractExtractor<TransactionType, ObjectLiteral>>;
|
|
11
13
|
logger: AbstractLogger;
|
|
12
14
|
initializeMutex: Mutex;
|
|
13
|
-
|
|
15
|
+
blockTimeConfig: BlockTimeConfig;
|
|
16
|
+
constructor(blockTimeConfig: BlockTimeConfig, logger?: AbstractLogger);
|
|
14
17
|
abstract name: () => string;
|
|
15
18
|
/**
|
|
16
19
|
* fork blocks from specific height from scanner.
|
|
@@ -22,7 +25,7 @@ export declare abstract class AbstractScanner<TransactionType> {
|
|
|
22
25
|
* @param block: selected block
|
|
23
26
|
* @param transactions: list of transaction for selected block
|
|
24
27
|
*/
|
|
25
|
-
protected processBlockTransactions: (block: Block, transactions: Array<TransactionType>) => Promise<false |
|
|
28
|
+
protected processBlockTransactions: (block: Block, transactions: Array<TransactionType>) => Promise<false | BlockEntity>;
|
|
26
29
|
/**
|
|
27
30
|
* register a nre extractor to scanner.
|
|
28
31
|
* @param extractor
|
|
@@ -45,5 +48,10 @@ export declare abstract class AbstractScanner<TransactionType> {
|
|
|
45
48
|
* @param block
|
|
46
49
|
*/
|
|
47
50
|
protected verifyExtractorsInitialization: (block: BlockInfo) => Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Removes unused blocks from the database
|
|
53
|
+
* @param lastSavedBlock
|
|
54
|
+
*/
|
|
55
|
+
removeOldUnusedBlocks: (lastSavedBlock: BlockEntity | undefined) => Promise<void>;
|
|
48
56
|
}
|
|
49
57
|
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,8BAAsB,eAAe,CAAC,eAAe;IACnD,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IACrE,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;gBAErB,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,cAAc;IAerE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAE5B;;;OAGG;IACH,SAAS,CAAC,SAAS,GAAU,QAAQ,MAAM,mBAiBzC;IAEF;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,GAChC,OAAO,KAAK,EACZ,cAAc,KAAK,CAAC,eAAe,CAAC,kCAyBpC;IAEF;;;OAGG;IACH,iBAAiB,GACf,WAAW,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,KAC3D,OAAO,CAAC,IAAI,CAAC,CAmBd;IAEF;;;OAGG;IACH,eAAe,GACb,WAAW,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,KAC3D,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF;;;;OAIG;IACH,OAAO,CAAC,oBAAoB,CAkB1B;IAEF;;;;OAIG;IACH,SAAS,CAAC,8BAA8B,GAAU,OAAO,SAAS,mBAqDhE;IAEF;;;OAGG;IACH,qBAAqB,GACnB,gBAAgB,WAAW,GAAG,SAAS,KACtC,OAAO,CAAC,IAAI,CAAC,CAiCd;CACH"}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import { Mutex } from 'await-semaphore';
|
|
2
2
|
import { difference, remove } from 'lodash-es';
|
|
3
3
|
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
4
|
+
import { One_Hour_InSeconds, Seven_Days_InSeconds } from '../../constants';
|
|
4
5
|
export class AbstractScanner {
|
|
5
6
|
action;
|
|
6
7
|
extractors;
|
|
7
8
|
newExtractors;
|
|
8
9
|
logger;
|
|
9
10
|
initializeMutex;
|
|
10
|
-
|
|
11
|
+
blockTimeConfig;
|
|
12
|
+
constructor(blockTimeConfig, logger) {
|
|
11
13
|
this.extractors = [];
|
|
12
14
|
this.newExtractors = [];
|
|
13
15
|
this.logger = logger ? logger : new DummyLogger();
|
|
14
16
|
this.initializeMutex = new Mutex();
|
|
17
|
+
this.blockTimeConfig = {
|
|
18
|
+
blockTime: blockTimeConfig?.blockTime,
|
|
19
|
+
blockAgeThreshold: blockTimeConfig?.blockAgeThreshold ?? Seven_Days_InSeconds,
|
|
20
|
+
blockTrimCountInRound: blockTimeConfig?.blockTrimCountInRound ?? One_Hour_InSeconds,
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
23
|
/**
|
|
17
24
|
* fork blocks from specific height from scanner.
|
|
@@ -138,5 +145,30 @@ export class AbstractScanner {
|
|
|
138
145
|
release();
|
|
139
146
|
}
|
|
140
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* Removes unused blocks from the database
|
|
150
|
+
* @param lastSavedBlock
|
|
151
|
+
*/
|
|
152
|
+
removeOldUnusedBlocks = async (lastSavedBlock) => {
|
|
153
|
+
try {
|
|
154
|
+
this.logger.debug('Starting the process to remove old unused blocks');
|
|
155
|
+
const extractorUsedBlocksQueries = this.extractors
|
|
156
|
+
.map((extracor) => extracor.createUsedBlocksQuery())
|
|
157
|
+
.filter((value) => value != undefined);
|
|
158
|
+
const deletedBlockCount = Math.floor(this.blockTimeConfig.blockTrimCountInRound /
|
|
159
|
+
this.blockTimeConfig.blockTime);
|
|
160
|
+
const unusedBlockHashes = await this.action.removeUnusedBlocksInBatches(extractorUsedBlocksQueries, deletedBlockCount, this.name(), this.blockTimeConfig.blockAgeThreshold, lastSavedBlock);
|
|
161
|
+
if (unusedBlockHashes.length)
|
|
162
|
+
this.logger.debug(`Successfully removed old unused block hashes: ${unusedBlockHashes.join(', ')}`);
|
|
163
|
+
else
|
|
164
|
+
this.logger.debug('No unused block hashes found to remove.');
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.logger.error(`An error occurred while removing old unused blocks: ${error}`);
|
|
168
|
+
if (error instanceof Error && error.stack) {
|
|
169
|
+
this.logger.error(`error stack: ${error.stack}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
141
173
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2FubmVyL2Fic3RyYWN0L3NjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRy9DLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFNNUUsTUFBTSxPQUFnQixlQUFlO0lBQ25DLE1BQU0sQ0FBZ0I7SUFDdEIsVUFBVSxDQUEyRDtJQUNyRSxhQUFhLENBQTJEO0lBQ3hFLE1BQU0sQ0FBaUI7SUFDdkIsZUFBZSxDQUFRO0lBRXZCLFlBQVksTUFBdUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUlEOzs7T0FHRztJQUNPLFNBQVMsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUU7UUFDN0MsSUFBSSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsT0FBTyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixtQkFBbUIsU0FBUyxDQUFDLElBQUksY0FBYyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQ2xFLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsaUJB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QkFBcUIsRUFBRSxDQUN6RCxDQUFDO1lBQ0osZ0RBQWdEO1lBQ2hELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEUsTUFBTSx5QkFBeUIsR0FBRyxVQUFVLENBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzFCLGtCQUFrQixDQUNuQixDQUFDO1lBQ0YsSUFBSSx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsaUNBQWlDLHlCQUF5QixFQUFFLENBQzdELENBQUM7WUFDSixpQ0FBaUM7WUFDakMsTUFBTSxzQkFBc0IsR0FBRztnQkFDN0IsR0FBRyx5QkFBeUI7Z0JBQzVCLEdBQUcscUJBQXFCO2FBQ3pCLENBQUM7WUFDRixJQUFJLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsZ0JBQ0Usc0JBQXNCLENBQUMsTUFDekIsc0JBQXNCLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUNwQyxFQUFFLHNCQUFzQixFQUFFLENBQzNCLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQzFCLENBQUM7Z0JBQVMsQ0FBQztZQUNULE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTXV0ZXggfSBmcm9tICdhd2FpdC1zZW1hcGhvcmUnO1xuaW1wb3J0IHsgZGlmZmVyZW5jZSwgcmVtb3ZlIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RFeHRyYWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBPYmplY3RMaXRlcmFsIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcbmltcG9ydCB7IEJsb2NrLCBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEJsb2NrRGJBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTY2FubmVyPFRyYW5zYWN0aW9uVHlwZT4ge1xuICBhY3Rpb246IEJsb2NrRGJBY3Rpb247XG4gIGV4dHJhY3RvcnM6IEFycmF5PEFic3RyYWN0RXh0cmFjdG9yPFRyYW5zYWN0aW9uVHlwZSwgT2JqZWN0TGl0ZXJhbD4+O1xuICBuZXdFeHRyYWN0b3JzOiBBcnJheTxBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGUsIE9iamVjdExpdGVyYWw+PjtcbiAgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcjtcbiAgaW5pdGlhbGl6ZU11dGV4OiBNdXRleDtcblxuICBjb25zdHJ1Y3Rvcihsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHRoaXMuZXh0cmFjdG9ycyA9IFtdO1xuICAgIHRoaXMubmV3RXh0cmFjdG9ycyA9IFtdO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gICAgdGhpcy5pbml0aWFsaXplTXV0ZXggPSBuZXcgTXV0ZXgoKTtcbiAgfVxuXG4gIGFic3RyYWN0IG5hbWU6ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogZm9yayBibG9ja3MgZnJvbSBzcGVjaWZpYyBoZWlnaHQgZnJvbSBzY2FubmVyLlxuICAgKiBAcGFyYW0gaGVpZ2h0OiBzZWxlY3RlZCBoZWlnaHRcbiAgICovXG4gIHByb3RlY3RlZCBmb3JrQmxvY2sgPSBhc3luYyAoaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBsZXQgbGFzdEJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICB3aGlsZSAobGFzdEJsb2NrICYmIGxhc3RCbG9jay5oZWlnaHQgPj0gaGVpZ2h0KSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJldmVydGluZyBibG9jayAke2xhc3RCbG9jay5oYXNofSBhdCBoZWlnaHQgJHtsYXN0QmxvY2suaGVpZ2h0fWAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hY3Rpb24ucmV2ZXJ0QmxvY2tTdGF0dXMoXG4gICAgICAgIGxhc3RCbG9jay5oZWlnaHQsXG4gICAgICAgIGxhc3RCbG9jay5wYXJlbnRIYXNoLFxuICAgICAgICB0aGlzLmV4dHJhY3RvcnMubWFwKChlKSA9PiBlLmdldElkKCkpLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIHRoaXMuZXh0cmFjdG9ycykge1xuICAgICAgICBhd2FpdCBleHRyYWN0b3IuZm9ya0Jsb2NrKGxhc3RCbG9jay5oYXNoKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9uLnJlbW92ZUJsb2Nrc0Zyb21IZWlnaHQobGFzdEJsb2NrLmhlaWdodCk7XG4gICAgICBsYXN0QmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRCbG9ja0F0SGVpZ2h0KGxhc3RCbG9jay5oZWlnaHQgLSAxKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHByb2Nlc3MgYSBibG9jayBhbmQgYWxsIG9mIGl0cyB0cmFuc2FjdGlvbnMuIHN0b3JlIGFueSBpbmZvcm1hdGlvbiBpbnRvIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBibG9jazogc2VsZWN0ZWQgYmxvY2tcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uczogbGlzdCBvZiB0cmFuc2FjdGlvbiBmb3Igc2VsZWN0ZWQgYmxvY2tcbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzQmxvY2tUcmFuc2FjdGlvbnMgPSBhc3luYyAoXG4gICAgYmxvY2s6IEJsb2NrLFxuICAgIHRyYW5zYWN0aW9uczogQXJyYXk8VHJhbnNhY3Rpb25UeXBlPixcbiAgKSA9PiB7XG4gICAgY29uc3Qgc2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLnNhdmVCbG9jayhibG9jayk7XG4gICAgaWYgKHR5cGVvZiBzYXZlZEJsb2NrID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIHRoaXMuZXh0cmFjdG9ycykge1xuICAgICAgaWYgKCEoYXdhaXQgZXh0cmFjdG9yLnByb2Nlc3NUcmFuc2FjdGlvbnModHJhbnNhY3Rpb25zLCBzYXZlZEJsb2NrKSkpIHtcbiAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzdWNjZXNzICYmXG4gICAgICAoYXdhaXQgdGhpcy5hY3Rpb24udXBkYXRlQmxvY2tTdGF0dXMoXG4gICAgICAgIGJsb2NrLmhlaWdodCxcbiAgICAgICAgYmxvY2suaGFzaCxcbiAgICAgICAgdGhpcy5leHRyYWN0b3JzLm1hcCgoZSkgPT4gZS5nZXRJZCgpKSxcbiAgICAgICkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gc2F2ZWRCbG9jaztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZWdpc3RlciBhIG5yZSBleHRyYWN0b3IgdG8gc2Nhbm5lci5cbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgcmVnaXN0ZXJFeHRyYWN0b3IgPSBhc3luYyAoXG4gICAgZXh0cmFjdG9yOiBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGUsIE9iamVjdExpdGVyYWw+LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBub3RSZWdpc3RlcmVkSW4gPSAoXG4gICAgICBleHRyYWN0b3JzOiBBcnJheTxBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGUsIE9iamVjdExpdGVyYWw+PixcbiAgICApID0+XG4gICAgICBleHRyYWN0b3JzLmZpbHRlcihcbiAgICAgICAgKGV4dHJhY3Rvckl0ZW0pID0+IGV4dHJhY3Rvckl0ZW0uZ2V0SWQoKSA9PT0gZXh0cmFjdG9yLmdldElkKCksXG4gICAgICApLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgdGhpcy5pbml0aWFsaXplTXV0ZXguYWNxdWlyZSgpO1xuICAgIGlmIChcbiAgICAgIG5vdFJlZ2lzdGVyZWRJbih0aGlzLmV4dHJhY3RvcnMpICYmXG4gICAgICBub3RSZWdpc3RlcmVkSW4odGhpcy5uZXdFeHRyYWN0b3JzKVxuICAgICkge1xuICAgICAgdGhpcy5uZXdFeHRyYWN0b3JzLnB1c2goZXh0cmFjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgYEV4dHJhY3RvciB3aXRoIGlkICR7ZXh0cmFjdG9yLmdldElkKCl9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZGAsXG4gICAgICApO1xuICAgIH1cbiAgICByZWxlYXNlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJlbW92ZSBhbiBleHRyYWN0b3IgZnJvbSBzY2FubmVyXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHJlbW92ZUV4dHJhY3RvciA9IGFzeW5jIChcbiAgICBleHRyYWN0b3I6IEFic3RyYWN0RXh0cmFjdG9yPFRyYW5zYWN0aW9uVHlwZSwgT2JqZWN0TGl0ZXJhbD4sXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlbW92ZUZuID0gKGV4OiBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGUsIE9iamVjdExpdGVyYWw+KSA9PlxuICAgICAgZXguZ2V0SWQoKSA9PT0gZXh0cmFjdG9yLmdldElkKCk7XG5cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgdGhpcy5pbml0aWFsaXplTXV0ZXguYWNxdWlyZSgpO1xuICAgIHJlbW92ZSh0aGlzLmV4dHJhY3RvcnMsIHJlbW92ZUZuKTtcbiAgICByZW1vdmUodGhpcy5uZXdFeHRyYWN0b3JzLCByZW1vdmVGbik7XG4gICAgcmVsZWFzZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGFsbCBzcGVjaWZpZWQgZXh0cmFjdG9ycyBhbmQgc3RvcmUgdGhlIHVwZGF0ZWQgc3RhdHVzXG4gICAqIEBwYXJhbSBleHRyYWN0b3JJZHNcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRXh0cmFjdG9ycyA9IGFzeW5jIChcbiAgICBleHRyYWN0b3JJZHM6IHN0cmluZ1tdLFxuICAgIGJsb2NrOiBCbG9ja0luZm8sXG4gICkgPT4ge1xuICAgIGNvbnN0IGFsbEV4dHJhY3RvcnMgPSBbLi4udGhpcy5leHRyYWN0b3JzLCAuLi50aGlzLm5ld0V4dHJhY3RvcnNdO1xuICAgIGNvbnN0IGluaXRSZXF1aXJlZEV4dHJhY3RvcnMgPSBhbGxFeHRyYWN0b3JzLmZpbHRlcigoZXh0cmFjdG9yKSA9PlxuICAgICAgZXh0cmFjdG9ySWRzLmluY2x1ZGVzKGV4dHJhY3Rvci5nZXRJZCgpKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIGluaXRSZXF1aXJlZEV4dHJhY3RvcnMpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEluaXRpYWxpemluZyBbJHtleHRyYWN0b3IuZ2V0SWQoKX1dIGJveGVzYCk7XG4gICAgICBhd2FpdCBleHRyYWN0b3IuaW5pdGlhbGl6ZURhdGEoYmxvY2spO1xuICAgICAgYXdhaXQgdGhpcy5hY3Rpb24udXBkYXRlT3JJbnNlcnRFeHRyYWN0b3JTdGF0dXMoXG4gICAgICAgIGV4dHJhY3Rvci5nZXRJZCgpLFxuICAgICAgICBibG9jay5oZWlnaHQsXG4gICAgICAgIGJsb2NrLmhhc2gsXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEluaXRpYWxpemF0aW9uIGZpbmlzaGVkIGZvciBbJHtleHRyYWN0b3IuZ2V0SWQoKX1dYCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgZXh0cmFjdG9ycyBpZiB0aGV5J3JlIG5vdCBzeW5jZWQgb3Igbm90IGluaXRpYWxpemVkIHlldCxcbiAgICogYW5kIHVwZGF0ZSB0aGUgYWN0aXZlIGV4dHJhY3RvcnMgbGlzdFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIHByb3RlY3RlZCB2ZXJpZnlFeHRyYWN0b3JzSW5pdGlhbGl6YXRpb24gPSBhc3luYyAoYmxvY2s6IEJsb2NrSW5mbykgPT4ge1xuICAgIGNvbnN0IGdldElkcyA9IChcbiAgICAgIGV4dHJhY3RvcnM6IEFycmF5PEFic3RyYWN0RXh0cmFjdG9yPFRyYW5zYWN0aW9uVHlwZSwgT2JqZWN0TGl0ZXJhbD4+LFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIGV4dHJhY3RvcnMubWFwKChleHRyYWN0b3IpID0+IGV4dHJhY3Rvci5nZXRJZCgpKTtcbiAgICB9O1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBJbml0aWFsaXppbmcgZXh0cmFjdG9ycyBmb3IgYmxvY2sgWyR7YmxvY2suaGVpZ2h0fV1gKTtcbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgdGhpcy5pbml0aWFsaXplTXV0ZXguYWNxdWlyZSgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleHRyYWN0b3JzU3RhdHVzID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0RXh0cmFjdG9yc1N0YXR1cyhbXG4gICAgICAgIC4uLmdldElkcyh0aGlzLmV4dHJhY3RvcnMpLFxuICAgICAgICAuLi5nZXRJZHModGhpcy5uZXdFeHRyYWN0b3JzKSxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBTdG9yZWQgZXh0cmFjdG9ycyBzdGF0dXMgYXJlIFske0pTT04uc3RyaW5naWZ5KGV4dHJhY3RvcnNTdGF0dXMpfV1gLFxuICAgICAgKTtcbiAgICAgIC8vIEZpbmQgZXh0cmFjdG9ycyBub3Qgc3luY2VkIHdpdGggdGhlIGxhdGVzdCBoZWlnaHRcbiAgICAgIGNvbnN0IG5vdFN5bmNlZEV4dHJhY3RvcklkcyA9IGV4dHJhY3RvcnNTdGF0dXNcbiAgICAgICAgLmZpbHRlcigoZXMpID0+IGVzLnVwZGF0ZUJsb2NrSGFzaCAhPSBibG9jay5oYXNoKVxuICAgICAgICAubWFwKChlcykgPT4gZXMuZXh0cmFjdG9ySWQpO1xuICAgICAgaWYgKG5vdFN5bmNlZEV4dHJhY3Rvcklkcy5sZW5ndGggPiAwKVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgT2xkIG5vdCBzeW5jZWQgZXh0cmFjdG9ycyBhcmUgJHtub3RTeW5jZWRFeHRyYWN0b3JJZHN9YCxcbiAgICAgICAgKTtcbiAgICAgIC8vIEZpbmQgbmV3IGV4dHJhY3RvcnMgbm90IGF2YWlsYWJsZSBpbiBkYXRhYmFzZVxuICAgICAgY29uc3Qgc3RvcmVkRXh0cmFjdG9ySWRzID0gZXh0cmFjdG9yc1N0YXR1cy5tYXAoKGVzKSA9PiBlcy5leHRyYWN0b3JJZCk7XG4gICAgICBjb25zdCBuZXdSZWdpc3RlcmVkRXh0cmFjdG9ySWRzID0gZGlmZmVyZW5jZShcbiAgICAgICAgZ2V0SWRzKHRoaXMubmV3RXh0cmFjdG9ycyksXG4gICAgICAgIHN0b3JlZEV4dHJhY3RvcklkcyxcbiAgICAgICk7XG4gICAgICBpZiAobmV3UmVnaXN0ZXJlZEV4dHJhY3Rvcklkcy5sZW5ndGggPiAwKVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgTmV3IHJlZ2lzdGVyZWQgZXh0cmFjdG9ycyBhcmUgJHtuZXdSZWdpc3RlcmVkRXh0cmFjdG9ySWRzfWAsXG4gICAgICAgICk7XG4gICAgICAvLyBJbml0aWFsaXplIHJlcXVpcmVkIGV4dHJhY3RvcnNcbiAgICAgIGNvbnN0IGluaXRSZXF1aXJlZEV4dHJhY3RvcnMgPSBbXG4gICAgICAgIC4uLm5ld1JlZ2lzdGVyZWRFeHRyYWN0b3JJZHMsXG4gICAgICAgIC4uLm5vdFN5bmNlZEV4dHJhY3RvcklkcyxcbiAgICAgIF07XG4gICAgICBpZiAoaW5pdFJlcXVpcmVkRXh0cmFjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgYEluaXRpYWxpemluZyAke1xuICAgICAgICAgICAgaW5pdFJlcXVpcmVkRXh0cmFjdG9ycy5sZW5ndGhcbiAgICAgICAgICB9IGV4dHJhY3RvcihzKSBmb3IgWyR7dGhpcy5uYW1lKCl9XWAsXG4gICAgICAgICAgeyBpbml0UmVxdWlyZWRFeHRyYWN0b3JzIH0sXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUV4dHJhY3RvcnMoaW5pdFJlcXVpcmVkRXh0cmFjdG9ycywgYmxvY2spO1xuICAgICAgfVxuICAgICAgdGhpcy5leHRyYWN0b3JzLnB1c2goLi4udGhpcy5uZXdFeHRyYWN0b3JzKTtcbiAgICAgIHRoaXMubmV3RXh0cmFjdG9ycyA9IFtdO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2FubmVyL2Fic3RyYWN0L3NjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRy9DLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLM0UsTUFBTSxPQUFnQixlQUFlO0lBQ25DLE1BQU0sQ0FBZ0I7SUFDdEIsVUFBVSxDQUEyRDtJQUNyRSxhQUFhLENBQTJEO0lBQ3hFLE1BQU0sQ0FBaUI7SUFDdkIsZUFBZSxDQUFRO0lBQ3ZCLGVBQWUsQ0FBa0I7SUFFakMsWUFBWSxlQUFnQyxFQUFFLE1BQXVCO1FBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBRW5DLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTO1lBQ3JDLGlCQUFpQixFQUNmLGVBQWUsRUFBRSxpQkFBaUIsSUFBSSxvQkFBb0I7WUFDNUQscUJBQXFCLEVBQ25CLGVBQWUsRUFBRSxxQkFBcUIsSUFBSSxrQkFBa0I7U0FDL0QsQ0FBQztJQUNKLENBQUM7SUFJRDs7O09BR0c7SUFDTyxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQzdDLElBQUksU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RELE9BQU8sU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsbUJBQW1CLFNBQVMsQ0FBQyxJQUFJLGNBQWMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUNsRSxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUNqQyxTQUFTLENBQUMsTUFBTSxFQUNoQixTQUFTLENBQUMsVUFBVSxFQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQ3RDLENBQUM7WUFDRixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRCxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDTyx3QkFBd0IsR0FBRyxLQUFLLEVBQ3hDLEtBQVksRUFDWixZQUFvQyxFQUNwQyxFQUFFO1FBQ0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNoQixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUNFLE9BQU87WUFDUCxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDbEMsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsSUFBSSxFQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDdEMsQ0FBQyxFQUNGLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxpQkFBaUIsR0FBRyxLQUFLLEVBQ3ZCLFNBQTRELEVBQzdDLEVBQUU7UUFDakIsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsVUFBb0UsRUFDcEUsRUFBRSxDQUNGLFVBQVUsQ0FBQyxNQUFNLENBQ2YsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQy9ELENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckQsSUFDRSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNoQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUNuQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxxQkFBcUIsU0FBUyxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FDL0QsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILGVBQWUsR0FBRyxLQUFLLEVBQ3JCLFNBQTRELEVBQzdDLEVBQUU7UUFDakIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFxRCxFQUFFLEVBQUUsQ0FDekUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVuQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0ssb0JBQW9CLEdBQUcsS0FBSyxFQUNsQyxZQUFzQixFQUN0QixLQUFnQixFQUNoQixFQUFFO1FBQ0YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDaEUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDekMsQ0FBQztRQUNGLEtBQUssTUFBTSxTQUFTLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RCxNQUFNLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUM3QyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDTyw4QkFBOEIsR0FBRyxLQUFLLEVBQUUsS0FBZ0IsRUFBRSxFQUFFO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLENBQ2IsVUFBb0UsRUFDcEUsRUFBRTtZQUNGLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUM7WUFDSCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztnQkFDN0QsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDMUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUM5QixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixpQ0FBaUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQ3JFLENBQUM7WUFDRixvREFBb0Q7WUFDcEQsTUFBTSxxQkFBcUIsR0FBRyxnQkFBZ0I7aUJBQzNDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNoRCxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQixJQUFJLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixpQ0FBaUMscUJBQXFCLEVBQUUsQ0FDekQsQ0FBQztZQUNKLGdEQUFnRDtZQUNoRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0seUJBQXlCLEdBQUcsVUFBVSxDQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUMxQixrQkFBa0IsQ0FDbkIsQ0FBQztZQUNGLElBQUkseUJBQXlCLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGlDQUFpQyx5QkFBeUIsRUFBRSxDQUM3RCxDQUFDO1lBQ0osaUNBQWlDO1lBQ2pDLE1BQU0sc0JBQXNCLEdBQUc7Z0JBQzdCLEdBQUcseUJBQXlCO2dCQUM1QixHQUFHLHFCQUFxQjthQUN6QixDQUFDO1lBQ0YsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLGdCQUNFLHNCQUFzQixDQUFDLE1BQ3pCLHNCQUFzQixJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFDcEMsRUFBRSxzQkFBc0IsRUFBRSxDQUMzQixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO2dCQUFTLENBQUM7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxxQkFBcUIsR0FBRyxLQUFLLEVBQzNCLGNBQXVDLEVBQ3hCLEVBQUU7UUFDakIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUV0RSxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxVQUFVO2lCQUMvQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2lCQUNuRCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQztZQUV6QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXNCO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDakMsQ0FBQztZQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUNyRSwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFrQixFQUN2QyxjQUFjLENBQ2YsQ0FBQztZQUNGLElBQUksaUJBQWlCLENBQUMsTUFBTTtnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsaURBQWlELGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoRixDQUFDOztnQkFDQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsdURBQXVELEtBQUssRUFBRSxDQUMvRCxDQUFDO1lBQ0YsSUFBSSxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRleCB9IGZyb20gJ2F3YWl0LXNlbWFwaG9yZSc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlLCByZW1vdmUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IE9iamVjdExpdGVyYWwgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgQmxvY2ssIEJsb2NrSW5mbyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgT25lX0hvdXJfSW5TZWNvbmRzLCBTZXZlbl9EYXlzX0luU2Vjb25kcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCbG9ja0VudGl0eSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL2Jsb2NrRW50aXR5JztcbmltcG9ydCB7IEJsb2NrRGJBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb24nO1xuaW1wb3J0IHsgQmxvY2tUaW1lQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNjYW5uZXI8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIGFjdGlvbjogQmxvY2tEYkFjdGlvbjtcbiAgZXh0cmFjdG9yczogQXJyYXk8QWJzdHJhY3RFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlLCBPYmplY3RMaXRlcmFsPj47XG4gIG5ld0V4dHJhY3RvcnM6IEFycmF5PEFic3RyYWN0RXh0cmFjdG9yPFRyYW5zYWN0aW9uVHlwZSwgT2JqZWN0TGl0ZXJhbD4+O1xuICBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBpbml0aWFsaXplTXV0ZXg6IE11dGV4O1xuICBibG9ja1RpbWVDb25maWc6IEJsb2NrVGltZUNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihibG9ja1RpbWVDb25maWc6IEJsb2NrVGltZUNvbmZpZywgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICB0aGlzLmV4dHJhY3RvcnMgPSBbXTtcbiAgICB0aGlzLm5ld0V4dHJhY3RvcnMgPSBbXTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU11dGV4ID0gbmV3IE11dGV4KCk7XG5cbiAgICB0aGlzLmJsb2NrVGltZUNvbmZpZyA9IHtcbiAgICAgIGJsb2NrVGltZTogYmxvY2tUaW1lQ29uZmlnPy5ibG9ja1RpbWUsXG4gICAgICBibG9ja0FnZVRocmVzaG9sZDpcbiAgICAgICAgYmxvY2tUaW1lQ29uZmlnPy5ibG9ja0FnZVRocmVzaG9sZCA/PyBTZXZlbl9EYXlzX0luU2Vjb25kcyxcbiAgICAgIGJsb2NrVHJpbUNvdW50SW5Sb3VuZDpcbiAgICAgICAgYmxvY2tUaW1lQ29uZmlnPy5ibG9ja1RyaW1Db3VudEluUm91bmQgPz8gT25lX0hvdXJfSW5TZWNvbmRzLFxuICAgIH07XG4gIH1cblxuICBhYnN0cmFjdCBuYW1lOiAoKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGZvcmsgYmxvY2tzIGZyb20gc3BlY2lmaWMgaGVpZ2h0IGZyb20gc2Nhbm5lci5cbiAgICogQHBhcmFtIGhlaWdodDogc2VsZWN0ZWQgaGVpZ2h0XG4gICAqL1xuICBwcm90ZWN0ZWQgZm9ya0Jsb2NrID0gYXN5bmMgKGhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgbGV0IGxhc3RCbG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldExhc3RTYXZlZEJsb2NrKCk7XG4gICAgd2hpbGUgKGxhc3RCbG9jayAmJiBsYXN0QmxvY2suaGVpZ2h0ID49IGhlaWdodCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZXZlcnRpbmcgYmxvY2sgJHtsYXN0QmxvY2suaGFzaH0gYXQgaGVpZ2h0ICR7bGFzdEJsb2NrLmhlaWdodH1gLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9uLnJldmVydEJsb2NrU3RhdHVzKFxuICAgICAgICBsYXN0QmxvY2suaGVpZ2h0LFxuICAgICAgICBsYXN0QmxvY2sucGFyZW50SGFzaCxcbiAgICAgICAgdGhpcy5leHRyYWN0b3JzLm1hcCgoZSkgPT4gZS5nZXRJZCgpKSxcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiB0aGlzLmV4dHJhY3RvcnMpIHtcbiAgICAgICAgYXdhaXQgZXh0cmFjdG9yLmZvcmtCbG9jayhsYXN0QmxvY2suaGFzaCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbi5yZW1vdmVCbG9ja3NGcm9tSGVpZ2h0KGxhc3RCbG9jay5oZWlnaHQpO1xuICAgICAgbGFzdEJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0QmxvY2tBdEhlaWdodChsYXN0QmxvY2suaGVpZ2h0IC0gMSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBwcm9jZXNzIGEgYmxvY2sgYW5kIGFsbCBvZiBpdHMgdHJhbnNhY3Rpb25zLiBzdG9yZSBhbnkgaW5mb3JtYXRpb24gaW50byBkYXRhYmFzZVxuICAgKiBAcGFyYW0gYmxvY2s6IHNlbGVjdGVkIGJsb2NrXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbnM6IGxpc3Qgb2YgdHJhbnNhY3Rpb24gZm9yIHNlbGVjdGVkIGJsb2NrXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJvY2Vzc0Jsb2NrVHJhbnNhY3Rpb25zID0gYXN5bmMgKFxuICAgIGJsb2NrOiBCbG9jayxcbiAgICB0cmFuc2FjdGlvbnM6IEFycmF5PFRyYW5zYWN0aW9uVHlwZT4sXG4gICkgPT4ge1xuICAgIGNvbnN0IHNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5zYXZlQmxvY2soYmxvY2spO1xuICAgIGlmICh0eXBlb2Ygc2F2ZWRCbG9jayA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiB0aGlzLmV4dHJhY3RvcnMpIHtcbiAgICAgIGlmICghKGF3YWl0IGV4dHJhY3Rvci5wcm9jZXNzVHJhbnNhY3Rpb25zKHRyYW5zYWN0aW9ucywgc2F2ZWRCbG9jaykpKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc3VjY2VzcyAmJlxuICAgICAgKGF3YWl0IHRoaXMuYWN0aW9uLnVwZGF0ZUJsb2NrU3RhdHVzKFxuICAgICAgICBibG9jay5oZWlnaHQsXG4gICAgICAgIGJsb2NrLmhhc2gsXG4gICAgICAgIHRoaXMuZXh0cmFjdG9ycy5tYXAoKGUpID0+IGUuZ2V0SWQoKSksXG4gICAgICApKVxuICAgICkge1xuICAgICAgcmV0dXJuIHNhdmVkQmxvY2s7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogcmVnaXN0ZXIgYSBucmUgZXh0cmFjdG9yIHRvIHNjYW5uZXIuXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHJlZ2lzdGVyRXh0cmFjdG9yID0gYXN5bmMgKFxuICAgIGV4dHJhY3RvcjogQWJzdHJhY3RFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlLCBPYmplY3RMaXRlcmFsPixcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgbm90UmVnaXN0ZXJlZEluID0gKFxuICAgICAgZXh0cmFjdG9yczogQXJyYXk8QWJzdHJhY3RFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlLCBPYmplY3RMaXRlcmFsPj4sXG4gICAgKSA9PlxuICAgICAgZXh0cmFjdG9ycy5maWx0ZXIoXG4gICAgICAgIChleHRyYWN0b3JJdGVtKSA9PiBleHRyYWN0b3JJdGVtLmdldElkKCkgPT09IGV4dHJhY3Rvci5nZXRJZCgpLFxuICAgICAgKS5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZU11dGV4LmFjcXVpcmUoKTtcbiAgICBpZiAoXG4gICAgICBub3RSZWdpc3RlcmVkSW4odGhpcy5leHRyYWN0b3JzKSAmJlxuICAgICAgbm90UmVnaXN0ZXJlZEluKHRoaXMubmV3RXh0cmFjdG9ycylcbiAgICApIHtcbiAgICAgIHRoaXMubmV3RXh0cmFjdG9ycy5wdXNoKGV4dHJhY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgIGBFeHRyYWN0b3Igd2l0aCBpZCAke2V4dHJhY3Rvci5nZXRJZCgpfSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmVsZWFzZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZW1vdmUgYW4gZXh0cmFjdG9yIGZyb20gc2Nhbm5lclxuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICByZW1vdmVFeHRyYWN0b3IgPSBhc3luYyAoXG4gICAgZXh0cmFjdG9yOiBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGUsIE9iamVjdExpdGVyYWw+LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZW1vdmVGbiA9IChleDogQWJzdHJhY3RFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlLCBPYmplY3RMaXRlcmFsPikgPT5cbiAgICAgIGV4LmdldElkKCkgPT09IGV4dHJhY3Rvci5nZXRJZCgpO1xuXG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZU11dGV4LmFjcXVpcmUoKTtcbiAgICByZW1vdmUodGhpcy5leHRyYWN0b3JzLCByZW1vdmVGbik7XG4gICAgcmVtb3ZlKHRoaXMubmV3RXh0cmFjdG9ycywgcmVtb3ZlRm4pO1xuICAgIHJlbGVhc2UoKTtcbiAgfTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbGwgc3BlY2lmaWVkIGV4dHJhY3RvcnMgYW5kIHN0b3JlIHRoZSB1cGRhdGVkIHN0YXR1c1xuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRzXG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV4dHJhY3RvcnMgPSBhc3luYyAoXG4gICAgZXh0cmFjdG9ySWRzOiBzdHJpbmdbXSxcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICApID0+IHtcbiAgICBjb25zdCBhbGxFeHRyYWN0b3JzID0gWy4uLnRoaXMuZXh0cmFjdG9ycywgLi4udGhpcy5uZXdFeHRyYWN0b3JzXTtcbiAgICBjb25zdCBpbml0UmVxdWlyZWRFeHRyYWN0b3JzID0gYWxsRXh0cmFjdG9ycy5maWx0ZXIoKGV4dHJhY3RvcikgPT5cbiAgICAgIGV4dHJhY3Rvcklkcy5pbmNsdWRlcyhleHRyYWN0b3IuZ2V0SWQoKSksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiBpbml0UmVxdWlyZWRFeHRyYWN0b3JzKSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWFsaXppbmcgWyR7ZXh0cmFjdG9yLmdldElkKCl9XSBib3hlc2ApO1xuICAgICAgYXdhaXQgZXh0cmFjdG9yLmluaXRpYWxpemVEYXRhKGJsb2NrKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9uLnVwZGF0ZU9ySW5zZXJ0RXh0cmFjdG9yU3RhdHVzKFxuICAgICAgICBleHRyYWN0b3IuZ2V0SWQoKSxcbiAgICAgICAgYmxvY2suaGVpZ2h0LFxuICAgICAgICBibG9jay5oYXNoLFxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBJbml0aWFsaXphdGlvbiBmaW5pc2hlZCBmb3IgWyR7ZXh0cmFjdG9yLmdldElkKCl9XWApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGV4dHJhY3RvcnMgaWYgdGhleSdyZSBub3Qgc3luY2VkIG9yIG5vdCBpbml0aWFsaXplZCB5ZXQsXG4gICAqIGFuZCB1cGRhdGUgdGhlIGFjdGl2ZSBleHRyYWN0b3JzIGxpc3RcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqL1xuICBwcm90ZWN0ZWQgdmVyaWZ5RXh0cmFjdG9yc0luaXRpYWxpemF0aW9uID0gYXN5bmMgKGJsb2NrOiBCbG9ja0luZm8pID0+IHtcbiAgICBjb25zdCBnZXRJZHMgPSAoXG4gICAgICBleHRyYWN0b3JzOiBBcnJheTxBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGUsIE9iamVjdExpdGVyYWw+PixcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBleHRyYWN0b3JzLm1hcCgoZXh0cmFjdG9yKSA9PiBleHRyYWN0b3IuZ2V0SWQoKSk7XG4gICAgfTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgSW5pdGlhbGl6aW5nIGV4dHJhY3RvcnMgZm9yIGJsb2NrIFske2Jsb2NrLmhlaWdodH1dYCk7XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZU11dGV4LmFjcXVpcmUoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXh0cmFjdG9yc1N0YXR1cyA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldEV4dHJhY3RvcnNTdGF0dXMoW1xuICAgICAgICAuLi5nZXRJZHModGhpcy5leHRyYWN0b3JzKSxcbiAgICAgICAgLi4uZ2V0SWRzKHRoaXMubmV3RXh0cmFjdG9ycyksXG4gICAgICBdKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgU3RvcmVkIGV4dHJhY3RvcnMgc3RhdHVzIGFyZSBbJHtKU09OLnN0cmluZ2lmeShleHRyYWN0b3JzU3RhdHVzKX1dYCxcbiAgICAgICk7XG4gICAgICAvLyBGaW5kIGV4dHJhY3RvcnMgbm90IHN5bmNlZCB3aXRoIHRoZSBsYXRlc3QgaGVpZ2h0XG4gICAgICBjb25zdCBub3RTeW5jZWRFeHRyYWN0b3JJZHMgPSBleHRyYWN0b3JzU3RhdHVzXG4gICAgICAgIC5maWx0ZXIoKGVzKSA9PiBlcy51cGRhdGVCbG9ja0hhc2ggIT0gYmxvY2suaGFzaClcbiAgICAgICAgLm1hcCgoZXMpID0+IGVzLmV4dHJhY3RvcklkKTtcbiAgICAgIGlmIChub3RTeW5jZWRFeHRyYWN0b3JJZHMubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYE9sZCBub3Qgc3luY2VkIGV4dHJhY3RvcnMgYXJlICR7bm90U3luY2VkRXh0cmFjdG9ySWRzfWAsXG4gICAgICAgICk7XG4gICAgICAvLyBGaW5kIG5ldyBleHRyYWN0b3JzIG5vdCBhdmFpbGFibGUgaW4gZGF0YWJhc2VcbiAgICAgIGNvbnN0IHN0b3JlZEV4dHJhY3RvcklkcyA9IGV4dHJhY3RvcnNTdGF0dXMubWFwKChlcykgPT4gZXMuZXh0cmFjdG9ySWQpO1xuICAgICAgY29uc3QgbmV3UmVnaXN0ZXJlZEV4dHJhY3RvcklkcyA9IGRpZmZlcmVuY2UoXG4gICAgICAgIGdldElkcyh0aGlzLm5ld0V4dHJhY3RvcnMpLFxuICAgICAgICBzdG9yZWRFeHRyYWN0b3JJZHMsXG4gICAgICApO1xuICAgICAgaWYgKG5ld1JlZ2lzdGVyZWRFeHRyYWN0b3JJZHMubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYE5ldyByZWdpc3RlcmVkIGV4dHJhY3RvcnMgYXJlICR7bmV3UmVnaXN0ZXJlZEV4dHJhY3Rvcklkc31gLFxuICAgICAgICApO1xuICAgICAgLy8gSW5pdGlhbGl6ZSByZXF1aXJlZCBleHRyYWN0b3JzXG4gICAgICBjb25zdCBpbml0UmVxdWlyZWRFeHRyYWN0b3JzID0gW1xuICAgICAgICAuLi5uZXdSZWdpc3RlcmVkRXh0cmFjdG9ySWRzLFxuICAgICAgICAuLi5ub3RTeW5jZWRFeHRyYWN0b3JJZHMsXG4gICAgICBdO1xuICAgICAgaWYgKGluaXRSZXF1aXJlZEV4dHJhY3RvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBJbml0aWFsaXppbmcgJHtcbiAgICAgICAgICAgIGluaXRSZXF1aXJlZEV4dHJhY3RvcnMubGVuZ3RoXG4gICAgICAgICAgfSBleHRyYWN0b3IocykgZm9yIFske3RoaXMubmFtZSgpfV1gLFxuICAgICAgICAgIHsgaW5pdFJlcXVpcmVkRXh0cmFjdG9ycyB9LFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVFeHRyYWN0b3JzKGluaXRSZXF1aXJlZEV4dHJhY3RvcnMsIGJsb2NrKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXh0cmFjdG9ycy5wdXNoKC4uLnRoaXMubmV3RXh0cmFjdG9ycyk7XG4gICAgICB0aGlzLm5ld0V4dHJhY3RvcnMgPSBbXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVsZWFzZSgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlcyB1bnVzZWQgYmxvY2tzIGZyb20gdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBsYXN0U2F2ZWRCbG9ja1xuICAgKi9cbiAgcmVtb3ZlT2xkVW51c2VkQmxvY2tzID0gYXN5bmMgKFxuICAgIGxhc3RTYXZlZEJsb2NrOiBCbG9ja0VudGl0eSB8IHVuZGVmaW5lZCxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTdGFydGluZyB0aGUgcHJvY2VzcyB0byByZW1vdmUgb2xkIHVudXNlZCBibG9ja3MnKTtcblxuICAgICAgY29uc3QgZXh0cmFjdG9yVXNlZEJsb2Nrc1F1ZXJpZXMgPSB0aGlzLmV4dHJhY3RvcnNcbiAgICAgICAgLm1hcCgoZXh0cmFjb3IpID0+IGV4dHJhY29yLmNyZWF0ZVVzZWRCbG9ja3NRdWVyeSgpKVxuICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT0gdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3QgZGVsZXRlZEJsb2NrQ291bnQgPSBNYXRoLmZsb29yKFxuICAgICAgICB0aGlzLmJsb2NrVGltZUNvbmZpZy5ibG9ja1RyaW1Db3VudEluUm91bmQhIC9cbiAgICAgICAgICB0aGlzLmJsb2NrVGltZUNvbmZpZy5ibG9ja1RpbWUsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB1bnVzZWRCbG9ja0hhc2hlcyA9IGF3YWl0IHRoaXMuYWN0aW9uLnJlbW92ZVVudXNlZEJsb2Nrc0luQmF0Y2hlcyhcbiAgICAgICAgZXh0cmFjdG9yVXNlZEJsb2Nrc1F1ZXJpZXMsXG4gICAgICAgIGRlbGV0ZWRCbG9ja0NvdW50LFxuICAgICAgICB0aGlzLm5hbWUoKSxcbiAgICAgICAgdGhpcy5ibG9ja1RpbWVDb25maWcuYmxvY2tBZ2VUaHJlc2hvbGQhLFxuICAgICAgICBsYXN0U2F2ZWRCbG9jayxcbiAgICAgICk7XG4gICAgICBpZiAodW51c2VkQmxvY2tIYXNoZXMubGVuZ3RoKVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgb2xkIHVudXNlZCBibG9jayBoYXNoZXM6ICR7dW51c2VkQmxvY2tIYXNoZXMuam9pbignLCAnKX1gLFxuICAgICAgICApO1xuICAgICAgZWxzZSB0aGlzLmxvZ2dlci5kZWJ1ZygnTm8gdW51c2VkIGJsb2NrIGhhc2hlcyBmb3VuZCB0byByZW1vdmUuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVtb3Zpbmcgb2xkIHVudXNlZCBibG9ja3M6ICR7ZXJyb3J9YCxcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgZXJyb3Igc3RhY2s6ICR7ZXJyb3Iuc3RhY2t9YCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Mutex } from 'await-semaphore';
|
|
2
2
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
3
|
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
4
|
+
import { BlockTimeConfig } from '../interfaces';
|
|
4
5
|
import { AbstractScanner } from './scanner';
|
|
5
6
|
declare abstract class WebSocketScanner<TransactionType> extends AbstractScanner<TransactionType> {
|
|
6
7
|
protected scannerName: string;
|
|
7
8
|
protected suffix?: string | undefined;
|
|
8
9
|
readonly maxTryBlock: number;
|
|
9
10
|
protected mutex: Mutex;
|
|
10
|
-
protected constructor(scannerName: string, logger?: AbstractLogger, maxTryBlock?: number, suffix?: string | undefined);
|
|
11
|
+
protected constructor(scannerName: string, blockTimeConfig: BlockTimeConfig, logger?: AbstractLogger, maxTryBlock?: number, suffix?: string | undefined);
|
|
11
12
|
name: () => string;
|
|
12
13
|
abstract start: () => Promise<void>;
|
|
13
14
|
abstract stop: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocketScanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/webSocketScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAI5C,uBAAe,gBAAgB,CAC7B,eAAe,CACf,SAAQ,eAAe,CAAC,eAAe,CAAC;IAMtC,SAAS,CAAC,WAAW,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"webSocketScanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/webSocketScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAI5C,uBAAe,gBAAgB,CAC7B,eAAe,CACf,SAAQ,eAAe,CAAC,eAAe,CAAC;IAMtC,SAAS,CAAC,WAAW,EAAE,MAAM;IAI7B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;IAT3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,SAAS,CAAC,KAAK,QAAe;IAE9B,SAAS,aACG,WAAW,EAAE,MAAM,EAC7B,eAAe,EAAE,eAAe,EAChC,MAAM,CAAC,EAAE,cAAc,EACvB,WAAW,GAAE,MAA8B,EACjC,MAAM,CAAC,EAAE,MAAM,YAAA;IAK3B,IAAI,eAAmE;IAEvE,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,SAAS,CAAC,kBAAkB,GAC1B,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,EAC1B,KAAK,MAAM,EACX,cAAc,MAAM,IAAI,KACvB,OAAO,CAAC,OAAO,CAAC,CAWjB;IAEF;;;;;OAKG;IACH,SAAS,CAAC,WAAW,GACnB,OAAO,KAAK,EACZ,cAAc,KAAK,CAAC,eAAe,CAAC,mBA0CpC;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,GAAU,OAAO,KAAK,mBAmB1C;CACH;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -6,8 +6,8 @@ class WebSocketScanner extends AbstractScanner {
|
|
|
6
6
|
suffix;
|
|
7
7
|
maxTryBlock;
|
|
8
8
|
mutex = new Mutex();
|
|
9
|
-
constructor(scannerName, logger, maxTryBlock = DEFAULT_MAX_TRY_BLOCK, suffix) {
|
|
10
|
-
super(logger);
|
|
9
|
+
constructor(scannerName, blockTimeConfig, logger, maxTryBlock = DEFAULT_MAX_TRY_BLOCK, suffix) {
|
|
10
|
+
super(blockTimeConfig, logger);
|
|
11
11
|
this.scannerName = scannerName;
|
|
12
12
|
this.suffix = suffix;
|
|
13
13
|
this.maxTryBlock = maxTryBlock;
|
|
@@ -32,10 +32,11 @@ class WebSocketScanner extends AbstractScanner {
|
|
|
32
32
|
*/
|
|
33
33
|
stepForward = async (block, transactions) => {
|
|
34
34
|
const release = await this.mutex.acquire();
|
|
35
|
+
const lastSavedBlock = await this.action.getLastSavedBlock();
|
|
36
|
+
await this.removeOldUnusedBlocks(lastSavedBlock);
|
|
35
37
|
await this.tryRunningFunction(async () => {
|
|
36
38
|
try {
|
|
37
39
|
await this.forkBlock(block.height);
|
|
38
|
-
const lastSavedBlock = await this.action.getLastSavedBlock();
|
|
39
40
|
if (lastSavedBlock && block.parentHash !== lastSavedBlock.hash) {
|
|
40
41
|
this.logger.error('It seems saved block is not valid in scanner.');
|
|
41
42
|
return false;
|
|
@@ -87,4 +88,4 @@ class WebSocketScanner extends AbstractScanner {
|
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
90
|
export { WebSocketScanner };
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViU29ja2V0U2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2FubmVyL2Fic3RyYWN0L3dlYlNvY2tldFNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTXhDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFFakMsTUFBZSxnQkFFYixTQUFRLGVBQWdDO0lBTTVCO0lBSUE7SUFUSCxXQUFXLENBQVM7SUFFbkIsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFFOUIsWUFDWSxXQUFtQixFQUM3QixlQUFnQyxFQUNoQyxNQUF1QixFQUN2QixjQUFzQixxQkFBcUIsRUFDakMsTUFBZTtRQUV6QixLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBTnJCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBSW5CLFdBQU0sR0FBTixNQUFNLENBQVM7UUFHekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBSzdELGtCQUFrQixHQUFHLEtBQUssRUFDbEMsRUFBMEIsRUFDMUIsR0FBVyxFQUNYLFlBQXdCLEVBQ04sRUFBRTtRQUNwQixLQUFLLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2hFLElBQUksTUFBTSxFQUFFLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENB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LENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQ0QsMkJBQTJCLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFDekMsT0FBTyxDQUNSLENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztDQUNIO0FBRUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRleCB9IGZyb20gJ2F3YWl0LXNlbWFwaG9yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgQmxvY2sgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEJsb2NrVGltZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVyJztcblxuY29uc3QgREVGQVVMVF9NQVhfVFJZX0JMT0NLID0gMTA7XG5cbmFic3RyYWN0IGNsYXNzIFdlYlNvY2tldFNjYW5uZXI8XG4gIFRyYW5zYWN0aW9uVHlwZSxcbj4gZXh0ZW5kcyBBYnN0cmFjdFNjYW5uZXI8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIHJlYWRvbmx5IG1heFRyeUJsb2NrOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIG11dGV4ID0gbmV3IE11dGV4KCk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzY2FubmVyTmFtZTogc3RyaW5nLFxuICAgIGJsb2NrVGltZUNvbmZpZzogQmxvY2tUaW1lQ29uZmlnLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyLFxuICAgIG1heFRyeUJsb2NrOiBudW1iZXIgPSBERUZBVUxUX01BWF9UUllfQkxPQ0ssXG4gICAgcHJvdGVjdGVkIHN1ZmZpeD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoYmxvY2tUaW1lQ29uZmlnLCBsb2dnZXIpO1xuICAgIHRoaXMubWF4VHJ5QmxvY2sgPSBtYXhUcnlCbG9jaztcbiAgfVxuICBuYW1lID0gKCkgPT4gdGhpcy5zY2FubmVyTmFtZSArICh0aGlzLnN1ZmZpeCA/IGAtJHt0aGlzLnN1ZmZpeH1gIDogJycpO1xuXG4gIGFic3RyYWN0IHN0YXJ0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBhYnN0cmFjdCBzdG9wOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHByb3RlY3RlZCB0cnlSdW5uaW5nRnVuY3Rpb24gPSBhc3luYyAoXG4gICAgZm46ICgpID0+IFByb21pc2U8Ym9vbGVhbj4sXG4gICAgbXNnOiBzdHJpbmcsXG4gICAgcmVsZWFzZU11dGV4OiAoKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBmb3IgKGxldCB0cnlSb3VuZCA9IDE7IHRyeVJvdW5kIDw9IHRoaXMubWF4VHJ5QmxvY2s7IHRyeVJvdW5kKyspIHtcbiAgICAgIGlmIChhd2FpdCBmbigpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmVsZWFzZU11dGV4KCk7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICBgJHttc2d9IGNhbiBub3QgYmUgcHJvY2VlZCBpbiAke3RoaXMubWF4VHJ5QmxvY2t9IHRyeS4gc2Nhbm5lciByZXN0YXJ0ZWQgYXV0b21hdGljYWxseWAsXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgbmV3IGJsb2NrIGFycml2ZWQuXG4gICAqIHNhdmUgYmxvY2sgYW5kIGl0cyB0cmFuc2FjdGlvbnMuXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RlcEZvcndhcmQgPSBhc3luYyAoXG4gICAgYmxvY2s6IEJsb2NrLFxuICAgIHRyYW5zYWN0aW9uczogQXJyYXk8VHJhbnNhY3Rpb25UeXBlPixcbiAgKSA9PiB7XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMubXV0ZXguYWNxdWlyZSgpO1xuICAgIGNvbnN0IGxhc3RTYXZlZEJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICBhd2FpdCB0aGlzLnJlbW92ZU9sZFVudXNlZEJsb2NrcyhsYXN0U2F2ZWRCbG9jayk7XG4gICAgYXdhaXQgdGhpcy50cnlSdW5uaW5nRnVuY3Rpb24oXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5mb3JrQmxvY2soYmxvY2suaGVpZ2h0KTtcblxuICAgICAgICAgIGlmIChsYXN0U2F2ZWRCbG9jayAmJiBibG9jay5wYXJlbnRIYXNoICE9PSBsYXN0U2F2ZWRCbG9jay5oYXNoKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignSXQgc2VlbXMgc2F2ZWQgYmxvY2sgaXMgbm90IHZhbGlkIGluIHNjYW5uZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5RXh0cmFjdG9yc0luaXRpYWxpemF0aW9uKHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiBibG9jay5oZWlnaHQgLSAxLFxuICAgICAgICAgICAgICBoYXNoOiBibG9jay5wYXJlbnRIYXNoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnByb2Nlc3NCbG9ja1RyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9ucyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICBgQ2FuIG5vdCBwcm9jZXNzIGJsb2NrIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH1gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgdW5rbm93biBlcnJvciBvY2N1cnJlZCAke2V9YCk7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgYEJsb2NrIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH1gLFxuICAgICAgcmVsZWFzZSxcbiAgICApO1xuICAgIHJlbGVhc2UoKTtcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlIGZvcmtpbmcgYSBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIHByb3RlY3RlZCBzdGVwQmFja3dhcmQgPSBhc3luYyAoYmxvY2s6IEJsb2NrKSA9PiB7XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMubXV0ZXguYWNxdWlyZSgpO1xuICAgIGF3YWl0IHRoaXMudHJ5UnVubmluZ0Z1bmN0aW9uKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZm9ya0Jsb2NrKGJsb2NrLmhlaWdodCArIDEpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYHVua25vd24gZXJyb3Igb2NjdXJyZWQgJHtlfWApO1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihlLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGBGb3JraW5nIGJsb2NrIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH1gLFxuICAgICAgcmVsZWFzZSxcbiAgICApO1xuICAgIHJlbGVhc2UoKTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgV2ViU29ja2V0U2Nhbm5lciB9O1xuIl19
|
package/dist/scanner/action.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
-
import { DataSource, DeleteResult, Repository } from '@rosen-bridge/extended-typeorm';
|
|
2
|
+
import { DataSource, DeleteResult, Repository, ObjectLiteral, SelectQueryBuilder } from '@rosen-bridge/extended-typeorm';
|
|
3
3
|
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
4
4
|
import { BlockEntity } from '../entities/blockEntity';
|
|
5
5
|
import { ExtractorStatusEntity } from '../entities/extractorStatusEntity';
|
|
@@ -79,5 +79,26 @@ export declare class BlockDbAction {
|
|
|
79
79
|
* @returns extractors` status
|
|
80
80
|
*/
|
|
81
81
|
getExtractorsStatus: (extractorIds: string[]) => Promise<ExtractorStatusEntity[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Generates queries with unique parameters
|
|
84
|
+
*
|
|
85
|
+
* @param queryBuilders
|
|
86
|
+
* @returns queries and their unique parameters
|
|
87
|
+
*/
|
|
88
|
+
generateQueriesWithUniqueParams: (queryBuilders: SelectQueryBuilder<ObjectLiteral>[]) => {
|
|
89
|
+
queryParts: string[];
|
|
90
|
+
parameters: Record<string, unknown>;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Removes unused blocks based on the queries retrieving used blocks
|
|
94
|
+
*
|
|
95
|
+
* @param extractorUsedBlocksQueries
|
|
96
|
+
* @param deletedBlockCount
|
|
97
|
+
* @param scannerName
|
|
98
|
+
* @param blockAgeThreshold
|
|
99
|
+
* @param lastSavedBlock
|
|
100
|
+
* @returns The hashes of the removed unused blocks
|
|
101
|
+
*/
|
|
102
|
+
removeUnusedBlocksInBatches: (extractorUsedBlocksQueries: SelectQueryBuilder<ObjectLiteral>[], deletedBlockCount: number, scannerName: string, blockAgeThreshold: number, lastSavedBlock: BlockEntity | undefined) => Promise<string[]>;
|
|
82
103
|
}
|
|
83
104
|
//# sourceMappingURL=action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../lib/scanner/action.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../lib/scanner/action.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,UAAU,EACV,YAAY,EAEZ,UAAU,EAEV,aAAa,EACb,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAuB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,qBAAa,aAAa;IACxB,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAClD,QAAQ,CAAC,yBAAyB,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACtE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAG9B,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,cAAc;IAWzB,QAAQ,CAAC,IAAI,eAA0B;IAEvC;;;OAGG;IACH,iBAAiB,QAAa,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAW5D;IAEF;;;;OAIG;IACH,kBAAkB,GAChB,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAO5B;IAEF;;;OAGG;IACH,kBAAkB,QAAa,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAW7D;IAEF;;;;;OAKG;IACH,gBAAgB,GACd,QAAQ,MAAM,EACd,SAAQ,MAAgB,KACvB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAWjC;IAEF;;;;OAIG;IACH,gBAAgB,GAAU,MAAM,MAAM,EAAE,SAAQ,MAAgB,iCAM9D;IAEF;;;;OAIG;IACH,sBAAsB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,YAAY,CAAC,CAMpE;IAEF;;;OAGG;IACH,SAAS,GAAU,OAAO,KAAK,KAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,CA0C9D;IAEF;;;OAGG;IACH,iBAAiB,GACf,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,cAAc,MAAM,EAAE,KACrB,OAAO,CAAC,OAAO,CAAC,CAqCjB;IAEF;;;OAGG;IACH,iBAAiB,GACf,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,cAAc,MAAM,EAAE,KACrB,OAAO,CAAC,OAAO,CAAC,CAsCjB;IAEF;;;;;OAKG;IACH,6BAA6B,GAC3B,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,WAAW,MAAM;;;;;+BAgBjB;IAEF;;;;OAIG;IACH,mBAAmB,GACjB,cAAc,MAAM,EAAE,KACrB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAKjC;IAEF;;;;;OAKG;IACH,+BAA+B,GAC7B,eAAe,kBAAkB,CAAC,aAAa,CAAC,EAAE,KACjD;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAwB9D;IAEF;;;;;;;;;OASG;IACH,2BAA2B,GACzB,4BAA4B,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAC/D,mBAAmB,MAAM,EACzB,aAAa,MAAM,EACnB,mBAAmB,MAAM,EACzB,gBAAgB,WAAW,GAAG,SAAS,KACtC,OAAO,CAAC,MAAM,EAAE,CAAC,CA+BlB;CACH"}
|