@bitgo-beta/sdk-coin-stx 1.1.1-beta.2115 → 1.1.1-beta.2117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/stx.js CHANGED
@@ -547,7 +547,7 @@ class Stx extends sdk_core_1.BaseCoin {
547
547
  }
548
548
  }
549
549
  const isUnsignedSweep = (0, sdk_core_1.getIsUnsignedSweep)(params);
550
- const keys = await (0, sdk_core_1.getBip32KeysAsync)(this.bitgo, params, { requireBitGoXpub: true });
550
+ const keys = await (0, sdk_core_1.getBip32Keys)(this.bitgo, params, { requireBitGoXpub: true });
551
551
  const rootAddressDetails = (0, utils_1.getAddressDetails)(params.rootAddress);
552
552
  const [accountBalanceData, accountNonceData] = await Promise.all([
553
553
  this.getNativeStxBalanceFromNode({ address: rootAddressDetails.address }),
@@ -602,4 +602,4 @@ class Stx extends sdk_core_1.BaseCoin {
602
602
  }
603
603
  }
604
604
  exports.Stx = Stx;
605
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFpQjhCO0FBQzlCLGlEQUFxRjtBQUNyRix1REFlOEI7QUFDOUIsK0RBQXFFO0FBQ3JFLGdFQUFxQztBQUdyQyx3QkFBMkI7QUFDM0IsK0JBQWtEO0FBRWxELHVDQUE2RztBQWU3RyxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQXFDO1FBQ2xELE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hFLENBQUM7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QUFDLGVBQWUsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHFDQUFzQixFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUEsaUNBQWtCLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRELE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFM0QsT0FBTztZQUNMLEtBQUssRUFBRSxnQkFBZ0I7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsTUFBK0I7UUFDL0MsTUFBTSxJQUFJLG9DQUF5QixFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBcHNCRCxrQkFvc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VDb2luLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJpdEdvQmFzZSxcbiAgRW52aXJvbm1lbnRzLFxuICBnZXRCaXAzMktleXNBc3luYyxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBLZXlQYWlyLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBidWZmZXJDVkZyb21TdHJpbmcsXG4gIENsYXJpdHlUeXBlLFxuICBDbGFyaXR5VmFsdWUsXG4gIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXksXG4gIGN2VG9TdHJpbmcsXG4gIGN2VG9WYWx1ZSxcbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbixcbiAgbm9uZUNWLFxuICBwcml2YXRlS2V5VG9TdHJpbmcsXG4gIHB1YmxpY0tleUZyb21CdWZmZXIsXG4gIHB1YmxpY0tleVRvU3RyaW5nLFxuICBzb21lQ1YsXG4gIHN0YW5kYXJkUHJpbmNpcGFsQ1YsXG4gIHVpbnRDVixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgc2VyaWFsaXplUGF5bG9hZCB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zL2Rpc3QvcGF5bG9hZCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmltcG9ydCB7IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMsIFN0eFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsIFN0eFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBmaW5kQ29udHJhY3RUb2tlbk5hbWVVc2luZ0NvbnRyYWN0LCBmaW5kVG9rZW5OYW1lQnlDb250cmFjdCwgZ2V0QWRkcmVzc0RldGFpbHMgfSBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBBZGRyZXNzRGV0YWlscyxcbiAgTmF0aXZlU3R4QmFsYW5jZSxcbiAgUmVjb3ZlcnlJbmZvLFxuICBSZWNvdmVyeU9wdGlvbnMsXG4gIFJlY292ZXJ5VHJhbnNhY3Rpb24sXG4gIFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlLFxuICBTdHhOb25jZVJlc3BvbnNlLFxuICBTdHhUeG5GZWVFc3RpbWF0aW9uUmVzcG9uc2UsXG4gIFR4RGF0YSxcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9saWIvdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2xpYi9mdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFN0eCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBTdHgoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvbihjb2luQ29uZmlnOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMub25jaGFpbjtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQsIHRoZW4gbWFrZSBzdXJlIGl0IG1hdGNoZXMgdGhlIGJhc2UgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlBZGRyZXNzT3B0aW9uc30gcGFyYW1zXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJhc2VBZGRyZXNzIC0gdGhlIGJhc2UgYWRkcmVzcyBmcm9tIHRoZSB3YWxsZXRcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMgfSA9IHBhcmFtcztcbiAgICBpZiAoIWtleWNoYWlucyB8fCBrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Y2hhaW5zJyk7XG4gICAgfVxuICAgIGNvbnN0IHB1YnMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT4gU3R4TGliLlV0aWxzLnhwdWJUb1NUWFB1YmtleShrZXljaGFpbi5wdWIpKTtcbiAgICBjb25zdCBhZGRyZXNzVmVyc2lvbiA9IFN0eExpYi5VdGlscy5nZXRBZGRyZXNzVmVyc2lvbihhZGRyZXNzKTtcbiAgICBjb25zdCBiYXNlQWRkcmVzcyA9IFN0eExpYi5VdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHVicywgYWRkcmVzc1ZlcnNpb24pLmFkZHJlc3M7XG4gICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzLCBiYXNlQWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgU3RhY2tzIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBTdHhMaWIuS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgU3R4TGliLktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcblxuICAgIGlmICgha2V5cy54cHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgeHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnhwdWIsXG4gICAgICBwcnY6IGtleXMueHBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHJpdmF0ZSBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFBydihwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHN0YWNrcyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTdHhTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3QgcHJ2S2V5cyA9IHBhcmFtcy5wcnYgaW5zdGFuY2VvZiBBcnJheSA/IHBhcmFtcy5wcnYgOiBbcGFyYW1zLnBydl07XG4gICAgcHJ2S2V5cy5mb3JFYWNoKChwcnYpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiBwcnYgfSkpO1xuICAgIGlmIChwYXJhbXMucHViS2V5cykgdHhCdWlsZGVyLmZyb21QdWJLZXkocGFyYW1zLnB1YktleXMpO1xuICAgIC8vIGlmIChwYXJhbXMubnVtYmVyU2lnbmF0dXJlKSB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcyhwYXJhbXMubnVtYmVyU2lnbmF0dXJlKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1lc3NhZ2UgcGFzc2VkIHRvIHNpZ25NZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHhIZXggPSB7XG4gICAgICB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPj0gMiA/IHR4SGV4IDogeyBoYWxmU2lnbmVkOiB0eEhleCB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gYSBTdGFja3MgdHJhbnNhY3Rpb24gZnJvbSB0eEhleFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTdHhUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhIZXggfHwgKHBhcmFtcy5oYWxmU2lnbmVkICYmIHBhcmFtcy5oYWxmU2lnbmVkLnR4SGV4KTtcbiAgICBpZiAoIXR4SGV4IHx8ICFwYXJhbXMuZmVlSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGV4cGxhaW4gdHggcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eEhleCk7XG5cbiAgICBpZiAocGFyYW1zLnB1YmxpY0tleXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocGFyYW1zLnB1YmxpY0tleXMpO1xuICAgICAgaWYgKHBhcmFtcy5wdWJsaWNLZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBkZWZpbml0ZWx5IGEgc2luZ2xlIHNpZyB0eFxuICAgICAgICB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgaWYgKHR4LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICAvLyBjaGVjayBpZiBpdCBpcyBhIHRva2VuIHRyYW5zYWN0aW9uIG9yIG5hdGl2ZSBjb2luIHRyYW5zYWN0aW9uXG4gICAgICBsZXQgdHJhbnNhY3Rpb25SZWNpcGllbnQ6IFRyYW5zYWN0aW9uUmVjaXBpZW50O1xuICAgICAgbGV0IG91dHB1dEFtb3VudDogc3RyaW5nO1xuICAgICAgbGV0IG1lbW86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MgJiYgdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IGN2VG9WYWx1ZSh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnRvU3RyaW5nKCk7XG4gICAgICAgIHRyYW5zYWN0aW9uUmVjaXBpZW50ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGN2VG9TdHJpbmcodHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzWzJdKSxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICB0b2tlbk5hbWU6IGZpbmRUb2tlbk5hbWVCeUNvbnRyYWN0KHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lKSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGggPT09IDQgJiZcbiAgICAgICAgICB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSA9PT0gQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lXG4gICAgICAgICkge1xuICAgICAgICAgIG1lbW8gPSBCdWZmZXIuZnJvbSh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUuYnVmZmVyKS50b1N0cmluZygpO1xuICAgICAgICAgIHRyYW5zYWN0aW9uUmVjaXBpZW50WydtZW1vJ10gPSBtZW1vO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRBbW91bnQgPSB0eEpzb24ucGF5bG9hZC5hbW91bnQ7XG4gICAgICAgIG1lbW8gPSB0eEpzb24ucGF5bG9hZC5tZW1vO1xuICAgICAgICB0cmFuc2FjdGlvblJlY2lwaWVudCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB0eEpzb24ucGF5bG9hZC50byxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICBtZW1vOiBtZW1vLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFt0cmFuc2FjdGlvblJlY2lwaWVudF07XG5cbiAgICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ21lbW8nLCAndHlwZSddO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgICAgbWVtbzogbWVtbyxcbiAgICAgICAgdHlwZTogdHgudHlwZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHR4LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFtcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2ZlZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ2NvbnRyYWN0QWRkcmVzcycsXG4gICAgICAgICdjb250cmFjdE5hbWUnLFxuICAgICAgICAnY29udHJhY3RGdW5jdGlvbicsXG4gICAgICAgICdjb250cmFjdEZ1bmN0aW9uQXJncycsXG4gICAgICBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAnJyxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHR4SnNvbi5mZWUsXG4gICAgICAgIHR5cGU6IHR4LnR5cGUsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogdHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLFxuICAgICAgICBjb250cmFjdE5hbWU6IHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSxcbiAgICAgICAgY29udHJhY3RGdW5jdGlvbjogdHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLFxuICAgICAgICBjb250cmFjdEZ1bmN0aW9uQXJnczogdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFVSTHMgb2Ygc29tZSBhY3RpdmUgcHVibGljIG5vZGVzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vZGUgdXJsXG4gICAqL1xuICBnZXRQdWJsaWNOb2RlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5zdHhOb2RlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuYXRpdmUgc3RhY2tzIGJhbGFuY2UgZm9yIGFuIGFjY291bnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgLSBzdGFja3MgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxOYXRpdmVTdHhCYWxhbmNlPn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXROYXRpdmVTdHhCYWxhbmNlRnJvbU5vZGUoeyBhZGRyZXNzIH06IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPE5hdGl2ZVN0eEJhbGFuY2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0UHVibGljTm9kZVVybCgpfS9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHthZGRyZXNzfS9iYWxhbmNlcy9zdHhgO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KGVuZHBvaW50KTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5OiBOYXRpdmVTdHhCYWxhbmNlID0gcmVzcG9uc2UuYm9keTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGdldCBuYXRpdmUgc3R4IGJhbGFuY2UgZnJvbSBub2RlOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNpbmdsZSBmdW5naWJsZSB0b2tlbiBiYWxhbmNlIGZvciBhbiBhY2NvdW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gc3RhY2tzIGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFzc2V0SWQgLSBmdW5naWJsZSB0b2tlbiBhc3NldCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZT59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0U2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2VGcm9tTm9kZSh7XG4gICAgYWRkcmVzcyxcbiAgICBhc3NldElkLFxuICB9OiB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGFzc2V0SWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0UHVibGljTm9kZVVybCgpfS9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHthZGRyZXNzfS9iYWxhbmNlcy9mdC8ke2Fzc2V0SWR9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldChlbmRwb2ludCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keTogU2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gZ2V0IG5hdGl2ZSBzdHggYmFsYW5jZSBmcm9tIG5vZGU6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbm9uY2UgZGF0YSBzcGVjaWZpYyB0byBhbiBhY2NvdW50IGZyb20gYSBwdWJsaWMgbm9kZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIHN0YWNrcyBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFN0eE5vbmNlUmVzcG9uc2U+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnROb25jZUZyb21Ob2RlKHsgYWRkcmVzcyB9OiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxTdHhOb25jZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldFB1YmxpY05vZGVVcmwoKX0vZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke2FkZHJlc3N9L25vbmNlc2A7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQoZW5kcG9pbnQpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHk6IFN0eE5vbmNlUmVzcG9uc2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gZ2V0IGFjY291bnQgbm9uY2UgZnJvbSBub2RlOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YWNrcyB0cmFuc2FjdGlvbiBlc3RpbWF0ZWQgZmVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eEhleCAtIGhleCBvZiBzdGFja3MgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKiBAcGFyYW0ge051bWJlcn0gdHhIZXhMZW5ndGggLSBsZW5ndGggb2YgYnVpbHQgc2VyaWFsaXplZCB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxOdW1iZXI+fSAtIGZlZSBlc3RpbWF0ZSAodGFraW5nIHRoZSBsb3dlc3QpXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VHJhbnNhY3Rpb25GZWVFc3RpbWF0aW9uKHtcbiAgICB0eEhleCxcbiAgICB0eEhleExlbmd0aCxcbiAgfToge1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhIZXhMZW5ndGg6IG51bWJlcjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldFB1YmxpY05vZGVVcmwoKX0vdjIvZmVlcy90cmFuc2FjdGlvbmA7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICB0cmFuc2FjdGlvbl9wYXlsb2FkOiB0eEhleCxcbiAgICAgIGVzdGltYXRlZF9sZW46IHR4SGV4TGVuZ3RoLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5wb3N0KGVuZHBvaW50KS5zZW5kKHJlcXVlc3RCb2R5KTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5OiBTdHhUeG5GZWVFc3RpbWF0aW9uUmVzcG9uc2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgaWYgKGJvZHkuZXN0aW1hdGlvbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBlc3RpbWF0aW9uIGxlbmd0aCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvZHkuZXN0aW1hdGlvbnNbMF0uZmVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBmZWUgZXN0aW1hdGlvbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBmb3Igb2ZmbGluZSB2YXVsdCBzaWduaW5nXG4gICAqIEBwYXJhbSB7QmFzZVRyYW5zYWN0aW9ufSB0eCAtIGJhc2UgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3ZlcnlJbmZvPn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBmb3JtYXRGb3JPZmZsaW5lVmF1bHQodHg6IEJhc2VUcmFuc2FjdGlvbik6IFByb21pc2U8UmVjb3ZlcnlJbmZvPiB7XG4gICAgY29uc3QgdHhKc29uOiBUeERhdGEgPSB0eC50b0pzb24oKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICBmZWVJbmZvOiB7IGZlZTogdHhKc29uLmZlZSB9LFxuICAgIH0pKSBhcyBSZWNvdmVyeUluZm87XG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5jb2luID0gdGhpcy5nZXRDaGFpbigpO1xuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uZmVlSW5mbyA9IHsgZmVlOiB0eEpzb24uZmVlIH07XG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZWNvdmVyYWJsZSBhbW91bnQgJiBmZWUgYWZ0ZXIgc3VidHJhY3RpbmcgdGhlIHR4biBmZWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcmlhbGl6ZWRIZXggLSBzZXJpYWxpemVkIHR4biBoZXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHR4SGV4TGVuZ3RoIC0gZGVzZXJpYWxpemVkIHR4biBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGJhbGFuY2UgLSB0b3RhbCBhY2NvdW50IGJhbGFuY2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuQmFsYW5jZSAtIHRvdGFsIHRva2VuIGJhbGFuY2VcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UmVjb3ZlcmFibGVBbW91bnRBbmRGZWUoXG4gICAgc2VyaWFsaXplZEhleDogc3RyaW5nLFxuICAgIHR4SGV4TGVuZ3RoOiBudW1iZXIsXG4gICAgYmFsYW5jZTogc3RyaW5nLFxuICAgIHRva2VuQmFsYW5jZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCBlc3RpbWF0ZWRGZWUgPSBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uRmVlRXN0aW1hdGlvbih7XG4gICAgICB0eEhleDogc2VyaWFsaXplZEhleCxcbiAgICAgIHR4SGV4TGVuZ3RoOiB0eEhleExlbmd0aCxcbiAgICB9KTtcbiAgICBjb25zdCBiYWxhbmNlQk4gPSBuZXcgQmlnTnVtYmVyKGJhbGFuY2UpO1xuICAgIGNvbnN0IGZlZUJOID0gbmV3IEJpZ051bWJlcihlc3RpbWF0ZWRGZWUpO1xuICAgIGlmIChiYWxhbmNlQk4uaXNMZXNzVGhhbihmZWVCTikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5zdWZmaWNpZW50IGJhbGFuY2UgdG8gYnVpbGQgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZWNvdmVyYWJsZUFtb3VudDogdG9rZW5CYWxhbmNlID8/IGJhbGFuY2VCTi5taW51cyhmZWVCTikudG9TdHJpbmcoKSxcbiAgICAgIGZlZTogZmVlQk4udG9TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBmaW5kIHRoZSByaWdodCBidWlsZGVyIGZvciB0b2tlbiBvciBuYXRpdmUgY29pbiB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3RBZGRyZXNzIC0gdG9rZW4gY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3ROYW1lIC0gdG9rZW4gY29udHJhY3QgbmFtZVxuICAgKiBAcmV0dXJucyB7VHJhbnNmZXJCdWlsZGVyfEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXJ9XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VG9rZW5Pck5hdGl2ZVRyYW5zZmVyQnVpbGRlcihcbiAgICBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmcsXG4gICAgY29udHJhY3ROYW1lPzogc3RyaW5nXG4gICk6IFRyYW5zZmVyQnVpbGRlciB8IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIge1xuICAgIGNvbnN0IGlzVG9rZW4gPSAhIWNvbnRyYWN0QWRkcmVzcyAmJiAhIWNvbnRyYWN0TmFtZTtcbiAgICBsZXQgZmFjdG9yeTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeTtcbiAgICBpZiAoaXNUb2tlbikge1xuICAgICAgY29uc3QgdG9rZW5OYW1lID0gZmluZFRva2VuTmFtZUJ5Q29udHJhY3QoY29udHJhY3RBZGRyZXNzLCBjb250cmFjdE5hbWUpO1xuICAgICAgaWYgKCF0b2tlbk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3Mgb3IgY29udHJhY3QgbmFtZSwgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0b2tlbk5hbWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgICB9XG4gICAgbGV0IGJ1aWxkZXI6IFRyYW5zZmVyQnVpbGRlciB8IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgaWYgKGlzVG9rZW4pIHtcbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBidWlsZCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0Z1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXJ9IGJ1aWxkZXIgLSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3MgLSB0b2tlbiBjb250cmFjdCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWUgLSB0b2tlbiBjb250cmFjdCBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nW119IHB1YnMgLSBhY2NvdW50IHB1YmxpYyBrZXlzXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBub25jZSAtIGFjY291bnQgbm9uY2VcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gcm9vdEFkZHJlc3NEZXRhaWxzIC0gcm9vdCBhZGRyZXNzIGRldGFpbHNcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyAtIHJlY2VpdmUgYWRkcmVzcyBkZXRhaWxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHhCYWxhbmNlIC0gbmF0aXZlIHN0eCBiYWxhbmNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj59IC0gYnVpbHQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgYnVpbGRlcixcbiAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgY29udHJhY3ROYW1lLFxuICAgIHB1YnMsXG4gICAgbm9uY2UsXG4gICAgcm9vdEFkZHJlc3NEZXRhaWxzLFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgc3R4QmFsYW5jZSxcbiAgfToge1xuICAgIGJ1aWxkZXI6IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG4gICAgY29udHJhY3ROYW1lOiBzdHJpbmc7XG4gICAgcHViczogc3RyaW5nW107XG4gICAgbm9uY2U6IG51bWJlcjtcbiAgICByb290QWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIHN0eEJhbGFuY2U6IHN0cmluZztcbiAgfSk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gYnVpbGRlciBhcyBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyO1xuICAgIGNvbnN0IGNvbnRyYWN0VG9rZW5OYW1lID0gZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdChjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0TmFtZSk7XG4gICAgaWYgKCFjb250cmFjdFRva2VuTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3Mgb3IgY29udHJhY3QgbmFtZSwgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBjb25zdCBhc3NldElkID0gYCR7Y29udHJhY3RBZGRyZXNzfS4ke2NvbnRyYWN0TmFtZX06OiR7Y29udHJhY3RUb2tlbk5hbWV9YDtcbiAgICAvLyBmZXRjaCB0aGUgdG9rZW4gYmFsYW5jZVxuICAgIGNvbnN0IHRva2VuQmFsYW5jZURhdGEgPSBhd2FpdCB0aGlzLmdldFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlRnJvbU5vZGUoe1xuICAgICAgYWRkcmVzczogcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MsXG4gICAgICBhc3NldElkLFxuICAgIH0pO1xuICAgIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRva2VuQmFsYW5jZURhdGE/LmJhbGFuY2U7XG4gICAgaWYgKCFOdW1iZXIodG9rZW5CYWxhbmNlKSB8fCBpc05hTihOdW1iZXIodG9rZW5CYWxhbmNlKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG5vIHRva2VuIGJhbGFuY2UgZm91bmQgdG8gcmVjb3ZlciBmb3IgYWRkcmVzczogJHtyb290QWRkcmVzc0RldGFpbHMuYWRkcmVzc30sIHRva2VuOiAke2Fzc2V0SWR9YFxuICAgICAgKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzIwMCcgfSk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocHVicyk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKG5vbmNlKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZShjb250cmFjdE5hbWUpO1xuICAgIGlmIChjb250cmFjdFRva2VuTmFtZSkge1xuICAgICAgdHhCdWlsZGVyLnRva2VuTmFtZShjb250cmFjdFRva2VuTmFtZSk7XG4gICAgfVxuICAgIHR4QnVpbGRlci5mdW5jdGlvbk5hbWUoJ3RyYW5zZmVyJyk7XG4gICAgY29uc3QgZnVuY3Rpb25BcmdzOiBDbGFyaXR5VmFsdWVbXSA9IFtcbiAgICAgIHVpbnRDVih0b2tlbkJhbGFuY2UpLFxuICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVihyb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyksXG4gICAgICBzdGFuZGFyZFByaW5jaXBhbENWKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyksXG4gICAgXTtcbiAgICBpZiAoZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIGZ1bmN0aW9uQXJncy5wdXNoKHNvbWVDVihidWZmZXJDVkZyb21TdHJpbmcoZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9uQXJncy5wdXNoKG5vbmVDVigpKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLmZ1bmN0aW9uQXJncyhmdW5jdGlvbkFyZ3MpO1xuICAgIGNvbnN0IGJhc2VUeG4gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEJyb2FkY2FzdEZvcm1hdCA9IGJhc2VUeG4udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCB0eERlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplVHJhbnNhY3Rpb24odHhCcm9hZGNhc3RGb3JtYXQpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRIZXggPSBzZXJpYWxpemVQYXlsb2FkKHR4RGVzZXJpYWxpemVkLnBheWxvYWQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB7IHJlY292ZXJhYmxlQW1vdW50LCBmZWUgfSA9IGF3YWl0IHRoaXMuZ2V0UmVjb3ZlcmFibGVBbW91bnRBbmRGZWUoXG4gICAgICBzZXJpYWxpemVkSGV4LFxuICAgICAgdHhCcm9hZGNhc3RGb3JtYXQubGVuZ3RoLFxuICAgICAgc3R4QmFsYW5jZSxcbiAgICAgIHRva2VuQmFsYW5jZVxuICAgICk7XG4gICAgZnVuY3Rpb25BcmdzWzBdID0gdWludENWKHJlY292ZXJhYmxlQW1vdW50KTtcbiAgICB0eEJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogZmVlIH0pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYnVpbGQgbmF0aXZlIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNmZXJCdWlsZGVyfSBidWlsZGVyIC0gdHJhbnNmZXIgYnVpbGRlclxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBwdWJzIC0gYWNjb3VudCBwdWJsaWMga2V5c1xuICAgKiBAcGFyYW0ge051bWJlcn0gbm9uY2UgLSBhY2NvdW50IG5vbmNlXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMgLSByZWNlaXZlIGFkZHJlc3MgZGV0YWlsc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3R4QmFsYW5jZSAtIG5hdGl2ZSBzdHggYmFsYW5jZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+fSAtIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGROYXRpdmVUcmFuc2ZlclRyYW5zYWN0aW9uKHtcbiAgICBidWlsZGVyLFxuICAgIHB1YnMsXG4gICAgbm9uY2UsXG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICBzdHhCYWxhbmNlLFxuICB9OiB7XG4gICAgYnVpbGRlcjogVHJhbnNmZXJCdWlsZGVyO1xuICAgIHB1YnM6IHN0cmluZ1tdO1xuICAgIG5vbmNlOiBudW1iZXI7XG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHM7XG4gICAgc3R4QmFsYW5jZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBidWlsZGVyIGFzIFRyYW5zZmVyQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMjAwJyB9KTtcbiAgICB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICB0eEJ1aWxkZXIuZnJvbVB1YktleShwdWJzKTtcbiAgICB0eEJ1aWxkZXIubm9uY2Uobm9uY2UpO1xuICAgIHR4QnVpbGRlci50byhkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5hbW91bnQoc3R4QmFsYW5jZSk7XG4gICAgaWYgKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMubWVtb0lkKSB7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLm1lbW9JZCk7XG4gICAgfVxuICAgIGNvbnN0IGJhc2VUeG4gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEJyb2FkY2FzdEZvcm1hdCA9IGJhc2VUeG4udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCB0eERlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplVHJhbnNhY3Rpb24odHhCcm9hZGNhc3RGb3JtYXQpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRIZXggPSBzZXJpYWxpemVQYXlsb2FkKHR4RGVzZXJpYWxpemVkLnBheWxvYWQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB7IHJlY292ZXJhYmxlQW1vdW50LCBmZWUgfSA9IGF3YWl0IHRoaXMuZ2V0UmVjb3ZlcmFibGVBbW91bnRBbmRGZWUoXG4gICAgICBzZXJpYWxpemVkSGV4LFxuICAgICAgdHhCcm9hZGNhc3RGb3JtYXQubGVuZ3RoLFxuICAgICAgc3R4QmFsYW5jZVxuICAgICk7XG4gICAgdHhCdWlsZGVyLmFtb3VudChyZWNvdmVyYWJsZUFtb3VudCk7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogZmVlIH0pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCB1c2VzIGFwcHJvcHJpYXRlIGJ1aWxkZXIgYW5kIGJ1aWxkcyB0cmFuc2FjdGlvbiBkZXBlbmRpbmcgb24gdG9rZW4gb3IgbmF0aXZlIGNvaW5cbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gcHVicyAtIHB1YmxpYyBrZXlzXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IHJvb3RBZGRyZXNzRGV0YWlscyAtIHNlbmRlciBhZGRyZXNzIGRldGFpbFxuICAgKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzIC0gcmVjZWl2ZXIgYWRkcmVzcyBkZXRhaWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5vbmNlIC0gd2FsbGV0IG5vbmNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiYWxhbmNlIC0gd2FsbGV0IGJhbGFuY2VcbiAgICogQHBhcmFtIHtTdHJpbmcgfCB1bmRlZmluZWR9IGNvbnRyYWN0QWRkcmVzcyAtIHRva2VuIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmcgfCB1bmRlZmluZWR9IGNvbnRyYWN0TmFtZSAtIHRva2VuIGNvbnRyYWN0IG5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8QmFzZVRyYW5zYWN0aW9uPn0gYnVpbHQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXROYXRpdmVPclRva2VuVHJhbnNhY3Rpb24oe1xuICAgIHB1YnMsXG4gICAgcm9vdEFkZHJlc3NEZXRhaWxzLFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgbm9uY2UsXG4gICAgc3R4QmFsYW5jZSxcbiAgICBjb250cmFjdEFkZHJlc3NJbnB1dCxcbiAgICBjb250cmFjdE5hbWUsXG4gIH06IHtcbiAgICBwdWJzOiBzdHJpbmdbXTtcbiAgICByb290QWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIG5vbmNlOiBudW1iZXI7XG4gICAgc3R4QmFsYW5jZTogc3RyaW5nO1xuICAgIGNvbnRyYWN0QWRkcmVzc0lucHV0Pzogc3RyaW5nO1xuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8eyB0eDogQmFzZVRyYW5zYWN0aW9uOyBidWlsZGVyOiBUcmFuc2ZlckJ1aWxkZXIgfCBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyIH0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gdGhpcy5nZXRUb2tlbk9yTmF0aXZlVHJhbnNmZXJCdWlsZGVyKGNvbnRyYWN0QWRkcmVzc0lucHV0LCBjb250cmFjdE5hbWUpO1xuICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9IGNvbnRyYWN0QWRkcmVzc0lucHV0Py50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGlzVG9rZW4gPSAhIWNvbnRyYWN0QWRkcmVzcyAmJiAhIWNvbnRyYWN0TmFtZTtcbiAgICBsZXQgZmluYWxUeDogQmFzZVRyYW5zYWN0aW9uO1xuICAgIGlmIChpc1Rva2VuKSB7XG4gICAgICBmaW5hbFR4ID0gYXdhaXQgdGhpcy5idWlsZFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgYXMgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcixcbiAgICAgICAgY29udHJhY3RBZGRyZXNzLFxuICAgICAgICBjb250cmFjdE5hbWUsXG4gICAgICAgIHB1YnMsXG4gICAgICAgIG5vbmNlLFxuICAgICAgICByb290QWRkcmVzc0RldGFpbHMsXG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgICAgIHN0eEJhbGFuY2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWxUeCA9IGF3YWl0IHRoaXMuYnVpbGROYXRpdmVUcmFuc2ZlclRyYW5zYWN0aW9uKHtcbiAgICAgICAgYnVpbGRlcjogYnVpbGRlciBhcyBUcmFuc2ZlckJ1aWxkZXIsXG4gICAgICAgIHB1YnMsXG4gICAgICAgIG5vbmNlLFxuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgICAgICBzdHhCYWxhbmNlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0eDogZmluYWxUeCxcbiAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gcmVjb3ZlciBuYXRpdmUgc3R4IG9yIHNpcDEwIHRva2VucyBmcm9tIGJpdGdvIGhvdCAmIGNvbGQgd2FsbGV0c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJhY2t1cEtleSAtIGVuY3J5cHRlZCB3YWxsZXQgYmFja3VwIGtleSAocHVibGljIG9yIHByaXZhdGUpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMudXNlcktleSAtIGVuY3J5cHRlZCB3YWxsZXQgdXNlciBrZXkgKHB1YmxpYyBvciBwcml2YXRlKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLnJvb3RBZGRyZXNzIC0gd2FsbGV0IHJvb3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gLSByZWNlaXZlIGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iaXRnb0tleSAtIGVuY3J5cHRlZCBiaXRnbyBwdWJsaWMga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSAtIHdhbGxldCBwYXNzd29yZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmNvbnRyYWN0SWQgLSBjb250cmFjdCBpZCBvZiB0aGUgdG9rZW4gKG1hbmRhdG9yeSBmb3IgdG9rZW4gcmVjb3ZlcnkpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY292ZXJ5SW5mb3xSZWNvdmVyeVRyYW5zYWN0aW9uPn0gUmVjb3ZlcnlUcmFuc2FjdGlvbi50eEhleCAtIGhleCBvZiBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIChzaWduZWQgb3IgdW5zaWduZWQpXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yb290QWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByb290IGFkZHJlc3MhJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH1cbiAgICBsZXQgY29udHJhY3RBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNvbnRyYWN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwYXJhbXMuY29udHJhY3RJZCkge1xuICAgICAgW2NvbnRyYWN0QWRkcmVzcywgY29udHJhY3ROYW1lXSA9IHBhcmFtcy5jb250cmFjdElkLnNwbGl0KCcuJyk7XG4gICAgICBpZiAoKGNvbnRyYWN0QWRkcmVzcyAmJiAhY29udHJhY3ROYW1lKSB8fCAoY29udHJhY3ROYW1lICYmICFjb250cmFjdEFkZHJlc3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb250cmFjdCBpZCwgcGxlYXNlIHByb3ZpZGUgaXQgaW4gdGhlIGZvcm0gKGNvbnRyYWN0QWRkcmVzcy5jb250cmFjdE5hbWUpJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IGdldElzVW5zaWduZWRTd2VlcChwYXJhbXMpO1xuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXNBc3luYyh0aGlzLmJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogdHJ1ZSB9KTtcbiAgICBjb25zdCByb290QWRkcmVzc0RldGFpbHMgPSBnZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIGNvbnN0IFthY2NvdW50QmFsYW5jZURhdGEsIGFjY291bnROb25jZURhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXROYXRpdmVTdHhCYWxhbmNlRnJvbU5vZGUoeyBhZGRyZXNzOiByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyB9KSxcbiAgICAgIHRoaXMuZ2V0QWNjb3VudE5vbmNlRnJvbU5vZGUoeyBhZGRyZXNzOiByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBiYWxhbmNlID0gTnVtYmVyKGFjY291bnRCYWxhbmNlRGF0YS5iYWxhbmNlKTtcbiAgICBpZiAoIWJhbGFuY2UgfHwgaXNOYU4oYmFsYW5jZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgYW55IGJhbGFuY2UgdG8gcmVjb3ZlciBmb3IgJyArIHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJQdWIgPSBwdWJsaWNLZXlGcm9tQnVmZmVyKGtleXNbMF0ucHVibGljS2V5KTtcbiAgICBjb25zdCBiYWNrdXBQdWIgPSBwdWJsaWNLZXlGcm9tQnVmZmVyKGtleXNbMV0ucHVibGljS2V5KTtcbiAgICBjb25zdCBiaXRnb1B1YktleSA9IHB1YmxpY0tleUZyb21CdWZmZXIoa2V5c1syXS5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IHB1YnMgPSBbcHVibGljS2V5VG9TdHJpbmcodXNlclB1YiksIHB1YmxpY0tleVRvU3RyaW5nKGJhY2t1cFB1YiksIHB1YmxpY0tleVRvU3RyaW5nKGJpdGdvUHViS2V5KV07XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzID0gZ2V0QWRkcmVzc0RldGFpbHMocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIGNvbnN0IG5vbmNlID1cbiAgICAgIHR5cGVvZiBhY2NvdW50Tm9uY2VEYXRhPy5sYXN0X2V4ZWN1dGVkX3R4X25vbmNlID09PSAnbnVtYmVyJyA/IGFjY291bnROb25jZURhdGEubGFzdF9leGVjdXRlZF90eF9ub25jZSArIDEgOiAwO1xuXG4gICAgY29uc3QgeyB0eCwgYnVpbGRlciB9ID0gYXdhaXQgdGhpcy5nZXROYXRpdmVPclRva2VuVHJhbnNhY3Rpb24oe1xuICAgICAgcHVicyxcbiAgICAgIHJvb3RBZGRyZXNzRGV0YWlscyxcbiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgICBub25jZSxcbiAgICAgIHN0eEJhbGFuY2U6IGFjY291bnRCYWxhbmNlRGF0YS5iYWxhbmNlLFxuICAgICAgY29udHJhY3RBZGRyZXNzSW5wdXQ6IGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgIGNvbnRyYWN0TmFtZTogY29udHJhY3ROYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZm9ybWF0Rm9yT2ZmbGluZVZhdWx0KHR4KTtcbiAgICB9XG4gICAgLy8gY2hlY2sgdGhlIHByaXZhdGUga2V5ICYgc2lnblxuICAgIGlmICgha2V5c1swXS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXJLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3QgdXNlcktleSA9IGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkoa2V5c1swXS5wcml2YXRlS2V5KTtcbiAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHByaXZhdGVLZXlUb1N0cmluZyh1c2VyS2V5KSB9KTtcblxuICAgIGNvbnN0IGhhbGZTaWduZWRUeCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEhleEhhbGZTaWduZWQgPSBoYWxmU2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCBidWlsZGVyMiA9IHRoaXMuZ2V0VG9rZW5Pck5hdGl2ZVRyYW5zZmVyQnVpbGRlcihjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0TmFtZSk7XG4gICAgYnVpbGRlcjIuZnJvbSh0eEhleEhhbGZTaWduZWQpO1xuXG4gICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFja3VwS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IGJhY2t1cEtleSA9IGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkoa2V5c1sxXS5wcml2YXRlS2V5KTtcbiAgICBidWlsZGVyMi5zaWduKHsga2V5OiBwcml2YXRlS2V5VG9TdHJpbmcoYmFja3VwS2V5KSB9KTtcblxuICAgIGNvbnN0IGZ1bGx5U2lnbmVkVHggPSBhd2FpdCBidWlsZGVyMi5idWlsZCgpO1xuICAgIGNvbnN0IGZ1bGx5U2lnbmVkVHhIZXggPSBmdWxseVNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IGZ1bGx5U2lnbmVkVHhIZXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleShwYXJhbXM6IEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zKSB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufVxuIl19
605
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFpQjhCO0FBQzlCLGlEQUFxRjtBQUNyRix1REFlOEI7QUFDOUIsK0RBQXFFO0FBQ3JFLGdFQUFxQztBQUdyQyx3QkFBMkI7QUFDM0IsK0JBQWtEO0FBRWxELHVDQUE2RztBQWU3RyxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQXFDO1FBQ2xELE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hFLENBQUM7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QUMsZUFBZSxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEscUNBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBQSxpQ0FBa0IsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLGdCQUFnQjtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLElBQUksb0NBQXlCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFwc0JELGtCQW9zQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgQml0R29CYXNlLFxuICBFbnZpcm9ubWVudHMsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBLZXlQYWlyLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBidWZmZXJDVkZyb21TdHJpbmcsXG4gIENsYXJpdHlUeXBlLFxuICBDbGFyaXR5VmFsdWUsXG4gIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXksXG4gIGN2VG9TdHJpbmcsXG4gIGN2VG9WYWx1ZSxcbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbixcbiAgbm9uZUNWLFxuICBwcml2YXRlS2V5VG9TdHJpbmcsXG4gIHB1YmxpY0tleUZyb21CdWZmZXIsXG4gIHB1YmxpY0tleVRvU3RyaW5nLFxuICBzb21lQ1YsXG4gIHN0YW5kYXJkUHJpbmNpcGFsQ1YsXG4gIHVpbnRDVixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgc2VyaWFsaXplUGF5bG9hZCB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zL2Rpc3QvcGF5bG9hZCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmltcG9ydCB7IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMsIFN0eFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsIFN0eFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBmaW5kQ29udHJhY3RUb2tlbk5hbWVVc2luZ0NvbnRyYWN0LCBmaW5kVG9rZW5OYW1lQnlDb250cmFjdCwgZ2V0QWRkcmVzc0RldGFpbHMgfSBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBBZGRyZXNzRGV0YWlscyxcbiAgTmF0aXZlU3R4QmFsYW5jZSxcbiAgUmVjb3ZlcnlJbmZvLFxuICBSZWNvdmVyeU9wdGlvbnMsXG4gIFJlY292ZXJ5VHJhbnNhY3Rpb24sXG4gIFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlLFxuICBTdHhOb25jZVJlc3BvbnNlLFxuICBTdHhUeG5GZWVFc3RpbWF0aW9uUmVzcG9uc2UsXG4gIFR4RGF0YSxcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9saWIvdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2xpYi9mdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFN0eCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBTdHgoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvbihjb2luQ29uZmlnOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMub25jaGFpbjtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQsIHRoZW4gbWFrZSBzdXJlIGl0IG1hdGNoZXMgdGhlIGJhc2UgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlBZGRyZXNzT3B0aW9uc30gcGFyYW1zXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJhc2VBZGRyZXNzIC0gdGhlIGJhc2UgYWRkcmVzcyBmcm9tIHRoZSB3YWxsZXRcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMgfSA9IHBhcmFtcztcbiAgICBpZiAoIWtleWNoYWlucyB8fCBrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Y2hhaW5zJyk7XG4gICAgfVxuICAgIGNvbnN0IHB1YnMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT4gU3R4TGliLlV0aWxzLnhwdWJUb1NUWFB1YmtleShrZXljaGFpbi5wdWIpKTtcbiAgICBjb25zdCBhZGRyZXNzVmVyc2lvbiA9IFN0eExpYi5VdGlscy5nZXRBZGRyZXNzVmVyc2lvbihhZGRyZXNzKTtcbiAgICBjb25zdCBiYXNlQWRkcmVzcyA9IFN0eExpYi5VdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHVicywgYWRkcmVzc1ZlcnNpb24pLmFkZHJlc3M7XG4gICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzLCBiYXNlQWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgU3RhY2tzIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBTdHhMaWIuS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgU3R4TGliLktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcblxuICAgIGlmICgha2V5cy54cHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgeHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnhwdWIsXG4gICAgICBwcnY6IGtleXMueHBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHJpdmF0ZSBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFBydihwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHN0YWNrcyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTdHhTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3QgcHJ2S2V5cyA9IHBhcmFtcy5wcnYgaW5zdGFuY2VvZiBBcnJheSA/IHBhcmFtcy5wcnYgOiBbcGFyYW1zLnBydl07XG4gICAgcHJ2S2V5cy5mb3JFYWNoKChwcnYpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiBwcnYgfSkpO1xuICAgIGlmIChwYXJhbXMucHViS2V5cykgdHhCdWlsZGVyLmZyb21QdWJLZXkocGFyYW1zLnB1YktleXMpO1xuICAgIC8vIGlmIChwYXJhbXMubnVtYmVyU2lnbmF0dXJlKSB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcyhwYXJhbXMubnVtYmVyU2lnbmF0dXJlKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1lc3NhZ2UgcGFzc2VkIHRvIHNpZ25NZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHhIZXggPSB7XG4gICAgICB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPj0gMiA/IHR4SGV4IDogeyBoYWxmU2lnbmVkOiB0eEhleCB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gYSBTdGFja3MgdHJhbnNhY3Rpb24gZnJvbSB0eEhleFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTdHhUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhIZXggfHwgKHBhcmFtcy5oYWxmU2lnbmVkICYmIHBhcmFtcy5oYWxmU2lnbmVkLnR4SGV4KTtcbiAgICBpZiAoIXR4SGV4IHx8ICFwYXJhbXMuZmVlSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGV4cGxhaW4gdHggcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eEhleCk7XG5cbiAgICBpZiAocGFyYW1zLnB1YmxpY0tleXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocGFyYW1zLnB1YmxpY0tleXMpO1xuICAgICAgaWYgKHBhcmFtcy5wdWJsaWNLZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBkZWZpbml0ZWx5IGEgc2luZ2xlIHNpZyB0eFxuICAgICAgICB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgaWYgKHR4LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICAvLyBjaGVjayBpZiBpdCBpcyBhIHRva2VuIHRyYW5zYWN0aW9uIG9yIG5hdGl2ZSBjb2luIHRyYW5zYWN0aW9uXG4gICAgICBsZXQgdHJhbnNhY3Rpb25SZWNpcGllbnQ6IFRyYW5zYWN0aW9uUmVjaXBpZW50O1xuICAgICAgbGV0IG91dHB1dEFtb3VudDogc3RyaW5nO1xuICAgICAgbGV0IG1lbW86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MgJiYgdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IGN2VG9WYWx1ZSh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnRvU3RyaW5nKCk7XG4gICAgICAgIHRyYW5zYWN0aW9uUmVjaXBpZW50ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGN2VG9TdHJpbmcodHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzWzJdKSxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICB0b2tlbk5hbWU6IGZpbmRUb2tlbk5hbWVCeUNvbnRyYWN0KHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lKSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGggPT09IDQgJiZcbiAgICAgICAgICB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSA9PT0gQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lXG4gICAgICAgICkge1xuICAgICAgICAgIG1lbW8gPSBCdWZmZXIuZnJvbSh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUuYnVmZmVyKS50b1N0cmluZygpO1xuICAgICAgICAgIHRyYW5zYWN0aW9uUmVjaXBpZW50WydtZW1vJ10gPSBtZW1vO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRBbW91bnQgPSB0eEpzb24ucGF5bG9hZC5hbW91bnQ7XG4gICAgICAgIG1lbW8gPSB0eEpzb24ucGF5bG9hZC5tZW1vO1xuICAgICAgICB0cmFuc2FjdGlvblJlY2lwaWVudCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB0eEpzb24ucGF5bG9hZC50byxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICBtZW1vOiBtZW1vLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFt0cmFuc2FjdGlvblJlY2lwaWVudF07XG5cbiAgICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ21lbW8nLCAndHlwZSddO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgICAgbWVtbzogbWVtbyxcbiAgICAgICAgdHlwZTogdHgudHlwZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHR4LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFtcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2ZlZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ2NvbnRyYWN0QWRkcmVzcycsXG4gICAgICAgICdjb250cmFjdE5hbWUnLFxuICAgICAgICAnY29udHJhY3RGdW5jdGlvbicsXG4gICAgICAgICdjb250cmFjdEZ1bmN0aW9uQXJncycsXG4gICAgICBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAnJyxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHR4SnNvbi5mZWUsXG4gICAgICAgIHR5cGU6IHR4LnR5cGUsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogdHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLFxuICAgICAgICBjb250cmFjdE5hbWU6IHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSxcbiAgICAgICAgY29udHJhY3RGdW5jdGlvbjogdHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLFxuICAgICAgICBjb250cmFjdEZ1bmN0aW9uQXJnczogdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFVSTHMgb2Ygc29tZSBhY3RpdmUgcHVibGljIG5vZGVzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vZGUgdXJsXG4gICAqL1xuICBnZXRQdWJsaWNOb2RlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5zdHhOb2RlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuYXRpdmUgc3RhY2tzIGJhbGFuY2UgZm9yIGFuIGFjY291bnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgLSBzdGFja3MgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxOYXRpdmVTdHhCYWxhbmNlPn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXROYXRpdmVTdHhCYWxhbmNlRnJvbU5vZGUoeyBhZGRyZXNzIH06IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPE5hdGl2ZVN0eEJhbGFuY2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0UHVibGljTm9kZVVybCgpfS9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHthZGRyZXNzfS9iYWxhbmNlcy9zdHhgO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KGVuZHBvaW50KTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5OiBOYXRpdmVTdHhCYWxhbmNlID0gcmVzcG9uc2UuYm9keTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGdldCBuYXRpdmUgc3R4IGJhbGFuY2UgZnJvbSBub2RlOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNpbmdsZSBmdW5naWJsZSB0b2tlbiBiYWxhbmNlIGZvciBhbiBhY2NvdW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gc3RhY2tzIGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFzc2V0SWQgLSBmdW5naWJsZSB0b2tlbiBhc3NldCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZT59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0U2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2VGcm9tTm9kZSh7XG4gICAgYWRkcmVzcyxcbiAgICBhc3NldElkLFxuICB9OiB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGFzc2V0SWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0UHVibGljTm9kZVVybCgpfS9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHthZGRyZXNzfS9iYWxhbmNlcy9mdC8ke2Fzc2V0SWR9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldChlbmRwb2ludCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keTogU2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gZ2V0IG5hdGl2ZSBzdHggYmFsYW5jZSBmcm9tIG5vZGU6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbm9uY2UgZGF0YSBzcGVjaWZpYyB0byBhbiBhY2NvdW50IGZyb20gYSBwdWJsaWMgbm9kZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIHN0YWNrcyBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFN0eE5vbmNlUmVzcG9uc2U+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnROb25jZUZyb21Ob2RlKHsgYWRkcmVzcyB9OiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxTdHhOb25jZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldFB1YmxpY05vZGVVcmwoKX0vZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke2FkZHJlc3N9L25vbmNlc2A7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQoZW5kcG9pbnQpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHk6IFN0eE5vbmNlUmVzcG9uc2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gZ2V0IGFjY291bnQgbm9uY2UgZnJvbSBub2RlOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YWNrcyB0cmFuc2FjdGlvbiBlc3RpbWF0ZWQgZmVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eEhleCAtIGhleCBvZiBzdGFja3MgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKiBAcGFyYW0ge051bWJlcn0gdHhIZXhMZW5ndGggLSBsZW5ndGggb2YgYnVpbHQgc2VyaWFsaXplZCB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxOdW1iZXI+fSAtIGZlZSBlc3RpbWF0ZSAodGFraW5nIHRoZSBsb3dlc3QpXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VHJhbnNhY3Rpb25GZWVFc3RpbWF0aW9uKHtcbiAgICB0eEhleCxcbiAgICB0eEhleExlbmd0aCxcbiAgfToge1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhIZXhMZW5ndGg6IG51bWJlcjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldFB1YmxpY05vZGVVcmwoKX0vdjIvZmVlcy90cmFuc2FjdGlvbmA7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICB0cmFuc2FjdGlvbl9wYXlsb2FkOiB0eEhleCxcbiAgICAgIGVzdGltYXRlZF9sZW46IHR4SGV4TGVuZ3RoLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5wb3N0KGVuZHBvaW50KS5zZW5kKHJlcXVlc3RCb2R5KTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5OiBTdHhUeG5GZWVFc3RpbWF0aW9uUmVzcG9uc2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgaWYgKGJvZHkuZXN0aW1hdGlvbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBlc3RpbWF0aW9uIGxlbmd0aCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvZHkuZXN0aW1hdGlvbnNbMF0uZmVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBmZWUgZXN0aW1hdGlvbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBmb3Igb2ZmbGluZSB2YXVsdCBzaWduaW5nXG4gICAqIEBwYXJhbSB7QmFzZVRyYW5zYWN0aW9ufSB0eCAtIGJhc2UgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3ZlcnlJbmZvPn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBmb3JtYXRGb3JPZmZsaW5lVmF1bHQodHg6IEJhc2VUcmFuc2FjdGlvbik6IFByb21pc2U8UmVjb3ZlcnlJbmZvPiB7XG4gICAgY29uc3QgdHhKc29uOiBUeERhdGEgPSB0eC50b0pzb24oKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICBmZWVJbmZvOiB7IGZlZTogdHhKc29uLmZlZSB9LFxuICAgIH0pKSBhcyBSZWNvdmVyeUluZm87XG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5jb2luID0gdGhpcy5nZXRDaGFpbigpO1xuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uZmVlSW5mbyA9IHsgZmVlOiB0eEpzb24uZmVlIH07XG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi50eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZWNvdmVyYWJsZSBhbW91bnQgJiBmZWUgYWZ0ZXIgc3VidHJhY3RpbmcgdGhlIHR4biBmZWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlcmlhbGl6ZWRIZXggLSBzZXJpYWxpemVkIHR4biBoZXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHR4SGV4TGVuZ3RoIC0gZGVzZXJpYWxpemVkIHR4biBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGJhbGFuY2UgLSB0b3RhbCBhY2NvdW50IGJhbGFuY2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuQmFsYW5jZSAtIHRvdGFsIHRva2VuIGJhbGFuY2VcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UmVjb3ZlcmFibGVBbW91bnRBbmRGZWUoXG4gICAgc2VyaWFsaXplZEhleDogc3RyaW5nLFxuICAgIHR4SGV4TGVuZ3RoOiBudW1iZXIsXG4gICAgYmFsYW5jZTogc3RyaW5nLFxuICAgIHRva2VuQmFsYW5jZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCBlc3RpbWF0ZWRGZWUgPSBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uRmVlRXN0aW1hdGlvbih7XG4gICAgICB0eEhleDogc2VyaWFsaXplZEhleCxcbiAgICAgIHR4SGV4TGVuZ3RoOiB0eEhleExlbmd0aCxcbiAgICB9KTtcbiAgICBjb25zdCBiYWxhbmNlQk4gPSBuZXcgQmlnTnVtYmVyKGJhbGFuY2UpO1xuICAgIGNvbnN0IGZlZUJOID0gbmV3IEJpZ051bWJlcihlc3RpbWF0ZWRGZWUpO1xuICAgIGlmIChiYWxhbmNlQk4uaXNMZXNzVGhhbihmZWVCTikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5zdWZmaWNpZW50IGJhbGFuY2UgdG8gYnVpbGQgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZWNvdmVyYWJsZUFtb3VudDogdG9rZW5CYWxhbmNlID8/IGJhbGFuY2VCTi5taW51cyhmZWVCTikudG9TdHJpbmcoKSxcbiAgICAgIGZlZTogZmVlQk4udG9TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBmaW5kIHRoZSByaWdodCBidWlsZGVyIGZvciB0b2tlbiBvciBuYXRpdmUgY29pbiB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3RBZGRyZXNzIC0gdG9rZW4gY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3ROYW1lIC0gdG9rZW4gY29udHJhY3QgbmFtZVxuICAgKiBAcmV0dXJucyB7VHJhbnNmZXJCdWlsZGVyfEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXJ9XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VG9rZW5Pck5hdGl2ZVRyYW5zZmVyQnVpbGRlcihcbiAgICBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmcsXG4gICAgY29udHJhY3ROYW1lPzogc3RyaW5nXG4gICk6IFRyYW5zZmVyQnVpbGRlciB8IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIge1xuICAgIGNvbnN0IGlzVG9rZW4gPSAhIWNvbnRyYWN0QWRkcmVzcyAmJiAhIWNvbnRyYWN0TmFtZTtcbiAgICBsZXQgZmFjdG9yeTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeTtcbiAgICBpZiAoaXNUb2tlbikge1xuICAgICAgY29uc3QgdG9rZW5OYW1lID0gZmluZFRva2VuTmFtZUJ5Q29udHJhY3QoY29udHJhY3RBZGRyZXNzLCBjb250cmFjdE5hbWUpO1xuICAgICAgaWYgKCF0b2tlbk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3Mgb3IgY29udHJhY3QgbmFtZSwgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0b2tlbk5hbWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgICB9XG4gICAgbGV0IGJ1aWxkZXI6IFRyYW5zZmVyQnVpbGRlciB8IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgaWYgKGlzVG9rZW4pIHtcbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBidWlsZCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0Z1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXJ9IGJ1aWxkZXIgLSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3MgLSB0b2tlbiBjb250cmFjdCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWUgLSB0b2tlbiBjb250cmFjdCBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nW119IHB1YnMgLSBhY2NvdW50IHB1YmxpYyBrZXlzXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBub25jZSAtIGFjY291bnQgbm9uY2VcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gcm9vdEFkZHJlc3NEZXRhaWxzIC0gcm9vdCBhZGRyZXNzIGRldGFpbHNcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyAtIHJlY2VpdmUgYWRkcmVzcyBkZXRhaWxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHhCYWxhbmNlIC0gbmF0aXZlIHN0eCBiYWxhbmNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj59IC0gYnVpbHQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgYnVpbGRlcixcbiAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgY29udHJhY3ROYW1lLFxuICAgIHB1YnMsXG4gICAgbm9uY2UsXG4gICAgcm9vdEFkZHJlc3NEZXRhaWxzLFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgc3R4QmFsYW5jZSxcbiAgfToge1xuICAgIGJ1aWxkZXI6IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG4gICAgY29udHJhY3ROYW1lOiBzdHJpbmc7XG4gICAgcHViczogc3RyaW5nW107XG4gICAgbm9uY2U6IG51bWJlcjtcbiAgICByb290QWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIHN0eEJhbGFuY2U6IHN0cmluZztcbiAgfSk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gYnVpbGRlciBhcyBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyO1xuICAgIGNvbnN0IGNvbnRyYWN0VG9rZW5OYW1lID0gZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdChjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0TmFtZSk7XG4gICAgaWYgKCFjb250cmFjdFRva2VuTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3Mgb3IgY29udHJhY3QgbmFtZSwgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBjb25zdCBhc3NldElkID0gYCR7Y29udHJhY3RBZGRyZXNzfS4ke2NvbnRyYWN0TmFtZX06OiR7Y29udHJhY3RUb2tlbk5hbWV9YDtcbiAgICAvLyBmZXRjaCB0aGUgdG9rZW4gYmFsYW5jZVxuICAgIGNvbnN0IHRva2VuQmFsYW5jZURhdGEgPSBhd2FpdCB0aGlzLmdldFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlRnJvbU5vZGUoe1xuICAgICAgYWRkcmVzczogcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MsXG4gICAgICBhc3NldElkLFxuICAgIH0pO1xuICAgIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRva2VuQmFsYW5jZURhdGE/LmJhbGFuY2U7XG4gICAgaWYgKCFOdW1iZXIodG9rZW5CYWxhbmNlKSB8fCBpc05hTihOdW1iZXIodG9rZW5CYWxhbmNlKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG5vIHRva2VuIGJhbGFuY2UgZm91bmQgdG8gcmVjb3ZlciBmb3IgYWRkcmVzczogJHtyb290QWRkcmVzc0RldGFpbHMuYWRkcmVzc30sIHRva2VuOiAke2Fzc2V0SWR9YFxuICAgICAgKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzIwMCcgfSk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocHVicyk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKG5vbmNlKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZShjb250cmFjdE5hbWUpO1xuICAgIGlmIChjb250cmFjdFRva2VuTmFtZSkge1xuICAgICAgdHhCdWlsZGVyLnRva2VuTmFtZShjb250cmFjdFRva2VuTmFtZSk7XG4gICAgfVxuICAgIHR4QnVpbGRlci5mdW5jdGlvbk5hbWUoJ3RyYW5zZmVyJyk7XG4gICAgY29uc3QgZnVuY3Rpb25BcmdzOiBDbGFyaXR5VmFsdWVbXSA9IFtcbiAgICAgIHVpbnRDVih0b2tlbkJhbGFuY2UpLFxuICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVihyb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyksXG4gICAgICBzdGFuZGFyZFByaW5jaXBhbENWKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyksXG4gICAgXTtcbiAgICBpZiAoZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIGZ1bmN0aW9uQXJncy5wdXNoKHNvbWVDVihidWZmZXJDVkZyb21TdHJpbmcoZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9uQXJncy5wdXNoKG5vbmVDVigpKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLmZ1bmN0aW9uQXJncyhmdW5jdGlvbkFyZ3MpO1xuICAgIGNvbnN0IGJhc2VUeG4gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEJyb2FkY2FzdEZvcm1hdCA9IGJhc2VUeG4udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCB0eERlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplVHJhbnNhY3Rpb24odHhCcm9hZGNhc3RGb3JtYXQpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRIZXggPSBzZXJpYWxpemVQYXlsb2FkKHR4RGVzZXJpYWxpemVkLnBheWxvYWQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB7IHJlY292ZXJhYmxlQW1vdW50LCBmZWUgfSA9IGF3YWl0IHRoaXMuZ2V0UmVjb3ZlcmFibGVBbW91bnRBbmRGZWUoXG4gICAgICBzZXJpYWxpemVkSGV4LFxuICAgICAgdHhCcm9hZGNhc3RGb3JtYXQubGVuZ3RoLFxuICAgICAgc3R4QmFsYW5jZSxcbiAgICAgIHRva2VuQmFsYW5jZVxuICAgICk7XG4gICAgZnVuY3Rpb25BcmdzWzBdID0gdWludENWKHJlY292ZXJhYmxlQW1vdW50KTtcbiAgICB0eEJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogZmVlIH0pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYnVpbGQgbmF0aXZlIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNmZXJCdWlsZGVyfSBidWlsZGVyIC0gdHJhbnNmZXIgYnVpbGRlclxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBwdWJzIC0gYWNjb3VudCBwdWJsaWMga2V5c1xuICAgKiBAcGFyYW0ge051bWJlcn0gbm9uY2UgLSBhY2NvdW50IG5vbmNlXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMgLSByZWNlaXZlIGFkZHJlc3MgZGV0YWlsc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3R4QmFsYW5jZSAtIG5hdGl2ZSBzdHggYmFsYW5jZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+fSAtIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGROYXRpdmVUcmFuc2ZlclRyYW5zYWN0aW9uKHtcbiAgICBidWlsZGVyLFxuICAgIHB1YnMsXG4gICAgbm9uY2UsXG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICBzdHhCYWxhbmNlLFxuICB9OiB7XG4gICAgYnVpbGRlcjogVHJhbnNmZXJCdWlsZGVyO1xuICAgIHB1YnM6IHN0cmluZ1tdO1xuICAgIG5vbmNlOiBudW1iZXI7XG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHM7XG4gICAgc3R4QmFsYW5jZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBidWlsZGVyIGFzIFRyYW5zZmVyQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMjAwJyB9KTtcbiAgICB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICB0eEJ1aWxkZXIuZnJvbVB1YktleShwdWJzKTtcbiAgICB0eEJ1aWxkZXIubm9uY2Uobm9uY2UpO1xuICAgIHR4QnVpbGRlci50byhkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5hbW91bnQoc3R4QmFsYW5jZSk7XG4gICAgaWYgKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMubWVtb0lkKSB7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLm1lbW9JZCk7XG4gICAgfVxuICAgIGNvbnN0IGJhc2VUeG4gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEJyb2FkY2FzdEZvcm1hdCA9IGJhc2VUeG4udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCB0eERlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplVHJhbnNhY3Rpb24odHhCcm9hZGNhc3RGb3JtYXQpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRIZXggPSBzZXJpYWxpemVQYXlsb2FkKHR4RGVzZXJpYWxpemVkLnBheWxvYWQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB7IHJlY292ZXJhYmxlQW1vdW50LCBmZWUgfSA9IGF3YWl0IHRoaXMuZ2V0UmVjb3ZlcmFibGVBbW91bnRBbmRGZWUoXG4gICAgICBzZXJpYWxpemVkSGV4LFxuICAgICAgdHhCcm9hZGNhc3RGb3JtYXQubGVuZ3RoLFxuICAgICAgc3R4QmFsYW5jZVxuICAgICk7XG4gICAgdHhCdWlsZGVyLmFtb3VudChyZWNvdmVyYWJsZUFtb3VudCk7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogZmVlIH0pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCB1c2VzIGFwcHJvcHJpYXRlIGJ1aWxkZXIgYW5kIGJ1aWxkcyB0cmFuc2FjdGlvbiBkZXBlbmRpbmcgb24gdG9rZW4gb3IgbmF0aXZlIGNvaW5cbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gcHVicyAtIHB1YmxpYyBrZXlzXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IHJvb3RBZGRyZXNzRGV0YWlscyAtIHNlbmRlciBhZGRyZXNzIGRldGFpbFxuICAgKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzIC0gcmVjZWl2ZXIgYWRkcmVzcyBkZXRhaWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5vbmNlIC0gd2FsbGV0IG5vbmNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiYWxhbmNlIC0gd2FsbGV0IGJhbGFuY2VcbiAgICogQHBhcmFtIHtTdHJpbmcgfCB1bmRlZmluZWR9IGNvbnRyYWN0QWRkcmVzcyAtIHRva2VuIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmcgfCB1bmRlZmluZWR9IGNvbnRyYWN0TmFtZSAtIHRva2VuIGNvbnRyYWN0IG5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8QmFzZVRyYW5zYWN0aW9uPn0gYnVpbHQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXROYXRpdmVPclRva2VuVHJhbnNhY3Rpb24oe1xuICAgIHB1YnMsXG4gICAgcm9vdEFkZHJlc3NEZXRhaWxzLFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgbm9uY2UsXG4gICAgc3R4QmFsYW5jZSxcbiAgICBjb250cmFjdEFkZHJlc3NJbnB1dCxcbiAgICBjb250cmFjdE5hbWUsXG4gIH06IHtcbiAgICBwdWJzOiBzdHJpbmdbXTtcbiAgICByb290QWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIG5vbmNlOiBudW1iZXI7XG4gICAgc3R4QmFsYW5jZTogc3RyaW5nO1xuICAgIGNvbnRyYWN0QWRkcmVzc0lucHV0Pzogc3RyaW5nO1xuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8eyB0eDogQmFzZVRyYW5zYWN0aW9uOyBidWlsZGVyOiBUcmFuc2ZlckJ1aWxkZXIgfCBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyIH0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gdGhpcy5nZXRUb2tlbk9yTmF0aXZlVHJhbnNmZXJCdWlsZGVyKGNvbnRyYWN0QWRkcmVzc0lucHV0LCBjb250cmFjdE5hbWUpO1xuICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9IGNvbnRyYWN0QWRkcmVzc0lucHV0Py50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGlzVG9rZW4gPSAhIWNvbnRyYWN0QWRkcmVzcyAmJiAhIWNvbnRyYWN0TmFtZTtcbiAgICBsZXQgZmluYWxUeDogQmFzZVRyYW5zYWN0aW9uO1xuICAgIGlmIChpc1Rva2VuKSB7XG4gICAgICBmaW5hbFR4ID0gYXdhaXQgdGhpcy5idWlsZFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgYXMgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcixcbiAgICAgICAgY29udHJhY3RBZGRyZXNzLFxuICAgICAgICBjb250cmFjdE5hbWUsXG4gICAgICAgIHB1YnMsXG4gICAgICAgIG5vbmNlLFxuICAgICAgICByb290QWRkcmVzc0RldGFpbHMsXG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgICAgIHN0eEJhbGFuY2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWxUeCA9IGF3YWl0IHRoaXMuYnVpbGROYXRpdmVUcmFuc2ZlclRyYW5zYWN0aW9uKHtcbiAgICAgICAgYnVpbGRlcjogYnVpbGRlciBhcyBUcmFuc2ZlckJ1aWxkZXIsXG4gICAgICAgIHB1YnMsXG4gICAgICAgIG5vbmNlLFxuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgICAgICBzdHhCYWxhbmNlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0eDogZmluYWxUeCxcbiAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gcmVjb3ZlciBuYXRpdmUgc3R4IG9yIHNpcDEwIHRva2VucyBmcm9tIGJpdGdvIGhvdCAmIGNvbGQgd2FsbGV0c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJhY2t1cEtleSAtIGVuY3J5cHRlZCB3YWxsZXQgYmFja3VwIGtleSAocHVibGljIG9yIHByaXZhdGUpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMudXNlcktleSAtIGVuY3J5cHRlZCB3YWxsZXQgdXNlciBrZXkgKHB1YmxpYyBvciBwcml2YXRlKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLnJvb3RBZGRyZXNzIC0gd2FsbGV0IHJvb3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gLSByZWNlaXZlIGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iaXRnb0tleSAtIGVuY3J5cHRlZCBiaXRnbyBwdWJsaWMga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSAtIHdhbGxldCBwYXNzd29yZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmNvbnRyYWN0SWQgLSBjb250cmFjdCBpZCBvZiB0aGUgdG9rZW4gKG1hbmRhdG9yeSBmb3IgdG9rZW4gcmVjb3ZlcnkpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY292ZXJ5SW5mb3xSZWNvdmVyeVRyYW5zYWN0aW9uPn0gUmVjb3ZlcnlUcmFuc2FjdGlvbi50eEhleCAtIGhleCBvZiBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIChzaWduZWQgb3IgdW5zaWduZWQpXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yb290QWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByb290IGFkZHJlc3MhJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH1cbiAgICBsZXQgY29udHJhY3RBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNvbnRyYWN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwYXJhbXMuY29udHJhY3RJZCkge1xuICAgICAgW2NvbnRyYWN0QWRkcmVzcywgY29udHJhY3ROYW1lXSA9IHBhcmFtcy5jb250cmFjdElkLnNwbGl0KCcuJyk7XG4gICAgICBpZiAoKGNvbnRyYWN0QWRkcmVzcyAmJiAhY29udHJhY3ROYW1lKSB8fCAoY29udHJhY3ROYW1lICYmICFjb250cmFjdEFkZHJlc3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb250cmFjdCBpZCwgcGxlYXNlIHByb3ZpZGUgaXQgaW4gdGhlIGZvcm0gKGNvbnRyYWN0QWRkcmVzcy5jb250cmFjdE5hbWUpJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IGdldElzVW5zaWduZWRTd2VlcChwYXJhbXMpO1xuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXModGhpcy5iaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfSk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gZ2V0QWRkcmVzc0RldGFpbHMocGFyYW1zLnJvb3RBZGRyZXNzKTtcbiAgICBjb25zdCBbYWNjb3VudEJhbGFuY2VEYXRhLCBhY2NvdW50Tm9uY2VEYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0TmF0aXZlU3R4QmFsYW5jZUZyb21Ob2RlKHsgYWRkcmVzczogcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MgfSksXG4gICAgICB0aGlzLmdldEFjY291bnROb25jZUZyb21Ob2RlKHsgYWRkcmVzczogcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MgfSksXG4gICAgXSk7XG4gICAgY29uc3QgYmFsYW5jZSA9IE51bWJlcihhY2NvdW50QmFsYW5jZURhdGEuYmFsYW5jZSk7XG4gICAgaWYgKCFiYWxhbmNlIHx8IGlzTmFOKGJhbGFuY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGFueSBiYWxhbmNlIHRvIHJlY292ZXIgZm9yICcgKyBwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIH1cbiAgICBjb25zdCB1c2VyUHViID0gcHVibGljS2V5RnJvbUJ1ZmZlcihrZXlzWzBdLnB1YmxpY0tleSk7XG4gICAgY29uc3QgYmFja3VwUHViID0gcHVibGljS2V5RnJvbUJ1ZmZlcihrZXlzWzFdLnB1YmxpY0tleSk7XG4gICAgY29uc3QgYml0Z29QdWJLZXkgPSBwdWJsaWNLZXlGcm9tQnVmZmVyKGtleXNbMl0ucHVibGljS2V5KTtcbiAgICBjb25zdCBwdWJzID0gW3B1YmxpY0tleVRvU3RyaW5nKHVzZXJQdWIpLCBwdWJsaWNLZXlUb1N0cmluZyhiYWNrdXBQdWIpLCBwdWJsaWNLZXlUb1N0cmluZyhiaXRnb1B1YktleSldO1xuXG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyA9IGdldEFkZHJlc3NEZXRhaWxzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICBjb25zdCBub25jZSA9XG4gICAgICB0eXBlb2YgYWNjb3VudE5vbmNlRGF0YT8ubGFzdF9leGVjdXRlZF90eF9ub25jZSA9PT0gJ251bWJlcicgPyBhY2NvdW50Tm9uY2VEYXRhLmxhc3RfZXhlY3V0ZWRfdHhfbm9uY2UgKyAxIDogMDtcblxuICAgIGNvbnN0IHsgdHgsIGJ1aWxkZXIgfSA9IGF3YWl0IHRoaXMuZ2V0TmF0aXZlT3JUb2tlblRyYW5zYWN0aW9uKHtcbiAgICAgIHB1YnMsXG4gICAgICByb290QWRkcmVzc0RldGFpbHMsXG4gICAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgICAgbm9uY2UsXG4gICAgICBzdHhCYWxhbmNlOiBhY2NvdW50QmFsYW5jZURhdGEuYmFsYW5jZSxcbiAgICAgIGNvbnRyYWN0QWRkcmVzc0lucHV0OiBjb250cmFjdEFkZHJlc3MsXG4gICAgICBjb250cmFjdE5hbWU6IGNvbnRyYWN0TmFtZSxcbiAgICB9KTtcblxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZvcm1hdEZvck9mZmxpbmVWYXVsdCh0eCk7XG4gICAgfVxuICAgIC8vIGNoZWNrIHRoZSBwcml2YXRlIGtleSAmIHNpZ25cbiAgICBpZiAoIWtleXNbMF0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJLZXkgPSBjcmVhdGVTdGFja3NQcml2YXRlS2V5KGtleXNbMF0ucHJpdmF0ZUtleSk7XG4gICAgYnVpbGRlci5zaWduKHsga2V5OiBwcml2YXRlS2V5VG9TdHJpbmcodXNlcktleSkgfSk7XG5cbiAgICBjb25zdCBoYWxmU2lnbmVkVHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhIZXhIYWxmU2lnbmVkID0gaGFsZlNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgY29uc3QgYnVpbGRlcjIgPSB0aGlzLmdldFRva2VuT3JOYXRpdmVUcmFuc2ZlckJ1aWxkZXIoY29udHJhY3RBZGRyZXNzLCBjb250cmFjdE5hbWUpO1xuICAgIGJ1aWxkZXIyLmZyb20odHhIZXhIYWxmU2lnbmVkKTtcblxuICAgIGlmICgha2V5c1sxXS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhY2t1cEtleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICBjb25zdCBiYWNrdXBLZXkgPSBjcmVhdGVTdGFja3NQcml2YXRlS2V5KGtleXNbMV0ucHJpdmF0ZUtleSk7XG4gICAgYnVpbGRlcjIuc2lnbih7IGtleTogcHJpdmF0ZUtleVRvU3RyaW5nKGJhY2t1cEtleSkgfSk7XG5cbiAgICBjb25zdCBmdWxseVNpZ25lZFR4ID0gYXdhaXQgYnVpbGRlcjIuYnVpbGQoKTtcbiAgICBjb25zdCBmdWxseVNpZ25lZFR4SGV4ID0gZnVsbHlTaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBmdWxseVNpZ25lZFR4SGV4LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkocGFyYW1zOiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcykge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn1cbiJdfQ==