@bitgo-beta/sdk-coin-apt 1.0.1-beta.920 → 1.0.1-beta.922

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/apt.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AuditDecryptedKeyParams, BaseCoin, BaseTransaction, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, PopulatedIntent, PrebuildTransactionWithIntentOptions, SignedTransaction, SignTransactionOptions, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
1
+ import { AuditDecryptedKeyParams, BaseCoin, BaseTransaction, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, PopulatedIntent, PrebuildTransactionWithIntentOptions, SignedTransaction, SignTransactionOptions, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
3
3
  import { TransactionBuilderFactory } from './lib';
4
4
  import { ExplainTransactionOptions } from './lib/types';
@@ -24,7 +24,14 @@ export declare class Apt extends BaseCoin {
24
24
  getMPCAlgorithm(): MPCAlgorithm;
25
25
  allowsAccountConsolidations(): boolean;
26
26
  verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
27
- isWalletAddress(params: VerifyAddressOptions): Promise<boolean>;
27
+ /**
28
+ * Verify that an address belongs to this wallet.
29
+ *
30
+ * @param params - Verification parameters including address, keychains, and index
31
+ * @returns True if address belongs to wallet
32
+ * @throws UnexpectedAddressError if address doesn't match derived address
33
+ */
34
+ isWalletAddress(params: TssVerifyAddressOptions): Promise<boolean>;
28
35
  parseTransaction(params: AptParseTransactionOptions): Promise<ParsedTransaction>;
29
36
  /**
30
37
  * Explain a Apt transaction
@@ -1 +1 @@
1
- {"version":3,"file":"apt.d.ts","sourceRoot":"","sources":["../../src/apt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,eAAe,EACf,SAAS,EAET,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,oCAAoC,EACpC,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAyB,yBAAyB,EAAE,MAAM,OAAO,CAAC;AAIzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,eAAe,IAAI,YAAY;IAI/B,2BAA2B,IAAI,OAAO;IAIhC,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqCrE,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/D,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqBtF;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAU3G,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,SAAS,CAAC,mBAAmB,IAAI,yBAAyB;cAI1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAU3E,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;IAOlF,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;CAM3G"}
1
+ {"version":3,"file":"apt.d.ts","sourceRoot":"","sources":["../../src/apt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,eAAe,EACf,SAAS,EACT,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,oCAAoC,EACpC,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EAGvB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAyB,yBAAyB,EAAE,MAAM,OAAO,CAAC;AAIzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,eAAe,IAAI,YAAY;IAI/B,2BAA2B,IAAI,OAAO;IAIhC,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqC3E;;;;;;OAMG;IACG,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqBtF;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAU3G,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,SAAS,CAAC,mBAAmB,IAAI,yBAAyB;cAI1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAU3E,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;IAOlF,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;CAM3G"}
package/dist/src/apt.js CHANGED
@@ -120,10 +120,17 @@ class Apt extends sdk_core_1.BaseCoin {
120
120
  }
121
121
  return true;
122
122
  }
123
+ /**
124
+ * Verify that an address belongs to this wallet.
125
+ *
126
+ * @param params - Verification parameters including address, keychains, and index
127
+ * @returns True if address belongs to wallet
128
+ * @throws UnexpectedAddressError if address doesn't match derived address
129
+ */
123
130
  async isWalletAddress(params) {
124
- const { address: newAddress } = params;
125
- if (!this.isValidAddress(newAddress)) {
126
- throw new sdk_core_1.InvalidAddressError(`invalid address: ${newAddress}`);
131
+ const isValid = await (0, sdk_core_1.verifyEddsaTssWalletAddress)(params, this.isValidAddress.bind(this), (pubKey) => utils_1.default.getAddressFromPublicKey(pubKey));
132
+ if (!isValid) {
133
+ throw new sdk_core_1.UnexpectedAddressError();
127
134
  }
128
135
  return true;
129
136
  }
@@ -209,4 +216,4 @@ class Apt extends sdk_core_1.BaseCoin {
209
216
  }
210
217
  }
211
218
  exports.Apt = Apt;
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFrQjhCO0FBQzlCLGlEQUF5RTtBQUN6RSwrQkFBeUU7QUFDekUsd0RBQWdDO0FBQ2hDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFHckMseURBQStEO0FBTS9ELE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBRS9CLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sd0JBQWEsQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsMkJBQTJCO1FB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QUE0QixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUxELGtCQTBMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zLFxuICBCYXNlQ29pbixcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBCaXRHb0Jhc2UsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFBvcHVsYXRlZEludGVudCxcbiAgUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBBcHRLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2xpYi90eXBlcyc7XG5pbXBvcnQgeyBBcHRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgYXVkaXRFZGRzYVByaXZhdGVLZXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXB0UGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4SGV4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBcHQgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBBcHQoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3IgYmV0d2VlbiB0aGUgY29pbidzIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICovXG4gIHB1YmxpYyBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnYXB0JztcbiAgfVxuXG4gIHB1YmxpYyBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2FwdCc7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0FwdG9zJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy50c3M7XG4gIH1cblxuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VkZHNhJztcbiAgfVxuXG4gIGFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkLCB0eFBhcmFtczogdHhQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eEhleCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleCB9KTtcbiAgICBpZiAoIWV4cGxhaW5lZFR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBleHBsYWluIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICh0eFBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVjaXBpZW50cyA9IHR4UGFyYW1zLnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBCaWdJbnQocmVjaXBpZW50LmFtb3VudCksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IEJpZ0ludChvdXRwdXQuYW1vdW50KSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFfLmlzRXF1YWwoZmlsdGVyZWRPdXRwdXRzLCBmaWx0ZXJlZFJlY2lwaWVudHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH1cbiAgICAgIGxldCB0b3RhbEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICBmb3IgKGNvbnN0IHJlY2lwaWVudHMgb2YgdHhQYXJhbXMucmVjaXBpZW50cykge1xuICAgICAgICB0b3RhbEFtb3VudCA9IHRvdGFsQW1vdW50LnBsdXMocmVjaXBpZW50cy5hbW91bnQpO1xuICAgICAgfVxuICAgICAgaWYgKCF0b3RhbEFtb3VudC5pc0VxdWFsVG8oZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHRvdGFsIGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzOiBuZXdBZGRyZXNzIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MobmV3QWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7bmV3QWRkcmVzc31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogQXB0UGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHBhcmFtcy50eEhleCB9KTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uRXhwbGFuYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLnNlbmRlcixcbiAgICAgICAgICBhbW91bnQ6IHRyYW5zYWN0aW9uRXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHRyYW5zYWN0aW9uRXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgQXB0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEFwdFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgcmVidWlsdFRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIHJlYnVpbHRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMucmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcy50eEhleCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcmVidWlsdFRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBBcHRLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBcHRLZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUeEJ1aWxkZXJGYWN0b3J5KCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVidWlsZFRyYW5zYWN0aW9uKHR4SGV4OiBzdHJpbmcpOiBQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlckZhY3RvcnkgPSB0aGlzLmdldFR4QnVpbGRlckZhY3RvcnkoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdHhCdWlsZGVyRmFjdG9yeS5mcm9tKHR4SGV4KTtcbiAgICAgIHJldHVybiB0eEJ1aWxkZXIuZ2V0UmVidWlsdFRyYW5zYWN0aW9uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWJ1aWxkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgbXVsdGlTaWdUeXBlLCBwcnYsIHB1YmxpY0tleSB9OiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgIT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG11bHRpU2lnVHlwZScpO1xuICAgIH1cbiAgICBhdWRpdEVkZHNhUHJpdmF0ZUtleShwcnYsIHB1YmxpY0tleSA/PyAnJyk7XG4gIH1cblxuICBzZXRDb2luU3BlY2lmaWNGaWVsZHNJbkludGVudChpbnRlbnQ6IFBvcHVsYXRlZEludGVudCwgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgY3VzdG9tIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnMgZm9yIEFwdG9zXG4gICAgaWYgKHBhcmFtcy5hcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zKSB7XG4gICAgICBpbnRlbnQuYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcyA9IHBhcmFtcy5hcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zO1xuICAgIH1cbiAgfVxufVxuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFtQjhCO0FBQzlCLGlEQUF5RTtBQUN6RSwrQkFBeUU7QUFDekUsd0RBQWdDO0FBQ2hDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFHckMseURBQStEO0FBTS9ELE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBRS9CLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sd0JBQWEsQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsMkJBQTJCO1FB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QixFQUFFLE1BQTRDO1FBQ2pHLGlEQUFpRDtRQUNqRCxJQUFJLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyw0QkFBNEIsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBNRCxrQkFvTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgQml0R29CYXNlLFxuICBLZXlQYWlyLFxuICBNUENBbGdvcml0aG0sXG4gIE11bHRpc2lnVHlwZSxcbiAgbXVsdGlzaWdUeXBlcyxcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRzc1ZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBBcHRLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2xpYi90eXBlcyc7XG5pbXBvcnQgeyBBcHRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgYXVkaXRFZGRzYVByaXZhdGVLZXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXB0UGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4SGV4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBcHQgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBBcHQoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3IgYmV0d2VlbiB0aGUgY29pbidzIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICovXG4gIHB1YmxpYyBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnYXB0JztcbiAgfVxuXG4gIHB1YmxpYyBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2FwdCc7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0FwdG9zJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy50c3M7XG4gIH1cblxuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VkZHNhJztcbiAgfVxuXG4gIGFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkLCB0eFBhcmFtczogdHhQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eEhleCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleCB9KTtcbiAgICBpZiAoIWV4cGxhaW5lZFR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBleHBsYWluIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICh0eFBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVjaXBpZW50cyA9IHR4UGFyYW1zLnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBCaWdJbnQocmVjaXBpZW50LmFtb3VudCksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IEJpZ0ludChvdXRwdXQuYW1vdW50KSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFfLmlzRXF1YWwoZmlsdGVyZWRPdXRwdXRzLCBmaWx0ZXJlZFJlY2lwaWVudHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH1cbiAgICAgIGxldCB0b3RhbEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICBmb3IgKGNvbnN0IHJlY2lwaWVudHMgb2YgdHhQYXJhbXMucmVjaXBpZW50cykge1xuICAgICAgICB0b3RhbEFtb3VudCA9IHRvdGFsQW1vdW50LnBsdXMocmVjaXBpZW50cy5hbW91bnQpO1xuICAgICAgfVxuICAgICAgaWYgKCF0b3RhbEFtb3VudC5pc0VxdWFsVG8oZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHRvdGFsIGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhbiBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhpcyB3YWxsZXQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBWZXJpZmljYXRpb24gcGFyYW1ldGVycyBpbmNsdWRpbmcgYWRkcmVzcywga2V5Y2hhaW5zLCBhbmQgaW5kZXhcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhZGRyZXNzIGJlbG9uZ3MgdG8gd2FsbGV0XG4gICAqIEB0aHJvd3MgVW5leHBlY3RlZEFkZHJlc3NFcnJvciBpZiBhZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggZGVyaXZlZCBhZGRyZXNzXG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MocGFyYW1zLCB0aGlzLmlzVmFsaWRBZGRyZXNzLmJpbmQodGhpcyksIChwdWJLZXkpID0+XG4gICAgICB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJLZXkpXG4gICAgKTtcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBBcHRQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogcGFyYW1zLnR4SGV4IH0pO1xuICAgIGlmICghdHJhbnNhY3Rpb25FeHBsYW5hdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uc2VuZGVyLFxuICAgICAgICAgIGFtb3VudDogdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gYSBBcHQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QXB0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCByZWJ1aWx0VHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbjtcbiAgICB0cnkge1xuICAgICAgcmVidWlsdFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5yZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zLnR4SGV4KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZWJ1aWx0VHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEFwdEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IEFwdEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy5wdWIsXG4gICAgICBwcnY6IGtleXMucHJ2LFxuICAgIH07XG4gIH1cblxuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFR4QnVpbGRlckZhY3RvcnkoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWJ1aWxkVHJhbnNhY3Rpb24odHhIZXg6IHN0cmluZyk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhCdWlsZGVyRmFjdG9yeSA9IHRoaXMuZ2V0VHhCdWlsZGVyRmFjdG9yeSgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0eEJ1aWxkZXJGYWN0b3J5LmZyb20odHhIZXgpO1xuICAgICAgcmV0dXJuIHR4QnVpbGRlci5nZXRSZWJ1aWx0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlYnVpbGQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoeyBtdWx0aVNpZ1R5cGUsIHBydiwgcHVibGljS2V5IH06IEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKG11bHRpU2lnVHlwZSAhPT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbXVsdGlTaWdUeXBlJyk7XG4gICAgfVxuICAgIGF1ZGl0RWRkc2FQcml2YXRlS2V5KHBydiwgcHVibGljS2V5ID8/ICcnKTtcbiAgfVxuXG4gIHNldENvaW5TcGVjaWZpY0ZpZWxkc0luSW50ZW50KGludGVudDogUG9wdWxhdGVkSW50ZW50LCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBjdXN0b20gdHJhbnNhY3Rpb24gcGFyYW1ldGVycyBmb3IgQXB0b3NcbiAgICBpZiAocGFyYW1zLmFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMpIHtcbiAgICAgIGludGVudC5hcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zID0gcGFyYW1zLmFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -279,36 +279,17 @@ describe('APT:', function () {
279
279
  });
280
280
  });
281
281
  describe('Address Validation', () => {
282
- let keychains;
283
- let commonKeychain;
284
- before(function () {
285
- commonKeychain =
286
- '19bdfe2a4b498a05511381235a8892d54267807c4a3f654e310b938b8b424ff4adedbe92f4c146de641c67508a961324c8504cdf8e0c0acbb68d6104ccccd781';
287
- keychains = [
288
- {
289
- id: '6424c353eaf78d000766e95949868468',
290
- source: 'user',
291
- type: 'tss',
292
- commonKeychain: '19bdfe2a4b498a05511381235a8892d54267807c4a3f654e310b938b8b424ff4adedbe92f4c146de641c67508a961324c8504cdf8e0c0acbb68d6104ccccd781',
293
- encryptedPrv: '{"iv":"cZd5i7L4RxtwrALW2rK7UA==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"5zgoH1Bd3Fw=","ct":"9vVlnXFRtrM9FVEo+d2chbGHlM9lFZemueBuAs3BIkPo33Fo7jzwwNK/kIWkEyg+NmEBd5IaqAS157nvvvwzzsmMWlQdUz9qbmXNv3pg987cXFR08exS+4uhwP1YNOjJTRvRNcO9ZqHb46d4fmyJ/yC9/susCge7r/EsbaN5C3afv1dzybuq912FwaQElZLYYp5BICudFOMZ9k0UDMfKM/PMDkH7WexoGHr9GKq/bgCH2B39TZZyHKU6Uy47lXep2s6h0DrMwHOrnmiL3DZjOj88Ynvphlzxuo4eOlD2UHia2+nvIaISYs29Pr0DAvREutchvcBpExj1kWWPv7hQYrv8F0NAdatsbWl3w+xKyfiMKo1USlrwyJviypGtQtXOJyw0XPN0rv2+L5lW8BbjpzHfYYN13fJTedlGTFhhkzVtbbPAKE02kx7zCJcjYaiexdSTsrDLScYNT9/Jhdt27KpsooehwVohLfSKz4vbFfRu2MPZw3/+c/hfiJNgtz6esWbnxGrcE8U2IwPYCaK+Ghk4DcqWNIni59RI5B5kAsQOToII40qPN510uTgxBSPO7q7MHgkxdd4CqBq+ojr9j0P7oao8E5Y+CBDJrojDoCh1oCCDW9vo2dXlVcD8SIbw7U/9AfvEbA4xyE/5md1M7CIwLnWs2Ynv0YtaKoqhdS9x6FmHlMDhN/DKHinrwmowtrTT82fOkpO5g9saSmgU7Qy3gLt8t+VwdEyeFeQUKRSyci8qgqXQaZIg4+aXgaSOnlCFMtmB8ekYxEhTY5uzRfrNgS4s1QeqFBpNtUF+Ydi297pbVXnJoXAN+SVWd80GCx+yI2dpVC89k3rOWK9WeyqlnzuLJWp2RIOB9cdW8GFv/fN+QAJpYeVxOE4+nZDsKnsj8nKcg9t4Dlx1G6gLM1/Vq9YxNLbuzuRC0asUYvdMnoMvszmpm++TxndYisgNYscpZSoz7wvcazJNEPfhPVjEkd6tUUuN4GM35H0DmKCUQNT+a6B6hmHlTZvjxiyGAg5bY59hdjvJ+22QduazlEEC6LI3HrA7uK0TpplWzS1tCIFvTMUhj65DEZmNJ2+ZY9bQ4vsMf+DRR3OOG4t+DMlNfjOd3zNv3QoY95BjfWpryFwPzDq7bCP67JDsoj7j2TY5FRSrRkD77H0Ewlux2cWfjRTwcMHcdQxxuV0OP0aNjGDjybFN"}',
294
- },
295
- {
296
- id: '6424c353eaf78d000766e96137d4404b',
297
- source: 'backup',
298
- type: 'tss',
299
- commonKeychain: '19bdfe2a4b498a05511381235a8892d54267807c4a3f654e310b938b8b424ff4adedbe92f4c146de641c67508a961324c8504cdf8e0c0acbb68d6104ccccd781',
300
- encryptedPrv: '{"iv":"vi0dPef/Rx7kG/pRySQi6Q==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"9efhQsiEvVs=","ct":"Gw6atvf6gxKzsjtl3xseipO3rAxp1mAz7Yu1ihFsi5/lf2vMZegApgZx+pyILFS9KKLHbNF3U6WgSYdrr2t4vzdLsXkH1WIxfHS+cd2C5N59yADZDnPJBT6pv/IRvaYelP0Ck3nIYQ2hSMm8op+VOWC/SzHeh7slYDqwEHTGan0Wigfvk1yRd7CCJTaEAomnc/4eFi2NY3X3gt/3opy9IAgknnwUFohn96EWpEQ0F6pbzH/Z8VF6gF+DUcrrByAxExUPnHQZiFk3YHU/vVV4FxBU/mVAE8xBsBn5ul5e5SUMPfc7TBuJWv4BByTNg9xDShF/91Yx2nbfUm5d9QmM8lpKgzzQvcK8POAPk87gRCuKnsGh5vNS0UppkHc+ocfzRQlGA6jze7QyyQO0rMj5Ly8kWjwk2vISvKYHYS1NR7VU549UIXo7NXjatunKSc3+IreoRUHIshiaLg6hl+pxCCuc0qQ43V0mdIfCjTN8gkGWLNk8R7tAGPz9jyapQPcPEGHgEz0ATIi6yMNWCsibS2eLiE1uVEJONoM4lk6FPl3Q2CHbW2MeEbqjY8hbaw18mNb2xSBH/Fwpiial+Tvi2imqgnCO4ZpO9bllKftZPcQy0stN+eGBlb5ufyflKkDSiChHYroGjEpmiFicdde48cJszF52uKNnf1q67fA9/S2FAHQab3EXojxH2Gbk+kkV2h/TYKFFZSWC3vi4e8mO+vjMUcR0AdsgPFyEIz0SCGuba3CnTLNdEuZwsauAeHkx2vUTnRgJPVgNeeuXmsVG76Sy2ggJHuals0Hj8U2Xda0qO1RuFfoCWfss9wn6HGRwPPkhSB/8oNguAqmRVGKkd8Zwt3IvrTd9fk0/rFFDJKGz7WyNHkYgUmNiGcItD12v0jx7FZ52EJzl3Av1RyJUQK18+8EYPh3SGiU9dt7VX0aF0uo6JouKhOeldUvMP+AugQz8fUclwTQsbboVg27Yxo0DyATVwThW5a56R6Qf5ZiQJluFuzs5y98rq0S5q046lE6o3vVmJpEdwjeSCJoET5CL4nTgkXyWvhm4eB8u/e66l3o0qbaSx8q9YYmT9EpRcl5TP4ThLBKETYdzVvg4exjQfektMatk5EyUpEIhZPXh5vXpJZesdfO9LJ8zTaHBsBjDPU7cdNgQMbebpataRi8A0el2/IJXl+E+olgAz5zC4i2O1Q=="}',
301
- },
302
- {
303
- id: '6424c353eaf78d000766e9510b125fba',
304
- source: 'bitgo',
305
- type: 'tss',
306
- commonKeychain: '19bdfe2a4b498a05511381235a8892d54267807c4a3f654e310b938b8b424ff4adedbe92f4c146de641c67508a961324c8504cdf8e0c0acbb68d6104ccccd781',
307
- verifiedVssProof: true,
308
- isBitGo: true,
309
- },
310
- ];
311
- });
282
+ const testData = {
283
+ commonKeychain: '6a724c11eafea4209704c35e6ee3e1fba80d2a40860d873bbe5981de636c9cf6ade77e6fdd4388889ee93d7eaa737ab584edb57cc0cc15b2899380348d6e482c',
284
+ rootAddress: '0x0598b31aa77176dbaba25306404aa8131218068df58bf0b7eec13f57053fd5a7',
285
+ receiveAddress: '0xdc169725dd6d9a07ee255b17087b4079e8a80850c895c65b62c0ef6de740d37a',
286
+ receiveAddressIndex: 1,
287
+ };
288
+ const keychains = [
289
+ { commonKeychain: testData.commonKeychain },
290
+ { commonKeychain: testData.commonKeychain },
291
+ { commonKeychain: testData.commonKeychain },
292
+ ];
312
293
  it('should return true when validating a well formatted address prefixed with 0x', async function () {
313
294
  const address = '0xf941ae3cbe5645dccc15da8346b533f7f91f202089a5521653c062b2ff10b304';
314
295
  basecoin.isValidAddress(address).should.equal(true);
@@ -321,22 +302,26 @@ describe('APT:', function () {
321
302
  const address = 'wrongaddress';
322
303
  basecoin.isValidAddress(address).should.equal(false);
323
304
  });
324
- it('should return true for isWalletAddress with valid address for index 4', async function () {
325
- const newAddress = '0x8b3c7807730d75792dd6c49732cf9f014d6984a9c77d386bdb1072a9e537d8d8';
326
- const index = 4;
327
- const params = { commonKeychain, address: newAddress, index, keychains };
328
- (await basecoin.isWalletAddress(params)).should.equal(true);
305
+ it('should verify a valid receive address', async function () {
306
+ const params = {
307
+ address: testData.receiveAddress,
308
+ rootAddress: testData.rootAddress,
309
+ keychains,
310
+ index: testData.receiveAddressIndex,
311
+ };
312
+ const result = await basecoin.isWalletAddress(params);
313
+ result.should.equal(true);
329
314
  });
330
315
  it('should throw error for isWalletAddress when keychains is missing', async function () {
331
316
  const address = '0x2959bfc3fdb7dc23fed8deba2fafb70f3e606a59';
332
317
  const index = 0;
333
- const params = { commonKeychain, address, index };
318
+ const params = { commonKeychain: testData.commonKeychain, address, index };
334
319
  await assert_1.default.rejects(async () => basecoin.isWalletAddress(params));
335
320
  });
336
321
  it('should throw error for isWalletAddress when new address is invalid', async function () {
337
322
  const wrongAddress = 'badAddress';
338
323
  const index = 0;
339
- const params = { commonKeychain, address: wrongAddress, index };
324
+ const params = { commonKeychain: testData.commonKeychain, address: wrongAddress, index };
340
325
  await assert_1.default.rejects(async () => basecoin.isWalletAddress(params), {
341
326
  message: `invalid address: ${wrongAddress}`,
342
327
  });
@@ -372,4 +357,4 @@ describe('APT:', function () {
372
357
  });
373
358
  });
374
359
  });
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2FwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUNoQixtREFBK0Q7QUFDL0QsaURBQStDO0FBQy9DLG1DQUFxRTtBQUNyRSwyREFBNkM7QUFDN0Msb0RBQXVCO0FBQ3ZCLGtEQUEwQjtBQUMxQixvREFBNEI7QUFDNUIsK0NBVTRCO0FBQzVCLGdFQUF3QztBQUN4QyxpREFBeUU7QUFDekUsbUhBQWdIO0FBRWhILFFBQVEsQ0FBQyxNQUFNLEVBQUU7SUFDZixJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLFdBQVcsQ0FBQztJQUVoQixNQUFNLFVBQVUsR0FBRztRQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLGdDQUFnQztRQUNoRCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRztRQUNmLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtLQUNoQyxDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FBRztRQUM5QixLQUFLLEVBQUUsUUFBUSxDQUFDLHlCQUF5QjtRQUN6QyxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLHFCQUFxQixHQUFHO1FBQzVCLFVBQVUsRUFBRSxRQUFRLENBQUMsdUJBQXVCO1FBQzVDLElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsY0FBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUM7UUFDRixXQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLE9BQU8sZ0JBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUU7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQXVCLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQXVCLENBQUM7UUFFNUQsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsV0FBVyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsVUFBVSxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkUsV0FBVyxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBYSxDQUFDO1FBQ3RELGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUMxRyxjQUFjLENBQUMsYUFB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dEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IEFwdCwgQXB0VG9rZW4sIFRhcHQsIFRyYW5zZmVyVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2FwdCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIEFjY291bnRBZGRyZXNzLFxuICBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTksXG4gIEFwdG9zLFxuICBBUFRPU19DT0lOLFxuICBBcHRvc0NvbmZpZyxcbiAgRWQyNTUxOVB1YmxpY0tleSxcbiAgRWQyNTUxOVNpZ25hdHVyZSxcbiAgZ2VuZXJhdGVVc2VyVHJhbnNhY3Rpb25IYXNoLFxuICBOZXR3b3JrLFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQXB0Q29pbiwgY29pbnMsIEdhc1RhbmtBY2NvdW50Q29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVsZWdhdGlvblBvb2xBZGRTdGFrZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9kZWxlZ2F0aW9uUG9vbEFkZFN0YWtlVHJhbnNhY3Rpb24nO1xuXG5kZXNjcmliZSgnQVBUOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IG5ld1R4UHJlYnVpbGQ7XG4gIGxldCBuZXdUeFBhcmFtcztcblxuICBjb25zdCB0eFByZUJ1aWxkID0ge1xuICAgIHR4SGV4OiB0ZXN0RGF0YS5UUkFOU0FDVElPTl9VU0lOR19UUkFOU0ZFUl9DT0lOUyxcbiAgICB0eEluZm86IHt9LFxuICB9O1xuXG4gIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgIHJlY2lwaWVudHM6IHRlc3REYXRhLnJlY2lwaWVudHMsXG4gIH07XG5cbiAgY29uc3QgYmF0Y2hGdW5naWJsZVR4UHJlYnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLkZVTkdJQkxFX0JBVENIX1JBV19UWF9IRVgsXG4gICAgdHhJbmZvOiB7fSxcbiAgfTtcblxuICBjb25zdCBiYXRjaEZ1bmdpYmxlVHhQYXJhbXMgPSB7XG4gICAgcmVjaXBpZW50czogdGVzdERhdGEuYmF0Y2hGdW5naWJsZVJlY2lwaWVudHMsXG4gICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcignYXB0JywgQXB0LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RhcHQnLCBUYXB0LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2FwdDp1c2R0JywgQXB0VG9rZW4uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGFwdCcpO1xuICAgIG5ld1R4UHJlYnVpbGQgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQcmVCdWlsZCk7XG4gICAgfTtcbiAgICBuZXdUeFBhcmFtcyA9ICgpID0+IHtcbiAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFBhcmFtcyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYXB0ID0gYml0Z28uY29pbignYXB0Jyk7XG4gICAgY29uc3QgdGFwdCA9IGJpdGdvLmNvaW4oJ3RhcHQnKTtcbiAgICBjb25zdCBhcHRVc2R0ID0gYml0Z28uY29pbignYXB0OnVzZHQnKTtcbiAgICBjb25zdCBhcHRTdGF0aWNzID0gY29pbnMuZ2V0KCdhcHQnKSBhcyBHYXNUYW5rQWNjb3VudENvaW47XG4gICAgY29uc3QgdGFwdFN0YXRpY3MgPSBjb2lucy5nZXQoJ3RhcHQnKSBhcyBHYXNUYW5rQWNjb3VudENvaW47XG5cbiAgICBhcHQuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ2FwdCcpO1xuICAgIGFwdC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2FwdCcpO1xuICAgIGFwdC5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnQXB0b3MnKTtcbiAgICBhcHQuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTgpO1xuXG4gICAgdGFwdC5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGFwdCcpO1xuICAgIHRhcHQuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdhcHQnKTtcbiAgICB0YXB0LmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEFwdG9zJyk7XG4gICAgdGFwdC5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOCk7XG5cbiAgICBhcHRTdGF0aWNzLmdhc1RhbmtMb3dCYWxhbmNlQWxlcnRGYWN0b3Iuc2hvdWxkLmVxdWFsKDgwKTtcbiAgICB0YXB0U3RhdGljcy5nYXNUYW5rTG93QmFsYW5jZUFsZXJ0RmFjdG9yLnNob3VsZC5lcXVhbCg4MCk7XG4gICAgYXB0U3RhdGljcy5nYXNUYW5rTWluQmFsYW5jZVJlY29tbWVuZGF0aW9uRmFjdG9yLnNob3VsZC5lcXVhbCgyMDApO1xuICAgIHRhcHRTdGF0aWNzLmdhc1RhbmtNaW5CYWxhbmNlUmVjb21tZW5kYXRpb25GYWN0b3Iuc2hvdWxkLmVxdWFsKDIwMCk7XG5cbiAgICBhcHRVc2R0LmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnYXB0Jyk7XG4gICAgYXB0VXNkdC5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgnYXB0Jyk7XG4gICAgY29uc3QgYXB0VXNkdFN0YXRpY3MgPSBhcHRVc2R0LmdldENvbmZpZygpIGFzIEFwdENvaW47XG4gICAgYXB0VXNkdFN0YXRpY3MuZnVsbE5hbWUuc2hvdWxkLmVxdWFsKCdVU0QgVGV0aGVyJyk7XG4gICAgYXB0VXNkdFN0YXRpY3MuYXNzZXRJZC5zaG91bGQuZXF1YWwoJzB4MzU3YjBiNzRiYzgzM2U5NWExMTVhZDIyNjA0ODU0ZDZiMGZjYTE1MWNlY2Q5NDExMTc3MGU1ZDZmZmM5ZGMyYicpO1xuICAgIGFwdFVzZHRTdGF0aWNzLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDYpO1xuICB9KTtcblxuICBpdCgnaXMgdmFsaWQgcHViJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIHdpdGggMHggcHJlZml4XG4gICAgYmFzZWNvaW4uaXNWYWxpZFB1YignMHg5YjRlOTYwODZkMTExNTAwMjU5ZjliMzg2ODBiMDUwOWE0MDVjMTkwNGRhMTg5NzY0NTVhMjBjNjkxZDNiYjA3Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAvLyB3aXRob3V0IDB4IHByZWZpeFxuICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoJzliNGU5NjA4NmQxMTE1MDAyNTlmOWIzODY4MGIwNTA5YTQwNWMxOTA0ZGExODk3NjQ1NWEyMGM2OTFkM2JiMDcnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgdHJhbnNhY3Rpb246ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgZnVuZ2libGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogYmF0Y2hGdW5naWJsZVR4UHJlYnVpbGQsXG4gICAgICAgIHR4UGFyYW1zOiBiYXRjaEZ1bmdpYmxlVHhQYXJhbXMsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2hlbiByZWNpcGllbnRzIGFtb3VudCBhcmUgbnVtYmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50cyA9IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50cy5tYXAoKHsgYWRkcmVzcywgYW1vdW50IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYWRkcmVzcywgYW1vdW50OiBOdW1iZXIoYW1vdW50KSB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHt9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BhcnNlIGFuZCBFeHBsYWluIFRyYW5zYWN0aW9uczogJywgKCkgPT4ge1xuICAgIGNvbnN0IHRyYW5zZmVySW5wdXRzUmVzcG9uc2UgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNlbmRlcjIuYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5BTU9VTlQudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0c1Jlc3BvbnNlID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogdGVzdERhdGEucmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2ZlckZ1bmdpYmxlSW5wdXRSZXNwb25zZSA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuZnVuZ2libGVTZW5kZXIuYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9BTU9VTlQudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5mZXJGdW5naWJsZU91dHB1dFJlc3BvbnNlID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5mdW5naWJsZVRva2VuUmVjaXBpZW50c1sxXS5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5SZWNpcGllbnRzWzFdLmFtb3VudCxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5UUkFOU0FDVElPTl9VU0lOR19UUkFOU0ZFUl9DT0lOUyxcbiAgICAgIH0pO1xuXG4gICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgaW5wdXRzOiB0cmFuc2ZlcklucHV0c1Jlc3BvbnNlLFxuICAgICAgICBvdXRwdXRzOiB0cmFuc2Zlck91dHB1dHNSZXNwb25zZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBzaWduZWQgZnVuZ2libGUgdHJhbnNhY3Rpb24sIG9ubHkgd29yayBpZiBhbW91bnQgcGFyc2luZyBjb3JyZWN0bHkgZG9uZSBmcm9tIHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogdGVzdERhdGEuRlVOR0lCTEVfU0VSSUFMSVpFRF9UWF9IRVgsXG4gICAgICB9KTtcblxuICAgICAgcGFyc2VkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGlucHV0czogdHJhbnNmZXJGdW5naWJsZUlucHV0UmVzcG9uc2UsXG4gICAgICAgIG91dHB1dHM6IHRyYW5mZXJGdW5naWJsZU91dHB1dFJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJhd1R4ID0gbmV3VHhQcmVidWlsZCgpLnR4SGV4O1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNmZXJUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RhcHQnKSk7XG4gICAgICB0cmFuc2FjdGlvbi5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgpO1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHggPSB0cmFuc2FjdGlvbi5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnNvbGUubG9nKGV4cGxhaW5lZFR4KTtcbiAgICAgIGV4cGxhaW5lZFR4LnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFtcbiAgICAgICAgICAnaWQnLFxuICAgICAgICAgICdvdXRwdXRzJyxcbiAgICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAgICAgJ2ZlZScsXG4gICAgICAgICAgJ3dpdGhkcmF3QW1vdW50JyxcbiAgICAgICAgICAnc2VuZGVyJyxcbiAgICAgICAgICAndHlwZScsXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAnMHgyNDkyODlhODE3OGU0YjljZGI4OWZhZDZlOGU0MzZjY2M0MzU3NTNlNGVhM2M5ZDUwZTBjOGI1MjU1ODJlOTBkJyxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweGY3NDA1YzI4YTAyY2Y1YmFiNGVhNDQ5ODI0MGJiMzU3OWRiNDU5NTE3OTRlYjFjODQzYmVmMDUzNGMwOTNhZDknLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJzAnIH0sXG4gICAgICAgIHNlbmRlcjogJzB4MWFlZDgwODkxNmFiOWIxYjMwYjA3YWJiNTM1NjFhZmQ0Njg0NzI4NWNlMjg2NTEyMjFkNDA2MTczYTM3MjQ0OScsXG4gICAgICAgIHR5cGU6IDAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHN0YWtpbmcgZGVsZWdhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByYXdUeCA9IHRlc3REYXRhLkRFTEVHQVRJT05fUE9PTF9BRERfU1RBS0VfVFhfSEVYO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgRGVsZWdhdGlvblBvb2xBZGRTdGFrZVRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGFwdCcpKTtcbiAgICAgIHRyYW5zYWN0aW9uLmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeCk7XG4gICAgICBjb25zdCBleHBsYWluZWRUeCA9IHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgZXhwbGFpbmVkVHguc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogW1xuICAgICAgICAgICdpZCcsXG4gICAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgICAnZmVlJyxcbiAgICAgICAgICAnd2l0aGRyYXdBbW91bnQnLFxuICAgICAgICAgICdzZW5kZXInLFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgXSxcbiAgICAgICAgaWQ6ICcweGM1Yjk2MGQxYmVjMTQ5Yzc3ODk2MzQ0Nzc0MzUyYzYxNDQxMzA3YWY1NjRlYWE4Yzg0Zjg1NzIwOGU0MTFiZjMnLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4Zjc0MDVjMjhhMDJjZjViYWI0ZWE0NDk4MjQwYmIzNTc5ZGI0NTk1MTc5NGViMWM4NDNiZWYwNTM0YzA5M2FkOScsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnMCcgfSxcbiAgICAgICAgc2VuZGVyOiAnMHgxYWVkODA4OTE2YWI5YjFiMzBiMDdhYmI1MzU2MWFmZDQ2ODQ3Mjg1Y2UyODY1MTIyMWQ0MDYxNzNhMzcyNDQ5JyxcbiAgICAgICAgdHlwZTogMzAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBleHBsYWluIGEgaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByYXdUeCA9ICdpbnZhbGlkUmF3VHJhbnNhY3Rpb24nO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNmZXJUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RhcHQnKSk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiB0cmFuc2FjdGlvbi5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdoZW4gZXhwbGFpblRyYW5zYWN0aW9uIHJlc3BvbnNlIGlzIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKEFwdC5wcm90b3R5cGUsICdleHBsYWluVHJhbnNhY3Rpb24nKTtcbiAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnBhcnNlVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdERhdGEuVFJBTlNGRVIgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgbGV0IGtleWNoYWlucztcbiAgICBsZXQgY29tbW9uS2V5Y2hhaW47XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgY29tbW9uS2V5Y2hhaW4gPVxuICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnO1xuICAgICAga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2NDI0YzM1M2VhZjc4ZDAwMDc2NmU5NTk0OTg2ODQ2OCcsXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwiY1pkNWk3TDRSeHR3ckFMVzJySzdVQT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjV6Z29IMUJkM0Z3PVwiLFwiY3RcIjpcIjl2VmxuWEZSdHJNOUZWRW8rZDJjaGJHSGxNOWxGWmVtdWVCdUFzM0JJa1BvMzNGbzdqend3Tksva0lXa0V5ZytObUVCZDVJYXFBUzE1N252dnZ3enpzbU1XbFFkVXo5cWJtWE52M3BnOTg3Y1hGUjA4ZXhTKzR1aHdQMVlOT2pKVFJ2Uk5jTzlacUhiNDZkNGZteUoveUM5L3N1c0NnZTdyL0VzYmFONUMzYWZ2MWR6eWJ1cTkxMkZ3YVFFbFpMWVlwNUJJQ3VkRk9NWjlrMFVETWZLTS9QTURrSDdXZXhvR0hyOUdLcS9iZ0NIMkIzOVRaWnlIS1U2VXk0N2xYZXAyczZoMERyTXdIT3JubWlMM0Raak9qODhZbnZwaGx6eHVvNGVPbEQyVUhpYTIrbnZJYUlTWXMyOVByMERBdlJFdXRjaHZjQnBFeGoxa1dXUHY3aFFZcnY4RjBOQWRhdHNiV2wzdyt4S3lmaU1LbzFVU2xyd3lKdml5cEd0UXRYT0p5dzBYUE4wcnYyK0w1bFc4QmJqcHpIZllZTjEzZkpUZWRsR1RGaGhrelZ0YmJQQUtFMDJreDd6Q0pjallhaWV4ZFNUc3JETFNjWU5UOS9KaGR0MjdLcHNvb2Vod1ZvaExmU0t6NHZiRmZSdTJNUFp3My8rYy9oZmlKTmd0ejZlc1dibnhHcmNFOFUySXdQWUNhSytHaGs0RGNxV05Jbmk1OVJJNUI1a0FzUU9Ub0lJNDBxUE41MTB1VGd4QlNQTzdxN01IZ2t4ZGQ0Q3FCcStvanI5ajBQN29hbzhFNVkrQ0JESnJvakRvQ2gxb0NDRFc5dm8yZFhsVmNEOFNJYnc3VS85QWZ2RWJBNHh5RS81bWQxTTdDSXdMbldzMlludjBZdGFLb3FoZFM5eDZGbUhsTURoTi9ES0hpbnJ3bW93dHJUVDgyZk9rcE81ZzlzYVNtZ1U3UXkzZ0x0OHQrVndkRXllRmVRVUtSU3ljaThxZ3FYUWFaSWc0K2FYZ2FTT25sQ0ZNdG1COGVrWXhFaFRZNXV6UmZyTmdTNHMxUWVxRkJwTnRVRitZZGkyOTdwYlZYbkpvWEFOK1NWV2Q4MEdDeCt5STJkcFZDODlrM3JPV0s5V2V5cWxuenVMSldwMlJJT0I5Y2RXOEdGdi9mTitRQUpwWWVWeE9FNCtuWkRzS25zajhuS2NnOXQ0RGx4MUc2Z0xNMS9WcTlZeE5MYnV6dVJDMGFzVVl2ZE1ub012c3ptcG0rK1R4bmRZaXNnTllzY3BaU296N3d2Y2F6Sk5FUGZoUFZqRWtkNnRVVXVONEdNMzVIMERtS0NVUU5UK2E2QjZobUhsVFp2anhpeUdBZzViWTU5aGRqdkorMjJRZHVhemxFRUM2TEkzSHJBN3VLMFRwcGxXelMxdENJRnZUTVVoajY1REVabU5KMitaWTliUTR2c01mK0RSUjNPT0c0dCtETWxOZmpPZDN6TnYzUW9ZOTVCamZXcHJ5RndQekRxN2JDUDY3SkRzb2o3ajJUWTVGUlNyUmtENzdIMEV3bHV4MmNXZmpSVHdjTUhjZFF4eHVWME9QMGFOakdEanliRk5cIn0nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2NDI0YzM1M2VhZjc4ZDAwMDc2NmU5NjEzN2Q0NDA0YicsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjpcbiAgICAgICAgICAgICcxOWJkZmUyYTRiNDk4YTA1NTExMzgxMjM1YTg4OTJkNTQyNjc4MDdjNGEzZjY1NGUzMTBiOTM4YjhiNDI0ZmY0YWRlZGJlOTJmNGMxNDZkZTY0MWM2NzUwOGE5NjEzMjRjODUwNGNkZjhlMGMwYWNiYjY4ZDYxMDRjY2NjZDc4MScsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCJ2aTBkUGVmL1J4N2tHL3BSeVNRaTZRPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiOWVmaFFzaUV2VnM9XCIsXCJjdFwiOlwiR3c2YXR2ZjZneEt6c2p0bDN4c2VpcE8zckF4cDFtQXo3WXUxaWhGc2k1L2xmMnZNWmVnQXBnWngrcHlJTEZTOUtLTEhiTkYzVTZXZ1NZZHJyMnQ0dnpkTHNYa0gxV0l4ZkhTK2NkMkM1TjU5eUFEWkRuUEpCVDZwdi9JUnZhWWVsUDBDazNuSVlRMmhTTW04b3ArVk9XQy9TekhlaDdzbFlEcXdFSFRHYW4wV2lnZnZrMXlSZDdDQ0pUYUVBb21uYy80ZUZpMk5ZM1gzZ3QvM29weTlJQWdrbm53VUZvaG45NkVXcEVRMEY2cGJ6SC9aOFZGNmdGK0RVY3JyQnlBeEV4VVBuSFFaaUZrM1lIVS92VlY0RnhCVS9tVkFFOHhCc0JuNXVsNWU1U1VNUGZjN1RCdUpXdjRCQnlUTmc5eERTaEYvOTFZeDJuYmZVbTVkOVFtTThscEtnenpRdmNLOFBPQVBrODdnUkN1S25zR2g1dk5TMFVwcGtIYytvY2Z6UlFsR0E2anplN1F5eVFPMHJNajVMeThrV2p3azJ2SVN2S1lIWVMxTlI3VlU1NDlVSVhvN05YamF0dW5LU2MzK0lyZW9SVUhJc2hpYUxnNmhsK3B4Q0N1YzBxUTQzVjBtZElmQ2pUTjhna0dXTE5rOFI3dEFHUHo5anlhcFFQY1BFR0hnRXowQVRJaTZ5TU5XQ3NpYlMyZUxpRTF1VkVKT05vTTRsazZGUGwzUTJDSGJXMk1lRWJxalk4aGJhdzE4bU5iMnhTQkgvRndwaWlhbCtUdmkyaW1xZ25DTzRacE85YmxsS2Z0WlBjUXkwc3ROK2VHQmxiNXVmeWZsS2tEU2lDaEhZcm9HakVwbWlGaWNkZGU0OGNKc3pGNTJ1S05uZjFxNjdmQTkvUzJGQUhRYWIzRVhvanhIMkdiaytra1YyaC9UWUtGRlpTV0Mzdmk0ZThtTyt2ak1VY1IwQWRzZ1BGeUVJejBTQ0d1YmEzQ25UTE5kRXVad3NhdUFlSGt4MnZVVG5SZ0pQVmdOZWV1WG1zVkc3NlN5MmdnSkh1YWxzMEhqOFUyWGRhMHFPMVJ1RmZvQ1dmc3M5d242SEdSd1BQa2hTQi84b05ndUFxbVJWR0trZDhad3QzSXZyVGQ5ZmswL3JGRkRKS0d6N1d5TkhrWWdVbU5pR2NJdEQxMnYwang3Rlo1MkVKemwzQXYxUnlKVVFLMTgrOEVZUGgzU0dpVTlkdDdWWDBhRjB1bzZKb3VLaE9lbGRVdk1QK0F1Z1F6OGZVY2x3VFFzYmJvVmcyN1l4bzBEeUFUVndUaFc1YTU2UjZRZjVaaVFKbHVGdXpzNXk5OHJxMFM1cTA0NmxFNm8zdlZtSnBFZHdqZVNDSm9FVDVDTDRuVGdrWHlXdmhtNGVCOHUvZTY2bDNvMHFiYVN4OHE5WVltVDlFcFJjbDVUUDRUaExCS0VUWWR6VnZnNGV4alFmZWt0TWF0azVFeVVwRUloWlBYaDV2WHBKWmVzZGZPOUxKOHpUYUhCc0JqRFBVN2NkTmdRTWJlYnBhdGFSaThBMGVsMi9JSlhsK0Urb2xnQXo1ekM0aTJPMVE9PVwifScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzY0MjRjMzUzZWFmNzhkMDAwNzY2ZTk1MTBiMTI1ZmJhJyxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnLFxuICAgICAgICAgIHZlcmlmaWVkVnNzUHJvb2Y6IHRydWUsXG4gICAgICAgICAgaXNCaXRHbzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIHdlbGwgZm9ybWF0dGVkIGFkZHJlc3MgcHJlZml4ZWQgd2l0aCAweCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHhmOTQxYWUzY2JlNTY0NWRjY2MxNWRhODM0NmI1MzNmN2Y5MWYyMDIwODlhNTUyMTY1M2MwNjJiMmZmMTBiMzA0JztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsaWRhdGluZyBhbiBvbGQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHgyOTU5YmZjM2ZkYjdkYzIzZmVkOGRlYmEyZmFmYjcwZjNlNjA2YTU5JztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbGlkYXRpbmcgYW4gaW5jb3JyZWN0bHkgZm9ybWF0dGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICd3cm9uZ2FkZHJlc3MnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGlzV2FsbGV0QWRkcmVzcyB3aXRoIHZhbGlkIGFkZHJlc3MgZm9yIGluZGV4IDQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBuZXdBZGRyZXNzID0gJzB4OGIzYzc4MDc3MzBkNzU3OTJkZDZjNDk3MzJjZjlmMDE0ZDY5ODRhOWM3N2QzODZiZGIxMDcyYTllNTM3ZDhkOCc7XG4gICAgICBjb25zdCBpbmRleCA9IDQ7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgY29tbW9uS2V5Y2hhaW4sIGFkZHJlc3M6IG5ld0FkZHJlc3MsIGluZGV4LCBrZXljaGFpbnMgfTtcbiAgICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4ga2V5Y2hhaW5zIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4Mjk1OWJmYzNmZGI3ZGMyM2ZlZDhkZWJhMmZhZmI3MGYzZTYwNmE1OSc7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgY29tbW9uS2V5Y2hhaW4sIGFkZHJlc3MsIGluZGV4IH07XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpc1dhbGxldEFkZHJlc3Mgd2hlbiBuZXcgYWRkcmVzcyBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3JvbmdBZGRyZXNzID0gJ2JhZEFkZHJlc3MnO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MsIGluZGV4IH07XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSwge1xuICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBhZGRyZXNzOiAke3dyb25nQWRkcmVzc31gLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdJRCBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdjaGVjayBpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5ldHdvcms6IE5ldHdvcmsgPSBOZXR3b3JrLlRFU1RORVQ7XG4gICAgICBjb25zdCBhcHRvcyA9IG5ldyBBcHRvcyhuZXcgQXB0b3NDb25maWcoeyBuZXR3b3JrIH0pKTtcbiAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKFxuICAgICAgICAnMHhjOGYwMmQyNWFhNjk4YjNlOWZiZDhhMDhlOGRhNGM4ZWUyNjE4MzJhMjVhNGNkZTg3MzFiNWVjMzU2NTM3ZDA5J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKFxuICAgICAgICAnMHhmNzQwNWMyOGEwMmNmNWJhYjRlYTQ0OTgyNDBiYjM1NzlkYjQ1OTUxNzk0ZWIxYzg0M2JlZjA1MzRjMDkzYWQ5J1xuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCBhcHRvcy50cmFuc2FjdGlvbi5idWlsZC5zaW1wbGUoe1xuICAgICAgICBzZW5kZXI6IHNlbmRlckFkZHJlc3MsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmdW5jdGlvbjogJzB4MTo6Y29pbjo6dHJhbnNmZXInLFxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IFtBUFRPU19DT0lOXSxcbiAgICAgICAgICBmdW5jdGlvbkFyZ3VtZW50czogW3JlY2lwaWVudEFkZHJlc3MsIDEwMDBdLFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgbWF4R2FzQW1vdW50OiAyMDAwMDAsXG4gICAgICAgICAgZ2FzVW5pdFByaWNlOiAxMDAsXG4gICAgICAgICAgZXhwaXJlVGltZXN0YW1wOiAxNzMyNjk5MjM2LFxuICAgICAgICAgIGFjY291bnRTZXF1ZW5jZU51bWJlcjogMTQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgREVGQVVMVF9QVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgICAgIGNvbnN0IERFRkFVTFRfU0lHTkFUVVJFID0gQnVmZmVyLmFsbG9jKDY0KTtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFZDI1NTE5UHVibGljS2V5KHV0aWxzLmdldEJ1ZmZlckZyb21IZXhTdHJpbmcoREVGQVVMVF9QVUJMSUNfS0VZLnRvU3RyaW5nKCdoZXgnKSkpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IEVkMjU1MTlTaWduYXR1cmUoREVGQVVMVF9TSUdOQVRVUkUpO1xuICAgICAgY29uc3Qgc2VuZGVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkocHVibGljS2V5LCBzaWduYXR1cmUpO1xuICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZVVzZXJUcmFuc2FjdGlvbkhhc2goeyB0cmFuc2FjdGlvbiwgc2VuZGVyQXV0aGVudGljYXRvciB9KTtcblxuICAgICAgaWQuc2hvdWxkLmVxdWFsKCcweDkyM2QxY2ZlZDNhZmFjMjQwNDg0NTExNjAzMzdkYjc1YmEyODI5MTIxNTdlZTQzNDA3YjU3MjkyMzgwMWQ1YmEnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2FwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUNoQixtREFBK0Q7QUFDL0QsaURBQStDO0FBQy9DLG1DQUFxRTtBQUNyRSwyREFBNkM7QUFDN0Msb0RBQXVCO0FBQ3ZCLGtEQUEwQjtBQUMxQixvREFBNEI7QUFDNUIsK0NBVTRCO0FBQzVCLGdFQUF3QztBQUN4QyxpREFBeUU7QUFDekUsbUhBQWdIO0FBRWhILFFBQVEsQ0FBQyxNQUFNLEVBQUU7SUFDZixJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLFdBQVcsQ0FBQztJQUVoQixNQUFNLFVBQVUsR0FBRztRQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLGdDQUFnQztRQUNoRCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRztRQUNmLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtLQUNoQyxDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FBRztRQUM5QixLQUFLLEVBQUUsUUFBUSxDQUFDLHlCQUF5QjtRQUN6QyxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLHFCQUFxQixHQUFHO1FBQzVCLFVBQVUsRUFBRSxRQUFRLENBQUMsdUJBQXVCO1FBQzVDLElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsY0FBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUM7UUFDRixXQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLE9BQU8sZ0JBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUU7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQXVCLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQXVCLENBQUM7UUFFNUQsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsV0FBVyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsVUFBVSxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkUsV0FBVyxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBYSxDQUFDO1FBQ3RELGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUMxRyxjQUFjLENBQUMsYUFB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RUFBRSxNQUFNO29CQUNwQixZQUFZLEVBQUUsR0FBRztvQkFDakIsZUFBZSxFQUFFLFVBQVU7b0JBQzNCLHFCQUFxQixFQUFFLEVBQUU7aUJBQzFCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLHlCQUFnQixDQUFDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pHLE1BQU0sU0FBUyxHQUFHLElBQUkseUJBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMxRCxNQUFNLG1CQUFtQixHQUFHLElBQUksb0NBQTJCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sRUFBRSxHQUFHLElBQUEsb0NBQTJCLEVBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1lBRTdFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgQXB0LCBBcHRUb2tlbiwgVGFwdCwgVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvYXB0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgQWNjb3VudEFkZHJlc3MsXG4gIEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOSxcbiAgQXB0b3MsXG4gIEFQVE9TX0NPSU4sXG4gIEFwdG9zQ29uZmlnLFxuICBFZDI1NTE5UHVibGljS2V5LFxuICBFZDI1NTE5U2lnbmF0dXJlLFxuICBnZW5lcmF0ZVVzZXJUcmFuc2FjdGlvbkhhc2gsXG4gIE5ldHdvcmssXG59IGZyb20gJ0BhcHRvcy1sYWJzL3RzLXNkayc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBBcHRDb2luLCBjb2lucywgR2FzVGFua0FjY291bnRDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBEZWxlZ2F0aW9uUG9vbEFkZFN0YWtlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL2RlbGVnYXRpb25Qb29sQWRkU3Rha2VUcmFuc2FjdGlvbic7XG5cbmRlc2NyaWJlKCdBUFQ6JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgbmV3VHhQcmVidWlsZDtcbiAgbGV0IG5ld1R4UGFyYW1zO1xuXG4gIGNvbnN0IHR4UHJlQnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLlRSQU5TQUNUSU9OX1VTSU5HX1RSQU5TRkVSX0NPSU5TLFxuICAgIHR4SW5mbzoge30sXG4gIH07XG5cbiAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgcmVjaXBpZW50czogdGVzdERhdGEucmVjaXBpZW50cyxcbiAgfTtcblxuICBjb25zdCBiYXRjaEZ1bmdpYmxlVHhQcmVidWlsZCA9IHtcbiAgICB0eEhleDogdGVzdERhdGEuRlVOR0lCTEVfQkFUQ0hfUkFXX1RYX0hFWCxcbiAgICB0eEluZm86IHt9LFxuICB9O1xuXG4gIGNvbnN0IGJhdGNoRnVuZ2libGVUeFBhcmFtcyA9IHtcbiAgICByZWNpcGllbnRzOiB0ZXN0RGF0YS5iYXRjaEZ1bmdpYmxlUmVjaXBpZW50cyxcbiAgICB0eXBlOiAndHJhbnNmZXInLFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdhcHQnLCBBcHQuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGFwdCcsIFRhcHQuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcignYXB0OnVzZHQnLCBBcHRUb2tlbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YXB0Jyk7XG4gICAgbmV3VHhQcmVidWlsZCA9ICgpID0+IHtcbiAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFByZUJ1aWxkKTtcbiAgICB9O1xuICAgIG5ld1R4UGFyYW1zID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UGFyYW1zKTtcbiAgICB9O1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHQgPSBiaXRnby5jb2luKCdhcHQnKTtcbiAgICBjb25zdCB0YXB0ID0gYml0Z28uY29pbigndGFwdCcpO1xuICAgIGNvbnN0IGFwdFVzZHQgPSBiaXRnby5jb2luKCdhcHQ6dXNkdCcpO1xuICAgIGNvbnN0IGFwdFN0YXRpY3MgPSBjb2lucy5nZXQoJ2FwdCcpIGFzIEdhc1RhbmtBY2NvdW50Q29pbjtcbiAgICBjb25zdCB0YXB0U3RhdGljcyA9IGNvaW5zLmdldCgndGFwdCcpIGFzIEdhc1RhbmtBY2NvdW50Q29pbjtcblxuICAgIGFwdC5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgnYXB0Jyk7XG4gICAgYXB0LmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnYXB0Jyk7XG4gICAgYXB0LmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdBcHRvcycpO1xuICAgIGFwdC5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOCk7XG5cbiAgICB0YXB0LmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0YXB0Jyk7XG4gICAgdGFwdC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2FwdCcpO1xuICAgIHRhcHQuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgQXB0b3MnKTtcbiAgICB0YXB0LmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcblxuICAgIGFwdFN0YXRpY3MuZ2FzVGFua0xvd0JhbGFuY2VBbGVydEZhY3Rvci5zaG91bGQuZXF1YWwoODApO1xuICAgIHRhcHRTdGF0aWNzLmdhc1RhbmtMb3dCYWxhbmNlQWxlcnRGYWN0b3Iuc2hvdWxkLmVxdWFsKDgwKTtcbiAgICBhcHRTdGF0aWNzLmdhc1RhbmtNaW5CYWxhbmNlUmVjb21tZW5kYXRpb25GYWN0b3Iuc2hvdWxkLmVxdWFsKDIwMCk7XG4gICAgdGFwdFN0YXRpY3MuZ2FzVGFua01pbkJhbGFuY2VSZWNvbW1lbmRhdGlvbkZhY3Rvci5zaG91bGQuZXF1YWwoMjAwKTtcblxuICAgIGFwdFVzZHQuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdhcHQnKTtcbiAgICBhcHRVc2R0LmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdhcHQnKTtcbiAgICBjb25zdCBhcHRVc2R0U3RhdGljcyA9IGFwdFVzZHQuZ2V0Q29uZmlnKCkgYXMgQXB0Q29pbjtcbiAgICBhcHRVc2R0U3RhdGljcy5mdWxsTmFtZS5zaG91bGQuZXF1YWwoJ1VTRCBUZXRoZXInKTtcbiAgICBhcHRVc2R0U3RhdGljcy5hc3NldElkLnNob3VsZC5lcXVhbCgnMHgzNTdiMGI3NGJjODMzZTk1YTExNWFkMjI2MDQ4NTRkNmIwZmNhMTUxY2VjZDk0MTExNzcwZTVkNmZmYzlkYzJiJyk7XG4gICAgYXB0VXNkdFN0YXRpY3MuZGVjaW1hbFBsYWNlcy5zaG91bGQuZXF1YWwoNik7XG4gIH0pO1xuXG4gIGl0KCdpcyB2YWxpZCBwdWInLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gd2l0aCAweCBwcmVmaXhcbiAgICBiYXNlY29pbi5pc1ZhbGlkUHViKCcweDliNGU5NjA4NmQxMTE1MDAyNTlmOWIzODY4MGIwNTA5YTQwNWMxOTA0ZGExODk3NjQ1NWEyMGM2OTFkM2JiMDcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIC8vIHdpdGhvdXQgMHggcHJlZml4XG4gICAgYmFzZWNvaW4uaXNWYWxpZFB1YignOWI0ZTk2MDg2ZDExMTUwMDI1OWY5YjM4NjgwYjA1MDlhNDA1YzE5MDRkYTE4OTc2NDU1YTIwYzY5MWQzYmIwNycpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSB0cmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBmdW5naWJsZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiBiYXRjaEZ1bmdpYmxlVHhQcmVidWlsZCxcbiAgICAgICAgdHhQYXJhbXM6IGJhdGNoRnVuZ2libGVUeFBhcmFtcyxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50IGFyZSBudW1iZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cy5yZWNpcGllbnRzID0gdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cy5yZWNpcGllbnRzLm1hcCgoeyBhZGRyZXNzLCBhbW91bnQgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBhZGRyZXNzLCBhbW91bnQ6IE51bWJlcihhbW91bnQpIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge307XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgYW5kIEV4cGxhaW4gVHJhbnNhY3Rpb25zOiAnLCAoKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmZXJJbnB1dHNSZXNwb25zZSA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2VuZGVyMi5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IHRlc3REYXRhLkFNT1VOVC50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbnNmZXJPdXRwdXRzUmVzcG9uc2UgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5zZmVyRnVuZ2libGVJbnB1dFJlc3BvbnNlID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5mdW5naWJsZVNlbmRlci5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX0FNT1VOVC50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbmZlckZ1bmdpYmxlT3V0cHV0UmVzcG9uc2UgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5SZWNpcGllbnRzWzFdLmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogdGVzdERhdGEuZnVuZ2libGVUb2tlblJlY2lwaWVudHNbMV0uYW1vdW50LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IHRlc3REYXRhLlRSQU5TQUNUSU9OX1VTSU5HX1RSQU5TRkVSX0NPSU5TLFxuICAgICAgfSk7XG5cbiAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBpbnB1dHM6IHRyYW5zZmVySW5wdXRzUmVzcG9uc2UsXG4gICAgICAgIG91dHB1dHM6IHRyYW5zZmVyT3V0cHV0c1Jlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHNpZ25lZCBmdW5naWJsZSB0cmFuc2FjdGlvbiwgb25seSB3b3JrIGlmIGFtb3VudCBwYXJzaW5nIGNvcnJlY3RseSBkb25lIGZyb20gcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5GVU5HSUJMRV9TRVJJQUxJWkVEX1RYX0hFWCxcbiAgICAgIH0pO1xuXG4gICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgaW5wdXRzOiB0cmFuc2ZlckZ1bmdpYmxlSW5wdXRSZXNwb25zZSxcbiAgICAgICAgb3V0cHV0czogdHJhbmZlckZ1bmdpYmxlT3V0cHV0UmVzcG9uc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmF3VHggPSBuZXdUeFByZWJ1aWxkKCkudHhIZXg7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGFwdCcpKTtcbiAgICAgIHRyYW5zYWN0aW9uLmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeCk7XG4gICAgICBjb25zdCBleHBsYWluZWRUeCA9IHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc29sZS5sb2coZXhwbGFpbmVkVHgpO1xuICAgICAgZXhwbGFpbmVkVHguc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogW1xuICAgICAgICAgICdpZCcsXG4gICAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgICAnZmVlJyxcbiAgICAgICAgICAnd2l0aGRyYXdBbW91bnQnLFxuICAgICAgICAgICdzZW5kZXInLFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgXSxcbiAgICAgICAgaWQ6ICcweDI0OTI4OWE4MTc4ZTRiOWNkYjg5ZmFkNmU4ZTQzNmNjYzQzNTc1M2U0ZWEzYzlkNTBlMGM4YjUyNTU4MmU5MGQnLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4Zjc0MDVjMjhhMDJjZjViYWI0ZWE0NDk4MjQwYmIzNTc5ZGI0NTk1MTc5NGViMWM4NDNiZWYwNTM0YzA5M2FkOScsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnMCcgfSxcbiAgICAgICAgc2VuZGVyOiAnMHgxYWVkODA4OTE2YWI5YjFiMzBiMDdhYmI1MzU2MWFmZDQ2ODQ3Mjg1Y2UyODY1MTIyMWQ0MDYxNzNhMzcyNDQ5JyxcbiAgICAgICAgdHlwZTogMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc3Rha2luZyBkZWxlZ2F0ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdGVzdERhdGEuREVMRUdBVElPTl9QT09MX0FERF9TVEFLRV9UWF9IRVg7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBEZWxlZ2F0aW9uUG9vbEFkZFN0YWtlVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0YXB0JykpO1xuICAgICAgdHJhbnNhY3Rpb24uZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4KTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBleHBsYWluZWRUeC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAnb3V0cHV0cycsXG4gICAgICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgICAgICdmZWUnLFxuICAgICAgICAgICd3aXRoZHJhd0Ftb3VudCcsXG4gICAgICAgICAgJ3NlbmRlcicsXG4gICAgICAgICAgJ3R5cGUnLFxuICAgICAgICBdLFxuICAgICAgICBpZDogJzB4YzViOTYwZDFiZWMxNDljNzc4OTYzNDQ3NzQzNTJjNjE0NDEzMDdhZjU2NGVhYThjODRmODU3MjA4ZTQxMWJmMycsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhmNzQwNWMyOGEwMmNmNWJhYjRlYTQ0OTgyNDBiYjM1NzlkYjQ1OTUxNzk0ZWIxYzg0M2JlZjA1MzRjMDkzYWQ5JyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogJzEwMDAnLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICcwJyB9LFxuICAgICAgICBzZW5kZXI6ICcweDFhZWQ4MDg5MTZhYjliMWIzMGIwN2FiYjUzNTYxYWZkNDY4NDcyODVjZTI4NjUxMjIxZDQwNjE3M2EzNzI0NDknLFxuICAgICAgICB0eXBlOiAzMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gYSBpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJhd1R4ID0gJ2ludmFsaWRSYXdUcmFuc2FjdGlvbic7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGFwdCcpKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IHRyYW5zYWN0aW9uLmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeCksIHtcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoQXB0LnByb3RvdHlwZSwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXNvbHZlcyh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5UUkFOU0ZFUiB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0RGF0YSA9IHtcbiAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAnNmE3MjRjMTFlYWZlYTQyMDk3MDRjMzVlNmVlM2UxZmJhODBkMmE0MDg2MGQ4NzNiYmU1OTgxZGU2MzZjOWNmNmFkZTc3ZTZmZGQ0Mzg4ODg5ZWU5M2Q3ZWFhNzM3YWI1ODRlZGI1N2NjMGNjMTViMjg5OTM4MDM0OGQ2ZTQ4MmMnLFxuICAgICAgcm9vdEFkZHJlc3M6ICcweDA1OThiMzFhYTc3MTc2ZGJhYmEyNTMwNjQwNGFhODEzMTIxODA2OGRmNThiZjBiN2VlYzEzZjU3MDUzZmQ1YTcnLFxuICAgICAgcmVjZWl2ZUFkZHJlc3M6ICcweGRjMTY5NzI1ZGQ2ZDlhMDdlZTI1NWIxNzA4N2I0MDc5ZThhODA4NTBjODk1YzY1YjYyYzBlZjZkZTc0MGQzN2EnLFxuICAgICAgcmVjZWl2ZUFkZHJlc3NJbmRleDogMSxcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgeyBjb21tb25LZXljaGFpbjogdGVzdERhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgIHsgY29tbW9uS2V5Y2hhaW46IHRlc3REYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICB7IGNvbW1vbktleWNoYWluOiB0ZXN0RGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgIF07XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIHdlbGwgZm9ybWF0dGVkIGFkZHJlc3MgcHJlZml4ZWQgd2l0aCAweCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHhmOTQxYWUzY2JlNTY0NWRjY2MxNWRhODM0NmI1MzNmN2Y5MWYyMDIwODlhNTUyMTY1M2MwNjJiMmZmMTBiMzA0JztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsaWRhdGluZyBhbiBvbGQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHgyOTU5YmZjM2ZkYjdkYzIzZmVkOGRlYmEyZmFmYjcwZjNlNjA2YTU5JztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbGlkYXRpbmcgYW4gaW5jb3JyZWN0bHkgZm9ybWF0dGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICd3cm9uZ2FkZHJlc3MnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgcmVjZWl2ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHRlc3REYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiB0ZXN0RGF0YS5yZWNlaXZlQWRkcmVzc0luZGV4LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4ga2V5Y2hhaW5zIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4Mjk1OWJmYzNmZGI3ZGMyM2ZlZDhkZWJhMmZhZmI3MGYzZTYwNmE1OSc7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgY29tbW9uS2V5Y2hhaW46IHRlc3REYXRhLmNvbW1vbktleWNoYWluLCBhZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4gbmV3IGFkZHJlc3MgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICdiYWRBZGRyZXNzJztcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbjogdGVzdERhdGEuY29tbW9uS2V5Y2hhaW4sIGFkZHJlc3M6IHdyb25nQWRkcmVzcywgaW5kZXggfTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpLCB7XG4gICAgICAgIG1lc3NhZ2U6IGBpbnZhbGlkIGFkZHJlc3M6ICR7d3JvbmdBZGRyZXNzfWAsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0lEIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NoZWNrIGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmV0d29yazogTmV0d29yayA9IE5ldHdvcmsuVEVTVE5FVDtcbiAgICAgIGNvbnN0IGFwdG9zID0gbmV3IEFwdG9zKG5ldyBBcHRvc0NvbmZpZyh7IG5ldHdvcmsgfSkpO1xuICAgICAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcoXG4gICAgICAgICcweGM4ZjAyZDI1YWE2OThiM2U5ZmJkOGEwOGU4ZGE0YzhlZTI2MTgzMmEyNWE0Y2RlODczMWI1ZWMzNTY1MzdkMDknXG4gICAgICApO1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcoXG4gICAgICAgICcweGY3NDA1YzI4YTAyY2Y1YmFiNGVhNDQ5ODI0MGJiMzU3OWRiNDU5NTE3OTRlYjFjODQzYmVmMDUzNGMwOTNhZDknXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IGFwdG9zLnRyYW5zYWN0aW9uLmJ1aWxkLnNpbXBsZSh7XG4gICAgICAgIHNlbmRlcjogc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGZ1bmN0aW9uOiAnMHgxOjpjb2luOjp0cmFuc2ZlcicsXG4gICAgICAgICAgdHlwZUFyZ3VtZW50czogW0FQVE9TX0NPSU5dLFxuICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbcmVjaXBpZW50QWRkcmVzcywgMTAwMF0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBtYXhHYXNBbW91bnQ6IDIwMDAwMCxcbiAgICAgICAgICBnYXNVbml0UHJpY2U6IDEwMCxcbiAgICAgICAgICBleHBpcmVUaW1lc3RhbXA6IDE3MzI2OTkyMzYsXG4gICAgICAgICAgYWNjb3VudFNlcXVlbmNlTnVtYmVyOiAxNCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBERUZBVUxUX1BVQkxJQ19LRVkgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgICAgY29uc3QgREVGQVVMVF9TSUdOQVRVUkUgPSBCdWZmZXIuYWxsb2MoNjQpO1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkodXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyhERUZBVUxUX1BVQkxJQ19LRVkudG9TdHJpbmcoJ2hleCcpKSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZShERUZBVUxUX1NJR05BVFVSRSk7XG4gICAgICBjb25zdCBzZW5kZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBpZCA9IGdlbmVyYXRlVXNlclRyYW5zYWN0aW9uSGFzaCh7IHRyYW5zYWN0aW9uLCBzZW5kZXJBdXRoZW50aWNhdG9yIH0pO1xuXG4gICAgICBpZC5zaG91bGQuZXF1YWwoJzB4OTIzZDFjZmVkM2FmYWMyNDA0ODQ1MTE2MDMzN2RiNzViYTI4MjkxMjE1N2VlNDM0MDdiNTcyOTIzODAxZDViYScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19