@bitgo-beta/sdk-coin-celo 1.3.3-alpha.31 → 1.3.3-alpha.310

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,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TestnetTransactionBuilder = void 0;
37
+ const ethUtil = __importStar(require("ethereumjs-util"));
38
+ const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
39
+ const transactionBuilder_1 = require("./transactionBuilder");
40
+ class TestnetTransactionBuilder extends transactionBuilder_1.TransactionBuilder {
41
+ constructor(_coinConfig) {
42
+ super(_coinConfig);
43
+ this.transaction = new abstract_eth_1.Transaction(_coinConfig, this._common);
44
+ }
45
+ /**
46
+ * Get the final v value. Final v is described in EIP-155.
47
+ *
48
+ * @protected for internal use when the enableFinalVField flag is true.
49
+ */
50
+ getFinalV() {
51
+ return ethUtil.addHexPrefix(this._common.chainIdBN().muln(2).addn(35).toString(16));
52
+ }
53
+ /** @inheritdoc */
54
+ fromImplementation(rawTransaction) {
55
+ let tx;
56
+ if (/^0x?[0-9a-f]{1,}$/.test(rawTransaction.toLowerCase())) {
57
+ tx = abstract_eth_1.Transaction.fromSerialized(this._coinConfig, this._common, rawTransaction);
58
+ this.loadBuilderInput(tx.toJson());
59
+ }
60
+ else {
61
+ const txData = JSON.parse(rawTransaction);
62
+ tx = new abstract_eth_1.Transaction(this._coinConfig, txData);
63
+ }
64
+ return tx;
65
+ }
66
+ }
67
+ exports.TestnetTransactionBuilder = TestnetTransactionBuilder;
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdG5ldFRyYW5zYWN0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdGVzdG5ldFRyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFDM0MsMkRBQXVEO0FBRXZELDZEQUEwRDtBQUUxRCxNQUFhLHlCQUEwQixTQUFRLHVDQUFrQjtJQUMvRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksMEJBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sU0FBUztRQUNqQixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjtRQUNqRCxJQUFJLEVBQWUsQ0FBQztRQUNwQixJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzNELEVBQUUsR0FBRywwQkFBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQyxFQUFFLEdBQUcsSUFBSSwwQkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBM0JELDhEQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGV0aFV0aWwgZnJvbSAnZXRoZXJldW1qcy11dGlsJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRlc3RuZXRUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZywgdGhpcy5fY29tbW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbmFsIHYgdmFsdWUuIEZpbmFsIHYgaXMgZGVzY3JpYmVkIGluIEVJUC0xNTUuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWQgZm9yIGludGVybmFsIHVzZSB3aGVuIHRoZSBlbmFibGVGaW5hbFZGaWVsZCBmbGFnIGlzIHRydWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0RmluYWxWKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGV0aFV0aWwuYWRkSGV4UHJlZml4KHRoaXMuX2NvbW1vbi5jaGFpbklkQk4oKS5tdWxuKDIpLmFkZG4oMzUpLnRvU3RyaW5nKDE2KSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGxldCB0eDogVHJhbnNhY3Rpb247XG4gICAgaWYgKC9eMHg/WzAtOWEtZl17MSx9JC8udGVzdChyYXdUcmFuc2FjdGlvbi50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgdHggPSBUcmFuc2FjdGlvbi5mcm9tU2VyaWFsaXplZCh0aGlzLl9jb2luQ29uZmlnLCB0aGlzLl9jb21tb24sIHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMubG9hZEJ1aWxkZXJJbnB1dCh0eC50b0pzb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR4RGF0YSA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHhEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4O1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { Transaction } from '@bitgo-beta/abstract-eth';
2
3
  import { TransactionBuilder as EthTransactionBuilder, TxData } from '@bitgo-beta/sdk-coin-eth';
3
4
  import { TransactionType } from '@bitgo-beta/sdk-core';
4
- import { Transaction } from './transaction';
5
5
  import { StakingBuilder } from './stakingBuilder';
6
6
  import { TransferBuilder } from './transferBuilder';
7
7
  export declare class TransactionBuilder extends EthTransactionBuilder {
@@ -75,12 +75,6 @@ export declare class TransactionBuilder extends EthTransactionBuilder {
75
75
  private getStaking;
76
76
  private buildLockStakeTransaction;
77
77
  private buildStakingTransaction;
78
- /**
79
- * Get the final v value. Final v is described in EIP-155.
80
- *
81
- * @protected for internal use when the enableFinalVField flag is true.
82
- */
83
- protected getFinalV(): string;
84
78
  /**
85
79
  * The value to send along with this transaction. 0 by default
86
80
  *
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,IAAI,qBAAqB,EAAE,MAAM,EAA2B,MAAM,0BAA0B,CAAC;AACxH,OAAO,EAAyB,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,qBAAa,kBAAmB,SAAQ,qBAAqB;IAE3D,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;IAClB,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAKjC,SAAS,CAAC,kBAAkB,IAAI,MAAM;IActC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAYjE,SAAS,CAAC,wBAAwB,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAoB/F;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAUtD;;;;;OAKG;IACH,IAAI,IAAI,cAAc;IAQtB;;;;;OAKG;IACH,IAAI,IAAI,cAAc;IAQtB;;;;;OAKG;IACH,QAAQ,IAAI,cAAc;IAQ1B;;;;;OAKG;IACH,MAAM,IAAI,cAAc;IAQxB;;;;;OAKG;IACH,MAAM,IAAI,cAAc;IAQxB;;;;;OAKG;IACH,QAAQ,IAAI,cAAc;IAQ1B,kBAAkB;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe;IAUxC;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,uBAAuB;IAQ/B;;;;OAIG;IACH,SAAS,CAAC,SAAS,IAAI,MAAM;IAI7B;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAezD"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,IAAI,qBAAqB,EAAE,MAAM,EAA2B,MAAM,0BAA0B,CAAC;AACxH,OAAO,EAAyB,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,qBAAa,kBAAmB,SAAQ,qBAAqB;IAE3D,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;IAClB,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAKjC,SAAS,CAAC,kBAAkB,IAAI,MAAM;IActC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAYjE,SAAS,CAAC,wBAAwB,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAoB/F;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAUtD;;;;;OAKG;IACH,IAAI,IAAI,cAAc;IAQtB;;;;;OAKG;IACH,IAAI,IAAI,cAAc;IAQtB;;;;;OAKG;IACH,QAAQ,IAAI,cAAc;IAQ1B;;;;;OAKG;IACH,MAAM,IAAI,cAAc;IAQxB;;;;;OAKG;IACH,MAAM,IAAI,cAAc;IAQxB;;;;;OAKG;IACH,QAAQ,IAAI,cAAc;IAQ1B,kBAAkB;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe;IAUxC;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,uBAAuB;IAQ/B;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAezD"}
@@ -5,19 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TransactionBuilder = void 0;
7
7
  const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
8
+ const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
8
9
  const sdk_coin_eth_1 = require("@bitgo-beta/sdk-coin-eth");
9
10
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
10
- const transaction_1 = require("./transaction");
11
11
  const stakingBuilder_1 = require("./stakingBuilder");
12
12
  const utils_1 = require("./utils");
13
13
  const transferBuilder_1 = require("./transferBuilder");
14
- const ethereumjs_util_1 = require("ethereumjs-util");
15
14
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
16
15
  class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
17
16
  constructor(_coinConfig) {
18
17
  super(_coinConfig);
19
- this._common = utils_1.getCommon(this._coinConfig.network.type);
20
- this.transaction = new transaction_1.Transaction(this._coinConfig, this._common);
18
+ this._common = (0, utils_1.getCommon)(this._coinConfig.network.type);
19
+ this.transaction = new abstract_eth_1.Transaction(this._coinConfig, this._common);
21
20
  }
22
21
  /** @inheritdoc */
23
22
  type(type) {
@@ -41,12 +40,12 @@ class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
41
40
  fromImplementation(rawTransaction) {
42
41
  let tx;
43
42
  if (/^0x?[0-9a-f]{1,}$/.test(rawTransaction.toLowerCase())) {
44
- tx = transaction_1.Transaction.fromSerialized(this._coinConfig, this._common, rawTransaction);
43
+ tx = abstract_eth_1.Transaction.fromSerialized(this._coinConfig, this._common, rawTransaction);
45
44
  super.loadBuilderInput(tx.toJson());
46
45
  }
47
46
  else {
48
47
  const txData = JSON.parse(rawTransaction);
49
- tx = new transaction_1.Transaction(this._coinConfig, this._common, txData);
48
+ tx = new abstract_eth_1.Transaction(this._coinConfig, this._common, txData);
50
49
  }
51
50
  return tx;
52
51
  }
@@ -196,14 +195,6 @@ class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
196
195
  data.to = stake.address;
197
196
  return data;
198
197
  }
199
- /**
200
- * Get the final v value. Final v is described in EIP-155.
201
- *
202
- * @protected for internal use when the enableFinalVField flag is true.
203
- */
204
- getFinalV() {
205
- return ethereumjs_util_1.addHexPrefix(this._common.chainIdBN().toString(16));
206
- }
207
198
  /**
208
199
  * The value to send along with this transaction. 0 by default
209
200
  *
@@ -228,4 +219,4 @@ class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
228
219
  }
229
220
  }
230
221
  exports.TransactionBuilder = TransactionBuilder;
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0VBQXlDO0FBQ3pDLDJEQUF3SDtBQUN4SCxtREFBcUc7QUFDckcsK0NBQTRDO0FBQzVDLHFEQUFrRDtBQUVsRCxtQ0FBMEQ7QUFDMUQsdURBQW9EO0FBQ3BELHFEQUErQztBQUMvQyxnRUFBcUM7QUFFckMsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBcUI7SUFLM0QsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxpQkFBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLElBQXFCO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbEIsS0FBSywwQkFBZSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDMUMsS0FBSywwQkFBZSxDQUFDLGFBQWEsQ0FBQztZQUNuQyxLQUFLLDBCQUFlLENBQUMsV0FBVyxDQUFDO1lBQ2pDLEtBQUssMEJBQWUsQ0FBQyxhQUFhLENBQUM7WUFDbkMsS0FBSywwQkFBZSxDQUFDLGVBQWUsQ0FBQztZQUNyQyxLQUFLLDBCQUFlLENBQUMsZUFB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Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgYXMgRXRoVHJhbnNhY3Rpb25CdWlsZGVyLCBUeERhdGEsIHdhbGxldFNpbXBsZUNvbnN0cnVjdG9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvaW4tZXRoJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlLCBTdGFraW5nT3BlcmF0aW9uVHlwZXMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdDYWxsIH0gZnJvbSAnLi9zdGFraW5nQ2FsbCc7XG5pbXBvcnQgeyBnZXRDb21tb24sIHdhbGxldFNpbXBsZUJ5dGVDb2RlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBhZGRIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgRXRoVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgLy8gU3Rha2luZyBzcGVjaWZpYyBwYXJhbWV0ZXJzXG4gIHByaXZhdGUgX3N0YWtpbmdCdWlsZGVyPzogU3Rha2luZ0J1aWxkZXI7XG4gIHByb3RlY3RlZCBfdHJhbnNmZXI6IFRyYW5zZmVyQnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fY29tbW9uID0gZ2V0Q29tbW9uKHRoaXMuX2NvaW5Db25maWcubmV0d29yay50eXBlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHRoaXMuX2NvbW1vbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdHlwZSh0eXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICBzdXBlci50eXBlKHR5cGUpO1xuICAgIHRoaXMuX3N0YWtpbmdCdWlsZGVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uRGF0YSgpOiBUeERhdGEge1xuICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2s6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkTG9ja1N0YWtlVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVm90ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbnZvdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkU3Rha2luZ1RyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgbGV0IHR4OiBUcmFuc2FjdGlvbjtcbiAgICBpZiAoL14weD9bMC05YS1mXXsxLH0kLy50ZXN0KHJhd1RyYW5zYWN0aW9uLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICB0eCA9IFRyYW5zYWN0aW9uLmZyb21TZXJpYWxpemVkKHRoaXMuX2NvaW5Db25maWcsIHRoaXMuX2NvbW1vbiwgcmF3VHJhbnNhY3Rpb24pO1xuICAgICAgc3VwZXIubG9hZEJ1aWxkZXJJbnB1dCh0eC50b0pzb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR4RGF0YSA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdGhpcy5fY29tbW9uLCB0eERhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0VHJhbnNhY3Rpb25UeXBlRmllbGRzKGRlY29kZWRUeXBlOiBUcmFuc2FjdGlvblR5cGUsIHRyYW5zYWN0aW9uSnNvbjogVHhEYXRhKTogdm9pZCB7XG4gICAgc3dpdGNoIChkZWNvZGVkVHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2s6XG4gICAgICAgIHRoaXMuX3N0YWtpbmdCdWlsZGVyID0gbmV3IFN0YWtpbmdCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpXG4gICAgICAgICAgLnR5cGUoU3Rha2luZ09wZXJhdGlvblR5cGVzLkxPQ0spXG4gICAgICAgICAgLmFtb3VudCh0cmFuc2FjdGlvbkpzb24udmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVm90ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbnZvdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIHRoaXMuX3N0YWtpbmdCdWlsZGVyID0gbmV3IFN0YWtpbmdCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcsIHRyYW5zYWN0aW9uSnNvbi5kYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzdXBlci5zZXRUcmFuc2FjdGlvblR5cGVGaWVsZHMoZGVjb2RlZFR5cGUsIHRyYW5zYWN0aW9uSnNvbik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzbWFydCBjb250cmFjdCBlbmNvZGVkIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYWRkcmVzc2VzIC0gdGhlIGNvbnRyYWN0IHNpZ25lcnNcbiAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgc21hcnQgY29udHJhY3QgZW5jb2RlZCBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Q29udHJhY3REYXRhKGFkZHJlc3Nlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmFtcyA9IFthZGRyZXNzZXNdO1xuICAgIGNvbnN0IHJlc3VsdEVuY29kZWRQYXJhbWV0ZXJzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHdhbGxldFNpbXBsZUNvbnN0cnVjdG9yLCBwYXJhbXMpXG4gICAgICAudG9TdHJpbmcoJ2hleCcpXG4gICAgICAucmVwbGFjZSgnMHgnLCAnJyk7XG4gICAgcmV0dXJuIHdhbGxldFNpbXBsZUJ5dGVDb2RlICsgcmVzdWx0RW5jb2RlZFBhcmFtZXRlcnM7XG4gIH1cblxuICAvLyByZWdpb24gU3Rha2UgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIGxvY2sgYnVpbGRlciBpZiBleGlzdCwgb3IgY3JlYXRlcyBhIG5ldyBvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgaXRcbiAgICogcmVxdWlyZXM6IGFtb3VudFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IHRoZSBzdGFraW5nIGJ1aWxkZXJcbiAgICovXG4gIGxvY2soKTogU3Rha2luZ0J1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2spIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0xvY2sgY2FuIG9ubHkgYmUgc2V0IGZvciBTdGFraW5nIExvY2sgdHJhbnNhY3Rpb25zIHR5cGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCdWlsZGVyKFN0YWtpbmdPcGVyYXRpb25UeXBlcy5MT0NLKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIHZvdGUgYnVpbGRlciBpZiBleGlzdCwgb3IgY3JlYXRlcyBhIG5ldyBvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgaXRcbiAgICogcmVxdWlyZXM6IGdyb3VwLCBsZXNzZXIsIGdyZWF0ZXIsIGFtb3VudFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IHRoZSBzdGFraW5nIGJ1aWxkZXJcbiAgICovXG4gIHZvdGUoKTogU3Rha2luZ0J1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1ZvdGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZvdGVzIGNhbiBvbmx5IGJlIHNldCBmb3IgYSBzdGFraW5nIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcihTdGFraW5nT3BlcmF0aW9uVHlwZXMuVk9URSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3Rha2luZyBhY3RpdmF0ZSBidWlsZGVyIGlmIGV4aXN0LCBvciBjcmVhdGVzIGEgbmV3IG9uZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKiByZXF1aXJlczogZ3JvdXBcbiAgICpcbiAgICogQHJldHVybnMge1N0YWtpbmdCdWlsZGVyfSB0aGUgc3Rha2luZyBidWlsZGVyXG4gICAqL1xuICBhY3RpdmF0ZSgpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0FjdGl2YXRpb24gY2FuIG9ubHkgYmUgc2V0IGZvciBhIHN0YWtpbmcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCdWlsZGVyKFN0YWtpbmdPcGVyYXRpb25UeXBlcy5BQ1RJVkFURSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3Rha2luZyB1bmxvY2sgYnVpbGRlciBpZiBleGlzdCwgb3IgY3JlYXRlcyBhIG5ldyBvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgaXRcbiAgICogcmVxdWlyZXM6IGFtb3VudFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IHRoZSBzdGFraW5nIGJ1aWxkZXJcbiAgICovXG4gIHVubG9jaygpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVbmxvY2sgY2FuIG9ubHkgYmUgc2V0IGZvciBTdGFraW5nIFVubG9jayB0cmFuc2FjdGlvbnMgdHlwZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXIoU3Rha2luZ09wZXJhdGlvblR5cGVzLlVOTE9DSyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3Rha2luZyB1bnZvdGUgYnVpbGRlciBpZiBleGlzdCwgb3IgY3JlYXRlcyBhIG5ldyBvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgaXRcbiAgICogcmVxdWlyZXM6IGdyb3VwLCBsZXNzZXIsIGdyZWF0ZXIsIGFtb3VudCwgaW5kZXhcbiAgICpcbiAgICogQHJldHVybnMge1N0YWtpbmdCdWlsZGVyfSB0aGUgc3Rha2luZyBidWlsZGVyXG4gICAqL1xuICB1bnZvdGUoKTogU3Rha2luZ0J1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1Vudm90ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVW52b3RlIGNhbiBvbmx5IGJlIHNldCBmb3IgYSBzdGFraW5nIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcihTdGFraW5nT3BlcmF0aW9uVHlwZXMuVU5WT1RFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIHdpdGhkcmF3IGJ1aWxkZXIgaWYgZXhpc3QsIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGZvciB0aGlzIHRyYW5zYWN0aW9uIGFuZCByZXR1cm5zIGl0XG4gICAqIHJlcXVpcmVzOiBpbmRleCAodW5sb2NrIGxpc3QpXG4gICAqXG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gdGhlIHN0YWtpbmcgYnVpbGRlclxuICAgKi9cbiAgd2l0aGRyYXcoKTogU3Rha2luZ0J1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdXaXRoZHJhdyBjYW4gb25seSBiZSBzZXQgZm9yIGEgc3Rha2luZyB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXIoU3Rha2luZ09wZXJhdGlvblR5cGVzLldJVEhEUkFXKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0cmFuc2ZlcihkYXRhPzogc3RyaW5nKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zZmVycyBjYW4gb25seSBiZSBzZXQgZm9yIHNlbmQgdHJhbnNhY3Rpb25zJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fdHJhbnNmZXIpIHtcbiAgICAgIHRoaXMuX3RyYW5zZmVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcihkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBwcm9wcmlhdGUgYnVpbGRlciBmb3IgdGhlIHNlbGVjdGVkIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtTdGFraW5nT3BlcmF0aW9uVHlwZXN9IHR5cGUgdGhlIHNlbGVjdGVkIHR5cGUgZm9yIHRoZSBzdGFraW5nIGJ1aWxkZXJcbiAgICogQHJldHVybnMge1N0YWtpbmdCdWlsZGVyfSB0aGUgc3Rha2luZyBidWlsZGVyIGZvciB0aGUgc2VsZWN0ZWQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKHR5cGU6IFN0YWtpbmdPcGVyYXRpb25UeXBlcyk6IFN0YWtpbmdCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX3N0YWtpbmdCdWlsZGVyKSB7XG4gICAgICB0aGlzLl9zdGFraW5nQnVpbGRlciA9IG5ldyBTdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS50eXBlKHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdGFraW5nQnVpbGRlcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3Rha2luZygpOiBTdGFraW5nQ2FsbCB7XG4gICAgaWYgKCF0aGlzLl9zdGFraW5nQnVpbGRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTm8gc3Rha2luZyBpbmZvcm1hdGlvbiBzZXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N0YWtpbmdCdWlsZGVyLmJ1aWxkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9ja1N0YWtlVHJhbnNhY3Rpb24oKTogVHhEYXRhIHtcbiAgICBjb25zdCBzdGFrZSA9IHRoaXMuZ2V0U3Rha2luZygpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1aWxkQmFzZShzdGFrZS5zZXJpYWxpemUoKSk7XG4gICAgZGF0YS50byA9IHN0YWtlLmFkZHJlc3M7XG4gICAgZGF0YS52YWx1ZSA9IHN0YWtlLmFtb3VudDtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN0YWtpbmdUcmFuc2FjdGlvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IHN0YWtlID0gdGhpcy5nZXRTdGFraW5nKCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuYnVpbGRCYXNlKHN0YWtlLnNlcmlhbGl6ZSgpKTtcbiAgICBkYXRhLnRvID0gc3Rha2UuYWRkcmVzcztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgdiB2YWx1ZS4gRmluYWwgdiBpcyBkZXNjcmliZWQgaW4gRUlQLTE1NS5cbiAgICpcbiAgICogQHByb3RlY3RlZCBmb3IgaW50ZXJuYWwgdXNlIHdoZW4gdGhlIGVuYWJsZUZpbmFsVkZpZWxkIGZsYWcgaXMgdHJ1ZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRGaW5hbFYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KHRoaXMuX2NvbW1vbi5jaGFpbklkQk4oKS50b1N0cmluZygxNikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byBzZW5kIGFsb25nIHdpdGggdGhpcyB0cmFuc2FjdGlvbi4gMCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VuZCBhbG9uZyB3aXRoIHRoaXMgdHJhbnNhY3Rpb25cbiAgICovXG4gIHZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlUHJlY2lzaW9uKHZhbHVlLCAnVmFsdWUnKTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgdmFsaWRhdGVQcmVjaXNpb24odmFsdWU6IHN0cmluZywgY29udGV4dD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnRleHQgPSBjb250ZXh0ID8gY29udGV4dCArICcgJyA6ICcnO1xuICAgIGNvbnN0IHZhbHVlTnVtYmVyID0gTnVtYmVyKHZhbHVlKTtcbiAgICAvLyB0aGUgQ2VsbyBsaWJyYXJ5IGludGVybmFsbHkgY29udmVydHMgdGhlIHN0cmluZyB2YWx1ZSB0byBhIG51bWJlciBhbmQgY29udmVydHMgdG8gaGV4LCB3aGljaCBjYW4gcmVzdWx0IGluIGEgbG9zcyBvZiBwcmVjaXNpb24gZm9yIG51bWJlcnMgd2l0aCA+PSAxNSBzaWduaWZpY2FudCBkaWdpdHNcbiAgICBjb25zdCB2YWx1ZUJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIodmFsdWVOdW1iZXIudG9TdHJpbmcoMTYpLCAxNik7XG4gICAgaWYgKGlzTmFOKHZhbHVlTnVtYmVyKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgJHtjb250ZXh0fSR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlQmlnTnVtYmVyLmlzRXF1YWxUbyh2YWx1ZU51bWJlcikpIHtcbiAgICAgIC8vIFRPRE8oQkctNjI3MTQpOiByZW1vdmUgdGhpcyBjaGVjayBvbmNlIHRoZSBjZWxvIGxpYnJhcnkgaXMgZml4ZWRcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGAke2NvbnRleHR9JHt2YWx1ZX0gY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IGEgSlMgbnVtYmVyLCBwbGVhc2UgdHJ5IHVzaW5nIGZld2VyIHNpZ25pZmljYW50IGRpZ2l0cy4gV2UgYXJlIHdvcmtpbmcgdG8gc3VwcG9ydCBhbGwgdmFsdWVzIGluIHRoZSBmdXR1cmUuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0VBQXlDO0FBQ3pDLDJEQUF1RDtBQUN2RCwyREFBd0g7QUFDeEgsbURBQXFHO0FBQ3JHLHFEQUFrRDtBQUVsRCxtQ0FBMEQ7QUFDMUQsdURBQW9EO0FBQ3BELGdFQUFxQztBQUVyQyxNQUFhLGtCQUFtQixTQUFRLGlDQUFxQjtJQUszRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsaUJBQVMsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksMEJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxJQUFxQjtRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsS0FBSywwQkFBZSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDMUMsS0FBSywwQkFBZSxDQUFDLGFBQWEsQ0FBQztZQUNuQyxLQUFLLDBCQUFlLENBQUMsV0FBVyxDQUFDO1lBQ2pDLEtBQUssMEJBQWUsQ0FBQyxhQUFhLENBQUM7WUFDbkMsS0FBSywwQkFBZSxDQUFDLGVBQWUsQ0FBQztZQUNyQyxLQUFLLDBCQUFlLENBQUMsZUFBZTtn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Q29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIGFzIEV0aFRyYW5zYWN0aW9uQnVpbGRlciwgVHhEYXRhLCB3YWxsZXRTaW1wbGVDb25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb2luLWV0aCc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSwgU3Rha2luZ09wZXJhdGlvblR5cGVzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdDYWxsIH0gZnJvbSAnLi9zdGFraW5nQ2FsbCc7XG5pbXBvcnQgeyBnZXRDb21tb24sIHdhbGxldFNpbXBsZUJ5dGVDb2RlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBFdGhUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAvLyBTdGFraW5nIHNwZWNpZmljIHBhcmFtZXRlcnNcbiAgcHJpdmF0ZSBfc3Rha2luZ0J1aWxkZXI/OiBTdGFraW5nQnVpbGRlcjtcbiAgcHJvdGVjdGVkIF90cmFuc2ZlcjogVHJhbnNmZXJCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9jb21tb24gPSBnZXRDb21tb24odGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdGhpcy5fY29tbW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0eXBlKHR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHN1cGVyLnR5cGUodHlwZSk7XG4gICAgdGhpcy5fc3Rha2luZ0J1aWxkZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25EYXRhKCk6IFR4RGF0YSB7XG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRMb2NrU3Rha2VUcmFuc2FjdGlvbigpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdWb3RlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1Vudm90ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRTdGFraW5nVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldFRyYW5zYWN0aW9uRGF0YSgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBsZXQgdHg6IFRyYW5zYWN0aW9uO1xuICAgIGlmICgvXjB4P1swLTlhLWZdezEsfSQvLnRlc3QocmF3VHJhbnNhY3Rpb24udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHR4ID0gVHJhbnNhY3Rpb24uZnJvbVNlcmlhbGl6ZWQodGhpcy5fY29pbkNvbmZpZywgdGhpcy5fY29tbW9uLCByYXdUcmFuc2FjdGlvbik7XG4gICAgICBzdXBlci5sb2FkQnVpbGRlcklucHV0KHR4LnRvSnNvbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHhEYXRhID0gSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCB0aGlzLl9jb21tb24sIHR4RGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUcmFuc2FjdGlvblR5cGVGaWVsZHMoZGVjb2RlZFR5cGU6IFRyYW5zYWN0aW9uVHlwZSwgdHJhbnNhY3Rpb25Kc29uOiBUeERhdGEpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGRlY29kZWRUeXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jazpcbiAgICAgICAgdGhpcy5fc3Rha2luZ0J1aWxkZXIgPSBuZXcgU3Rha2luZ0J1aWxkZXIodGhpcy5fY29pbkNvbmZpZylcbiAgICAgICAgICAudHlwZShTdGFraW5nT3BlcmF0aW9uVHlwZXMuTE9DSylcbiAgICAgICAgICAuYW1vdW50KHRyYW5zYWN0aW9uSnNvbi52YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdWb3RlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1Vudm90ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgdGhpcy5fc3Rha2luZ0J1aWxkZXIgPSBuZXcgU3Rha2luZ0J1aWxkZXIodGhpcy5fY29pbkNvbmZpZywgdHJhbnNhY3Rpb25Kc29uLmRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHN1cGVyLnNldFRyYW5zYWN0aW9uVHlwZUZpZWxkcyhkZWNvZGVkVHlwZSwgdHJhbnNhY3Rpb25Kc29uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNtYXJ0IGNvbnRyYWN0IGVuY29kZWQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhZGRyZXNzZXMgLSB0aGUgY29udHJhY3Qgc2lnbmVyc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBzbWFydCBjb250cmFjdCBlbmNvZGVkIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBnZXRDb250cmFjdERhdGEoYWRkcmVzc2VzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW1zID0gW2FkZHJlc3Nlc107XG4gICAgY29uc3QgcmVzdWx0RW5jb2RlZFBhcmFtZXRlcnMgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUod2FsbGV0U2ltcGxlQ29uc3RydWN0b3IsIHBhcmFtcylcbiAgICAgIC50b1N0cmluZygnaGV4JylcbiAgICAgIC5yZXBsYWNlKCcweCcsICcnKTtcbiAgICByZXR1cm4gd2FsbGV0U2ltcGxlQnl0ZUNvZGUgKyByZXN1bHRFbmNvZGVkUGFyYW1ldGVycztcbiAgfVxuXG4gIC8vIHJlZ2lvbiBTdGFrZSBtZXRob2RzXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0YWtpbmcgbG9jayBidWlsZGVyIGlmIGV4aXN0LCBvciBjcmVhdGVzIGEgbmV3IG9uZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKiByZXF1aXJlczogYW1vdW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gdGhlIHN0YWtpbmcgYnVpbGRlclxuICAgKi9cbiAgbG9jaygpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jaykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTG9jayBjYW4gb25seSBiZSBzZXQgZm9yIFN0YWtpbmcgTG9jayB0cmFuc2FjdGlvbnMgdHlwZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXIoU3Rha2luZ09wZXJhdGlvblR5cGVzLkxPQ0spO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0YWtpbmcgdm90ZSBidWlsZGVyIGlmIGV4aXN0LCBvciBjcmVhdGVzIGEgbmV3IG9uZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKiByZXF1aXJlczogZ3JvdXAsIGxlc3NlciwgZ3JlYXRlciwgYW1vdW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gdGhlIHN0YWtpbmcgYnVpbGRlclxuICAgKi9cbiAgdm90ZSgpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVm90ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVm90ZXMgY2FuIG9ubHkgYmUgc2V0IGZvciBhIHN0YWtpbmcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCdWlsZGVyKFN0YWtpbmdPcGVyYXRpb25UeXBlcy5WT1RFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIGFjdGl2YXRlIGJ1aWxkZXIgaWYgZXhpc3QsIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGZvciB0aGlzIHRyYW5zYWN0aW9uIGFuZCByZXR1cm5zIGl0XG4gICAqIHJlcXVpcmVzOiBncm91cFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IHRoZSBzdGFraW5nIGJ1aWxkZXJcbiAgICovXG4gIGFjdGl2YXRlKCk6IFN0YWtpbmdCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWN0aXZhdGlvbiBjYW4gb25seSBiZSBzZXQgZm9yIGEgc3Rha2luZyB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEJ1aWxkZXIoU3Rha2luZ09wZXJhdGlvblR5cGVzLkFDVElWQVRFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIHVubG9jayBidWlsZGVyIGlmIGV4aXN0LCBvciBjcmVhdGVzIGEgbmV3IG9uZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKiByZXF1aXJlczogYW1vdW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gdGhlIHN0YWtpbmcgYnVpbGRlclxuICAgKi9cbiAgdW5sb2NrKCk6IFN0YWtpbmdCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2spIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VubG9jayBjYW4gb25seSBiZSBzZXQgZm9yIFN0YWtpbmcgVW5sb2NrIHRyYW5zYWN0aW9ucyB0eXBlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcihTdGFraW5nT3BlcmF0aW9uVHlwZXMuVU5MT0NLKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIHVudm90ZSBidWlsZGVyIGlmIGV4aXN0LCBvciBjcmVhdGVzIGEgbmV3IG9uZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKiByZXF1aXJlczogZ3JvdXAsIGxlc3NlciwgZ3JlYXRlciwgYW1vdW50LCBpbmRleFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IHRoZSBzdGFraW5nIGJ1aWxkZXJcbiAgICovXG4gIHVudm90ZSgpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW52b3RlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVbnZvdGUgY2FuIG9ubHkgYmUgc2V0IGZvciBhIHN0YWtpbmcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCdWlsZGVyKFN0YWtpbmdPcGVyYXRpb25UeXBlcy5VTlZPVEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0YWtpbmcgd2l0aGRyYXcgYnVpbGRlciBpZiBleGlzdCwgb3IgY3JlYXRlcyBhIG5ldyBvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgaXRcbiAgICogcmVxdWlyZXM6IGluZGV4ICh1bmxvY2sgbGlzdClcbiAgICpcbiAgICogQHJldHVybnMge1N0YWtpbmdCdWlsZGVyfSB0aGUgc3Rha2luZyBidWlsZGVyXG4gICAqL1xuICB3aXRoZHJhdygpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1dpdGhkcmF3IGNhbiBvbmx5IGJlIHNldCBmb3IgYSBzdGFraW5nIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcihTdGFraW5nT3BlcmF0aW9uVHlwZXMuV0lUSERSQVcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRyYW5zZmVyKGRhdGE/OiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNmZXJzIGNhbiBvbmx5IGJlIHNldCBmb3Igc2VuZCB0cmFuc2FjdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl90cmFuc2Zlcikge1xuICAgICAgdGhpcy5fdHJhbnNmZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcHByb3ByaWF0ZSBidWlsZGVyIGZvciB0aGUgc2VsZWN0ZWQgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0YWtpbmdPcGVyYXRpb25UeXBlc30gdHlwZSB0aGUgc2VsZWN0ZWQgdHlwZSBmb3IgdGhlIHN0YWtpbmcgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IHRoZSBzdGFraW5nIGJ1aWxkZXIgZm9yIHRoZSBzZWxlY3RlZCB0eXBlXG4gICAqL1xuICBwcml2YXRlIGdldEJ1aWxkZXIodHlwZTogU3Rha2luZ09wZXJhdGlvblR5cGVzKTogU3Rha2luZ0J1aWxkZXIge1xuICAgIGlmICghdGhpcy5fc3Rha2luZ0J1aWxkZXIpIHtcbiAgICAgIHRoaXMuX3N0YWtpbmdCdWlsZGVyID0gbmV3IFN0YWtpbmdCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLnR5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0YWtpbmdCdWlsZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdGFraW5nKCk6IFN0YWtpbmdDYWxsIHtcbiAgICBpZiAoIXRoaXMuX3N0YWtpbmdCdWlsZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdObyBzdGFraW5nIGluZm9ybWF0aW9uIHNldCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3Rha2luZ0J1aWxkZXIuYnVpbGQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRMb2NrU3Rha2VUcmFuc2FjdGlvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IHN0YWtlID0gdGhpcy5nZXRTdGFraW5nKCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuYnVpbGRCYXNlKHN0YWtlLnNlcmlhbGl6ZSgpKTtcbiAgICBkYXRhLnRvID0gc3Rha2UuYWRkcmVzcztcbiAgICBkYXRhLnZhbHVlID0gc3Rha2UuYW1vdW50O1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3Rha2luZ1RyYW5zYWN0aW9uKCk6IFR4RGF0YSB7XG4gICAgY29uc3Qgc3Rha2UgPSB0aGlzLmdldFN0YWtpbmcoKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5idWlsZEJhc2Uoc3Rha2Uuc2VyaWFsaXplKCkpO1xuICAgIGRhdGEudG8gPSBzdGFrZS5hZGRyZXNzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHNlbmQgYWxvbmcgd2l0aCB0aGlzIHRyYW5zYWN0aW9uLiAwIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZW5kIGFsb25nIHdpdGggdGhpcyB0cmFuc2FjdGlvblxuICAgKi9cbiAgdmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVQcmVjaXNpb24odmFsdWUsICdWYWx1ZScpO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZVByZWNpc2lvbih2YWx1ZTogc3RyaW5nLCBjb250ZXh0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgPyBjb250ZXh0ICsgJyAnIDogJyc7XG4gICAgY29uc3QgdmFsdWVOdW1iZXIgPSBOdW1iZXIodmFsdWUpO1xuICAgIC8vIHRoZSBDZWxvIGxpYnJhcnkgaW50ZXJuYWxseSBjb252ZXJ0cyB0aGUgc3RyaW5nIHZhbHVlIHRvIGEgbnVtYmVyIGFuZCBjb252ZXJ0cyB0byBoZXgsIHdoaWNoIGNhbiByZXN1bHQgaW4gYSBsb3NzIG9mIHByZWNpc2lvbiBmb3IgbnVtYmVycyB3aXRoID49IDE1IHNpZ25pZmljYW50IGRpZ2l0c1xuICAgIGNvbnN0IHZhbHVlQmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcih2YWx1ZU51bWJlci50b1N0cmluZygxNiksIDE2KTtcbiAgICBpZiAoaXNOYU4odmFsdWVOdW1iZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGAke2NvbnRleHR9JHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWVCaWdOdW1iZXIuaXNFcXVhbFRvKHZhbHVlTnVtYmVyKSkge1xuICAgICAgLy8gVE9ETyhCRy02MjcxNCk6IHJlbW92ZSB0aGlzIGNoZWNrIG9uY2UgdGhlIGNlbG8gbGlicmFyeSBpcyBmaXhlZFxuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYCR7Y29udGV4dH0ke3ZhbHVlfSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgYSBKUyBudW1iZXIsIHBsZWFzZSB0cnkgdXNpbmcgZmV3ZXIgc2lnbmlmaWNhbnQgZGlnaXRzLiBXZSBhcmUgd29ya2luZyB0byBzdXBwb3J0IGFsbCB2YWx1ZXMgaW4gdGhlIGZ1dHVyZS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cbn1cbiJdfQ==
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { EthLikeTransactionData, KeyPair, LegacyTxData } from '@bitgo-beta/sdk-coin-eth';
3
2
  export declare class CeloTransaction {
4
3
  private raw;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":";AAcA,OAAO,EAAE,sBAAsB,EAAsB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7G,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAC,CAAC;IACvB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,WAAW,CAA0B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAgB;IAC1B,CAAC,EAAE,MAAM,CAAgB;IACzB,CAAC,EAAE,MAAM,CAAgB;IACzB,CAAC,EAAE,MAAM,CAAgB;IAGzB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;gBASb,EAAE,EAAE,YAAY;IAwB5B,OAAO,CAAC,OAAO;IAiBf,IAAI,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM;IAYxC,gBAAgB,IAAI,MAAM;IAS1B,kBAAkB;IAQlB,SAAS,IAAI,MAAM;IAInB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI9B,eAAe,IAAI,OAAO;IAY1B,UAAU,IAAI,MAAM;CAOrB;AAED,qBAAa,mBAAoB,YAAW,sBAAsB;IAChE,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAS;gBAErB,EAAE,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,MAAM;WAK3C,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,mBAAmB;IAoBvD,IAAI,CAAC,OAAO,EAAE,OAAO;IAe3B,kBAAkB;IAClB,MAAM,IAAI,YAAY;IAiCtB,OAAO,CAAC,kBAAkB;IAc1B,kBAAkB;IAClB,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B,OAAO,CAAC,MAAM,CAAC,eAAe;CAS/B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,sBAAsB,EAAsB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7G,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAC,CAAC;IACvB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,WAAW,CAA0B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAgB;IAC1B,CAAC,EAAE,MAAM,CAAgB;IACzB,CAAC,EAAE,MAAM,CAAgB;IACzB,CAAC,EAAE,MAAM,CAAgB;IAGzB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;gBASb,EAAE,EAAE,YAAY;IAwB5B,OAAO,CAAC,OAAO;IAiBf,IAAI,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM;IAYxC,gBAAgB,IAAI,MAAM;IAS1B,kBAAkB;IAQlB,SAAS,IAAI,MAAM;IAInB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI9B,eAAe,IAAI,OAAO;IAY1B,UAAU,IAAI,MAAM;CAOrB;AAED,qBAAa,mBAAoB,YAAW,sBAAsB;IAChE,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAS;gBAErB,EAAE,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,MAAM;WAK3C,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,mBAAmB;IAoBvD,IAAI,CAAC,OAAO,EAAE,OAAO;IAe3B,kBAAkB;IAClB,MAAM,IAAI,YAAY;IAiCtB,OAAO,CAAC,kBAAkB;IAc1B,kBAAkB;IAClB,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B,OAAO,CAAC,MAAM,CAAC,eAAe;CAS/B"}
@@ -9,36 +9,6 @@ const wallet_local_1 = require("@celo/wallet-local");
9
9
  const ethereumjs_util_1 = require("ethereumjs-util");
10
10
  const sdk_coin_eth_1 = require("@bitgo-beta/sdk-coin-eth");
11
11
  class CeloTransaction {
12
- constructor(tx) {
13
- this._feeCurrency = ethereumjs_util_1.toBuffer('0x');
14
- this._gatewayFeeRecipient = ethereumjs_util_1.toBuffer('0x');
15
- this._gatewayFee = ethereumjs_util_1.toBuffer('0x');
16
- this.to = ethereumjs_util_1.toBuffer([]);
17
- this.v = ethereumjs_util_1.toBuffer([]);
18
- this.r = ethereumjs_util_1.toBuffer([]);
19
- this.s = ethereumjs_util_1.toBuffer([]);
20
- this.nonce = ethereumjs_util_1.unpadBuffer(ethereumjs_util_1.toBuffer(tx.nonce));
21
- this.gasLimit = ethereumjs_util_1.toBuffer(this.sanitizeHexString(tx.gasLimit));
22
- this.gasPrice = ethereumjs_util_1.toBuffer(this.sanitizeHexString(tx.gasPrice));
23
- this.data = ethereumjs_util_1.toBuffer(this.sanitizeHexString(tx.data));
24
- this.value = ethereumjs_util_1.toBuffer(this.sanitizeHexString(tx.value));
25
- if (tx.to) {
26
- this.to = ethereumjs_util_1.toBuffer(tx.to);
27
- }
28
- if (tx.v) {
29
- this.v = ethereumjs_util_1.toBuffer(tx.v);
30
- }
31
- if (tx.r) {
32
- this.r = ethereumjs_util_1.toBuffer(tx.r);
33
- }
34
- if (tx.s) {
35
- this.s = ethereumjs_util_1.toBuffer(tx.s);
36
- }
37
- if (tx.from) {
38
- this._from = ethereumjs_util_1.toBuffer(tx.from);
39
- }
40
- this.initRaw();
41
- }
42
12
  // TODO: validate if this needs to be moved to Utils class
43
13
  /**
44
14
  * Clean hex formatted values ensuring they have an even length
@@ -55,6 +25,36 @@ class CeloTransaction {
55
25
  }
56
26
  return '0x0' + numberValue.slice(2);
57
27
  }
28
+ constructor(tx) {
29
+ this._feeCurrency = (0, ethereumjs_util_1.toBuffer)('0x');
30
+ this._gatewayFeeRecipient = (0, ethereumjs_util_1.toBuffer)('0x');
31
+ this._gatewayFee = (0, ethereumjs_util_1.toBuffer)('0x');
32
+ this.to = (0, ethereumjs_util_1.toBuffer)([]);
33
+ this.v = (0, ethereumjs_util_1.toBuffer)([]);
34
+ this.r = (0, ethereumjs_util_1.toBuffer)([]);
35
+ this.s = (0, ethereumjs_util_1.toBuffer)([]);
36
+ this.nonce = (0, ethereumjs_util_1.unpadBuffer)((0, ethereumjs_util_1.toBuffer)(tx.nonce));
37
+ this.gasLimit = (0, ethereumjs_util_1.toBuffer)(this.sanitizeHexString(tx.gasLimit));
38
+ this.gasPrice = (0, ethereumjs_util_1.toBuffer)(this.sanitizeHexString(tx.gasPrice));
39
+ this.data = (0, ethereumjs_util_1.toBuffer)(this.sanitizeHexString(tx.data));
40
+ this.value = (0, ethereumjs_util_1.toBuffer)(this.sanitizeHexString(tx.value));
41
+ if (tx.to) {
42
+ this.to = (0, ethereumjs_util_1.toBuffer)(tx.to);
43
+ }
44
+ if (tx.v) {
45
+ this.v = (0, ethereumjs_util_1.toBuffer)(tx.v);
46
+ }
47
+ if (tx.r) {
48
+ this.r = (0, ethereumjs_util_1.toBuffer)(tx.r);
49
+ }
50
+ if (tx.s) {
51
+ this.s = (0, ethereumjs_util_1.toBuffer)(tx.s);
52
+ }
53
+ if (tx.from) {
54
+ this._from = (0, ethereumjs_util_1.toBuffer)(tx.from);
55
+ }
56
+ this.initRaw();
57
+ }
58
58
  initRaw() {
59
59
  this.raw = [
60
60
  this.nonce,
@@ -79,16 +79,16 @@ class CeloTransaction {
79
79
  else {
80
80
  items = this.raw
81
81
  .slice(0, 9)
82
- .concat([ethereumjs_util_1.toBuffer(this.getChainId()), ethereumjs_util_1.unpadBuffer(ethereumjs_util_1.toBuffer(0)), ethereumjs_util_1.unpadBuffer(ethereumjs_util_1.toBuffer(0))]);
82
+ .concat([(0, ethereumjs_util_1.toBuffer)(this.getChainId()), (0, ethereumjs_util_1.unpadBuffer)((0, ethereumjs_util_1.toBuffer)(0)), (0, ethereumjs_util_1.unpadBuffer)((0, ethereumjs_util_1.toBuffer)(0))]);
83
83
  }
84
- return ethereumjs_util_1.rlphash(items);
84
+ return (0, ethereumjs_util_1.rlphash)(items);
85
85
  }
86
86
  getSenderAddress() {
87
87
  if (this._from) {
88
88
  return this._from;
89
89
  }
90
90
  const pubKey = this.getSenderPublicKey();
91
- this._from = ethereumjs_util_1.publicToAddress(pubKey);
91
+ this._from = (0, ethereumjs_util_1.publicToAddress)(pubKey);
92
92
  return this._from;
93
93
  }
94
94
  getSenderPublicKey() {
@@ -108,8 +108,8 @@ class CeloTransaction {
108
108
  const msgHash = this.hash(false);
109
109
  try {
110
110
  const chainId = this.getChainId();
111
- const v = ethereumjs_util_1.bufferToInt(this.v) - (2 * chainId + 35);
112
- this._senderPubKey = ethereumjs_util_1.ecrecover(msgHash, v + 27, this.r, this.s);
111
+ const v = (0, ethereumjs_util_1.bufferToInt)(this.v) - (2 * chainId + 35);
112
+ this._senderPubKey = (0, ethereumjs_util_1.ecrecover)(msgHash, v + 27, this.r, this.s);
113
113
  }
114
114
  catch (e) {
115
115
  return false;
@@ -117,7 +117,7 @@ class CeloTransaction {
117
117
  return !!this._senderPubKey;
118
118
  }
119
119
  getChainId() {
120
- let chainId = ethereumjs_util_1.bufferToInt(this.v);
120
+ let chainId = (0, ethereumjs_util_1.bufferToInt)(this.v);
121
121
  if (this.r.length && this.s.length) {
122
122
  chainId = (chainId - 35) >> 1;
123
123
  }
@@ -131,14 +131,14 @@ class CeloTransactionData {
131
131
  this.deployedAddress = deployedAddress;
132
132
  }
133
133
  static fromJson(tx) {
134
- const chainId = ethereumjs_util_1.addHexPrefix(new bignumber_js_1.default(Number(tx.chainId)).toString(16));
134
+ const chainId = (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(Number(tx.chainId)).toString(16));
135
135
  return new CeloTransactionData(new CeloTransaction({
136
136
  _type: sdk_coin_eth_1.ETHTransactionType.LEGACY,
137
137
  nonce: tx.nonce,
138
138
  to: tx.to,
139
- gasPrice: ethereumjs_util_1.addHexPrefix(new bignumber_js_1.default(tx.gasPrice).toString(16)),
140
- gasLimit: ethereumjs_util_1.addHexPrefix(new bignumber_js_1.default(tx.gasLimit).toString(16)),
141
- value: ethereumjs_util_1.addHexPrefix(new bignumber_js_1.default(tx.value).toString(16)),
139
+ gasPrice: (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.gasPrice).toString(16)),
140
+ gasLimit: (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.gasLimit).toString(16)),
141
+ value: (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.value).toString(16)),
142
142
  data: tx.data === '0x' ? '' : tx.data,
143
143
  from: tx.from,
144
144
  s: tx.s,
@@ -147,34 +147,34 @@ class CeloTransactionData {
147
147
  }), tx.deployedAddress);
148
148
  }
149
149
  async sign(keyPair) {
150
- const privateKey = ethereumjs_util_1.addHexPrefix(keyPair.getKeys().prv);
150
+ const privateKey = (0, ethereumjs_util_1.addHexPrefix)(keyPair.getKeys().prv);
151
151
  const data = CeloTransactionData.txJsonToCeloTx(this.toJson(), keyPair.getAddress());
152
152
  const celoLocalWallet = new wallet_local_1.LocalWallet();
153
153
  celoLocalWallet.addAccount(privateKey);
154
154
  const rawTransaction = await celoLocalWallet.signTransaction(data);
155
155
  const nonceBigNumber = new bignumber_js_1.default(rawTransaction.tx.nonce);
156
- rawTransaction.tx.nonce = ethereumjs_util_1.addHexPrefix(nonceBigNumber.toString(16));
156
+ rawTransaction.tx.nonce = (0, ethereumjs_util_1.addHexPrefix)(nonceBigNumber.toString(16));
157
157
  rawTransaction.raw = data.data === undefined ? '' : data.data;
158
158
  rawTransaction.tx.gas = rawTransaction.tx.gas;
159
159
  this.tx = new CeloTransaction(CeloTransactionData.encodedTxToJson(rawTransaction));
160
- this.tx.sign(ethereumjs_util_1.toBuffer(privateKey));
160
+ this.tx.sign((0, ethereumjs_util_1.toBuffer)(privateKey));
161
161
  }
162
162
  /** @inheritdoc */
163
163
  toJson() {
164
164
  const result = {
165
165
  _type: sdk_coin_eth_1.ETHTransactionType.LEGACY,
166
- nonce: ethereumjs_util_1.bufferToInt(this.tx.nonce),
167
- gasPrice: new bignumber_js_1.default(ethereumjs_util_1.bufferToHex(this.tx.gasPrice), 16).toString(10),
168
- gasLimit: new bignumber_js_1.default(ethereumjs_util_1.bufferToHex(this.tx.gasLimit), 16).toString(10),
169
- value: this.tx.value.length === 0 ? '0' : new bignumber_js_1.default(ethereumjs_util_1.bufferToHex(this.tx.value), 16).toString(10),
170
- data: ethereumjs_util_1.bufferToHex(this.tx.data),
171
- id: ethereumjs_util_1.addHexPrefix(ethereumjs_util_1.bufferToHex(this.tx.hash(true))),
166
+ nonce: (0, ethereumjs_util_1.bufferToInt)(this.tx.nonce),
167
+ gasPrice: new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)(this.tx.gasPrice), 16).toString(10),
168
+ gasLimit: new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)(this.tx.gasLimit), 16).toString(10),
169
+ value: this.tx.value.length === 0 ? '0' : new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)(this.tx.value), 16).toString(10),
170
+ data: (0, ethereumjs_util_1.bufferToHex)(this.tx.data),
171
+ id: (0, ethereumjs_util_1.addHexPrefix)((0, ethereumjs_util_1.bufferToHex)(this.tx.hash(true))),
172
172
  };
173
173
  if (this.tx.to && this.tx.to.length) {
174
- result.to = ethereumjs_util_1.bufferToHex(this.tx.to);
174
+ result.to = (0, ethereumjs_util_1.bufferToHex)(this.tx.to);
175
175
  }
176
176
  if (this.tx.verifySignature()) {
177
- result.from = ethereumjs_util_1.bufferToHex(this.tx.getSenderAddress());
177
+ result.from = (0, ethereumjs_util_1.bufferToHex)(this.tx.getSenderAddress());
178
178
  }
179
179
  const chainId = this.tx.getChainId();
180
180
  if (chainId) {
@@ -188,18 +188,18 @@ class CeloTransactionData {
188
188
  }
189
189
  setSignatureFields(result) {
190
190
  if (this.tx.v && this.tx.v.length) {
191
- result.v = ethereumjs_util_1.bufferToHex(this.tx.v);
191
+ result.v = (0, ethereumjs_util_1.bufferToHex)(this.tx.v);
192
192
  }
193
193
  if (this.tx.r && this.tx.r.length) {
194
- result.r = ethereumjs_util_1.bufferToHex(this.tx.r);
194
+ result.r = (0, ethereumjs_util_1.bufferToHex)(this.tx.r);
195
195
  }
196
196
  if (this.tx.s && this.tx.s.length) {
197
- result.s = ethereumjs_util_1.bufferToHex(this.tx.s);
197
+ result.s = (0, ethereumjs_util_1.bufferToHex)(this.tx.s);
198
198
  }
199
199
  }
200
200
  /** @inheritdoc */
201
201
  toSerialized() {
202
- return ethereumjs_util_1.addHexPrefix(this.tx.serialize().toString('hex'));
202
+ return (0, ethereumjs_util_1.addHexPrefix)(this.tx.serialize().toString('hex'));
203
203
  }
204
204
  static txJsonToCeloTx(txJson, signer) {
205
205
  // the celo library requires you to specify the signer address with the from field
@@ -220,4 +220,4 @@ class CeloTransactionData {
220
220
  }
221
221
  }
222
222
  exports.CeloTransactionData = CeloTransactionData;
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyxxREFBaUQ7QUFDakQscURBVXlCO0FBRXpCLDJEQUE2RztBQUU3RyxNQUFhLGVBQWU7SUFrQzFCLFlBQVksRUFBZ0I7UUE3QnBCLGlCQUFZLEdBQVcsMEJBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0Qyx5QkFBb0IsR0FBVywwQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLGdCQUFXLEdBQVcsMEJBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQU03QyxPQUFFLEdBQVcsMEJBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixNQUFDLEdBQVcsMEJBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFDLEdBQVcsMEJBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFDLEdBQVcsMEJBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQW1CdkIsSUFBSSxDQUFDLEtBQUssR0FBRyw2QkFBVyxDQUFDLDBCQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRywwQkFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxHQUFHLDBCQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIs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QUFNLENBQUMsQ0FBQyxHQUFHLDZCQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsWUFBWTtRQUNWLE9BQU8sOEJBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQW9CLEVBQUUsTUFBYztRQUNoRSxrRkFBa0Y7UUFDbEYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7WUFDL0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN4RSxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDcEIsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUE2QjtRQUMxRCxPQUFPO1lBQ0wsR0FBRyxTQUFTLENBQUMsRUFBRTtZQUNmLEtBQUssRUFBRSxpQ0FBa0IsQ0FBQyxNQUFNO1lBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUc7WUFDMUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3BCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuSEQsa0RBbUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgTG9jYWxXYWxsZXQgfSBmcm9tICdAY2Vsby93YWxsZXQtbG9jYWwnO1xuaW1wb3J0IHtcbiAgYWRkSGV4UHJlZml4LFxuICB0b0J1ZmZlcixcbiAgYnVmZmVyVG9IZXgsXG4gIGJ1ZmZlclRvSW50LFxuICBybHAsXG4gIHJscGhhc2gsXG4gIGVjcmVjb3ZlcixcbiAgcHVibGljVG9BZGRyZXNzLFxuICB1bnBhZEJ1ZmZlcixcbn0gZnJvbSAnZXRoZXJldW1qcy11dGlsJztcbmltcG9ydCB7IENlbG9UeCwgRW5jb2RlZFRyYW5zYWN0aW9uIH0gZnJvbSAnQGNlbG8vY29ubmVjdCc7XG5pbXBvcnQgeyBFdGhMaWtlVHJhbnNhY3Rpb25EYXRhLCBFVEhUcmFuc2FjdGlvblR5cGUsIEtleVBhaXIsIExlZ2FjeVR4RGF0YSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb2luLWV0aCc7XG5cbmV4cG9ydCBjbGFzcyBDZWxvVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIHJhdzogQnVmZmVyW107XG4gIHByaXZhdGUgX2Zyb206IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfc2VuZGVyUHViS2V5PztcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlczogQnVmZmVyW107XG4gIHByaXZhdGUgX2ZlZUN1cnJlbmN5OiBCdWZmZXIgPSB0b0J1ZmZlcignMHgnKTtcbiAgcHJpdmF0ZSBfZ2F0ZXdheUZlZVJlY2lwaWVudDogQnVmZmVyID0gdG9CdWZmZXIoJzB4Jyk7XG4gIHByaXZhdGUgX2dhdGV3YXlGZWU6IEJ1ZmZlciA9IHRvQnVmZmVyKCcweCcpO1xuICBub25jZTogQnVmZmVyO1xuICBnYXNMaW1pdDogQnVmZmVyO1xuICBnYXNQcmljZTogQnVmZmVyO1xuICBkYXRhOiBCdWZmZXI7XG4gIHZhbHVlOiBCdWZmZXI7XG4gIHRvOiBCdWZmZXIgPSB0b0J1ZmZlcihbXSk7XG4gIHY6IEJ1ZmZlciA9IHRvQnVmZmVyKFtdKTtcbiAgcjogQnVmZmVyID0gdG9CdWZmZXIoW10pO1xuICBzOiBCdWZmZXIgPSB0b0J1ZmZlcihbXSk7XG5cbiAgLy8gVE9ETzogdmFsaWRhdGUgaWYgdGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byBVdGlscyBjbGFzc1xuICAvKipcbiAgICogQ2xlYW4gaGV4IGZvcm1hdHRlZCB2YWx1ZXMgZW5zdXJpbmcgdGhleSBoYXZlIGFuIGV2ZW4gbGVuZ3RoXG4gICAqXG4gICAqIEBwYXJhbSBudW1iZXJWYWx1ZSBIZXggZm9ybWF0dGVkIG51bWJlciB2YWx1ZS4gRXhhbXBsZSAnMHgwMSdcbiAgICogQHJldHVybnMgc2FuaXRpemVkIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplSGV4U3RyaW5nKG51bWJlclZhbHVlKSB7XG4gICAgaWYgKG51bWJlclZhbHVlID09PSAnMHgwJyB8fCBudW1iZXJWYWx1ZSA9PSAnJykge1xuICAgICAgcmV0dXJuICcweCc7XG4gICAgfSBlbHNlIGlmIChudW1iZXJWYWx1ZS5sZW5ndGggJSAyID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVtYmVyVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAnMHgwJyArIG51bWJlclZhbHVlLnNsaWNlKDIpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodHg6IExlZ2FjeVR4RGF0YSkge1xuICAgIHRoaXMubm9uY2UgPSB1bnBhZEJ1ZmZlcih0b0J1ZmZlcih0eC5ub25jZSkpO1xuICAgIHRoaXMuZ2FzTGltaXQgPSB0b0J1ZmZlcih0aGlzLnNhbml0aXplSGV4U3RyaW5nKHR4Lmdhc0xpbWl0KSk7XG4gICAgdGhpcy5nYXNQcmljZSA9IHRvQnVmZmVyKHRoaXMuc2FuaXRpemVIZXhTdHJpbmcodHguZ2FzUHJpY2UpKTtcbiAgICB0aGlzLmRhdGEgPSB0b0J1ZmZlcih0aGlzLnNhbml0aXplSGV4U3RyaW5nKHR4LmRhdGEpKTtcbiAgICB0aGlzLnZhbHVlID0gdG9CdWZmZXIodGhpcy5zYW5pdGl6ZUhleFN0cmluZyh0eC52YWx1ZSkpO1xuICAgIGlmICh0eC50bykge1xuICAgICAgdGhpcy50byA9IHRvQnVmZmVyKHR4LnRvKTtcbiAgICB9XG4gICAgaWYgKHR4LnYpIHtcbiAgICAgIHRoaXMudiA9IHRvQnVmZmVyKHR4LnYpO1xuICAgIH1cbiAgICBpZiAodHgucikge1xuICAgICAgdGhpcy5yID0gdG9CdWZmZXIodHgucik7XG4gICAgfVxuICAgIGlmICh0eC5zKSB7XG4gICAgICB0aGlzLnMgPSB0b0J1ZmZlcih0eC5zKTtcbiAgICB9XG4gICAgaWYgKHR4LmZyb20pIHtcbiAgICAgIHRoaXMuX2Zyb20gPSB0b0J1ZmZlcih0eC5mcm9tKTtcbiAgICB9XG4gICAgdGhpcy5pbml0UmF3KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRSYXcoKSB7XG4gICAgdGhpcy5yYXcgPSBbXG4gICAgICB0aGlzLm5vbmNlLFxuICAgICAgdGhpcy5nYXNQcmljZSxcbiAgICAgIHRoaXMuZ2FzTGltaXQsXG4gICAgICB0aGlzLl9mZWVDdXJyZW5jeSxcbiAgICAgIHRoaXMuX2dhdGV3YXlGZWVSZWNpcGllbnQsXG4gICAgICB0aGlzLl9nYXRld2F5RmVlLFxuICAgICAgdGhpcy50byxcbiAgICAgIHRoaXMudmFsdWUsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICB0aGlzLnYsXG4gICAgICB0aGlzLnIsXG4gICAgICB0aGlzLnMsXG4gICAgXTtcbiAgfVxuXG4gIGhhc2goaW5jbHVkZVNpZ25hdHVyZT86IGJvb2xlYW4pOiBCdWZmZXIge1xuICAgIGxldCBpdGVtcztcbiAgICBpZiAoaW5jbHVkZVNpZ25hdHVyZSkge1xuICAgICAgaXRlbXMgPSB0aGlzLnJhdztcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSB0aGlzLnJhd1xuICAgICAgICAuc2xpY2UoMCwgOSlcbiAgICAgICAgLmNvbmNhdChbdG9CdWZmZXIodGhpcy5nZXRDaGFpbklkKCkpLCB1bnBhZEJ1ZmZlcih0b0J1ZmZlcigwKSksIHVucGFkQnVmZmVyKHRvQnVmZmVyKDApKV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmxwaGFzaChpdGVtcyk7XG4gIH1cblxuICBnZXRTZW5kZXJBZGRyZXNzKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuX2Zyb20pIHtcbiAgICAgIHJldHVybiB0aGlzLl9mcm9tO1xuICAgIH1cbiAgICBjb25zdCBwdWJLZXkgPSB0aGlzLmdldFNlbmRlclB1YmxpY0tleSgpO1xuICAgIHRoaXMuX2Zyb20gPSBwdWJsaWNUb0FkZHJlc3MocHViS2V5KTtcbiAgICByZXR1cm4gdGhpcy5fZnJvbTtcbiAgfVxuXG4gIGdldFNlbmRlclB1YmxpY0tleSgpIHtcbiAgICBpZiAodGhpcy52ZXJpZnlTaWduYXR1cmUoKSkge1xuICAgICAgLy8gSWYgdGhlIHNpZ25hdHVyZSB3YXMgdmVyaWZpZWQgc3VjY2Vzc2Z1bGx5IHRoZSBfc2VuZGVyUHViS2V5IGZpZWxkIGlzIGRlZmluZWRcbiAgICAgIHJldHVybiB0aGlzLl9zZW5kZXJQdWJLZXk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaWduYXR1cmUnKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpOiBCdWZmZXIge1xuICAgIHJldHVybiBybHAuZW5jb2RlKHRoaXMucmF3KTtcbiAgfVxuXG4gIHNpZ24ocHJpdmF0ZUtleTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFt0aGlzLnYsIHRoaXMuciwgdGhpcy5zLCBwcml2YXRlS2V5XTtcbiAgfVxuXG4gIHZlcmlmeVNpZ25hdHVyZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtc2dIYXNoID0gdGhpcy5oYXNoKGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2hhaW5JZCA9IHRoaXMuZ2V0Q2hhaW5JZCgpO1xuICAgICAgY29uc3QgdiA9IGJ1ZmZlclRvSW50KHRoaXMudikgLSAoMiAqIGNoYWluSWQgKyAzNSk7XG4gICAgICB0aGlzLl9zZW5kZXJQdWJLZXkgPSBlY3JlY292ZXIobXNnSGFzaCwgdiArIDI3LCB0aGlzLnIsIHRoaXMucyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISF0aGlzLl9zZW5kZXJQdWJLZXk7XG4gIH1cblxuICBnZXRDaGFpbklkKCk6IG51bWJlciB7XG4gICAgbGV0IGNoYWluSWQgPSBidWZmZXJUb0ludCh0aGlzLnYpO1xuICAgIGlmICh0aGlzLnIubGVuZ3RoICYmIHRoaXMucy5sZW5ndGgpIHtcbiAgICAgIGNoYWluSWQgPSAoY2hhaW5JZCAtIDM1KSA+PiAxO1xuICAgIH1cbiAgICByZXR1cm4gY2hhaW5JZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2Vsb1RyYW5zYWN0aW9uRGF0YSBpbXBsZW1lbnRzIEV0aExpa2VUcmFuc2FjdGlvbkRhdGEge1xuICBwcml2YXRlIHR4OiBDZWxvVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgZGVwbG95ZWRBZGRyZXNzPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHR4OiBDZWxvVHJhbnNhY3Rpb24sIGRlcGxveWVkQWRkcmVzcz86IHN0cmluZykge1xuICAgIHRoaXMudHggPSB0eDtcbiAgICB0aGlzLmRlcGxveWVkQWRkcmVzcyA9IGRlcGxveWVkQWRkcmVzcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24odHg6IExlZ2FjeVR4RGF0YSk6IENlbG9UcmFuc2FjdGlvbkRhdGEge1xuICAgIGNvbnN0IGNoYWluSWQgPSBhZGRIZXhQcmVmaXgobmV3IEJpZ051bWJlcihOdW1iZXIodHguY2hhaW5JZCkpLnRvU3RyaW5nKDE2KSk7XG4gICAgcmV0dXJuIG5ldyBDZWxvVHJhbnNhY3Rpb25EYXRhKFxuICAgICAgbmV3IENlbG9UcmFuc2FjdGlvbih7XG4gICAgICAgIF90eXBlOiBFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZLFxuICAgICAgICBub25jZTogdHgubm9uY2UsXG4gICAgICAgIHRvOiB0eC50byxcbiAgICAgICAgZ2FzUHJpY2U6IGFkZEhleFByZWZpeChuZXcgQmlnTnVtYmVyKHR4Lmdhc1ByaWNlKS50b1N0cmluZygxNikpLFxuICAgICAgICBnYXNMaW1pdDogYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIodHguZ2FzTGltaXQpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHZhbHVlOiBhZGRIZXhQcmVmaXgobmV3IEJpZ051bWJlcih0eC52YWx1ZSkudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgZGF0YTogdHguZGF0YSA9PT0gJzB4JyA/ICcnIDogdHguZGF0YSxcbiAgICAgICAgZnJvbTogdHguZnJvbSxcbiAgICAgICAgczogdHgucyxcbiAgICAgICAgcjogdHgucixcbiAgICAgICAgdjogdHgudiB8fCBjaGFpbklkLFxuICAgICAgfSksXG4gICAgICB0eC5kZXBsb3llZEFkZHJlc3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyKSB7XG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IGFkZEhleFByZWZpeChrZXlQYWlyLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nKTtcbiAgICBjb25zdCBkYXRhID0gQ2Vsb1RyYW5zYWN0aW9uRGF0YS50eEpzb25Ub0NlbG9UeCh0aGlzLnRvSnNvbigpLCBrZXlQYWlyLmdldEFkZHJlc3MoKSk7XG4gICAgY29uc3QgY2Vsb0xvY2FsV2FsbGV0ID0gbmV3IExvY2FsV2FsbGV0KCk7XG4gICAgY2Vsb0xvY2FsV2FsbGV0LmFkZEFjY291bnQocHJpdmF0ZUtleSk7XG4gICAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBhd2FpdCBjZWxvTG9jYWxXYWxsZXQuc2lnblRyYW5zYWN0aW9uKGRhdGEpO1xuXG4gICAgY29uc3Qgbm9uY2VCaWdOdW1iZXIgPSBuZXcgQmlnTnVtYmVyKHJhd1RyYW5zYWN0aW9uLnR4Lm5vbmNlKTtcbiAgICByYXdUcmFuc2FjdGlvbi50eC5ub25jZSA9IGFkZEhleFByZWZpeChub25jZUJpZ051bWJlci50b1N0cmluZygxNikpO1xuICAgIHJhd1RyYW5zYWN0aW9uLnJhdyA9IGRhdGEuZGF0YSA9PT0gdW5kZWZpbmVkID8gJycgOiBkYXRhLmRhdGE7XG4gICAgcmF3VHJhbnNhY3Rpb24udHguZ2FzID0gcmF3VHJhbnNhY3Rpb24udHguZ2FzO1xuICAgIHRoaXMudHggPSBuZXcgQ2Vsb1RyYW5zYWN0aW9uKENlbG9UcmFuc2FjdGlvbkRhdGEuZW5jb2RlZFR4VG9Kc29uKHJhd1RyYW5zYWN0aW9uKSk7XG4gICAgdGhpcy50eC5zaWduKHRvQnVmZmVyKHByaXZhdGVLZXkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogTGVnYWN5VHhEYXRhIHtcbiAgICBjb25zdCByZXN1bHQ6IExlZ2FjeVR4RGF0YSA9IHtcbiAgICAgIF90eXBlOiBFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZLFxuICAgICAgbm9uY2U6IGJ1ZmZlclRvSW50KHRoaXMudHgubm9uY2UpLFxuICAgICAgZ2FzUHJpY2U6IG5ldyBCaWdOdW1iZXIoYnVmZmVyVG9IZXgodGhpcy50eC5nYXNQcmljZSksIDE2KS50b1N0cmluZygxMCksXG4gICAgICBnYXNMaW1pdDogbmV3IEJpZ051bWJlcihidWZmZXJUb0hleCh0aGlzLnR4Lmdhc0xpbWl0KSwgMTYpLnRvU3RyaW5nKDEwKSxcbiAgICAgIHZhbHVlOiB0aGlzLnR4LnZhbHVlLmxlbmd0aCA9PT0gMCA/ICcwJyA6IG5ldyBCaWdOdW1iZXIoYnVmZmVyVG9IZXgodGhpcy50eC52YWx1ZSksIDE2KS50b1N0cmluZygxMCksXG4gICAgICBkYXRhOiBidWZmZXJUb0hleCh0aGlzLnR4LmRhdGEpLFxuICAgICAgaWQ6IGFkZEhleFByZWZpeChidWZmZXJUb0hleCh0aGlzLnR4Lmhhc2godHJ1ZSkpKSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudHgudG8gJiYgdGhpcy50eC50by5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC50byA9IGJ1ZmZlclRvSGV4KHRoaXMudHgudG8pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR4LnZlcmlmeVNpZ25hdHVyZSgpKSB7XG4gICAgICByZXN1bHQuZnJvbSA9IGJ1ZmZlclRvSGV4KHRoaXMudHguZ2V0U2VuZGVyQWRkcmVzcygpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFpbklkID0gdGhpcy50eC5nZXRDaGFpbklkKCk7XG4gICAgaWYgKGNoYWluSWQpIHtcbiAgICAgIHJlc3VsdC5jaGFpbklkID0gY2hhaW5JZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlcGxveWVkQWRkcmVzcykge1xuICAgICAgcmVzdWx0LmRlcGxveWVkQWRkcmVzcyA9IHRoaXMuZGVwbG95ZWRBZGRyZXNzO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2lnbmF0dXJlRmllbGRzKHJlc3VsdCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTaWduYXR1cmVGaWVsZHMocmVzdWx0OiBMZWdhY3lUeERhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50eC52ICYmIHRoaXMudHgudi5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC52ID0gYnVmZmVyVG9IZXgodGhpcy50eC52KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eC5yICYmIHRoaXMudHguci5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5yID0gYnVmZmVyVG9IZXgodGhpcy50eC5yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eC5zICYmIHRoaXMudHgucy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5zID0gYnVmZmVyVG9IZXgodGhpcy50eC5zKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9TZXJpYWxpemVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFkZEhleFByZWZpeCh0aGlzLnR4LnNlcmlhbGl6ZSgpLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0eEpzb25Ub0NlbG9UeCh0eEpzb246IExlZ2FjeVR4RGF0YSwgc2lnbmVyOiBzdHJpbmcpOiBDZWxvVHgge1xuICAgIC8vIHRoZSBjZWxvIGxpYnJhcnkgcmVxdWlyZXMgeW91IHRvIHNwZWNpZnkgdGhlIHNpZ25lciBhZGRyZXNzIHdpdGggdGhlIGZyb20gZmllbGRcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdHhKc29uLCB7XG4gICAgICBjaGFpbklkOiB0eEpzb24uY2hhaW5JZCA9PT0gdW5kZWZpbmVkID8gMCA6IHBhcnNlSW50KHR4SnNvbi5jaGFpbklkLCAxMCksXG4gICAgICBnYXM6IHR4SnNvbi5nYXNMaW1pdCxcbiAgICAgIGZyb206IHNpZ25lcixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGVuY29kZWRUeFRvSnNvbihlbmNvZGVkVHg6IEVuY29kZWRUcmFuc2FjdGlvbik6IExlZ2FjeVR4RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVuY29kZWRUeC50eCxcbiAgICAgIF90eXBlOiBFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZLFxuICAgICAgbm9uY2U6IHBhcnNlSW50KGVuY29kZWRUeC50eC5ub25jZSwgMTYpLFxuICAgICAgZ2FzTGltaXQ6IGVuY29kZWRUeC50eC5nYXMsXG4gICAgICBkYXRhOiBlbmNvZGVkVHgucmF3LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyxxREFBaUQ7QUFDakQscURBVXlCO0FBRXpCLDJEQUE2RztBQUU3RyxNQUFhLGVBQWU7SUFrQjFCLDBEQUEwRDtJQUMxRDs7Ozs7T0FLRztJQUNLLGlCQUFpQixDQUFDLFdBQVc7UUFDbkMsSUFBSSxXQUFXLEtBQUssS0FBSyxJQUFJLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxZQUFZLEVBQWdCO1FBN0JwQixpQkFBWSxHQUFXLElBQUEsMEJBQVEsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN0Qyx5QkFBb0IsR0FBVyxJQUFBLDBCQUFRLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQVcsR0FBVyxJQUFBLDBCQUFRLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFNN0MsT0FBRSxHQUFXLElBQUEsMEJBQVEsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixNQUFDLEdBQVcsSUFBQSwwQkFBUSxFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQUMsR0FBVyxJQUFBLDBCQUFRLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBQyxHQUFXLElBQUEsMEJBQVEsRUFBQyxFQUFFLENBQUMsQ0FBQztRQW1CdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLDZCQUFXLEVBQUMsSUFBQSwwQkFBUSxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBQSwwQkFBUSxFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMEJBQVEsRUFBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFBLDBCQUFRLEVBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBQSwwQkFBUSxFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBQSwwQkFBUSxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUEsMEJBQVEsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFBLDBCQUFRLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBQSwwQkFBUSxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLElB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O1lBQ3BCLElBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBNkI7UUFDMUQsT0FBTztZQUNMLEdBQUcsU0FBUyxDQUFDLEVBQUU7WUFDZixLQUFLLEVBQUUsaUNBQWtCLENBQUMsTUFBTTtZQUNoQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHO1lBQzFCLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRztTQUNwQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbkhELGtEQW1IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IExvY2FsV2FsbGV0IH0gZnJvbSAnQGNlbG8vd2FsbGV0LWxvY2FsJztcbmltcG9ydCB7XG4gIGFkZEhleFByZWZpeCxcbiAgdG9CdWZmZXIsXG4gIGJ1ZmZlclRvSGV4LFxuICBidWZmZXJUb0ludCxcbiAgcmxwLFxuICBybHBoYXNoLFxuICBlY3JlY292ZXIsXG4gIHB1YmxpY1RvQWRkcmVzcyxcbiAgdW5wYWRCdWZmZXIsXG59IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgeyBDZWxvVHgsIEVuY29kZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BjZWxvL2Nvbm5lY3QnO1xuaW1wb3J0IHsgRXRoTGlrZVRyYW5zYWN0aW9uRGF0YSwgRVRIVHJhbnNhY3Rpb25UeXBlLCBLZXlQYWlyLCBMZWdhY3lUeERhdGEgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29pbi1ldGgnO1xuXG5leHBvcnQgY2xhc3MgQ2Vsb1RyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSByYXc6IEJ1ZmZlcltdO1xuICBwcml2YXRlIF9mcm9tOiBCdWZmZXI7XG4gIHByaXZhdGUgX3NlbmRlclB1YktleT87XG4gIHByaXZhdGUgX3NpZ25hdHVyZXM6IEJ1ZmZlcltdO1xuICBwcml2YXRlIF9mZWVDdXJyZW5jeTogQnVmZmVyID0gdG9CdWZmZXIoJzB4Jyk7XG4gIHByaXZhdGUgX2dhdGV3YXlGZWVSZWNpcGllbnQ6IEJ1ZmZlciA9IHRvQnVmZmVyKCcweCcpO1xuICBwcml2YXRlIF9nYXRld2F5RmVlOiBCdWZmZXIgPSB0b0J1ZmZlcignMHgnKTtcbiAgbm9uY2U6IEJ1ZmZlcjtcbiAgZ2FzTGltaXQ6IEJ1ZmZlcjtcbiAgZ2FzUHJpY2U6IEJ1ZmZlcjtcbiAgZGF0YTogQnVmZmVyO1xuICB2YWx1ZTogQnVmZmVyO1xuICB0bzogQnVmZmVyID0gdG9CdWZmZXIoW10pO1xuICB2OiBCdWZmZXIgPSB0b0J1ZmZlcihbXSk7XG4gIHI6IEJ1ZmZlciA9IHRvQnVmZmVyKFtdKTtcbiAgczogQnVmZmVyID0gdG9CdWZmZXIoW10pO1xuXG4gIC8vIFRPRE86IHZhbGlkYXRlIGlmIHRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gVXRpbHMgY2xhc3NcbiAgLyoqXG4gICAqIENsZWFuIGhleCBmb3JtYXR0ZWQgdmFsdWVzIGVuc3VyaW5nIHRoZXkgaGF2ZSBhbiBldmVuIGxlbmd0aFxuICAgKlxuICAgKiBAcGFyYW0gbnVtYmVyVmFsdWUgSGV4IGZvcm1hdHRlZCBudW1iZXIgdmFsdWUuIEV4YW1wbGUgJzB4MDEnXG4gICAqIEByZXR1cm5zIHNhbml0aXplZCB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzYW5pdGl6ZUhleFN0cmluZyhudW1iZXJWYWx1ZSkge1xuICAgIGlmIChudW1iZXJWYWx1ZSA9PT0gJzB4MCcgfHwgbnVtYmVyVmFsdWUgPT0gJycpIHtcbiAgICAgIHJldHVybiAnMHgnO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyVmFsdWUubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bWJlclZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gJzB4MCcgKyBudW1iZXJWYWx1ZS5zbGljZSgyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHR4OiBMZWdhY3lUeERhdGEpIHtcbiAgICB0aGlzLm5vbmNlID0gdW5wYWRCdWZmZXIodG9CdWZmZXIodHgubm9uY2UpKTtcbiAgICB0aGlzLmdhc0xpbWl0ID0gdG9CdWZmZXIodGhpcy5zYW5pdGl6ZUhleFN0cmluZyh0eC5nYXNMaW1pdCkpO1xuICAgIHRoaXMuZ2FzUHJpY2UgPSB0b0J1ZmZlcih0aGlzLnNhbml0aXplSGV4U3RyaW5nKHR4Lmdhc1ByaWNlKSk7XG4gICAgdGhpcy5kYXRhID0gdG9CdWZmZXIodGhpcy5zYW5pdGl6ZUhleFN0cmluZyh0eC5kYXRhKSk7XG4gICAgdGhpcy52YWx1ZSA9IHRvQnVmZmVyKHRoaXMuc2FuaXRpemVIZXhTdHJpbmcodHgudmFsdWUpKTtcbiAgICBpZiAodHgudG8pIHtcbiAgICAgIHRoaXMudG8gPSB0b0J1ZmZlcih0eC50byk7XG4gICAgfVxuICAgIGlmICh0eC52KSB7XG4gICAgICB0aGlzLnYgPSB0b0J1ZmZlcih0eC52KTtcbiAgICB9XG4gICAgaWYgKHR4LnIpIHtcbiAgICAgIHRoaXMuciA9IHRvQnVmZmVyKHR4LnIpO1xuICAgIH1cbiAgICBpZiAodHgucykge1xuICAgICAgdGhpcy5zID0gdG9CdWZmZXIodHgucyk7XG4gICAgfVxuICAgIGlmICh0eC5mcm9tKSB7XG4gICAgICB0aGlzLl9mcm9tID0gdG9CdWZmZXIodHguZnJvbSk7XG4gICAgfVxuICAgIHRoaXMuaW5pdFJhdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UmF3KCkge1xuICAgIHRoaXMucmF3ID0gW1xuICAgICAgdGhpcy5ub25jZSxcbiAgICAgIHRoaXMuZ2FzUHJpY2UsXG4gICAgICB0aGlzLmdhc0xpbWl0LFxuICAgICAgdGhpcy5fZmVlQ3VycmVuY3ksXG4gICAgICB0aGlzLl9nYXRld2F5RmVlUmVjaXBpZW50LFxuICAgICAgdGhpcy5fZ2F0ZXdheUZlZSxcbiAgICAgIHRoaXMudG8sXG4gICAgICB0aGlzLnZhbHVlLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgdGhpcy52LFxuICAgICAgdGhpcy5yLFxuICAgICAgdGhpcy5zLFxuICAgIF07XG4gIH1cblxuICBoYXNoKGluY2x1ZGVTaWduYXR1cmU/OiBib29sZWFuKTogQnVmZmVyIHtcbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKGluY2x1ZGVTaWduYXR1cmUpIHtcbiAgICAgIGl0ZW1zID0gdGhpcy5yYXc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gdGhpcy5yYXdcbiAgICAgICAgLnNsaWNlKDAsIDkpXG4gICAgICAgIC5jb25jYXQoW3RvQnVmZmVyKHRoaXMuZ2V0Q2hhaW5JZCgpKSwgdW5wYWRCdWZmZXIodG9CdWZmZXIoMCkpLCB1bnBhZEJ1ZmZlcih0b0J1ZmZlcigwKSldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJscGhhc2goaXRlbXMpO1xuICB9XG5cbiAgZ2V0U2VuZGVyQWRkcmVzcygpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLl9mcm9tKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZnJvbTtcbiAgICB9XG4gICAgY29uc3QgcHViS2V5ID0gdGhpcy5nZXRTZW5kZXJQdWJsaWNLZXkoKTtcbiAgICB0aGlzLl9mcm9tID0gcHVibGljVG9BZGRyZXNzKHB1YktleSk7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb207XG4gIH1cblxuICBnZXRTZW5kZXJQdWJsaWNLZXkoKSB7XG4gICAgaWYgKHRoaXMudmVyaWZ5U2lnbmF0dXJlKCkpIHtcbiAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgd2FzIHZlcmlmaWVkIHN1Y2Nlc3NmdWxseSB0aGUgX3NlbmRlclB1YktleSBmaWVsZCBpcyBkZWZpbmVkXG4gICAgICByZXR1cm4gdGhpcy5fc2VuZGVyUHViS2V5O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU2lnbmF0dXJlJyk7XG4gIH1cblxuICBzZXJpYWxpemUoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gcmxwLmVuY29kZSh0aGlzLnJhdyk7XG4gIH1cblxuICBzaWduKHByaXZhdGVLZXk6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdGhpcy52LCB0aGlzLnIsIHRoaXMucywgcHJpdmF0ZUtleV07XG4gIH1cblxuICB2ZXJpZnlTaWduYXR1cmUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbXNnSGFzaCA9IHRoaXMuaGFzaChmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNoYWluSWQgPSB0aGlzLmdldENoYWluSWQoKTtcbiAgICAgIGNvbnN0IHYgPSBidWZmZXJUb0ludCh0aGlzLnYpIC0gKDIgKiBjaGFpbklkICsgMzUpO1xuICAgICAgdGhpcy5fc2VuZGVyUHViS2V5ID0gZWNyZWNvdmVyKG1zZ0hhc2gsIHYgKyAyNywgdGhpcy5yLCB0aGlzLnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhdGhpcy5fc2VuZGVyUHViS2V5O1xuICB9XG5cbiAgZ2V0Q2hhaW5JZCgpOiBudW1iZXIge1xuICAgIGxldCBjaGFpbklkID0gYnVmZmVyVG9JbnQodGhpcy52KTtcbiAgICBpZiAodGhpcy5yLmxlbmd0aCAmJiB0aGlzLnMubGVuZ3RoKSB7XG4gICAgICBjaGFpbklkID0gKGNoYWluSWQgLSAzNSkgPj4gMTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYWluSWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENlbG9UcmFuc2FjdGlvbkRhdGEgaW1wbGVtZW50cyBFdGhMaWtlVHJhbnNhY3Rpb25EYXRhIHtcbiAgcHJpdmF0ZSB0eDogQ2Vsb1RyYW5zYWN0aW9uO1xuICBwcml2YXRlIGRlcGxveWVkQWRkcmVzcz86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih0eDogQ2Vsb1RyYW5zYWN0aW9uLCBkZXBsb3llZEFkZHJlc3M/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy5kZXBsb3llZEFkZHJlc3MgPSBkZXBsb3llZEFkZHJlc3M7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKHR4OiBMZWdhY3lUeERhdGEpOiBDZWxvVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBjb25zdCBjaGFpbklkID0gYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIoTnVtYmVyKHR4LmNoYWluSWQpKS50b1N0cmluZygxNikpO1xuICAgIHJldHVybiBuZXcgQ2Vsb1RyYW5zYWN0aW9uRGF0YShcbiAgICAgIG5ldyBDZWxvVHJhbnNhY3Rpb24oe1xuICAgICAgICBfdHlwZTogRVRIVHJhbnNhY3Rpb25UeXBlLkxFR0FDWSxcbiAgICAgICAgbm9uY2U6IHR4Lm5vbmNlLFxuICAgICAgICB0bzogdHgudG8sXG4gICAgICAgIGdhc1ByaWNlOiBhZGRIZXhQcmVmaXgobmV3IEJpZ051bWJlcih0eC5nYXNQcmljZSkudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgZ2FzTGltaXQ6IGFkZEhleFByZWZpeChuZXcgQmlnTnVtYmVyKHR4Lmdhc0xpbWl0KS50b1N0cmluZygxNikpLFxuICAgICAgICB2YWx1ZTogYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIodHgudmFsdWUpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIGRhdGE6IHR4LmRhdGEgPT09ICcweCcgPyAnJyA6IHR4LmRhdGEsXG4gICAgICAgIGZyb206IHR4LmZyb20sXG4gICAgICAgIHM6IHR4LnMsXG4gICAgICAgIHI6IHR4LnIsXG4gICAgICAgIHY6IHR4LnYgfHwgY2hhaW5JZCxcbiAgICAgIH0pLFxuICAgICAgdHguZGVwbG95ZWRBZGRyZXNzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcikge1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBhZGRIZXhQcmVmaXgoa2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZyk7XG4gICAgY29uc3QgZGF0YSA9IENlbG9UcmFuc2FjdGlvbkRhdGEudHhKc29uVG9DZWxvVHgodGhpcy50b0pzb24oKSwga2V5UGFpci5nZXRBZGRyZXNzKCkpO1xuICAgIGNvbnN0IGNlbG9Mb2NhbFdhbGxldCA9IG5ldyBMb2NhbFdhbGxldCgpO1xuICAgIGNlbG9Mb2NhbFdhbGxldC5hZGRBY2NvdW50KHByaXZhdGVLZXkpO1xuICAgIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gYXdhaXQgY2Vsb0xvY2FsV2FsbGV0LnNpZ25UcmFuc2FjdGlvbihkYXRhKTtcblxuICAgIGNvbnN0IG5vbmNlQmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcihyYXdUcmFuc2FjdGlvbi50eC5ub25jZSk7XG4gICAgcmF3VHJhbnNhY3Rpb24udHgubm9uY2UgPSBhZGRIZXhQcmVmaXgobm9uY2VCaWdOdW1iZXIudG9TdHJpbmcoMTYpKTtcbiAgICByYXdUcmFuc2FjdGlvbi5yYXcgPSBkYXRhLmRhdGEgPT09IHVuZGVmaW5lZCA/ICcnIDogZGF0YS5kYXRhO1xuICAgIHJhd1RyYW5zYWN0aW9uLnR4LmdhcyA9IHJhd1RyYW5zYWN0aW9uLnR4LmdhcztcbiAgICB0aGlzLnR4ID0gbmV3IENlbG9UcmFuc2FjdGlvbihDZWxvVHJhbnNhY3Rpb25EYXRhLmVuY29kZWRUeFRvSnNvbihyYXdUcmFuc2FjdGlvbikpO1xuICAgIHRoaXMudHguc2lnbih0b0J1ZmZlcihwcml2YXRlS2V5KSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IExlZ2FjeVR4RGF0YSB7XG4gICAgY29uc3QgcmVzdWx0OiBMZWdhY3lUeERhdGEgPSB7XG4gICAgICBfdHlwZTogRVRIVHJhbnNhY3Rpb25UeXBlLkxFR0FDWSxcbiAgICAgIG5vbmNlOiBidWZmZXJUb0ludCh0aGlzLnR4Lm5vbmNlKSxcbiAgICAgIGdhc1ByaWNlOiBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHRoaXMudHguZ2FzUHJpY2UpLCAxNikudG9TdHJpbmcoMTApLFxuICAgICAgZ2FzTGltaXQ6IG5ldyBCaWdOdW1iZXIoYnVmZmVyVG9IZXgodGhpcy50eC5nYXNMaW1pdCksIDE2KS50b1N0cmluZygxMCksXG4gICAgICB2YWx1ZTogdGhpcy50eC52YWx1ZS5sZW5ndGggPT09IDAgPyAnMCcgOiBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHRoaXMudHgudmFsdWUpLCAxNikudG9TdHJpbmcoMTApLFxuICAgICAgZGF0YTogYnVmZmVyVG9IZXgodGhpcy50eC5kYXRhKSxcbiAgICAgIGlkOiBhZGRIZXhQcmVmaXgoYnVmZmVyVG9IZXgodGhpcy50eC5oYXNoKHRydWUpKSksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnR4LnRvICYmIHRoaXMudHgudG8ubGVuZ3RoKSB7XG4gICAgICByZXN1bHQudG8gPSBidWZmZXJUb0hleCh0aGlzLnR4LnRvKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eC52ZXJpZnlTaWduYXR1cmUoKSkge1xuICAgICAgcmVzdWx0LmZyb20gPSBidWZmZXJUb0hleCh0aGlzLnR4LmdldFNlbmRlckFkZHJlc3MoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhaW5JZCA9IHRoaXMudHguZ2V0Q2hhaW5JZCgpO1xuICAgIGlmIChjaGFpbklkKSB7XG4gICAgICByZXN1bHQuY2hhaW5JZCA9IGNoYWluSWQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXBsb3llZEFkZHJlc3MpIHtcbiAgICAgIHJlc3VsdC5kZXBsb3llZEFkZHJlc3MgPSB0aGlzLmRlcGxveWVkQWRkcmVzcztcbiAgICB9XG5cbiAgICB0aGlzLnNldFNpZ25hdHVyZUZpZWxkcyhyZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2lnbmF0dXJlRmllbGRzKHJlc3VsdDogTGVnYWN5VHhEYXRhKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHgudiAmJiB0aGlzLnR4LnYubGVuZ3RoKSB7XG4gICAgICByZXN1bHQudiA9IGJ1ZmZlclRvSGV4KHRoaXMudHgudik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHguciAmJiB0aGlzLnR4LnIubGVuZ3RoKSB7XG4gICAgICByZXN1bHQuciA9IGJ1ZmZlclRvSGV4KHRoaXMudHgucik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHgucyAmJiB0aGlzLnR4LnMubGVuZ3RoKSB7XG4gICAgICByZXN1bHQucyA9IGJ1ZmZlclRvSGV4KHRoaXMudHgucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvU2VyaWFsaXplZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBhZGRIZXhQcmVmaXgodGhpcy50eC5zZXJpYWxpemUoKS50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdHhKc29uVG9DZWxvVHgodHhKc29uOiBMZWdhY3lUeERhdGEsIHNpZ25lcjogc3RyaW5nKTogQ2Vsb1R4IHtcbiAgICAvLyB0aGUgY2VsbyBsaWJyYXJ5IHJlcXVpcmVzIHlvdSB0byBzcGVjaWZ5IHRoZSBzaWduZXIgYWRkcmVzcyB3aXRoIHRoZSBmcm9tIGZpZWxkXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHR4SnNvbiwge1xuICAgICAgY2hhaW5JZDogdHhKc29uLmNoYWluSWQgPT09IHVuZGVmaW5lZCA/IDAgOiBwYXJzZUludCh0eEpzb24uY2hhaW5JZCwgMTApLFxuICAgICAgZ2FzOiB0eEpzb24uZ2FzTGltaXQsXG4gICAgICBmcm9tOiBzaWduZXIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBlbmNvZGVkVHhUb0pzb24oZW5jb2RlZFR4OiBFbmNvZGVkVHJhbnNhY3Rpb24pOiBMZWdhY3lUeERhdGEge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5lbmNvZGVkVHgudHgsXG4gICAgICBfdHlwZTogRVRIVHJhbnNhY3Rpb25UeXBlLkxFR0FDWSxcbiAgICAgIG5vbmNlOiBwYXJzZUludChlbmNvZGVkVHgudHgubm9uY2UsIDE2KSxcbiAgICAgIGdhc0xpbWl0OiBlbmNvZGVkVHgudHguZ2FzLFxuICAgICAgZGF0YTogZW5jb2RlZFR4LnJhdyxcbiAgICB9O1xuICB9XG59XG4iXX0=