@bitgo-beta/abstract-utxo 1.1.1-beta.2004 → 1.1.1-beta.2006
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +7 -2
- package/dist/cjs/src/transaction/decode.d.ts +13 -1
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
- package/dist/cjs/src/transaction/decode.js +19 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +3 -9
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +3 -4
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +12 -10
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/signTransaction.js +8 -11
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.js +100 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.js +84 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +8 -3
- package/dist/esm/transaction/decode.d.ts +13 -1
- package/dist/esm/transaction/decode.d.ts.map +1 -1
- package/dist/esm/transaction/decode.js +19 -2
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +3 -9
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +3 -4
- package/dist/esm/transaction/explainTransaction.d.ts +2 -2
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +13 -11
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/signTransaction.js +10 -13
- package/package.json +8 -8
|
@@ -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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"}
|
|
@@ -547,7 +547,12 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
|
|
|
547
547
|
params.pubs = (0, keychains_1.toBip32Triple)(keychains).map((k) => k.neutered().toBase58());
|
|
548
548
|
}
|
|
549
549
|
}
|
|
550
|
-
|
|
550
|
+
if (wallet && (0, descriptor_1.isDescriptorWallet)(wallet)) {
|
|
551
|
+
// Descriptor wallets decode prebuild bytes straight into the wasm-utxo
|
|
552
|
+
// descriptor Psbt, skipping the fixedScriptWallet.BitGoPsbt intermediate.
|
|
553
|
+
return (0, transaction_1.explainTx)((0, decode_1.decodeDescriptorPsbt)(params), { ...params, wallet }, this.name);
|
|
554
|
+
}
|
|
555
|
+
return (0, transaction_1.explainTx)(this.decodeTransactionFromPrebuild(params), { ...params, wallet }, this.name);
|
|
551
556
|
}
|
|
552
557
|
/**
|
|
553
558
|
* @deprecated - use {@see backupKeyRecovery}
|
|
@@ -710,4 +715,4 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
|
|
|
710
715
|
}
|
|
711
716
|
}
|
|
712
717
|
exports.AbstractUtxoCoin = AbstractUtxoCoin;
|
|
713
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLDhEQUFnRDtBQUNoRCxnREFBNEQ7QUFDNUQsbURBQXlEO0FBQ3pELG1EQXFDOEI7QUFFOUIseUNBWW9CO0FBQ3BCLGlGQUFtSDtBQUNuSCxxQ0FBeUQ7QUFDekQsK0NBUXVCO0FBR3ZCLGtGQUlvRDtBQUNwRCw2Q0FBNkc7QUFDN0csbUNBT2lCO0FBQ2pCLHVEQUF1RTtBQUN2RSwrQ0FBa0Y7QUFDbEYsaURBQW1HO0FBQ25HLDJDQUEwRTtBQUMxRSwyQ0FBc0U7QUFDdEUsZ0VBQThEO0FBQzlELG1FQUFnRTtBQUNoRSxxQ0FBd0Q7QUFDeEQsb0VBQXVFO0FBa0J2RSxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsNEJBQTRCLFFBQVEsOERBQThELENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUFKRCwwREFJQztBQTJCRCxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFFakU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsSUFBMEIsRUFDMUIsUUFBc0I7SUFFdEIsSUFBSSxFQUFFLFlBQVksZ0JBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGdCQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksRUFBRSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLElBQUks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Q0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdHZCRCw0Q0FzdkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGJpdGdvLCBnZXRNYWlubmV0IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHtcbiAgQWRkcmVzc0NvaW5TcGVjaWZpYyxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgQ3JlYXRlQWRkcmVzc0Zvcm1hdCxcbiAgRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMsXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIElCYXNlQ29pbixcbiAgaXNCb2x0MTFJbnZvaWNlLFxuICBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJUmVxdWVzdFRyYWNlcixcbiAgaXNUcmlwbGUsXG4gIElXYWxsZXQsXG4gIEtleWNoYWluc1RyaXBsZXQsXG4gIEtleUluZGljZXMsXG4gIE1pc21hdGNoZWRSZWNpcGllbnQsXG4gIE11bHRpc2lnVHlwZSxcbiAgbXVsdGlzaWdUeXBlcyxcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQcmVjcmVhdGVCaXRHb09wdGlvbnMsXG4gIFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUeEludGVudE1pc21hdGNoRXJyb3IsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uUGFyYW1zIGFzIEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCBhcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgVHJpcGxlLFxuICBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IsXG4gIFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFdhbGxldCxcbiAgaXNWYWxpZFBydixcbiAgaXNWYWxpZFhwcnYsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHtcbiAgYmFja3VwS2V5UmVjb3ZlcnksXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZCxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQsXG4gIGZvckNvaW4sXG4gIHJlY292ZXJDcm9zc0NoYWluLFxuICBSZWNvdmVyUGFyYW1zLFxuICBSZWNvdmVyeVByb3ZpZGVyLFxuICB2MUJhY2t1cEtleVJlY292ZXJ5LFxuICBWMVJlY292ZXJQYXJhbXMsXG4gIHYxU3dlZXAsXG4gIFYxU3dlZXBQYXJhbXMsXG59IGZyb20gJy4vcmVjb3ZlcnknO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMsIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBEZWNvZGVkVHJhbnNhY3Rpb24sXG4gIGV4cGxhaW5UeCxcbiAgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdCxcbiAgaXNTY3JpcHRSZWNpcGllbnQsXG4gIHBhcnNlVHJhbnNhY3Rpb24sXG4gIHZlcmlmeVRyYW5zYWN0aW9uLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9tdXNpZzInO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yLFxuICBFcnJvck1pc3NpbmdPdXRwdXRzLFxuICBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvdmVyaWZ5VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MsIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0LCBpc0Rlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHtcbiAgZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUsXG4gIGdldE1haW5uZXRDb2luTmFtZSxcbiAgZ2V0TmV0d29ya0Zyb21Db2luTmFtZSxcbiAgaXNNYWlubmV0Q29pbixcbiAgVXR4b0NvaW5OYW1lLFxuICBVdHhvQ29pbk5hbWVNYWlubmV0LFxufSBmcm9tICcuL25hbWVzJztcbmltcG9ydCB7IGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcy9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBpc1Nka0JhY2tlbmQsIFBhcnNlZFRyYW5zYWN0aW9uLCBTZGtCYWNrZW5kIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGVQc2J0V2l0aCwgZW5jb2RlVHJhbnNhY3Rpb24sIHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlLCBVdHhvS2V5Y2hhaW4gfSBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgeyB2ZXJpZnlLZXlTaWduYXR1cmUsIHZlcmlmeVVzZXJQdWJsaWNLZXkgfSBmcm9tICcuL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNVdHhvV2FsbGV0RGF0YSwgVXR4b1dhbGxldCB9IGZyb20gJy4vd2FsbGV0JztcbmltcG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldERhdGEgfSBmcm9tICcuL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuL3Vuc3BlbnQnO1xuXG5pbXBvcnQgU2NyaXB0VHlwZTJPZjMgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjM7XG5cbmV4cG9ydCB0eXBlIFR4Rm9ybWF0ID1cbiAgLy8gVGhpcyBpcyBhIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgYXJvdW5kIHRoZSBiaXRjb2luanMtbGliIHNlcmlhbGl6YXRpb24gb2YgdW5zaWduZWQgdHJhbnNhY3Rpb25zXG4gIC8vIGRvZXMgbm90IGluY2x1ZGUgcHJldk91dCBkYXRhIGFuZCBpcyBhIGJpdCBwYWluZnVsIHRvIHdvcmsgd2l0aFxuICAvLyBnb2luZyB0byBiZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBzYnRcbiAgLy8gQGRlcHJlY2F0ZWRcbiAgfCAnbGVnYWN5J1xuICAvLyBUaGlzIGlzIHRoZSBzdGFuZGFyZCBwc2J0IGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBmdWxsIHByZXZUeCBkYXRhIGZvciBsZWdhY3kgdHJhbnNhY3Rpb25zLlxuICAvLyBUaGlzIHdpbGwgcmVtYWluIHN1cHBvcnRlZCBidXQgaXMgbm90IHRoZSBkZWZhdWx0LCBzaW5jZSB0aGUgZGF0YSBzaXplcyBjYW4gYmVjb21lIHByb2hpYml0aXZlbHkgbGFyZ2UuXG4gIHwgJ3BzYnQnXG4gIC8vIFRoaXMgaXMgYSBub25zdGFuZGFyZCBwc2J0IHZlcnNpb24gd2hlcmUgbGVnYWN5IGlucHV0cyBhcmUgc2VyaWFsaXplZCBhcyBpZiB0aGV5IHdlcmUgc2Vnd2l0IGlucHV0cy5cbiAgLy8gV2hpbGUgdGhpcyBwcmV2ZW50cyB1cyB0byBmdWxseSB2ZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGZlZSwgd2UgaGF2ZSBvdGhlciBjaGVja3MgaW4gcGxhY2UgdG8gZW5zdXJlIHRoZSBmZWUgaXMgd2l0aGluIGJvdW5kcy5cbiAgfCAncHNidC1saXRlJztcblxuZXhwb3J0IGNsYXNzIEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eEZvcm1hdDogVHhGb3JtYXQpIHtcbiAgICBzdXBlcihgU0RLIHN1cHBvcnQgZm9yIHR4Rm9ybWF0PSR7dHhGb3JtYXR9IGlzIGRlcHJlY2F0ZWQgb24gdGhpcyBlbnZpcm9ubWVudC4gUGxlYXNlIHVzZSBwc2J0IGluc3RlYWQuYCk7XG4gIH1cbn1cblxudHlwZSBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0ge1xuICAocGFyYW1zOiB7XG4gICAgY29pbjogSUJhc2VDb2luO1xuICAgIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIHNpZ25pbmdTdGVwIGZsYWcgYmVjb21lcyBhcHBsaWNhYmxlIHdoZW4gYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgICAgKiAxKSBXaGVuIHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBpcyBhY3RpdmF0ZWRcbiAgICAgKiAyKSBXaGVuIHRoZSBQU0JUIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0LlxuICAgICAqXG4gICAgICogVGhlIHNpZ25pbmcgcHJvY2VzcyBvZiBhIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQgaXMgYSA0LXN0ZXAgc2VxdWVuY2U6XG4gICAgICogaSkgdXNlciBub25jZSBnZW5lcmF0aW9uIC0gc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpKSBiaXRnbyBub25jZSBnZW5lcmF0aW9uIC0gY29zaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gbG9jYWwgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWlpKSB1c2VyIHNpZ25hdHVyZSAtIHNpZ25lclNpZ25hdHVyZSAtIHRoaXMgaXMgdGhlIHNlY29uZCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGl2KSBiaXRnbyBzaWduYXR1cmUgLSBub3QgaW4gc2lnblRyYW5zYWN0aW9uIG1ldGhvZOKAmXMgc2NvcGVcbiAgICAgKlxuICAgICAqIEluIHRoZSBhYnNlbmNlIG9mIHRoaXMgZmxhZywgdGhlIGFmb3JlbWVudGlvbmVkIGZpcnN0IHRocmVlIHNlcXVlbmNlIGlzIGV4ZWN1dGVkIGluIGEgc2luZ2xlIHNpZ25UcmFuc2FjdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogTk9URTogV2UgbWFrZSBhIHN0cm9uZyBhc3N1bXB0aW9uIHRoYXQgdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGFuZCBpdHMgY2FsbGVyIHVzZXMgc3RpY2t5IHNlc3Npb25zLFxuICAgICAqIHNpbmNlIFBTQlRzIGFyZSBjYWNoZWQgaW4gc3RlcCAxIHRvIGJlIHVzZWQgaW4gc3RlcCAzIGZvciBNdVNpZzIgdXNlciBzZWN1cmUgbm9uY2UgYWNjZXNzLlxuICAgICAqL1xuICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgJ2Nvc2lnbmVyTm9uY2UnO1xuICB9KTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj47XG59O1xuXG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4sIG91dHB1dFNjcmlwdHMgfSA9IGJpdGdvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgZGVjb2RlZCB0cmFuc2FjdGlvbiBoYXMgYXQgbGVhc3Qgb25lIHRhcHJvb3Qga2V5IHBhdGggc3BlbmQgKE11U2lnMikgaW5wdXQuXG4gKiBXb3JrcyBmb3IgYm90aCB1dHhvbGliIFV0eG9Qc2J0IGFuZCB3YXNtLXV0eG8gQml0R29Qc2J0LlxuICovXG5mdW5jdGlvbiBoYXNLZXlQYXRoU3BlbmRJbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcHViczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IGJvb2xlYW4ge1xuICBpZiAodHggaW5zdGFuY2VvZiBiaXRnby5VdHhvUHNidCkge1xuICAgIHJldHVybiBiaXRnby5pc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZElucHV0KHR4KTtcbiAgfVxuICBpZiAodHggaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICBhc3NlcnQocHVicyAmJiBpc1RyaXBsZShwdWJzKSwgJ3B1YiB0cmlwbGUgaXMgcmVxdWlyZWQgdG8gY2hlY2sgZm9yIGtleSBwYXRoIHNwZW5kIGlucHV0cyBpbiB3YXNtLXV0eG8gUFNCVCcpO1xuICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbVhwdWJzKHB1YnMpO1xuICAgIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IHR4LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uIH0pO1xuICAgIHJldHVybiBwYXJzZWQuaW5wdXRzLnNvbWUoKGlucHV0KSA9PiBpbnB1dC5zY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMktleVBhdGgnKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydCBWYWxpZGF0aW9uRXJyb3IgdG8gVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHdpdGggc3RydWN0dXJlZCBkYXRhXG4gKlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgVmFsaWRhdGlvbkVycm9yXG4gKiBieSBleHRyYWN0aW5nIHRoZSBtaXNtYXRjaGVkIG91dHB1dHMgYW5kIGNvbnZlcnRpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdC5cbiAqIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBwcmVzZXJ2ZWQgYXMgdGhlIGBjYXVzZWAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgZXJyb3I6IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgcmVxSWQ6IHN0cmluZyB8IElSZXF1ZXN0VHJhY2VyIHwgdW5kZWZpbmVkLFxuICB0eFBhcmFtczogQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICB0eEhleDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0eEV4cGxhbmF0aW9uPzogdW5rbm93blxuKTogVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHtcbiAgY29uc3QgbWlzbWF0Y2hlZFJlY2lwaWVudHM6IE1pc21hdGNoZWRSZWNpcGllbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXJyIG9mIGVycm9yLmVycm9ycykge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvck1pc3NpbmdPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIubWlzc2luZ091dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5pbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR4SW50ZW50RXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKFxuICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgcmVxSWQsXG4gICAgW3R4UGFyYW1zXSxcbiAgICB0eEhleCxcbiAgICBtaXNtYXRjaGVkUmVjaXBpZW50cyxcbiAgICB0eEV4cGxhbmF0aW9uXG4gICk7XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVkIGVycm9yIGFzIHRoZSBjYXVzZSBmb3IgZGVidWdnaW5nXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgKHR4SW50ZW50RXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogRXJyb3IgfSkuY2F1c2UgPSBlcnJvcjtcbiAgcmV0dXJuIHR4SW50ZW50RXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gYml0Z28uUm9vdFdhbGxldEtleXM7XG5cbmV4cG9ydCB0eXBlIFV0eG9Db2luU3BlY2lmaWMgPSBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnM8VENvaW5TcGVjaWZpYyBleHRlbmRzIFV0eG9Db2luU3BlY2lmaWM+IGV4dGVuZHMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zIHtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW5TcGVjaWZpYz86IFRDb2luU3BlY2lmaWM7XG59XG5cbmV4cG9ydCB0eXBlIEJpcDMyMk1lc3NhZ2UgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkluZm88VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICAvKiogTWFwcyB0eGlkIHRvIHR4aGV4LiBSZXF1aXJlZCBmb3Igb2ZmbGluZSBzaWduaW5nLiAqL1xuICB0eEhleGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2hhbmdlQWRkcmVzc2VzPzogc3RyaW5nW107XG4gIC8qKiBwc2J0IGRvZXMgbm90IHJlcXVpcmUgdW5zcGVudHMuICovXG4gIHVuc3BlbnRzPzogVW5zcGVudDxUTnVtYmVyPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGZlZUluZm8/OiBzdHJpbmc7XG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgY3VzdG9tQ2hhbmdlWHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgdHlwZSBVdHhvTmV0d29yayA9IHV0eG9saWIuTmV0d29yaztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGVXaXRoPzogU2RrQmFja2VuZDtcbiAgLyoqXG4gICAqIFBTQlQtbGl0ZSBoZXggcHJlc2VudCBvbmx5IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MsIHdoZXJlIGFub3RoZXIgdXNlcidzIHNlbmQgZml4ZWQgdGhlIGZvcm1hdC5cbiAgICogTm90IHNldCBpbiByZWd1bGFyIC90eC9idWlsZCByZXNwb25zZXMgKHdoZXJlIHRoZSBjYWxsZXIgY29udHJvbHMgdGhlIGJ1aWxkIHBhcmFtZXRlcnMpLlxuICAgKiBQcmVmZXJyZWQgb3ZlciB0eEhleCB3aGVuIHByZXNlbnQsIGFzIGl0IGNhcnJpZXMgcmljaGVyIGRhdGEgKG5vbldpdG5lc3NVdHhvLCByZWRlZW1TY3JpcHQsIEJJUC0zMiBwYXRocykuXG4gICAqL1xuICB0eEhleFBzYnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJiZlR4SWRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbiAgdmVyaWZpY2F0aW9uPzogVmVyaWZpY2F0aW9uT3B0aW9ucztcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHNlZ3dpdD86IGJvb2xlYW47XG4gIGJlY2gzMj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczoge1xuICAgIHB1Yjogc3RyaW5nO1xuICAgIGFzcEtleUlkPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW46IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG4gIGFkZHJlc3NUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljIGV4dGVuZHMgQWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nO1xufVxuXG50eXBlIFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zICYge1xuICAvKiogVHJhbnNhY3Rpb24gcHJlYnVpbGQgZnJvbSBiaXRnbyBzZXJ2ZXIgKi9cbiAgdHhQcmVidWlsZDoge1xuICAgIC8qKlxuICAgICAqIHdhbGxldElkIGlzIHJlcXVpcmVkIGluIGZvbGxvd2luZyAyIHNjZW5hcmlvcy5cbiAgICAgKiAxLiBFeHRlcm5hbCBzaWduZXIgZXhwcmVzcyBtb2RlIGlzIHVzZWQuXG4gICAgICogMi4gYml0Z28gTXVTaWcyIG5vbmNlIGlzIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHdhbGxldElkPzogc3RyaW5nO1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICAgIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICB9O1xuICAvKiogeHB1YnMgdHJpcGxlIGZvciB3YWxsZXQgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBSZXF1aXJlZCBvbmx5IHdoZW4gdHhQcmVidWlsZC50eEhleCBpcyBub3QgYSBQU0JUICovXG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgLyoqIHhwdWIgZm9yIGNvc2lnbmVyIChkZWZhdWx0cyB0byBiaXRnbykgKi9cbiAgY29zaWduZXJQdWI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGNyZWF0ZXMgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKiBXaGVuIGZhbHNlLCBjcmVhdGVzIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICovXG4gIGlzTGFzdFNpZ25hdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3Mgc2lnbmluZyBhIG5vbi1zZWd3aXQgaW5wdXQgd2l0aCBhIHdpdG5lc3NVdHhvIGluc3RlYWQgcmVxdWlyaW5nIGEgcHJldmlvdXNcbiAgICogdHJhbnNhY3Rpb24gKG5vbldpdG5lc3NVdHhvKVxuICAgKi9cbiAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBQU0JUIHRvIGxlZ2FjeSBmb3JtYXQgYmVmb3JlIHJldHVybmluZy5cbiAgICogU2V0IGF1dG9tYXRpY2FsbHkgYnkgcHJlc2lnblRyYW5zYWN0aW9uKCkgd2hlbiB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHR4Rm9ybWF0OiAnbGVnYWN5Jy5cbiAgICovXG4gIHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW47XG4gIHdhbGxldD86IFV0eG9XYWxsZXQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBleHRyYWN0IGZpbmFsaXplZCBQU0JUIHRvIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQuXG4gICAqIFdoZW4gZmFsc2UsIHJldHVybiBmaW5hbGl6ZWQgUFNCVC4gVXNlZnVsIGZvciB0ZXN0aW5nIHRvIGtlZXAgdHJhbnNhY3Rpb25zIGluIFBTQlQgZm9ybWF0LlxuICAgKi9cbiAgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZW1iZWRzIFdBU00tVVRYTyB2ZXJzaW9uIG1ldGFkYXRhIGludG8gdGhlIHNpZ25lZCBQU0JULiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBydjogc3RyaW5nO1xuICAgICAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJztcbiAgICAgIH1cbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNpZ0FkZHJlc3Mge1xuICBvdXRwdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9ucyB7XG4gIHR4aWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICB4cHJ2Pzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBjb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgcmVjb3ZlcnlDb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgc2lnbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbjogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5U2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW4/OiBVdHhvS2V5Y2hhaW47XG4gIGRpc2FibGVOZXR3b3JraW5nOiBib29sZWFuO1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVxdWVzdCB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlc3BvbnNlIHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVdHhvQ29pblxuICBleHRlbmRzIEJhc2VDb2luXG4gIGltcGxlbWVudHMgTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4sIE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD5cbntcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgc3VwcG9ydGVkVHhGb3JtYXRzOiB7IHBzYnQ6IGJvb2xlYW47IGxlZ2FjeTogYm9vbGVhbiB9ID0ge1xuICAgIHBzYnQ6IHRydWUsXG4gICAgbGVnYWN5OiB0aGlzLmdldENoYWluKCkgPT09ICdidGMnIHx8IHRoaXMuZ2V0Q2hhaW4oKSA9PT0gJ2x0YycsXG4gIH07XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRlZFNka0JhY2tlbmRzOiB7IHV0eG9saWI6IGJvb2xlYW47ICd3YXNtLXV0eG8nOiBib29sZWFuIH0gPSB7XG4gICAgdXR4b2xpYjogdGhpcy5nZXRDaGFpbigpID09PSAnYnRjJyB8fCB0aGlzLmdldENoYWluKCkgPT09ICdsdGMnLFxuICAgICd3YXNtLXV0eG8nOiB0cnVlLFxuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy5hbW91bnRUeXBlID0gYW1vdW50VHlwZTtcbiAgfVxuXG4gIGRlZmF1bHRTZGtCYWNrZW5kOiBTZGtCYWNrZW5kID0gJ3dhc20tdXR4byc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgZHJvcCBzdXBwb3J0IGZvciB1dHhvbGliXG4gICAqIFVzZSBgbmFtZWAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICovXG4gIGdldCBuZXR3b3JrKCk6IHV0eG9saWIuTmV0d29yayB7XG4gICAgcmV0dXJuIGdldE5ldHdvcmtGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IFV0eG9Db2luTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldEZhbWlseSgpOiBVdHhvQ29pbk5hbWVNYWlubmV0IHtcbiAgICByZXR1cm4gZ2V0TWFpbm5ldENvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2luIHN1cHBvcnRzIGEgYmxvY2sgdGFyZ2V0ICovXG4gIHN1cHBvcnRzQmxvY2tUYXJnZXQoKTogYm9vbGVhbiB7XG4gICAgLy8gRklYTUU6IHRoZSBTREsgZG9lcyBub3Qgc2VlbSB0byB1c2UgdGhpcyBhbnl3aGVyZSBzbyBpdCBpcyB1bmNsZWFyIHdoYXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXNcbiAgICBzd2l0Y2ggKGdldE1haW5uZXQodGhpcy5uZXR3b3JrKSkge1xuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW46XG4gICAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuZG9nZWNvaW46XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN3ZWVwV2l0aFNlbmRNYW55KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHN0YXRpYyBnZXQgdmFsaWRBZGRyZXNzVHlwZXMoKTogU2NyaXB0VHlwZTJPZjNbXSB7XG4gICAgcmV0dXJuIFsuLi5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mM107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmFjdG9yIGJldHdlZW4gdGhlIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTg7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyB2YWxpZFxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKiBAcGFyYW0gcGFyYW1cbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBwYXJhbT86IHsgYW55Rm9ybWF0PzogYm9vbGVhbjsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCAvKiBsZWdhY3kgcGFyYW1ldGVyICovIGJvb2xlYW5cbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ2Jvb2xlYW4nICYmIHBhcmFtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd0xpZ2h0bmluZyA9IChwYXJhbSBhcyB7IGFsbG93TGlnaHRuaW5nPzogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKT8uYWxsb3dMaWdodG5pbmcgPz8gZmFsc2U7XG4gICAgaWYgKGFsbG93TGlnaHRuaW5nKSB7XG4gICAgICBpZiAoL14oMDJ8MDMpWzAtOWEtZkEtRl17NjR9JC8udGVzdChhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0JvbHQxMUludm9pY2UoYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgYWxsb3cgYWxsIGFkZHJlc3MgZm9ybWF0cy5cbiAgICAvLyBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgb25seSBhZGRpdGlvbmFsIGFkZHJlc3MgZm9ybWF0IGlzIGJjaCBjYXNoYWRkci5cbiAgICBjb25zdCBhbnlGb3JtYXQgPSAocGFyYW0gYXMgeyBhbnlGb3JtYXQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk/LmFueUZvcm1hdCA/PyB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAvLyBGaW5kIG91dCBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBmb3IgYW55IGZvcm1hdC4gVHJpZXMgYWxsIHN1cHBvcnRlZCBmb3JtYXRzIGJ5IGRlZmF1bHQuXG4gICAgICAvLyBUaHJvd3MgaWYgYWRkcmVzcyBjYW5ub3QgYmUgZGVjb2RlZCB3aXRoIGFueSBmb3JtYXQuXG4gICAgICBjb25zdCBbZm9ybWF0LCBzY3JpcHRdID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0KGFkZHJlc3MsIHRoaXMubmV0d29yayk7XG4gICAgICAvLyB1bmxlc3MgYW55Rm9ybWF0IGlzIHNldCwgb25seSAnZGVmYXVsdCcgaXMgYWxsb3dlZC5cbiAgICAgIGlmICghYW55Rm9ybWF0ICYmIGZvcm1hdCAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFkZHJlc3MgaXMgaW4gbm9ybWFsIHJlcHJlc2VudGF0aW9uIGZvciBnaXZlbiBmb3JtYXQuXG4gICAgICByZXR1cm4gYWRkcmVzcyA9PT0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmZyb21PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KHNjcmlwdCwgZm9ybWF0LCB0aGlzLm5ldHdvcmspO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCSVAzMi5mcm9tQmFzZTU4KHB1YikuaXNOZXV0ZXJlZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNyYWZ0aW5nIHRoZSBIVFRQIHJlcXVlc3QgdG8gdGhlIEJpdEdvIEFQSS5cbiAgICogSXQgY29udmVydHMgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGBzY3JpcHRQdWJLZXk6Li4uYCB0byB7IHNjcmlwdDogc3RyaW5nIH0gfCB7IGFkZHJlc3M6IHN0cmluZyB9LlxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjaXBpZW50OyAvLyBBbHJlYWR5IHsgc2NyaXB0LCBhbW91bnQgfSDigJQgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoYWRkcmVzcykgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IGJsb2NrIGhlaWdodFxuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJsb2NrSGVpZ2h0KHJlcUlkPzogUmVxdWVzdFRyYWNlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgIH1cbiAgICBjb25zdCBjaGFpbmhlYWQgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9ibG9jay9sYXRlc3QnKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIChjaGFpbmhlYWQgYXMgYW55KS5oZWlnaHQ7XG4gIH1cblxuICBjaGVja1JlY2lwaWVudChyZWNpcGllbnQ6IHsgYWRkcmVzcz86IHN0cmluZzsgYW1vdW50OiBudW1iZXIgfCBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQocmVjaXBpZW50KTtcbiAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgJiYgIWlzU2NyaXB0UmVjaXBpZW50KHJlY2lwaWVudC5hZGRyZXNzKSkge1xuICAgICAgc3VwZXIuY2hlY2tSZWNpcGllbnQoeyBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcywgYW1vdW50OiByZWNpcGllbnQuYW1vdW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHR4KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShhZGRyZXNzRGV0YWlscy5jaGFpbikgPyBzY3JpcHRUeXBlRm9yQ2hhaW4oYWRkcmVzc0RldGFpbHMuY2hhaW4pIDogbnVsbDtcbiAgfVxuXG4gIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBoZXg6IHN0cmluZ1xuICApOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXI+KGhleCwgdGhpcy5uZXR3b3JrLCB0aGlzLmFtb3VudFR5cGUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyxcbiAgICBkZWNvZGVXaXRoOiBTZGtCYWNrZW5kID0gdGhpcy5kZWZhdWx0U2RrQmFja2VuZFxuICApOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMoaW5wdXQsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKGJ1ZmZlciwgZGVjb2RlV2l0aCk7XG4gICAgfVxuXG4gICAgaWYgKHV0eG9saWIuYml0Z28uaXNQc2J0KGlucHV0KSkge1xuICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkU2RrQmFja2VuZHNbZGVjb2RlV2l0aF0gIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTREsgc3VwcG9ydCBmb3IgZGVjb2RlV2l0aD0ke2RlY29kZVdpdGh9IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBlbnZpcm9ubWVudC5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZFR4Rm9ybWF0cy5wc2J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCgncHNidCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKGlucHV0LCB0aGlzLm5hbWUsIGRlY29kZVdpdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMZWdhY3kgZm9ybWF0IHRyYW5zYWN0aW9ucyBhcmUgZGVwcmVjYXRlZC4gVGhpcyB3aWxsIGJlIGFuIHVuY29uZGl0aW9uYWwgZXJyb3IgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIGlmICghdGhpcy5zdXBwb3J0ZWRUeEZvcm1hdHMubGVnYWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCgnbGVnYWN5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlV2l0aCAhPT0gJ3V0eG9saWInKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlY2VpdmVkIGRlY29kZVdpdGggaGludCAlcywgaWdub3JpbmcgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbicsIGRlY29kZVdpdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGlucHV0LCB0aGlzLm5ldHdvcmssIHtcbiAgICAgICAgYW1vdW50VHlwZTogdGhpcy5hbW91bnRUeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKGlucHV0KTtcbiAgICBpZiAoZGVjb2RlZCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB8fCBkZWNvZGVkIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgcmV0dXJuIGRlY29kZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcHNidCBidXQgZ290IHRyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihwcmVidWlsZDoge1xuICAgIHR4SGV4Pzogc3RyaW5nO1xuICAgIHR4QmFzZTY0Pzogc3RyaW5nO1xuICAgIC8qKiBTZWUgVHJhbnNhY3Rpb25QcmVidWlsZC50eEhleFBzYnQg4oCUIG9ubHkgcHJlc2VudCBpbiBwZW5kaW5nIGFwcHJvdmFsIGZsb3dzLiAqL1xuICAgIHR4SGV4UHNidD86IHN0cmluZztcbiAgICBkZWNvZGVXaXRoPzogc3RyaW5nO1xuICB9KTogRGVjb2RlZFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICBjb25zdCBzdHJpbmcgPSBwcmVidWlsZC50eEhleFBzYnQgPz8gcHJlYnVpbGQudHhIZXggPz8gcHJlYnVpbGQudHhCYXNlNjQ7XG4gICAgaWYgKCFzdHJpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eEhleCBvciB0eEJhc2U2NCBwcm9wZXJ0eScpO1xuICAgIH1cbiAgICBsZXQgeyBkZWNvZGVXaXRoIH0gPSBwcmVidWlsZDtcbiAgICBpZiAoZGVjb2RlV2l0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGRlY29kZVdpdGggIT09ICdzdHJpbmcnIHx8ICFpc1Nka0JhY2tlbmQoZGVjb2RlV2l0aCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZGVjb2RlV2l0aCAlcyBpcyBub3QgYSB2YWxpZCB2YWx1ZSwgdXNpbmcgZGVmYXVsdCcsIGRlY29kZVdpdGgpO1xuICAgICAgICBkZWNvZGVXaXRoID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihzdHJpbmcsIGRlY29kZVdpdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgYW5kIGZpbGwgdHJhbnNhY3Rpb24gZGV0YWlscyBzdWNoIGFzIGludGVybmFsL2NoYW5nZSBzcGVuZCwgZXh0ZXJuYWwgc3BlbmQgKGV4cGxpY2l0IHZzLiBpbXBsaWNpdCksIGV0Yy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24odGhpcywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlVc2VyUHVibGljS2V5IGluc3RlYWRcbiAgICovXG4gIHByb3RlY3RlZCB2ZXJpZnlVc2VyUHVibGljS2V5KHBhcmFtczogVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5VXNlclB1YmxpY0tleSh0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeUtleVNpZ25hdHVyZSBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtczogVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4UGFyYW1zIHBhcmFtcyBvYmplY3QgcGFzc2VkIHRvIHNlbmRcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBzZXJ2ZXJcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4IHByZWJ1aWx0IHRyYW5zYWN0aW9uJ3MgdHhIZXggZm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCBXYWxsZXQgb2JqZWN0IHRvIG9idGFpbiBrZXlzIHRvIHZlcmlmeSBhZ2FpbnN0XG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uIE9iamVjdCBzcGVjaWZ5aW5nIHNvbWUgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgRGlzYWxsb3cgZmV0Y2hpbmcgYW55IGRhdGEgZnJvbSB0aGUgaW50ZXJuZXQgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5rZXljaGFpbnMgUGFzcyBrZXljaGFpbnMgbWFudWFsbHkgcmF0aGVyIHRoYW4gZmV0Y2hpbmcgdGhlbSBieSBpZFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5hZGRyZXNzZXMgQWRkcmVzcyBkZXRhaWxzIHRvIHBhc3MgaW4gZm9yIG91dC1vZi1iYW5kIHZlcmlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3J9IGlmIHRyYW5zYWN0aW9uIHJlY2lwaWVudHMgZG9uJ3QgbWF0Y2ggdXNlciBpbnRlbnRcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmVyaWZ5VHJhbnNhY3Rpb24odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIGNvbnN0IHR4RXhwbGFuYXRpb24gPSBhd2FpdCBUeEludGVudE1pc21hdGNoRXJyb3IudHJ5R2V0VHhFeHBsYW5hdGlvbihcbiAgICAgICAgICB0aGlzIGFzIHVua25vd24gYXMgSUJhc2VDb2luLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgcGFyYW1zLnJlcUlkLFxuICAgICAgICAgIHBhcmFtcy50eFBhcmFtcyxcbiAgICAgICAgICBwYXJhbXMudHhQcmVidWlsZC50eEhleCxcbiAgICAgICAgICB0eEV4cGxhbmF0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIGFuIGFkZHJlc3MgaXMgdmFsaWQgYW5kIHRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90LlxuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3Mgc3RyaW5nIG9uIHRoZSBuZXR3b3JrXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzc1R5cGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgS2V5Y2hhaW4gb2JqZWN0cyB3aXRoIHhwdWJzXG4gICAqIEBwYXJhbSBwYXJhbXMuY29pblNwZWNpZmljIENvaW4tc3BlY2lmaWMgZGV0YWlscyBmb3IgdGhlIGFkZHJlc3Mgc3VjaCBhcyBhIHdpdG5lc3Mgc2NyaXB0XG4gICAqIEBwYXJhbSBwYXJhbXMuY2hhaW4gRGVyaXZhdGlvbiBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zLmluZGV4IERlcml2YXRpb24gaW5kZXhcbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn1cbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcn1cbiAgICogQHRocm93cyB7VW5leHBlY3RlZEFkZHJlc3NFcnJvcn1cbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zPFV0eG9Db2luU3BlY2lmaWM+LCB3YWxsZXQ/OiBJV2FsbGV0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMsIGNoYWluLCBpbmRleCB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgaWYgKHdhbGxldCAmJiBpc0Rlc2NyaXB0b3JXYWxsZXQod2FsbGV0KSkge1xuICAgICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1RyaXBsZShrZXljaGFpbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW5zIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzKFxuICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQod2FsbGV0LCB0b0JpcDMyVHJpcGxlKGtleWNoYWlucyksIGdldFBvbGljeUZvckVudih0aGlzLmJpdGdvLmVudikpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKChfLmlzVW5kZWZpbmVkKGNoYWluKSAmJiBfLmlzVW5kZWZpbmVkKGluZGV4KSkgfHwgIShfLmlzRmluaXRlKGNoYWluKSAmJiBfLmlzRmluaXRlKGluZGV4KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgY2hhaW4gKCR7Y2hhaW59KSBvciBpbmRleCAoJHtpbmRleH0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyh0aGlzLm5hbWUsIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBrZXljaGFpbnMsXG4gICAgICBmb3JtYXQ6IHBhcmFtcy5mb3JtYXQgPz8gJ2Jhc2U1OCcsXG4gICAgICBjaGFpbixcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGFkZHJlc3NUeXBlXG4gICAqIEByZXR1cm5zIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSB1bnNwZW50VHlwZVxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzVHlwZShhZGRyZXNzVHlwZTogU2NyaXB0VHlwZTJPZjMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU3VwcG9ydGVkU2NyaXB0VHlwZSh0aGlzLm5ldHdvcmssIGFkZHJlc3NUeXBlKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSBjaGFpblxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzQ2hhaW4oY2hhaW46IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShjaGFpbikgJiYgdGhpcy5zdXBwb3J0c0FkZHJlc3NUeXBlKHV0eG9saWIuYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSk7XG4gIH1cblxuICBrZXlJZHNGb3JTaWduaW5nKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMuXG4gICAqIEBwYXJhbSBwc2J0IGFsbCBNdVNpZzIgaW5wdXRzIHNob3VsZCBjb250YWluIHVzZXIgTXVTaWcyIG5vbmNlXG4gICAqIEBwYXJhbSB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPHV0eG9saWIuYml0Z28uVXR4b1BzYnQ+O1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+O1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXM8VCBleHRlbmRzIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+KFxuICAgIHBzYnQ6IFQsXG4gICAgd2FsbGV0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFQ+O1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXM8VCBleHRlbmRzIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+KFxuICAgIHBzYnQ6IFQsXG4gICAgd2FsbGV0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBidWZmZXIgPSBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKCcvd2FsbGV0LycgKyB3YWxsZXRJZCArICcvdHgvc2lnbnBzYnQnKSlcbiAgICAgIC5zZW5kKHsgcHNidDogYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSB9KVxuICAgICAgLnJlc3VsdCgpO1xuICAgIGlmIChwc2J0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKHJlc3BvbnNlLnBzYnQsIHRoaXMubmFtZSwgJ3V0eG9saWInKSBhcyBUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgocmVzcG9uc2UucHNidCwgdGhpcy5uYW1lLCAnd2FzbS11dHhvJykgYXMgVDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldE11c2lnMk5vbmNlcyBpbnN0ZWFkXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMuXG4gICAqIEBwYXJhbSBwc2J0SGV4IGFsbCBNdVNpZzIgaW5wdXRzIHNob3VsZCBjb250YWluIHVzZXIgTXVTaWcyIG5vbmNlXG4gICAqIEBwYXJhbSB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnQocHNidEhleDogc3RyaW5nLCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTxTaWduUHNidFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcHNidCA9IGF3YWl0IHRoaXMuZ2V0TXVzaWcyTm9uY2VzKHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQocHNidEhleCksIHdhbGxldElkKTtcbiAgICByZXR1cm4geyBwc2J0OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JykgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzIGZyb20gT1ZDLlxuICAgKiBAcGFyYW0gb3ZjSnNvbiBKU09OIG9iamVjdCBwcm92aWRlZCBieSBPVkMgd2l0aCBmaWVsZHMgcHNidEhleCBhbmQgd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0RnJvbU9WQyhvdmNKc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBhc3NlcnQob3ZjSnNvblsncHNidEhleCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gcHNidEhleCcpO1xuICAgIGFzc2VydChvdmNKc29uWyd3YWxsZXRJZCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gd2FsbGV0SWQnKTtcbiAgICBjb25zdCBoZXggPSBvdmNKc29uWydwc2J0SGV4J10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHdhbGxldElkID0gb3ZjSnNvblsnd2FsbGV0SWQnXSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHNidCA9IGF3YWl0IHRoaXMuZ2V0TXVzaWcyTm9uY2VzKHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiBfLmV4dGVuZChvdmNKc29uLCB7IHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zIC0ge0BzZWUgU2lnblRyYW5zYWN0aW9uT3B0aW9uc31cbiAgICogQHJldHVybnMge1Byb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24gfCBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPn1cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uPFROdW1iZXI+KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIHRyYW5zYWN0aW9uIHdpdGggYSBjdXN0b20gc2lnbmluZyBmdW5jdGlvbi4gRXhhbXBsZSB1c2UgY2FzZSBpcyBleHByZXNzIGV4dGVybmFsIHNpZ25lclxuICAgKiBAcGFyYW0gY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHNpbmdsZSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHNpZ25UcmFuc2FjdGlvblBhcmFtcyBwYXJhbWV0ZXJzIGZvciBjdXN0b20gc2lnbmluZyBmdW5jdGlvbi4gSW5jbHVkZXMgdHhQcmVidWlsZCBhbmQgcHVic1xuICAgKlxuICAgKiBAcmV0dXJucyBzaWduZWQgdHJhbnNhY3Rpb24gYXMgaGV4IHN0cmluZ1xuICAgKi9cbiAgYXN5bmMgc2lnbldpdGhDdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uOiBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXI+LFxuICAgIHNpZ25UcmFuc2FjdGlvblBhcmFtczogeyB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+OyBwdWJzOiBzdHJpbmdbXSB9XG4gICk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuICAgIGFzc2VydCh0eEhleCwgJ21pc3NpbmcgdHhIZXggcGFyYW1ldGVyJyk7XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24odHhIZXgpO1xuXG4gICAgY29uc3QgaXNUeFdpdGhLZXlQYXRoU3BlbmRJbnB1dCA9IGhhc0tleVBhdGhTcGVuZElucHV0KHR4LCBzaWduVHJhbnNhY3Rpb25QYXJhbXMucHVicywgdGhpcy5uYW1lKTtcblxuICAgIGlmICghaXNUeFdpdGhLZXlQYXRoU3BlbmRJbnB1dCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcywgY29pbjogdGhpcyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRUeEhleCA9ICh2OiBTaWduZWRUcmFuc2FjdGlvbik6IHN0cmluZyA9PiB7XG4gICAgICBpZiAoJ3R4SGV4JyBpbiB2KSB7XG4gICAgICAgIHJldHVybiB2LnR4SGV4O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBub3QgZm91bmQgaW4gc2lnblRyYW5zYWN0aW9uIHJlc3VsdCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaWduZXJOb25jZVR4ID0gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHtcbiAgICAgIC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyTm9uY2UnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcHVicyB9ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zO1xuICAgIGFzc2VydChwdWJzID09PSB1bmRlZmluZWQgfHwgaXNUcmlwbGUocHVicykpO1xuXG4gICAgY29uc3QgY29zaWduZXJOb25jZVR4ID0gYXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb248VE51bWJlcj4oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgcHVicyxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQsIHR4SGV4OiBnZXRUeEhleChzaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KGNvc2lnbmVyTm9uY2VUeCkgfSxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICAgIGNvaW46IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHVuc3BlbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0JpdEdvVGFpbnRlZFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odW5zcGVudDogVW5zcGVudDxUTnVtYmVyPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50KHVuc3BlbnQsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb21wb3NlIGEgcmF3IHBzYnQvdHJhbnNhY3Rpb24gaW50byB1c2VmdWwgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIHRvdGFsIGFtb3VudHMsXG4gICAqIGNoYW5nZSBhbW91bnRzLCBhbmQgdHJhbnNhY3Rpb24gb3V0cHV0cy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPixcbiAgICB3YWxsZXQ/OiBJV2FsbGV0XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGlmICghcGFyYW1zLnB1YnMpIHtcbiAgICAgIC8vIGlmIG5vIHB1YnMgYXJlIHByb3ZpZGVkLCBvcHBvcnR1bmlzdGljYWxseSBmZXRjaCB0aGUga2V5Y2hhaW5zIGZyb20gdGhlIHdhbGxldFxuICAgICAgaWYgKHdhbGxldCkge1xuICAgICAgICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyh0aGlzLCB3YWxsZXQpO1xuICAgICAgICBwYXJhbXMucHVicyA9IHRvQmlwMzJUcmlwbGUoa2V5Y2hhaW5zKS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cGxhaW5UeCh0aGlzLmRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkKHBhcmFtcyksIHBhcmFtcywgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zIC0ge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIGJhY2t1cEtleVJlY292ZXJ5PiB7XG4gICAgcmV0dXJuIGJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyByZWNvdmVyVjEocGFyYW1zOiBWMVJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MUJhY2t1cEtleVJlY292ZXJ5PiB7XG4gICAgcmV0dXJuIHYxQmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHN3ZWVwVjEocGFyYW1zOiBWMVN3ZWVwUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFTd2VlcD4ge1xuICAgIHJldHVybiB2MVN3ZWVwKHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBjb2luIHRoYXQgd2FzIHNlbnQgdG8gd3JvbmcgY2hhaW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4aWQgVGhlIHR4aWQgb2YgdGhlIGZhdWx0eSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyBhZGRyZXNzIHRvIHNlbmQgcmVjb3ZlcmVkIGZ1bmRzIHRvXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUNvaW4gdGhlIGNvaW4gdHlwZSBvZiB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMuc2lnbmVkIHJldHVybiBhIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIChkZWZhdWx0PXRydWUpXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB0aGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHBhcmFtcy54cHJ2IHRoZSB1bmVuY3J5cHRlZCB4cHJ2ICh1c2VkIGluc3RlYWQgb2Ygd2FsbGV0IHBhc3NwaHJhc2UpXG4gICAqIEBwYXJhbSBwYXJhbXMuYXBpS2V5IGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFJlY292ZXJGcm9tV3JvbmdDaGFpbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICAgIGNvbnN0IHsgdHhpZCwgcmVjb3ZlcnlBZGRyZXNzLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UsIHhwcnYsIGFwaUtleSB9ID0gcGFyYW1zO1xuXG4gICAgLy8gcGFyYW1zLnJlY292ZXJ5Q29pbiB1c2VkIHRvIGJlIHBhcmFtcy5jb2luLCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IHJlY292ZXJ5Q29pbiA9IHBhcmFtcy5jb2luIHx8IHBhcmFtcy5yZWNvdmVyeUNvaW47XG4gICAgaWYgKCFyZWNvdmVyeUNvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBvYmplY3QgcmVjb3ZlcnlDb2luJyk7XG4gICAgfVxuICAgIC8vIHNpZ25lZCBzaG91bGQgZGVmYXVsdCB0byB0cnVlLCBhbmQgb25seSBiZSBkaXNhYmxlZCBpZiBleHBsaWNpdGx5IHNldCB0byBmYWxzZSAobm90IHVuZGVmaW5lZClcbiAgICBjb25zdCBzaWduZWQgPSBwYXJhbXMuc2lnbmVkICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IHNvdXJjZUNvaW5GYW1pbHkgPSB0aGlzLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHJlY292ZXJ5Q29pbkZhbWlseSA9IHJlY292ZXJ5Q29pbi5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zID0gc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXNbc291cmNlQ29pbkZhbWlseV07XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zKSB8fCAhc3VwcG9ydGVkUmVjb3ZlcnlDb2lucy5pbmNsdWRlcyhyZWNvdmVyeUNvaW5GYW1pbHkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY292ZXJ5IG9mICR7c291cmNlQ29pbkZhbWlseX0gYmFsYW5jZXMgZnJvbSAke3JlY292ZXJ5Q29pbkZhbWlseX0gd2FsbGV0cyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCByZWNvdmVyQ3Jvc3NDaGFpbjxUTnVtYmVyPih0aGlzLmJpdGdvLCB7XG4gICAgICBzb3VyY2VDb2luOiB0aGlzLFxuICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgd2FsbGV0SWQ6IHdhbGxldCxcbiAgICAgIHR4aWQsXG4gICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBzaWduZWQgPyB3YWxsZXRQYXNzcGhyYXNlIDogdW5kZWZpbmVkLFxuICAgICAgeHBydjogc2lnbmVkID8geHBydiA6IHVuZGVmaW5lZCxcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBiaXAzMiBrZXkgcGFpclxuICAgKlxuICAgKiBAcGFyYW0gc2VlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgcHViIGFuZCBwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkOiBCdWZmZXIpOiB7IHB1Yjogc3RyaW5nOyBwcnY6IHN0cmluZyB9IHtcbiAgICBpZiAoIXNlZWQpIHtcbiAgICAgIC8vIEFuIGV4dGVuZGVkIHByaXZhdGUga2V5IGhhcyBib3RoIGEgbm9ybWFsIDI1NiBiaXQgcHJpdmF0ZSBrZXkgYW5kIGEgMjU2XG4gICAgICAvLyBiaXQgY2hhaW4gY29kZSwgYm90aCBvZiB3aGljaCBtdXN0IGJlIHJhbmRvbS4gNTEyIGJpdHMgaXMgdGhlcmVmb3JlIHRoZVxuICAgICAgLy8gbWF4aW11bSBlbnRyb3B5IGFuZCBnaXZlcyB1cyBtYXhpbXVtIHNlY3VyaXR5IGFnYWluc3QgY3JhY2tpbmcuXG4gICAgICBzZWVkID0gcmFuZG9tQnl0ZXMoNTEyIC8gOCk7XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuZGVkS2V5ID0gQklQMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogZXh0ZW5kZWRLZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgcHJ2OiBleHRlbmRlZEtleS50b0Jhc2U1OCgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgb24gd2FsbGV0IHByb3BlcnRpZXMgYW5kIG5ldHdvcmtcbiAgICogQHBhcmFtIHdhbGxldCAtIFRoZSB3YWxsZXQgdG8gY2hlY2tcbiAgICogQHBhcmFtIHJlcXVlc3RlZEZvcm1hdCAtIE9wdGlvbmFsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGZvcm1hdFxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gZm9ybWF0IHRvIHVzZSwgb3IgdW5kZWZpbmVkIGlmIG5vIGRlZmF1bHQgYXBwbGllc1xuICAgKi9cbiAgZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldDogV2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQ/OiBUeEZvcm1hdCk6IFR4Rm9ybWF0IHtcbiAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgcmV0dXJuICdwc2J0LWxpdGUnO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdGVkRm9ybWF0ID8/ICdwc2J0LWxpdGUnO1xuICB9XG5cbiAgYXN5bmMgZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtczogRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMgJiB7IHdhbGxldDogV2FsbGV0IH0pOiBQcm9taXNlPHtcbiAgICB0eEZvcm1hdD86IFR4Rm9ybWF0O1xuICAgIGNoYW5nZUFkZHJlc3NUeXBlPzogU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzO1xuICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzPzogU2NyaXB0VHlwZTJPZjNbXTtcbiAgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RlZEZvcm1hdCA9IGJ1aWxkUGFyYW1zLnR4Rm9ybWF0IGFzIFR4Rm9ybWF0IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHR4Rm9ybWF0ID0gdGhpcy5nZXREZWZhdWx0VHhGb3JtYXQoYnVpbGRQYXJhbXMud2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQpO1xuICAgIGxldCBjaGFuZ2VBZGRyZXNzVHlwZSA9IGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlIGFzIFNjcmlwdFR5cGUyT2YzW10gfCBTY3JpcHRUeXBlMk9mMyB8IHVuZGVmaW5lZDtcblxuICAgIC8vIGlmIHRoZSBhZGRyZXNzVHlwZSBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGRlZmF1bHQgdG8gcDJ0ck11c2lnMiBmb3IgdGVzdG5ldCBob3Qgd2FsbGV0cyBmb3Igc3RhZ2VkIHJvbGxvdXQgb2YgcDJ0ck11c2lnMlxuICAgIGlmIChcbiAgICAgIGJ1aWxkUGFyYW1zLmFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiYgLy8gYWRkcmVzc1R5cGUgaXMgZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgYGNoYW5nZUFkZHJlc3NgXG4gICAgICBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzVHlwZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLndhbGxldC50eXBlKCkgPT09ICdob3QnXG4gICAgKSB7XG4gICAgICBjaGFuZ2VBZGRyZXNzVHlwZSA9IFsncDJ0ck11c2lnMicsICdwMndzaCcsICdwMnNoUDJ3c2gnLCAncDJzaCcsICdwMnRyJ107XG4gICAgfVxuXG4gICAgLy8gZ2V0SGFsZlNpZ25lZExlZ2FjeUZvcm1hdCgpIG9ubHkgc3VwcG9ydHMgcDJtcy1iYXNlZCB0eXBlcyAocDJzaCwgcDJzaFAyd3NoLCBwMndzaCkuXG4gICAgLy8gRmlsdGVyIGNoYW5nZSBvdXRwdXRzIGFuZCByZXN0cmljdCBpbnB1dCBzZWxlY3Rpb24gdG8gdGhlc2UgdHlwZXMuXG4gICAgY29uc3QgbGVnYWN5Q29tcGF0aWJsZVR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdID0gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuICAgIGxldCBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlczogU2NyaXB0VHlwZTJPZjNbXSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyA9IGxlZ2FjeUNvbXBhdGlibGVUeXBlcztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZUFkZHJlc3NUeXBlKSkge1xuICAgICAgICBjaGFuZ2VBZGRyZXNzVHlwZSA9IGNoYW5nZUFkZHJlc3NUeXBlLmZpbHRlcigodCk6IHQgaXMgU2NyaXB0VHlwZTJPZjMgPT5cbiAgICAgICAgICBsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXModCBhcyBTY3JpcHRUeXBlMk9mMylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlQWRkcmVzc1R5cGUgIT09IHVuZGVmaW5lZCAmJiAhbGVnYWN5Q29tcGF0aWJsZVR5cGVzLmluY2x1ZGVzKGNoYW5nZUFkZHJlc3NUeXBlKSkge1xuICAgICAgICBjaGFuZ2VBZGRyZXNzVHlwZSA9IGxlZ2FjeUNvbXBhdGlibGVUeXBlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhGb3JtYXQsXG4gICAgICBjaGFuZ2VBZGRyZXNzVHlwZSxcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzLFxuICAgIH07XG4gIH1cblxuICBwcmVDcmVhdGVCaXRHbyhwYXJhbXM6IFByZWNyZWF0ZUJpdEdvT3B0aW9ucyk6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5jIHByZXNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChwYXJhbXMud2FsbGV0RGF0YSAmJiBpc1V0eG9XYWxsZXREYXRhKHBhcmFtcy53YWxsZXREYXRhKSAmJiBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhKHBhcmFtcy53YWxsZXREYXRhKSkge1xuICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBjb25zdCByZXR1cm5MZWdhY3lGb3JtYXQgPSAocGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS50eEZvcm1hdCA9PT0gJ2xlZ2FjeSc7XG5cbiAgICAvLyBJbiB0aGUgY2FzZSB0aGF0IHdlIGhhdmUgYSAncHNidC1saXRlJyB0cmFuc2FjdGlvbiBmb3JtYXQsIHdlIHdhbnQgdG8gaW5kaWNhdGUgaW4gc2lnbmluZyB0byBub3QgZmFpbFxuICAgIGNvbnN0IHR4SGV4ID0gKHBhcmFtcy50eEhleCA/PyBwYXJhbXMudHhQcmVidWlsZD8udHhIZXgpIGFzIHN0cmluZztcbiAgICBpZiAoXG4gICAgICB0eEhleCAmJlxuICAgICAgdXR4b2xpYi5iaXRnby5pc1BzYnQodHhIZXggYXMgc3RyaW5nKSAmJlxuICAgICAgdXR4b2xpYi5iaXRnby5pc1BzYnRMaXRlKHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgodHhIZXgsIHRoaXMubmV0d29yaykpICYmXG4gICAgICBwYXJhbXMuYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeCA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4geyAuLi5wYXJhbXMsIGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg6IHRydWUsIHJldHVybkxlZ2FjeUZvcm1hdCB9O1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIHJldHVybkxlZ2FjeUZvcm1hdCB9O1xuICB9XG5cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgICBrZXljaGFpbnM6IEtleWNoYWluc1RyaXBsZXRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gd2FsbGV0UGFyYW1zO1xuICB9XG5cbiAgdHJhbnNhY3Rpb25EYXRhQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlUb2tlbj86IHN0cmluZyk6IFJlY292ZXJ5UHJvdmlkZXIge1xuICAgIHJldHVybiBmb3JDb2luKHRoaXMuZ2V0Q2hhaW4oKSwgYXBpVG9rZW4pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHtcbiAgICBtdWx0aVNpZ1R5cGUsXG4gICAgcHVibGljS2V5LFxuICAgIHBydixcbiAgfToge1xuICAgIG11bHRpU2lnVHlwZTogTXVsdGlzaWdUeXBlO1xuICAgIHB1YmxpY0tleTogc3RyaW5nO1xuICAgIHBydjogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKG11bHRpU2lnVHlwZSA9PT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHNzIGF1ZGl0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRQcnYocHJ2KSAmJiAhaXNWYWxpZFhwcnYocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmIChwdWJsaWNLZXkpIHtcbiAgICAgIGNvbnN0IGdlblB1YktleSA9IEJJUDMyLmZyb21CYXNlNTgocHJ2KS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgICBpZiAoZ2VuUHViS2V5ICE9PSBwdWJsaWNLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHByaXZhdGUga2V5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
718
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLDhEQUFnRDtBQUNoRCxnREFBNEQ7QUFDNUQsbURBQXlEO0FBQ3pELG1EQXFDOEI7QUFFOUIseUNBWW9CO0FBQ3BCLGlGQUFtSDtBQUNuSCxxQ0FBeUQ7QUFDekQsK0NBUXVCO0FBR3ZCLGtGQUlvRDtBQUNwRCw2Q0FBNkc7QUFDN0csbUNBT2lCO0FBQ2pCLHVEQUF1RTtBQUN2RSwrQ0FBa0Y7QUFDbEYsaURBSzhCO0FBQzlCLDJDQUEwRTtBQUMxRSwyQ0FBc0U7QUFDdEUsZ0VBQThEO0FBQzlELG1FQUFnRTtBQUNoRSxxQ0FBd0Q7QUFDeEQsb0VBQXVFO0FBa0J2RSxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsNEJBQTRCLFFBQVEsOERBQThELENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUFKRCwwREFJQztBQTJCRCxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFFakU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsSUFBMEIsRUFDMUIsUUFBc0I7SUFFdEIsSUFBSSxFQUFFLFlBQVksZ0JBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGdCQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksRUFBRSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLElBQUks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Q0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBQSxxQkFBVSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSxzQkFBVyxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTN2QkQsNENBMnZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBiaXRnbywgZ2V0TWFpbm5ldCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIEFkZHJlc3NDb2luU3BlY2lmaWMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIENyZWF0ZUFkZHJlc3NGb3JtYXQsXG4gIEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBJQmFzZUNvaW4sXG4gIGlzQm9sdDExSW52b2ljZSxcbiAgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcixcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgSVJlcXVlc3RUcmFjZXIsXG4gIGlzVHJpcGxlLFxuICBJV2FsbGV0LFxuICBLZXljaGFpbnNUcmlwbGV0LFxuICBLZXlJbmRpY2VzLFxuICBNaXNtYXRjaGVkUmVjaXBpZW50LFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUHJlY3JlYXRlQml0R29PcHRpb25zLFxuICBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgVHhJbnRlbnRNaXNtYXRjaEVycm9yLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICBUcmFuc2FjdGlvblBhcmFtcyBhcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMsXG4gIFRyYW5zYWN0aW9uUHJlYnVpbGQgYXMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQsXG4gIFRyaXBsZSxcbiAgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yLFxuICBWZXJpZmljYXRpb25PcHRpb25zLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyBhcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBXYWxsZXQsXG4gIGlzVmFsaWRQcnYsXG4gIGlzVmFsaWRYcHJ2LFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIGJhY2t1cEtleVJlY292ZXJ5LFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBmb3JDb2luLFxuICByZWNvdmVyQ3Jvc3NDaGFpbixcbiAgUmVjb3ZlclBhcmFtcyxcbiAgUmVjb3ZlcnlQcm92aWRlcixcbiAgdjFCYWNrdXBLZXlSZWNvdmVyeSxcbiAgVjFSZWNvdmVyUGFyYW1zLFxuICB2MVN3ZWVwLFxuICBWMVN3ZWVwUGFyYW1zLFxufSBmcm9tICcuL3JlY292ZXJ5JztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzLCBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgRGVjb2RlZFRyYW5zYWN0aW9uLFxuICBleHBsYWluVHgsXG4gIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQsXG4gIGlzU2NyaXB0UmVjaXBpZW50LFxuICBwYXJzZVRyYW5zYWN0aW9uLFxuICB2ZXJpZnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBNdXNpZzJQYXJ0aWNpcGFudCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvbXVzaWcyJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgRXJyb3JNaXNzaW5nT3V0cHV0cyxcbiAgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cyxcbn0gZnJvbSAnLi90cmFuc2FjdGlvbi9kZXNjcmlwdG9yL3ZlcmlmeVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzLCBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgaXNEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi9kZXNjcmlwdG9yJztcbmltcG9ydCB7XG4gIGdldEZ1bGxOYW1lRnJvbUNvaW5OYW1lLFxuICBnZXRNYWlubmV0Q29pbk5hbWUsXG4gIGdldE5ldHdvcmtGcm9tQ29pbk5hbWUsXG4gIGlzTWFpbm5ldENvaW4sXG4gIFV0eG9Db2luTmFtZSxcbiAgVXR4b0NvaW5OYW1lTWFpbm5ldCxcbn0gZnJvbSAnLi9uYW1lcyc7XG5pbXBvcnQgeyBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MvZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHsgaXNTZGtCYWNrZW5kLCBQYXJzZWRUcmFuc2FjdGlvbiwgU2RrQmFja2VuZCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZGVjb2RlRGVzY3JpcHRvclBzYnQsXG4gIGRlY29kZVBzYnRXaXRoLFxuICBlbmNvZGVUcmFuc2FjdGlvbixcbiAgc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSwgVXR4b0tleWNoYWluIH0gZnJvbSAnLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlLCB2ZXJpZnlVc2VyUHVibGljS2V5IH0gZnJvbSAnLi92ZXJpZnlLZXknO1xuaW1wb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi9kZXNjcmlwdG9yL3ZhbGlkYXRlUG9saWN5JztcbmltcG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGlzVXR4b1dhbGxldERhdGEsIFV0eG9XYWxsZXQgfSBmcm9tICcuL3dhbGxldCc7XG5pbXBvcnQgeyBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhIH0gZnJvbSAnLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi91bnNwZW50JztcblxuaW1wb3J0IFNjcmlwdFR5cGUyT2YzID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xuXG5leHBvcnQgdHlwZSBUeEZvcm1hdCA9XG4gIC8vIFRoaXMgaXMgYSBsZWdhY3kgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIGFyb3VuZCB0aGUgYml0Y29pbmpzLWxpYiBzZXJpYWxpemF0aW9uIG9mIHVuc2lnbmVkIHRyYW5zYWN0aW9uc1xuICAvLyBkb2VzIG5vdCBpbmNsdWRlIHByZXZPdXQgZGF0YSBhbmQgaXMgYSBiaXQgcGFpbmZ1bCB0byB3b3JrIHdpdGhcbiAgLy8gZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBwc2J0XG4gIC8vIEBkZXByZWNhdGVkXG4gIHwgJ2xlZ2FjeSdcbiAgLy8gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcHNidCBmb3JtYXQsIGluY2x1ZGluZyB0aGUgZnVsbCBwcmV2VHggZGF0YSBmb3IgbGVnYWN5IHRyYW5zYWN0aW9ucy5cbiAgLy8gVGhpcyB3aWxsIHJlbWFpbiBzdXBwb3J0ZWQgYnV0IGlzIG5vdCB0aGUgZGVmYXVsdCwgc2luY2UgdGhlIGRhdGEgc2l6ZXMgY2FuIGJlY29tZSBwcm9oaWJpdGl2ZWx5IGxhcmdlLlxuICB8ICdwc2J0J1xuICAvLyBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgcHNidCB2ZXJzaW9uIHdoZXJlIGxlZ2FjeSBpbnB1dHMgYXJlIHNlcmlhbGl6ZWQgYXMgaWYgdGhleSB3ZXJlIHNlZ3dpdCBpbnB1dHMuXG4gIC8vIFdoaWxlIHRoaXMgcHJldmVudHMgdXMgdG8gZnVsbHkgdmVyaWZ5IHRoZSB0cmFuc2FjdGlvbiBmZWUsIHdlIGhhdmUgb3RoZXIgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGUgZmVlIGlzIHdpdGhpbiBib3VuZHMuXG4gIHwgJ3BzYnQtbGl0ZSc7XG5cbmV4cG9ydCBjbGFzcyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodHhGb3JtYXQ6IFR4Rm9ybWF0KSB7XG4gICAgc3VwZXIoYFNESyBzdXBwb3J0IGZvciB0eEZvcm1hdD0ke3R4Rm9ybWF0fSBpcyBkZXByZWNhdGVkIG9uIHRoaXMgZW52aXJvbm1lbnQuIFBsZWFzZSB1c2UgcHNidCBpbnN0ZWFkLmApO1xuICB9XG59XG5cbnR5cGUgVXR4b0N1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9IHtcbiAgKHBhcmFtczoge1xuICAgIGNvaW46IElCYXNlQ29pbjtcbiAgICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBzaWduaW5nU3RlcCBmbGFnIGJlY29tZXMgYXBwbGljYWJsZSB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gICAgICogMSkgV2hlbiB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgaXMgYWN0aXZhdGVkXG4gICAgICogMikgV2hlbiB0aGUgUFNCVCBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dC5cbiAgICAgKlxuICAgICAqIFRoZSBzaWduaW5nIHByb2Nlc3Mgb2YgYSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0IGlzIGEgNC1zdGVwIHNlcXVlbmNlOlxuICAgICAqIGkpIHVzZXIgbm9uY2UgZ2VuZXJhdGlvbiAtIHNpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBleHRlcm5hbCBleHByZXNzIHNpZ25lciBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaSkgYml0Z28gbm9uY2UgZ2VuZXJhdGlvbiAtIGNvc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBhbmQgb25seSBjYWxsIHRvIGxvY2FsIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpaSkgdXNlciBzaWduYXR1cmUgLSBzaWduZXJTaWduYXR1cmUgLSB0aGlzIGlzIHRoZSBzZWNvbmQgY2FsbCB0byBleHRlcm5hbCBleHByZXNzIHNpZ25lciBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpdikgYml0Z28gc2lnbmF0dXJlIC0gbm90IGluIHNpZ25UcmFuc2FjdGlvbiBtZXRob2TigJlzIHNjb3BlXG4gICAgICpcbiAgICAgKiBJbiB0aGUgYWJzZW5jZSBvZiB0aGlzIGZsYWcsIHRoZSBhZm9yZW1lbnRpb25lZCBmaXJzdCB0aHJlZSBzZXF1ZW5jZSBpcyBleGVjdXRlZCBpbiBhIHNpbmdsZSBzaWduVHJhbnNhY3Rpb24gY2FsbC5cbiAgICAgKlxuICAgICAqIE5PVEU6IFdlIG1ha2UgYSBzdHJvbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBhbmQgaXRzIGNhbGxlciB1c2VzIHN0aWNreSBzZXNzaW9ucyxcbiAgICAgKiBzaW5jZSBQU0JUcyBhcmUgY2FjaGVkIGluIHN0ZXAgMSB0byBiZSB1c2VkIGluIHN0ZXAgMyBmb3IgTXVTaWcyIHVzZXIgc2VjdXJlIG5vbmNlIGFjY2Vzcy5cbiAgICAgKi9cbiAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJyB8ICdjb3NpZ25lck5vbmNlJztcbiAgfSk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+O1xufTtcblxuY29uc3QgeyBpc0NoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluLCBvdXRwdXRTY3JpcHRzIH0gPSBiaXRnbztcblxuLyoqXG4gKiBDaGVjayBpZiBhIGRlY29kZWQgdHJhbnNhY3Rpb24gaGFzIGF0IGxlYXN0IG9uZSB0YXByb290IGtleSBwYXRoIHNwZW5kIChNdVNpZzIpIGlucHV0LlxuICogV29ya3MgZm9yIGJvdGggdXR4b2xpYiBVdHhvUHNidCBhbmQgd2FzbS11dHhvIEJpdEdvUHNidC5cbiAqL1xuZnVuY3Rpb24gaGFzS2V5UGF0aFNwZW5kSW5wdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pOiBib29sZWFuIHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgYml0Z28uVXR4b1BzYnQpIHtcbiAgICByZXR1cm4gYml0Z28uaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmRJbnB1dCh0eCk7XG4gIH1cbiAgaWYgKHR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KSB7XG4gICAgYXNzZXJ0KHB1YnMgJiYgaXNUcmlwbGUocHVicyksICdwdWIgdHJpcGxlIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGZvciBrZXkgcGF0aCBzcGVuZCBpbnB1dHMgaW4gd2FzbS11dHhvIFBTQlQnKTtcbiAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb21YcHVicyhwdWJzKTtcbiAgICBjb25zdCByZXBsYXlQcm90ZWN0aW9uID0geyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSkgfTtcbiAgICBjb25zdCBwYXJzZWQgPSB0eC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMocm9vdFdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbiB9KTtcbiAgICByZXR1cm4gcGFyc2VkLmlucHV0cy5zb21lKChpbnB1dCkgPT4gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzJLZXlQYXRoJyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnQgVmFsaWRhdGlvbkVycm9yIHRvIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB3aXRoIHN0cnVjdHVyZWQgZGF0YVxuICpcbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBzdHJ1Y3R1cmVkIGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIFZhbGlkYXRpb25FcnJvclxuICogYnkgZXh0cmFjdGluZyB0aGUgbWlzbWF0Y2hlZCBvdXRwdXRzIGFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gdGhlIHN0YW5kYXJkaXplZCBmb3JtYXQuXG4gKiBUaGUgb3JpZ2luYWwgZXJyb3IgaXMgcHJlc2VydmVkIGFzIHRoZSBgY2F1c2VgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gIGVycm9yOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIHJlcUlkOiBzdHJpbmcgfCBJUmVxdWVzdFRyYWNlciB8IHVuZGVmaW5lZCxcbiAgdHhQYXJhbXM6IEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgdHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHhFeHBsYW5hdGlvbj86IHVua25vd25cbik6IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB7XG4gIGNvbnN0IG1pc21hdGNoZWRSZWNpcGllbnRzOiBNaXNtYXRjaGVkUmVjaXBpZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvci5lcnJvcnMpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JNaXNzaW5nT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLm1pc3NpbmdPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eEludGVudEVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcihcbiAgICBlcnJvci5tZXNzYWdlLFxuICAgIHJlcUlkLFxuICAgIFt0eFBhcmFtc10sXG4gICAgdHhIZXgsXG4gICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMsXG4gICAgdHhFeHBsYW5hdGlvblxuICApO1xuICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RydWN0dXJlZCBlcnJvciBhcyB0aGUgY2F1c2UgZm9yIGRlYnVnZ2luZ1xuICAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yL2NhdXNlXG4gICh0eEludGVudEVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IEVycm9yIH0pLmNhdXNlID0gZXJyb3I7XG4gIHJldHVybiB0eEludGVudEVycm9yO1xufVxuXG5leHBvcnQgdHlwZSB7IERlY29kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IGJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGN1c3RvbUNoYW5nZVhwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRlZEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+IHtcbiAgY2hhbmdlSW5mbz86IHsgYWRkcmVzczogc3RyaW5nOyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXTtcbn1cblxuZXhwb3J0IHR5cGUgVXR4b05ldHdvcmsgPSB1dHhvbGliLk5ldHdvcms7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG4gIC8qKlxuICAgKiBQU0JULWxpdGUgaGV4IHByZXNlbnQgb25seSBpbiBwZW5kaW5nIGFwcHJvdmFsIGZsb3dzLCB3aGVyZSBhbm90aGVyIHVzZXIncyBzZW5kIGZpeGVkIHRoZSBmb3JtYXQuXG4gICAqIE5vdCBzZXQgaW4gcmVndWxhciAvdHgvYnVpbGQgcmVzcG9uc2VzICh3aGVyZSB0aGUgY2FsbGVyIGNvbnRyb2xzIHRoZSBidWlsZCBwYXJhbWV0ZXJzKS5cbiAgICogUHJlZmVycmVkIG92ZXIgdHhIZXggd2hlbiBwcmVzZW50LCBhcyBpdCBjYXJyaWVzIHJpY2hlciBkYXRhIChub25XaXRuZXNzVXR4bywgcmVkZWVtU2NyaXB0LCBCSVAtMzIgcGF0aHMpLlxuICAgKi9cbiAgdHhIZXhQc2J0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICByYmZUeElkcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG4gIHZlcmlmaWNhdGlvbj86IFZlcmlmaWNhdGlvbk9wdGlvbnM7XG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGFkZHJlc3NUeXBlPzogU2NyaXB0VHlwZTJPZjM7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzZWd3aXQ/OiBib29sZWFuO1xuICBiZWNoMzI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBmb3JtYXQ/OiBDcmVhdGVBZGRyZXNzRm9ybWF0O1xuICBrZXljaGFpbnM6IHtcbiAgICBwdWI6IHN0cmluZztcbiAgICBhc3BLZXlJZD86IHN0cmluZztcbiAgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZHJlc3NEZXRhaWxzIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luOiBzdHJpbmc7XG4gIGNvaW5TcGVjaWZpYzogQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuICBhZGRyZXNzVHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYyBleHRlbmRzIEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICBkZXNjcmlwdG9yTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdG9yQ2hlY2tzdW06IHN0cmluZztcbn1cblxudHlwZSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyAmIHtcbiAgLyoqIFRyYW5zYWN0aW9uIHByZWJ1aWxkIGZyb20gYml0Z28gc2VydmVyICovXG4gIHR4UHJlYnVpbGQ6IHtcbiAgICAvKipcbiAgICAgKiB3YWxsZXRJZCBpcyByZXF1aXJlZCBpbiBmb2xsb3dpbmcgMiBzY2VuYXJpb3MuXG4gICAgICogMS4gRXh0ZXJuYWwgc2lnbmVyIGV4cHJlc3MgbW9kZSBpcyB1c2VkLlxuICAgICAqIDIuIGJpdGdvIE11U2lnMiBub25jZSBpcyByZXF1ZXN0ZWRcbiAgICAgKi9cbiAgICB3YWxsZXRJZD86IHN0cmluZztcbiAgICB0eEhleDogc3RyaW5nO1xuICAgIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgICBkZWNvZGVXaXRoPzogU2RrQmFja2VuZDtcbiAgfTtcbiAgLyoqIHhwdWJzIHRyaXBsZSBmb3Igd2FsbGV0ICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gUmVxdWlyZWQgb25seSB3aGVuIHR4UHJlYnVpbGQudHhIZXggaXMgbm90IGEgUFNCVCAqL1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIC8qKiB4cHViIGZvciBjb3NpZ25lciAoZGVmYXVsdHMgdG8gYml0Z28pICovXG4gIGNvc2lnbmVyUHViPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBjcmVhdGVzIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGhvdXQgcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICogV2hlbiBmYWxzZSwgY3JlYXRlcyBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiB3aXRoIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAqL1xuICBpc0xhc3RTaWduYXR1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgYWxsb3dzIHNpZ25pbmcgYSBub24tc2Vnd2l0IGlucHV0IHdpdGggYSB3aXRuZXNzVXR4byBpbnN0ZWFkIHJlcXVpcmluZyBhIHByZXZpb3VzXG4gICAqIHRyYW5zYWN0aW9uIChub25XaXRuZXNzVXR4bylcbiAgICovXG4gIGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgc2lnbmVkIHRyYW5zYWN0aW9uIHdpbGwgYmUgY29udmVydGVkIGZyb20gUFNCVCB0byBsZWdhY3kgZm9ybWF0IGJlZm9yZSByZXR1cm5pbmcuXG4gICAqIFNldCBhdXRvbWF0aWNhbGx5IGJ5IHByZXNpZ25UcmFuc2FjdGlvbigpIHdoZW4gdGhlIGNhbGxlciBleHBsaWNpdGx5IHJlcXVlc3RlZCB0eEZvcm1hdDogJ2xlZ2FjeScuXG4gICAqL1xuICByZXR1cm5MZWdhY3lGb3JtYXQ/OiBib29sZWFuO1xuICB3YWxsZXQ/OiBVdHhvV2FsbGV0O1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgZXh0cmFjdCBmaW5hbGl6ZWQgUFNCVCB0byBsZWdhY3kgdHJhbnNhY3Rpb24gZm9ybWF0LlxuICAgKiBXaGVuIGZhbHNlLCByZXR1cm4gZmluYWxpemVkIFBTQlQuIFVzZWZ1bCBmb3IgdGVzdGluZyB0byBrZWVwIHRyYW5zYWN0aW9ucyBpbiBQU0JUIGZvcm1hdC5cbiAgICovXG4gIGV4dHJhY3RUcmFuc2FjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGVtYmVkcyBXQVNNLVVUWE8gdmVyc2lvbiBtZXRhZGF0YSBpbnRvIHRoZSBzaWduZWQgUFNCVC4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIHdyaXRlU2lnbmVkV2l0aD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gVXR4b0Jhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+ICZcbiAgKFxuICAgIHwge1xuICAgICAgICBwcnY6IHN0cmluZztcbiAgICAgICAgc2lnbmluZ1N0ZXA/OiAnc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHNpZ25pbmdTdGVwOiAnY29zaWduZXJOb25jZSc7XG4gICAgICB9XG4gICk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlTaWdBZGRyZXNzIHtcbiAgb3V0cHV0U2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbiAgYWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJGcm9tV3JvbmdDaGFpbk9wdGlvbnMge1xuICB0eGlkOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICB3YWxsZXQ6IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgeHBydj86IHN0cmluZztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgY29pbj86IEFic3RyYWN0VXR4b0NvaW47XG4gIHJlY292ZXJ5Q29pbj86IEFic3RyYWN0VXR4b0NvaW47XG4gIHNpZ25lZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW46IHsgcHViPzogc3RyaW5nIH07XG4gIGtleWNoYWluVG9WZXJpZnk6IHsgcHViPzogc3RyaW5nIH07XG4gIGtleVNpZ25hdHVyZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zIHtcbiAgdXNlcktleWNoYWluPzogVXR4b0tleWNoYWluO1xuICBkaXNhYmxlTmV0d29ya2luZzogYm9vbGVhbjtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlcXVlc3Qge1xuICBwc2J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblBzYnRSZXNwb25zZSB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VXR4b0NvaW5cbiAgZXh0ZW5kcyBCYXNlQ29pblxuICBpbXBsZW1lbnRzIE11c2lnMlBhcnRpY2lwYW50PHV0eG9saWIuYml0Z28uVXR4b1BzYnQ+LCBNdXNpZzJQYXJ0aWNpcGFudDxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+XG57XG4gIGFic3RyYWN0IG5hbWU6IFV0eG9Db2luTmFtZTtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgY29pbiBpcyBhIG1haW5uZXQgY29pbi5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBuYW1lIHByb3BlcnR5LlxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzTWFpbm5ldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNNYWlubmV0Q29pbih0aGlzLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCc7XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRlZFR4Rm9ybWF0czogeyBwc2J0OiBib29sZWFuOyBsZWdhY3k6IGJvb2xlYW4gfSA9IHtcbiAgICBwc2J0OiB0cnVlLFxuICAgIGxlZ2FjeTogdGhpcy5nZXRDaGFpbigpID09PSAnYnRjJyB8fCB0aGlzLmdldENoYWluKCkgPT09ICdsdGMnLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0ZWRTZGtCYWNrZW5kczogeyB1dHhvbGliOiBib29sZWFuOyAnd2FzbS11dHhvJzogYm9vbGVhbiB9ID0ge1xuICAgIHV0eG9saWI6IHRoaXMuZ2V0Q2hhaW4oKSA9PT0gJ2J0YycgfHwgdGhpcy5nZXRDaGFpbigpID09PSAnbHRjJyxcbiAgICAnd2FzbS11dHhvJzogdHJ1ZSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIHRoaXMuYW1vdW50VHlwZSA9IGFtb3VudFR5cGU7XG4gIH1cblxuICBkZWZhdWx0U2RrQmFja2VuZDogU2RrQmFja2VuZCA9ICd3YXNtLXV0eG8nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgdXR4b2xpYlxuICAgKiBVc2UgYG5hbWVgIHByb3BlcnR5IGluc3RlYWQuXG4gICAqL1xuICBnZXQgbmV0d29yaygpOiB1dHhvbGliLk5ldHdvcmsge1xuICAgIHJldHVybiBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICBnZXRDaGFpbigpOiBVdHhvQ29pbk5hbWUge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogVXR4b0NvaW5OYW1lTWFpbm5ldCB7XG4gICAgcmV0dXJuIGdldE1haW5uZXRDb2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29pbiBzdXBwb3J0cyBhIGJsb2NrIHRhcmdldCAqL1xuICBzdXBwb3J0c0Jsb2NrVGFyZ2V0KCk6IGJvb2xlYW4ge1xuICAgIC8vIEZJWE1FOiB0aGUgU0RLIGRvZXMgbm90IHNlZW0gdG8gdXNlIHRoaXMgYW55d2hlcmUgc28gaXQgaXMgdW5jbGVhciB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzXG4gICAgc3dpdGNoIChnZXRNYWlubmV0KHRoaXMubmV0d29yaykpIHtcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luOlxuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzd2VlcFdpdGhTZW5kTWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBzdGF0aWMgZ2V0IHZhbGlkQWRkcmVzc1R5cGVzKCk6IFNjcmlwdFR5cGUyT2YzW10ge1xuICAgIHJldHVybiBbLi4ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZhY3RvciBiZXR3ZWVuIHRoZSBiYXNlIHVuaXQgYW5kIGl0cyBzbWFsbGVzdCBzdWJkaXZpc29uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU4O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgdmFsaWRcbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICogQHBhcmFtIHBhcmFtXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgcGFyYW0/OiB7IGFueUZvcm1hdD86IGJvb2xlYW47IGFsbG93TGlnaHRuaW5nPzogYm9vbGVhbiB9IHwgLyogbGVnYWN5IHBhcmFtZXRlciAqLyBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJyAmJiBwYXJhbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXByZWNhdGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsb3dMaWdodG5pbmcgPSAocGFyYW0gYXMgeyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk/LmFsbG93TGlnaHRuaW5nID8/IGZhbHNlO1xuICAgIGlmIChhbGxvd0xpZ2h0bmluZykge1xuICAgICAgaWYgKC9eKDAyfDAzKVswLTlhLWZBLUZdezY0fSQvLnRlc3QoYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNCb2x0MTFJbnZvaWNlKGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGFsbG93IGFsbCBhZGRyZXNzIGZvcm1hdHMuXG4gICAgLy8gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIG9ubHkgYWRkaXRpb25hbCBhZGRyZXNzIGZvcm1hdCBpcyBiY2ggY2FzaGFkZHIuXG4gICAgY29uc3QgYW55Rm9ybWF0ID0gKHBhcmFtIGFzIHsgYW55Rm9ybWF0OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbnlGb3JtYXQgPz8gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCBvdXQgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgZm9yIGFueSBmb3JtYXQuIFRyaWVzIGFsbCBzdXBwb3J0ZWQgZm9ybWF0cyBieSBkZWZhdWx0LlxuICAgICAgLy8gVGhyb3dzIGlmIGFkZHJlc3MgY2Fubm90IGJlIGRlY29kZWQgd2l0aCBhbnkgZm9ybWF0LlxuICAgICAgY29uc3QgW2Zvcm1hdCwgc2NyaXB0XSA9IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b091dHB1dFNjcmlwdEFuZEZvcm1hdChhZGRyZXNzLCB0aGlzLm5ldHdvcmspO1xuICAgICAgLy8gdW5sZXNzIGFueUZvcm1hdCBpcyBzZXQsIG9ubHkgJ2RlZmF1bHQnIGlzIGFsbG93ZWQuXG4gICAgICBpZiAoIWFueUZvcm1hdCAmJiBmb3JtYXQgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhZGRyZXNzIGlzIGluIG5vcm1hbCByZXByZXNlbnRhdGlvbiBmb3IgZ2l2ZW4gZm9ybWF0LlxuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChzY3JpcHQsIGZvcm1hdCwgdGhpcy5uZXR3b3JrKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQklQMzIuZnJvbUJhc2U1OChwdWIpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBjcmFmdGluZyB0aGUgSFRUUCByZXF1ZXN0IHRvIHRoZSBCaXRHbyBBUEkuXG4gICAqIEl0IGNvbnZlcnRzIHRoZSByZWNpcGllbnQgYWRkcmVzcyBgc2NyaXB0UHViS2V5Oi4uLmAgdG8geyBzY3JpcHQ6IHN0cmluZyB9IHwgeyBhZGRyZXNzOiBzdHJpbmcgfS5cbiAgICovXG4gIG92ZXJyaWRlIHByZXByb2Nlc3NCdWlsZFBhcmFtcyhwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBpZiAocGFyYW1zLnJlY2lwaWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnJlY2lwaWVudHMgPVxuICAgICAgICBwYXJhbXMucmVjaXBpZW50cyBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgPyBwYXJhbXM/LnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYWRkcmVzcywgLi4ucmVzdCB9ID0gcmVjaXBpZW50O1xuICAgICAgICAgICAgICBpZiAoYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY2lwaWVudDsgLy8gQWxyZWFkeSB7IHNjcmlwdCwgYW1vdW50IH0g4oCUIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCAuLi5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGFkZHJlc3MpIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogcGFyYW1zLnJlY2lwaWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhdGVzdCBibG9jayBoZWlnaHRcbiAgICogQHBhcmFtIHJlcUlkXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RCbG9ja0hlaWdodChyZXFJZD86IFJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmIChyZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hhaW5oZWFkID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy9wdWJsaWMvYmxvY2svbGF0ZXN0JykpLnJlc3VsdCgpO1xuICAgIHJldHVybiAoY2hhaW5oZWFkIGFzIGFueSkuaGVpZ2h0O1xuICB9XG5cbiAgY2hlY2tSZWNpcGllbnQocmVjaXBpZW50OiB7IGFkZHJlc3M/OiBzdHJpbmc7IGFtb3VudDogbnVtYmVyIHwgc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50KHJlY2lwaWVudCk7XG4gICAgaWYgKHJlY2lwaWVudC5hZGRyZXNzICYmICFpc1NjcmlwdFJlY2lwaWVudChyZWNpcGllbnQuYWRkcmVzcykpIHtcbiAgICAgIHN1cGVyLmNoZWNrUmVjaXBpZW50KHsgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsIGFtb3VudDogcmVjaXBpZW50LmFtb3VudCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIGN1c3RvbSBjb2luIGxvZ2ljIGFmdGVyIGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSBCaXRHb1xuICAgKiBAcGFyYW0gcHJlYnVpbGRcbiAgICovXG4gIGFzeW5jIHBvc3RQcm9jZXNzUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgcHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgdHggPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkKHByZWJ1aWxkKTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwcmVidWlsZC5ibG9ja0hlaWdodCkpIHtcbiAgICAgIHByZWJ1aWxkLmJsb2NrSGVpZ2h0ID0gKGF3YWl0IHRoaXMuZ2V0TGF0ZXN0QmxvY2tIZWlnaHQoKSkgYXMgbnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gXy5leHRlbmQoe30sIHByZWJ1aWxkLCB7IHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbih0eCkudG9TdHJpbmcoJ2hleCcpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgZHJvcCBzdXBwb3J0IGZvciB1dHhvbGliXG4gICAqIERldGVybWluZSBhbiBhZGRyZXNzJyB0eXBlIGJhc2VkIG9uIGl0cyB3aXRuZXNzIGFuZCByZWRlZW0gc2NyaXB0IHByZXNlbmNlXG4gICAqIEBwYXJhbSBhZGRyZXNzRGV0YWlsc1xuICAgKi9cbiAgc3RhdGljIGluZmVyQWRkcmVzc1R5cGUoYWRkcmVzc0RldGFpbHM6IHsgY2hhaW46IG51bWJlciB9KTogU2NyaXB0VHlwZTJPZjMgfCBudWxsIHtcbiAgICByZXR1cm4gaXNDaGFpbkNvZGUoYWRkcmVzc0RldGFpbHMuY2hhaW4pID8gc2NyaXB0VHlwZUZvckNoYWluKGFkZHJlc3NEZXRhaWxzLmNoYWluKSA6IG51bGw7XG4gIH1cblxuICBjcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgaGV4OiBzdHJpbmdcbiAgKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPihoZXgsIHRoaXMubmV0d29yaywgdGhpcy5hbW91bnRUeXBlKTtcbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIGlucHV0OiBCdWZmZXIgfCBzdHJpbmcsXG4gICAgZGVjb2RlV2l0aDogU2RrQmFja2VuZCA9IHRoaXMuZGVmYXVsdFNka0JhY2tlbmRcbiAgKTogRGVjb2RlZFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgYnVmZmVyID0gc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKGlucHV0LCBbJ2hleCcsICdiYXNlNjQnXSk7XG4gICAgICByZXR1cm4gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihidWZmZXIsIGRlY29kZVdpdGgpO1xuICAgIH1cblxuICAgIGlmICh1dHhvbGliLmJpdGdvLmlzUHNidChpbnB1dCkpIHtcbiAgICAgIGlmICh0aGlzLnN1cHBvcnRlZFNka0JhY2tlbmRzW2RlY29kZVdpdGhdICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU0RLIHN1cHBvcnQgZm9yIGRlY29kZVdpdGg9JHtkZWNvZGVXaXRofSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZW52aXJvbm1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zdXBwb3J0ZWRUeEZvcm1hdHMucHNidCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQoJ3BzYnQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChpbnB1dCwgdGhpcy5uYW1lLCBkZWNvZGVXaXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGVnYWN5IGZvcm1hdCB0cmFuc2FjdGlvbnMgYXJlIGRlcHJlY2F0ZWQuIFRoaXMgd2lsbCBiZSBhbiB1bmNvbmRpdGlvbmFsIGVycm9yIGluIHRoZSBmdXR1cmUuXG4gICAgICBpZiAoIXRoaXMuc3VwcG9ydGVkVHhGb3JtYXRzLmxlZ2FjeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQoJ2xlZ2FjeScpO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZVdpdGggIT09ICd1dHhvbGliJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdyZWNlaXZlZCBkZWNvZGVXaXRoIGhpbnQgJXMsIGlnbm9yaW5nIGZvciBsZWdhY3kgdHJhbnNhY3Rpb24nLCBkZWNvZGVXaXRoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihpbnB1dCwgdGhpcy5uZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6IHRoaXMuYW1vdW50VHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uQXNQc2J0KGlucHV0OiBCdWZmZXIgfCBzdHJpbmcpOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihpbnB1dCk7XG4gICAgaWYgKGRlY29kZWQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgfHwgZGVjb2RlZCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICAgIHJldHVybiBkZWNvZGVkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHBzYnQgYnV0IGdvdCB0cmFuc2FjdGlvbicpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4ocHJlYnVpbGQ6IHtcbiAgICB0eEhleD86IHN0cmluZztcbiAgICB0eEJhc2U2ND86IHN0cmluZztcbiAgICAvKiogU2VlIFRyYW5zYWN0aW9uUHJlYnVpbGQudHhIZXhQc2J0IOKAlCBvbmx5IHByZXNlbnQgaW4gcGVuZGluZyBhcHByb3ZhbCBmbG93cy4gKi9cbiAgICB0eEhleFBzYnQ/OiBzdHJpbmc7XG4gICAgZGVjb2RlV2l0aD86IHN0cmluZztcbiAgfSk6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgY29uc3Qgc3RyaW5nID0gcHJlYnVpbGQudHhIZXhQc2J0ID8/IHByZWJ1aWxkLnR4SGV4ID8/IHByZWJ1aWxkLnR4QmFzZTY0O1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhIZXggb3IgdHhCYXNlNjQgcHJvcGVydHknKTtcbiAgICB9XG4gICAgbGV0IHsgZGVjb2RlV2l0aCB9ID0gcHJlYnVpbGQ7XG4gICAgaWYgKGRlY29kZVdpdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWNvZGVXaXRoICE9PSAnc3RyaW5nJyB8fCAhaXNTZGtCYWNrZW5kKGRlY29kZVdpdGgpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2RlY29kZVdpdGggJXMgaXMgbm90IGEgdmFsaWQgdmFsdWUsIHVzaW5nIGRlZmF1bHQnLCBkZWNvZGVXaXRoKTtcbiAgICAgICAgZGVjb2RlV2l0aCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oc3RyaW5nLCBkZWNvZGVXaXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGFuZCBmaWxsIHRyYW5zYWN0aW9uIGRldGFpbHMgc3VjaCBhcyBpbnRlcm5hbC9jaGFuZ2Ugc3BlbmQsIGV4dGVybmFsIHNwZW5kIChleHBsaWNpdCB2cy4gaW1wbGljaXQpLCBldGMuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uKHRoaXMsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgZnVuY3Rpb24gdmVyaWZ5VXNlclB1YmxpY0tleSBpbnN0ZWFkXG4gICAqL1xuICBwcm90ZWN0ZWQgdmVyaWZ5VXNlclB1YmxpY0tleShwYXJhbXM6IFZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZlcmlmeVVzZXJQdWJsaWNLZXkodGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlLZXlTaWduYXR1cmUgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXM6IFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyBwYXJhbXMgb2JqZWN0IHBhc3NlZCB0byBzZW5kXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZC50eEhleCBwcmVidWlsdCB0cmFuc2FjdGlvbidzIHR4SGV4IGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgV2FsbGV0IG9iamVjdCB0byBvYnRhaW4ga2V5cyB0byB2ZXJpZnkgYWdhaW5zdFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbiBPYmplY3Qgc3BlY2lmeWluZyBzb21lIHZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIERpc2FsbG93IGZldGNoaW5nIGFueSBkYXRhIGZyb20gdGhlIGludGVybmV0IGZvciB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24ua2V5Y2hhaW5zIFBhc3Mga2V5Y2hhaW5zIG1hbnVhbGx5IHJhdGhlciB0aGFuIGZldGNoaW5nIHRoZW0gYnkgaWRcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uYWRkcmVzc2VzIEFkZHJlc3MgZGV0YWlscyB0byBwYXNzIGluIGZvciBvdXQtb2YtYmFuZCB2ZXJpZmljYXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoRXJyb3J9IGlmIHRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbHNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yfSBpZiB0cmFuc2FjdGlvbiByZWNpcGllbnRzIGRvbid0IG1hdGNoIHVzZXIgaW50ZW50XG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHZlcmlmeVRyYW5zYWN0aW9uKHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oXG4gICAgICAgICAgdGhpcyBhcyB1bmtub3duIGFzIElCYXNlQ29pbixcbiAgICAgICAgICBwYXJhbXMudHhQcmVidWlsZFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBjb252ZXJ0VmFsaWRhdGlvbkVycm9yVG9UeEludGVudE1pc21hdGNoKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHBhcmFtcy5yZXFJZCxcbiAgICAgICAgICBwYXJhbXMudHhQYXJhbXMsXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGQudHhIZXgsXG4gICAgICAgICAgdHhFeHBsYW5hdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSBhbiBhZGRyZXNzIGlzIHZhbGlkIGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIG5vdC5cbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzIFRoZSBhZGRyZXNzIHN0cmluZyBvbiB0aGUgbmV0d29ya1xuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3NUeXBlXG4gICAqIEBwYXJhbSBwYXJhbXMua2V5Y2hhaW5zIEtleWNoYWluIG9iamVjdHMgd2l0aCB4cHVic1xuICAgKiBAcGFyYW0gcGFyYW1zLmNvaW5TcGVjaWZpYyBDb2luLXNwZWNpZmljIGRldGFpbHMgZm9yIHRoZSBhZGRyZXNzIHN1Y2ggYXMgYSB3aXRuZXNzIHNjcmlwdFxuICAgKiBAcGFyYW0gcGFyYW1zLmNoYWluIERlcml2YXRpb24gY2hhaW5cbiAgICogQHBhcmFtIHBhcmFtcy5pbmRleCBEZXJpdmF0aW9uIGluZGV4XG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRXJyb3J9XG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3J9XG4gICAqIEB0aHJvd3Mge1VuZXhwZWN0ZWRBZGRyZXNzRXJyb3J9XG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9uczxVdHhvQ29pblNwZWNpZmljPiwgd2FsbGV0PzogSVdhbGxldCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywga2V5Y2hhaW5zLCBjaGFpbiwgaW5kZXggfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGlmICh3YWxsZXQgJiYgaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpIHtcbiAgICAgIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNUcmlwbGUoa2V5Y2hhaW5zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWlucyBtdXN0IGJlIGEgdHJpcGxlJyk7XG4gICAgICB9XG4gICAgICBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLCBnZXRQb2xpY3lGb3JFbnYodGhpcy5iaXRnby5lbnYpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICgoXy5pc1VuZGVmaW5lZChjaGFpbikgJiYgXy5pc1VuZGVmaW5lZChpbmRleCkpIHx8ICEoXy5pc0Zpbml0ZShjaGFpbikgJiYgXy5pc0Zpbml0ZShpbmRleCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNoYWluICgke2NoYWlufSkgb3IgaW5kZXggKCR7aW5kZXh9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3ModGhpcy5uYW1lLCB7XG4gICAgICBhZGRyZXNzLFxuICAgICAga2V5Y2hhaW5zLFxuICAgICAgZm9ybWF0OiBwYXJhbXMuZm9ybWF0ID8/ICdiYXNlNTgnLFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRyZXNzVHlwZVxuICAgKiBAcmV0dXJucyB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gdW5zcGVudFR5cGVcbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc1R5cGUoYWRkcmVzc1R5cGU6IFNjcmlwdFR5cGUyT2YzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1N1cHBvcnRlZFNjcmlwdFR5cGUodGhpcy5uZXR3b3JrLCBhZGRyZXNzVHlwZSk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMub25jaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHJldHVybiB0cnVlIGlmZiBjb2luIHN1cHBvcnRzIHNwZW5kaW5nIGZyb20gY2hhaW5cbiAgICovXG4gIHN1cHBvcnRzQWRkcmVzc0NoYWluKGNoYWluOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDaGFpbkNvZGUoY2hhaW4pICYmIHRoaXMuc3VwcG9ydHNBZGRyZXNzVHlwZSh1dHhvbGliLmJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbikpO1xuICB9XG5cbiAga2V5SWRzRm9yU2lnbmluZygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFtLZXlJbmRpY2VzLlVTRVIsIEtleUluZGljZXMuQkFDS1VQLCBLZXlJbmRpY2VzLkJJVEdPXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzLlxuICAgKiBAcGFyYW0gcHNidCBhbGwgTXVTaWcyIGlucHV0cyBzaG91bGQgY29udGFpbiB1c2VyIE11U2lnMiBub25jZVxuICAgKiBAcGFyYW0gd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PjtcbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PjtcbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzPFQgZXh0ZW5kcyB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PihcbiAgICBwc2J0OiBULFxuICAgIHdhbGxldElkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUPjtcbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzPFQgZXh0ZW5kcyB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PihcbiAgICBwc2J0OiBULFxuICAgIHdhbGxldElkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgYnVmZmVyID0gZW5jb2RlVHJhbnNhY3Rpb24ocHNidCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybCgnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4L3NpZ25wc2J0JykpXG4gICAgICAuc2VuZCh7IHBzYnQ6IGJ1ZmZlci50b1N0cmluZygnaGV4JykgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAocHNidCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChyZXNwb25zZS5wc2J0LCB0aGlzLm5hbWUsICd1dHhvbGliJykgYXMgVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKHJlc3BvbnNlLnBzYnQsIHRoaXMubmFtZSwgJ3dhc20tdXR4bycpIGFzIFQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRNdXNpZzJOb25jZXMgaW5zdGVhZFxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzLlxuICAgKiBAcGFyYW0gcHNidEhleCBhbGwgTXVTaWcyIGlucHV0cyBzaG91bGQgY29udGFpbiB1c2VyIE11U2lnMiBub25jZVxuICAgKiBAcGFyYW0gd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0KHBzYnRIZXg6IHN0cmluZywgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8U2lnblBzYnRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHBzYnQgPSBhd2FpdCB0aGlzLmdldE11c2lnMk5vbmNlcyh0aGlzLmRlY29kZVRyYW5zYWN0aW9uQXNQc2J0KHBzYnRIZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIHsgcHNidDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpIH07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cyBmcm9tIE9WQy5cbiAgICogQHBhcmFtIG92Y0pzb24gSlNPTiBvYmplY3QgcHJvdmlkZWQgYnkgT1ZDIHdpdGggZmllbGRzIHBzYnRIZXggYW5kIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidEZyb21PVkMob3ZjSnNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3BzYnRIZXgnXSwgJ292Y0pzb24gbXVzdCBjb250YWluIHBzYnRIZXgnKTtcbiAgICBhc3NlcnQob3ZjSnNvblsnd2FsbGV0SWQnXSwgJ292Y0pzb24gbXVzdCBjb250YWluIHdhbGxldElkJyk7XG4gICAgY29uc3QgaGV4ID0gb3ZjSnNvblsncHNidEhleCddIGFzIHN0cmluZztcbiAgICBjb25zdCB3YWxsZXRJZCA9IG92Y0pzb25bJ3dhbGxldElkJ10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHBzYnQgPSBhd2FpdCB0aGlzLmdldE11c2lnMk5vbmNlcyh0aGlzLmRlY29kZVRyYW5zYWN0aW9uQXNQc2J0KGhleCksIHdhbGxldElkKTtcbiAgICByZXR1cm4gXy5leHRlbmQob3ZjSnNvbiwgeyB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGtleWNoYWluIGFuZCBoYWxmLXNpZ24gcHJlYnVpbHQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcyAtIHtAc2VlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnN9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj59XG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24gfCBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSB0cmFuc2FjdGlvbiB3aXRoIGEgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24uIEV4YW1wbGUgdXNlIGNhc2UgaXMgZXhwcmVzcyBleHRlcm5hbCBzaWduZXJcbiAgICogQHBhcmFtIGN1c3RvbVNpZ25pbmdGdW5jdGlvbiBjdXN0b20gc2lnbmluZyBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzaW5nbGUgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBzaWduVHJhbnNhY3Rpb25QYXJhbXMgcGFyYW1ldGVycyBmb3IgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24uIEluY2x1ZGVzIHR4UHJlYnVpbGQgYW5kIHB1YnNcbiAgICpcbiAgICogQHJldHVybnMgc2lnbmVkIHRyYW5zYWN0aW9uIGFzIGhleCBzdHJpbmdcbiAgICovXG4gIGFzeW5jIHNpZ25XaXRoQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIGN1c3RvbVNpZ25pbmdGdW5jdGlvbjogVXR4b0N1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyPixcbiAgICBzaWduVHJhbnNhY3Rpb25QYXJhbXM6IHsgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjsgcHViczogc3RyaW5nW10gfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBzaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZC50eEhleDtcbiAgICBhc3NlcnQodHhIZXgsICdtaXNzaW5nIHR4SGV4IHBhcmFtZXRlcicpO1xuXG4gICAgY29uc3QgdHggPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHR4SGV4KTtcblxuICAgIGNvbnN0IGlzVHhXaXRoS2V5UGF0aFNwZW5kSW5wdXQgPSBoYXNLZXlQYXRoU3BlbmRJbnB1dCh0eCwgc2lnblRyYW5zYWN0aW9uUGFyYW1zLnB1YnMsIHRoaXMubmFtZSk7XG5cbiAgICBpZiAoIWlzVHhXaXRoS2V5UGF0aFNwZW5kSW5wdXQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsIGNvaW46IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VHhIZXggPSAodjogU2lnbmVkVHJhbnNhY3Rpb24pOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCd0eEhleCcgaW4gdikge1xuICAgICAgICByZXR1cm4gdi50eEhleDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggbm90IGZvdW5kIGluIHNpZ25UcmFuc2FjdGlvbiByZXN1bHQnKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2lnbmVyTm9uY2VUeCA9IGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyxcbiAgICAgIGNvaW46IHRoaXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHB1YnMgfSA9IHNpZ25UcmFuc2FjdGlvblBhcmFtcztcbiAgICBhc3NlcnQocHVicyA9PT0gdW5kZWZpbmVkIHx8IGlzVHJpcGxlKHB1YnMpKTtcblxuICAgIGNvbnN0IGNvc2lnbmVyTm9uY2VUeCA9IGF3YWl0IHRoaXMuc2lnblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgIC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgIHB1YnMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoc2lnbmVyTm9uY2VUeCkgfSxcbiAgICAgIHNpZ25pbmdTdGVwOiAnY29zaWduZXJOb25jZScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHtcbiAgICAgIC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQsIHR4SGV4OiBnZXRUeEhleChjb3NpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lclNpZ25hdHVyZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB1bnNwZW50XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNCaXRHb1RhaW50ZWRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCh1bnNwZW50LCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29tcG9zZSBhIHJhdyBwc2J0L3RyYW5zYWN0aW9uIGludG8gdXNlZnVsIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0b3RhbCBhbW91bnRzLFxuICAgKiBjaGFuZ2UgYW1vdW50cywgYW5kIHRyYW5zYWN0aW9uIG91dHB1dHMuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gICAgd2FsbGV0PzogSVdhbGxldFxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBpZiAoIXBhcmFtcy5wdWJzKSB7XG4gICAgICAvLyBpZiBubyBwdWJzIGFyZSBwcm92aWRlZCwgb3Bwb3J0dW5pc3RpY2FsbHkgZmV0Y2ggdGhlIGtleWNoYWlucyBmcm9tIHRoZSB3YWxsZXRcbiAgICAgIGlmICh3YWxsZXQpIHtcbiAgICAgICAgY29uc3Qga2V5Y2hhaW5zID0gYXdhaXQgZmV0Y2hLZXljaGFpbnModGhpcywgd2FsbGV0KTtcbiAgICAgICAgcGFyYW1zLnB1YnMgPSB0b0JpcDMyVHJpcGxlKGtleWNoYWlucykubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh3YWxsZXQgJiYgaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpIHtcbiAgICAgIC8vIERlc2NyaXB0b3Igd2FsbGV0cyBkZWNvZGUgcHJlYnVpbGQgYnl0ZXMgc3RyYWlnaHQgaW50byB0aGUgd2FzbS11dHhvXG4gICAgICAvLyBkZXNjcmlwdG9yIFBzYnQsIHNraXBwaW5nIHRoZSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgaW50ZXJtZWRpYXRlLlxuICAgICAgcmV0dXJuIGV4cGxhaW5UeChkZWNvZGVEZXNjcmlwdG9yUHNidChwYXJhbXMpLCB7IC4uLnBhcmFtcywgd2FsbGV0IH0sIHRoaXMubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBleHBsYWluVHgodGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwYXJhbXMpLCB7IC4uLnBhcmFtcywgd2FsbGV0IH0sIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2Uge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtcyAtIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiBiYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3ZlclYxKHBhcmFtczogVjFSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFCYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiB2MUJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyBzd2VlcFYxKHBhcmFtczogVjFTd2VlcFBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxU3dlZXA+IHtcbiAgICByZXR1cm4gdjFTd2VlcCh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXIgY29pbiB0aGF0IHdhcyBzZW50IHRvIHdyb25nIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eGlkIFRoZSB0eGlkIG9mIHRoZSBmYXVsdHkgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlDb2luIHRoZSBjb2luIHR5cGUgb2YgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnNpZ25lZCByZXR1cm4gYSBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiAoZGVmYXVsdD10cnVlKVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgdGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSBwYXJhbXMueHBydiB0aGUgdW5lbmNyeXB0ZWQgeHBydiAodXNlZCBpbnN0ZWFkIG9mIHdhbGxldCBwYXNzcGhyYXNlKVxuICAgKiBAcGFyYW0gcGFyYW1zLmFwaUtleSBmb3IgdXR4byBjb2lucyBvdGhlciB0aGFuIFtCVEMsVEJUQ10gdGhpcyBpcyBhIEJsb2NrIENoYWlyIGFwaSBrZXlcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyByZWNvdmVyRnJvbVdyb25nQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zXG4gICk6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB7IHR4aWQsIHJlY292ZXJ5QWRkcmVzcywgd2FsbGV0LCB3YWxsZXRQYXNzcGhyYXNlLCB4cHJ2LCBhcGlLZXkgfSA9IHBhcmFtcztcblxuICAgIC8vIHBhcmFtcy5yZWNvdmVyeUNvaW4gdXNlZCB0byBiZSBwYXJhbXMuY29pbiwgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCByZWNvdmVyeUNvaW4gPSBwYXJhbXMuY29pbiB8fCBwYXJhbXMucmVjb3ZlcnlDb2luO1xuICAgIGlmICghcmVjb3ZlcnlDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IHJlY292ZXJ5Q29pbicpO1xuICAgIH1cbiAgICAvLyBzaWduZWQgc2hvdWxkIGRlZmF1bHQgdG8gdHJ1ZSwgYW5kIG9ubHkgYmUgZGlzYWJsZWQgaWYgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UgKG5vdCB1bmRlZmluZWQpXG4gICAgY29uc3Qgc2lnbmVkID0gcGFyYW1zLnNpZ25lZCAhPT0gZmFsc2U7XG5cbiAgICBjb25zdCBzb3VyY2VDb2luRmFtaWx5ID0gdGhpcy5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCByZWNvdmVyeUNvaW5GYW1pbHkgPSByZWNvdmVyeUNvaW4uZ2V0RmFtaWx5KCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkUmVjb3ZlcnlDb2lucyA9IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzW3NvdXJjZUNvaW5GYW1pbHldO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3VwcG9ydGVkUmVjb3ZlcnlDb2lucykgfHwgIXN1cHBvcnRlZFJlY292ZXJ5Q29pbnMuaW5jbHVkZXMocmVjb3ZlcnlDb2luRmFtaWx5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNvdmVyeSBvZiAke3NvdXJjZUNvaW5GYW1pbHl9IGJhbGFuY2VzIGZyb20gJHtyZWNvdmVyeUNvaW5GYW1pbHl9IHdhbGxldHMgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlcj4odGhpcy5iaXRnbywge1xuICAgICAgc291cmNlQ29pbjogdGhpcyxcbiAgICAgIHJlY292ZXJ5Q29pbixcbiAgICAgIHdhbGxldElkOiB3YWxsZXQsXG4gICAgICB0eGlkLFxuICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogc2lnbmVkID8gd2FsbGV0UGFzc3BocmFzZSA6IHVuZGVmaW5lZCxcbiAgICAgIHhwcnY6IHNpZ25lZCA/IHhwcnYgOiB1bmRlZmluZWQsXG4gICAgICBhcGlLZXksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYmlwMzIga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHB1YiBhbmQgcHJ2XG4gICAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZDogQnVmZmVyKTogeyBwdWI6IHN0cmluZzsgcHJ2OiBzdHJpbmcgfSB7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgICAgLy8gYml0IGNoYWluIGNvZGUsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSByYW5kb20uIDUxMiBiaXRzIGlzIHRoZXJlZm9yZSB0aGVcbiAgICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRlZEtleSA9IEJJUDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGV4dGVuZGVkS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgIHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIG9uIHdhbGxldCBwcm9wZXJ0aWVzIGFuZCBuZXR3b3JrXG4gICAqIEBwYXJhbSB3YWxsZXQgLSBUaGUgd2FsbGV0IHRvIGNoZWNrXG4gICAqIEBwYXJhbSByZXF1ZXN0ZWRGb3JtYXQgLSBPcHRpb25hbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBmb3JtYXRcbiAgICogQHJldHVybnMgVGhlIHRyYW5zYWN0aW9uIGZvcm1hdCB0byB1c2UsIG9yIHVuZGVmaW5lZCBpZiBubyBkZWZhdWx0IGFwcGxpZXNcbiAgICovXG4gIGdldERlZmF1bHRUeEZvcm1hdCh3YWxsZXQ6IFdhbGxldCwgcmVxdWVzdGVkRm9ybWF0PzogVHhGb3JtYXQpOiBUeEZvcm1hdCB7XG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIHJldHVybiAncHNidC1saXRlJztcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RlZEZvcm1hdCA/PyAncHNidC1saXRlJztcbiAgfVxuXG4gIGFzeW5jIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zICYgeyB3YWxsZXQ6IFdhbGxldCB9KTogUHJvbWlzZTx7XG4gICAgdHhGb3JtYXQ/OiBUeEZvcm1hdDtcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzW10gfCBTY3JpcHRUeXBlMk9mMztcbiAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcz86IFNjcmlwdFR5cGUyT2YzW107XG4gIH0+IHtcbiAgICBjb25zdCByZXF1ZXN0ZWRGb3JtYXQgPSBidWlsZFBhcmFtcy50eEZvcm1hdCBhcyBUeEZvcm1hdCB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0eEZvcm1hdCA9IHRoaXMuZ2V0RGVmYXVsdFR4Rm9ybWF0KGJ1aWxkUGFyYW1zLndhbGxldCwgcmVxdWVzdGVkRm9ybWF0KTtcbiAgICBsZXQgY2hhbmdlQWRkcmVzc1R5cGUgPSBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzVHlwZSBhcyBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjMgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiB0aGUgYWRkcmVzc1R5cGUgaXMgbm90IHNwZWNpZmllZCwgd2UgbmVlZCB0byBkZWZhdWx0IHRvIHAydHJNdXNpZzIgZm9yIHRlc3RuZXQgaG90IHdhbGxldHMgZm9yIHN0YWdlZCByb2xsb3V0IG9mIHAydHJNdXNpZzJcbiAgICBpZiAoXG4gICAgICBidWlsZFBhcmFtcy5hZGRyZXNzVHlwZSA9PT0gdW5kZWZpbmVkICYmIC8vIGFkZHJlc3NUeXBlIGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IGBjaGFuZ2VBZGRyZXNzYFxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBidWlsZFBhcmFtcy53YWxsZXQudHlwZSgpID09PSAnaG90J1xuICAgICkge1xuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBbJ3AydHJNdXNpZzInLCAncDJ3c2gnLCAncDJzaFAyd3NoJywgJ3Ayc2gnLCAncDJ0ciddO1xuICAgIH1cblxuICAgIC8vIGdldEhhbGZTaWduZWRMZWdhY3lGb3JtYXQoKSBvbmx5IHN1cHBvcnRzIHAybXMtYmFzZWQgdHlwZXMgKHAyc2gsIHAyc2hQMndzaCwgcDJ3c2gpLlxuICAgIC8vIEZpbHRlciBjaGFuZ2Ugb3V0cHV0cyBhbmQgcmVzdHJpY3QgaW5wdXQgc2VsZWN0aW9uIHRvIHRoZXNlIHR5cGVzLlxuICAgIGNvbnN0IGxlZ2FjeUNvbXBhdGlibGVUeXBlczogU2NyaXB0VHlwZTJPZjNbXSA9IFsncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcbiAgICBsZXQgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMgPSBsZWdhY3lDb21wYXRpYmxlVHlwZXM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2VBZGRyZXNzVHlwZSkpIHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBjaGFuZ2VBZGRyZXNzVHlwZS5maWx0ZXIoKHQpOiB0IGlzIFNjcmlwdFR5cGUyT2YzID0+XG4gICAgICAgICAgbGVnYWN5Q29tcGF0aWJsZVR5cGVzLmluY2x1ZGVzKHQgYXMgU2NyaXB0VHlwZTJPZjMpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZUFkZHJlc3NUeXBlICE9PSB1bmRlZmluZWQgJiYgIWxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyhjaGFuZ2VBZGRyZXNzVHlwZSkpIHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBsZWdhY3lDb21wYXRpYmxlVHlwZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4Rm9ybWF0LFxuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUsXG4gICAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJlQ3JlYXRlQml0R28ocGFyYW1zOiBQcmVjcmVhdGVCaXRHb09wdGlvbnMpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luYyBwcmVzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAocGFyYW1zLndhbGxldERhdGEgJiYgaXNVdHhvV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkgJiYgaXNEZXNjcmlwdG9yV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkpIHtcbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0dXJuTGVnYWN5Rm9ybWF0ID0gKHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikudHhGb3JtYXQgPT09ICdsZWdhY3knO1xuXG4gICAgLy8gSW4gdGhlIGNhc2UgdGhhdCB3ZSBoYXZlIGEgJ3BzYnQtbGl0ZScgdHJhbnNhY3Rpb24gZm9ybWF0LCB3ZSB3YW50IHRvIGluZGljYXRlIGluIHNpZ25pbmcgdG8gbm90IGZhaWxcbiAgICBjb25zdCB0eEhleCA9IChwYXJhbXMudHhIZXggPz8gcGFyYW1zLnR4UHJlYnVpbGQ/LnR4SGV4KSBhcyBzdHJpbmc7XG4gICAgaWYgKFxuICAgICAgdHhIZXggJiZcbiAgICAgIHV0eG9saWIuYml0Z28uaXNQc2J0KHR4SGV4IGFzIHN0cmluZykgJiZcbiAgICAgIHV0eG9saWIuYml0Z28uaXNQc2J0TGl0ZSh1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCB0aGlzLm5ldHdvcmspKSAmJlxuICAgICAgcGFyYW1zLmFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHggPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmV0dXJuIHsgLi4ucGFyYW1zLCBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4OiB0cnVlLCByZXR1cm5MZWdhY3lGb3JtYXQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCByZXR1cm5MZWdhY3lGb3JtYXQgfTtcbiAgfVxuXG4gIGFzeW5jIHN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldChcbiAgICB3YWxsZXRQYXJhbXM6IFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gICAga2V5Y2hhaW5zOiBLZXljaGFpbnNUcmlwbGV0XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHdhbGxldFBhcmFtcztcbiAgfVxuXG4gIHRyYW5zYWN0aW9uRGF0YUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFsdWVsZXNzVHJhbnNmZXJBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFJlY292ZXJ5UHJvdmlkZXIoYXBpVG9rZW4/OiBzdHJpbmcpOiBSZWNvdmVyeVByb3ZpZGVyIHtcbiAgICByZXR1cm4gZm9yQ29pbih0aGlzLmdldENoYWluKCksIGFwaVRva2VuKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7XG4gICAgbXVsdGlTaWdUeXBlLFxuICAgIHB1YmxpY0tleSxcbiAgICBwcnYsXG4gIH06IHtcbiAgICBtdWx0aVNpZ1R5cGU6IE11bHRpc2lnVHlwZTtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICBwcnY6IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgPT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RzcyBhdWRpdGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNvaW4nKTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkUHJ2KHBydikgJiYgIWlzVmFsaWRYcHJ2KHBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBpZiAocHVibGljS2V5KSB7XG4gICAgICBjb25zdCBnZW5QdWJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHBydikubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgICAgaWYgKGdlblB1YktleSAhPT0gcHVibGljS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBwcml2YXRlIGtleScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
-
import { fixedScriptWallet } from '@bitgo/wasm-utxo';
|
|
2
|
+
import { fixedScriptWallet, Psbt as WasmPsbt } from '@bitgo/wasm-utxo';
|
|
3
3
|
import { UtxoCoinName } from '../names';
|
|
4
4
|
import { SdkBackend, BitGoPsbt } from './types';
|
|
5
5
|
type BufferEncoding = 'hex' | 'base64';
|
|
@@ -8,6 +8,18 @@ export declare function decodePsbtWith(psbt: string | Buffer, coinName: UtxoCoin
|
|
|
8
8
|
export declare function decodePsbtWith(psbt: string | Buffer, coinName: UtxoCoinName, backend: 'wasm-utxo'): fixedScriptWallet.BitGoPsbt;
|
|
9
9
|
export declare function decodePsbtWith(psbt: string | Buffer, coinName: UtxoCoinName, backend: SdkBackend): utxolib.bitgo.UtxoPsbt | fixedScriptWallet.BitGoPsbt;
|
|
10
10
|
export declare function decodePsbt(psbt: string | Buffer, coinName: UtxoCoinName): BitGoPsbt;
|
|
11
|
+
export type PrebuildLike = {
|
|
12
|
+
txHex?: string;
|
|
13
|
+
txBase64?: string;
|
|
14
|
+
txHexPsbt?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Decode a prebuild's PSBT bytes directly into a wasm-utxo descriptor `Psbt`.
|
|
18
|
+
*
|
|
19
|
+
* Skips the `fixedScriptWallet.BitGoPsbt` intermediate that `decodeTransactionFromPrebuild`
|
|
20
|
+
* + `toWasmPsbt` would otherwise round-trip through for descriptor flows.
|
|
21
|
+
*/
|
|
22
|
+
export declare function decodeDescriptorPsbt(prebuild: PrebuildLike): WasmPsbt;
|
|
11
23
|
export declare function encodeTransaction(transaction: utxolib.bitgo.UtxoTransaction<bigint | number> | utxolib.bitgo.UtxoPsbt | fixedScriptWallet.BitGoPsbt): Buffer;
|
|
12
24
|
export {};
|
|
13
25
|
//# sourceMappingURL=decode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/transaction/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAiB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/transaction/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAgB,IAAI,IAAI,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAEpG,OAAO,EAA0B,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhD,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,EAAsB,GAAG,MAAM,CAa7G;AAWD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC1B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACnB,iBAAiB,CAAC,SAAS,CAAC;AAC/B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAiBxD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,CAEnF;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAUrE;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,SAAS,GACjH,MAAM,CAQR"}
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.stringToBufferTryFormats = stringToBufferTryFormats;
|
|
37
37
|
exports.decodePsbtWith = decodePsbtWith;
|
|
38
38
|
exports.decodePsbt = decodePsbt;
|
|
39
|
+
exports.decodeDescriptorPsbt = decodeDescriptorPsbt;
|
|
39
40
|
exports.encodeTransaction = encodeTransaction;
|
|
40
41
|
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
41
42
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
@@ -74,6 +75,23 @@ function decodePsbtWith(psbt, coinName, backend) {
|
|
|
74
75
|
function decodePsbt(psbt, coinName) {
|
|
75
76
|
return decodePsbtWith(psbt, coinName, 'wasm-utxo');
|
|
76
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Decode a prebuild's PSBT bytes directly into a wasm-utxo descriptor `Psbt`.
|
|
80
|
+
*
|
|
81
|
+
* Skips the `fixedScriptWallet.BitGoPsbt` intermediate that `decodeTransactionFromPrebuild`
|
|
82
|
+
* + `toWasmPsbt` would otherwise round-trip through for descriptor flows.
|
|
83
|
+
*/
|
|
84
|
+
function decodeDescriptorPsbt(prebuild) {
|
|
85
|
+
const s = prebuild.txHexPsbt ?? prebuild.txHex ?? prebuild.txBase64;
|
|
86
|
+
if (!s) {
|
|
87
|
+
throw new Error('missing required txHex or txBase64 property');
|
|
88
|
+
}
|
|
89
|
+
const bytes = stringToBufferTryFormats(s, ['hex', 'base64']);
|
|
90
|
+
if (!(0, wasm_utxo_1.hasPsbtMagic)(bytes)) {
|
|
91
|
+
throw new Error('descriptor wallets require PSBT format transactions');
|
|
92
|
+
}
|
|
93
|
+
return wasm_utxo_1.Psbt.deserialize(bytes);
|
|
94
|
+
}
|
|
77
95
|
function encodeTransaction(transaction) {
|
|
78
96
|
if (transaction instanceof utxolib.bitgo.UtxoTransaction) {
|
|
79
97
|
return transaction.toBuffer();
|
|
@@ -85,4 +103,4 @@ function encodeTransaction(transaction) {
|
|
|
85
103
|
return Buffer.from(transaction.serialize());
|
|
86
104
|
}
|
|
87
105
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2RlY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLDREQWFDO0FBMEJELHdDQWNDO0FBRUQsZ0NBRUM7QUFjRCxvREFVQztBQUVELDhDQVVDO0FBdEdELDhEQUFnRDtBQUNoRCxnREFBb0c7QUFFcEcsb0NBQWdFO0FBTWhFLFNBQWdCLHdCQUF3QixDQUFDLEtBQWEsRUFBRSxVQUE0QixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDbkcsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQ0UsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUM7WUFDakQsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDNUQsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxRQUFzQjtJQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFpQkQsU0FBZ0IsY0FBYyxDQUM1QixJQUFxQixFQUNyQixRQUFzQixFQUN0QixPQUFtQjtJQUVuQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxJQUFxQixFQUFFLFFBQXNCO0lBQ3RFLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsUUFBc0I7SUFDekQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDcEUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxPQUFPLGdCQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FDL0IsV0FBa0g7SUFFbEgsSUFBSSxXQUFXLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6RCxPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO1NBQU0sSUFBSSxXQUFXLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYywgUHNidCBhcyBXYXNtUHNidCwgdXR4b2xpYkNvbXBhdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBnZXROZXR3b3JrRnJvbUNvaW5OYW1lLCBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi9uYW1lcyc7XG5cbmltcG9ydCB7IFNka0JhY2tlbmQsIEJpdEdvUHNidCB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIEJ1ZmZlckVuY29kaW5nID0gJ2hleCcgfCAnYmFzZTY0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhpbnB1dDogc3RyaW5nLCBmb3JtYXRzOiBCdWZmZXJFbmNvZGluZ1tdID0gWydoZXgnLCAnYmFzZTY0J10pOiBCdWZmZXIge1xuICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oaW5wdXQsIGZvcm1hdCk7XG4gICAgY29uc3QgYnVmZmVyVG9TdHJpbmcgPSBidWZmZXIudG9TdHJpbmcoZm9ybWF0KTtcbiAgICBpZiAoXG4gICAgICAoZm9ybWF0ID09PSAnYmFzZTY0JyAmJiBidWZmZXJUb1N0cmluZyA9PT0gaW5wdXQpIHx8XG4gICAgICAoZm9ybWF0ID09PSAnaGV4JyAmJiBidWZmZXJUb1N0cmluZyA9PT0gaW5wdXQudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCBtdXN0IGJlIGEgdmFsaWQgaGV4IG9yIGJhc2U2NCBzdHJpbmcnKTtcbn1cblxuZnVuY3Rpb24gdG9OZXR3b3JrTmFtZShjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogdXR4b2xpYkNvbXBhdC5VdHhvbGliTmFtZSB7XG4gIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKGNvaW5OYW1lKTtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuICBpZiAoIW5ldHdvcmtOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW5OYW1lOiAke2NvaW5OYW1lfWApO1xuICB9XG4gIHJldHVybiBuZXR3b3JrTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBzYnRXaXRoKFxuICBwc2J0OiBzdHJpbmcgfCBCdWZmZXIsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIGJhY2tlbmQ6ICd1dHhvbGliJ1xuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0V2l0aChcbiAgcHNidDogc3RyaW5nIHwgQnVmZmVyLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBiYWNrZW5kOiAnd2FzbS11dHhvJ1xuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBzYnRXaXRoKFxuICBwc2J0OiBzdHJpbmcgfCBCdWZmZXIsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIGJhY2tlbmQ6IFNka0JhY2tlbmRcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUHNidFdpdGgoXG4gIHBzYnQ6IHN0cmluZyB8IEJ1ZmZlcixcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgYmFja2VuZDogU2RrQmFja2VuZFxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGlmICh0eXBlb2YgcHNidCA9PT0gJ3N0cmluZycpIHtcbiAgICBwc2J0ID0gQnVmZmVyLmZyb20ocHNidCwgJ2hleCcpO1xuICB9XG4gIGlmIChiYWNrZW5kID09PSAndXR4b2xpYicpIHtcbiAgICBjb25zdCBuZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21Db2luTmFtZShjb2luTmFtZSk7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIocHNidCwgbmV0d29yayk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidCwgdG9OZXR3b3JrTmFtZShjb2luTmFtZSkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0KHBzYnQ6IHN0cmluZyB8IEJ1ZmZlciwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJpdEdvUHNidCB7XG4gIHJldHVybiBkZWNvZGVQc2J0V2l0aChwc2J0LCBjb2luTmFtZSwgJ3dhc20tdXR4bycpO1xufVxuXG5leHBvcnQgdHlwZSBQcmVidWlsZExpa2UgPSB7XG4gIHR4SGV4Pzogc3RyaW5nO1xuICB0eEJhc2U2ND86IHN0cmluZztcbiAgdHhIZXhQc2J0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBwcmVidWlsZCdzIFBTQlQgYnl0ZXMgZGlyZWN0bHkgaW50byBhIHdhc20tdXR4byBkZXNjcmlwdG9yIGBQc2J0YC5cbiAqXG4gKiBTa2lwcyB0aGUgYGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidGAgaW50ZXJtZWRpYXRlIHRoYXQgYGRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkYFxuICogKyBgdG9XYXNtUHNidGAgd291bGQgb3RoZXJ3aXNlIHJvdW5kLXRyaXAgdGhyb3VnaCBmb3IgZGVzY3JpcHRvciBmbG93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZURlc2NyaXB0b3JQc2J0KHByZWJ1aWxkOiBQcmVidWlsZExpa2UpOiBXYXNtUHNidCB7XG4gIGNvbnN0IHMgPSBwcmVidWlsZC50eEhleFBzYnQgPz8gcHJlYnVpbGQudHhIZXggPz8gcHJlYnVpbGQudHhCYXNlNjQ7XG4gIGlmICghcykge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eEhleCBvciB0eEJhc2U2NCBwcm9wZXJ0eScpO1xuICB9XG4gIGNvbnN0IGJ5dGVzID0gc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKHMsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgaWYgKCFoYXNQc2J0TWFnaWMoYnl0ZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZXNjcmlwdG9yIHdhbGxldHMgcmVxdWlyZSBQU0JUIGZvcm1hdCB0cmFuc2FjdGlvbnMnKTtcbiAgfVxuICByZXR1cm4gV2FzbVBzYnQuZGVzZXJpYWxpemUoYnl0ZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVHJhbnNhY3Rpb24oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQgfCBudW1iZXI+IHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuKTogQnVmZmVyIHtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24udG9CdWZmZXIoKTtcbiAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24udG9CdWZmZXIoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24uc2VyaWFsaXplKCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAG3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAyB,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAG3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAyB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGpE,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IAC1D,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;CACvB,CAAC;AAoDF,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAmBnG,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,EACrC,aAAa,EAAE,gBAAgB,CAAC,aAAa,EAC7C,UAAU,EAAE,qBAAqB,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,mBAAmB,CAWrB;AAED,MAAM,MAAM,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,qBAAqB,CAC9F,OAAO,EACP,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,CAC5B,CAAC;AAEF,wBAAgB,KAAK,CACnB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,MAAM,GAAG,MAAM,CAAC,GAC/C,2BAA2B,CAAC,MAAM,CAAC,CAyBrC"}
|