@bitgo-beta/sdk-coin-ada 2.3.14-beta.1221 → 2.3.14-beta.1223

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/package.json +6 -6
  2. package/dist/src/ada.d.ts +0 -116
  3. package/dist/src/ada.d.ts.map +0 -1
  4. package/dist/src/ada.js +0 -556
  5. package/dist/src/adaToken.d.ts +0 -31
  6. package/dist/src/adaToken.d.ts.map +0 -1
  7. package/dist/src/adaToken.js +0 -72
  8. package/dist/src/index.d.ts +0 -6
  9. package/dist/src/index.d.ts.map +0 -1
  10. package/dist/src/index.js +0 -22
  11. package/dist/src/lib/index.d.ts +0 -15
  12. package/dist/src/lib/index.d.ts.map +0 -1
  13. package/dist/src/lib/index.js +0 -65
  14. package/dist/src/lib/keyPair.d.ts +0 -20
  15. package/dist/src/lib/keyPair.d.ts.map +0 -1
  16. package/dist/src/lib/keyPair.js +0 -91
  17. package/dist/src/lib/messages/cip8/cip8Message.d.ts +0 -25
  18. package/dist/src/lib/messages/cip8/cip8Message.d.ts.map +0 -1
  19. package/dist/src/lib/messages/cip8/cip8Message.js +0 -140
  20. package/dist/src/lib/messages/cip8/cip8MessageBuilder.d.ts +0 -19
  21. package/dist/src/lib/messages/cip8/cip8MessageBuilder.d.ts.map +0 -1
  22. package/dist/src/lib/messages/cip8/cip8MessageBuilder.js +0 -27
  23. package/dist/src/lib/messages/cip8/index.d.ts +0 -3
  24. package/dist/src/lib/messages/cip8/index.d.ts.map +0 -1
  25. package/dist/src/lib/messages/cip8/index.js +0 -19
  26. package/dist/src/lib/messages/cip8/utils.d.ts +0 -24
  27. package/dist/src/lib/messages/cip8/utils.d.ts.map +0 -1
  28. package/dist/src/lib/messages/cip8/utils.js +0 -73
  29. package/dist/src/lib/messages/index.d.ts +0 -3
  30. package/dist/src/lib/messages/index.d.ts.map +0 -1
  31. package/dist/src/lib/messages/index.js +0 -19
  32. package/dist/src/lib/messages/messageBuilderFactory.d.ts +0 -7
  33. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +0 -1
  34. package/dist/src/lib/messages/messageBuilderFactory.js +0 -20
  35. package/dist/src/lib/stakingActivateBuilder.d.ts +0 -24
  36. package/dist/src/lib/stakingActivateBuilder.d.ts.map +0 -1
  37. package/dist/src/lib/stakingActivateBuilder.js +0 -88
  38. package/dist/src/lib/stakingBaseClaimBuilder.d.ts +0 -20
  39. package/dist/src/lib/stakingBaseClaimBuilder.d.ts.map +0 -1
  40. package/dist/src/lib/stakingBaseClaimBuilder.js +0 -35
  41. package/dist/src/lib/stakingClaimRewardsBuilder.d.ts +0 -10
  42. package/dist/src/lib/stakingClaimRewardsBuilder.d.ts.map +0 -1
  43. package/dist/src/lib/stakingClaimRewardsBuilder.js +0 -22
  44. package/dist/src/lib/stakingDeactivateBuilder.d.ts +0 -22
  45. package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +0 -1
  46. package/dist/src/lib/stakingDeactivateBuilder.js +0 -75
  47. package/dist/src/lib/stakingPledgeBuilder.d.ts +0 -23
  48. package/dist/src/lib/stakingPledgeBuilder.d.ts.map +0 -1
  49. package/dist/src/lib/stakingPledgeBuilder.js +0 -43
  50. package/dist/src/lib/stakingWithdrawBuilder.d.ts +0 -12
  51. package/dist/src/lib/stakingWithdrawBuilder.d.ts.map +0 -1
  52. package/dist/src/lib/stakingWithdrawBuilder.js +0 -22
  53. package/dist/src/lib/transaction.d.ts +0 -134
  54. package/dist/src/lib/transaction.d.ts.map +0 -1
  55. package/dist/src/lib/transaction.js +0 -371
  56. package/dist/src/lib/transactionBuilder.d.ts +0 -137
  57. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  58. package/dist/src/lib/transactionBuilder.js +0 -698
  59. package/dist/src/lib/transactionBuilderFactory.d.ts +0 -36
  60. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  61. package/dist/src/lib/transactionBuilderFactory.js +0 -92
  62. package/dist/src/lib/transferBuilder.d.ts +0 -14
  63. package/dist/src/lib/transferBuilder.d.ts.map +0 -1
  64. package/dist/src/lib/transferBuilder.js +0 -27
  65. package/dist/src/lib/utils.d.ts +0 -52
  66. package/dist/src/lib/utils.d.ts.map +0 -1
  67. package/dist/src/lib/utils.js +0 -277
  68. package/dist/src/lib/voteDelegationBuilder.d.ts +0 -24
  69. package/dist/src/lib/voteDelegationBuilder.d.ts.map +0 -1
  70. package/dist/src/lib/voteDelegationBuilder.js +0 -84
  71. package/dist/src/lib/walletInitializationBuilder.d.ts +0 -14
  72. package/dist/src/lib/walletInitializationBuilder.d.ts.map +0 -1
  73. package/dist/src/lib/walletInitializationBuilder.js +0 -24
  74. package/dist/src/register.d.ts +0 -3
  75. package/dist/src/register.d.ts.map +0 -1
  76. package/dist/src/register.js +0 -13
  77. package/dist/src/tada.d.ts +0 -21
  78. package/dist/src/tada.d.ts.map +0 -1
  79. package/dist/src/tada.js +0 -26
@@ -1,12 +0,0 @@
1
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
- import { Transaction } from './transaction';
3
- import { StakingBaseClaimBuilder } from './stakingBaseClaimBuilder';
4
- /**
5
- * Transaction builder for withdrawing unstaked ADAs.
6
- */
7
- export declare class StakingWithdrawBuilder extends StakingBaseClaimBuilder {
8
- constructor(_coinConfig: Readonly<CoinConfig>);
9
- /** @inheritdoc */
10
- protected buildImplementation(): Promise<Transaction>;
11
- }
12
- //# sourceMappingURL=stakingWithdrawBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stakingWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/stakingWithdrawBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,uBAAuB;gBACrD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CAK5D"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StakingWithdrawBuilder = void 0;
4
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
- const stakingBaseClaimBuilder_1 = require("./stakingBaseClaimBuilder");
6
- /**
7
- * Transaction builder for withdrawing unstaked ADAs.
8
- */
9
- class StakingWithdrawBuilder extends stakingBaseClaimBuilder_1.StakingBaseClaimBuilder {
10
- constructor(_coinConfig) {
11
- super(_coinConfig);
12
- this._type = sdk_core_1.TransactionType.StakingWithdraw;
13
- }
14
- /** @inheritdoc */
15
- async buildImplementation() {
16
- const tx = await super.buildImplementation();
17
- tx.setTransactionType(sdk_core_1.TransactionType.StakingWithdraw);
18
- return tx;
19
- }
20
- }
21
- exports.StakingWithdrawBuilder = StakingWithdrawBuilder;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dpdGhkcmF3QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc3Rha2luZ1dpdGhkcmF3QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBdUQ7QUFHdkQsdUVBQW9FO0FBRXBFOztHQUVHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxpREFBdUI7SUFDakUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQywwQkFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBWkQsd0RBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3Rha2luZ0Jhc2VDbGFpbUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdCYXNlQ2xhaW1CdWlsZGVyJztcblxuLyoqXG4gKiBUcmFuc2FjdGlvbiBidWlsZGVyIGZvciB3aXRoZHJhd2luZyB1bnN0YWtlZCBBREFzLlxuICovXG5leHBvcnQgY2xhc3MgU3Rha2luZ1dpdGhkcmF3QnVpbGRlciBleHRlbmRzIFN0YWtpbmdCYXNlQ2xhaW1CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgICB0eC5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyk7XG4gICAgcmV0dXJuIHR4O1xuICB9XG59XG4iXX0=
@@ -1,134 +0,0 @@
1
- import { BaseKey, BaseTransaction, TransactionType } from '@bitgo-beta/sdk-core';
2
- import * as CardanoWasm from '@emurgo/cardano-serialization-lib-nodejs';
3
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
4
- export interface TransactionInput {
5
- transaction_id: string;
6
- transaction_index: number;
7
- }
8
- export interface Asset {
9
- policy_id: string;
10
- asset_name: string;
11
- quantity: string;
12
- fingerprint?: string;
13
- }
14
- export interface TransactionOutput {
15
- address: string;
16
- amount: string;
17
- multiAssets?: CardanoWasm.MultiAsset | Asset;
18
- }
19
- export interface Witness {
20
- publicKey: string;
21
- signature: string;
22
- }
23
- export declare enum CertType {
24
- StakeKeyRegistration = 0,
25
- StakeKeyDelegation = 1,
26
- StakeKeyDeregistration = 2,
27
- StakePoolRegistration = 3,
28
- VoteDelegation = 4
29
- }
30
- export interface Cert {
31
- type: CertType;
32
- stakeCredentialHash?: string;
33
- poolKeyHash?: string;
34
- dRepId?: string;
35
- }
36
- export interface Withdrawal {
37
- stakeAddress: string;
38
- value: string;
39
- }
40
- export type StakeKeyRegistrationCert = Cert;
41
- export type StakeKeyDelegationCert = Cert;
42
- export interface StakePoolRegistrationCert extends Cert {
43
- vrfKeyHash: string;
44
- pledge: string;
45
- cost: string;
46
- marginNumerator: string;
47
- marginDenominator: string;
48
- rewardAccount: string;
49
- poolOwners: string[];
50
- }
51
- export interface PledgeDetails {
52
- stakeKeyRegistration?: StakeKeyRegistrationCert;
53
- stakeKeyDelegation?: StakeKeyDelegationCert;
54
- stakePoolRegistration: StakePoolRegistrationCert;
55
- }
56
- /**
57
- * The transaction data returned from the toJson() function of a transaction
58
- */
59
- export interface TxData {
60
- id: string;
61
- type: TransactionType;
62
- inputs: TransactionInput[];
63
- outputs: TransactionOutput[];
64
- witnesses: Witness[];
65
- certs: Cert[];
66
- withdrawals: Withdrawal[];
67
- pledgeDetails?: PledgeDetails;
68
- }
69
- export declare class Transaction extends BaseTransaction {
70
- private _transaction;
71
- private _fee;
72
- private _pledgeDetails?;
73
- constructor(coinConfig: Readonly<CoinConfig>);
74
- get transaction(): CardanoWasm.Transaction;
75
- set transaction(tx: CardanoWasm.Transaction);
76
- /** @inheritdoc */
77
- canSign(key: BaseKey): boolean;
78
- toBroadcastFormat(): string;
79
- /** @inheritdoc */
80
- toJson(): TxData;
81
- /**
82
- * Build input and output field for this transaction
83
- *
84
- */
85
- loadInputsAndOutputs(): void;
86
- /** @inheritdoc */
87
- get signablePayload(): Buffer;
88
- /**
89
- * Sets this transaction payload
90
- *
91
- * @param rawTx
92
- */
93
- fromRawTransaction(rawTx: string): void;
94
- private loadStakeKeyRegistration;
95
- private loadStakeKeyDelegation;
96
- private loadStakePoolRegistration;
97
- /**
98
- * Set the transaction type.
99
- *
100
- * @param {TransactionType} transactionType The transaction type to be set.
101
- */
102
- setTransactionType(transactionType: TransactionType): void;
103
- /** @inheritdoc */
104
- explainTransaction(): {
105
- outputs: {
106
- amount: string;
107
- address: string;
108
- }[];
109
- certificates: Cert[];
110
- changeOutputs: string[];
111
- outputAmount: string;
112
- fee: {
113
- fee: string;
114
- };
115
- displayOrder: string[];
116
- id: string;
117
- changeAmount: string;
118
- type: string;
119
- withdrawals: Withdrawal[];
120
- pledgeDetails?: PledgeDetails;
121
- };
122
- getPledgeDetails(): PledgeDetails | undefined;
123
- /**
124
- * Get transaction fee
125
- */
126
- get getFee(): string;
127
- /**
128
- * Set transaction fee
129
- *
130
- * @param fee
131
- */
132
- fee(fee: string): void;
133
- }
134
- //# sourceMappingURL=transaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
@@ -1,371 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Transaction = exports.CertType = void 0;
40
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
- const CardanoWasm = __importStar(require("@emurgo/cardano-serialization-lib-nodejs"));
42
- const keyPair_1 = require("./keyPair");
43
- const utils_1 = __importDefault(require("./utils"));
44
- var CertType;
45
- (function (CertType) {
46
- CertType[CertType["StakeKeyRegistration"] = 0] = "StakeKeyRegistration";
47
- CertType[CertType["StakeKeyDelegation"] = 1] = "StakeKeyDelegation";
48
- CertType[CertType["StakeKeyDeregistration"] = 2] = "StakeKeyDeregistration";
49
- CertType[CertType["StakePoolRegistration"] = 3] = "StakePoolRegistration";
50
- CertType[CertType["VoteDelegation"] = 4] = "VoteDelegation";
51
- })(CertType || (exports.CertType = CertType = {}));
52
- class Transaction extends sdk_core_1.BaseTransaction {
53
- constructor(coinConfig) {
54
- super(coinConfig);
55
- }
56
- get transaction() {
57
- return this._transaction;
58
- }
59
- set transaction(tx) {
60
- this._transaction = tx;
61
- this._id = Buffer.from(CardanoWasm.hash_transaction(tx.body()).to_bytes()).toString('hex');
62
- }
63
- /** @inheritdoc */
64
- canSign(key) {
65
- try {
66
- new keyPair_1.KeyPair({ prv: key.key });
67
- return true;
68
- }
69
- catch {
70
- return false;
71
- }
72
- }
73
- toBroadcastFormat() {
74
- if (!this._transaction) {
75
- throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
76
- }
77
- return Buffer.from(this._transaction.to_bytes()).toString('hex');
78
- }
79
- /** @inheritdoc */
80
- toJson() {
81
- if (!this._transaction) {
82
- throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
83
- }
84
- const result = {
85
- id: this.id,
86
- type: this._type,
87
- inputs: [],
88
- outputs: [],
89
- witnesses: [],
90
- certs: [],
91
- withdrawals: [],
92
- };
93
- for (let i = 0; i < this._transaction.body().inputs().len(); i++) {
94
- const input = this._transaction.body().inputs().get(i);
95
- result.inputs.push({
96
- transaction_id: Buffer.from(input.transaction_id().to_bytes()).toString('hex'),
97
- transaction_index: input.index(),
98
- });
99
- }
100
- for (let i = 0; i < this._transaction.body().outputs().len(); i++) {
101
- const output = this._transaction.body().outputs().get(i);
102
- result.outputs.push({
103
- address: utils_1.default.getAddressString(output.address()),
104
- amount: output.amount().coin().to_str(),
105
- multiAssets: output.amount().multiasset() || undefined,
106
- });
107
- }
108
- if (this._transaction.body().certs()) {
109
- for (let i = 0; i < this._transaction.body().certs().len(); i++) {
110
- const cert = this._transaction.body().certs().get(i);
111
- if (cert.as_stake_registration() !== undefined) {
112
- const stakeRegistration = cert.as_stake_registration();
113
- result.certs.push({
114
- type: CertType.StakeKeyRegistration,
115
- stakeCredentialHash: Buffer.from(stakeRegistration.stake_credential().to_bytes()).toString('hex'),
116
- });
117
- }
118
- if (cert.as_stake_deregistration() !== undefined) {
119
- const stakeDeregistration = cert.as_stake_deregistration();
120
- result.certs.push({
121
- type: CertType.StakeKeyDeregistration,
122
- stakeCredentialHash: Buffer.from(stakeDeregistration.stake_credential().to_bytes()).toString('hex'),
123
- });
124
- }
125
- if (cert.as_stake_delegation() !== undefined) {
126
- const stakeDelegation = cert.as_stake_delegation();
127
- result.certs.push({
128
- type: CertType.StakeKeyDelegation,
129
- stakeCredentialHash: Buffer.from(stakeDelegation.stake_credential().to_bytes()).toString('hex'),
130
- poolKeyHash: Buffer.from(stakeDelegation.pool_keyhash().to_bytes()).toString('hex'),
131
- });
132
- }
133
- if (cert.as_pool_registration() !== undefined) {
134
- const stakePoolRegistration = cert.as_pool_registration();
135
- result.certs.push({
136
- type: CertType.StakePoolRegistration,
137
- poolKeyHash: Buffer.from(stakePoolRegistration.pool_params().operator().to_bytes()).toString('hex'),
138
- });
139
- }
140
- if (cert.as_vote_delegation() !== undefined) {
141
- const voteDelegation = cert.as_vote_delegation();
142
- result.certs.push({
143
- type: CertType.VoteDelegation,
144
- stakeCredentialHash: Buffer.from(voteDelegation.stake_credential().to_bytes()).toString('hex'),
145
- dRepId: utils_1.default.getDRepIdFromDRep(voteDelegation.drep()),
146
- });
147
- }
148
- }
149
- }
150
- result.pledgeDetails = this._pledgeDetails;
151
- if (this._transaction.body().withdrawals()) {
152
- const withdrawals = this._transaction.body().withdrawals();
153
- const keys = withdrawals.keys();
154
- for (let i = 0; i < keys.len(); i++) {
155
- const rewardAddress = keys.get(i);
156
- const reward = withdrawals.get(rewardAddress);
157
- result.withdrawals.push({
158
- stakeAddress: rewardAddress.to_address().to_bytes().toString(),
159
- value: reward.to_str(),
160
- });
161
- }
162
- }
163
- if (this._transaction.witness_set().vkeys() !== undefined) {
164
- const vkeys = this._transaction.witness_set().vkeys();
165
- for (let i = 0; i < vkeys.len(); i++) {
166
- const vkey = this._transaction.witness_set().vkeys().get(i);
167
- result.witnesses.push({
168
- publicKey: vkey?.vkey().public_key().to_hex(),
169
- signature: vkey?.signature().to_hex(),
170
- });
171
- }
172
- }
173
- return result;
174
- }
175
- /**
176
- * Build input and output field for this transaction
177
- *
178
- */
179
- loadInputsAndOutputs() {
180
- const outputs = [];
181
- const inputs = [];
182
- const tx_outputs = this._transaction.body().outputs();
183
- for (let i = 0; i < tx_outputs.len(); i++) {
184
- const output = tx_outputs.get(i);
185
- outputs.push({
186
- address: utils_1.default.getAddressString(output.address()),
187
- value: output.amount().coin().to_str(),
188
- });
189
- }
190
- this._outputs = outputs;
191
- this._inputs = inputs;
192
- }
193
- /** @inheritdoc */
194
- get signablePayload() {
195
- return Buffer.from(CardanoWasm.hash_transaction(this._transaction.body()).to_bytes());
196
- }
197
- /**
198
- * Sets this transaction payload
199
- *
200
- * @param rawTx
201
- */
202
- fromRawTransaction(rawTx) {
203
- if (CardanoWasm.Transaction === undefined) {
204
- // a temp fix until we solve import problem in webpack
205
- throw new sdk_core_1.NodeEnvironmentError('unable to load cardano serialization library');
206
- }
207
- const HEX_REGEX = /^[0-9a-fA-F]+$/;
208
- const bufferRawTransaction = HEX_REGEX.test(rawTx) ? Buffer.from(rawTx, 'hex') : Buffer.from(rawTx, 'base64');
209
- try {
210
- const txn = CardanoWasm.Transaction.from_bytes(bufferRawTransaction);
211
- this._transaction = txn;
212
- this._id = Buffer.from(CardanoWasm.hash_transaction(txn.body()).to_bytes()).toString('hex');
213
- this._type = sdk_core_1.TransactionType.Send;
214
- if (this._transaction.body().certs()) {
215
- const certs = [];
216
- for (let i = 0; i < this._transaction.body().certs().len(); i++) {
217
- const cert = this._transaction.body().certs().get(i);
218
- certs.push(cert);
219
- }
220
- if (certs.some((c) => c.as_pool_registration() !== undefined)) {
221
- this._type = sdk_core_1.TransactionType.StakingPledge;
222
- const stakeKeyRegistration = certs.find((c) => c.as_stake_registration() !== undefined);
223
- const stakeKeyDelegation = certs.find((c) => c.as_stake_delegation() !== undefined);
224
- const stakePoolRegistration = certs.find((c) => c.as_pool_registration() !== undefined);
225
- this._pledgeDetails = {
226
- stakeKeyRegistration: this.loadStakeKeyRegistration(stakeKeyRegistration),
227
- stakeKeyDelegation: this.loadStakeKeyDelegation(stakeKeyDelegation),
228
- stakePoolRegistration: this.loadStakePoolRegistration(stakePoolRegistration),
229
- };
230
- }
231
- else if (certs.some((c) => c.as_stake_registration() !== undefined)) {
232
- this._type = sdk_core_1.TransactionType.StakingActivate;
233
- }
234
- else if (certs.some((c) => c.as_stake_deregistration() !== undefined)) {
235
- this._type = sdk_core_1.TransactionType.StakingDeactivate;
236
- }
237
- else if (certs.some((c) => c.as_vote_delegation() !== undefined)) {
238
- this._type = sdk_core_1.TransactionType.VoteDelegation;
239
- }
240
- }
241
- if (this._transaction.body().withdrawals()) {
242
- this._type = sdk_core_1.TransactionType.StakingWithdraw;
243
- }
244
- this._fee = txn.body().fee().to_str();
245
- this.loadInputsAndOutputs();
246
- if (this._transaction.witness_set().vkeys()) {
247
- const vkeys = this._transaction.witness_set().vkeys();
248
- for (let i = 0; i < vkeys.len(); i++) {
249
- const vkey = vkeys.get(i);
250
- this._signatures.push(vkey.signature().to_hex());
251
- }
252
- }
253
- }
254
- catch (e) {
255
- throw new sdk_core_1.InvalidTransactionError('unable to build transaction from raw');
256
- }
257
- }
258
- loadStakeKeyRegistration(certificate) {
259
- if (certificate === undefined) {
260
- return undefined;
261
- }
262
- const stakeRegistration = certificate.as_stake_registration();
263
- if (stakeRegistration !== undefined && stakeRegistration.stake_credential().to_keyhash() !== undefined) {
264
- return {
265
- type: CertType.StakeKeyRegistration,
266
- stakeCredentialHash: stakeRegistration.stake_credential().to_keyhash().to_hex(),
267
- };
268
- }
269
- else {
270
- return undefined;
271
- }
272
- }
273
- loadStakeKeyDelegation(certificate) {
274
- if (certificate === undefined) {
275
- return undefined;
276
- }
277
- const stakeDelegation = certificate.as_stake_delegation();
278
- if (stakeDelegation !== undefined && stakeDelegation.stake_credential().to_keyhash() !== undefined) {
279
- return {
280
- type: CertType.StakeKeyDelegation,
281
- stakeCredentialHash: stakeDelegation.stake_credential().to_keyhash().to_hex(),
282
- poolKeyHash: stakeDelegation.pool_keyhash().to_hex(),
283
- };
284
- }
285
- else {
286
- return undefined;
287
- }
288
- }
289
- loadStakePoolRegistration(certificate) {
290
- const poolRegistration = certificate.as_pool_registration();
291
- const rewardAccount = poolRegistration.pool_params().reward_account();
292
- const networkId = rewardAccount.to_address().network_id();
293
- const owners = [];
294
- for (let i = 0; i < poolRegistration.pool_params().pool_owners().len(); i++) {
295
- const poolOwner = poolRegistration.pool_params().pool_owners().get(i);
296
- const ownerStakeKey = CardanoWasm.Credential.from_keyhash(poolOwner);
297
- owners.push(CardanoWasm.RewardAddress.new(networkId, ownerStakeKey).to_address().to_bech32());
298
- }
299
- return {
300
- type: CertType.StakePoolRegistration,
301
- poolKeyHash: poolRegistration.pool_params().operator().to_hex(),
302
- vrfKeyHash: poolRegistration.pool_params().vrf_keyhash().to_hex(),
303
- pledge: poolRegistration.pool_params().pledge().to_str(),
304
- cost: poolRegistration.pool_params().cost().to_str(),
305
- marginNumerator: poolRegistration.pool_params().margin().numerator().to_str(),
306
- marginDenominator: poolRegistration.pool_params().margin().denominator().to_str(),
307
- rewardAccount: rewardAccount.to_address().to_bech32(),
308
- poolOwners: owners,
309
- };
310
- }
311
- /**
312
- * Set the transaction type.
313
- *
314
- * @param {TransactionType} transactionType The transaction type to be set.
315
- */
316
- setTransactionType(transactionType) {
317
- this._type = transactionType;
318
- }
319
- /** @inheritdoc */
320
- explainTransaction() {
321
- const txJson = this.toJson();
322
- const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee', 'type'];
323
- const amount = txJson.outputs.map((o) => ({ amount: BigInt(o.amount) }));
324
- const outputAmount = amount.reduce((p, n) => p + BigInt(n.amount), BigInt('0')).toString();
325
- const type = this._type === sdk_core_1.TransactionType.Send
326
- ? 'Transfer'
327
- : this._type === sdk_core_1.TransactionType.StakingActivate
328
- ? 'StakingActivate'
329
- : this._type === sdk_core_1.TransactionType.StakingWithdraw
330
- ? 'StakingWithdraw'
331
- : this._type === sdk_core_1.TransactionType.StakingDeactivate
332
- ? 'StakingDeactivate'
333
- : this._type === sdk_core_1.TransactionType.StakingPledge
334
- ? 'StakingPledge'
335
- : this._type === sdk_core_1.TransactionType.VoteDelegation
336
- ? 'VoteDelegation'
337
- : 'undefined';
338
- return {
339
- displayOrder,
340
- id: txJson.id,
341
- outputs: txJson.outputs.map((o) => ({ address: o.address, amount: o.amount })),
342
- outputAmount: outputAmount,
343
- changeOutputs: [],
344
- changeAmount: '0',
345
- fee: { fee: this._fee },
346
- type,
347
- certificates: txJson.certs,
348
- withdrawals: txJson.withdrawals,
349
- pledgeDetails: this._pledgeDetails,
350
- };
351
- }
352
- getPledgeDetails() {
353
- return this._pledgeDetails;
354
- }
355
- /**
356
- * Get transaction fee
357
- */
358
- get getFee() {
359
- return this._fee;
360
- }
361
- /**
362
- * Set transaction fee
363
- *
364
- * @param fee
365
- */
366
- fee(fee) {
367
- this._fee = fee;
368
- }
369
- }
370
- exports.Transaction = Transaction;
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU84QjtBQUM5QixzRkFBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLG9EQUErQjtBQXdCL0IsSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2xCLHVFQUFvQixDQUFBO0lBQ3BCLG1FQUFrQixDQUFBO0lBQ2xCLDJFQUFzQixDQUFBO0lBQ3RCLHlFQUFxQixDQUFBO0lBQ3JCLDJEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQU5XLFFBQVEsd0JBQVIsUUFBUSxRQU1uQjtBQWdERCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUs5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxFQUEyQjtRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8s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QU0sRUFBRSxDQUFDLENBQUM7WUFDOUUsWUFBWSxFQUFFLFlBQVk7WUFDMUIsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEdBQUc7WUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdkIsSUFBSTtZQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSztZQUMxQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBdFdELGtDQXNXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBOb2RlRW52aXJvbm1lbnRFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBDYXJkYW5vV2FzbSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFkYVV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW5wdXQge1xuICB0cmFuc2FjdGlvbl9pZDogc3RyaW5nO1xuICB0cmFuc2FjdGlvbl9pbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0IHtcbiAgcG9saWN5X2lkOiBzdHJpbmc7XG4gIGFzc2V0X25hbWU6IHN0cmluZztcbiAgcXVhbnRpdHk6IHN0cmluZztcbiAgZmluZ2VycHJpbnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25PdXRwdXQge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBtdWx0aUFzc2V0cz86IENhcmRhbm9XYXNtLk11bHRpQXNzZXQgfCBBc3NldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRuZXNzIHtcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xufVxuZXhwb3J0IGVudW0gQ2VydFR5cGUge1xuICBTdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgU3Rha2VLZXlEZWxlZ2F0aW9uLFxuICBTdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICBTdGFrZVBvb2xSZWdpc3RyYXRpb24sXG4gIFZvdGVEZWxlZ2F0aW9uLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnQge1xuICB0eXBlOiBDZXJ0VHlwZTtcbiAgc3Rha2VDcmVkZW50aWFsSGFzaD86IHN0cmluZztcbiAgcG9vbEtleUhhc2g/OiBzdHJpbmc7XG4gIGRSZXBJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoZHJhd2FsIHtcbiAgc3Rha2VBZGRyZXNzOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0YWtlS2V5UmVnaXN0cmF0aW9uQ2VydCA9IENlcnQ7XG5cbmV4cG9ydCB0eXBlIFN0YWtlS2V5RGVsZWdhdGlvbkNlcnQgPSBDZXJ0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWtlUG9vbFJlZ2lzdHJhdGlvbkNlcnQgZXh0ZW5kcyBDZXJ0IHtcbiAgdnJmS2V5SGFzaDogc3RyaW5nO1xuICBwbGVkZ2U6IHN0cmluZztcbiAgY29zdDogc3RyaW5nO1xuICBtYXJnaW5OdW1lcmF0b3I6IHN0cmluZztcbiAgbWFyZ2luRGVub21pbmF0b3I6IHN0cmluZztcbiAgcmV3YXJkQWNjb3VudDogc3RyaW5nO1xuICBwb29sT3duZXJzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGVkZ2VEZXRhaWxzIHtcbiAgc3Rha2VLZXlSZWdpc3RyYXRpb24/OiBTdGFrZUtleVJlZ2lzdHJhdGlvbkNlcnQ7XG4gIHN0YWtlS2V5RGVsZWdhdGlvbj86IFN0YWtlS2V5RGVsZWdhdGlvbkNlcnQ7XG4gIHN0YWtlUG9vbFJlZ2lzdHJhdGlvbjogU3Rha2VQb29sUmVnaXN0cmF0aW9uQ2VydDtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNhY3Rpb24gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSB0b0pzb24oKSBmdW5jdGlvbiBvZiBhIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhEYXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBpbnB1dHM6IFRyYW5zYWN0aW9uSW5wdXRbXTtcbiAgb3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXTtcbiAgd2l0bmVzc2VzOiBXaXRuZXNzW107XG4gIGNlcnRzOiBDZXJ0W107XG4gIHdpdGhkcmF3YWxzOiBXaXRoZHJhd2FsW107XG4gIHBsZWRnZURldGFpbHM/OiBQbGVkZ2VEZXRhaWxzO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX2ZlZTogc3RyaW5nO1xuICBwcml2YXRlIF9wbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHRyYW5zYWN0aW9uKCk6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb24odHg6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLl9pZCA9IEJ1ZmZlci5mcm9tKENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHguYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fdHJhbnNhY3Rpb24udG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLl90eXBlIGFzIFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIHdpdG5lc3NlczogW10sXG4gICAgICBjZXJ0czogW10sXG4gICAgICB3aXRoZHJhd2FsczogW10sXG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmlucHV0cygpLmxlbigpOyBpKyspIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmlucHV0cygpLmdldChpKTtcbiAgICAgIHJlc3VsdC5pbnB1dHMucHVzaCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiBCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IGlucHV0LmluZGV4KCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLm91dHB1dHMoKS5nZXQoaSk7XG4gICAgICByZXN1bHQub3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogYWRhVXRpbHMuZ2V0QWRkcmVzc1N0cmluZyhvdXRwdXQuYWRkcmVzcygpKSxcbiAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgICBtdWx0aUFzc2V0czogb3V0cHV0LmFtb3VudCgpLm11bHRpYXNzZXQoKSB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkhLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VydCA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS5jZXJ0cygpIS5nZXQoaSk7XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzdGFrZVJlZ2lzdHJhdGlvbiA9IGNlcnQuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VLZXlSZWdpc3RyYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbShzdGFrZVJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHN0YWtlRGVyZWdpc3RyYXRpb24gPSBjZXJ0LmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZXJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICByZXN1bHQuY2VydHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleURlcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogQnVmZmVyLmZyb20oc3Rha2VEZXJlZ2lzdHJhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VEZWxlZ2F0aW9uID0gY2VydC5hc19zdGFrZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uU3Rha2VEZWxlZ2F0aW9uO1xuICAgICAgICAgIHJlc3VsdC5jZXJ0cy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgICAgIHN0YWtlQ3JlZGVudGlhbEhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlRGVsZWdhdGlvbi5wb29sX2tleWhhc2goKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlcnQuYXNfcG9vbF9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3Rha2VQb29sUmVnaXN0cmF0aW9uID0gY2VydC5hc19wb29sX3JlZ2lzdHJhdGlvbigpIGFzIENhcmRhbm9XYXNtLlBvb2xSZWdpc3RyYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgcG9vbEtleUhhc2g6IEJ1ZmZlci5mcm9tKHN0YWtlUG9vbFJlZ2lzdHJhdGlvbi5wb29sX3BhcmFtcygpLm9wZXJhdG9yKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0LmFzX3ZvdGVfZGVsZWdhdGlvbigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB2b3RlRGVsZWdhdGlvbiA9IGNlcnQuYXNfdm90ZV9kZWxlZ2F0aW9uKCkgYXMgQ2FyZGFub1dhc20uVm90ZURlbGVnYXRpb247XG4gICAgICAgICAgcmVzdWx0LmNlcnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogQ2VydFR5cGUuVm90ZURlbGVnYXRpb24sXG4gICAgICAgICAgICBzdGFrZUNyZWRlbnRpYWxIYXNoOiBCdWZmZXIuZnJvbSh2b3RlRGVsZWdhdGlvbi5zdGFrZV9jcmVkZW50aWFsKCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgZFJlcElkOiBhZGFVdGlscy5nZXREUmVwSWRGcm9tRFJlcCh2b3RlRGVsZWdhdGlvbi5kcmVwKCkpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0LnBsZWRnZURldGFpbHMgPSB0aGlzLl9wbGVkZ2VEZXRhaWxzO1xuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHRoaXMuX3RyYW5zYWN0aW9uLmJvZHkoKS53aXRoZHJhd2FscygpIGFzIENhcmRhbm9XYXNtLldpdGhkcmF3YWxzO1xuICAgICAgY29uc3Qga2V5cyA9IHdpdGhkcmF3YWxzLmtleXMoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBrZXlzLmdldChpKTtcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgcmVzdWx0LndpdGhkcmF3YWxzLnB1c2goe1xuICAgICAgICAgIHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYnl0ZXMoKS50b1N0cmluZygpLFxuICAgICAgICAgIHZhbHVlOiByZXdhcmQudG9fc3RyKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkgYXMgQ2FyZGFub1dhc20uVmtleXdpdG5lc3NlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCB2a2V5ID0gKHRoaXMuX3RyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzKS5nZXQoaSk7XG4gICAgICAgIHJlc3VsdC53aXRuZXNzZXMucHVzaCh7XG4gICAgICAgICAgcHVibGljS2V5OiB2a2V5Py52a2V5KCkucHVibGljX2tleSgpLnRvX2hleCgpLFxuICAgICAgICAgIHNpZ25hdHVyZTogdmtleT8uc2lnbmF0dXJlKCkudG9faGV4KCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGlucHV0IGFuZCBvdXRwdXQgZmllbGQgZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcblxuICAgIGNvbnN0IHR4X291dHB1dHMgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkub3V0cHV0cygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhfb3V0cHV0cy5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0eF9vdXRwdXRzLmdldChpKTtcbiAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IGFkYVV0aWxzLmdldEFkZHJlc3NTdHJpbmcob3V0cHV0LmFkZHJlc3MoKSksXG4gICAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50KCkuY29pbigpLnRvX3N0cigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkpLnRvX2J5dGVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeFxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYSB0ZW1wIGZpeCB1bnRpbCB3ZSBzb2x2ZSBpbXBvcnQgcHJvYmxlbSBpbiB3ZWJwYWNrXG4gICAgICB0aHJvdyBuZXcgTm9kZUVudmlyb25tZW50RXJyb3IoJ3VuYWJsZSB0byBsb2FkIGNhcmRhbm8gc2VyaWFsaXphdGlvbiBsaWJyYXJ5Jyk7XG4gICAgfVxuICAgIGNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZkEtRl0rJC87XG4gICAgY29uc3QgYnVmZmVyUmF3VHJhbnNhY3Rpb24gPSBIRVhfUkVHRVgudGVzdChyYXdUeCkgPyBCdWZmZXIuZnJvbShyYXdUeCwgJ2hleCcpIDogQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhuID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhidWZmZXJSYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4bjtcbiAgICAgIHRoaXMuX2lkID0gQnVmZmVyLmZyb20oQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eG4uYm9keSgpKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLmNlcnRzKCkpIHtcbiAgICAgICAgY29uc3QgY2VydHM6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNlcnQgPSB0aGlzLl90cmFuc2FjdGlvbi5ib2R5KCkuY2VydHMoKSEuZ2V0KGkpO1xuICAgICAgICAgIGNlcnRzLnB1c2goY2VydCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2VydHMuc29tZSgoYykgPT4gYy5hc19wb29sX3JlZ2lzdHJhdGlvbigpICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlO1xuICAgICAgICAgIGNvbnN0IHN0YWtlS2V5UmVnaXN0cmF0aW9uID0gY2VydHMuZmluZCgoYykgPT4gYy5hc19zdGFrZV9yZWdpc3RyYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBzdGFrZUtleURlbGVnYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3N0YWtlX2RlbGVnYXRpb24oKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBzdGFrZVBvb2xSZWdpc3RyYXRpb24gPSBjZXJ0cy5maW5kKChjKSA9PiBjLmFzX3Bvb2xfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICB0aGlzLl9wbGVkZ2VEZXRhaWxzID0ge1xuICAgICAgICAgICAgc3Rha2VLZXlSZWdpc3RyYXRpb246IHRoaXMubG9hZFN0YWtlS2V5UmVnaXN0cmF0aW9uKHN0YWtlS2V5UmVnaXN0cmF0aW9uKSxcbiAgICAgICAgICAgIHN0YWtlS2V5RGVsZWdhdGlvbjogdGhpcy5sb2FkU3Rha2VLZXlEZWxlZ2F0aW9uKHN0YWtlS2V5RGVsZWdhdGlvbiksXG4gICAgICAgICAgICBzdGFrZVBvb2xSZWdpc3RyYXRpb246IHRoaXMubG9hZFN0YWtlUG9vbFJlZ2lzdHJhdGlvbihzdGFrZVBvb2xSZWdpc3RyYXRpb24hKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfc3Rha2VfcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjZXJ0cy5zb21lKChjKSA9PiBjLmFzX3N0YWtlX2RlcmVnaXN0cmF0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICB9IGVsc2UgaWYgKGNlcnRzLnNvbWUoKGMpID0+IGMuYXNfdm90ZV9kZWxlZ2F0aW9uKCkgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlZvdGVEZWxlZ2F0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uYm9keSgpLndpdGhkcmF3YWxzKCkpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ZlZSA9IHR4bi5ib2R5KCkuZmVlKCkudG9fc3RyKCk7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkpIHtcbiAgICAgICAgY29uc3QgdmtleXMgPSB0aGlzLl90cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkhIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmtleXMubGVuKCk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZrZXkgPSB2a2V5cy5nZXQoaSk7XG4gICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHZrZXkuc2lnbmF0dXJlKCkudG9faGV4KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCd1bmFibGUgdG8gYnVpbGQgdHJhbnNhY3Rpb24gZnJvbSByYXcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdGFrZUtleVJlZ2lzdHJhdGlvbihcbiAgICBjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUgfCB1bmRlZmluZWRcbiAgKTogU3Rha2VLZXlSZWdpc3RyYXRpb25DZXJ0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY2VydGlmaWNhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3Rha2VSZWdpc3RyYXRpb24gPSBjZXJ0aWZpY2F0ZS5hc19zdGFrZV9yZWdpc3RyYXRpb24oKTtcbiAgICBpZiAoc3Rha2VSZWdpc3RyYXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFrZVJlZ2lzdHJhdGlvbiEuc3Rha2VfY3JlZGVudGlhbCgpLnRvX2tleWhhc2goKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBDZXJ0VHlwZS5TdGFrZUtleVJlZ2lzdHJhdGlvbixcbiAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogc3Rha2VSZWdpc3RyYXRpb24hLnN0YWtlX2NyZWRlbnRpYWwoKS50b19rZXloYXNoKCkhLnRvX2hleCgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdGFrZUtleURlbGVnYXRpb24oY2VydGlmaWNhdGU6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlIHwgdW5kZWZpbmVkKTogU3Rha2VLZXlEZWxlZ2F0aW9uQ2VydCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNlcnRpZmljYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YWtlRGVsZWdhdGlvbiA9IGNlcnRpZmljYXRlLmFzX3N0YWtlX2RlbGVnYXRpb24oKTtcbiAgICBpZiAoc3Rha2VEZWxlZ2F0aW9uICE9PSB1bmRlZmluZWQgJiYgc3Rha2VEZWxlZ2F0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IENlcnRUeXBlLlN0YWtlS2V5RGVsZWdhdGlvbixcbiAgICAgICAgc3Rha2VDcmVkZW50aWFsSGFzaDogc3Rha2VEZWxlZ2F0aW9uIS5zdGFrZV9jcmVkZW50aWFsKCkudG9fa2V5aGFzaCgpIS50b19oZXgoKSxcbiAgICAgICAgcG9vbEtleUhhc2g6IHN0YWtlRGVsZWdhdGlvbiEucG9vbF9rZXloYXNoKCkudG9faGV4KCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0YWtlUG9vbFJlZ2lzdHJhdGlvbihjZXJ0aWZpY2F0ZTogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGUpOiBTdGFrZVBvb2xSZWdpc3RyYXRpb25DZXJ0IHtcbiAgICBjb25zdCBwb29sUmVnaXN0cmF0aW9uID0gY2VydGlmaWNhdGUuYXNfcG9vbF9yZWdpc3RyYXRpb24oKTtcbiAgICBjb25zdCByZXdhcmRBY2NvdW50ID0gcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5yZXdhcmRfYWNjb3VudCgpO1xuICAgIGNvbnN0IG5ldHdvcmtJZCA9IHJld2FyZEFjY291bnQudG9fYWRkcmVzcygpLm5ldHdvcmtfaWQoKTtcbiAgICBjb25zdCBvd25lcnM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLnBvb2xfb3duZXJzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgcG9vbE93bmVyID0gcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5wb29sX293bmVycygpLmdldChpKTtcbiAgICAgIGNvbnN0IG93bmVyU3Rha2VLZXkgPSBDYXJkYW5vV2FzbS5DcmVkZW50aWFsLmZyb21fa2V5aGFzaChwb29sT3duZXIpO1xuICAgICAgb3duZXJzLnB1c2goQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5uZXcobmV0d29ya0lkLCBvd25lclN0YWtlS2V5KS50b19hZGRyZXNzKCkudG9fYmVjaDMyKCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogQ2VydFR5cGUuU3Rha2VQb29sUmVnaXN0cmF0aW9uLFxuICAgICAgcG9vbEtleUhhc2g6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkub3BlcmF0b3IoKS50b19oZXgoKSxcbiAgICAgIHZyZktleUhhc2g6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkudnJmX2tleWhhc2goKS50b19oZXgoKSxcbiAgICAgIHBsZWRnZTogcG9vbFJlZ2lzdHJhdGlvbiEucG9vbF9wYXJhbXMoKS5wbGVkZ2UoKS50b19zdHIoKSxcbiAgICAgIGNvc3Q6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkuY29zdCgpLnRvX3N0cigpLFxuICAgICAgbWFyZ2luTnVtZXJhdG9yOiBwb29sUmVnaXN0cmF0aW9uIS5wb29sX3BhcmFtcygpLm1hcmdpbigpLm51bWVyYXRvcigpLnRvX3N0cigpLFxuICAgICAgbWFyZ2luRGVub21pbmF0b3I6IHBvb2xSZWdpc3RyYXRpb24hLnBvb2xfcGFyYW1zKCkubWFyZ2luKCkuZGVub21pbmF0b3IoKS50b19zdHIoKSxcbiAgICAgIHJld2FyZEFjY291bnQ6IHJld2FyZEFjY291bnQudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgcG9vbE93bmVyczogb3duZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IHtcbiAgICBvdXRwdXRzOiB7IGFtb3VudDogc3RyaW5nOyBhZGRyZXNzOiBzdHJpbmcgfVtdO1xuICAgIGNlcnRpZmljYXRlczogQ2VydFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IHN0cmluZ1tdO1xuICAgIG91dHB1dEFtb3VudDogc3RyaW5nO1xuICAgIGZlZTogeyBmZWU6IHN0cmluZyB9O1xuICAgIGRpc3BsYXlPcmRlcjogc3RyaW5nW107XG4gICAgaWQ6IHN0cmluZztcbiAgICBjaGFuZ2VBbW91bnQ6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXTtcbiAgICBwbGVkZ2VEZXRhaWxzPzogUGxlZGdlRGV0YWlscztcbiAgfSB7XG4gICAgY29uc3QgdHhKc29uID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3QgYW1vdW50ID0gdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhbW91bnQ6IEJpZ0ludChvLmFtb3VudCkgfSkpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IGFtb3VudC5yZWR1Y2UoKHAsIG4pID0+IHAgKyBCaWdJbnQobi5hbW91bnQpLCBCaWdJbnQoJzAnKSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kXG4gICAgICAgID8gJ1RyYW5zZmVyJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGVcbiAgICAgICAgPyAnU3Rha2luZ0FjdGl2YXRlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXdcbiAgICAgICAgPyAnU3Rha2luZ1dpdGhkcmF3J1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZVxuICAgICAgICA/ICdTdGFraW5nRGVhY3RpdmF0ZSdcbiAgICAgICAgOiB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1BsZWRnZVxuICAgICAgICA/ICdTdGFraW5nUGxlZGdlJ1xuICAgICAgICA6IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvblxuICAgICAgICA/ICdWb3RlRGVsZWdhdGlvbidcbiAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgIG91dHB1dHM6IHR4SnNvbi5vdXRwdXRzLm1hcCgobykgPT4gKHsgYWRkcmVzczogby5hZGRyZXNzLCBhbW91bnQ6IG8uYW1vdW50IH0pKSxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX2ZlZSB9LFxuICAgICAgdHlwZSxcbiAgICAgIGNlcnRpZmljYXRlczogdHhKc29uLmNlcnRzLFxuICAgICAgd2l0aGRyYXdhbHM6IHR4SnNvbi53aXRoZHJhd2FscyxcbiAgICAgIHBsZWRnZURldGFpbHM6IHRoaXMuX3BsZWRnZURldGFpbHMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBsZWRnZURldGFpbHMoKTogUGxlZGdlRGV0YWlscyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BsZWRnZURldGFpbHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZVxuICAgKlxuICAgKiBAcGFyYW0gZmVlXG4gICAqL1xuICBmZWUoZmVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gIH1cbn1cbiJdfQ==