@bitgo-beta/abstract-utxo 1.6.1-alpha.487 → 1.6.1-alpha.489

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +4 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +10 -1
  4. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +4 -1
  5. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  6. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +14 -3
  7. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +10 -3
  8. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  9. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +4 -3
  10. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  11. package/dist/cjs/src/transaction/signTransaction.js +2 -1
  12. package/dist/cjs/test/unit/coins.js +43 -1
  13. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  14. package/dist/esm/abstractUtxoCoin.d.ts +4 -1
  15. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  16. package/dist/esm/abstractUtxoCoin.js +11 -2
  17. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +4 -1
  18. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  19. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +14 -3
  20. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +10 -3
  21. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  22. package/dist/esm/transaction/fixedScript/signTransaction.js +4 -3
  23. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  24. package/dist/esm/transaction/signTransaction.js +2 -1
  25. package/package.json +9 -9
@@ -158,6 +158,8 @@ type UtxoBaseSignTransactionOptions<TNumber extends number | bigint = number> =
158
158
  * When false, return finalized PSBT. Useful for testing to keep transactions in PSBT format.
159
159
  */
160
160
  extractTransaction?: boolean;
161
+ /** When true, embeds WASM-UTXO version metadata into the signed PSBT. Defaults to false. */
162
+ writeSignedWith?: boolean;
161
163
  };
162
164
  export type SignTransactionOptions<TNumber extends number | bigint = number> = UtxoBaseSignTransactionOptions<TNumber> & ({
163
165
  prv: string;
@@ -247,7 +249,8 @@ export declare abstract class AbstractUtxoCoin extends BaseCoin implements Musig
247
249
  * @param param
248
250
  */
249
251
  isValidAddress(address: string, param?: {
250
- anyFormat: boolean;
252
+ anyFormat?: boolean;
253
+ allowLightning?: boolean;
251
254
  } | /* legacy parameter */ boolean): boolean;
252
255
  /**
253
256
  * Return boolean indicating whether input is valid public key for the coin.
@@ -1 +1 @@
1
- {"version":3,"file":"abstractUtxoCoin.d.ts","sourceRoot":"","sources":["../../../src/abstractUtxoCoin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstractUtxoCoin.d.ts","sourceRoot":"","sources":["../../../src/abstractUtxoCoin.ts"],"names":[],"mappings":"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"}
@@ -183,6 +183,15 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
183
183
  if (typeof param === 'boolean' && param) {
184
184
  throw new Error('deprecated');
185
185
  }
186
+ const allowLightning = param?.allowLightning ?? false;
187
+ if (allowLightning) {
188
+ if (/^(02|03)[0-9a-fA-F]{64}$/.test(address)) {
189
+ return true;
190
+ }
191
+ if ((0, sdk_core_1.isBolt11Invoice)(address)) {
192
+ return true;
193
+ }
194
+ }
186
195
  // By default, allow all address formats.
187
196
  // At the time of writing, the only additional address format is bch cashaddr.
188
197
  const anyFormat = param?.anyFormat ?? true;
@@ -693,4 +702,4 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
693
702
  }
694
703
  }
695
704
  exports.AbstractUtxoCoin = AbstractUtxoCoin;
696
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLDhEQUFnRDtBQUNoRCxnREFBNEQ7QUFDNUQsbURBQXlEO0FBQ3pELG1EQW9DOEI7QUFFOUIseUNBWW9CO0FBQ3BCLGlGQUFtSDtBQUNuSCxxQ0FBeUQ7QUFDekQsK0NBUXVCO0FBR3ZCLGtGQUlvRDtBQUNwRCw2Q0FBNkc7QUFDN0csbUNBUWlCO0FBQ2pCLHVEQUF1RTtBQUN2RSwrQ0FBa0Y7QUFDbEYsaURBQW1HO0FBQ25HLDJDQUEwRTtBQUMxRSwyQ0FBc0U7QUFDdEUsZ0VBQThEO0FBQzlELG1FQUFnRTtBQUNoRSxxQ0FBd0Q7QUFDeEQsb0VBQXVFO0FBa0J2RSxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsNEJBQTRCLFFBQVEsOERBQThELENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUFKRCwwREFJQztBQTJCRCxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFFakU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsSUFBMEIsRUFDMUIsUUFBc0I7SUFFdEIsSUFBSSxFQUFFLFlBQVksZ0JBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGdCQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksRUFBRSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLElBQUks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LEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBQSxxQkFBVSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSxzQkFBVyxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTd0QkQsNENBNnRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBiaXRnbywgZ2V0TWFpbm5ldCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIEFkZHJlc3NDb2luU3BlY2lmaWMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIENyZWF0ZUFkZHJlc3NGb3JtYXQsXG4gIEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBJQmFzZUNvaW4sXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeSxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZCxcbiAgZm9yQ29pbixcbiAgcmVjb3ZlckNyb3NzQ2hhaW4sXG4gIFJlY292ZXJQYXJhbXMsXG4gIFJlY292ZXJ5UHJvdmlkZXIsXG4gIHYxQmFja3VwS2V5UmVjb3ZlcnksXG4gIFYxUmVjb3ZlclBhcmFtcyxcbiAgdjFTd2VlcCxcbiAgVjFTd2VlcFBhcmFtcyxcbn0gZnJvbSAnLi9yZWNvdmVyeSc7XG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cywgaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcmllcyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIERlY29kZWRUcmFuc2FjdGlvbixcbiAgZXhwbGFpblR4LFxuICBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0LFxuICBpc1NjcmlwdFJlY2lwaWVudCxcbiAgcGFyc2VUcmFuc2FjdGlvbixcbiAgdmVyaWZ5VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQge1xuICBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSxcbiAgZ2V0TWFpbm5ldENvaW5OYW1lLFxuICBnZXROZXR3b3JrRnJvbUNvaW5OYW1lLFxuICBpc01haW5uZXRDb2luLFxuICBpc1V0eG9Db2luTmFtZU1haW5uZXQsXG4gIFV0eG9Db2luTmFtZSxcbiAgVXR4b0NvaW5OYW1lTWFpbm5ldCxcbn0gZnJvbSAnLi9uYW1lcyc7XG5pbXBvcnQgeyBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MvZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHsgaXNTZGtCYWNrZW5kLCBQYXJzZWRUcmFuc2FjdGlvbiwgU2RrQmFja2VuZCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlUHNidFdpdGgsIGVuY29kZVRyYW5zYWN0aW9uLCBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSwgVXR4b0tleWNoYWluIH0gZnJvbSAnLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlLCB2ZXJpZnlVc2VyUHVibGljS2V5IH0gZnJvbSAnLi92ZXJpZnlLZXknO1xuaW1wb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi9kZXNjcmlwdG9yL3ZhbGlkYXRlUG9saWN5JztcbmltcG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGlzVXR4b1dhbGxldERhdGEsIFV0eG9XYWxsZXQgfSBmcm9tICcuL3dhbGxldCc7XG5pbXBvcnQgeyBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhIH0gZnJvbSAnLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi91bnNwZW50JztcblxuaW1wb3J0IFNjcmlwdFR5cGUyT2YzID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xuXG5leHBvcnQgdHlwZSBUeEZvcm1hdCA9XG4gIC8vIFRoaXMgaXMgYSBsZWdhY3kgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIGFyb3VuZCB0aGUgYml0Y29pbmpzLWxpYiBzZXJpYWxpemF0aW9uIG9mIHVuc2lnbmVkIHRyYW5zYWN0aW9uc1xuICAvLyBkb2VzIG5vdCBpbmNsdWRlIHByZXZPdXQgZGF0YSBhbmQgaXMgYSBiaXQgcGFpbmZ1bCB0byB3b3JrIHdpdGhcbiAgLy8gZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBwc2J0XG4gIC8vIEBkZXByZWNhdGVkXG4gIHwgJ2xlZ2FjeSdcbiAgLy8gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcHNidCBmb3JtYXQsIGluY2x1ZGluZyB0aGUgZnVsbCBwcmV2VHggZGF0YSBmb3IgbGVnYWN5IHRyYW5zYWN0aW9ucy5cbiAgLy8gVGhpcyB3aWxsIHJlbWFpbiBzdXBwb3J0ZWQgYnV0IGlzIG5vdCB0aGUgZGVmYXVsdCwgc2luY2UgdGhlIGRhdGEgc2l6ZXMgY2FuIGJlY29tZSBwcm9oaWJpdGl2ZWx5IGxhcmdlLlxuICB8ICdwc2J0J1xuICAvLyBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgcHNidCB2ZXJzaW9uIHdoZXJlIGxlZ2FjeSBpbnB1dHMgYXJlIHNlcmlhbGl6ZWQgYXMgaWYgdGhleSB3ZXJlIHNlZ3dpdCBpbnB1dHMuXG4gIC8vIFdoaWxlIHRoaXMgcHJldmVudHMgdXMgdG8gZnVsbHkgdmVyaWZ5IHRoZSB0cmFuc2FjdGlvbiBmZWUsIHdlIGhhdmUgb3RoZXIgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGUgZmVlIGlzIHdpdGhpbiBib3VuZHMuXG4gIHwgJ3BzYnQtbGl0ZSc7XG5cbmV4cG9ydCBjbGFzcyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodHhGb3JtYXQ6IFR4Rm9ybWF0KSB7XG4gICAgc3VwZXIoYFNESyBzdXBwb3J0IGZvciB0eEZvcm1hdD0ke3R4Rm9ybWF0fSBpcyBkZXByZWNhdGVkIG9uIHRoaXMgZW52aXJvbm1lbnQuIFBsZWFzZSB1c2UgcHNidCBpbnN0ZWFkLmApO1xuICB9XG59XG5cbnR5cGUgVXR4b0N1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9IHtcbiAgKHBhcmFtczoge1xuICAgIGNvaW46IElCYXNlQ29pbjtcbiAgICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBzaWduaW5nU3RlcCBmbGFnIGJlY29tZXMgYXBwbGljYWJsZSB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gICAgICogMSkgV2hlbiB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgaXMgYWN0aXZhdGVkXG4gICAgICogMikgV2hlbiB0aGUgUFNCVCBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dC5cbiAgICAgKlxuICAgICAqIFRoZSBzaWduaW5nIHByb2Nlc3Mgb2YgYSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0IGlzIGEgNC1zdGVwIHNlcXVlbmNlOlxuICAgICAqIGkpIHVzZXIgbm9uY2UgZ2VuZXJhdGlvbiAtIHNpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBleHRlcm5hbCBleHByZXNzIHNpZ25lciBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaSkgYml0Z28gbm9uY2UgZ2VuZXJhdGlvbiAtIGNvc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBhbmQgb25seSBjYWxsIHRvIGxvY2FsIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpaSkgdXNlciBzaWduYXR1cmUgLSBzaWduZXJTaWduYXR1cmUgLSB0aGlzIGlzIHRoZSBzZWNvbmQgY2FsbCB0byBleHRlcm5hbCBleHByZXNzIHNpZ25lciBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpdikgYml0Z28gc2lnbmF0dXJlIC0gbm90IGluIHNpZ25UcmFuc2FjdGlvbiBtZXRob2TigJlzIHNjb3BlXG4gICAgICpcbiAgICAgKiBJbiB0aGUgYWJzZW5jZSBvZiB0aGlzIGZsYWcsIHRoZSBhZm9yZW1lbnRpb25lZCBmaXJzdCB0aHJlZSBzZXF1ZW5jZSBpcyBleGVjdXRlZCBpbiBhIHNpbmdsZSBzaWduVHJhbnNhY3Rpb24gY2FsbC5cbiAgICAgKlxuICAgICAqIE5PVEU6IFdlIG1ha2UgYSBzdHJvbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBhbmQgaXRzIGNhbGxlciB1c2VzIHN0aWNreSBzZXNzaW9ucyxcbiAgICAgKiBzaW5jZSBQU0JUcyBhcmUgY2FjaGVkIGluIHN0ZXAgMSB0byBiZSB1c2VkIGluIHN0ZXAgMyBmb3IgTXVTaWcyIHVzZXIgc2VjdXJlIG5vbmNlIGFjY2Vzcy5cbiAgICAgKi9cbiAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJyB8ICdjb3NpZ25lck5vbmNlJztcbiAgfSk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+O1xufTtcblxuY29uc3QgeyBpc0NoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluLCBvdXRwdXRTY3JpcHRzIH0gPSBiaXRnbztcblxuLyoqXG4gKiBDaGVjayBpZiBhIGRlY29kZWQgdHJhbnNhY3Rpb24gaGFzIGF0IGxlYXN0IG9uZSB0YXByb290IGtleSBwYXRoIHNwZW5kIChNdVNpZzIpIGlucHV0LlxuICogV29ya3MgZm9yIGJvdGggdXR4b2xpYiBVdHhvUHNidCBhbmQgd2FzbS11dHhvIEJpdEdvUHNidC5cbiAqL1xuZnVuY3Rpb24gaGFzS2V5UGF0aFNwZW5kSW5wdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pOiBib29sZWFuIHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgYml0Z28uVXR4b1BzYnQpIHtcbiAgICByZXR1cm4gYml0Z28uaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmRJbnB1dCh0eCk7XG4gIH1cbiAgaWYgKHR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KSB7XG4gICAgYXNzZXJ0KHB1YnMgJiYgaXNUcmlwbGUocHVicyksICdwdWIgdHJpcGxlIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGZvciBrZXkgcGF0aCBzcGVuZCBpbnB1dHMgaW4gd2FzbS11dHhvIFBTQlQnKTtcbiAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb21YcHVicyhwdWJzKTtcbiAgICBjb25zdCByZXBsYXlQcm90ZWN0aW9uID0geyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSkgfTtcbiAgICBjb25zdCBwYXJzZWQgPSB0eC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMocm9vdFdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbiB9KTtcbiAgICByZXR1cm4gcGFyc2VkLmlucHV0cy5zb21lKChpbnB1dCkgPT4gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzJLZXlQYXRoJyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnQgVmFsaWRhdGlvbkVycm9yIHRvIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB3aXRoIHN0cnVjdHVyZWQgZGF0YVxuICpcbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBzdHJ1Y3R1cmVkIGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIFZhbGlkYXRpb25FcnJvclxuICogYnkgZXh0cmFjdGluZyB0aGUgbWlzbWF0Y2hlZCBvdXRwdXRzIGFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gdGhlIHN0YW5kYXJkaXplZCBmb3JtYXQuXG4gKiBUaGUgb3JpZ2luYWwgZXJyb3IgaXMgcHJlc2VydmVkIGFzIHRoZSBgY2F1c2VgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gIGVycm9yOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIHJlcUlkOiBzdHJpbmcgfCBJUmVxdWVzdFRyYWNlciB8IHVuZGVmaW5lZCxcbiAgdHhQYXJhbXM6IEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgdHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHhFeHBsYW5hdGlvbj86IHVua25vd25cbik6IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB7XG4gIGNvbnN0IG1pc21hdGNoZWRSZWNpcGllbnRzOiBNaXNtYXRjaGVkUmVjaXBpZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvci5lcnJvcnMpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JNaXNzaW5nT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLm1pc3NpbmdPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eEludGVudEVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcihcbiAgICBlcnJvci5tZXNzYWdlLFxuICAgIHJlcUlkLFxuICAgIFt0eFBhcmFtc10sXG4gICAgdHhIZXgsXG4gICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMsXG4gICAgdHhFeHBsYW5hdGlvblxuICApO1xuICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RydWN0dXJlZCBlcnJvciBhcyB0aGUgY2F1c2UgZm9yIGRlYnVnZ2luZ1xuICAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yL2NhdXNlXG4gICh0eEludGVudEVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IEVycm9yIH0pLmNhdXNlID0gZXJyb3I7XG4gIHJldHVybiB0eEludGVudEVycm9yO1xufVxuXG5leHBvcnQgdHlwZSB7IERlY29kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IGJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGN1c3RvbUNoYW5nZVhwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRlZEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+IHtcbiAgY2hhbmdlSW5mbz86IHsgYWRkcmVzczogc3RyaW5nOyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXTtcbn1cblxuZXhwb3J0IHR5cGUgVXR4b05ldHdvcmsgPSB1dHhvbGliLk5ldHdvcms7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJiZlR4SWRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbiAgdmVyaWZpY2F0aW9uPzogVmVyaWZpY2F0aW9uT3B0aW9ucztcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHNlZ3dpdD86IGJvb2xlYW47XG4gIGJlY2gzMj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczoge1xuICAgIHB1Yjogc3RyaW5nO1xuICAgIGFzcEtleUlkPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW46IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG4gIGFkZHJlc3NUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljIGV4dGVuZHMgQWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nO1xufVxuXG50eXBlIFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zICYge1xuICAvKiogVHJhbnNhY3Rpb24gcHJlYnVpbGQgZnJvbSBiaXRnbyBzZXJ2ZXIgKi9cbiAgdHhQcmVidWlsZDoge1xuICAgIC8qKlxuICAgICAqIHdhbGxldElkIGlzIHJlcXVpcmVkIGluIGZvbGxvd2luZyAyIHNjZW5hcmlvcy5cbiAgICAgKiAxLiBFeHRlcm5hbCBzaWduZXIgZXhwcmVzcyBtb2RlIGlzIHVzZWQuXG4gICAgICogMi4gYml0Z28gTXVTaWcyIG5vbmNlIGlzIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHdhbGxldElkPzogc3RyaW5nO1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICAgIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICB9O1xuICAvKiogeHB1YnMgdHJpcGxlIGZvciB3YWxsZXQgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBSZXF1aXJlZCBvbmx5IHdoZW4gdHhQcmVidWlsZC50eEhleCBpcyBub3QgYSBQU0JUICovXG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgLyoqIHhwdWIgZm9yIGNvc2lnbmVyIChkZWZhdWx0cyB0byBiaXRnbykgKi9cbiAgY29zaWduZXJQdWI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGNyZWF0ZXMgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKiBXaGVuIGZhbHNlLCBjcmVhdGVzIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICovXG4gIGlzTGFzdFNpZ25hdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3Mgc2lnbmluZyBhIG5vbi1zZWd3aXQgaW5wdXQgd2l0aCBhIHdpdG5lc3NVdHhvIGluc3RlYWQgcmVxdWlyaW5nIGEgcHJldmlvdXNcbiAgICogdHJhbnNhY3Rpb24gKG5vbldpdG5lc3NVdHhvKVxuICAgKi9cbiAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBQU0JUIHRvIGxlZ2FjeSBmb3JtYXQgYmVmb3JlIHJldHVybmluZy5cbiAgICogU2V0IGF1dG9tYXRpY2FsbHkgYnkgcHJlc2lnblRyYW5zYWN0aW9uKCkgd2hlbiB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHR4Rm9ybWF0OiAnbGVnYWN5Jy5cbiAgICovXG4gIHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW47XG4gIHdhbGxldD86IFV0eG9XYWxsZXQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBleHRyYWN0IGZpbmFsaXplZCBQU0JUIHRvIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQuXG4gICAqIFdoZW4gZmFsc2UsIHJldHVybiBmaW5hbGl6ZWQgUFNCVC4gVXNlZnVsIGZvciB0ZXN0aW5nIHRvIGtlZXAgdHJhbnNhY3Rpb25zIGluIFBTQlQgZm9ybWF0LlxuICAgKi9cbiAgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBydjogc3RyaW5nO1xuICAgICAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJztcbiAgICAgIH1cbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNpZ0FkZHJlc3Mge1xuICBvdXRwdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9ucyB7XG4gIHR4aWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICB4cHJ2Pzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBjb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgcmVjb3ZlcnlDb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgc2lnbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbjogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5U2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW4/OiBVdHhvS2V5Y2hhaW47XG4gIGRpc2FibGVOZXR3b3JraW5nOiBib29sZWFuO1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVxdWVzdCB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlc3BvbnNlIHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVdHhvQ29pblxuICBleHRlbmRzIEJhc2VDb2luXG4gIGltcGxlbWVudHMgTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4sIE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD5cbntcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgc3VwcG9ydGVkVHhGb3JtYXRzOiB7IHBzYnQ6IGJvb2xlYW47IGxlZ2FjeTogYm9vbGVhbiB9ID0ge1xuICAgIHBzYnQ6IHRydWUsXG4gICAgbGVnYWN5OiB0aGlzLmlzTWFpbm5ldCgpLFxuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy5hbW91bnRUeXBlID0gYW1vdW50VHlwZTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0U2RrQmFja2VuZCgpOiBTZGtCYWNrZW5kIHtcbiAgICByZXR1cm4gaXNVdHhvQ29pbk5hbWVNYWlubmV0KHRoaXMubmFtZSkgPyAndXR4b2xpYicgOiAnd2FzbS11dHhvJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgdXR4b2xpYlxuICAgKiBVc2UgYG5hbWVgIHByb3BlcnR5IGluc3RlYWQuXG4gICAqL1xuICBnZXQgbmV0d29yaygpOiB1dHhvbGliLk5ldHdvcmsge1xuICAgIHJldHVybiBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICBnZXRDaGFpbigpOiBVdHhvQ29pbk5hbWUge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogVXR4b0NvaW5OYW1lTWFpbm5ldCB7XG4gICAgcmV0dXJuIGdldE1haW5uZXRDb2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29pbiBzdXBwb3J0cyBhIGJsb2NrIHRhcmdldCAqL1xuICBzdXBwb3J0c0Jsb2NrVGFyZ2V0KCk6IGJvb2xlYW4ge1xuICAgIC8vIEZJWE1FOiB0aGUgU0RLIGRvZXMgbm90IHNlZW0gdG8gdXNlIHRoaXMgYW55d2hlcmUgc28gaXQgaXMgdW5jbGVhciB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzXG4gICAgc3dpdGNoIChnZXRNYWlubmV0KHRoaXMubmV0d29yaykpIHtcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luOlxuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzd2VlcFdpdGhTZW5kTWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzdGF0aWMgZ2V0IHZhbGlkQWRkcmVzc1R5cGVzKCk6IFNjcmlwdFR5cGUyT2YzW10ge1xuICAgIHJldHVybiBbLi4ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU4O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgdmFsaWRcbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICogQHBhcmFtIHBhcmFtXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIHBhcmFtPzogeyBhbnlGb3JtYXQ6IGJvb2xlYW4gfSB8IC8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8gYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJyAmJiBwYXJhbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXByZWNhdGVkJyk7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgYWxsb3cgYWxsIGFkZHJlc3MgZm9ybWF0cy5cbiAgICAvLyBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgb25seSBhZGRpdGlvbmFsIGFkZHJlc3MgZm9ybWF0IGlzIGJjaCBjYXNoYWRkci5cbiAgICBjb25zdCBhbnlGb3JtYXQgPSAocGFyYW0gYXMgeyBhbnlGb3JtYXQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk/LmFueUZvcm1hdCA/PyB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAvLyBGaW5kIG91dCBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBmb3IgYW55IGZvcm1hdC4gVHJpZXMgYWxsIHN1cHBvcnRlZCBmb3JtYXRzIGJ5IGRlZmF1bHQuXG4gICAgICAvLyBUaHJvd3MgaWYgYWRkcmVzcyBjYW5ub3QgYmUgZGVjb2RlZCB3aXRoIGFueSBmb3JtYXQuXG4gICAgICBjb25zdCBbZm9ybWF0LCBzY3JpcHRdID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0KGFkZHJlc3MsIHRoaXMubmV0d29yayk7XG4gICAgICAvLyB1bmxlc3MgYW55Rm9ybWF0IGlzIHNldCwgb25seSAnZGVmYXVsdCcgaXMgYWxsb3dlZC5cbiAgICAgIGlmICghYW55Rm9ybWF0ICYmIGZvcm1hdCAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFkZHJlc3MgaXMgaW4gbm9ybWFsIHJlcHJlc2VudGF0aW9uIGZvciBnaXZlbiBmb3JtYXQuXG4gICAgICByZXR1cm4gYWRkcmVzcyA9PT0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmZyb21PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KHNjcmlwdCwgZm9ybWF0LCB0aGlzLm5ldHdvcmspO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCSVAzMi5mcm9tQmFzZTU4KHB1YikuaXNOZXV0ZXJlZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNyYWZ0aW5nIHRoZSBIVFRQIHJlcXVlc3QgdG8gdGhlIEJpdEdvIEFQSS5cbiAgICogSXQgY29udmVydHMgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGBzY3JpcHRQdWJLZXk6Li4uYCB0byB7IHNjcmlwdDogc3RyaW5nIH0gfCB7IGFkZHJlc3M6IHN0cmluZyB9LlxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoYWRkcmVzcykgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IGJsb2NrIGhlaWdodFxuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJsb2NrSGVpZ2h0KHJlcUlkPzogUmVxdWVzdFRyYWNlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgIH1cbiAgICBjb25zdCBjaGFpbmhlYWQgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9ibG9jay9sYXRlc3QnKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIChjaGFpbmhlYWQgYXMgYW55KS5oZWlnaHQ7XG4gIH1cblxuICBjaGVja1JlY2lwaWVudChyZWNpcGllbnQ6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB8IHN0cmluZyB9KTogdm9pZCB7XG4gICAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmICghaXNTY3JpcHRSZWNpcGllbnQocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICBzdXBlci5jaGVja1JlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHR4KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShhZGRyZXNzRGV0YWlscy5jaGFpbikgPyBzY3JpcHRUeXBlRm9yQ2hhaW4oYWRkcmVzc0RldGFpbHMuY2hhaW4pIDogbnVsbDtcbiAgfVxuXG4gIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBoZXg6IHN0cmluZ1xuICApOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXI+KGhleCwgdGhpcy5uZXR3b3JrLCB0aGlzLmFtb3VudFR5cGUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyxcbiAgICBkZWNvZGVXaXRoOiBTZGtCYWNrZW5kID0gdGhpcy5kZWZhdWx0U2RrQmFja2VuZFxuICApOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMoaW5wdXQsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKGJ1ZmZlciwgZGVjb2RlV2l0aCk7XG4gICAgfVxuXG4gICAgaWYgKHV0eG9saWIuYml0Z28uaXNQc2J0KGlucHV0KSkge1xuICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZFR4Rm9ybWF0cy5wc2J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCgncHNidCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKGlucHV0LCB0aGlzLm5hbWUsIGRlY29kZVdpdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMZWdhY3kgZm9ybWF0IHRyYW5zYWN0aW9ucyBhcmUgZGVwcmVjYXRlZC4gVGhpcyB3aWxsIGJlIGFuIHVuY29uZGl0aW9uYWwgZXJyb3IgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIGlmICghdGhpcy5zdXBwb3J0ZWRUeEZvcm1hdHMubGVnYWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCgnbGVnYWN5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlV2l0aCAhPT0gJ3V0eG9saWInKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlY2VpdmVkIGRlY29kZVdpdGggaGludCAlcywgaWdub3JpbmcgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbicsIGRlY29kZVdpdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGlucHV0LCB0aGlzLm5ldHdvcmssIHtcbiAgICAgICAgYW1vdW50VHlwZTogdGhpcy5hbW91bnRUeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKGlucHV0KTtcbiAgICBpZiAoZGVjb2RlZCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB8fCBkZWNvZGVkIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgcmV0dXJuIGRlY29kZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcHNidCBidXQgZ290IHRyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihwcmVidWlsZDoge1xuICAgIHR4SGV4Pzogc3RyaW5nO1xuICAgIHR4QmFzZTY0Pzogc3RyaW5nO1xuICAgIGRlY29kZVdpdGg/OiBzdHJpbmc7XG4gIH0pOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4ID8/IHByZWJ1aWxkLnR4QmFzZTY0O1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggb3IgdHhCYXNlNjQgcHJvcGVydHknKTtcbiAgICB9XG4gICAgbGV0IHsgZGVjb2RlV2l0aCB9ID0gcHJlYnVpbGQ7XG4gICAgaWYgKGRlY29kZVdpdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWNvZGVXaXRoICE9PSAnc3RyaW5nJyB8fCAhaXNTZGtCYWNrZW5kKGRlY29kZVdpdGgpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2RlY29kZVdpdGggJXMgaXMgbm90IGEgdmFsaWQgdmFsdWUsIHVzaW5nIGRlZmF1bHQnLCBkZWNvZGVXaXRoKTtcbiAgICAgICAgZGVjb2RlV2l0aCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oc3RyaW5nLCBkZWNvZGVXaXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGFuZCBmaWxsIHRyYW5zYWN0aW9uIGRldGFpbHMgc3VjaCBhcyBpbnRlcm5hbC9jaGFuZ2Ugc3BlbmQsIGV4dGVybmFsIHNwZW5kIChleHBsaWNpdCB2cy4gaW1wbGljaXQpLCBldGMuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uKHRoaXMsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgZnVuY3Rpb24gdmVyaWZ5VXNlclB1YmxpY0tleSBpbnN0ZWFkXG4gICAqL1xuICBwcm90ZWN0ZWQgdmVyaWZ5VXNlclB1YmxpY0tleShwYXJhbXM6IFZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZlcmlmeVVzZXJQdWJsaWNLZXkodGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlLZXlTaWduYXR1cmUgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXM6IFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyBwYXJhbXMgb2JqZWN0IHBhc3NlZCB0byBzZW5kXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZC50eEhleCBwcmVidWlsdCB0cmFuc2FjdGlvbidzIHR4SGV4IGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgV2FsbGV0IG9iamVjdCB0byBvYnRhaW4ga2V5cyB0byB2ZXJpZnkgYWdhaW5zdFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbiBPYmplY3Qgc3BlY2lmeWluZyBzb21lIHZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIERpc2FsbG93IGZldGNoaW5nIGFueSBkYXRhIGZyb20gdGhlIGludGVybmV0IGZvciB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24ua2V5Y2hhaW5zIFBhc3Mga2V5Y2hhaW5zIG1hbnVhbGx5IHJhdGhlciB0aGFuIGZldGNoaW5nIHRoZW0gYnkgaWRcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uYWRkcmVzc2VzIEFkZHJlc3MgZGV0YWlscyB0byBwYXNzIGluIGZvciBvdXQtb2YtYmFuZCB2ZXJpZmljYXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoRXJyb3J9IGlmIHRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbHNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yfSBpZiB0cmFuc2FjdGlvbiByZWNpcGllbnRzIGRvbid0IG1hdGNoIHVzZXIgaW50ZW50XG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHZlcmlmeVRyYW5zYWN0aW9uKHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oXG4gICAgICAgICAgdGhpcyBhcyB1bmtub3duIGFzIElCYXNlQ29pbixcbiAgICAgICAgICBwYXJhbXMudHhQcmVidWlsZFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBjb252ZXJ0VmFsaWRhdGlvbkVycm9yVG9UeEludGVudE1pc21hdGNoKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHBhcmFtcy5yZXFJZCxcbiAgICAgICAgICBwYXJhbXMudHhQYXJhbXMsXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGQudHhIZXgsXG4gICAgICAgICAgdHhFeHBsYW5hdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSBhbiBhZGRyZXNzIGlzIHZhbGlkIGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIG5vdC5cbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzIFRoZSBhZGRyZXNzIHN0cmluZyBvbiB0aGUgbmV0d29ya1xuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3NUeXBlXG4gICAqIEBwYXJhbSBwYXJhbXMua2V5Y2hhaW5zIEtleWNoYWluIG9iamVjdHMgd2l0aCB4cHVic1xuICAgKiBAcGFyYW0gcGFyYW1zLmNvaW5TcGVjaWZpYyBDb2luLXNwZWNpZmljIGRldGFpbHMgZm9yIHRoZSBhZGRyZXNzIHN1Y2ggYXMgYSB3aXRuZXNzIHNjcmlwdFxuICAgKiBAcGFyYW0gcGFyYW1zLmNoYWluIERlcml2YXRpb24gY2hhaW5cbiAgICogQHBhcmFtIHBhcmFtcy5pbmRleCBEZXJpdmF0aW9uIGluZGV4XG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRXJyb3J9XG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3J9XG4gICAqIEB0aHJvd3Mge1VuZXhwZWN0ZWRBZGRyZXNzRXJyb3J9XG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9uczxVdHhvQ29pblNwZWNpZmljPiwgd2FsbGV0PzogSVdhbGxldCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywga2V5Y2hhaW5zLCBjaGFpbiwgaW5kZXggfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGlmICh3YWxsZXQgJiYgaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpIHtcbiAgICAgIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNUcmlwbGUoa2V5Y2hhaW5zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWlucyBtdXN0IGJlIGEgdHJpcGxlJyk7XG4gICAgICB9XG4gICAgICBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLCBnZXRQb2xpY3lGb3JFbnYodGhpcy5iaXRnby5lbnYpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICgoXy5pc1VuZGVmaW5lZChjaGFpbikgJiYgXy5pc1VuZGVmaW5lZChpbmRleCkpIHx8ICEoXy5pc0Zpbml0ZShjaGFpbikgJiYgXy5pc0Zpbml0ZShpbmRleCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNoYWluICgke2NoYWlufSkgb3IgaW5kZXggKCR7aW5kZXh9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3ModGhpcy5uYW1lLCB7XG4gICAgICBhZGRyZXNzLFxuICAgICAga2V5Y2hhaW5zLFxuICAgICAgZm9ybWF0OiBwYXJhbXMuZm9ybWF0ID8/ICdiYXNlNTgnLFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRyZXNzVHlwZVxuICAgKiBAcmV0dXJucyB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gdW5zcGVudFR5cGVcbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc1R5cGUoYWRkcmVzc1R5cGU6IFNjcmlwdFR5cGUyT2YzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1N1cHBvcnRlZFNjcmlwdFR5cGUodGhpcy5uZXR3b3JrLCBhZGRyZXNzVHlwZSk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMub25jaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHJldHVybiB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gY2hhaW5cbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc0NoYWluKGNoYWluOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDaGFpbkNvZGUoY2hhaW4pICYmIHRoaXMuc3VwcG9ydHNBZGRyZXNzVHlwZSh1dHhvbGliLmJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbikpO1xuICB9XG5cbiAga2V5SWRzRm9yU2lnbmluZygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFtLZXlJbmRpY2VzLlVTRVIsIEtleUluZGljZXMuQkFDS1VQLCBLZXlJbmRpY2VzLkJJVEdPXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzLlxuICAgKiBAcGFyYW0gcHNidCBhbGwgTXVTaWcyIGlucHV0cyBzaG91bGQgY29udGFpbiB1c2VyIE11U2lnMiBub25jZVxuICAgKiBAcGFyYW0gd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PjtcbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PjtcbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzPFQgZXh0ZW5kcyB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PihcbiAgICBwc2J0OiBULFxuICAgIHdhbGxldElkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUPjtcbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzPFQgZXh0ZW5kcyB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PihcbiAgICBwc2J0OiBULFxuICAgIHdhbGxldElkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgYnVmZmVyID0gZW5jb2RlVHJhbnNhY3Rpb24ocHNidCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybCgnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4L3NpZ25wc2J0JykpXG4gICAgICAuc2VuZCh7IHBzYnQ6IGJ1ZmZlci50b1N0cmluZygnaGV4JykgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAocHNidCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChyZXNwb25zZS5wc2J0LCB0aGlzLm5hbWUsICd1dHhvbGliJykgYXMgVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKHJlc3BvbnNlLnBzYnQsIHRoaXMubmFtZSwgJ3dhc20tdXR4bycpIGFzIFQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRNdXNpZzJOb25jZXMgaW5zdGVhZFxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzLlxuICAgKiBAcGFyYW0gcHNidEhleCBhbGwgTXVTaWcyIGlucHV0cyBzaG91bGQgY29udGFpbiB1c2VyIE11U2lnMiBub25jZVxuICAgKiBAcGFyYW0gd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0KHBzYnRIZXg6IHN0cmluZywgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8U2lnblBzYnRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHBzYnQgPSBhd2FpdCB0aGlzLmdldE11c2lnMk5vbmNlcyh0aGlzLmRlY29kZVRyYW5zYWN0aW9uQXNQc2J0KHBzYnRIZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIHsgcHNidDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpIH07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cyBmcm9tIE9WQy5cbiAgICogQHBhcmFtIG92Y0pzb24gSlNPTiBvYmplY3QgcHJvdmlkZWQgYnkgT1ZDIHdpdGggZmllbGRzIHBzYnRIZXggYW5kIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidEZyb21PVkMob3ZjSnNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3BzYnRIZXgnXSwgJ292Y0pzb24gbXVzdCBjb250YWluIHBzYnRIZXgnKTtcbiAgICBhc3NlcnQob3ZjSnNvblsnd2FsbGV0SWQnXSwgJ292Y0pzb24gbXVzdCBjb250YWluIHdhbGxldElkJyk7XG4gICAgY29uc3QgaGV4ID0gb3ZjSnNvblsncHNidEhleCddIGFzIHN0cmluZztcbiAgICBjb25zdCB3YWxsZXRJZCA9IG92Y0pzb25bJ3dhbGxldElkJ10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHBzYnQgPSBhd2FpdCB0aGlzLmdldE11c2lnMk5vbmNlcyh0aGlzLmRlY29kZVRyYW5zYWN0aW9uQXNQc2J0KGhleCksIHdhbGxldElkKTtcbiAgICByZXR1cm4gXy5leHRlbmQob3ZjSnNvbiwgeyB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGtleWNoYWluIGFuZCBoYWxmLXNpZ24gcHJlYnVpbHQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcyAtIHtAc2VlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnN9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj59XG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24gfCBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSB0cmFuc2FjdGlvbiB3aXRoIGEgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24uIEV4YW1wbGUgdXNlIGNhc2UgaXMgZXhwcmVzcyBleHRlcm5hbCBzaWduZXJcbiAgICogQHBhcmFtIGN1c3RvbVNpZ25pbmdGdW5jdGlvbiBjdXN0b20gc2lnbmluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzaW5nbGUgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBzaWduVHJhbnNhY3Rpb25QYXJhbXMgcGFyYW1ldGVycyBmb3IgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24uIEluY2x1ZGVzIHR4UHJlYnVpbGQgYW5kIHB1YnNcbiAgICpcbiAgICogQHJldHVybnMgc2lnbmVkIHRyYW5zYWN0aW9uIGFzIGhleCBzdHJpbmdcbiAgICovXG4gIGFzeW5jIHNpZ25XaXRoQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIGN1c3RvbVNpZ25pbmdGdW5jdGlvbjogVXR4b0N1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyPixcbiAgICBzaWduVHJhbnNhY3Rpb25QYXJhbXM6IHsgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjsgcHViczogc3RyaW5nW10gfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBzaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZC50eEhleDtcbiAgICBhc3NlcnQodHhIZXgsICdtaXNzaW5nIHR4SGV4IHBhcmFtZXRlcicpO1xuXG4gICAgY29uc3QgdHggPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHR4SGV4KTtcblxuICAgIGNvbnN0IGlzVHhXaXRoS2V5UGF0aFNwZW5kSW5wdXQgPSBoYXNLZXlQYXRoU3BlbmRJbnB1dCh0eCwgc2lnblRyYW5zYWN0aW9uUGFyYW1zLnB1YnMsIHRoaXMubmFtZSk7XG5cbiAgICBpZiAoIWlzVHhXaXRoS2V5UGF0aFNwZW5kSW5wdXQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsIGNvaW46IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VHhIZXggPSAodjogU2lnbmVkVHJhbnNhY3Rpb24pOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCd0eEhleCcgaW4gdikge1xuICAgICAgICByZXR1cm4gdi50eEhleDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggbm90IGZvdW5kIGluIHNpZ25UcmFuc2FjdGlvbiByZXN1bHQnKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2lnbmVyTm9uY2VUeCA9IGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyxcbiAgICAgIGNvaW46IHRoaXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHB1YnMgfSA9IHNpZ25UcmFuc2FjdGlvblBhcmFtcztcbiAgICBhc3NlcnQocHVicyA9PT0gdW5kZWZpbmVkIHx8IGlzVHJpcGxlKHB1YnMpKTtcblxuICAgIGNvbnN0IGNvc2lnbmVyTm9uY2VUeCA9IGF3YWl0IHRoaXMuc2lnblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgIC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgIHB1YnMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoc2lnbmVyTm9uY2VUeCkgfSxcbiAgICAgIHNpZ25pbmdTdGVwOiAnY29zaWduZXJOb25jZScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHtcbiAgICAgIC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQsIHR4SGV4OiBnZXRUeEhleChjb3NpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lclNpZ25hdHVyZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB1bnNwZW50XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNCaXRHb1RhaW50ZWRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCh1bnNwZW50LCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29tcG9zZSBhIHJhdyBwc2J0L3RyYW5zYWN0aW9uIGludG8gdXNlZnVsIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0b3RhbCBhbW91bnRzLFxuICAgKiBjaGFuZ2UgYW1vdW50cywgYW5kIHRyYW5zYWN0aW9uIG91dHB1dHMuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gICAgd2FsbGV0PzogSVdhbGxldFxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBpZiAoIXBhcmFtcy5wdWJzKSB7XG4gICAgICAvLyBpZiBubyBwdWJzIGFyZSBwcm92aWRlZCwgb3Bwb3J0dW5pc3RpY2FsbHkgZmV0Y2ggdGhlIGtleWNoYWlucyBmcm9tIHRoZSB3YWxsZXRcbiAgICAgIGlmICh3YWxsZXQpIHtcbiAgICAgICAgY29uc3Qga2V5Y2hhaW5zID0gYXdhaXQgZmV0Y2hLZXljaGFpbnModGhpcywgd2FsbGV0KTtcbiAgICAgICAgcGFyYW1zLnB1YnMgPSB0b0JpcDMyVHJpcGxlKGtleWNoYWlucykubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBsYWluVHgodGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMpLCBwYXJhbXMsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2Uge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtcyAtIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiBiYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3ZlclYxKHBhcmFtczogVjFSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFCYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiB2MUJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyBzd2VlcFYxKHBhcmFtczogVjFTd2VlcFBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxU3dlZXA+IHtcbiAgICByZXR1cm4gdjFTd2VlcCh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXIgY29pbiB0aGF0IHdhcyBzZW50IHRvIHdyb25nIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eGlkIFRoZSB0eGlkIG9mIHRoZSBmYXVsdHkgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlDb2luIHRoZSBjb2luIHR5cGUgb2YgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnNpZ25lZCByZXR1cm4gYSBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiAoZGVmYXVsdD10cnVlKVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgdGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSBwYXJhbXMueHBydiB0aGUgdW5lbmNyeXB0ZWQgeHBydiAodXNlZCBpbnN0ZWFkIG9mIHdhbGxldCBwYXNzcGhyYXNlKVxuICAgKiBAcGFyYW0gcGFyYW1zLmFwaUtleSBmb3IgdXR4byBjb2lucyBvdGhlciB0aGFuIFtCVEMsVEJUQ10gdGhpcyBpcyBhIEJsb2NrIENoYWlyIGFwaSBrZXlcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyByZWNvdmVyRnJvbVdyb25nQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zXG4gICk6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB7IHR4aWQsIHJlY292ZXJ5QWRkcmVzcywgd2FsbGV0LCB3YWxsZXRQYXNzcGhyYXNlLCB4cHJ2LCBhcGlLZXkgfSA9IHBhcmFtcztcblxuICAgIC8vIHBhcmFtcy5yZWNvdmVyeUNvaW4gdXNlZCB0byBiZSBwYXJhbXMuY29pbiwgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCByZWNvdmVyeUNvaW4gPSBwYXJhbXMuY29pbiB8fCBwYXJhbXMucmVjb3ZlcnlDb2luO1xuICAgIGlmICghcmVjb3ZlcnlDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IHJlY292ZXJ5Q29pbicpO1xuICAgIH1cbiAgICAvLyBzaWduZWQgc2hvdWxkIGRlZmF1bHQgdG8gdHJ1ZSwgYW5kIG9ubHkgYmUgZGlzYWJsZWQgaWYgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UgKG5vdCB1bmRlZmluZWQpXG4gICAgY29uc3Qgc2lnbmVkID0gcGFyYW1zLnNpZ25lZCAhPT0gZmFsc2U7XG5cbiAgICBjb25zdCBzb3VyY2VDb2luRmFtaWx5ID0gdGhpcy5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCByZWNvdmVyeUNvaW5GYW1pbHkgPSByZWNvdmVyeUNvaW4uZ2V0RmFtaWx5KCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkUmVjb3ZlcnlDb2lucyA9IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzW3NvdXJjZUNvaW5GYW1pbHldO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3VwcG9ydGVkUmVjb3ZlcnlDb2lucykgfHwgIXN1cHBvcnRlZFJlY292ZXJ5Q29pbnMuaW5jbHVkZXMocmVjb3ZlcnlDb2luRmFtaWx5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNvdmVyeSBvZiAke3NvdXJjZUNvaW5GYW1pbHl9IGJhbGFuY2VzIGZyb20gJHtyZWNvdmVyeUNvaW5GYW1pbHl9IHdhbGxldHMgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlcj4odGhpcy5iaXRnbywge1xuICAgICAgc291cmNlQ29pbjogdGhpcyxcbiAgICAgIHJlY292ZXJ5Q29pbixcbiAgICAgIHdhbGxldElkOiB3YWxsZXQsXG4gICAgICB0eGlkLFxuICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogc2lnbmVkID8gd2FsbGV0UGFzc3BocmFzZSA6IHVuZGVmaW5lZCxcbiAgICAgIHhwcnY6IHNpZ25lZCA/IHhwcnYgOiB1bmRlZmluZWQsXG4gICAgICBhcGlLZXksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYmlwMzIga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHB1YiBhbmQgcHJ2XG4gICAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZDogQnVmZmVyKTogeyBwdWI6IHN0cmluZzsgcHJ2OiBzdHJpbmcgfSB7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgICAgLy8gYml0IGNoYWluIGNvZGUsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSByYW5kb20uIDUxMiBiaXRzIGlzIHRoZXJlZm9yZSB0aGVcbiAgICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRlZEtleSA9IEJJUDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGV4dGVuZGVkS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgIHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIG9uIHdhbGxldCBwcm9wZXJ0aWVzIGFuZCBuZXR3b3JrXG4gICAqIEBwYXJhbSB3YWxsZXQgLSBUaGUgd2FsbGV0IHRvIGNoZWNrXG4gICAqIEBwYXJhbSByZXF1ZXN0ZWRGb3JtYXQgLSBPcHRpb25hbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBmb3JtYXRcbiAgICogQHJldHVybnMgVGhlIHRyYW5zYWN0aW9uIGZvcm1hdCB0byB1c2UsIG9yIHVuZGVmaW5lZCBpZiBubyBkZWZhdWx0IGFwcGxpZXNcbiAgICovXG4gIGdldERlZmF1bHRUeEZvcm1hdCh3YWxsZXQ6IFdhbGxldCwgcmVxdWVzdGVkRm9ybWF0PzogVHhGb3JtYXQpOiBUeEZvcm1hdCB7XG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIHJldHVybiAncHNidC1saXRlJztcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RlZEZvcm1hdCA/PyAncHNidC1saXRlJztcbiAgfVxuXG4gIGFzeW5jIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zICYgeyB3YWxsZXQ6IFdhbGxldCB9KTogUHJvbWlzZTx7XG4gICAgdHhGb3JtYXQ/OiBUeEZvcm1hdDtcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzW10gfCBTY3JpcHRUeXBlMk9mMztcbiAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcz86IFNjcmlwdFR5cGUyT2YzW107XG4gIH0+IHtcbiAgICBjb25zdCByZXF1ZXN0ZWRGb3JtYXQgPSBidWlsZFBhcmFtcy50eEZvcm1hdCBhcyBUeEZvcm1hdCB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0eEZvcm1hdCA9IHRoaXMuZ2V0RGVmYXVsdFR4Rm9ybWF0KGJ1aWxkUGFyYW1zLndhbGxldCwgcmVxdWVzdGVkRm9ybWF0KTtcbiAgICBsZXQgY2hhbmdlQWRkcmVzc1R5cGUgPSBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzVHlwZSBhcyBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjMgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiB0aGUgYWRkcmVzc1R5cGUgaXMgbm90IHNwZWNpZmllZCwgd2UgbmVlZCB0byBkZWZhdWx0IHRvIHAydHJNdXNpZzIgZm9yIHRlc3RuZXQgaG90IHdhbGxldHMgZm9yIHN0YWdlZCByb2xsb3V0IG9mIHAydHJNdXNpZzJcbiAgICBpZiAoXG4gICAgICBidWlsZFBhcmFtcy5hZGRyZXNzVHlwZSA9PT0gdW5kZWZpbmVkICYmIC8vIGFkZHJlc3NUeXBlIGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IGBjaGFuZ2VBZGRyZXNzYFxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBidWlsZFBhcmFtcy53YWxsZXQudHlwZSgpID09PSAnaG90J1xuICAgICkge1xuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBbJ3AydHJNdXNpZzInLCAncDJ3c2gnLCAncDJzaFAyd3NoJywgJ3Ayc2gnLCAncDJ0ciddO1xuICAgIH1cblxuICAgIC8vIGdldEhhbGZTaWduZWRMZWdhY3lGb3JtYXQoKSBvbmx5IHN1cHBvcnRzIHAybXMtYmFzZWQgdHlwZXMgKHAyc2gsIHAyc2hQMndzaCwgcDJ3c2gpLlxuICAgIC8vIEZpbHRlciBjaGFuZ2Ugb3V0cHV0cyBhbmQgcmVzdHJpY3QgaW5wdXQgc2VsZWN0aW9uIHRvIHRoZXNlIHR5cGVzLlxuICAgIGNvbnN0IGxlZ2FjeUNvbXBhdGlibGVUeXBlczogU2NyaXB0VHlwZTJPZjNbXSA9IFsncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcbiAgICBsZXQgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMgPSBsZWdhY3lDb21wYXRpYmxlVHlwZXM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2VBZGRyZXNzVHlwZSkpIHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBjaGFuZ2VBZGRyZXNzVHlwZS5maWx0ZXIoKHQpOiB0IGlzIFNjcmlwdFR5cGUyT2YzID0+XG4gICAgICAgICAgbGVnYWN5Q29tcGF0aWJsZVR5cGVzLmluY2x1ZGVzKHQgYXMgU2NyaXB0VHlwZTJPZjMpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZUFkZHJlc3NUeXBlICE9PSB1bmRlZmluZWQgJiYgIWxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyhjaGFuZ2VBZGRyZXNzVHlwZSkpIHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBsZWdhY3lDb21wYXRpYmxlVHlwZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4Rm9ybWF0LFxuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUsXG4gICAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJlQ3JlYXRlQml0R28ocGFyYW1zOiBQcmVjcmVhdGVCaXRHb09wdGlvbnMpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luYyBwcmVzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAocGFyYW1zLndhbGxldERhdGEgJiYgaXNVdHhvV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkgJiYgaXNEZXNjcmlwdG9yV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkpIHtcbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0dXJuTGVnYWN5Rm9ybWF0ID0gKHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikudHhGb3JtYXQgPT09ICdsZWdhY3knO1xuXG4gICAgLy8gSW4gdGhlIGNhc2UgdGhhdCB3ZSBoYXZlIGEgJ3BzYnQtbGl0ZScgdHJhbnNhY3Rpb24gZm9ybWF0LCB3ZSB3YW50IHRvIGluZGljYXRlIGluIHNpZ25pbmcgdG8gbm90IGZhaWxcbiAgICBjb25zdCB0eEhleCA9IChwYXJhbXMudHhIZXggPz8gcGFyYW1zLnR4UHJlYnVpbGQ/LnR4SGV4KSBhcyBzdHJpbmc7XG4gICAgaWYgKFxuICAgICAgdHhIZXggJiZcbiAgICAgIHV0eG9saWIuYml0Z28uaXNQc2J0KHR4SGV4IGFzIHN0cmluZykgJiZcbiAgICAgIHV0eG9saWIuYml0Z28uaXNQc2J0TGl0ZSh1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCB0aGlzLm5ldHdvcmspKSAmJlxuICAgICAgcGFyYW1zLmFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHggPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmV0dXJuIHsgLi4ucGFyYW1zLCBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4OiB0cnVlLCByZXR1cm5MZWdhY3lGb3JtYXQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCByZXR1cm5MZWdhY3lGb3JtYXQgfTtcbiAgfVxuXG4gIGFzeW5jIHN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldChcbiAgICB3YWxsZXRQYXJhbXM6IFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gICAga2V5Y2hhaW5zOiBLZXljaGFpbnNUcmlwbGV0XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHdhbGxldFBhcmFtcztcbiAgfVxuXG4gIHRyYW5zYWN0aW9uRGF0YUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFsdWVsZXNzVHJhbnNmZXJBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFJlY292ZXJ5UHJvdmlkZXIoYXBpVG9rZW4/OiBzdHJpbmcpOiBSZWNvdmVyeVByb3ZpZGVyIHtcbiAgICByZXR1cm4gZm9yQ29pbih0aGlzLmdldENoYWluKCksIGFwaVRva2VuKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7XG4gICAgbXVsdGlTaWdUeXBlLFxuICAgIHB1YmxpY0tleSxcbiAgICBwcnYsXG4gIH06IHtcbiAgICBtdWx0aVNpZ1R5cGU6IE11bHRpc2lnVHlwZTtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICBwcnY6IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgPT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RzcyBhdWRpdGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNvaW4nKTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkUHJ2KHBydikgJiYgIWlzVmFsaWRYcHJ2KHBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBpZiAocHVibGljS2V5KSB7XG4gICAgICBjb25zdCBnZW5QdWJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHBydikubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgICAgaWYgKGdlblB1YktleSAhPT0gcHVibGljS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBwcml2YXRlIGtleScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLDhEQUFnRDtBQUNoRCxnREFBNEQ7QUFDNUQsbURBQXlEO0FBQ3pELG1EQXFDOEI7QUFFOUIseUNBWW9CO0FBQ3BCLGlGQUFtSDtBQUNuSCxxQ0FBeUQ7QUFDekQsK0NBUXVCO0FBR3ZCLGtGQUlvRDtBQUNwRCw2Q0FBNkc7QUFDN0csbUNBUWlCO0FBQ2pCLHVEQUF1RTtBQUN2RSwrQ0FBa0Y7QUFDbEYsaURBQW1HO0FBQ25HLDJDQUEwRTtBQUMxRSwyQ0FBc0U7QUFDdEUsZ0VBQThEO0FBQzlELG1FQUFnRTtBQUNoRSxxQ0FBd0Q7QUFDeEQsb0VBQXVFO0FBa0J2RSxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsNEJBQTRCLFFBQVEsOERBQThELENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUFKRCwwREFJQztBQTJCRCxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFFakU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsSUFBMEIsRUFDMUIsUUFBc0I7SUFFdEIsSUFBSSxFQUFFLFlBQVksZ0JBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGdCQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksRUFBRSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLElBQUks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QjtRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFpQjtRQUNuQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxFQUNoQixZQUFZLEVBQ1osU0FBUyxFQUNULEdBQUcsR0FLSjtRQUNDLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEscUJBQVUsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUEsc0JBQVcsRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sU0FBUyxHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExdUJELDRDQTB1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgYml0Z28sIGdldE1haW5uZXQgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBDcmVhdGVBZGRyZXNzRm9ybWF0LFxuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgSUJhc2VDb2luLFxuICBpc0JvbHQxMUludm9pY2UsXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeSxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZCxcbiAgZm9yQ29pbixcbiAgcmVjb3ZlckNyb3NzQ2hhaW4sXG4gIFJlY292ZXJQYXJhbXMsXG4gIFJlY292ZXJ5UHJvdmlkZXIsXG4gIHYxQmFja3VwS2V5UmVjb3ZlcnksXG4gIFYxUmVjb3ZlclBhcmFtcyxcbiAgdjFTd2VlcCxcbiAgVjFTd2VlcFBhcmFtcyxcbn0gZnJvbSAnLi9yZWNvdmVyeSc7XG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cywgaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcmllcyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIERlY29kZWRUcmFuc2FjdGlvbixcbiAgZXhwbGFpblR4LFxuICBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0LFxuICBpc1NjcmlwdFJlY2lwaWVudCxcbiAgcGFyc2VUcmFuc2FjdGlvbixcbiAgdmVyaWZ5VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQge1xuICBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSxcbiAgZ2V0TWFpbm5ldENvaW5OYW1lLFxuICBnZXROZXR3b3JrRnJvbUNvaW5OYW1lLFxuICBpc01haW5uZXRDb2luLFxuICBpc1V0eG9Db2luTmFtZU1haW5uZXQsXG4gIFV0eG9Db2luTmFtZSxcbiAgVXR4b0NvaW5OYW1lTWFpbm5ldCxcbn0gZnJvbSAnLi9uYW1lcyc7XG5pbXBvcnQgeyBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MvZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHsgaXNTZGtCYWNrZW5kLCBQYXJzZWRUcmFuc2FjdGlvbiwgU2RrQmFja2VuZCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlUHNidFdpdGgsIGVuY29kZVRyYW5zYWN0aW9uLCBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSwgVXR4b0tleWNoYWluIH0gZnJvbSAnLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlLCB2ZXJpZnlVc2VyUHVibGljS2V5IH0gZnJvbSAnLi92ZXJpZnlLZXknO1xuaW1wb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi9kZXNjcmlwdG9yL3ZhbGlkYXRlUG9saWN5JztcbmltcG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGlzVXR4b1dhbGxldERhdGEsIFV0eG9XYWxsZXQgfSBmcm9tICcuL3dhbGxldCc7XG5pbXBvcnQgeyBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhIH0gZnJvbSAnLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi91bnNwZW50JztcblxuaW1wb3J0IFNjcmlwdFR5cGUyT2YzID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xuXG5leHBvcnQgdHlwZSBUeEZvcm1hdCA9XG4gIC8vIFRoaXMgaXMgYSBsZWdhY3kgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIGFyb3VuZCB0aGUgYml0Y29pbmpzLWxpYiBzZXJpYWxpemF0aW9uIG9mIHVuc2lnbmVkIHRyYW5zYWN0aW9uc1xuICAvLyBkb2VzIG5vdCBpbmNsdWRlIHByZXZPdXQgZGF0YSBhbmQgaXMgYSBiaXQgcGFpbmZ1bCB0byB3b3JrIHdpdGhcbiAgLy8gZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBwc2J0XG4gIC8vIEBkZXByZWNhdGVkXG4gIHwgJ2xlZ2FjeSdcbiAgLy8gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcHNidCBmb3JtYXQsIGluY2x1ZGluZyB0aGUgZnVsbCBwcmV2VHggZGF0YSBmb3IgbGVnYWN5IHRyYW5zYWN0aW9ucy5cbiAgLy8gVGhpcyB3aWxsIHJlbWFpbiBzdXBwb3J0ZWQgYnV0IGlzIG5vdCB0aGUgZGVmYXVsdCwgc2luY2UgdGhlIGRhdGEgc2l6ZXMgY2FuIGJlY29tZSBwcm9oaWJpdGl2ZWx5IGxhcmdlLlxuICB8ICdwc2J0J1xuICAvLyBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgcHNidCB2ZXJzaW9uIHdoZXJlIGxlZ2FjeSBpbnB1dHMgYXJlIHNlcmlhbGl6ZWQgYXMgaWYgdGhleSB3ZXJlIHNlZ3dpdCBpbnB1dHMuXG4gIC8vIFdoaWxlIHRoaXMgcHJldmVudHMgdXMgdG8gZnVsbHkgdmVyaWZ5IHRoZSB0cmFuc2FjdGlvbiBmZWUsIHdlIGhhdmUgb3RoZXIgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGUgZmVlIGlzIHdpdGhpbiBib3VuZHMuXG4gIHwgJ3BzYnQtbGl0ZSc7XG5cbmV4cG9ydCBjbGFzcyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodHhGb3JtYXQ6IFR4Rm9ybWF0KSB7XG4gICAgc3VwZXIoYFNESyBzdXBwb3J0IGZvciB0eEZvcm1hdD0ke3R4Rm9ybWF0fSBpcyBkZXByZWNhdGVkIG9uIHRoaXMgZW52aXJvbm1lbnQuIFBsZWFzZSB1c2UgcHNidCBpbnN0ZWFkLmApO1xuICB9XG59XG5cbnR5cGUgVXR4b0N1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9IHtcbiAgKHBhcmFtczoge1xuICAgIGNvaW46IElCYXNlQ29pbjtcbiAgICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBzaWduaW5nU3RlcCBmbGFnIGJlY29tZXMgYXBwbGljYWJsZSB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gICAgICogMSkgV2hlbiB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgaXMgYWN0aXZhdGVkXG4gICAgICogMikgV2hlbiB0aGUgUFNCVCBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dC5cbiAgICAgKlxuICAgICAqIFRoZSBzaWduaW5nIHByb2Nlc3Mgb2YgYSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0IGlzIGEgNC1zdGVwIHNlcXVlbmNlOlxuICAgICAqIGkpIHVzZXIgbm9uY2UgZ2VuZXJhdGlvbiAtIHNpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBleHRlcm5hbCBleHByZXNzIHNpZ25lciBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaSkgYml0Z28gbm9uY2UgZ2VuZXJhdGlvbiAtIGNvc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBhbmQgb25seSBjYWxsIHRvIGxvY2FsIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpaSkgdXNlciBzaWduYXR1cmUgLSBzaWduZXJTaWduYXR1cmUgLSB0aGlzIGlzIHRoZSBzZWNvbmQgY2FsbCB0byBleHRlcm5hbCBleHByZXNzIHNpZ25lciBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpdikgYml0Z28gc2lnbmF0dXJlIC0gbm90IGluIHNpZ25UcmFuc2FjdGlvbiBtZXRob2TigJlzIHNjb3BlXG4gICAgICpcbiAgICAgKiBJbiB0aGUgYWJzZW5jZSBvZiB0aGlzIGZsYWcsIHRoZSBhZm9yZW1lbnRpb25lZCBmaXJzdCB0aHJlZSBzZXF1ZW5jZSBpcyBleGVjdXRlZCBpbiBhIHNpbmdsZSBzaWduVHJhbnNhY3Rpb24gY2FsbC5cbiAgICAgKlxuICAgICAqIE5PVEU6IFdlIG1ha2UgYSBzdHJvbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBhbmQgaXRzIGNhbGxlciB1c2VzIHN0aWNreSBzZXNzaW9ucyxcbiAgICAgKiBzaW5jZSBQU0JUcyBhcmUgY2FjaGVkIGluIHN0ZXAgMSB0byBiZSB1c2VkIGluIHN0ZXAgMyBmb3IgTXVTaWcyIHVzZXIgc2VjdXJlIG5vbmNlIGFjY2Vzcy5cbiAgICAgKi9cbiAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJyB8ICdjb3NpZ25lck5vbmNlJztcbiAgfSk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+O1xufTtcblxuY29uc3QgeyBpc0NoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluLCBvdXRwdXRTY3JpcHRzIH0gPSBiaXRnbztcblxuLyoqXG4gKiBDaGVjayBpZiBhIGRlY29kZWQgdHJhbnNhY3Rpb24gaGFzIGF0IGxlYXN0IG9uZSB0YXByb290IGtleSBwYXRoIHNwZW5kIChNdVNpZzIpIGlucHV0LlxuICogV29ya3MgZm9yIGJvdGggdXR4b2xpYiBVdHhvUHNidCBhbmQgd2FzbS11dHhvIEJpdEdvUHNidC5cbiAqL1xuZnVuY3Rpb24gaGFzS2V5UGF0aFNwZW5kSW5wdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pOiBib29sZWFuIHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgYml0Z28uVXR4b1BzYnQpIHtcbiAgICByZXR1cm4gYml0Z28uaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmRJbnB1dCh0eCk7XG4gIH1cbiAgaWYgKHR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KSB7XG4gICAgYXNzZXJ0KHB1YnMgJiYgaXNUcmlwbGUocHVicyksICdwdWIgdHJpcGxlIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGZvciBrZXkgcGF0aCBzcGVuZCBpbnB1dHMgaW4gd2FzbS11dHhvIFBTQlQnKTtcbiAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb21YcHVicyhwdWJzKTtcbiAgICBjb25zdCByZXBsYXlQcm90ZWN0aW9uID0geyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSkgfTtcbiAgICBjb25zdCBwYXJzZWQgPSB0eC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMocm9vdFdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbiB9KTtcbiAgICByZXR1cm4gcGFyc2VkLmlucHV0cy5zb21lKChpbnB1dCkgPT4gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzJLZXlQYXRoJyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnQgVmFsaWRhdGlvbkVycm9yIHRvIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB3aXRoIHN0cnVjdHVyZWQgZGF0YVxuICpcbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBzdHJ1Y3R1cmVkIGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIFZhbGlkYXRpb25FcnJvclxuICogYnkgZXh0cmFjdGluZyB0aGUgbWlzbWF0Y2hlZCBvdXRwdXRzIGFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gdGhlIHN0YW5kYXJkaXplZCBmb3JtYXQuXG4gKiBUaGUgb3JpZ2luYWwgZXJyb3IgaXMgcHJlc2VydmVkIGFzIHRoZSBgY2F1c2VgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gIGVycm9yOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIHJlcUlkOiBzdHJpbmcgfCBJUmVxdWVzdFRyYWNlciB8IHVuZGVmaW5lZCxcbiAgdHhQYXJhbXM6IEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgdHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHhFeHBsYW5hdGlvbj86IHVua25vd25cbik6IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB7XG4gIGNvbnN0IG1pc21hdGNoZWRSZWNpcGllbnRzOiBNaXNtYXRjaGVkUmVjaXBpZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvci5lcnJvcnMpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JNaXNzaW5nT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLm1pc3NpbmdPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eEludGVudEVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcihcbiAgICBlcnJvci5tZXNzYWdlLFxuICAgIHJlcUlkLFxuICAgIFt0eFBhcmFtc10sXG4gICAgdHhIZXgsXG4gICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMsXG4gICAgdHhFeHBsYW5hdGlvblxuICApO1xuICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RydWN0dXJlZCBlcnJvciBhcyB0aGUgY2F1c2UgZm9yIGRlYnVnZ2luZ1xuICAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yL2NhdXNlXG4gICh0eEludGVudEVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IEVycm9yIH0pLmNhdXNlID0gZXJyb3I7XG4gIHJldHVybiB0eEludGVudEVycm9yO1xufVxuXG5leHBvcnQgdHlwZSB7IERlY29kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IGJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGN1c3RvbUNoYW5nZVhwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRlZEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+IHtcbiAgY2hhbmdlSW5mbz86IHsgYWRkcmVzczogc3RyaW5nOyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXTtcbn1cblxuZXhwb3J0IHR5cGUgVXR4b05ldHdvcmsgPSB1dHhvbGliLk5ldHdvcms7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJiZlR4SWRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbiAgdmVyaWZpY2F0aW9uPzogVmVyaWZpY2F0aW9uT3B0aW9ucztcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHNlZ3dpdD86IGJvb2xlYW47XG4gIGJlY2gzMj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczoge1xuICAgIHB1Yjogc3RyaW5nO1xuICAgIGFzcEtleUlkPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW46IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG4gIGFkZHJlc3NUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljIGV4dGVuZHMgQWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nO1xufVxuXG50eXBlIFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zICYge1xuICAvKiogVHJhbnNhY3Rpb24gcHJlYnVpbGQgZnJvbSBiaXRnbyBzZXJ2ZXIgKi9cbiAgdHhQcmVidWlsZDoge1xuICAgIC8qKlxuICAgICAqIHdhbGxldElkIGlzIHJlcXVpcmVkIGluIGZvbGxvd2luZyAyIHNjZW5hcmlvcy5cbiAgICAgKiAxLiBFeHRlcm5hbCBzaWduZXIgZXhwcmVzcyBtb2RlIGlzIHVzZWQuXG4gICAgICogMi4gYml0Z28gTXVTaWcyIG5vbmNlIGlzIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHdhbGxldElkPzogc3RyaW5nO1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICAgIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICB9O1xuICAvKiogeHB1YnMgdHJpcGxlIGZvciB3YWxsZXQgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBSZXF1aXJlZCBvbmx5IHdoZW4gdHhQcmVidWlsZC50eEhleCBpcyBub3QgYSBQU0JUICovXG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgLyoqIHhwdWIgZm9yIGNvc2lnbmVyIChkZWZhdWx0cyB0byBiaXRnbykgKi9cbiAgY29zaWduZXJQdWI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGNyZWF0ZXMgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKiBXaGVuIGZhbHNlLCBjcmVhdGVzIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICovXG4gIGlzTGFzdFNpZ25hdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3Mgc2lnbmluZyBhIG5vbi1zZWd3aXQgaW5wdXQgd2l0aCBhIHdpdG5lc3NVdHhvIGluc3RlYWQgcmVxdWlyaW5nIGEgcHJldmlvdXNcbiAgICogdHJhbnNhY3Rpb24gKG5vbldpdG5lc3NVdHhvKVxuICAgKi9cbiAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBQU0JUIHRvIGxlZ2FjeSBmb3JtYXQgYmVmb3JlIHJldHVybmluZy5cbiAgICogU2V0IGF1dG9tYXRpY2FsbHkgYnkgcHJlc2lnblRyYW5zYWN0aW9uKCkgd2hlbiB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHR4Rm9ybWF0OiAnbGVnYWN5Jy5cbiAgICovXG4gIHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW47XG4gIHdhbGxldD86IFV0eG9XYWxsZXQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBleHRyYWN0IGZpbmFsaXplZCBQU0JUIHRvIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQuXG4gICAqIFdoZW4gZmFsc2UsIHJldHVybiBmaW5hbGl6ZWQgUFNCVC4gVXNlZnVsIGZvciB0ZXN0aW5nIHRvIGtlZXAgdHJhbnNhY3Rpb25zIGluIFBTQlQgZm9ybWF0LlxuICAgKi9cbiAgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZW1iZWRzIFdBU00tVVRYTyB2ZXJzaW9uIG1ldGFkYXRhIGludG8gdGhlIHNpZ25lZCBQU0JULiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBydjogc3RyaW5nO1xuICAgICAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJztcbiAgICAgIH1cbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNpZ0FkZHJlc3Mge1xuICBvdXRwdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9ucyB7XG4gIHR4aWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICB4cHJ2Pzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBjb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgcmVjb3ZlcnlDb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgc2lnbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbjogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5U2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW4/OiBVdHhvS2V5Y2hhaW47XG4gIGRpc2FibGVOZXR3b3JraW5nOiBib29sZWFuO1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVxdWVzdCB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlc3BvbnNlIHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVdHhvQ29pblxuICBleHRlbmRzIEJhc2VDb2luXG4gIGltcGxlbWVudHMgTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4sIE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD5cbntcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgc3VwcG9ydGVkVHhGb3JtYXRzOiB7IHBzYnQ6IGJvb2xlYW47IGxlZ2FjeTogYm9vbGVhbiB9ID0ge1xuICAgIHBzYnQ6IHRydWUsXG4gICAgbGVnYWN5OiB0aGlzLmlzTWFpbm5ldCgpLFxuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy5hbW91bnRUeXBlID0gYW1vdW50VHlwZTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0U2RrQmFja2VuZCgpOiBTZGtCYWNrZW5kIHtcbiAgICByZXR1cm4gaXNVdHhvQ29pbk5hbWVNYWlubmV0KHRoaXMubmFtZSkgPyAndXR4b2xpYicgOiAnd2FzbS11dHhvJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgdXR4b2xpYlxuICAgKiBVc2UgYG5hbWVgIHByb3BlcnR5IGluc3RlYWQuXG4gICAqL1xuICBnZXQgbmV0d29yaygpOiB1dHhvbGliLk5ldHdvcmsge1xuICAgIHJldHVybiBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICBnZXRDaGFpbigpOiBVdHhvQ29pbk5hbWUge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogVXR4b0NvaW5OYW1lTWFpbm5ldCB7XG4gICAgcmV0dXJuIGdldE1haW5uZXRDb2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29pbiBzdXBwb3J0cyBhIGJsb2NrIHRhcmdldCAqL1xuICBzdXBwb3J0c0Jsb2NrVGFyZ2V0KCk6IGJvb2xlYW4ge1xuICAgIC8vIEZJWE1FOiB0aGUgU0RLIGRvZXMgbm90IHNlZW0gdG8gdXNlIHRoaXMgYW55d2hlcmUgc28gaXQgaXMgdW5jbGVhciB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzXG4gICAgc3dpdGNoIChnZXRNYWlubmV0KHRoaXMubmV0d29yaykpIHtcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luOlxuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzd2VlcFdpdGhTZW5kTWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzdGF0aWMgZ2V0IHZhbGlkQWRkcmVzc1R5cGVzKCk6IFNjcmlwdFR5cGUyT2YzW10ge1xuICAgIHJldHVybiBbLi4ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU4O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgdmFsaWRcbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICogQHBhcmFtIHBhcmFtXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgcGFyYW0/OiB7IGFueUZvcm1hdD86IGJvb2xlYW47IGFsbG93TGlnaHRuaW5nPzogYm9vbGVhbiB9IHwgLyogbGVnYWN5IHBhcmFtZXRlciAqLyBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJyAmJiBwYXJhbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXByZWNhdGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsb3dMaWdodG5pbmcgPSAocGFyYW0gYXMgeyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk/LmFsbG93TGlnaHRuaW5nID8/IGZhbHNlO1xuICAgIGlmIChhbGxvd0xpZ2h0bmluZykge1xuICAgICAgaWYgKC9eKDAyfDAzKVswLTlhLWZBLUZdezY0fSQvLnRlc3QoYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNCb2x0MTFJbnZvaWNlKGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGFsbG93IGFsbCBhZGRyZXNzIGZvcm1hdHMuXG4gICAgLy8gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIG9ubHkgYWRkaXRpb25hbCBhZGRyZXNzIGZvcm1hdCBpcyBiY2ggY2FzaGFkZHIuXG4gICAgY29uc3QgYW55Rm9ybWF0ID0gKHBhcmFtIGFzIHsgYW55Rm9ybWF0OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbnlGb3JtYXQgPz8gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCBvdXQgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgZm9yIGFueSBmb3JtYXQuIFRyaWVzIGFsbCBzdXBwb3J0ZWQgZm9ybWF0cyBieSBkZWZhdWx0LlxuICAgICAgLy8gVGhyb3dzIGlmIGFkZHJlc3MgY2Fubm90IGJlIGRlY29kZWQgd2l0aCBhbnkgZm9ybWF0LlxuICAgICAgY29uc3QgW2Zvcm1hdCwgc2NyaXB0XSA9IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b091dHB1dFNjcmlwdEFuZEZvcm1hdChhZGRyZXNzLCB0aGlzLm5ldHdvcmspO1xuICAgICAgLy8gdW5sZXNzIGFueUZvcm1hdCBpcyBzZXQsIG9ubHkgJ2RlZmF1bHQnIGlzIGFsbG93ZWQuXG4gICAgICBpZiAoIWFueUZvcm1hdCAmJiBmb3JtYXQgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhZGRyZXNzIGlzIGluIG5vcm1hbCByZXByZXNlbnRhdGlvbiBmb3IgZ2l2ZW4gZm9ybWF0LlxuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChzY3JpcHQsIGZvcm1hdCwgdGhpcy5uZXR3b3JrKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQklQMzIuZnJvbUJhc2U1OChwdWIpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBjcmFmdGluZyB0aGUgSFRUUCByZXF1ZXN0IHRvIHRoZSBCaXRHbyBBUEkuXG4gICAqIEl0IGNvbnZlcnRzIHRoZSByZWNpcGllbnQgYWRkcmVzcyBgc2NyaXB0UHViS2V5Oi4uLmAgdG8geyBzY3JpcHQ6IHN0cmluZyB9IHwgeyBhZGRyZXNzOiBzdHJpbmcgfS5cbiAgICovXG4gIG92ZXJyaWRlIHByZXByb2Nlc3NCdWlsZFBhcmFtcyhwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBpZiAocGFyYW1zLnJlY2lwaWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnJlY2lwaWVudHMgPVxuICAgICAgICBwYXJhbXMucmVjaXBpZW50cyBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgPyBwYXJhbXM/LnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYWRkcmVzcywgLi4ucmVzdCB9ID0gcmVjaXBpZW50O1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCAuLi5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGFkZHJlc3MpIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogcGFyYW1zLnJlY2lwaWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhdGVzdCBibG9jayBoZWlnaHRcbiAgICogQHBhcmFtIHJlcUlkXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RCbG9ja0hlaWdodChyZXFJZD86IFJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmIChyZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hhaW5oZWFkID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy9wdWJsaWMvYmxvY2svbGF0ZXN0JykpLnJlc3VsdCgpO1xuICAgIHJldHVybiAoY2hhaW5oZWFkIGFzIGFueSkuaGVpZ2h0O1xuICB9XG5cbiAgY2hlY2tSZWNpcGllbnQocmVjaXBpZW50OiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBudW1iZXIgfCBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQocmVjaXBpZW50KTtcbiAgICBpZiAoIWlzU2NyaXB0UmVjaXBpZW50KHJlY2lwaWVudC5hZGRyZXNzKSkge1xuICAgICAgc3VwZXIuY2hlY2tSZWNpcGllbnQocmVjaXBpZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIGN1c3RvbSBjb2luIGxvZ2ljIGFmdGVyIGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSBCaXRHb1xuICAgKiBAcGFyYW0gcHJlYnVpbGRcbiAgICovXG4gIGFzeW5jIHBvc3RQcm9jZXNzUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgcHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgdHggPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkKHByZWJ1aWxkKTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwcmVidWlsZC5ibG9ja0hlaWdodCkpIHtcbiAgICAgIHByZWJ1aWxkLmJsb2NrSGVpZ2h0ID0gKGF3YWl0IHRoaXMuZ2V0TGF0ZXN0QmxvY2tIZWlnaHQoKSkgYXMgbnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gXy5leHRlbmQoe30sIHByZWJ1aWxkLCB7IHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbih0eCkudG9TdHJpbmcoJ2hleCcpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgZHJvcCBzdXBwb3J0IGZvciB1dHhvbGliXG4gICAqIERldGVybWluZSBhbiBhZGRyZXNzJyB0eXBlIGJhc2VkIG9uIGl0cyB3aXRuZXNzIGFuZCByZWRlZW0gc2NyaXB0IHByZXNlbmNlXG4gICAqIEBwYXJhbSBhZGRyZXNzRGV0YWlsc1xuICAgKi9cbiAgc3RhdGljIGluZmVyQWRkcmVzc1R5cGUoYWRkcmVzc0RldGFpbHM6IHsgY2hhaW46IG51bWJlciB9KTogU2NyaXB0VHlwZTJPZjMgfCBudWxsIHtcbiAgICByZXR1cm4gaXNDaGFpbkNvZGUoYWRkcmVzc0RldGFpbHMuY2hhaW4pID8gc2NyaXB0VHlwZUZvckNoYWluKGFkZHJlc3NEZXRhaWxzLmNoYWluKSA6IG51bGw7XG4gIH1cblxuICBjcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgaGV4OiBzdHJpbmdcbiAgKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPihoZXgsIHRoaXMubmV0d29yaywgdGhpcy5hbW91bnRUeXBlKTtcbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIGlucHV0OiBCdWZmZXIgfCBzdHJpbmcsXG4gICAgZGVjb2RlV2l0aDogU2RrQmFja2VuZCA9IHRoaXMuZGVmYXVsdFNka0JhY2tlbmRcbiAgKTogRGVjb2RlZFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgYnVmZmVyID0gc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKGlucHV0LCBbJ2hleCcsICdiYXNlNjQnXSk7XG4gICAgICByZXR1cm4gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihidWZmZXIsIGRlY29kZVdpdGgpO1xuICAgIH1cblxuICAgIGlmICh1dHhvbGliLmJpdGdvLmlzUHNidChpbnB1dCkpIHtcbiAgICAgIGlmICghdGhpcy5zdXBwb3J0ZWRUeEZvcm1hdHMucHNidCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQoJ3BzYnQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChpbnB1dCwgdGhpcy5uYW1lLCBkZWNvZGVXaXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGVnYWN5IGZvcm1hdCB0cmFuc2FjdGlvbnMgYXJlIGRlcHJlY2F0ZWQuIFRoaXMgd2lsbCBiZSBhbiB1bmNvbmRpdGlvbmFsIGVycm9yIGluIHRoZSBmdXR1cmUuXG4gICAgICBpZiAoIXRoaXMuc3VwcG9ydGVkVHhGb3JtYXRzLmxlZ2FjeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQoJ2xlZ2FjeScpO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZVdpdGggIT09ICd1dHhvbGliJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdyZWNlaXZlZCBkZWNvZGVXaXRoIGhpbnQgJXMsIGlnbm9yaW5nIGZvciBsZWdhY3kgdHJhbnNhY3Rpb24nLCBkZWNvZGVXaXRoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihpbnB1dCwgdGhpcy5uZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6IHRoaXMuYW1vdW50VHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uQXNQc2J0KGlucHV0OiBCdWZmZXIgfCBzdHJpbmcpOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihpbnB1dCk7XG4gICAgaWYgKGRlY29kZWQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgfHwgZGVjb2RlZCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICAgIHJldHVybiBkZWNvZGVkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHBzYnQgYnV0IGdvdCB0cmFuc2FjdGlvbicpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4ocHJlYnVpbGQ6IHtcbiAgICB0eEhleD86IHN0cmluZztcbiAgICB0eEJhc2U2ND86IHN0cmluZztcbiAgICBkZWNvZGVXaXRoPzogc3RyaW5nO1xuICB9KTogRGVjb2RlZFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICBjb25zdCBzdHJpbmcgPSBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIGxldCB7IGRlY29kZVdpdGggfSA9IHByZWJ1aWxkO1xuICAgIGlmIChkZWNvZGVXaXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVjb2RlV2l0aCAhPT0gJ3N0cmluZycgfHwgIWlzU2RrQmFja2VuZChkZWNvZGVXaXRoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdkZWNvZGVXaXRoICVzIGlzIG5vdCBhIHZhbGlkIHZhbHVlLCB1c2luZyBkZWZhdWx0JywgZGVjb2RlV2l0aCk7XG4gICAgICAgIGRlY29kZVdpdGggPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHN0cmluZywgZGVjb2RlV2l0aCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhbmQgZmlsbCB0cmFuc2FjdGlvbiBkZXRhaWxzIHN1Y2ggYXMgaW50ZXJuYWwvY2hhbmdlIHNwZW5kLCBleHRlcm5hbCBzcGVuZCAoZXhwbGljaXQgdnMuIGltcGxpY2l0KSwgZXRjLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbih0aGlzLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeVVzZXJQdWJsaWNLZXkgaW5zdGVhZFxuICAgKi9cbiAgcHJvdGVjdGVkIHZlcmlmeVVzZXJQdWJsaWNLZXkocGFyYW1zOiBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlVc2VyUHVibGljS2V5KHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgZnVuY3Rpb24gdmVyaWZ5S2V5U2lnbmF0dXJlIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zOiBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXggcHJlYnVpbHQgdHJhbnNhY3Rpb24ncyB0eEhleCBmb3JtXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IFdhbGxldCBvYmplY3QgdG8gb2J0YWluIGtleXMgdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24gT2JqZWN0IHNwZWNpZnlpbmcgc29tZSB2ZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBEaXNhbGxvdyBmZXRjaGluZyBhbnkgZGF0YSBmcm9tIHRoZSBpbnRlcm5ldCBmb3IgdmVyaWZpY2F0aW9uIHB1cnBvc2VzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmtleWNoYWlucyBQYXNzIGtleWNoYWlucyBtYW51YWxseSByYXRoZXIgdGhhbiBmZXRjaGluZyB0aGVtIGJ5IGlkXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmFkZHJlc3NlcyBBZGRyZXNzIGRldGFpbHMgdG8gcGFzcyBpbiBmb3Igb3V0LW9mLWJhbmQgdmVyaWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcn0gaWYgdHJhbnNhY3Rpb24gcmVjaXBpZW50cyBkb24ndCBtYXRjaCB1c2VyIGludGVudFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB2ZXJpZnlUcmFuc2FjdGlvbih0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMucmVxSWQsXG4gICAgICAgICAgcGFyYW1zLnR4UGFyYW1zLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICAgIHR4RXhwbGFuYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgYW4gYWRkcmVzcyBpcyB2YWxpZCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QuXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyBzdHJpbmcgb24gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBLZXljaGFpbiBvYmplY3RzIHdpdGggeHB1YnNcbiAgICogQHBhcmFtIHBhcmFtcy5jb2luU3BlY2lmaWMgQ29pbi1zcGVjaWZpYyBkZXRhaWxzIGZvciB0aGUgYWRkcmVzcyBzdWNoIGFzIGEgd2l0bmVzcyBzY3JpcHRcbiAgICogQHBhcmFtIHBhcmFtcy5jaGFpbiBEZXJpdmF0aW9uIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMuaW5kZXggRGVyaXZhdGlvbiBpbmRleFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yfVxuICAgKiBAdGhyb3dzIHtVbmV4cGVjdGVkQWRkcmVzc0Vycm9yfVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucywgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbnMgbXVzdCBiZSBhIHRyaXBsZScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MoXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHRvQmlwMzJUcmlwbGUoa2V5Y2hhaW5zKSwgZ2V0UG9saWN5Rm9yRW52KHRoaXMuYml0Z28uZW52KSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoKF8uaXNVbmRlZmluZWQoY2hhaW4pICYmIF8uaXNVbmRlZmluZWQoaW5kZXgpKSB8fCAhKF8uaXNGaW5pdGUoY2hhaW4pICYmIF8uaXNGaW5pdGUoaW5kZXgpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogaW52YWxpZCBjaGFpbiAoJHtjaGFpbn0pIG9yIGluZGV4ICgke2luZGV4fSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgfVxuXG4gICAgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzKHRoaXMubmFtZSwge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGZvcm1hdDogcGFyYW1zLmZvcm1hdCA/PyAnYmFzZTU4JyxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYWRkcmVzc1R5cGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIHVuc3BlbnRUeXBlXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NUeXBlKGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKHRoaXMubmV0d29yaywgYWRkcmVzc1R5cGUpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm4gdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIGNoYWluXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NDaGFpbihjaGFpbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGNoYWluKSAmJiB0aGlzLnN1cHBvcnRzQWRkcmVzc1R5cGUodXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pKTtcbiAgfVxuXG4gIGtleUlkc0ZvclNpZ25pbmcoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT107XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnQgYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8dXR4b2xpYi5iaXRnby5VdHhvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwoJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eC9zaWducHNidCcpKVxuICAgICAgLnNlbmQoeyBwc2J0OiBidWZmZXIudG9TdHJpbmcoJ2hleCcpIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgaWYgKHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgocmVzcG9uc2UucHNidCwgdGhpcy5uYW1lLCAndXR4b2xpYicpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChyZXNwb25zZS5wc2J0LCB0aGlzLm5hbWUsICd3YXNtLXV0eG8nKSBhcyBUO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0TXVzaWcyTm9uY2VzIGluc3RlYWRcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnRIZXggYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidChwc2J0SGV4OiBzdHJpbmcsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25Qc2J0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChwc2J0SGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiB7IHBzYnQ6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMgZnJvbSBPVkMuXG4gICAqIEBwYXJhbSBvdmNKc29uIEpTT04gb2JqZWN0IHByb3ZpZGVkIGJ5IE9WQyB3aXRoIGZpZWxkcyBwc2J0SGV4IGFuZCB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnRGcm9tT1ZDKG92Y0pzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGFzc2VydChvdmNKc29uWydwc2J0SGV4J10sICdvdmNKc29uIG11c3QgY29udGFpbiBwc2J0SGV4Jyk7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3dhbGxldElkJ10sICdvdmNKc29uIG11c3QgY29udGFpbiB3YWxsZXRJZCcpO1xuICAgIGNvbnN0IGhleCA9IG92Y0pzb25bJ3BzYnRIZXgnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSBvdmNKc29uWyd3YWxsZXRJZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChoZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKG92Y0pzb24sIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzXG4gICAqXG4gICAqIEByZXR1cm5zIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICBhc3luYyBzaWduV2l0aEN1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBjdXN0b21TaWduaW5nRnVuY3Rpb246IFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlcj4sXG4gICAgc2lnblRyYW5zYWN0aW9uUGFyYW1zOiB7IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47IHB1YnM6IHN0cmluZ1tdIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgYXNzZXJ0KHR4SGV4LCAnbWlzc2luZyB0eEhleCBwYXJhbWV0ZXInKTtcblxuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbih0eEhleCk7XG5cbiAgICBjb25zdCBpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0ID0gaGFzS2V5UGF0aFNwZW5kSW5wdXQodHgsIHNpZ25UcmFuc2FjdGlvblBhcmFtcy5wdWJzLCB0aGlzLm5hbWUpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodW5zcGVudCwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIHdhbGxldD86IElXYWxsZXRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucHVicykge1xuICAgICAgLy8gaWYgbm8gcHVicyBhcmUgcHJvdmlkZWQsIG9wcG9ydHVuaXN0aWNhbGx5IGZldGNoIHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgd2FsbGV0XG4gICAgICBpZiAod2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKHRoaXMsIHdhbGxldCk7XG4gICAgICAgIHBhcmFtcy5wdWJzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwbGFpblR4KHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zKSwgcGFyYW1zLCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgYmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gYmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWMShwYXJhbXM6IFYxUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxQmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gdjFCYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgc3dlZXBWMShwYXJhbXM6IFYxU3dlZXBQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MVN3ZWVwPiB7XG4gICAgcmV0dXJuIHYxU3dlZXAodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIGNvaW4gdGhhdCB3YXMgc2VudCB0byB3cm9uZyBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhpZCBUaGUgdHhpZCBvZiB0aGUgZmF1bHR5IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzIGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5Q29pbiB0aGUgY29pbiB0eXBlIG9mIHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5zaWduZWQgcmV0dXJuIGEgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gKGRlZmF1bHQ9dHJ1ZSlcbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0gcGFyYW1zLnhwcnYgdGhlIHVuZW5jcnlwdGVkIHhwcnYgKHVzZWQgaW5zdGVhZCBvZiB3YWxsZXQgcGFzc3BocmFzZSlcbiAgICogQHBhcmFtIHBhcmFtcy5hcGlLZXkgZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9uc1xuICApOiBQcm9taXNlPENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgeyB0eGlkLCByZWNvdmVyeUFkZHJlc3MsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSwgeHBydiwgYXBpS2V5IH0gPSBwYXJhbXM7XG5cbiAgICAvLyBwYXJhbXMucmVjb3ZlcnlDb2luIHVzZWQgdG8gYmUgcGFyYW1zLmNvaW4sIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luID0gcGFyYW1zLmNvaW4gfHwgcGFyYW1zLnJlY292ZXJ5Q29pbjtcbiAgICBpZiAoIXJlY292ZXJ5Q29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCByZWNvdmVyeUNvaW4nKTtcbiAgICB9XG4gICAgLy8gc2lnbmVkIHNob3VsZCBkZWZhdWx0IHRvIHRydWUsIGFuZCBvbmx5IGJlIGRpc2FibGVkIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIChub3QgdW5kZWZpbmVkKVxuICAgIGNvbnN0IHNpZ25lZCA9IHBhcmFtcy5zaWduZWQgIT09IGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlQ29pbkZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luRmFtaWx5ID0gcmVjb3ZlcnlDb2luLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMgPSBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luRmFtaWx5XTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMpIHx8ICFzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zLmluY2x1ZGVzKHJlY292ZXJ5Q29pbkZhbWlseSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3Zlcnkgb2YgJHtzb3VyY2VDb2luRmFtaWx5fSBiYWxhbmNlcyBmcm9tICR7cmVjb3ZlcnlDb2luRmFtaWx5fSB3YWxsZXRzIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXI+KHRoaXMuYml0Z28sIHtcbiAgICAgIHNvdXJjZUNvaW46IHRoaXMsXG4gICAgICByZWNvdmVyeUNvaW4sXG4gICAgICB3YWxsZXRJZDogd2FsbGV0LFxuICAgICAgdHhpZCxcbiAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHNpZ25lZCA/IHdhbGxldFBhc3NwaHJhc2UgOiB1bmRlZmluZWQsXG4gICAgICB4cHJ2OiBzaWduZWQgPyB4cHJ2IDogdW5kZWZpbmVkLFxuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGJpcDMyIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ6IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICAgIGlmICghc2VlZCkge1xuICAgICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAgIC8vIGJpdCBjaGFpbiBjb2RlLCBib3RoIG9mIHdoaWNoIG11c3QgYmUgcmFuZG9tLiA1MTIgYml0cyBpcyB0aGVyZWZvcmUgdGhlXG4gICAgICAvLyBtYXhpbXVtIGVudHJvcHkgYW5kIGdpdmVzIHVzIG1heGltdW0gc2VjdXJpdHkgYWdhaW5zdCBjcmFja2luZy5cbiAgICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kZWRLZXkgPSBCSVAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgICBwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBvbiB3YWxsZXQgcHJvcGVydGllcyBhbmQgbmV0d29ya1xuICAgKiBAcGFyYW0gd2FsbGV0IC0gVGhlIHdhbGxldCB0byBjaGVja1xuICAgKiBAcGFyYW0gcmVxdWVzdGVkRm9ybWF0IC0gT3B0aW9uYWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgZm9ybWF0XG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiBmb3JtYXQgdG8gdXNlLCBvciB1bmRlZmluZWQgaWYgbm8gZGVmYXVsdCBhcHBsaWVzXG4gICAqL1xuICBnZXREZWZhdWx0VHhGb3JtYXQod2FsbGV0OiBXYWxsZXQsIHJlcXVlc3RlZEZvcm1hdD86IFR4Rm9ybWF0KTogVHhGb3JtYXQge1xuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICByZXR1cm4gJ3BzYnQtbGl0ZSc7XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0ZWRGb3JtYXQgPz8gJ3BzYnQtbGl0ZSc7XG4gIH1cblxuICBhc3luYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zOiBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyAmIHsgd2FsbGV0OiBXYWxsZXQgfSk6IFByb21pc2U8e1xuICAgIHR4Rm9ybWF0PzogVHhGb3JtYXQ7XG4gICAgY2hhbmdlQWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjM7XG4gICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM/OiBTY3JpcHRUeXBlMk9mM1tdO1xuICB9PiB7XG4gICAgY29uc3QgcmVxdWVzdGVkRm9ybWF0ID0gYnVpbGRQYXJhbXMudHhGb3JtYXQgYXMgVHhGb3JtYXQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHhGb3JtYXQgPSB0aGlzLmdldERlZmF1bHRUeEZvcm1hdChidWlsZFBhcmFtcy53YWxsZXQsIHJlcXVlc3RlZEZvcm1hdCk7XG4gICAgbGV0IGNoYW5nZUFkZHJlc3NUeXBlID0gYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIGFkZHJlc3NUeXBlIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBwMnRyTXVzaWcyIGZvciB0ZXN0bmV0IGhvdCB3YWxsZXRzIGZvciBzdGFnZWQgcm9sbG91dCBvZiBwMnRyTXVzaWcyXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXMuYWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJiAvLyBhZGRyZXNzVHlwZSBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgY2hhbmdlQWRkcmVzc2BcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3MgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMud2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCdcbiAgICApIHtcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXTtcbiAgICB9XG5cbiAgICAvLyBnZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkgb25seSBzdXBwb3J0cyBwMm1zLWJhc2VkIHR5cGVzIChwMnNoLCBwMnNoUDJ3c2gsIHAyd3NoKS5cbiAgICAvLyBGaWx0ZXIgY2hhbmdlIG91dHB1dHMgYW5kIHJlc3RyaWN0IGlucHV0IHNlbGVjdGlvbiB0byB0aGVzZSB0eXBlcy5cbiAgICBjb25zdCBsZWdhY3lDb21wYXRpYmxlVHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ107XG4gICAgbGV0IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gY2hhbmdlQWRkcmVzc1R5cGUuZmlsdGVyKCh0KTogdCBpcyBTY3JpcHRUeXBlMk9mMyA9PlxuICAgICAgICAgIGxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VBZGRyZXNzVHlwZSAhPT0gdW5kZWZpbmVkICYmICFsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXMoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eEZvcm1hdCxcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlLFxuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByZUNyZWF0ZUJpdEdvKHBhcmFtczogUHJlY3JlYXRlQml0R29PcHRpb25zKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmMgcHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtczogUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHBhcmFtcy53YWxsZXREYXRhICYmIGlzVXR4b1dhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpICYmIGlzRGVzY3JpcHRvcldhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpKSB7XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVybkxlZ2FjeUZvcm1hdCA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR4Rm9ybWF0ID09PSAnbGVnYWN5JztcblxuICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBhICdwc2J0LWxpdGUnIHRyYW5zYWN0aW9uIGZvcm1hdCwgd2Ugd2FudCB0byBpbmRpY2F0ZSBpbiBzaWduaW5nIHRvIG5vdCBmYWlsXG4gICAgY29uc3QgdHhIZXggPSAocGFyYW1zLnR4SGV4ID8/IHBhcmFtcy50eFByZWJ1aWxkPy50eEhleCkgYXMgc3RyaW5nO1xuICAgIGlmIChcbiAgICAgIHR4SGV4ICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidCh0eEhleCBhcyBzdHJpbmcpICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidExpdGUodXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgdGhpcy5uZXR3b3JrKSkgJiZcbiAgICAgIHBhcmFtcy5hbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB7IC4uLnBhcmFtcywgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeDogdHJ1ZSwgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gIH1cblxuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICAgIGtleWNoYWluczogS2V5Y2hhaW5zVHJpcGxldFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRhdGFBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvdmVyeVByb3ZpZGVyKGFwaVRva2VuPzogc3RyaW5nKTogUmVjb3ZlcnlQcm92aWRlciB7XG4gICAgcmV0dXJuIGZvckNvaW4odGhpcy5nZXRDaGFpbigpLCBhcGlUb2tlbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoe1xuICAgIG11bHRpU2lnVHlwZSxcbiAgICBwdWJsaWNLZXksXG4gICAgcHJ2LFxuICB9OiB7XG4gICAgbXVsdGlTaWdUeXBlOiBNdWx0aXNpZ1R5cGU7XG4gICAgcHVibGljS2V5OiBzdHJpbmc7XG4gICAgcHJ2OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlID09PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0c3MgYXVkaXRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFBydihwcnYpICYmICFpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0tleSkge1xuICAgICAgY29uc3QgZ2VuUHViS2V5ID0gQklQMzIuZnJvbUJhc2U1OChwcnYpLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgIGlmIChnZW5QdWJLZXkgIT09IHB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -8,10 +8,13 @@ export type ReplayProtectionKeys = {
8
8
  * Uses bulk signing for performance (signs all matching inputs in one pass).
9
9
  * Collects and logs signing errors and verification errors, throws error in the end if any of them failed.
10
10
  */
11
- export declare function signAndVerifyPsbtWasm(tx: fixedScriptWallet.BitGoPsbt, signerKeychain: bip32.BIP32Interface | BIP32, rootWalletKeys: fixedScriptWallet.RootWalletKeys, replayProtection: ReplayProtectionKeys): fixedScriptWallet.BitGoPsbt;
11
+ export declare function signAndVerifyPsbtWasm(tx: fixedScriptWallet.BitGoPsbt, signerKeychain: bip32.BIP32Interface | BIP32, rootWalletKeys: fixedScriptWallet.RootWalletKeys, replayProtection: ReplayProtectionKeys, { writeSignedWith }?: {
12
+ writeSignedWith?: boolean;
13
+ }): fixedScriptWallet.BitGoPsbt;
12
14
  export declare function signPsbtWithMusig2ParticipantWasm(coin: Musig2Participant<fixedScriptWallet.BitGoPsbt>, tx: fixedScriptWallet.BitGoPsbt, signerKeychain: bip32.BIP32Interface | undefined, rootWalletKeys: fixedScriptWallet.RootWalletKeys, params: {
13
15
  replayProtection: ReplayProtectionKeys;
14
16
  signingStep: 'signerNonce' | 'cosignerNonce' | 'signerSignature' | undefined;
15
17
  walletId: string | undefined;
18
+ writeSignedWith?: boolean;
16
19
  }): Promise<fixedScriptWallet.BitGoPsbt>;
17
20
  //# sourceMappingURL=signPsbtWasm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signPsbtWasm.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signPsbtWasm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;CACrC,CAAC;AAmBF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,EAC5C,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,gBAAgB,EAAE,oBAAoB,GACrC,iBAAiB,CAAC,SAAS,CAqC7B;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,EACpD,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,SAAS,EAChD,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,MAAM,EAAE;IACN,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GACA,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAiDtC"}
1
+ {"version":3,"file":"signPsbtWasm.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signPsbtWasm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAsB,MAAM,kBAAkB,CAAC;AAK/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;CACrC,CAAC;AAmBF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,EAC5C,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,gBAAgB,EAAE,oBAAoB,EACtC,EAAE,eAAuB,EAAE,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9D,iBAAiB,CAAC,SAAS,CAgD7B;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,EACpD,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,SAAS,EAChD,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,MAAM,EAAE;IACN,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACA,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAmDtC"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.signAndVerifyPsbtWasm = signAndVerifyPsbtWasm;
7
7
  exports.signPsbtWithMusig2ParticipantWasm = signPsbtWithMusig2ParticipantWasm;
8
8
  const assert_1 = __importDefault(require("assert"));
9
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
9
10
  const wasmUtil_1 = require("../../wasmUtil");
10
11
  const SigningError_1 = require("./SigningError");
11
12
  /**
@@ -24,7 +25,7 @@ function hasKeyPathSpendInput(tx, rootWalletKeys, replayProtection) {
24
25
  * Uses bulk signing for performance (signs all matching inputs in one pass).
25
26
  * Collects and logs signing errors and verification errors, throws error in the end if any of them failed.
26
27
  */
27
- function signAndVerifyPsbtWasm(tx, signerKeychain, rootWalletKeys, replayProtection) {
28
+ function signAndVerifyPsbtWasm(tx, signerKeychain, rootWalletKeys, replayProtection, { writeSignedWith = false } = {}) {
28
29
  const wasmSigner = (0, wasmUtil_1.toWasmBIP32)(signerKeychain);
29
30
  // Bulk sign all wallet inputs (ECDSA + MuSig2) - much faster than per-input signing
30
31
  try {
@@ -54,6 +55,14 @@ function signAndVerifyPsbtWasm(tx, signerKeychain, rootWalletKeys, replayProtect
54
55
  if (verifyErrors.length) {
55
56
  throw new SigningError_1.TransactionSigningError([], verifyErrors);
56
57
  }
58
+ if (writeSignedWith) {
59
+ const versionInfo = (0, wasm_utxo_1.getWasmUtxoVersion)();
60
+ const versionPayload = new TextEncoder().encode(JSON.stringify({
61
+ version: versionInfo.version,
62
+ gitHash: versionInfo.gitHash,
63
+ }));
64
+ tx.setKV({ type: 'bitgo', subtype: wasm_utxo_1.fixedScriptWallet.BitGoKeySubtype.WasmUtxoSignedWith }, versionPayload);
65
+ }
57
66
  return tx;
58
67
  }
59
68
  async function signPsbtWithMusig2ParticipantWasm(coin, tx, signerKeychain, rootWalletKeys, params) {
@@ -100,6 +109,8 @@ async function signPsbtWithMusig2ParticipantWasm(coin, tx, signerKeychain, rootW
100
109
  }
101
110
  }
102
111
  (0, assert_1.default)(signerKeychain);
103
- return signAndVerifyPsbtWasm(tx, signerKeychain, rootWalletKeys, params.replayProtection);
112
+ return signAndVerifyPsbtWasm(tx, signerKeychain, rootWalletKeys, params.replayProtection, {
113
+ writeSignedWith: params.writeSignedWith,
114
+ });
104
115
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnRXYXNtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25Qc2J0V2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQW1DQSxzREEwQ0M7QUFFRCw4RUEyREM7QUExSUQsb0RBQTRCO0FBSTVCLDZDQUE2QztBQUU3QyxpREFBOEY7QUFPOUY7Ozs7O0dBS0c7QUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBdUMsQ0FBQztBQUV2RSxTQUFTLG9CQUFvQixDQUMzQixFQUErQixFQUMvQixjQUFnRCxFQUNoRCxnQkFBc0M7SUFFdEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2RixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLG1CQUFtQixDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsRUFBK0IsRUFDL0IsY0FBNEMsRUFDNUMsY0FBZ0QsRUFDaEQsZ0JBQXNDO0lBRXRDLE1BQU0sVUFBVSxHQUFHLElBQUEsc0JBQVcsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUUvQyxvRkFBb0Y7SUFDcEYsSUFBSSxDQUFDO1FBQ0gsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSwrQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQseUZBQXlGO0lBQ3pGLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdkYsTUFBTSxZQUFZLEdBQWdDLEVBQUUsQ0FBQztJQUVyRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRTtRQUMxQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEMsZ0VBQWdFO1lBQ2hFLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxZQUFZLENBQUMsSUFBSSxDQUNmLElBQUksZ0NBQWlCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUN0RyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLGdDQUFpQixDQUFTLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLHNDQUF1QixDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRU0sS0FBSyxVQUFVLGlDQUFpQyxDQUNyRCxJQUFvRCxFQUNwRCxFQUErQixFQUMvQixjQUFnRCxFQUNoRCxjQUFnRCxFQUNoRCxNQUlDO0lBRUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFBLHNCQUFXLEVBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUU1RSxJQUFJLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUN0RSxRQUFRLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixLQUFLLGFBQWE7Z0JBQ2hCLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxFQUFFLENBQUM7WUFDWixLQUFLLGVBQWU7Z0JBQ2xCLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsUUFBUSxFQUFFLDZDQUE2QyxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0MsSUFBQSxnQkFBTSxFQUNKLFVBQVUsRUFDViw0Q0FBNEMsZUFBZSxDQUFDLElBQUk7bUlBQ3lELENBQzFILENBQUM7Z0JBQ0YsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxFQUFFLEdBQUcsVUFBVSxDQUFDO2dCQUNoQixNQUFNO1lBQ1IsQ0FBQztZQUNEO2dCQUNFLDBDQUEwQztnQkFDMUMsSUFBQSxnQkFBTSxFQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztnQkFDdkUsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQixFQUFFLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixLQUFLLGFBQWEsQ0FBQztZQUNuQixLQUFLLGVBQWU7Z0JBQ2xCOzs7bUJBR0c7Z0JBQ0gsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUEsZ0JBQU0sRUFBQyxjQUFjLENBQUMsQ0FBQztJQUN2QixPQUFPLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IEJJUDMyLCBiaXAzMiwgRUNQYWlyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyB0b1dhc21CSVAzMiB9IGZyb20gJy4uLy4uL3dhc21VdGlsJztcblxuaW1wb3J0IHsgQnVsa1NpZ25pbmdFcnJvciwgSW5wdXRTaWduaW5nRXJyb3IsIFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yIH0gZnJvbSAnLi9TaWduaW5nRXJyb3InO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL211c2lnMic7XG5cbmV4cG9ydCB0eXBlIFJlcGxheVByb3RlY3Rpb25LZXlzID0ge1xuICBwdWJsaWNLZXlzOiAoVWludDhBcnJheSB8IEVDUGFpcilbXTtcbn07XG5cbi8qKlxuICogS2V5IFZhbHVlOiBVbnNpZ25lZCB0eCBpZCA9PiBQU0JUXG4gKiBJdCBpcyB1c2VkIHRvIGNhY2hlIFBTQlRzIHdpdGggdGFwcm9vdCBrZXkgcGF0aCAoTXVTaWcyKSBpbnB1dHMgZHVyaW5nIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZC5cbiAqIFJlYXNvbjogTXVTaWcyIHNpZ25lciBzZWN1cmUgbm9uY2UgaXMgY2FjaGVkIGluIHRoZSBCaXRHb1BzYnQgb2JqZWN0LiBJdCB3aWxsIGJlIHJlcXVpcmVkIGR1cmluZyB0aGUgc2lnbmluZyBzdGVwLlxuICogRm9yIG1vcmUgaW5mbywgY2hlY2sgU2lnblRyYW5zYWN0aW9uT3B0aW9ucy5zaWduaW5nU3RlcFxuICovXG5jb25zdCBQU0JUX0NBQ0hFX1dBU00gPSBuZXcgTWFwPHN0cmluZywgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PigpO1xuXG5mdW5jdGlvbiBoYXNLZXlQYXRoU3BlbmRJbnB1dChcbiAgdHg6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgcm9vdFdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICByZXBsYXlQcm90ZWN0aW9uOiBSZXBsYXlQcm90ZWN0aW9uS2V5c1xuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnNlZCA9IHR4LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uIH0pO1xuICByZXR1cm4gcGFyc2VkLmlucHV0cy5zb21lKChpbnB1dCkgPT4gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzJLZXlQYXRoJyk7XG59XG5cbi8qKlxuICogU2lnbiBhbGwgaW5wdXRzIG9mIGEgUFNCVCBhbmQgdmVyaWZ5IHNpZ25hdHVyZXMgYWZ0ZXIgc2lnbmluZy5cbiAqIFVzZXMgYnVsayBzaWduaW5nIGZvciBwZXJmb3JtYW5jZSAoc2lnbnMgYWxsIG1hdGNoaW5nIGlucHV0cyBpbiBvbmUgcGFzcykuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW0gZmFpbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFuZFZlcmlmeVBzYnRXYXNtKFxuICB0eDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICBzaWduZXJLZXljaGFpbjogYmlwMzIuQklQMzJJbnRlcmZhY2UgfCBCSVAzMixcbiAgcm9vdFdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICByZXBsYXlQcm90ZWN0aW9uOiBSZXBsYXlQcm90ZWN0aW9uS2V5c1xuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3Qgd2FzbVNpZ25lciA9IHRvV2FzbUJJUDMyKHNpZ25lcktleWNoYWluKTtcblxuICAvLyBCdWxrIHNpZ24gYWxsIHdhbGxldCBpbnB1dHMgKEVDRFNBICsgTXVTaWcyKSAtIG11Y2ggZmFzdGVyIHRoYW4gcGVyLWlucHV0IHNpZ25pbmdcbiAgdHJ5IHtcbiAgICB0eC5zaWduKHdhc21TaWduZXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEJ1bGtTaWduaW5nRXJyb3IoZSk7XG4gIH1cblxuICAvLyBWZXJpZnkgc2lnbmF0dXJlcyBmb3IgYWxsIHNpZ25lZCBpbnB1dHMgKHN0aWxsIHBlci1pbnB1dCBmb3IgZ3JhbnVsYXIgZXJyb3IgcmVwb3J0aW5nKVxuICBjb25zdCBwYXJzZWQgPSB0eC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMocm9vdFdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbiB9KTtcbiAgY29uc3QgdmVyaWZ5RXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+W10gPSBbXTtcblxuICBwYXJzZWQuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIC8vIFNraXAgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzIC0gdGhleSBhcmUgcGxhdGZvcm0gc2lnbmVkIG9ubHlcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRJZCA9IGAke2lucHV0LnByZXZpb3VzT3V0cHV0LnR4aWR9OiR7aW5wdXQucHJldmlvdXNPdXRwdXQudm91dH1gO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXR4LnZlcmlmeVNpZ25hdHVyZShpbnB1dEluZGV4LCB3YXNtU2lnbmVyKSkge1xuICAgICAgICB2ZXJpZnlFcnJvcnMucHVzaChcbiAgICAgICAgICBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgaW5wdXQuc2NyaXB0VHlwZSwgeyBpZDogb3V0cHV0SWQgfSwgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25hdHVyZScpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZlcmlmeUVycm9ycy5wdXNoKG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIGlucHV0LnNjcmlwdFR5cGUsIHsgaWQ6IG91dHB1dElkIH0sIGUpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh2ZXJpZnlFcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yKFtdLCB2ZXJpZnlFcnJvcnMpO1xuICB9XG5cbiAgcmV0dXJuIHR4O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRXYXNtKFxuICBjb2luOiBNdXNpZzJQYXJ0aWNpcGFudDxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+LFxuICB0eDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICBzaWduZXJLZXljaGFpbjogYmlwMzIuQklQMzJJbnRlcmZhY2UgfCB1bmRlZmluZWQsXG4gIHJvb3RXYWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgcGFyYW1zOiB7XG4gICAgcmVwbGF5UHJvdGVjdGlvbjogUmVwbGF5UHJvdGVjdGlvbktleXM7XG4gICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScgfCAnY29zaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJyB8IHVuZGVmaW5lZDtcbiAgICB3YWxsZXRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB9XG4pOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4ge1xuICBjb25zdCB3YXNtU2lnbmVyID0gc2lnbmVyS2V5Y2hhaW4gPyB0b1dhc21CSVAzMihzaWduZXJLZXljaGFpbikgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0tleVBhdGhTcGVuZElucHV0KHR4LCByb290V2FsbGV0S2V5cywgcGFyYW1zLnJlcGxheVByb3RlY3Rpb24pKSB7XG4gICAgc3dpdGNoIChwYXJhbXMuc2lnbmluZ1N0ZXApIHtcbiAgICAgIGNhc2UgJ3NpZ25lck5vbmNlJzpcbiAgICAgICAgYXNzZXJ0KHdhc21TaWduZXIpO1xuICAgICAgICB0eC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh3YXNtU2lnbmVyKTtcbiAgICAgICAgUFNCVF9DQUNIRV9XQVNNLnNldCh0eC51bnNpZ25lZFR4SWQoKSwgdHgpO1xuICAgICAgICByZXR1cm4gdHg7XG4gICAgICBjYXNlICdjb3NpZ25lck5vbmNlJzpcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy53YWxsZXRJZCwgJ3dhbGxldElkIGlzIHJlcXVpcmVkIGZvciBNdVNpZzIgYml0Z28gbm9uY2UnKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNvaW4uZ2V0TXVzaWcyTm9uY2VzKHR4LCBwYXJhbXMud2FsbGV0SWQpO1xuICAgICAgY2FzZSAnc2lnbmVyU2lnbmF0dXJlJzoge1xuICAgICAgICBjb25zdCB0eElkID0gdHgudW5zaWduZWRUeElkKCk7XG4gICAgICAgIGNvbnN0IGNhY2hlZFBzYnQgPSBQU0JUX0NBQ0hFX1dBU00uZ2V0KHR4SWQpO1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgY2FjaGVkUHNidCxcbiAgICAgICAgICBgUHNidCBpcyBtaXNzaW5nIGZyb20gdHhDYWNoZSAoY2FjaGUgc2l6ZSAke1BTQlRfQ0FDSEVfV0FTTS5zaXplfSkuXG4gICAgICAgICAgICBUaGlzIG1heSBiZSBkdWUgdG8gdGhlIHJlcXVlc3QgYmVpbmcgcm91dGVkIHRvIGEgZGlmZmVyZW50IEJpdEdvLUV4cHJlc3MgaW5zdGFuY2UgdGhhdCBmb3Igc2lnbmluZyBzdGVwICdzaWduZXJOb25jZScuYFxuICAgICAgICApO1xuICAgICAgICBQU0JUX0NBQ0hFX1dBU00uZGVsZXRlKHR4SWQpO1xuICAgICAgICBjYWNoZWRQc2J0LmNvbWJpbmVNdXNpZzJOb25jZXModHgpO1xuICAgICAgICB0eCA9IGNhY2hlZFBzYnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gdGhpcyBpbnN0YW5jZSBpcyBub3QgYW4gZXh0ZXJuYWwgc2lnbmVyXG4gICAgICAgIGFzc2VydChwYXJhbXMud2FsbGV0SWQsICd3YWxsZXRJZCBpcyByZXF1aXJlZCBmb3IgTXVTaWcyIGJpdGdvIG5vbmNlJyk7XG4gICAgICAgIGFzc2VydCh3YXNtU2lnbmVyKTtcbiAgICAgICAgdHguZ2VuZXJhdGVNdXNpZzJOb25jZXMod2FzbVNpZ25lcik7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29pbi5nZXRNdXNpZzJOb25jZXModHgsIHBhcmFtcy53YWxsZXRJZCk7XG4gICAgICAgIHR4LmNvbWJpbmVNdXNpZzJOb25jZXMocmVzcG9uc2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChwYXJhbXMuc2lnbmluZ1N0ZXApIHtcbiAgICAgIGNhc2UgJ3NpZ25lck5vbmNlJzpcbiAgICAgIGNhc2UgJ2Nvc2lnbmVyTm9uY2UnOlxuICAgICAgICAvKipcbiAgICAgICAgICogSW4gY2VydGFpbiBjYXNlcywgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgbm90IGtub3cgd2hldGhlciB0aGUgdHhIZXggY29udGFpbnMgYSBwc2J0IHdpdGggdGFwcm9vdCBrZXkgcGF0aCBzcGVuZCBpbnB1dChzKS5cbiAgICAgICAgICogSW5zdGVhZCBvZiB0aHJvd2luZyBlcnJvciwgbm8tb3AgYW5kIHJldHVybiB0aGUgdHhIZXguIFNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGUgc2FtZSBzZXF1ZW5jZS5cbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiB0eDtcbiAgICB9XG4gIH1cblxuICBhc3NlcnQoc2lnbmVyS2V5Y2hhaW4pO1xuICByZXR1cm4gc2lnbkFuZFZlcmlmeVBzYnRXYXNtKHR4LCBzaWduZXJLZXljaGFpbiwgcm9vdFdhbGxldEtleXMsIHBhcmFtcy5yZXBsYXlQcm90ZWN0aW9uKTtcbn1cbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnRXYXNtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25Qc2J0V2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQW1DQSxzREFzREM7QUFFRCw4RUE4REM7QUF6SkQsb0RBQTRCO0FBRTVCLGdEQUErRjtBQUUvRiw2Q0FBNkM7QUFFN0MsaURBQThGO0FBTzlGOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7QUFFdkUsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsY0FBZ0QsRUFDaEQsZ0JBQXNDO0lBRXRDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdkYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLEVBQStCLEVBQy9CLGNBQTRDLEVBQzVDLGNBQWdELEVBQ2hELGdCQUFzQyxFQUN0QyxFQUFFLGVBQWUsR0FBRyxLQUFLLEtBQW9DLEVBQUU7SUFFL0QsTUFBTSxVQUFVLEdBQUcsSUFBQSxzQkFBVyxFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRS9DLG9GQUFvRjtJQUNwRixJQUFJLENBQUM7UUFDSCxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLCtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx5RkFBeUY7SUFDekYsTUFBTSxNQUFNLEdBQUcsRUFB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QyxFQUFFLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7UUFDeEYsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IEJJUDMyLCBiaXAzMiwgRUNQYWlyLCBmaXhlZFNjcmlwdFdhbGxldCwgZ2V0V2FzbVV0eG9WZXJzaW9uIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IHRvV2FzbUJJUDMyIH0gZnJvbSAnLi4vLi4vd2FzbVV0aWwnO1xuXG5pbXBvcnQgeyBCdWxrU2lnbmluZ0Vycm9yLCBJbnB1dFNpZ25pbmdFcnJvciwgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3IgfSBmcm9tICcuL1NpZ25pbmdFcnJvcic7XG5pbXBvcnQgeyBNdXNpZzJQYXJ0aWNpcGFudCB9IGZyb20gJy4vbXVzaWcyJztcblxuZXhwb3J0IHR5cGUgUmVwbGF5UHJvdGVjdGlvbktleXMgPSB7XG4gIHB1YmxpY0tleXM6IChVaW50OEFycmF5IHwgRUNQYWlyKVtdO1xufTtcblxuLyoqXG4gKiBLZXkgVmFsdWU6IFVuc2lnbmVkIHR4IGlkID0+IFBTQlRcbiAqIEl0IGlzIHVzZWQgdG8gY2FjaGUgUFNCVHMgd2l0aCB0YXByb290IGtleSBwYXRoIChNdVNpZzIpIGlucHV0cyBkdXJpbmcgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgaXMgYWN0aXZhdGVkLlxuICogUmVhc29uOiBNdVNpZzIgc2lnbmVyIHNlY3VyZSBub25jZSBpcyBjYWNoZWQgaW4gdGhlIEJpdEdvUHNidCBvYmplY3QuIEl0IHdpbGwgYmUgcmVxdWlyZWQgZHVyaW5nIHRoZSBzaWduaW5nIHN0ZXAuXG4gKiBGb3IgbW9yZSBpbmZvLCBjaGVjayBTaWduVHJhbnNhY3Rpb25PcHRpb25zLnNpZ25pbmdTdGVwXG4gKi9cbmNvbnN0IFBTQlRfQ0FDSEVfV0FTTSA9IG5ldyBNYXA8c3RyaW5nLCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+KCk7XG5cbmZ1bmN0aW9uIGhhc0tleVBhdGhTcGVuZElucHV0KFxuICB0eDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICByb290V2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMsXG4gIHJlcGxheVByb3RlY3Rpb246IFJlcGxheVByb3RlY3Rpb25LZXlzXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VkID0gdHgucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHJvb3RXYWxsZXRLZXlzLCB7IHJlcGxheVByb3RlY3Rpb24gfSk7XG4gIHJldHVybiBwYXJzZWQuaW5wdXRzLnNvbWUoKGlucHV0KSA9PiBpbnB1dC5zY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMktleVBhdGgnKTtcbn1cblxuLyoqXG4gKiBTaWduIGFsbCBpbnB1dHMgb2YgYSBQU0JUIGFuZCB2ZXJpZnkgc2lnbmF0dXJlcyBhZnRlciBzaWduaW5nLlxuICogVXNlcyBidWxrIHNpZ25pbmcgZm9yIHBlcmZvcm1hbmNlIChzaWducyBhbGwgbWF0Y2hpbmcgaW5wdXRzIGluIG9uZSBwYXNzKS5cbiAqIENvbGxlY3RzIGFuZCBsb2dzIHNpZ25pbmcgZXJyb3JzIGFuZCB2ZXJpZmljYXRpb24gZXJyb3JzLCB0aHJvd3MgZXJyb3IgaW4gdGhlIGVuZCBpZiBhbnkgb2YgdGhlbSBmYWlsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQW5kVmVyaWZ5UHNidFdhc20oXG4gIHR4OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHNpZ25lcktleWNoYWluOiBiaXAzMi5CSVAzMkludGVyZmFjZSB8IEJJUDMyLFxuICByb290V2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMsXG4gIHJlcGxheVByb3RlY3Rpb246IFJlcGxheVByb3RlY3Rpb25LZXlzLFxuICB7IHdyaXRlU2lnbmVkV2l0aCA9IGZhbHNlIH06IHsgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbiB9ID0ge31cbik6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGNvbnN0IHdhc21TaWduZXIgPSB0b1dhc21CSVAzMihzaWduZXJLZXljaGFpbik7XG5cbiAgLy8gQnVsayBzaWduIGFsbCB3YWxsZXQgaW5wdXRzIChFQ0RTQSArIE11U2lnMikgLSBtdWNoIGZhc3RlciB0aGFuIHBlci1pbnB1dCBzaWduaW5nXG4gIHRyeSB7XG4gICAgdHguc2lnbih3YXNtU2lnbmVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBCdWxrU2lnbmluZ0Vycm9yKGUpO1xuICB9XG5cbiAgLy8gVmVyaWZ5IHNpZ25hdHVyZXMgZm9yIGFsbCBzaWduZWQgaW5wdXRzIChzdGlsbCBwZXItaW5wdXQgZm9yIGdyYW51bGFyIGVycm9yIHJlcG9ydGluZylcbiAgY29uc3QgcGFyc2VkID0gdHgucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHJvb3RXYWxsZXRLZXlzLCB7IHJlcGxheVByb3RlY3Rpb24gfSk7XG4gIGNvbnN0IHZlcmlmeUVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PltdID0gW107XG5cbiAgcGFyc2VkLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgIGlmIChpbnB1dC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAvLyBTa2lwIHJlcGxheSBwcm90ZWN0aW9uIGlucHV0cyAtIHRoZXkgYXJlIHBsYXRmb3JtIHNpZ25lZCBvbmx5XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0SWQgPSBgJHtpbnB1dC5wcmV2aW91c091dHB1dC50eGlkfToke2lucHV0LnByZXZpb3VzT3V0cHV0LnZvdXR9YDtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0eC52ZXJpZnlTaWduYXR1cmUoaW5wdXRJbmRleCwgd2FzbVNpZ25lcikpIHtcbiAgICAgICAgdmVyaWZ5RXJyb3JzLnB1c2goXG4gICAgICAgICAgbmV3IElucHV0U2lnbmluZ0Vycm9yKGlucHV0SW5kZXgsIGlucHV0LnNjcmlwdFR5cGUsIHsgaWQ6IG91dHB1dElkIH0sIG5ldyBFcnJvcignaW52YWxpZCBzaWduYXR1cmUnKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB2ZXJpZnlFcnJvcnMucHVzaChuZXcgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PihpbnB1dEluZGV4LCBpbnB1dC5zY3JpcHRUeXBlLCB7IGlkOiBvdXRwdXRJZCB9LCBlKSk7XG4gICAgfVxuICB9KTtcblxuICBpZiAodmVyaWZ5RXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUcmFuc2FjdGlvblNpZ25pbmdFcnJvcihbXSwgdmVyaWZ5RXJyb3JzKTtcbiAgfVxuXG4gIGlmICh3cml0ZVNpZ25lZFdpdGgpIHtcbiAgICBjb25zdCB2ZXJzaW9uSW5mbyA9IGdldFdhc21VdHhvVmVyc2lvbigpO1xuICAgIGNvbnN0IHZlcnNpb25QYXlsb2FkID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBnaXRIYXNoOiB2ZXJzaW9uSW5mby5naXRIYXNoLFxuICAgICAgfSlcbiAgICApO1xuICAgIHR4LnNldEtWKHsgdHlwZTogJ2JpdGdvJywgc3VidHlwZTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29LZXlTdWJ0eXBlLldhc21VdHhvU2lnbmVkV2l0aCB9LCB2ZXJzaW9uUGF5bG9hZCk7XG4gIH1cblxuICByZXR1cm4gdHg7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFdhc20oXG4gIGNvaW46IE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4sXG4gIHR4OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHNpZ25lcktleWNoYWluOiBiaXAzMi5CSVAzMkludGVyZmFjZSB8IHVuZGVmaW5lZCxcbiAgcm9vdFdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICBwYXJhbXM6IHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiBSZXBsYXlQcm90ZWN0aW9uS2V5cztcbiAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyB8ICdjb3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgdW5kZWZpbmVkO1xuICAgIHdhbGxldElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbiAgfVxuKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+IHtcbiAgY29uc3Qgd2FzbVNpZ25lciA9IHNpZ25lcktleWNoYWluID8gdG9XYXNtQklQMzIoc2lnbmVyS2V5Y2hhaW4pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNLZXlQYXRoU3BlbmRJbnB1dCh0eCwgcm9vdFdhbGxldEtleXMsIHBhcmFtcy5yZXBsYXlQcm90ZWN0aW9uKSkge1xuICAgIHN3aXRjaCAocGFyYW1zLnNpZ25pbmdTdGVwKSB7XG4gICAgICBjYXNlICdzaWduZXJOb25jZSc6XG4gICAgICAgIGFzc2VydCh3YXNtU2lnbmVyKTtcbiAgICAgICAgdHguZ2VuZXJhdGVNdXNpZzJOb25jZXMod2FzbVNpZ25lcik7XG4gICAgICAgIFBTQlRfQ0FDSEVfV0FTTS5zZXQodHgudW5zaWduZWRUeElkKCksIHR4KTtcbiAgICAgICAgcmV0dXJuIHR4O1xuICAgICAgY2FzZSAnY29zaWduZXJOb25jZSc6XG4gICAgICAgIGFzc2VydChwYXJhbXMud2FsbGV0SWQsICd3YWxsZXRJZCBpcyByZXF1aXJlZCBmb3IgTXVTaWcyIGJpdGdvIG5vbmNlJyk7XG4gICAgICAgIHJldHVybiBhd2FpdCBjb2luLmdldE11c2lnMk5vbmNlcyh0eCwgcGFyYW1zLndhbGxldElkKTtcbiAgICAgIGNhc2UgJ3NpZ25lclNpZ25hdHVyZSc6IHtcbiAgICAgICAgY29uc3QgdHhJZCA9IHR4LnVuc2lnbmVkVHhJZCgpO1xuICAgICAgICBjb25zdCBjYWNoZWRQc2J0ID0gUFNCVF9DQUNIRV9XQVNNLmdldCh0eElkKTtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGNhY2hlZFBzYnQsXG4gICAgICAgICAgYFBzYnQgaXMgbWlzc2luZyBmcm9tIHR4Q2FjaGUgKGNhY2hlIHNpemUgJHtQU0JUX0NBQ0hFX1dBU00uc2l6ZX0pLlxuICAgICAgICAgICAgVGhpcyBtYXkgYmUgZHVlIHRvIHRoZSByZXF1ZXN0IGJlaW5nIHJvdXRlZCB0byBhIGRpZmZlcmVudCBCaXRHby1FeHByZXNzIGluc3RhbmNlIHRoYXQgZm9yIHNpZ25pbmcgc3RlcCAnc2lnbmVyTm9uY2UnLmBcbiAgICAgICAgKTtcbiAgICAgICAgUFNCVF9DQUNIRV9XQVNNLmRlbGV0ZSh0eElkKTtcbiAgICAgICAgY2FjaGVkUHNidC5jb21iaW5lTXVzaWcyTm9uY2VzKHR4KTtcbiAgICAgICAgdHggPSBjYWNoZWRQc2J0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHRoaXMgaW5zdGFuY2UgaXMgbm90IGFuIGV4dGVybmFsIHNpZ25lclxuICAgICAgICBhc3NlcnQocGFyYW1zLndhbGxldElkLCAnd2FsbGV0SWQgaXMgcmVxdWlyZWQgZm9yIE11U2lnMiBiaXRnbyBub25jZScpO1xuICAgICAgICBhc3NlcnQod2FzbVNpZ25lcik7XG4gICAgICAgIHR4LmdlbmVyYXRlTXVzaWcyTm9uY2VzKHdhc21TaWduZXIpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvaW4uZ2V0TXVzaWcyTm9uY2VzKHR4LCBwYXJhbXMud2FsbGV0SWQpO1xuICAgICAgICB0eC5jb21iaW5lTXVzaWcyTm9uY2VzKHJlc3BvbnNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAocGFyYW1zLnNpZ25pbmdTdGVwKSB7XG4gICAgICBjYXNlICdzaWduZXJOb25jZSc6XG4gICAgICBjYXNlICdjb3NpZ25lck5vbmNlJzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluIGNlcnRhaW4gY2FzZXMsIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IG5vdCBrbm93IHdoZXRoZXIgdGhlIHR4SGV4IGNvbnRhaW5zIGEgcHNidCB3aXRoIHRhcHJvb3Qga2V5IHBhdGggc3BlbmQgaW5wdXQocykuXG4gICAgICAgICAqIEluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3IsIG5vLW9wIGFuZCByZXR1cm4gdGhlIHR4SGV4LiBTbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIHNhbWUgc2VxdWVuY2UuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gdHg7XG4gICAgfVxuICB9XG5cbiAgYXNzZXJ0KHNpZ25lcktleWNoYWluKTtcbiAgcmV0dXJuIHNpZ25BbmRWZXJpZnlQc2J0V2FzbSh0eCwgc2lnbmVyS2V5Y2hhaW4sIHJvb3RXYWxsZXRLZXlzLCBwYXJhbXMucmVwbGF5UHJvdGVjdGlvbiwge1xuICAgIHdyaXRlU2lnbmVkV2l0aDogcGFyYW1zLndyaXRlU2lnbmVkV2l0aCxcbiAgfSk7XG59XG4iXX0=