@bitgo-beta/sdk-coin-xtz 1.4.3-alpha.376 → 1.4.3-alpha.378

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.
@@ -111,4 +111,38 @@ export interface Key extends BaseKey, IndexedData {
111
111
  export interface IndexedSignature extends IndexedData {
112
112
  signature: string;
113
113
  }
114
+ export type RecoverOptions = {
115
+ userKey: string;
116
+ backupKey: string;
117
+ walletPassphrase?: string;
118
+ walletContractAddress: string;
119
+ recoveryDestination: string;
120
+ krsProvider?: string;
121
+ gasPrice?: number;
122
+ gasLimit?: number;
123
+ bitgoFeeAddress?: string;
124
+ bitgoDestinationAddress?: string;
125
+ tokenContractAddress?: string;
126
+ intendedChain?: string;
127
+ derivationSeed?: string;
128
+ apiKey?: string;
129
+ isUnsignedSweep?: boolean;
130
+ };
131
+ export interface OfflineVaultTxInfo {
132
+ nextContractSequenceId?: string;
133
+ contractSequenceId?: string;
134
+ tx?: string;
135
+ txHex?: string;
136
+ userKey?: string;
137
+ backupKey?: string;
138
+ coin: string;
139
+ gasPrice: number;
140
+ gasLimit: number;
141
+ recipients: Recipient[];
142
+ walletContractAddress: string;
143
+ amount: string;
144
+ backupKeyNonce: number;
145
+ isEvmBasedCrossChainRecovery?: boolean;
146
+ walletVersion?: number;
147
+ }
114
148
  //# sourceMappingURL=iface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlRmVlLFxuICBCYXNlS2V5LFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkZlZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQgYXMgUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWHR6U2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeEluZm8ge1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbiAgZnJvbTogc3RyaW5nO1xuICB0eGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0luZm8ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QcmVidWlsZCBleHRlbmRzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvOiBUeEluZm87XG4gIGFkZHJlc3NJbmZvOiBBZGRyZXNzSW5mbztcbiAgZmVlSW5mbzogWHR6VHJhbnNhY3Rpb25GZWU7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBkYXRhVG9TaWduOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWHR6VHJhbnNhY3Rpb25GZWUge1xuICBmZWU6IHN0cmluZztcbiAgZ2FzTGltaXQ/OiBzdHJpbmc7XG4gIHN0b3JhZ2VMaW1pdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbiAgZmVlSW5mbzogVHJhbnNhY3Rpb25GZWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaFR5cGUge1xuICBwcmVmaXg6IEJ1ZmZlcjtcbiAgYnl0ZUxlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbiB7XG4gIGtpbmQ6IHN0cmluZztcbiAgY291bnRlcjogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgZmVlOiBzdHJpbmc7XG4gIGdhc19saW1pdDogc3RyaW5nO1xuICBzdG9yYWdlX2xpbWl0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2ZWFsT3AgZXh0ZW5kcyBPcGVyYXRpb24ge1xuICBwdWJsaWNfa2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luYXRpb25PcCBleHRlbmRzIE9wZXJhdGlvbiB7XG4gIGJhbGFuY2U6IHN0cmluZztcbiAgc2NyaXB0OiBhbnk7XG4gIGRlbGVnYXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uT3AgZXh0ZW5kcyBPcGVyYXRpb24ge1xuICBwYXJhbWV0ZXJzPzogYW55O1xuICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRUcmFuc2FjdGlvbiB7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBjb250ZW50czogT3BlcmF0aW9uW107XG59XG5cbi8qKlxuICogRGlmZmVyZW50IFRlem9zIHNwZWNpZmljIGZlZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWUgZXh0ZW5kcyBCYXNlRmVlIHtcbiAgZ2FzTGltaXQ/OiBzdHJpbmc7XG4gIHN0b3JhZ2VMaW1pdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJEYXRhIHtcbiAgYW1vdW50OiBzdHJpbmc7XG4gIGNvaW4/OiBzdHJpbmc7XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZmVlOiBGZWU7XG4gIGRhdGFUb1NpZ24/OiBzdHJpbmc7XG4gIGNvdW50ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3JpZ2luYXRpb24gdHJhbnNhY3Rpb24gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5hdGlvbkRhdGEge1xuICBmZWU6IEZlZTtcbiAgY291bnRlcj86IHN0cmluZztcbiAgYmFsYW5jZT86IHN0cmluZztcbiAgZnJvbT86IHN0cmluZztcbiAgZm9yd2FyZGVyRGVzdGluYXRpb24/OiBzdHJpbmc7XG59XG4vKipcbiAqIFRhcXVpdG8gcmV0dXJuIHR5cGUgZm9yIHNpZ24gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25SZXNwb25zZSB7XG4gIGJ5dGVzOiBzdHJpbmc7XG4gIHNpZzogYW55O1xuICBwcmVmaXhTaWc6IGFueTtcbiAgc2J5dGVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhlZERhdGEge1xuICBpbmRleD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUZXpvcyBrZXlzIGNhbiBoYXZlIGEgc3BlY2lmaWMgb3JkZXIgaW4gdGhlIHNtYXJ0IGNvbnRyYWN0cywgaGVuY2UgdGhlIG5lZWQgdG8gYWRkIGFuIGluZGV4IGZpZWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5IGV4dGVuZHMgQmFzZUtleSwgSW5kZXhlZERhdGEge31cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleGVkU2lnbmF0dXJlIGV4dGVuZHMgSW5kZXhlZERhdGEge1xuICBzaWduYXR1cmU6IHN0cmluZztcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlRmVlLFxuICBCYXNlS2V5LFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkZlZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQgYXMgUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWHR6U2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeEluZm8ge1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbiAgZnJvbTogc3RyaW5nO1xuICB0eGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0luZm8ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QcmVidWlsZCBleHRlbmRzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvOiBUeEluZm87XG4gIGFkZHJlc3NJbmZvOiBBZGRyZXNzSW5mbztcbiAgZmVlSW5mbzogWHR6VHJhbnNhY3Rpb25GZWU7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBkYXRhVG9TaWduOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWHR6VHJhbnNhY3Rpb25GZWUge1xuICBmZWU6IHN0cmluZztcbiAgZ2FzTGltaXQ/OiBzdHJpbmc7XG4gIHN0b3JhZ2VMaW1pdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbiAgZmVlSW5mbzogVHJhbnNhY3Rpb25GZWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaFR5cGUge1xuICBwcmVmaXg6IEJ1ZmZlcjtcbiAgYnl0ZUxlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbiB7XG4gIGtpbmQ6IHN0cmluZztcbiAgY291bnRlcjogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgZmVlOiBzdHJpbmc7XG4gIGdhc19saW1pdDogc3RyaW5nO1xuICBzdG9yYWdlX2xpbWl0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2ZWFsT3AgZXh0ZW5kcyBPcGVyYXRpb24ge1xuICBwdWJsaWNfa2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luYXRpb25PcCBleHRlbmRzIE9wZXJhdGlvbiB7XG4gIGJhbGFuY2U6IHN0cmluZztcbiAgc2NyaXB0OiBhbnk7XG4gIGRlbGVnYXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uT3AgZXh0ZW5kcyBPcGVyYXRpb24ge1xuICBwYXJhbWV0ZXJzPzogYW55O1xuICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRUcmFuc2FjdGlvbiB7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBjb250ZW50czogT3BlcmF0aW9uW107XG59XG5cbi8qKlxuICogRGlmZmVyZW50IFRlem9zIHNwZWNpZmljIGZlZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWUgZXh0ZW5kcyBCYXNlRmVlIHtcbiAgZ2FzTGltaXQ/OiBzdHJpbmc7XG4gIHN0b3JhZ2VMaW1pdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJEYXRhIHtcbiAgYW1vdW50OiBzdHJpbmc7XG4gIGNvaW4/OiBzdHJpbmc7XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZmVlOiBGZWU7XG4gIGRhdGFUb1NpZ24/OiBzdHJpbmc7XG4gIGNvdW50ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3JpZ2luYXRpb24gdHJhbnNhY3Rpb24gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5hdGlvbkRhdGEge1xuICBmZWU6IEZlZTtcbiAgY291bnRlcj86IHN0cmluZztcbiAgYmFsYW5jZT86IHN0cmluZztcbiAgZnJvbT86IHN0cmluZztcbiAgZm9yd2FyZGVyRGVzdGluYXRpb24/OiBzdHJpbmc7XG59XG4vKipcbiAqIFRhcXVpdG8gcmV0dXJuIHR5cGUgZm9yIHNpZ24gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25SZXNwb25zZSB7XG4gIGJ5dGVzOiBzdHJpbmc7XG4gIHNpZzogYW55O1xuICBwcmVmaXhTaWc6IGFueTtcbiAgc2J5dGVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhlZERhdGEge1xuICBpbmRleD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUZXpvcyBrZXlzIGNhbiBoYXZlIGEgc3BlY2lmaWMgb3JkZXIgaW4gdGhlIHNtYXJ0IGNvbnRyYWN0cywgaGVuY2UgdGhlIG5lZWQgdG8gYWRkIGFuIGluZGV4IGZpZWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5IGV4dGVuZHMgQmFzZUtleSwgSW5kZXhlZERhdGEge31cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleGVkU2lnbmF0dXJlIGV4dGVuZHMgSW5kZXhlZERhdGEge1xuICBzaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUmVjb3Zlck9wdGlvbnMgPSB7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHdhbGxldENvbnRyYWN0QWRkcmVzczogc3RyaW5nOyAvLyB1c2UgdGhpcyBhcyB3YWxsZXRCYXNlQWRkcmVzcyBmb3IgVFNTXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIGdhc1ByaWNlPzogbnVtYmVyO1xuICBnYXNMaW1pdD86IG51bWJlcjtcbiAgYml0Z29GZWVBZGRyZXNzPzogc3RyaW5nO1xuICBiaXRnb0Rlc3RpbmF0aW9uQWRkcmVzcz86IHN0cmluZztcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M/OiBzdHJpbmc7XG4gIGludGVuZGVkQ2hhaW4/OiBzdHJpbmc7XG4gIGRlcml2YXRpb25TZWVkPzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGlzVW5zaWduZWRTd2VlcD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIG5leHRDb250cmFjdFNlcXVlbmNlSWQ/OiBzdHJpbmc7XG4gIGNvbnRyYWN0U2VxdWVuY2VJZD86IHN0cmluZztcbiAgdHg/OiBzdHJpbmc7XG4gIHR4SGV4Pzogc3RyaW5nO1xuICB1c2VyS2V5Pzogc3RyaW5nO1xuICBiYWNrdXBLZXk/OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgZ2FzUHJpY2U6IG51bWJlcjtcbiAgZ2FzTGltaXQ6IG51bWJlcjtcbiAgcmVjaXBpZW50czogUmVjaXBpZW50W107XG4gIHdhbGxldENvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgYmFja3VwS2V5Tm9uY2U6IG51bWJlcjtcbiAgaXNFdm1CYXNlZENyb3NzQ2hhaW5SZWNvdmVyeT86IGJvb2xlYW47XG4gIHdhbGxldFZlcnNpb24/OiBudW1iZXI7XG59XG4iXX0=
@@ -261,4 +261,20 @@ export declare enum DEFAULT_STORAGE_LIMIT {
261
261
  TRANSFER = 257,
262
262
  REVEAL = 0
263
263
  }
264
+ export declare enum TRANSACTION_FEE {
265
+ ORIGINATION = 47640,
266
+ TRANSFER = 47640,
267
+ REVEAL = 1420
268
+ }
269
+ export declare enum TRANSACTION_STORAGE_LIMIT {
270
+ ORIGINATION = 3000,
271
+ TRANSFER = 300,
272
+ REVEAL = 5
273
+ }
274
+ export declare enum TRANSACTION_GAS_LIMIT {
275
+ ORIGINATION = 4600,
276
+ TRANSFER = 6000,
277
+ CONTRACT_TRANSFER = 20000,
278
+ REVEAL = 1500
279
+ }
264
280
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,iBAAiB,yBAAsB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKxF;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBtG;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,UAA8B,GACxC,OAAO,CAAC,YAAY,CAAC,CAMvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,UAA8B,GACxC,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,EACvB,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,GAAG,CAQL;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAkBrE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAM7E;AAKD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoIrB,CAAC;AAIF,oBAAY,iBAAiB;IAC3B,UAAU,QAAQ;IAClB,WAAW,QAAQ;IACnB,QAAQ,QAAQ;IAChB,MAAM,QAAQ;CACf;AAED,oBAAY,WAAW;IACrB,UAAU,OAAO;IACjB,WAAW,QAAQ;IACnB,QAAQ,QAAQ;IAChB,MAAM,OAAO;CACd;AAED,oBAAY,qBAAqB;IAC/B,UAAU,IAAI;IACd,WAAW,MAAM;IACjB,QAAQ,MAAM;IACd,MAAM,IAAI;CACX;AAED,oBAAY,eAAe;IACzB,WAAW,QAAQ;IACnB,QAAQ,QAAQ;IAChB,MAAM,OAAO;CACd;AAED,oBAAY,yBAAyB;IACnC,WAAW,OAAO;IAClB,QAAQ,MAAM;IACd,MAAM,IAAI;CACX;AAED,oBAAY,qBAAqB;IAC/B,WAAW,OAAO;IAClB,QAAQ,OAAO;IACf,iBAAiB,QAAQ;IACzB,MAAM,OAAO;CACd"}
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.DEFAULT_STORAGE_LIMIT = exports.DEFAULT_FEE = exports.DEFAULT_GAS_LIMIT = exports.hashTypes = exports.DEFAULT_WATERMARK = void 0;
39
+ exports.TRANSACTION_GAS_LIMIT = exports.TRANSACTION_STORAGE_LIMIT = exports.TRANSACTION_FEE = exports.DEFAULT_STORAGE_LIMIT = exports.DEFAULT_FEE = exports.DEFAULT_GAS_LIMIT = exports.hashTypes = exports.DEFAULT_WATERMARK = void 0;
40
40
  exports.base58encode = base58encode;
41
41
  exports.calculateTransactionId = calculateTransactionId;
42
42
  exports.calculateOriginatedAddress = calculateOriginatedAddress;
@@ -470,4 +470,23 @@ var DEFAULT_STORAGE_LIMIT;
470
470
  DEFAULT_STORAGE_LIMIT[DEFAULT_STORAGE_LIMIT["TRANSFER"] = 257] = "TRANSFER";
471
471
  DEFAULT_STORAGE_LIMIT[DEFAULT_STORAGE_LIMIT["REVEAL"] = 0] = "REVEAL";
472
472
  })(DEFAULT_STORAGE_LIMIT || (exports.DEFAULT_STORAGE_LIMIT = DEFAULT_STORAGE_LIMIT = {}));
473
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxvQ0FNQztBQVFELHdEQUtDO0FBU0QsZ0VBbUJDO0FBVUQsb0JBVUM7QUFXRCwwQ0FvQkM7QUFXRCxnREFhQztBQVNELGtDQWtCQztBQVFELHdDQUVDO0FBUUQsd0RBRUM7QUFRRCw0REFFQztBQVFELDRDQU9DO0FBUUQsNENBT0M7QUFRRCw4Q0FPQztBQVFELDRDQUVDO0FBUUQsd0RBRUM7QUFTRCxnQ0FFQztBQVNELDhCQU1DO0FBU0QsMENBTUM7QUFoVEQsbURBQWlFO0FBQ2pFLDRDQUFpRDtBQUNqRCx1REFBeUM7QUFDekMsdURBQW9EO0FBQ3BELDRFQUF3QztBQUd4QyxtREFBNEQ7QUFFNUQsMENBQTBDO0FBQzdCLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXJEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFlBQVksQ0FBQyxNQUFjLEVBQUUsT0FBZTtJQUMxRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDZCxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUIsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxrQkFBMEI7SUFDckUsTUFBTSw0QkFBTSxDQUFDLEtBQUssQ0FBQztJQUNuQixNQUFNLHdCQUF3QixH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WDtBQUxELFdBQVksV0FBVztJQUNyQiw0REFBaUIsQ0FBQTtJQUNqQiwrREFBbUIsQ0FBQTtJQUNuQix5REFBZ0IsQ0FBQTtJQUNoQixvREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLFdBQVcsMkJBQVgsV0FBVyxRQUt0QjtBQUVELElBQVkscUJBS1g7QUFMRCxXQUFZLHFCQUFxQjtJQUMvQiw2RUFBYyxDQUFBO0lBQ2QsaUZBQWlCLENBQUE7SUFDakIsMkVBQWMsQ0FBQTtJQUNkLHFFQUFVLENBQUE7QUFDWixDQUFDLEVBTFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFLaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1ZhbGlkWHB1YiwgU2lnbmluZ0Vycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgSW5NZW1vcnlTaWduZXIgfSBmcm9tICdAdGFxdWl0by9zaWduZXInO1xuaW1wb3J0ICogYXMgYmFzZTU4Y2hlY2sgZnJvbSAnYnM1OGNoZWNrJztcbmltcG9ydCB7IHNlY3AyNTZrMSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvc2VjcDI1NmsxJztcbmltcG9ydCBzb2RpdW0gZnJvbSAnbGlic29kaXVtLXdyYXBwZXJzJztcbmltcG9ydCB7IEhhc2hUeXBlLCBTaWduUmVzcG9uc2UgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgZ2VuZXJpY011bHRpc2lnRGF0YVRvU2lnbiB9IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5cbi8vIEJ5IGRlZmF1bHQsIHVzZSB0aGUgdHJhbnNhY3Rpb25zIHByZWZpeFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FURVJNQVJLID0gbmV3IFVpbnQ4QXJyYXkoWzNdKTtcblxuLyoqXG4gKiBFbmNvZGUgdGhlIHBheWxvYWQgdG8gYmFzZTU4IHdpdGggYSBzcGVjaWZpYyBUZXpvcyBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeCB0byBhZGQgdG8gdGhlIGVuY29kZWQgcGF5bG9hZFxuICogQHBhcmFtIHtCdWZmZXJ9IHBheWxvYWQgdG8gZW5jb2RlXG4gKiBAcmV0dXJucyB7YW55fSBiYXNlNTggcGF5bG9hZCB3aXRoIGEgVGV6b3MgcHJlZml4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNThlbmNvZGUocHJlZml4OiBCdWZmZXIsIHBheWxvYWQ6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGNvbnN0IG4gPSBCdWZmZXIuYWxsb2MocHJlZml4Lmxlbmd0aCArIHBheWxvYWQubGVuZ3RoKTtcbiAgbi5zZXQocHJlZml4KTtcbiAgbi5zZXQocGF5bG9hZCwgcHJlZml4Lmxlbmd0aCk7XG5cbiAgcmV0dXJuIGJhc2U1OGNoZWNrLmVuY29kZShuKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHRyYW5zYWN0aW9uIGlkIGZvciBhIGZvciBhIHNpZ25lZCB0cmFuc2FjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZFRyYW5zYWN0aW9uIFNpZ25lZCB0cmFuc2FjdGlvbiBpbiBoZXhhZGVjaW1hbFxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHRyYW5zYWN0aW9uIGlkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVUcmFuc2FjdGlvbklkKGVuY29kZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICBjb25zdCBlbmNvZGVkVHJhbnNhY3Rpb25CdWZmZXIgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20oZW5jb2RlZFRyYW5zYWN0aW9uLCAnaGV4JykpO1xuICBjb25zdCBvcGVyYXRpb25IYXNoUGF5bG9hZCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goMzIsIGVuY29kZWRUcmFuc2FjdGlvbkJ1ZmZlcik7XG4gIHJldHVybiBiYXNlNThlbmNvZGUoaGFzaFR5cGVzLm8ucHJlZml4LCBCdWZmZXIuZnJvbShvcGVyYXRpb25IYXNoUGF5bG9hZCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiBhIG5ldyBvcmlnaW5hdGVkIGFjY291bnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zYWN0aW9uSWQgVGhlIHRyYW5zYWN0aW9uIGlkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBvcmlnaW5hdGlvbiBvcGVyYXRpb24gaW5zaWRlIHRoZSB0cmFuc2FjdGlvbiAoc3RhcnRzIGF0IDApXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBBbiBvcmlnaW5hdGVkIGFkZHJlc3Mgd2l0aCB0aGUgS1QgcHJlZml4XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVPcmlnaW5hdGVkQWRkcmVzcyh0cmFuc2FjdGlvbklkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9UZXpUZWNoL2V6dHovYmxvYi9jZmRjNGZjZmM4OTFmNGY0ZjA3N2MzMDU2ZjQxNDQ3NmRkZTM2MTBiL3NyYy9tYWluLmpzI0w3NjhcbiAgY29uc3Qgb2IgPSBiYXNlNThjaGVjay5kZWNvZGUodHJhbnNhY3Rpb25JZCkuc2xpY2UoaGFzaFR5cGVzLm8ucHJlZml4Lmxlbmd0aCk7XG5cbiAgbGV0IHR0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgdHQucHVzaChvYltpXSk7XG4gIH1cblxuICB0dCA9IHR0LmNvbmNhdChbXG4gICAgKGluZGV4ICYgMHhmZjAwMDAwMCkgPj4gMjQsXG4gICAgKGluZGV4ICYgMHgwMGZmMDAwMCkgPj4gMTYsXG4gICAgKGluZGV4ICYgMHgwMDAwZmYwMCkgPj4gOCxcbiAgICBpbmRleCAmIDB4MDAwMDAwZmYsXG4gIF0pO1xuXG4gIGF3YWl0IHNvZGl1bS5yZWFkeTtcbiAgY29uc3QgcGF5bG9hZCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goMjAsIG5ldyBVaW50OEFycmF5KHR0KSk7XG4gIHJldHVybiBiYXNlNThlbmNvZGUoaGFzaFR5cGVzLktULnByZWZpeCwgQnVmZmVyLmZyb20ocGF5bG9hZCkpO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgZGF0YSBzaWduaW5nIHVzaW5nIFRlem9zIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIEEgS2V5IFBhaXIgd2l0aCBhIHByaXZhdGUga2V5IHNldFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIGRhdGEgaW4gaGV4YWRlY2ltYWwgdG8gc2lnblxuICogQHBhcmFtIHtVaW50OEFycmF5fSB3YXRlcm1hcmsgTWFnaWMgYnl0ZTogMSBmb3IgYmxvY2ssIDIgZm9yIGVuZG9yc2VtZW50LCAzIGZvciBnZW5lcmljXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduUmVzcG9uc2U+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnbihcbiAga2V5UGFpcjogS2V5UGFpcixcbiAgZGF0YTogc3RyaW5nLFxuICB3YXRlcm1hcms6IFVpbnQ4QXJyYXkgPSBERUZBVUxUX1dBVEVSTUFSS1xuKTogUHJvbWlzZTxTaWduUmVzcG9uc2U+IHtcbiAgaWYgKCFrZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gIH1cbiAgY29uc3Qgc2lnbmVyID0gbmV3IEluTWVtb3J5U2lnbmVyKGtleVBhaXIuZ2V0S2V5cygpLnBydiEpO1xuICByZXR1cm4gc2lnbmVyLnNpZ24oZGF0YSwgd2F0ZXJtYXJrKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGUgc2lnbmF0dXJlIHByb2R1Y2VkIGZvciBhIGdpdmVuIG1lc3NhZ2UgYmVsb25ncyB0byBhIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2UgaW4gaGV4IGZvcm1hdCB0byB2ZXJpZnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgc2VjcDI1NmsxIHB1YmxpYyBrZXkgd2l0aCBcInNwcGtcIiBwcmVmaXggdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmUgd2l0aFxuICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBUZXpvcyBzaWduYXR1cmUgd2l0aCBcInNpZ1wiIHByZWZpeFxuICogQHBhcmFtIHtVaW50OEFycmF5fSB3YXRlcm1hcmsgT3B0aW9uYWwgd2F0ZXJtYXJrIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNpZ25hdHVyZVxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUoXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgcHVibGljS2V5OiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICB3YXRlcm1hcms6IFVpbnQ4QXJyYXkgPSBERUZBVUxUX1dBVEVSTUFSS1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJhd1B1YmxpY0tleSA9IGRlY29kZUtleShwdWJsaWNLZXksIGhhc2hUeXBlcy5zcHBrKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGtleSA9IHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChyYXdQdWJsaWNLZXkpO1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20obWVzc2FnZSwgJ2hleCcpKTtcbiAgLy8gVGV6b3Mgc2lnbmF0dXJlcyBhbHdheXMgaGF2ZSBhIHdhdGVybWFya1xuICBjb25zdCBtZXNzYWdlV2l0aFdhdGVybWFyayA9IG5ldyBVaW50OEFycmF5KHdhdGVybWFyay5sZW5ndGggKyBtZXNzYWdlQnVmZmVyLmxlbmd0aCk7XG4gIG1lc3NhZ2VXaXRoV2F0ZXJtYXJrLnNldCh3YXRlcm1hcmspO1xuICBtZXNzYWdlV2l0aFdhdGVybWFyay5zZXQobWVzc2FnZUJ1ZmZlciwgd2F0ZXJtYXJrLmxlbmd0aCk7XG5cbiAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICBjb25zdCBieXRlc0hhc2ggPSBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKDMyLCBtZXNzYWdlV2l0aFdhdGVybWFyaykpO1xuXG4gIGNvbnN0IHJhd1NpZ25hdHVyZSA9IGRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIGhhc2hUeXBlcy5zaWcpO1xuICByZXR1cm4gc2VjcDI1NmsxLnZlcmlmeShyYXdTaWduYXR1cmUsIGJ5dGVzSGFzaCwga2V5LnRvSGV4KCkpO1xufVxuXG4vKipcbiAqIFVzZWZ1bCB3cmFwcGVyIHRvIGNyZWF0ZSB0aGUgZ2VuZXJpYyBtdWx0aXNpZyBjb250cmFjdCBkYXRhIHRvIHNpZ24gd2hlbiBtb3ZpbmcgZnVuZHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyBUaGUgd2FsbGV0IGNvbnRyYWN0IGFkZHJlc3Mgd2l0aCB0aGUgZnVuZHMgdG8gd2l0aGRyYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbkFkZHJlc3MgVGhlIGFkZHJlc3MgdG8gdHJhbnNmZXIgdGhlIGZ1bmRzIHRvXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBtdXRleiB0byB0cmFuc2ZlclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0Q291bnRlciBXYWxsZXQgY291bnRlciB0byB1c2UgaW4gdGhlIHRyYW5zYWN0aW9uXG4gKiBAcmV0dXJucyB7YW55fSBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIE1pY2hlbHNvbiBzY3JpcHQgdG8gc2lnbiBhbmQgYXBwcm92ZSBhIHRyYW5zZmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZURhdGFUb1NpZ24oXG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgYW1vdW50OiBzdHJpbmcsXG4gIGNvbnRyYWN0Q291bnRlcjogc3RyaW5nXG4pOiBhbnkge1xuICBpZiAoIWlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyhjb250cmFjdEFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MgJyArIGNvbnRyYWN0QWRkcmVzcyArICcuIEFuIG9yaWdpbmF0ZWQgYWNjb3VudCBhZGRyZXNzIHdhcyBleHBlY3RlZCcpO1xuICB9XG4gIGlmICghaXNWYWxpZEFkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzICcgKyBkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICB9XG4gIHJldHVybiBnZW5lcmljTXVsdGlzaWdEYXRhVG9TaWduKGNvbnRyYWN0QWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzLCBhbW91bnQsIGNvbnRyYWN0Q291bnRlcik7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgaGFzaCBvZiB0aGUgZ2l2ZW4gdHlwZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIHN0cmluZyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJvdmlkZWQgaGFzaFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSGFzaChoYXNoOiBzdHJpbmcsIGhhc2hUeXBlOiBIYXNoVHlwZSk6IGJvb2xlYW4ge1xuICAvLyBWYWxpZGF0ZSBlbmNvZGluZ1xuICBsZXQgZGVjb2RlZEhhc2g7XG4gIHRyeSB7XG4gICAgZGVjb2RlZEhhc2ggPSBiYXNlNThjaGVjay5kZWNvZGUoaGFzaCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzaFByZWZpeCA9IGRlY29kZWRIYXNoLnNsaWNlKDAsIGhhc2hUeXBlLnByZWZpeC5sZW5ndGgpO1xuXG4gIC8vIENoZWNrIHByZWZpeFxuICBpZiAoIWhhc2hQcmVmaXguZXF1YWxzKEJ1ZmZlci5mcm9tKGhhc2hUeXBlLnByZWZpeCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgbGVuZ3RoXG4gIGNvbnN0IGhhc2hMZW5ndGggPSBkZWNvZGVkSGFzaC5sZW5ndGggLSBoYXNoUHJlZml4Lmxlbmd0aDtcbiAgcmV0dXJuIGhhc2hMZW5ndGggPT09IGhhc2hUeXBlLmJ5dGVMZW5ndGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1ZhbGlkSW1wbGljaXRBZGRyZXNzKGhhc2gpIHx8IGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5LVCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgaW1wbGljaXQgYWNjb3VudCBhZGRyZXNzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSB0aGUgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSW1wbGljaXRBZGRyZXNzKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnR6MSkgfHwgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnR6MikgfHwgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnR6Myk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3Mgb3JpZ2luYXRlZCBhY2NvdW50IGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIHRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyhoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5LVCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3Mgc2lnbmF0dXJlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSB0aGUgc2lnbmF0dXJlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTaWduYXR1cmUoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLmVkc2lnKSB8fFxuICAgIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5zcHNpZzEpIHx8XG4gICAgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnAyc2lnKSB8fFxuICAgIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5zaWcpXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgcHVibGljIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgVGhlIHB1YmxpYyBrZXkgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlzVmFsaWRIYXNoKHB1YmxpY0tleSwgaGFzaFR5cGVzLnNwcGspIHx8XG4gICAgaXNWYWxpZEhhc2gocHVibGljS2V5LCBoYXNoVHlwZXMucDJwaykgfHxcbiAgICBpc1ZhbGlkSGFzaChwdWJsaWNLZXksIGhhc2hUeXBlcy5lZHBrKSB8fFxuICAgIGlzVmFsaWRYcHViKHB1YmxpY0tleSkgLy8geHB1YnMgYXJlIHZhbGlkIHRvby5cbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBUZXpvcyBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRlS2V5IFRoZSBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZhbGlkSGFzaChwcml2YXRlS2V5LCBoYXNoVHlwZXMuZWRlc2spIHx8XG4gICAgaXNWYWxpZEhhc2gocHJpdmF0ZUtleSwgaGFzaFR5cGVzLmVkc2spIHx8XG4gICAgaXNWYWxpZEhhc2gocHJpdmF0ZUtleSwgaGFzaFR5cGVzLnNwc2spIHx8XG4gICAgaXNWYWxpZEhhc2gocHJpdmF0ZUtleSwgaGFzaFR5cGVzLnAyc2spXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgYmxvY2sgaGFzaFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEJsb2NrSGFzaChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5iKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBUZXpvcyB0cmFuc2FjdGlvbiBoYXNoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSB0aGUgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHJhbnNhY3Rpb25IYXNoKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLm8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIFRlem9zIGtleSBnaXZlbiBhIHByZWZpeFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIGtleSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJvdmlkZWQgaGFzaFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkS2V5KGhhc2g6IHN0cmluZywgaGFzaFR5cGU6IEhhc2hUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1ZhbGlkSGFzaChoYXNoLCBoYXNoVHlwZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcmlnaW5hbCBrZXkgZm9ybSB0aGUgdGV4dCB3aXRob3V0IHRoZSBnaXZlbiBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSBiYXNlNTggZW5jb2RlZCBrZXkgd2l0aCBhIFRlem9zIHByZWZpeFxuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJvdmlkZWQgaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn0gdGhlIG9yaWdpbmFsIGRlY29kZWQga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVLZXkoaGFzaDogc3RyaW5nLCBoYXNoVHlwZTogSGFzaFR5cGUpOiBCdWZmZXIge1xuICBpZiAoIWlzVmFsaWRLZXkoaGFzaCwgaGFzaFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwcml2YXRlIGtleScpO1xuICB9XG4gIGNvbnN0IGRlY29kZWRQcnYgPSBiYXNlNThjaGVjay5kZWNvZGUoaGFzaCk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShkZWNvZGVkUHJ2LnNsaWNlKGhhc2hUeXBlLnByZWZpeC5sZW5ndGgsIGRlY29kZWRQcnYubGVuZ3RoKSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgc2lnbmF0dXJlIGZyb20gYSBUZXpvcyBlbmNvZGVkIG9uZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIFRlem9zIHNpZ25hdHVyZXMgcHJlZml4ZWQgd2l0aCBzaWcsIGVkc2lnLCBwMnNpZyBvciBzcHNpZ1xuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgVGhlIHByZWZpeCBvZiByZW1vdmVcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFRoZSBkZWNvZGVkIHNpZ25hdHVyZSB3aXRob3V0IHByZWZpeFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nLCBoYXNoVHlwZTogSGFzaFR5cGUpOiBCdWZmZXIge1xuICBpZiAoIWlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc2lnbmF0dXJlJyk7XG4gIH1cbiAgY29uc3QgZGVjb2RlZFBydiA9IGJhc2U1OGNoZWNrLmRlY29kZShzaWduYXR1cmUpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGVjb2RlZFBydi5zbGljZShoYXNoVHlwZS5wcmVmaXgubGVuZ3RoLCBkZWNvZGVkUHJ2Lmxlbmd0aCkpO1xufVxuXG4vLyBCYXNlNThDaGVjayBpcyB1c2VkIGZvciBlbmNvZGluZ1xuLy8gaGFzaGVkVHlwZXMgaXMgdXNlZCB0byB2YWxpZGF0ZSBoYXNoZXMgYnkgdHlwZSwgYnkgY2hlY2tpbmcgdGhlaXIgcHJlZml4IGFuZFxuLy8gdGhlIGxlbmd0aCBvZiB0aGUgQnVmZmVyIG9idGFpbmVkIGJ5IGRlY29kaW5nIHRoZSBoYXNoIChleGNsdWRpbmcgdGhlIHByZWZpeClcbmV4cG9ydCBjb25zdCBoYXNoVHlwZXMgPSB7XG4gIC8qIDIwIGJ5dGVzIGxvbmcgKi9cbiAgLy8gZWQyNTUxOSBwdWJsaWMga2V5IGhhc2hcbiAgdHoxOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNiwgMTYxLCAxNTldKSxcbiAgICBieXRlTGVuZ3RoOiAyMCxcbiAgfSxcbiAgLy8gc2VjcDI1NmsxIHB1YmxpYyBrZXkgaGFzaFxuICB0ejI6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFs2LCAxNjEsIDE2MV0pLFxuICAgIGJ5dGVMZW5ndGg6IDIwLFxuICB9LFxuICAvLyBwMjU2IHB1YmxpYyBrZXkgaGFzaFxuICB0ejM6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFs2LCAxNjEsIDE2NF0pLFxuICAgIGJ5dGVMZW5ndGg6IDIwLFxuICB9LFxuICBLVDoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzIsIDkwLCAxMjFdKSxcbiAgICBieXRlTGVuZ3RoOiAyMCxcbiAgfSxcbiAgLyogMzIgYnl0ZXMgbG9uZyAqL1xuICAvLyBlZDI1NTE5IHB1YmxpYyBrZXlcbiAgZWRwazoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzEzLCAxNSwgMzcsIDIxN10pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBlZDI1NTE5IHNlY3JldCBrZXlcbiAgZWRzazI6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFsxMywgMTUsIDU4LCA3XSksXG4gICAgYnl0ZUxlbmd0aDogMzIsXG4gIH0sXG4gIC8vIHNlY3AyNTZrMSBzZWNyZXQga2V5XG4gIHNwc2s6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFsxNywgMTYyLCAyMjQsIDIwMV0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBwMjU2IHNlY3JldCBrZXlcbiAgcDJzazoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzE2LCA4MSwgMjM4LCAxODldKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gYmxvY2sgaGFzaFxuICBiOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbMSwgNTJdKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gb3BlcmF0aW9uIGhhc2hcbiAgbzoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzUsIDExNl0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBvcGVyYXRpb24gbGlzdCBoYXNoXG4gIExvOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbMTMzLCAyMzNdKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gb3BlcmF0aW9uIGxpc3QgbGlzdCBoYXNoXG4gIExMbzoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzI5LCAxNTksIDEwOV0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBwcm90b2NvbCBoYXNoXG4gIFA6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFsyLCAxNzBdKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gY29udGV4dCBoYXNoXG4gIENvOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNzksIDE3OV0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvKiAzMyBieXRlcyBsb25nICovXG4gIC8vIHNlY3AyNTZrMSBwdWJsaWMga2V5XG4gIHNwcGs6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFszLCAyNTQsIDIyNiwgODZdKSxcbiAgICBieXRlTGVuZ3RoOiAzMyxcbiAgfSxcbiAgLy8gcDI1NiBwdWJsaWMga2V5XG4gIHAycGs6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFszLCAxNzgsIDEzOSwgMTI3XSksXG4gICAgYnl0ZUxlbmd0aDogMzMsXG4gIH0sXG4gIC8qIDU2IGJ5dGVzIGxvbmcgKi9cbiAgLy8gZWQyNTUxOSBlbmNyeXB0ZWQgc2VlZFxuICBlZGVzazoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzcsIDkwLCA2MCwgMTc5LCA0MV0pLFxuICAgIGJ5dGVMZW5ndGg6IDU2LFxuICB9LFxuICAvKiA2MyBieXRlcyBsb25nICovXG4gIC8vIGVkMjU1MTkgc2VjcmV0IGtleVxuICBlZHNrOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNDMsIDI0NiwgNzgsIDddKSxcbiAgICBieXRlTGVuZ3RoOiA2NCxcbiAgfSxcbiAgLy8gZWQyNTUxOSBzaWduYXR1cmVcbiAgZWRzaWc6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFs5LCAyNDUsIDIwNSwgMTM0LCAxOF0pLFxuICAgIGJ5dGVMZW5ndGg6IDY0LFxuICB9LFxuICAvLyBzZWNwMjU2azEgc2lnbmF0dXJlXG4gIHNwc2lnMToge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzEzLCAxMTUsIDEwMSwgMTksIDYzXSksXG4gICAgYnl0ZUxlbmd0aDogNjQsXG4gIH0sXG4gIC8vIHAyNTZfc2lnbmF0dXJlXG4gIHAyc2lnOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNTQsIDI0MCwgNDQsIDUyXSksXG4gICAgYnl0ZUxlbmd0aDogNjQsXG4gIH0sXG4gIC8vIGdlbmVyaWMgc2lnbmF0dXJlXG4gIHNpZzoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzQsIDEzMCwgNDNdKSxcbiAgICBieXRlTGVuZ3RoOiA2NCxcbiAgfSxcbiAgLyogMTUgYnl0ZXMgbG9uZyAqL1xuICAvLyBuZXR3b3JrIGhhc2hcbiAgTmV0OiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbODcsIDgyLCAwXSksXG4gICAgYnl0ZUxlbmd0aDogMTUsXG4gIH0sXG4gIC8vIG5vbmNlIGhhc2hcbiAgbmNlOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNjksIDIyMCwgMTY5XSksXG4gICAgYnl0ZUxlbmd0aDogMTUsXG4gIH0sXG4gIC8qIDQgYnl0ZXMgbG9uZyAqL1xuICAvLyBjaGFpbiBpZFxuICBpZDoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzE1MywgMTAzXSksXG4gICAgYnl0ZUxlbmd0aDogNCxcbiAgfSxcbn07XG5cbi8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VjYWRsYWJzL3RhcXVpdG8vYmxvYi9tYXN0ZXIvcGFja2FnZXMvdGFxdWl0by9zcmMvY29uc3RhbnRzLnRzXG5cbmV4cG9ydCBlbnVtIERFRkFVTFRfR0FTX0xJTUlUIHtcbiAgREVMRUdBVElPTiA9IDEwNjAwLFxuICBPUklHSU5BVElPTiA9IDEwNjAwLFxuICBUUkFOU0ZFUiA9IDEwNjAwLFxuICBSRVZFQUwgPSAxMDYwMCxcbn1cblxuZXhwb3J0IGVudW0gREVGQVVMVF9GRUUge1xuICBERUxFR0FUSU9OID0gMTI1NyxcbiAgT1JJR0lOQVRJT04gPSAxMDAwMCxcbiAgVFJBTlNGRVIgPSAxMDAwMCxcbiAgUkVWRUFMID0gMTQyMCxcbn1cblxuZXhwb3J0IGVudW0gREVGQVVMVF9TVE9SQUdFX0xJTUlUIHtcbiAgREVMRUdBVElPTiA9IDAsXG4gIE9SSUdJTkFUSU9OID0gMjU3LFxuICBUUkFOU0ZFUiA9IDI1NyxcbiAgUkVWRUFMID0gMCxcbn1cbiJdfQ==
473
+ var TRANSACTION_FEE;
474
+ (function (TRANSACTION_FEE) {
475
+ TRANSACTION_FEE[TRANSACTION_FEE["ORIGINATION"] = 47640] = "ORIGINATION";
476
+ TRANSACTION_FEE[TRANSACTION_FEE["TRANSFER"] = 47640] = "TRANSFER";
477
+ TRANSACTION_FEE[TRANSACTION_FEE["REVEAL"] = 1420] = "REVEAL";
478
+ })(TRANSACTION_FEE || (exports.TRANSACTION_FEE = TRANSACTION_FEE = {}));
479
+ var TRANSACTION_STORAGE_LIMIT;
480
+ (function (TRANSACTION_STORAGE_LIMIT) {
481
+ TRANSACTION_STORAGE_LIMIT[TRANSACTION_STORAGE_LIMIT["ORIGINATION"] = 3000] = "ORIGINATION";
482
+ TRANSACTION_STORAGE_LIMIT[TRANSACTION_STORAGE_LIMIT["TRANSFER"] = 300] = "TRANSFER";
483
+ TRANSACTION_STORAGE_LIMIT[TRANSACTION_STORAGE_LIMIT["REVEAL"] = 5] = "REVEAL";
484
+ })(TRANSACTION_STORAGE_LIMIT || (exports.TRANSACTION_STORAGE_LIMIT = TRANSACTION_STORAGE_LIMIT = {}));
485
+ var TRANSACTION_GAS_LIMIT;
486
+ (function (TRANSACTION_GAS_LIMIT) {
487
+ TRANSACTION_GAS_LIMIT[TRANSACTION_GAS_LIMIT["ORIGINATION"] = 4600] = "ORIGINATION";
488
+ TRANSACTION_GAS_LIMIT[TRANSACTION_GAS_LIMIT["TRANSFER"] = 6000] = "TRANSFER";
489
+ TRANSACTION_GAS_LIMIT[TRANSACTION_GAS_LIMIT["CONTRACT_TRANSFER"] = 20000] = "CONTRACT_TRANSFER";
490
+ TRANSACTION_GAS_LIMIT[TRANSACTION_GAS_LIMIT["REVEAL"] = 1500] = "REVEAL";
491
+ })(TRANSACTION_GAS_LIMIT || (exports.TRANSACTION_GAS_LIMIT = TRANSACTION_GAS_LIMIT = {}));
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxvQ0FNQztBQVFELHdEQUtDO0FBU0QsZ0VBbUJDO0FBVUQsb0JBVUM7QUFXRCwwQ0FvQkM7QUFXRCxnREFhQztBQVNELGtDQWtCQztBQVFELHdDQUVDO0FBUUQsd0RBRUM7QUFRRCw0REFFQztBQVFELDRDQU9DO0FBUUQsNENBT0M7QUFRRCw4Q0FPQztBQVFELDRDQUVDO0FBUUQsd0RBRUM7QUFTRCxnQ0FFQztBQVNELDhCQU1DO0FBU0QsMENBTUM7QUFoVEQsbURBQWlFO0FBQ2pFLDRDQUFpRDtBQUNqRCx1REFBeUM7QUFDekMsdURBQW9EO0FBQ3BELDRFQUF3QztBQUd4QyxtREFBNEQ7QUFFNUQsMENBQTBDO0FBQzdCLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXJEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFlBQVksQ0FBQyxNQUFjLEVBQUUsT0FBZTtJQUMxRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDZCxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUIsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxrQkFBMEI7SUFDckUsTUFBTSw0QkFBTSxDQUFDLEtBQUssQ0FBQztJQUNuQixNQUFNLHdCQUF3QixH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WDtBQUxELFdBQVksV0FBVztJQUNyQiw0REFBaUIsQ0FBQTtJQUNqQiwrREFBbUIsQ0FBQTtJQUNuQix5REFBZ0IsQ0FBQTtJQUNoQixvREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLFdBQVcsMkJBQVgsV0FBVyxRQUt0QjtBQUVELElBQVkscUJBS1g7QUFMRCxXQUFZLHFCQUFxQjtJQUMvQiw2RUFBYyxDQUFBO0lBQ2QsaUZBQWlCLENBQUE7SUFDakIsMkVBQWMsQ0FBQTtJQUNkLHFFQUFVLENBQUE7QUFDWixDQUFDLEVBTFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFLaEM7QUFFRCxJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsdUVBQW1CLENBQUE7SUFDbkIsaUVBQWdCLENBQUE7SUFDaEIsNERBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxlQUFlLCtCQUFmLGVBQWUsUUFJMUI7QUFFRCxJQUFZLHlCQUlYO0FBSkQsV0FBWSx5QkFBeUI7SUFDbkMsMEZBQWtCLENBQUE7SUFDbEIsbUZBQWMsQ0FBQTtJQUNkLDZFQUFVLENBQUE7QUFDWixDQUFDLEVBSlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUFJcEM7QUFFRCxJQUFZLHFCQUtYO0FBTEQsV0FBWSxxQkFBcUI7SUFDL0Isa0ZBQWtCLENBQUE7SUFDbEIsNEVBQWUsQ0FBQTtJQUNmLCtGQUF5QixDQUFBO0lBQ3pCLHdFQUFhLENBQUE7QUFDZixDQUFDLEVBTFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFLaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1ZhbGlkWHB1YiwgU2lnbmluZ0Vycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgSW5NZW1vcnlTaWduZXIgfSBmcm9tICdAdGFxdWl0by9zaWduZXInO1xuaW1wb3J0ICogYXMgYmFzZTU4Y2hlY2sgZnJvbSAnYnM1OGNoZWNrJztcbmltcG9ydCB7IHNlY3AyNTZrMSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvc2VjcDI1NmsxJztcbmltcG9ydCBzb2RpdW0gZnJvbSAnbGlic29kaXVtLXdyYXBwZXJzJztcbmltcG9ydCB7IEhhc2hUeXBlLCBTaWduUmVzcG9uc2UgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgZ2VuZXJpY011bHRpc2lnRGF0YVRvU2lnbiB9IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5cbi8vIEJ5IGRlZmF1bHQsIHVzZSB0aGUgdHJhbnNhY3Rpb25zIHByZWZpeFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FURVJNQVJLID0gbmV3IFVpbnQ4QXJyYXkoWzNdKTtcblxuLyoqXG4gKiBFbmNvZGUgdGhlIHBheWxvYWQgdG8gYmFzZTU4IHdpdGggYSBzcGVjaWZpYyBUZXpvcyBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeCB0byBhZGQgdG8gdGhlIGVuY29kZWQgcGF5bG9hZFxuICogQHBhcmFtIHtCdWZmZXJ9IHBheWxvYWQgdG8gZW5jb2RlXG4gKiBAcmV0dXJucyB7YW55fSBiYXNlNTggcGF5bG9hZCB3aXRoIGEgVGV6b3MgcHJlZml4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNThlbmNvZGUocHJlZml4OiBCdWZmZXIsIHBheWxvYWQ6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGNvbnN0IG4gPSBCdWZmZXIuYWxsb2MocHJlZml4Lmxlbmd0aCArIHBheWxvYWQubGVuZ3RoKTtcbiAgbi5zZXQocHJlZml4KTtcbiAgbi5zZXQocGF5bG9hZCwgcHJlZml4Lmxlbmd0aCk7XG5cbiAgcmV0dXJuIGJhc2U1OGNoZWNrLmVuY29kZShuKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHRyYW5zYWN0aW9uIGlkIGZvciBhIGZvciBhIHNpZ25lZCB0cmFuc2FjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZFRyYW5zYWN0aW9uIFNpZ25lZCB0cmFuc2FjdGlvbiBpbiBoZXhhZGVjaW1hbFxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHRyYW5zYWN0aW9uIGlkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVUcmFuc2FjdGlvbklkKGVuY29kZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICBjb25zdCBlbmNvZGVkVHJhbnNhY3Rpb25CdWZmZXIgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20oZW5jb2RlZFRyYW5zYWN0aW9uLCAnaGV4JykpO1xuICBjb25zdCBvcGVyYXRpb25IYXNoUGF5bG9hZCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goMzIsIGVuY29kZWRUcmFuc2FjdGlvbkJ1ZmZlcik7XG4gIHJldHVybiBiYXNlNThlbmNvZGUoaGFzaFR5cGVzLm8ucHJlZml4LCBCdWZmZXIuZnJvbShvcGVyYXRpb25IYXNoUGF5bG9hZCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiBhIG5ldyBvcmlnaW5hdGVkIGFjY291bnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zYWN0aW9uSWQgVGhlIHRyYW5zYWN0aW9uIGlkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBvcmlnaW5hdGlvbiBvcGVyYXRpb24gaW5zaWRlIHRoZSB0cmFuc2FjdGlvbiAoc3RhcnRzIGF0IDApXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBBbiBvcmlnaW5hdGVkIGFkZHJlc3Mgd2l0aCB0aGUgS1QgcHJlZml4XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVPcmlnaW5hdGVkQWRkcmVzcyh0cmFuc2FjdGlvbklkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9UZXpUZWNoL2V6dHovYmxvYi9jZmRjNGZjZmM4OTFmNGY0ZjA3N2MzMDU2ZjQxNDQ3NmRkZTM2MTBiL3NyYy9tYWluLmpzI0w3NjhcbiAgY29uc3Qgb2IgPSBiYXNlNThjaGVjay5kZWNvZGUodHJhbnNhY3Rpb25JZCkuc2xpY2UoaGFzaFR5cGVzLm8ucHJlZml4Lmxlbmd0aCk7XG5cbiAgbGV0IHR0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgdHQucHVzaChvYltpXSk7XG4gIH1cblxuICB0dCA9IHR0LmNvbmNhdChbXG4gICAgKGluZGV4ICYgMHhmZjAwMDAwMCkgPj4gMjQsXG4gICAgKGluZGV4ICYgMHgwMGZmMDAwMCkgPj4gMTYsXG4gICAgKGluZGV4ICYgMHgwMDAwZmYwMCkgPj4gOCxcbiAgICBpbmRleCAmIDB4MDAwMDAwZmYsXG4gIF0pO1xuXG4gIGF3YWl0IHNvZGl1bS5yZWFkeTtcbiAgY29uc3QgcGF5bG9hZCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goMjAsIG5ldyBVaW50OEFycmF5KHR0KSk7XG4gIHJldHVybiBiYXNlNThlbmNvZGUoaGFzaFR5cGVzLktULnByZWZpeCwgQnVmZmVyLmZyb20ocGF5bG9hZCkpO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgZGF0YSBzaWduaW5nIHVzaW5nIFRlem9zIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIEEgS2V5IFBhaXIgd2l0aCBhIHByaXZhdGUga2V5IHNldFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIGRhdGEgaW4gaGV4YWRlY2ltYWwgdG8gc2lnblxuICogQHBhcmFtIHtVaW50OEFycmF5fSB3YXRlcm1hcmsgTWFnaWMgYnl0ZTogMSBmb3IgYmxvY2ssIDIgZm9yIGVuZG9yc2VtZW50LCAzIGZvciBnZW5lcmljXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduUmVzcG9uc2U+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnbihcbiAga2V5UGFpcjogS2V5UGFpcixcbiAgZGF0YTogc3RyaW5nLFxuICB3YXRlcm1hcms6IFVpbnQ4QXJyYXkgPSBERUZBVUxUX1dBVEVSTUFSS1xuKTogUHJvbWlzZTxTaWduUmVzcG9uc2U+IHtcbiAgaWYgKCFrZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gIH1cbiAgY29uc3Qgc2lnbmVyID0gbmV3IEluTWVtb3J5U2lnbmVyKGtleVBhaXIuZ2V0S2V5cygpLnBydiEpO1xuICByZXR1cm4gc2lnbmVyLnNpZ24oZGF0YSwgd2F0ZXJtYXJrKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGUgc2lnbmF0dXJlIHByb2R1Y2VkIGZvciBhIGdpdmVuIG1lc3NhZ2UgYmVsb25ncyB0byBhIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2UgaW4gaGV4IGZvcm1hdCB0byB2ZXJpZnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgc2VjcDI1NmsxIHB1YmxpYyBrZXkgd2l0aCBcInNwcGtcIiBwcmVmaXggdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmUgd2l0aFxuICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBUZXpvcyBzaWduYXR1cmUgd2l0aCBcInNpZ1wiIHByZWZpeFxuICogQHBhcmFtIHtVaW50OEFycmF5fSB3YXRlcm1hcmsgT3B0aW9uYWwgd2F0ZXJtYXJrIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNpZ25hdHVyZVxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUoXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgcHVibGljS2V5OiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICB3YXRlcm1hcms6IFVpbnQ4QXJyYXkgPSBERUZBVUxUX1dBVEVSTUFSS1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJhd1B1YmxpY0tleSA9IGRlY29kZUtleShwdWJsaWNLZXksIGhhc2hUeXBlcy5zcHBrKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGtleSA9IHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChyYXdQdWJsaWNLZXkpO1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20obWVzc2FnZSwgJ2hleCcpKTtcbiAgLy8gVGV6b3Mgc2lnbmF0dXJlcyBhbHdheXMgaGF2ZSBhIHdhdGVybWFya1xuICBjb25zdCBtZXNzYWdlV2l0aFdhdGVybWFyayA9IG5ldyBVaW50OEFycmF5KHdhdGVybWFyay5sZW5ndGggKyBtZXNzYWdlQnVmZmVyLmxlbmd0aCk7XG4gIG1lc3NhZ2VXaXRoV2F0ZXJtYXJrLnNldCh3YXRlcm1hcmspO1xuICBtZXNzYWdlV2l0aFdhdGVybWFyay5zZXQobWVzc2FnZUJ1ZmZlciwgd2F0ZXJtYXJrLmxlbmd0aCk7XG5cbiAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICBjb25zdCBieXRlc0hhc2ggPSBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKDMyLCBtZXNzYWdlV2l0aFdhdGVybWFyaykpO1xuXG4gIGNvbnN0IHJhd1NpZ25hdHVyZSA9IGRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIGhhc2hUeXBlcy5zaWcpO1xuICByZXR1cm4gc2VjcDI1NmsxLnZlcmlmeShyYXdTaWduYXR1cmUsIGJ5dGVzSGFzaCwga2V5LnRvSGV4KCkpO1xufVxuXG4vKipcbiAqIFVzZWZ1bCB3cmFwcGVyIHRvIGNyZWF0ZSB0aGUgZ2VuZXJpYyBtdWx0aXNpZyBjb250cmFjdCBkYXRhIHRvIHNpZ24gd2hlbiBtb3ZpbmcgZnVuZHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyBUaGUgd2FsbGV0IGNvbnRyYWN0IGFkZHJlc3Mgd2l0aCB0aGUgZnVuZHMgdG8gd2l0aGRyYXdcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbkFkZHJlc3MgVGhlIGFkZHJlc3MgdG8gdHJhbnNmZXIgdGhlIGZ1bmRzIHRvXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBtdXRleiB0byB0cmFuc2ZlclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0Q291bnRlciBXYWxsZXQgY291bnRlciB0byB1c2UgaW4gdGhlIHRyYW5zYWN0aW9uXG4gKiBAcmV0dXJucyB7YW55fSBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIE1pY2hlbHNvbiBzY3JpcHQgdG8gc2lnbiBhbmQgYXBwcm92ZSBhIHRyYW5zZmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZURhdGFUb1NpZ24oXG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgYW1vdW50OiBzdHJpbmcsXG4gIGNvbnRyYWN0Q291bnRlcjogc3RyaW5nXG4pOiBhbnkge1xuICBpZiAoIWlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyhjb250cmFjdEFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MgJyArIGNvbnRyYWN0QWRkcmVzcyArICcuIEFuIG9yaWdpbmF0ZWQgYWNjb3VudCBhZGRyZXNzIHdhcyBleHBlY3RlZCcpO1xuICB9XG4gIGlmICghaXNWYWxpZEFkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzICcgKyBkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICB9XG4gIHJldHVybiBnZW5lcmljTXVsdGlzaWdEYXRhVG9TaWduKGNvbnRyYWN0QWRkcmVzcywgZGVzdGluYXRpb25BZGRyZXNzLCBhbW91bnQsIGNvbnRyYWN0Q291bnRlcik7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgaGFzaCBvZiB0aGUgZ2l2ZW4gdHlwZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIHN0cmluZyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJvdmlkZWQgaGFzaFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSGFzaChoYXNoOiBzdHJpbmcsIGhhc2hUeXBlOiBIYXNoVHlwZSk6IGJvb2xlYW4ge1xuICAvLyBWYWxpZGF0ZSBlbmNvZGluZ1xuICBsZXQgZGVjb2RlZEhhc2g7XG4gIHRyeSB7XG4gICAgZGVjb2RlZEhhc2ggPSBiYXNlNThjaGVjay5kZWNvZGUoaGFzaCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzaFByZWZpeCA9IGRlY29kZWRIYXNoLnNsaWNlKDAsIGhhc2hUeXBlLnByZWZpeC5sZW5ndGgpO1xuXG4gIC8vIENoZWNrIHByZWZpeFxuICBpZiAoIWhhc2hQcmVmaXguZXF1YWxzKEJ1ZmZlci5mcm9tKGhhc2hUeXBlLnByZWZpeCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgbGVuZ3RoXG4gIGNvbnN0IGhhc2hMZW5ndGggPSBkZWNvZGVkSGFzaC5sZW5ndGggLSBoYXNoUHJlZml4Lmxlbmd0aDtcbiAgcmV0dXJuIGhhc2hMZW5ndGggPT09IGhhc2hUeXBlLmJ5dGVMZW5ndGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1ZhbGlkSW1wbGljaXRBZGRyZXNzKGhhc2gpIHx8IGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5LVCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgaW1wbGljaXQgYWNjb3VudCBhZGRyZXNzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSB0aGUgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSW1wbGljaXRBZGRyZXNzKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnR6MSkgfHwgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnR6MikgfHwgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnR6Myk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3Mgb3JpZ2luYXRlZCBhY2NvdW50IGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIHRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyhoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5LVCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3Mgc2lnbmF0dXJlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSB0aGUgc2lnbmF0dXJlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTaWduYXR1cmUoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLmVkc2lnKSB8fFxuICAgIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5zcHNpZzEpIHx8XG4gICAgaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLnAyc2lnKSB8fFxuICAgIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5zaWcpXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgcHVibGljIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgVGhlIHB1YmxpYyBrZXkgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlzVmFsaWRIYXNoKHB1YmxpY0tleSwgaGFzaFR5cGVzLnNwcGspIHx8XG4gICAgaXNWYWxpZEhhc2gocHVibGljS2V5LCBoYXNoVHlwZXMucDJwaykgfHxcbiAgICBpc1ZhbGlkSGFzaChwdWJsaWNLZXksIGhhc2hUeXBlcy5lZHBrKSB8fFxuICAgIGlzVmFsaWRYcHViKHB1YmxpY0tleSkgLy8geHB1YnMgYXJlIHZhbGlkIHRvby5cbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBUZXpvcyBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRlS2V5IFRoZSBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZhbGlkSGFzaChwcml2YXRlS2V5LCBoYXNoVHlwZXMuZWRlc2spIHx8XG4gICAgaXNWYWxpZEhhc2gocHJpdmF0ZUtleSwgaGFzaFR5cGVzLmVkc2spIHx8XG4gICAgaXNWYWxpZEhhc2gocHJpdmF0ZUtleSwgaGFzaFR5cGVzLnNwc2spIHx8XG4gICAgaXNWYWxpZEhhc2gocHJpdmF0ZUtleSwgaGFzaFR5cGVzLnAyc2spXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVGV6b3MgYmxvY2sgaGFzaFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEJsb2NrSGFzaChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWRIYXNoKGhhc2gsIGhhc2hUeXBlcy5iKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBUZXpvcyB0cmFuc2FjdGlvbiBoYXNoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSB0aGUgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHJhbnNhY3Rpb25IYXNoKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNWYWxpZEhhc2goaGFzaCwgaGFzaFR5cGVzLm8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIFRlem9zIGtleSBnaXZlbiBhIHByZWZpeFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gdGhlIGtleSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJvdmlkZWQgaGFzaFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkS2V5KGhhc2g6IHN0cmluZywgaGFzaFR5cGU6IEhhc2hUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1ZhbGlkSGFzaChoYXNoLCBoYXNoVHlwZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcmlnaW5hbCBrZXkgZm9ybSB0aGUgdGV4dCB3aXRob3V0IHRoZSBnaXZlbiBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSBiYXNlNTggZW5jb2RlZCBrZXkgd2l0aCBhIFRlem9zIHByZWZpeFxuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJvdmlkZWQgaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn0gdGhlIG9yaWdpbmFsIGRlY29kZWQga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVLZXkoaGFzaDogc3RyaW5nLCBoYXNoVHlwZTogSGFzaFR5cGUpOiBCdWZmZXIge1xuICBpZiAoIWlzVmFsaWRLZXkoaGFzaCwgaGFzaFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwcml2YXRlIGtleScpO1xuICB9XG4gIGNvbnN0IGRlY29kZWRQcnYgPSBiYXNlNThjaGVjay5kZWNvZGUoaGFzaCk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShkZWNvZGVkUHJ2LnNsaWNlKGhhc2hUeXBlLnByZWZpeC5sZW5ndGgsIGRlY29kZWRQcnYubGVuZ3RoKSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgc2lnbmF0dXJlIGZyb20gYSBUZXpvcyBlbmNvZGVkIG9uZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIFRlem9zIHNpZ25hdHVyZXMgcHJlZml4ZWQgd2l0aCBzaWcsIGVkc2lnLCBwMnNpZyBvciBzcHNpZ1xuICogQHBhcmFtIHtIYXNoVHlwZX0gaGFzaFR5cGUgVGhlIHByZWZpeCBvZiByZW1vdmVcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFRoZSBkZWNvZGVkIHNpZ25hdHVyZSB3aXRob3V0IHByZWZpeFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nLCBoYXNoVHlwZTogSGFzaFR5cGUpOiBCdWZmZXIge1xuICBpZiAoIWlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc2lnbmF0dXJlJyk7XG4gIH1cbiAgY29uc3QgZGVjb2RlZFBydiA9IGJhc2U1OGNoZWNrLmRlY29kZShzaWduYXR1cmUpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGVjb2RlZFBydi5zbGljZShoYXNoVHlwZS5wcmVmaXgubGVuZ3RoLCBkZWNvZGVkUHJ2Lmxlbmd0aCkpO1xufVxuXG4vLyBCYXNlNThDaGVjayBpcyB1c2VkIGZvciBlbmNvZGluZ1xuLy8gaGFzaGVkVHlwZXMgaXMgdXNlZCB0byB2YWxpZGF0ZSBoYXNoZXMgYnkgdHlwZSwgYnkgY2hlY2tpbmcgdGhlaXIgcHJlZml4IGFuZFxuLy8gdGhlIGxlbmd0aCBvZiB0aGUgQnVmZmVyIG9idGFpbmVkIGJ5IGRlY29kaW5nIHRoZSBoYXNoIChleGNsdWRpbmcgdGhlIHByZWZpeClcbmV4cG9ydCBjb25zdCBoYXNoVHlwZXMgPSB7XG4gIC8qIDIwIGJ5dGVzIGxvbmcgKi9cbiAgLy8gZWQyNTUxOSBwdWJsaWMga2V5IGhhc2hcbiAgdHoxOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNiwgMTYxLCAxNTldKSxcbiAgICBieXRlTGVuZ3RoOiAyMCxcbiAgfSxcbiAgLy8gc2VjcDI1NmsxIHB1YmxpYyBrZXkgaGFzaFxuICB0ejI6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFs2LCAxNjEsIDE2MV0pLFxuICAgIGJ5dGVMZW5ndGg6IDIwLFxuICB9LFxuICAvLyBwMjU2IHB1YmxpYyBrZXkgaGFzaFxuICB0ejM6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFs2LCAxNjEsIDE2NF0pLFxuICAgIGJ5dGVMZW5ndGg6IDIwLFxuICB9LFxuICBLVDoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzIsIDkwLCAxMjFdKSxcbiAgICBieXRlTGVuZ3RoOiAyMCxcbiAgfSxcbiAgLyogMzIgYnl0ZXMgbG9uZyAqL1xuICAvLyBlZDI1NTE5IHB1YmxpYyBrZXlcbiAgZWRwazoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzEzLCAxNSwgMzcsIDIxN10pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBlZDI1NTE5IHNlY3JldCBrZXlcbiAgZWRzazI6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFsxMywgMTUsIDU4LCA3XSksXG4gICAgYnl0ZUxlbmd0aDogMzIsXG4gIH0sXG4gIC8vIHNlY3AyNTZrMSBzZWNyZXQga2V5XG4gIHNwc2s6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFsxNywgMTYyLCAyMjQsIDIwMV0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBwMjU2IHNlY3JldCBrZXlcbiAgcDJzazoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzE2LCA4MSwgMjM4LCAxODldKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gYmxvY2sgaGFzaFxuICBiOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbMSwgNTJdKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gb3BlcmF0aW9uIGhhc2hcbiAgbzoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzUsIDExNl0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBvcGVyYXRpb24gbGlzdCBoYXNoXG4gIExvOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbMTMzLCAyMzNdKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gb3BlcmF0aW9uIGxpc3QgbGlzdCBoYXNoXG4gIExMbzoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzI5LCAxNTksIDEwOV0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvLyBwcm90b2NvbCBoYXNoXG4gIFA6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFsyLCAxNzBdKSxcbiAgICBieXRlTGVuZ3RoOiAzMixcbiAgfSxcbiAgLy8gY29udGV4dCBoYXNoXG4gIENvOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNzksIDE3OV0pLFxuICAgIGJ5dGVMZW5ndGg6IDMyLFxuICB9LFxuICAvKiAzMyBieXRlcyBsb25nICovXG4gIC8vIHNlY3AyNTZrMSBwdWJsaWMga2V5XG4gIHNwcGs6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFszLCAyNTQsIDIyNiwgODZdKSxcbiAgICBieXRlTGVuZ3RoOiAzMyxcbiAgfSxcbiAgLy8gcDI1NiBwdWJsaWMga2V5XG4gIHAycGs6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFszLCAxNzgsIDEzOSwgMTI3XSksXG4gICAgYnl0ZUxlbmd0aDogMzMsXG4gIH0sXG4gIC8qIDU2IGJ5dGVzIGxvbmcgKi9cbiAgLy8gZWQyNTUxOSBlbmNyeXB0ZWQgc2VlZFxuICBlZGVzazoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzcsIDkwLCA2MCwgMTc5LCA0MV0pLFxuICAgIGJ5dGVMZW5ndGg6IDU2LFxuICB9LFxuICAvKiA2MyBieXRlcyBsb25nICovXG4gIC8vIGVkMjU1MTkgc2VjcmV0IGtleVxuICBlZHNrOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNDMsIDI0NiwgNzgsIDddKSxcbiAgICBieXRlTGVuZ3RoOiA2NCxcbiAgfSxcbiAgLy8gZWQyNTUxOSBzaWduYXR1cmVcbiAgZWRzaWc6IHtcbiAgICBwcmVmaXg6IEJ1ZmZlci5mcm9tKFs5LCAyNDUsIDIwNSwgMTM0LCAxOF0pLFxuICAgIGJ5dGVMZW5ndGg6IDY0LFxuICB9LFxuICAvLyBzZWNwMjU2azEgc2lnbmF0dXJlXG4gIHNwc2lnMToge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzEzLCAxMTUsIDEwMSwgMTksIDYzXSksXG4gICAgYnl0ZUxlbmd0aDogNjQsXG4gIH0sXG4gIC8vIHAyNTZfc2lnbmF0dXJlXG4gIHAyc2lnOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNTQsIDI0MCwgNDQsIDUyXSksXG4gICAgYnl0ZUxlbmd0aDogNjQsXG4gIH0sXG4gIC8vIGdlbmVyaWMgc2lnbmF0dXJlXG4gIHNpZzoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzQsIDEzMCwgNDNdKSxcbiAgICBieXRlTGVuZ3RoOiA2NCxcbiAgfSxcbiAgLyogMTUgYnl0ZXMgbG9uZyAqL1xuICAvLyBuZXR3b3JrIGhhc2hcbiAgTmV0OiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbODcsIDgyLCAwXSksXG4gICAgYnl0ZUxlbmd0aDogMTUsXG4gIH0sXG4gIC8vIG5vbmNlIGhhc2hcbiAgbmNlOiB7XG4gICAgcHJlZml4OiBCdWZmZXIuZnJvbShbNjksIDIyMCwgMTY5XSksXG4gICAgYnl0ZUxlbmd0aDogMTUsXG4gIH0sXG4gIC8qIDQgYnl0ZXMgbG9uZyAqL1xuICAvLyBjaGFpbiBpZFxuICBpZDoge1xuICAgIHByZWZpeDogQnVmZmVyLmZyb20oWzE1MywgMTAzXSksXG4gICAgYnl0ZUxlbmd0aDogNCxcbiAgfSxcbn07XG5cbi8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VjYWRsYWJzL3RhcXVpdG8vYmxvYi9tYXN0ZXIvcGFja2FnZXMvdGFxdWl0by9zcmMvY29uc3RhbnRzLnRzXG5cbmV4cG9ydCBlbnVtIERFRkFVTFRfR0FTX0xJTUlUIHtcbiAgREVMRUdBVElPTiA9IDEwNjAwLFxuICBPUklHSU5BVElPTiA9IDEwNjAwLFxuICBUUkFOU0ZFUiA9IDEwNjAwLFxuICBSRVZFQUwgPSAxMDYwMCxcbn1cblxuZXhwb3J0IGVudW0gREVGQVVMVF9GRUUge1xuICBERUxFR0FUSU9OID0gMTI1NyxcbiAgT1JJR0lOQVRJT04gPSAxMDAwMCxcbiAgVFJBTlNGRVIgPSAxMDAwMCxcbiAgUkVWRUFMID0gMTQyMCxcbn1cblxuZXhwb3J0IGVudW0gREVGQVVMVF9TVE9SQUdFX0xJTUlUIHtcbiAgREVMRUdBVElPTiA9IDAsXG4gIE9SSUdJTkFUSU9OID0gMjU3LFxuICBUUkFOU0ZFUiA9IDI1NyxcbiAgUkVWRUFMID0gMCxcbn1cblxuZXhwb3J0IGVudW0gVFJBTlNBQ1RJT05fRkVFIHtcbiAgT1JJR0lOQVRJT04gPSA0NzY0MCxcbiAgVFJBTlNGRVIgPSA0NzY0MCxcbiAgUkVWRUFMID0gMTQyMCxcbn1cblxuZXhwb3J0IGVudW0gVFJBTlNBQ1RJT05fU1RPUkFHRV9MSU1JVCB7XG4gIE9SSUdJTkFUSU9OID0gMzAwMCxcbiAgVFJBTlNGRVIgPSAzMDAsXG4gIFJFVkVBTCA9IDUsXG59XG5cbmV4cG9ydCBlbnVtIFRSQU5TQUNUSU9OX0dBU19MSU1JVCB7XG4gIE9SSUdJTkFUSU9OID0gNDYwMCxcbiAgVFJBTlNGRVIgPSA2MDAwLFxuICBDT05UUkFDVF9UUkFOU0ZFUiA9IDIwMDAwLFxuICBSRVZFQUwgPSAxNTAwLFxufVxuIl19
package/dist/src/xtz.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { BaseCoin, BitGoBase, ParsedTransaction, ParseTransactionOptions, KeyPair as SdkCoreKeyPair, SignedTransaction, TransactionExplanation, VerifyAddressOptions, VerifyTransactionOptions, MultisigType, AuditDecryptedKeyParams } from '@bitgo-beta/sdk-core';
2
2
  import { CoinFamily, BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
3
3
  import { Interface } from './lib';
4
+ import { RecoverOptions } from './lib/iface';
4
5
  export declare class Xtz extends BaseCoin {
5
6
  protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
6
7
  constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
@@ -61,6 +62,48 @@ export declare class Xtz extends BaseCoin {
61
62
  * @param message
62
63
  */
63
64
  signMessage(key: SdkCoreKeyPair, message: string | Buffer): Promise<Buffer>;
65
+ /**
66
+ * Method to validate recovery params
67
+ * @param {RecoverOptions} params
68
+ * @returns {void}
69
+ */
70
+ validateRecoveryParams(params: RecoverOptions): void;
71
+ /**
72
+ * Make a query to blockchain explorer for information such as balance, token balance, solidity calls
73
+ * @param query {Object} key-value pairs of parameters to append after /api
74
+ * @param apiKey {string} optional API key to use instead of the one from the environment
75
+ * @returns {Object} response from the blockchain explorer
76
+ */
77
+ recoveryBlockchainExplorerQuery(params: {
78
+ actionPath: string;
79
+ address?: string;
80
+ action?: string;
81
+ }, apiKey?: string): Promise<unknown>;
82
+ /**
83
+ * Queries public block explorer to get the next XTZ address details
84
+ * @param {string} address
85
+ * @param {string} apiKey - optional API key to use instead of the one from the environment
86
+ * @returns {Promise<any>}
87
+ */
88
+ getAddressDetails(address: string, apiKey?: string): Promise<any>;
89
+ /**
90
+ * Query explorer for the balance of an address
91
+ * @param {String} address - the XTZ base/receive address
92
+ * @param {String} apiKey - optional API key to use instead of the one from the environment
93
+ * @returns {BigNumber} address balance
94
+ */
95
+ queryAddressBalance(address: string, apiKey?: string): Promise<any>;
96
+ /**
97
+ * Generate and pack the data to sign for each transfer.
98
+ *
99
+ * @param {String} contractAddress Wallet address to withdraw funds from
100
+ * @param {String} contractCounter Wallet internal counter
101
+ * @param {String} destination Tezos address to send the funds to
102
+ * @param {String} amount Number of mutez to move
103
+ * @param {IMSClient} imsClient Existing IMS client connection to reuse
104
+ * @return {String} data to sign in hex format
105
+ */
106
+ packDataToSign(contractAddress: any, contractCounter: any, destination: any, amount: any): Promise<any>;
64
107
  /**
65
108
  * Builds a funds recovery transaction without BitGo.
66
109
  * We need to do three queries during this:
@@ -69,7 +112,7 @@ export declare class Xtz extends BaseCoin {
69
112
  * 3) Send signed build - send our signed build to a public node
70
113
  * @param params
71
114
  */
72
- recover(params: any): Promise<any>;
115
+ recover(params: RecoverOptions): Promise<unknown>;
73
116
  /**
74
117
  * Explain a Tezos transaction from txHex
75
118
  * @param params
@@ -1 +1 @@
1
- {"version":3,"file":"xtz.d.ts","sourceRoot":"","sources":["../../src/xtz.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAER,SAAS,EAET,iBAAiB,EACjB,uBAAuB,EACvB,OAAO,IAAI,cAAc,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,EAEZ,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAS,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,SAAS,EAAsC,MAAM,OAAO,CAAC;AAEtE,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,UAAU;IAIvB,WAAW,IAAI,MAAM;IAIrB,aAAa;IAIb,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,2BAA2B,IAAI,OAAO;IAItC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc;IAcxC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI7E,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/D,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3E;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAMvE;;;;;;;OAOG;IACG,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6B9F;;;;;OAKG;IACG,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjF;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIxC;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA4BtG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,kBAAkB;IAClB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB;CAGlD"}
1
+ {"version":3,"file":"xtz.d.ts","sourceRoot":"","sources":["../../src/xtz.ts"],"names":[],"mappings":"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"}
package/dist/src/xtz.js CHANGED
@@ -9,6 +9,8 @@ const secp256k1_1 = require("@bitgo-beta/secp256k1");
9
9
  const statics_1 = require("@bitgo-beta/statics");
10
10
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
11
11
  const lib_1 = require("./lib");
12
+ const utils_1 = require("./lib/utils");
13
+ const superagent_1 = __importDefault(require("superagent"));
12
14
  class Xtz extends sdk_core_1.BaseCoin {
13
15
  constructor(bitgo, staticsCoin) {
14
16
  super(bitgo);
@@ -148,6 +150,102 @@ class Xtz extends sdk_core_1.BaseCoin {
148
150
  const signatureData = await lib_1.Utils.sign(keyPair, messageHex);
149
151
  return Buffer.from(signatureData.sig);
150
152
  }
153
+ /**
154
+ * Method to validate recovery params
155
+ * @param {RecoverOptions} params
156
+ * @returns {void}
157
+ */
158
+ validateRecoveryParams(params) {
159
+ if (params.userKey === undefined) {
160
+ throw new Error('missing userKey');
161
+ }
162
+ if (params.backupKey === undefined) {
163
+ throw new Error('missing backupKey');
164
+ }
165
+ if (!params.isUnsignedSweep && params.walletPassphrase === undefined && !params.userKey.startsWith('xpub')) {
166
+ throw new Error('missing wallet passphrase');
167
+ }
168
+ if (params.walletContractAddress === undefined || !this.isValidAddress(params.walletContractAddress)) {
169
+ throw new Error('invalid walletContractAddress');
170
+ }
171
+ if (params.recoveryDestination === undefined || !this.isValidAddress(params.recoveryDestination)) {
172
+ throw new Error('invalid recoveryDestination');
173
+ }
174
+ }
175
+ /**
176
+ * Make a query to blockchain explorer for information such as balance, token balance, solidity calls
177
+ * @param query {Object} key-value pairs of parameters to append after /api
178
+ * @param apiKey {string} optional API key to use instead of the one from the environment
179
+ * @returns {Object} response from the blockchain explorer
180
+ */
181
+ async recoveryBlockchainExplorerQuery(params, apiKey) {
182
+ const response = await superagent_1.default.get(`${sdk_core_1.common.Environments[this.bitgo.getEnv()].xtzExplorerBaseUrl}/v1/${params.actionPath}${params.address ? '/' + params.address : ''}${params.action ? '/' + params.action : ''}${apiKey ? `?apikey=${apiKey}` : ''}`);
183
+ if (!response.ok) {
184
+ throw new Error('could not reach TZKT');
185
+ }
186
+ if (response.status === 429) {
187
+ throw new Error('TZKT rate limit reached');
188
+ }
189
+ return response.body;
190
+ }
191
+ /**
192
+ * Queries public block explorer to get the next XTZ address details
193
+ * @param {string} address
194
+ * @param {string} apiKey - optional API key to use instead of the one from the environment
195
+ * @returns {Promise<any>}
196
+ */
197
+ async getAddressDetails(address, apiKey) {
198
+ const result = await this.recoveryBlockchainExplorerQuery({
199
+ actionPath: 'accounts',
200
+ address,
201
+ }, apiKey);
202
+ if (!result) {
203
+ throw new Error(`Unable to find details for ${address}`);
204
+ }
205
+ return result;
206
+ }
207
+ /**
208
+ * Query explorer for the balance of an address
209
+ * @param {String} address - the XTZ base/receive address
210
+ * @param {String} apiKey - optional API key to use instead of the one from the environment
211
+ * @returns {BigNumber} address balance
212
+ */
213
+ async queryAddressBalance(address, apiKey) {
214
+ const result = await this.recoveryBlockchainExplorerQuery({
215
+ actionPath: (0, utils_1.isValidOriginatedAddress)(address) ? 'contracts' : 'accounts',
216
+ address,
217
+ }, apiKey);
218
+ // throw if the result does not exist or the result is not a valid number
219
+ if (!result || !result.balance) {
220
+ throw new Error(`Could not obtain address balance for ${address} from the explorer`);
221
+ }
222
+ return new bignumber_js_1.default(result.balance, 10);
223
+ }
224
+ /**
225
+ * Generate and pack the data to sign for each transfer.
226
+ *
227
+ * @param {String} contractAddress Wallet address to withdraw funds from
228
+ * @param {String} contractCounter Wallet internal counter
229
+ * @param {String} destination Tezos address to send the funds to
230
+ * @param {String} amount Number of mutez to move
231
+ * @param {IMSClient} imsClient Existing IMS client connection to reuse
232
+ * @return {String} data to sign in hex format
233
+ */
234
+ async packDataToSign(contractAddress, contractCounter, destination, amount) {
235
+ const dataToSign = (0, utils_1.generateDataToSign)(contractAddress, destination, amount, contractCounter);
236
+ const xtzRpcUrl = `${sdk_core_1.common.Environments[this.bitgo.getEnv()].xtzRpcUrl}/chains/main/blocks/head/helpers/scripts/pack_data`;
237
+ if (!xtzRpcUrl) {
238
+ throw new Error('XTZ RPC url not found');
239
+ }
240
+ const response = await superagent_1.default.post(xtzRpcUrl).send(dataToSign);
241
+ if (response.status === 404) {
242
+ throw new Error(`unable to pack data to sign ${response.status}: ${response.body.error.message}`);
243
+ }
244
+ else if (response.status !== 200) {
245
+ throw new Error(`unexpected IMS response status ${response.status}: ${response.body.error.message}`);
246
+ }
247
+ return response.body.packed;
248
+ }
151
249
  /**
152
250
  * Builds a funds recovery transaction without BitGo.
153
251
  * We need to do three queries during this:
@@ -157,7 +255,97 @@ class Xtz extends sdk_core_1.BaseCoin {
157
255
  * @param params
158
256
  */
159
257
  async recover(params) {
160
- throw new sdk_core_1.MethodNotImplementedError();
258
+ this.validateRecoveryParams(params);
259
+ // Clean up whitespace from entered values
260
+ const backupKey = params.backupKey.replace(/\s/g, '');
261
+ const userAddressDetails = await this.getAddressDetails(params.walletContractAddress, params.apiKey);
262
+ if (!userAddressDetails) {
263
+ throw new Error('Unable to fetch user address details');
264
+ }
265
+ // Decrypt backup private key and get address
266
+ let backupPrv;
267
+ try {
268
+ backupPrv = this.bitgo.decrypt({
269
+ input: backupKey,
270
+ password: params.walletPassphrase,
271
+ });
272
+ }
273
+ catch (e) {
274
+ throw new Error(`Error decrypting backup keychain: ${e.message}`);
275
+ }
276
+ const keyPair = new lib_1.KeyPair({ prv: backupPrv });
277
+ const backupSigningKey = keyPair.getKeys().prv;
278
+ if (!backupSigningKey) {
279
+ throw new Error('no private key');
280
+ }
281
+ const backupKeyAddress = keyPair.getAddress();
282
+ const backupAddressDetails = await this.getAddressDetails(backupKeyAddress, params.apiKey || '');
283
+ if (!backupAddressDetails.counter || !backupAddressDetails.balance) {
284
+ throw new Error(`Missing required detail(s): counter, balance`);
285
+ }
286
+ const backupKeyNonce = new bignumber_js_1.default(backupAddressDetails.counter + 1, 10);
287
+ // get balance of backupKey to ensure funds are available to pay fees
288
+ const backupKeyBalance = new bignumber_js_1.default(backupAddressDetails.balance, 10);
289
+ const gasLimit = (0, utils_1.isValidOriginatedAddress)(params.recoveryDestination)
290
+ ? utils_1.TRANSACTION_GAS_LIMIT.CONTRACT_TRANSFER
291
+ : utils_1.TRANSACTION_GAS_LIMIT.TRANSFER;
292
+ const gasPrice = utils_1.TRANSACTION_FEE.TRANSFER;
293
+ // Checking whether back up key address has sufficient funds for transaction
294
+ if (backupKeyBalance.lt(gasPrice)) {
295
+ const weiToGwei = 10 ** 6;
296
+ throw new Error(`Backup key address ${backupKeyAddress} has balance ${(backupKeyBalance.toNumber() / weiToGwei).toString()} Gwei.` +
297
+ `This address must have a balance of at least ${(gasPrice / weiToGwei).toString()}` +
298
+ ` Gwei to perform recoveries. Try sending some funds to this address then retry.`);
299
+ }
300
+ // get balance of sender address
301
+ if (!userAddressDetails.balance || userAddressDetails.balance === 0) {
302
+ throw new Error('No funds to recover from source address');
303
+ }
304
+ const txAmount = userAddressDetails.balance;
305
+ if (new bignumber_js_1.default(txAmount).isLessThanOrEqualTo(0)) {
306
+ throw new Error('Wallet does not have enough funds to recover');
307
+ }
308
+ const feeInfo = {
309
+ fee: new bignumber_js_1.default(utils_1.TRANSACTION_FEE.TRANSFER),
310
+ gasLimit: new bignumber_js_1.default(gasLimit),
311
+ storageLimit: new bignumber_js_1.default(utils_1.TRANSACTION_STORAGE_LIMIT.TRANSFER),
312
+ };
313
+ const txBuilder = new lib_1.TransactionBuilder(statics_1.coins.get(this.getChain()));
314
+ txBuilder.type(sdk_core_1.TransactionType.Send);
315
+ txBuilder.source(backupKeyAddress);
316
+ // Used to set the branch for the transaction
317
+ const chainHead = await this.recoveryBlockchainExplorerQuery({
318
+ actionPath: 'head',
319
+ });
320
+ if (!chainHead || !chainHead.hash) {
321
+ throw new Error('Unable to fetch chain head');
322
+ }
323
+ txBuilder.branch(chainHead.hash);
324
+ if (!backupAddressDetails.revealed) {
325
+ feeInfo.fee = feeInfo.fee.plus(utils_1.TRANSACTION_FEE.REVEAL);
326
+ feeInfo.gasLimit = feeInfo.gasLimit.plus(utils_1.TRANSACTION_GAS_LIMIT.REVEAL);
327
+ feeInfo.storageLimit = feeInfo.storageLimit.plus(utils_1.TRANSACTION_STORAGE_LIMIT.REVEAL);
328
+ backupKeyNonce.plus(1);
329
+ const publicKeyToReveal = keyPair.getKeys();
330
+ txBuilder.publicKeyToReveal(publicKeyToReveal.pub);
331
+ }
332
+ txBuilder.counter(backupKeyNonce.toString());
333
+ const packedDataToSign = await this.packDataToSign(params.walletContractAddress, backupKeyNonce.toString(), params.recoveryDestination, txAmount?.toString());
334
+ txBuilder
335
+ .transfer(txAmount?.toString())
336
+ .from(params.walletContractAddress)
337
+ .to(params.recoveryDestination)
338
+ .counter(backupKeyNonce.toString())
339
+ .fee(utils_1.TRANSACTION_FEE.TRANSFER.toString())
340
+ .storageLimit(utils_1.TRANSACTION_STORAGE_LIMIT.TRANSFER.toString())
341
+ .gasLimit(gasLimit.toString())
342
+ .dataToSign(packedDataToSign);
343
+ txBuilder.sign({ key: backupSigningKey });
344
+ const signedTx = await txBuilder.build();
345
+ return {
346
+ id: signedTx.id,
347
+ tx: signedTx.toBroadcastFormat(),
348
+ };
161
349
  }
162
350
  /**
163
351
  * Explain a Tezos transaction from txHex
@@ -197,4 +385,4 @@ class Xtz extends sdk_core_1.BaseCoin {
197
385
  }
198
386
  }
199
387
  exports.Xtz = Xtz;
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHR6LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3h0ei50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFlOEI7QUFDOUIscURBQThDO0FBQzlDLGlEQUFxRjtBQUNyRixnRUFBcUM7QUFDckMsK0JBQXNFO0FBRXRFLE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBRy9CLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sd0JBQWEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FF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RSxDQUFDLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87WUFDbkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPO2lCQUNyQixNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLHNCQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ25GLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixhQUFhLEVBQUUsRUFBRSxFQUFFLDRDQUE0QztZQUMvRCxZQUFZLEVBQUUsR0FBRyxFQUFFLG9DQUFvQztZQUN2RCxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDYixDQUFDO0lBQ1gsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sV0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsTUFBK0I7UUFDL0MsTUFBTSxJQUFJLG9DQUF5QixFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBek5ELGtCQXlOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VDb2luLFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCaXRHb0Jhc2UsXG4gIE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgS2V5UGFpciBhcyBTZGtDb3JlS2V5UGFpcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIE11bHRpc2lnVHlwZSxcbiAgbXVsdGlzaWdUeXBlcyxcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IENvaW5GYW1pbHksIGNvaW5zLCBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEludGVyZmFjZSwgS2V5UGFpciwgVHJhbnNhY3Rpb25CdWlsZGVyLCBVdGlscyB9IGZyb20gJy4vbGliJztcblxuZXhwb3J0IGNsYXNzIFh0eiBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBYdHooYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBYdHogc3VwcG9ydHMgdHJhbnNmZXJzIHRvIGNvbnNvbGlkYXRlIGJhbGFuY2UgZnJvbSByZWNlaXZlIGFkZHJlc3MgdG8gdGhlIHdhbGxldCBjb250cmFjdFxuICAgKi9cbiAgYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGlzIGEgdmFsaWQgYmFzZTU4IG9yIGhleCBhZGRyZXNzXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIFRlem9zIGtleSBwYWlyIC0gQml0R28geHB1YiBmb3JtYXRcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHhwdWIsIHhwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogU2RrQ29yZUtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcblxuICAgIGlmICgha2V5cy54cHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgeHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnhwdWIsXG4gICAgICBwcnY6IGtleXMueHBydixcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZSBhIHVzZXIga2V5IHVzaW5nIHRoZSBjaGFpbiBwYXRoIG9mIHRoZSBhZGRyZXNzXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHBhdGhcbiAgICogQHJldHVybnMge3N0cmluZ30gZGVyaXZlZCBwcml2YXRlIGtleVxuICAgKi9cbiAgZGVyaXZlS2V5V2l0aFBhdGgoeyBrZXksIHBhdGggfTogeyBrZXk6IHN0cmluZzsgcGF0aDogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleWNoYWluID0gYmlwMzIuZnJvbUJhc2U1OChrZXkpO1xuICAgIGNvbnN0IGRlcml2ZWRLZXlOb2RlID0ga2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKTtcbiAgICByZXR1cm4gZGVyaXZlZEtleU5vZGUudG9CYXNlNTgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHtPYmplY3R9IHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBwbGF0Zm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLnBydiB7U3RyaW5nfSB1c2VyIHBydlxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxTaWduZWRUcmFuc2FjdGlvbj5cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IEludGVyZmFjZS5YdHpTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIHR4QnVpbGRlci5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICB0eEJ1aWxkZXIuc291cmNlKHBhcmFtcy50eFByZWJ1aWxkLnNvdXJjZSk7XG4gICAgaWYgKHBhcmFtcy50eFByZWJ1aWxkLmRhdGFUb1NpZ24pIHtcbiAgICAgIHR4QnVpbGRlci5vdmVycmlkZURhdGFUb1NpZ24oeyBkYXRhVG9TaWduOiBwYXJhbXMudHhQcmVidWlsZC5kYXRhVG9TaWduIH0pO1xuICAgIH1cbiAgICAvLyBUaGUgcGF0aCAvMC8wLzAvMCBpcyB1c2VkIGJ5IHRoZSB3YWxsZXQgYmFzZSBhZGRyZXNzXG4gICAgLy8gRGVyaXZlIHRoZSB1c2VyIGtleSBvbmx5IGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBzZW50IGZyb20gYSByZWNlaXZlIGFkZHJlc3NcbiAgICBsZXQga2V5O1xuICAgIGNvbnN0IHsgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXMudHhQcmVidWlsZC5hZGRyZXNzSW5mbztcbiAgICBpZiAoY2hhaW4gPT09IDAgJiYgaW5kZXggPT09IDApIHtcbiAgICAgIGtleSA9IHBhcmFtcy5wcnY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gYDAvMC8ke2NoYWlufS8ke2luZGV4fWA7XG4gICAgICBrZXkgPSB0aGlzLmRlcml2ZUtleVdpdGhQYXRoKHsga2V5OiBwYXJhbXMucHJ2LCBwYXRoOiBkZXJpdmF0aW9uUGF0aCB9KTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXkgfSk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXNzYWdlZCBwYXNzZWQgdG8gc2lnbk1lc3NhZ2UnKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDIgPyByZXNwb25zZSA6IHsgaGFsZlNpZ25lZDogcmVzcG9uc2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG1lc3NhZ2Ugd2l0aCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IFNka0NvcmVLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LnBydiB9KTtcbiAgICBjb25zdCBtZXNzYWdlSGV4ID1cbiAgICAgIG1lc3NhZ2UgaW5zdGFuY2VvZiBCdWZmZXIgPyBtZXNzYWdlLnRvU3RyaW5nKCdoZXgnKSA6IEJ1ZmZlci5mcm9tKG1lc3NhZ2UgYXMgc3RyaW5nLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlRGF0YSA9IGF3YWl0IFV0aWxzLnNpZ24oa2V5UGFpciwgbWVzc2FnZUhleCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZURhdGEuc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvLlxuICAgKiBXZSBuZWVkIHRvIGRvIHRocmVlIHF1ZXJpZXMgZHVyaW5nIHRoaXM6XG4gICAqIDEpIE5vZGUgcXVlcnkgLSBob3cgbXVjaCBtb25leSBpcyBpbiB0aGUgYWNjb3VudFxuICAgKiAyKSBCdWlsZCB0cmFuc2FjdGlvbiAtIGJ1aWxkIG91ciB0cmFuc2FjdGlvbiBmb3IgdGhlIGFtb3VudFxuICAgKiAzKSBTZW5kIHNpZ25lZCBidWlsZCAtIHNlbmQgb3VyIHNpZ25lZCBidWlsZCB0byBhIHB1YmxpYyBub2RlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIFRlem9zIHRyYW5zYWN0aW9uIGZyb20gdHhIZXhcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogSW50ZXJmYWNlLkV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCB8fCAocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpO1xuICAgIGlmICghdHhIZXggfHwgIXBhcmFtcy5mZWVJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZXhwbGFpbiB0eCBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIC8vIE5ld2VyIGNvaW5zIGNhbiByZXR1cm4gQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgaW5zdGVhZCBvZiBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgaWYgKCEodHhCdWlsZGVyIGluc3RhbmNlb2YgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0QnVpbGRlcigpIGRpZCBub3QgcmV0dXJuIGFuIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIgb2JqZWN0LiBIYXMgaXQgYmVlbiB1cGRhdGVkPycpO1xuICAgIH1cbiAgICB0eEJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ107XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4LmlkLFxuICAgICAgb3V0cHV0czogdHgub3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogdHgub3V0cHV0c1xuICAgICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgb3V0cHV0KSA9PiBhY2N1bXVsYXRvci5wbHVzKG91dHB1dC52YWx1ZSksIG5ldyBCaWdOdW1iZXIoJzAnKSlcbiAgICAgICAgLnRvRml4ZWQoMCksXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSwgLy8gYWNjb3VudCBiYXNlZCBkb2VzIG5vdCB1c2UgY2hhbmdlIG91dHB1dHNcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLCAvLyBhY2NvdW50IGJhc2UgZG9lcyBub3QgbWFrZSBjaGFuZ2VcbiAgICAgIGZlZTogcGFyYW1zLmZlZUluZm8sXG4gICAgfSBhcyBhbnk7XG4gIH1cblxuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleShwYXJhbXM6IEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zKSB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufVxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHR6LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3h0ei50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFpQjhCO0FBQzlCLHFEQUE4QztBQUM5QyxpREFBcUY7QUFDckYsZ0VBQXFDO0FBQ3JDLCtCQUFzRTtBQUV0RSx1Q0FNcUI7QUFDckIsNERBQWlDO0FBQ2pDLE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBRy9CLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sd0JBQWEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLElB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O0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLE1BQStCO1FBQy9DLE1BQU0sSUFBSSxvQ0FBeUIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQWpkRCxrQkFpZEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQml0R29CYXNlLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEtleVBhaXIgYXMgU2RrQ29yZUtleVBhaXIsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zLFxuICBjb21tb24sXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgQ29pbkZhbWlseSwgY29pbnMsIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgSW50ZXJmYWNlLCBLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXIsIFV0aWxzIH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHsgUmVjb3Zlck9wdGlvbnMgfSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQge1xuICBnZW5lcmF0ZURhdGFUb1NpZ24sXG4gIGlzVmFsaWRPcmlnaW5hdGVkQWRkcmVzcyxcbiAgVFJBTlNBQ1RJT05fRkVFLFxuICBUUkFOU0FDVElPTl9HQVNfTElNSVQsXG4gIFRSQU5TQUNUSU9OX1NUT1JBR0VfTElNSVQsXG59IGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3N1cGVyYWdlbnQnO1xuZXhwb3J0IGNsYXNzIFh0eiBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBYdHooYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBYdHogc3VwcG9ydHMgdHJhbnNmZXJzIHRvIGNvbnNvbGlkYXRlIGJhbGFuY2UgZnJvbSByZWNlaXZlIGFkZHJlc3MgdG8gdGhlIHdhbGxldCBjb250cmFjdFxuICAgKi9cbiAgYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGlzIGEgdmFsaWQgYmFzZTU4IG9yIGhleCBhZGRyZXNzXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIFRlem9zIGtleSBwYWlyIC0gQml0R28geHB1YiBmb3JtYXRcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHhwdWIsIHhwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogU2RrQ29yZUtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcblxuICAgIGlmICgha2V5cy54cHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgeHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnhwdWIsXG4gICAgICBwcnY6IGtleXMueHBydixcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZSBhIHVzZXIga2V5IHVzaW5nIHRoZSBjaGFpbiBwYXRoIG9mIHRoZSBhZGRyZXNzXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHBhdGhcbiAgICogQHJldHVybnMge3N0cmluZ30gZGVyaXZlZCBwcml2YXRlIGtleVxuICAgKi9cbiAgZGVyaXZlS2V5V2l0aFBhdGgoeyBrZXksIHBhdGggfTogeyBrZXk6IHN0cmluZzsgcGF0aDogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleWNoYWluID0gYmlwMzIuZnJvbUJhc2U1OChrZXkpO1xuICAgIGNvbnN0IGRlcml2ZWRLZXlOb2RlID0ga2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKTtcbiAgICByZXR1cm4gZGVyaXZlZEtleU5vZGUudG9CYXNlNTgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHtPYmplY3R9IHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBwbGF0Zm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLnBydiB7U3RyaW5nfSB1c2VyIHBydlxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxTaWduZWRUcmFuc2FjdGlvbj5cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IEludGVyZmFjZS5YdHpTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIHR4QnVpbGRlci5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICB0eEJ1aWxkZXIuc291cmNlKHBhcmFtcy50eFByZWJ1aWxkLnNvdXJjZSk7XG4gICAgaWYgKHBhcmFtcy50eFByZWJ1aWxkLmRhdGFUb1NpZ24pIHtcbiAgICAgIHR4QnVpbGRlci5vdmVycmlkZURhdGFUb1NpZ24oeyBkYXRhVG9TaWduOiBwYXJhbXMudHhQcmVidWlsZC5kYXRhVG9TaWduIH0pO1xuICAgIH1cbiAgICAvLyBUaGUgcGF0aCAvMC8wLzAvMCBpcyB1c2VkIGJ5IHRoZSB3YWxsZXQgYmFzZSBhZGRyZXNzXG4gICAgLy8gRGVyaXZlIHRoZSB1c2VyIGtleSBvbmx5IGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBzZW50IGZyb20gYSByZWNlaXZlIGFkZHJlc3NcbiAgICBsZXQga2V5O1xuICAgIGNvbnN0IHsgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXMudHhQcmVidWlsZC5hZGRyZXNzSW5mbztcbiAgICBpZiAoY2hhaW4gPT09IDAgJiYgaW5kZXggPT09IDApIHtcbiAgICAgIGtleSA9IHBhcmFtcy5wcnY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gYDAvMC8ke2NoYWlufS8ke2luZGV4fWA7XG4gICAgICBrZXkgPSB0aGlzLmRlcml2ZUtleVdpdGhQYXRoKHsga2V5OiBwYXJhbXMucHJ2LCBwYXRoOiBkZXJpdmF0aW9uUGF0aCB9KTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXkgfSk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXNzYWdlZCBwYXNzZWQgdG8gc2lnbk1lc3NhZ2UnKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDIgPyByZXNwb25zZSA6IHsgaGFsZlNpZ25lZDogcmVzcG9uc2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG1lc3NhZ2Ugd2l0aCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IFNka0NvcmVLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LnBydiB9KTtcbiAgICBjb25zdCBtZXNzYWdlSGV4ID1cbiAgICAgIG1lc3NhZ2UgaW5zdGFuY2VvZiBCdWZmZXIgPyBtZXNzYWdlLnRvU3RyaW5nKCdoZXgnKSA6IEJ1ZmZlci5mcm9tKG1lc3NhZ2UgYXMgc3RyaW5nLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlRGF0YSA9IGF3YWl0IFV0aWxzLnNpZ24oa2V5UGFpciwgbWVzc2FnZUhleCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZURhdGEuc2lnKTtcbiAgfVxuICAvKipcbiAgICogTWV0aG9kIHRvIHZhbGlkYXRlIHJlY292ZXJ5IHBhcmFtc1xuICAgKiBAcGFyYW0ge1JlY292ZXJPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB2YWxpZGF0ZVJlY292ZXJ5UGFyYW1zKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAocGFyYW1zLnVzZXJLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmJhY2t1cEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMuaXNVbnNpZ25lZFN3ZWVwICYmIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID09PSB1bmRlZmluZWQgJiYgIXBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMud2FsbGV0Q29udHJhY3RBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHdhbGxldENvbnRyYWN0QWRkcmVzcycpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIHF1ZXJ5IHRvIGJsb2NrY2hhaW4gZXhwbG9yZXIgZm9yIGluZm9ybWF0aW9uIHN1Y2ggYXMgYmFsYW5jZSwgdG9rZW4gYmFsYW5jZSwgc29saWRpdHkgY2FsbHNcbiAgICogQHBhcmFtIHF1ZXJ5IHtPYmplY3R9IGtleS12YWx1ZSBwYWlycyBvZiBwYXJhbWV0ZXJzIHRvIGFwcGVuZCBhZnRlciAvYXBpXG4gICAqIEBwYXJhbSBhcGlLZXkge3N0cmluZ30gb3B0aW9uYWwgQVBJIGtleSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgb25lIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlIGZyb20gdGhlIGJsb2NrY2hhaW4gZXhwbG9yZXJcbiAgICovXG4gIGFzeW5jIHJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoXG4gICAgcGFyYW1zOiB7XG4gICAgICBhY3Rpb25QYXRoOiBzdHJpbmc7XG4gICAgICBhZGRyZXNzPzogc3RyaW5nO1xuICAgICAgYWN0aW9uPzogc3RyaW5nO1xuICAgIH0sXG4gICAgYXBpS2V5Pzogc3RyaW5nXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5nZXQoXG4gICAgICBgJHtjb21tb24uRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLnh0ekV4cGxvcmVyQmFzZVVybH0vdjEvJHtwYXJhbXMuYWN0aW9uUGF0aH0ke1xuICAgICAgICBwYXJhbXMuYWRkcmVzcyA/ICcvJyArIHBhcmFtcy5hZGRyZXNzIDogJydcbiAgICAgIH0ke3BhcmFtcy5hY3Rpb24gPyAnLycgKyBwYXJhbXMuYWN0aW9uIDogJyd9JHthcGlLZXkgPyBgP2FwaWtleT0ke2FwaUtleX1gIDogJyd9YFxuICAgICk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFjaCBUWktUJyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDI5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RaS1QgcmF0ZSBsaW1pdCByZWFjaGVkJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXJpZXMgcHVibGljIGJsb2NrIGV4cGxvcmVyIHRvIGdldCB0aGUgbmV4dCBYVFogYWRkcmVzcyBkZXRhaWxzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlLZXkgLSBvcHRpb25hbCBBUEkga2V5IHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBvbmUgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3M6IHN0cmluZywgYXBpS2V5Pzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoXG4gICAgICB7XG4gICAgICAgIGFjdGlvblBhdGg6ICdhY2NvdW50cycsXG4gICAgICAgIGFkZHJlc3MsXG4gICAgICB9LFxuICAgICAgYXBpS2V5XG4gICAgKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGRldGFpbHMgZm9yICR7YWRkcmVzc31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyeSBleHBsb3JlciBmb3IgdGhlIGJhbGFuY2Ugb2YgYW4gYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIHRoZSBYVFogYmFzZS9yZWNlaXZlIGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFwaUtleSAtIG9wdGlvbmFsIEFQSSBrZXkgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG9uZSBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBhZGRyZXNzIGJhbGFuY2VcbiAgICovXG4gIGFzeW5jIHF1ZXJ5QWRkcmVzc0JhbGFuY2UoYWRkcmVzczogc3RyaW5nLCBhcGlLZXk/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgdGhpcy5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KFxuICAgICAge1xuICAgICAgICBhY3Rpb25QYXRoOiBpc1ZhbGlkT3JpZ2luYXRlZEFkZHJlc3MoYWRkcmVzcykgPyAnY29udHJhY3RzJyA6ICdhY2NvdW50cycsXG4gICAgICAgIGFkZHJlc3MsXG4gICAgICB9LFxuICAgICAgYXBpS2V5XG4gICAgKTtcbiAgICAvLyB0aHJvdyBpZiB0aGUgcmVzdWx0IGRvZXMgbm90IGV4aXN0IG9yIHRoZSByZXN1bHQgaXMgbm90IGEgdmFsaWQgbnVtYmVyXG4gICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5iYWxhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBvYnRhaW4gYWRkcmVzcyBiYWxhbmNlIGZvciAke2FkZHJlc3N9IGZyb20gdGhlIGV4cGxvcmVyYCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHJlc3VsdC5iYWxhbmNlLCAxMCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW5kIHBhY2sgdGhlIGRhdGEgdG8gc2lnbiBmb3IgZWFjaCB0cmFuc2Zlci5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyBXYWxsZXQgYWRkcmVzcyB0byB3aXRoZHJhdyBmdW5kcyBmcm9tXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdENvdW50ZXIgV2FsbGV0IGludGVybmFsIGNvdW50ZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlc3RpbmF0aW9uIFRlem9zIGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGFtb3VudCBOdW1iZXIgb2YgbXV0ZXogdG8gbW92ZVxuICAgKiBAcGFyYW0ge0lNU0NsaWVudH0gaW1zQ2xpZW50IEV4aXN0aW5nIElNUyBjbGllbnQgY29ubmVjdGlvbiB0byByZXVzZVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGRhdGEgdG8gc2lnbiBpbiBoZXggZm9ybWF0XG4gICAqL1xuICBhc3luYyBwYWNrRGF0YVRvU2lnbihjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0Q291bnRlciwgZGVzdGluYXRpb24sIGFtb3VudCkge1xuICAgIGNvbnN0IGRhdGFUb1NpZ24gPSBnZW5lcmF0ZURhdGFUb1NpZ24oY29udHJhY3RBZGRyZXNzLCBkZXN0aW5hdGlvbiwgYW1vdW50LCBjb250cmFjdENvdW50ZXIpO1xuICAgIGNvbnN0IHh0elJwY1VybCA9IGAke1xuICAgICAgY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS54dHpScGNVcmxcbiAgICB9L2NoYWlucy9tYWluL2Jsb2Nrcy9oZWFkL2hlbHBlcnMvc2NyaXB0cy9wYWNrX2RhdGFgO1xuXG4gICAgaWYgKCF4dHpScGNVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWFRaIFJQQyB1cmwgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LnBvc3QoeHR6UnBjVXJsKS5zZW5kKGRhdGFUb1NpZ24pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gcGFjayBkYXRhIHRvIHNpZ24gJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLmJvZHkuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgSU1TIHJlc3BvbnNlIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2UuYm9keS5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5wYWNrZWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHby5cbiAgICogV2UgbmVlZCB0byBkbyB0aHJlZSBxdWVyaWVzIGR1cmluZyB0aGlzOlxuICAgKiAxKSBOb2RlIHF1ZXJ5IC0gaG93IG11Y2ggbW9uZXkgaXMgaW4gdGhlIGFjY291bnRcbiAgICogMikgQnVpbGQgdHJhbnNhY3Rpb24gLSBidWlsZCBvdXIgdHJhbnNhY3Rpb24gZm9yIHRoZSBhbW91bnRcbiAgICogMykgU2VuZCBzaWduZWQgYnVpbGQgLSBzZW5kIG91ciBzaWduZWQgYnVpbGQgdG8gYSBwdWJsaWMgbm9kZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICB0aGlzLnZhbGlkYXRlUmVjb3ZlcnlQYXJhbXMocGFyYW1zKTtcblxuICAgIC8vIENsZWFuIHVwIHdoaXRlc3BhY2UgZnJvbSBlbnRlcmVkIHZhbHVlc1xuXG4gICAgY29uc3QgYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuXG4gICAgY29uc3QgdXNlckFkZHJlc3NEZXRhaWxzID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMud2FsbGV0Q29udHJhY3RBZGRyZXNzLCBwYXJhbXMuYXBpS2V5KTtcblxuICAgIGlmICghdXNlckFkZHJlc3NEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmZXRjaCB1c2VyIGFkZHJlc3MgZGV0YWlscycpO1xuICAgIH1cblxuICAgIC8vIERlY3J5cHQgYmFja3VwIHByaXZhdGUga2V5IGFuZCBnZXQgYWRkcmVzc1xuICAgIGxldCBiYWNrdXBQcnY7XG5cbiAgICB0cnkge1xuICAgICAgYmFja3VwUHJ2ID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGJhY2t1cEtleSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkZWNyeXB0aW5nIGJhY2t1cCBrZXljaGFpbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogYmFja3VwUHJ2IH0pO1xuICAgIGNvbnN0IGJhY2t1cFNpZ25pbmdLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wcnY7XG4gICAgaWYgKCFiYWNrdXBTaWduaW5nS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IGJhY2t1cEtleUFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoKTtcblxuICAgIGNvbnN0IGJhY2t1cEFkZHJlc3NEZXRhaWxzID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhiYWNrdXBLZXlBZGRyZXNzLCBwYXJhbXMuYXBpS2V5IHx8ICcnKTtcblxuICAgIGlmICghYmFja3VwQWRkcmVzc0RldGFpbHMuY291bnRlciB8fCAhYmFja3VwQWRkcmVzc0RldGFpbHMuYmFsYW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIGRldGFpbChzKTogY291bnRlciwgYmFsYW5jZWApO1xuICAgIH1cbiAgICBjb25zdCBiYWNrdXBLZXlOb25jZSA9IG5ldyBCaWdOdW1iZXIoYmFja3VwQWRkcmVzc0RldGFpbHMuY291bnRlciArIDEsIDEwKTtcblxuICAgIC8vIGdldCBiYWxhbmNlIG9mIGJhY2t1cEtleSB0byBlbnN1cmUgZnVuZHMgYXJlIGF2YWlsYWJsZSB0byBwYXkgZmVlc1xuICAgIGNvbnN0IGJhY2t1cEtleUJhbGFuY2UgPSBuZXcgQmlnTnVtYmVyKGJhY2t1cEFkZHJlc3NEZXRhaWxzLmJhbGFuY2UsIDEwKTtcblxuICAgIGNvbnN0IGdhc0xpbWl0ID0gaXNWYWxpZE9yaWdpbmF0ZWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKVxuICAgICAgPyBUUkFOU0FDVElPTl9HQVNfTElNSVQuQ09OVFJBQ1RfVFJBTlNGRVJcbiAgICAgIDogVFJBTlNBQ1RJT05fR0FTX0xJTUlULlRSQU5TRkVSO1xuICAgIGNvbnN0IGdhc1ByaWNlID0gVFJBTlNBQ1RJT05fRkVFLlRSQU5TRkVSO1xuXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciBiYWNrIHVwIGtleSBhZGRyZXNzIGhhcyBzdWZmaWNpZW50IGZ1bmRzIGZvciB0cmFuc2FjdGlvblxuICAgIGlmIChiYWNrdXBLZXlCYWxhbmNlLmx0KGdhc1ByaWNlKSkge1xuICAgICAgY29uc3Qgd2VpVG9Hd2VpID0gMTAgKiogNjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEJhY2t1cCBrZXkgYWRkcmVzcyAke2JhY2t1cEtleUFkZHJlc3N9IGhhcyBiYWxhbmNlICR7KFxuICAgICAgICAgIGJhY2t1cEtleUJhbGFuY2UudG9OdW1iZXIoKSAvIHdlaVRvR3dlaVxuICAgICAgICApLnRvU3RyaW5nKCl9IEd3ZWkuYCArXG4gICAgICAgICAgYFRoaXMgYWRkcmVzcyBtdXN0IGhhdmUgYSBiYWxhbmNlIG9mIGF0IGxlYXN0ICR7KGdhc1ByaWNlIC8gd2VpVG9Hd2VpKS50b1N0cmluZygpfWAgK1xuICAgICAgICAgIGAgR3dlaSB0byBwZXJmb3JtIHJlY292ZXJpZXMuIFRyeSBzZW5kaW5nIHNvbWUgZnVuZHMgdG8gdGhpcyBhZGRyZXNzIHRoZW4gcmV0cnkuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYmFsYW5jZSBvZiBzZW5kZXIgYWRkcmVzc1xuICAgIGlmICghdXNlckFkZHJlc3NEZXRhaWxzLmJhbGFuY2UgfHwgdXNlckFkZHJlc3NEZXRhaWxzLmJhbGFuY2UgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZnVuZHMgdG8gcmVjb3ZlciBmcm9tIHNvdXJjZSBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QW1vdW50ID0gdXNlckFkZHJlc3NEZXRhaWxzLmJhbGFuY2U7XG4gICAgaWYgKG5ldyBCaWdOdW1iZXIodHhBbW91bnQpLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvIHJlY292ZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWVJbmZvID0ge1xuICAgICAgZmVlOiBuZXcgQmlnTnVtYmVyKFRSQU5TQUNUSU9OX0ZFRS5UUkFOU0ZFUiksXG4gICAgICBnYXNMaW1pdDogbmV3IEJpZ051bWJlcihnYXNMaW1pdCksXG4gICAgICBzdG9yYWdlTGltaXQ6IG5ldyBCaWdOdW1iZXIoVFJBTlNBQ1RJT05fU1RPUkFHRV9MSU1JVC5UUkFOU0ZFUiksXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuXG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHR4QnVpbGRlci5zb3VyY2UoYmFja3VwS2V5QWRkcmVzcyk7XG5cbiAgICAvLyBVc2VkIHRvIHNldCB0aGUgYnJhbmNoIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICBjb25zdCBjaGFpbkhlYWQ6IGFueSA9IGF3YWl0IHRoaXMucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICBhY3Rpb25QYXRoOiAnaGVhZCcsXG4gICAgfSk7XG5cbiAgICBpZiAoIWNoYWluSGVhZCB8fCAhY2hhaW5IZWFkLmhhc2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZldGNoIGNoYWluIGhlYWQnKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLmJyYW5jaChjaGFpbkhlYWQuaGFzaCk7XG5cbiAgICBpZiAoIWJhY2t1cEFkZHJlc3NEZXRhaWxzLnJldmVhbGVkKSB7XG4gICAgICBmZWVJbmZvLmZlZSA9IGZlZUluZm8uZmVlLnBsdXMoVFJBTlNBQ1RJT05fRkVFLlJFVkVBTCk7XG4gICAgICBmZWVJbmZvLmdhc0xpbWl0ID0gZmVlSW5mby5nYXNMaW1pdC5wbHVzKFRSQU5TQUNUSU9OX0dBU19MSU1JVC5SRVZFQUwpO1xuICAgICAgZmVlSW5mby5zdG9yYWdlTGltaXQgPSBmZWVJbmZvLnN0b3JhZ2VMaW1pdC5wbHVzKFRSQU5TQUNUSU9OX1NUT1JBR0VfTElNSVQuUkVWRUFMKTtcbiAgICAgIGJhY2t1cEtleU5vbmNlLnBsdXMoMSk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlUb1JldmVhbCA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgdHhCdWlsZGVyLnB1YmxpY0tleVRvUmV2ZWFsKHB1YmxpY0tleVRvUmV2ZWFsLnB1Yik7XG4gICAgfVxuXG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoYmFja3VwS2V5Tm9uY2UudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBwYWNrZWREYXRhVG9TaWduID0gYXdhaXQgdGhpcy5wYWNrRGF0YVRvU2lnbihcbiAgICAgIHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MsXG4gICAgICBiYWNrdXBLZXlOb25jZS50b1N0cmluZygpLFxuICAgICAgcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICB0eEFtb3VudD8udG9TdHJpbmcoKVxuICAgICk7XG5cbiAgICB0eEJ1aWxkZXJcbiAgICAgIC50cmFuc2Zlcih0eEFtb3VudD8udG9TdHJpbmcoKSlcbiAgICAgIC5mcm9tKHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MpXG4gICAgICAudG8ocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pXG4gICAgICAuY291bnRlcihiYWNrdXBLZXlOb25jZS50b1N0cmluZygpKVxuICAgICAgLmZlZShUUkFOU0FDVElPTl9GRUUuVFJBTlNGRVIudG9TdHJpbmcoKSlcbiAgICAgIC5zdG9yYWdlTGltaXQoVFJBTlNBQ1RJT05fU1RPUkFHRV9MSU1JVC5UUkFOU0ZFUi50b1N0cmluZygpKVxuICAgICAgLmdhc0xpbWl0KGdhc0xpbWl0LnRvU3RyaW5nKCkpXG4gICAgICAuZGF0YVRvU2lnbihwYWNrZWREYXRhVG9TaWduKTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBiYWNrdXBTaWduaW5nS2V5IH0pO1xuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNpZ25lZFR4LmlkLFxuICAgICAgdHg6IHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgVGV6b3MgdHJhbnNhY3Rpb24gZnJvbSB0eEhleFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBJbnRlcmZhY2UuRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zLnR4SGV4IHx8IChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCk7XG4gICAgaWYgKCF0eEhleCB8fCAhcGFyYW1zLmZlZUluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gICAgLy8gTmV3ZXIgY29pbnMgY2FuIHJldHVybiBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBpbnN0ZWFkIG9mIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJcbiAgICBpZiAoISh0eEJ1aWxkZXIgaW5zdGFuY2VvZiBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRCdWlsZGVyKCkgZGlkIG5vdCByZXR1cm4gYW4gQmFzZVRyYW5zYWN0aW9uQnVpbGRlciBvYmplY3QuIEhhcyBpdCBiZWVuIHVwZGF0ZWQ/Jyk7XG4gICAgfVxuICAgIHR4QnVpbGRlci5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnXTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdHguaWQsXG4gICAgICBvdXRwdXRzOiB0eC5vdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiB0eC5vdXRwdXRzXG4gICAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBvdXRwdXQpID0+IGFjY3VtdWxhdG9yLnBsdXMob3V0cHV0LnZhbHVlKSwgbmV3IEJpZ051bWJlcignMCcpKVxuICAgICAgICAudG9GaXhlZCgwKSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLCAvLyBhY2NvdW50IGJhc2VkIGRvZXMgbm90IHVzZSBjaGFuZ2Ugb3V0cHV0c1xuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsIC8vIGFjY291bnQgYmFzZSBkb2VzIG5vdCBtYWtlIGNoYW5nZVxuICAgICAgZmVlOiBwYXJhbXMuZmVlSW5mbyxcbiAgICB9IGFzIGFueTtcbiAgfVxuXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHBhcmFtczogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-xtz",
3
- "version": "1.4.3-alpha.376",
3
+ "version": "1.4.3-alpha.378",
4
4
  "description": "BitGo SDK coin library for Tezos",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -40,21 +40,22 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo-beta/blake2b": "3.2.1-alpha.380",
44
- "@bitgo-beta/sdk-core": "2.4.1-alpha.379",
45
- "@bitgo-beta/secp256k1": "1.0.1-alpha.337",
46
- "@bitgo-beta/statics": "10.0.1-alpha.379",
43
+ "@bitgo-beta/blake2b": "3.2.1-alpha.382",
44
+ "@bitgo-beta/sdk-core": "2.4.1-alpha.381",
45
+ "@bitgo-beta/secp256k1": "1.0.1-alpha.339",
46
+ "@bitgo-beta/statics": "10.0.1-alpha.381",
47
47
  "@noble/curves": "1.8.1",
48
48
  "@taquito/local-forging": "6.3.5-beta.0",
49
49
  "@taquito/signer": "6.3.5-beta.0",
50
50
  "bignumber.js": "^9.0.0",
51
51
  "bs58check": "^2.1.2",
52
52
  "libsodium-wrappers": "^0.7.6",
53
- "lodash": "^4.17.15"
53
+ "lodash": "^4.17.15",
54
+ "superagent": "^9.0.1"
54
55
  },
55
56
  "devDependencies": {
56
- "@bitgo-beta/sdk-api": "1.6.1-alpha.379",
57
+ "@bitgo-beta/sdk-api": "1.6.1-alpha.381",
57
58
  "@bitgo-beta/sdk-test": "^9.0.2"
58
59
  },
59
- "gitHead": "afc7425e808afcbcf1ee8ee7c7eb31a1696f4b47"
60
+ "gitHead": "ce7315b39cfe1bf8ecbad8017bcc3e1c6f72171a"
60
61
  }