@wallfree-dev/angular-core 0.0.59-beta.5 → 0.0.59-beta.6
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/esm2022/lib/protocol/adapter/protocol-v0-adapter.mjs +3 -3
- package/esm2022/lib/utils/protocol/protocol-v0-adapter.mjs +7 -1
- package/fesm2022/wallfree-dev-angular-core.mjs +9 -4
- package/fesm2022/wallfree-dev-angular-core.mjs.map +1 -1
- package/lib/utils/protocol/protocol-v0-adapter.d.ts +2 -0
- package/lib/utils/protocol/protocol-v0-adapter.d.ts.map +1 -1
- package/package.json +24 -24
|
@@ -173,7 +173,7 @@ export class ICoinProtocolAdapter {
|
|
|
173
173
|
const transactions = await this.protocolV1.getTransactionsForPublicKey(newPublicKey(publicKey, getBytesFormatV1FromV0(publicKey)), limit, cursor);
|
|
174
174
|
return {
|
|
175
175
|
transactions: await this.convertTransactionDetailsV1ToV0(transactions.transactions),
|
|
176
|
-
cursor
|
|
176
|
+
cursor: transactions.cursor ? transactions.cursor : cursor
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
179
|
async getTransactionsFromExtendedPublicKey(extendedPublicKey, limit, cursor) {
|
|
@@ -183,7 +183,7 @@ export class ICoinProtocolAdapter {
|
|
|
183
183
|
const transactions = await this.protocolV1.getTransactionsForPublicKey(newExtendedPublicKey(extendedPublicKey, getBytesFormatV1FromV0(extendedPublicKey)), limit, cursor);
|
|
184
184
|
return {
|
|
185
185
|
transactions: await this.convertTransactionDetailsV1ToV0(transactions.transactions),
|
|
186
|
-
cursor
|
|
186
|
+
cursor: transactions.cursor ? transactions.cursor : cursor
|
|
187
187
|
};
|
|
188
188
|
}
|
|
189
189
|
async getTransactionsFromAddresses(addresses, limit, cursor) {
|
|
@@ -877,4 +877,4 @@ export async function createICoinSubProtocolAdapter(protocolV1, blockExplorerV1,
|
|
|
877
877
|
return new ICoinSubProtocolAdapter(protocolV1, protocolMetadata, crypto, network, blockExplorerV1, blockExplorerMetadata, v3SerializerCompanion, type, contractAddress);
|
|
878
878
|
}
|
|
879
879
|
}
|
|
880
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wtdjAtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcHJvdG9jb2wvYWRhcHRlci9wcm90b2NvbC12MC1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhCQUE4QjtBQUM5Qix5Q0FBeUM7QUFDekMsT0FBTyxFQVlMLFdBQVcsSUFBSSxhQUFhLEVBQzVCLHFCQUFxQixJQUFJLHVCQUF1QixFQUNoRCxlQUFlLElBQUksaUJBQWlCLEVBR3BDLGtCQUFrQixFQUNsQixlQUFlLElBQUksaUJBQWlCLEVBRXJDLE1BQU0sNEJBQTRCLENBQUE7QUFJbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM3RCxPQUFPLEVBV0wsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLGNBQWMsRUFRZCx1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUUxQixTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osWUFBWSxFQUNaLFlBQVksRUFrQmIsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqQyxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUE7QUFHcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDNUQsT0FBTyxFQUFpRCx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3hJLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3RFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIs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QUM7UUFDTixPQUFPLElBQUksdUJBQXVCLENBQ2hDLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLEVBQ0osZUFBZSxDQUNoQixDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQge1xuICBDcnlwdG9DbGllbnQsXG4gIERlbGVnYXRlZURldGFpbHMsXG4gIERlbGVnYXRpb25EZXRhaWxzLFxuICBEZWxlZ2F0b3JEZXRhaWxzLFxuICBGZWVEZWZhdWx0cyBhcyBGZWVEZWZhdWx0c1YwLFxuICBJQWlyR2FwVHJhbnNhY3Rpb24sXG4gIElBaXJHYXBUcmFuc2FjdGlvblJlc3VsdCxcbiAgSUNvaW5EZWxlZ2F0ZVByb3RvY29sLFxuICBJQ29pblByb3RvY29sLFxuICBJQ29pblN1YlByb3RvY29sLFxuICBJUHJvdG9jb2xUcmFuc2FjdGlvbkN1cnNvcixcbiAgTmV0d29ya1R5cGUgYXMgTmV0d29ya1R5cGVWMCxcbiAgUHJvdG9jb2xCbG9ja0V4cGxvcmVyIGFzIFByb3RvY29sQmxvY2tFeHBsb3JlclYwLFxuICBQcm90b2NvbE5ldHdvcmsgYXMgUHJvdG9jb2xOZXR3b3JrVjAsXG4gIFByb3RvY29sU3ltYm9scyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24gYXMgU2lnbmVkVHJhbnNhY3Rpb25WMCxcbiAgU3ViUHJvdG9jb2xTeW1ib2xzLFxuICBTdWJQcm90b2NvbFR5cGUgYXMgU3ViUHJvdG9jb2xUeXBlVjAsXG4gIFVuc2lnbmVkVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUcmFuc2FjdGlvblYwXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlJ1xuaW1wb3J0IHsgSVByb3RvY29sQWRkcmVzc0N1cnNvciwgSUFpckdhcEFkZHJlc3NSZXN1bHQgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZS9pbnRlcmZhY2VzL0lBaXJHYXBBZGRyZXNzJ1xuaW1wb3J0IHsgQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXMgYXMgQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXNWMCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlL2ludGVyZmFjZXMvSUFpckdhcFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsgUHJvdG9jb2xPcHRpb25zIGFzIFByb3RvY29sT3B0aW9uc1YwIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9jb2lubGliLWNvcmUvdXRpbHMvUHJvdG9jb2xPcHRpb25zJ1xuaW1wb3J0IHsgZGVyaXZlLCBtbmVtb25pY1RvU2VlZCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY3J5cHRvJ1xuaW1wb3J0IHtcbiAgQWRkcmVzc1dpdGhDdXJzb3IsXG4gIEFpckdhcEFueVByb3RvY29sLFxuICBBaXJHYXBCbG9ja0V4cGxvcmVyLFxuICBBaXJHYXBUcmFuc2FjdGlvbixcbiAgQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXMsXG4gIEFpckdhcFRyYW5zYWN0aW9uc1dpdGhDdXJzb3IsXG4gIEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbixcbiAgQW1vdW50LFxuICBCYWxhbmNlLFxuICBCbG9ja0V4cGxvcmVyTWV0YWRhdGEsXG4gIGNhbkVuY3J5cHRBRVMsXG4gIGNhbkVuY3J5cHRBc3ltbWV0cmljLFxuICBjYW5GZXRjaERhdGFGb3JBZGRyZXNzLFxuICBjYW5GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3NlcyxcbiAgY2FuU2lnbk1lc3NhZ2UsXG4gIENyeXB0b0NvbmZpZ3VyYXRpb24sXG4gIENyeXB0b0Rlcml2YXRpdmUsXG4gIEV4dGVuZGVkS2V5UGFpcixcbiAgRXh0ZW5kZWRQdWJsaWNLZXksXG4gIEV4dGVuZGVkU2VjcmV0S2V5LFxuICBGZWVEZWZhdWx0cyxcbiAgRmVlRXN0aW1hdGlvbixcbiAgaGFzQ29uZmlndXJhYmxlQ29udHJhY3QsXG4gIGhhc011bHRpQWRkcmVzc1B1YmxpY0tleXMsXG4gIGltcGxlbWVudHNJbnRlcmZhY2UsXG4gIGlzQW1vdW50LFxuICBpc0JpcDMyUHJvdG9jb2wsXG4gIGlzTXVsdGlUb2tlblN1YlByb3RvY29sLFxuICBpc09mZmxpbmVQcm90b2NvbCxcbiAgaXNPbmxpbmVQcm90b2NvbCxcbiAgaXNUcmFuc2FjdGlvblN0YXR1c0NoZWNrZXIsXG4gIEtleVBhaXIsXG4gIG5ld0Ftb3VudCxcbiAgbmV3RXh0ZW5kZWRQdWJsaWNLZXksXG4gIG5ld0V4dGVuZGVkU2VjcmV0S2V5LFxuICBuZXdQdWJsaWNLZXksXG4gIG5ld1NlY3JldEtleSxcbiAgbmV3U2lnbmF0dXJlLFxuICBQcm90b2NvbENvbmZpZ3VyYXRpb24sXG4gIFByb3RvY29sTWV0YWRhdGEsXG4gIFByb3RvY29sTmV0d29yayxcbiAgUHJvdG9jb2xOZXR3b3JrVHlwZSxcbiAgUHJvdG9jb2xTeW1ib2wsXG4gIFByb3RvY29sVHJhbnNhY3Rpb25BcmJpdHJhcnlEYXRhTWV0YWRhdGEsXG4gIFByb3RvY29sVW5pdHNNZXRhZGF0YSxcbiAgUHVibGljS2V5LFxuICBTY2hlbWEsXG4gIFNlY3JldEtleSxcbiAgU2lnbmF0dXJlLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU3ViUHJvdG9jb2wsXG4gIFN1YlByb3RvY29sVHlwZSxcbiAgVHJhbnNhY3Rpb25DdXJzb3IsXG4gIFRyYW5zYWN0aW9uRGV0YWlscyxcbiAgVW5zaWduZWRUcmFuc2FjdGlvblxufSBmcm9tICdAd2FsbGZyZWUtZGV2L21vZHVsZS1raXQnXG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcydcbmltcG9ydCB7IFRyYW5zYWN0aW9uU2lnblJlcXVlc3QsIFRyYW5zYWN0aW9uU2lnblJlc3BvbnNlLCBUcmFuc2FjdGlvblZhbGlkYXRvciB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvc2VyaWFsaXplcidcbmltcG9ydCB7IEFpckdhcERlbGVnYXRlUHJvdG9jb2wgfSBmcm9tICdAd2FsbGZyZWUtZGV2L21vZHVsZS1raXQvaW50ZXJuYWwnXG5pbXBvcnQgeyBpc1Rlem9zU2FwbGluZ1Byb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi90ZXpvcydcbmltcG9ydCB7IEJpdGNvaW5TZWd3aXRQcm90b2NvbCwgQml0Y29pblRhcHJvb3RQcm90b2NvbCwgaXNCaXRjb2luU2Vnd2l0UHJvdG9jb2wsIGlzQml0Y29pblRhcHJvb3RQcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvYml0Y29pbidcbmltcG9ydCB7IGdldFByb3RvY29sT3B0aW9uc0J5SWRlbnRpZmllckxlZ2FjeSB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb3RvY29sL3Byb3RvY29sLW9wdGlvbnMnXG5pbXBvcnQgeyBzdXBwb3J0c1YxRGVsZWdhdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb3RvY29sL2RlbGVnYXRpb24nXG5pbXBvcnQge1xuICBjb252ZXJ0RmVlRGVmYXVsdHNWMVRvVjAsXG4gIGNvbnZlcnROZXR3b3JrVHlwZVYxVG9WMCxcbiAgY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCxcbiAgY29udmVydFRyYW5zYWN0aW9uU3RhdHVzVjFUb1YwLFxuICBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwLFxuICBnZXRQdWJsaWNLZXlUeXBlLFxuICBnZXRTZWNyZXRLZXlUeXBlXG59IGZyb20gJy4uLy4uL3V0aWxzL3Byb3RvY29sL3Byb3RvY29sLXYwLWFkYXB0ZXInXG5cbi8vIFByb3RvY29sQmxvY2tFeHBsb3JlclxuXG5leHBvcnQgY2xhc3MgUHJvdG9jb2xCbG9ja0V4cGxvcmVyQWRhcHRlciBleHRlbmRzIFByb3RvY29sQmxvY2tFeHBsb3JlclYwIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBibG9ja0V4cGxvcmVyVjE6IEFpckdhcEJsb2NrRXhwbG9yZXIsIHVybDogc3RyaW5nKSB7XG4gICAgc3VwZXIodXJsKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFkZHJlc3NMaW5rKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tFeHBsb3JlclYxLmNyZWF0ZUFkZHJlc3NVcmwoYWRkcmVzcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkxpbmsodHJhbnNhY3Rpb25JZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ibG9ja0V4cGxvcmVyVjEuY3JlYXRlVHJhbnNhY3Rpb25VcmwodHJhbnNhY3Rpb25JZClcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2tFeHBsb3JlcjogdGhpcy5ibG9ja0V4cGxvcmVyXG4gICAgfVxuICB9XG59XG5cbi8vIFByb3RvY29sTmV0d29ya1xuXG5leHBvcnQgY2xhc3MgUHJvdG9jb2xOZXR3b3JrQWRhcHRlciBleHRlbmRzIFByb3RvY29sTmV0d29ya1YwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHR5cGU6IFByb3RvY29sTmV0d29ya1R5cGUgfCBOZXR3b3JrVHlwZVYwLFxuICAgIHJwY1VybDogc3RyaW5nLFxuICAgIGJsb2NrRXhwbG9yZXI6IFByb3RvY29sQmxvY2tFeHBsb3JlclYwIHwgdW5kZWZpbmVkLFxuICAgIGV4dHJhczogdW5rbm93biA9IHt9XG4gICkge1xuICAgIGNvbnN0IG5ldHdvcmtUeXBlOiBOZXR3b3JrVHlwZVYwID0gT2JqZWN0LnZhbHVlcyhOZXR3b3JrVHlwZVYwKS5pbmNsdWRlcyh0eXBlIGFzIE5ldHdvcmtUeXBlVjApXG4gICAgICA/ICh0eXBlIGFzIE5ldHdvcmtUeXBlVjApXG4gICAgICA6IGNvbnZlcnROZXR3b3JrVHlwZVYxVG9WMCh0eXBlIGFzIFByb3RvY29sTmV0d29ya1R5cGUpXG5cbiAgICBzdXBlcihuYW1lLCBuZXR3b3JrVHlwZSwgcnBjVXJsLCBibG9ja0V4cGxvcmVyLCBleHRyYXMpXG4gIH1cbn1cblxuLy8gUHJvdG9jb2xPcHRpb25zXG5cbmV4cG9ydCBjbGFzcyBQcm90b2NvbE9wdGlvbnNBZGFwdGVyIGltcGxlbWVudHMgUHJvdG9jb2xPcHRpb25zVjAge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbmV0d29yazogUHJvdG9jb2xOZXR3b3JrVjAsIHB1YmxpYyByZWFkb25seSBjb25maWc6IHVua25vd24gPSB7fSkge31cbn1cblxuLy8gVHJhbnNhY3Rpb25WYWxpZGF0b3JcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uVmFsaWRhdG9yQWRhcHRlciBpbXBsZW1lbnRzIFRyYW5zYWN0aW9uVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm90b2NvbElkZW50aWZpZXI6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBzZXJpYWxpemVyQ29tcGFuaW9uOiBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24pIHt9XG5cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlVW5zaWduZWRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25TaWduUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplckNvbXBhbmlvbi52YWxpZGF0ZVRyYW5zYWN0aW9uU2lnblJlcXVlc3QodGhpcy5wcm90b2NvbElkZW50aWZpZXIsIHRyYW5zYWN0aW9uKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlU2lnbmVkVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2lnblJlc3BvbnNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVyQ29tcGFuaW9uLnZhbGlkYXRlVHJhbnNhY3Rpb25TaWduUmVzcG9uc2UodGhpcy5wcm90b2NvbElkZW50aWZpZXIsIHRyYW5zYWN0aW9uKVxuICB9XG59XG5cbi8vIElDb2luUHJvdG9jb2xcblxuZXhwb3J0IGNsYXNzIElDb2luUHJvdG9jb2xBZGFwdGVyPFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCA9IEFpckdhcEFueVByb3RvY29sPiBpbXBsZW1lbnRzIElDb2luUHJvdG9jb2wge1xuICBwdWJsaWMgcmVhZG9ubHkgc3ltYm9sOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgbWFya2V0U3ltYm9sOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IGFzc2V0U3ltYm9sOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgcHVibGljIHJlYWRvbmx5IGZlZVN5bWJvbDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBmZWVEZWZhdWx0czogRmVlRGVmYXVsdHNWMFxuICBwdWJsaWMgcmVhZG9ubHkgZGVjaW1hbHM6IG51bWJlclxuICBwdWJsaWMgcmVhZG9ubHkgZmVlRGVjaW1hbHM6IG51bWJlclxuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpZmllcjogUHJvdG9jb2xTeW1ib2xzXG4gIHB1YmxpYyByZWFkb25seSB1bml0czogeyB1bml0U3ltYm9sOiBzdHJpbmc7IGZhY3Rvcjogc3RyaW5nIH1bXVxuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNIRDogYm9vbGVhblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhbmRhcmREZXJpdmF0aW9uUGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBhZGRyZXNzSXNDYXNlU2Vuc2l0aXZlOiBib29sZWFuXG4gIHB1YmxpYyByZWFkb25seSBhZGRyZXNzVmFsaWRhdGlvblBhdHRlcm46IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc1BsYWNlaG9sZGVyOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFByb3RvY29sT3B0aW9uc1YwXG4gIHB1YmxpYyByZWFkb25seSBjcnlwdG9DbGllbnQ6IENyeXB0b0NsaWVudFxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya1YwOiBQcm90b2NvbE5ldHdvcmtWMFxuICBwcml2YXRlIHJlYWRvbmx5IGJsb2NrRXhwbG9yZXJWMDogUHJvdG9jb2xCbG9ja0V4cGxvcmVyQWRhcHRlciB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm90b2NvbFYxOiBULFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2xNZXRhZGF0YTogUHJvdG9jb2xNZXRhZGF0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5ldHdvcms6IFByb3RvY29sTmV0d29yayB8IHVuZGVmaW5lZCxcbiAgICBibG9ja0V4cGxvcmVyVjE6IEFpckdhcEJsb2NrRXhwbG9yZXIgfCB1bmRlZmluZWQsXG4gICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhOiBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2M1NlcmlhbGl6ZXJDb21wYW5pb246IEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvblxuICApIHtcbiAgICBjb25zdCB1bml0czogUHJvdG9jb2xVbml0c01ldGFkYXRhID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLnVuaXRzXG4gICAgY29uc3QgbWFpblVuaXQ6IHN0cmluZyA9IHRoaXMucHJvdG9jb2xNZXRhZGF0YS5tYWluVW5pdFxuICAgIGNvbnN0IHN5bWJvbDogUHJvdG9jb2xTeW1ib2wgPSB1bml0c1ttYWluVW5pdF0uc3ltYm9sXG5cbiAgICBjb25zdCBmZWVVbml0czogUHJvdG9jb2xVbml0c01ldGFkYXRhID0gcHJvdG9jb2xNZXRhZGF0YS5mZWU/LnVuaXRzID8/IHByb3RvY29sTWV0YWRhdGEudW5pdHNcbiAgICBjb25zdCBtYWluRmVlVW5pdDogc3RyaW5nID0gcHJvdG9jb2xNZXRhZGF0YS5mZWU/Lm1haW5Vbml0ID8/IHByb3RvY29sTWV0YWRhdGEubWFpblVuaXRcbiAgICBjb25zdCBmZWVTeW1ib2w6IFByb3RvY29sU3ltYm9sID0gZmVlVW5pdHNbbWFpbkZlZVVuaXRdLnN5bWJvbFxuXG4gICAgY29uc3QgZmVlRGVmYXVsdHM6IEZlZURlZmF1bHRzID0gcHJvdG9jb2xNZXRhZGF0YS5mZWU/LmRlZmF1bHRzID8/IHtcbiAgICAgIGxvdzogbmV3QW1vdW50KCcwJywgJ2Jsb2NrY2hhaW4nKSxcbiAgICAgIG1lZGl1bTogbmV3QW1vdW50KCcwJywgJ2Jsb2NrY2hhaW4nKSxcbiAgICAgIGhpZ2g6IG5ld0Ftb3VudCgnMCcsICdibG9ja2NoYWluJylcbiAgICB9XG5cbiAgICBjb25zdCBtYXhEZWNpbWFsczogbnVtYmVyID0gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhwcm90b2NvbE1ldGFkYXRhLnVuaXRzKS5tYXAoKHVuaXQpID0+IHVuaXQuZGVjaW1hbHMpKVxuXG4gICAgdGhpcy5uYW1lID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLm5hbWVcbiAgICB0aGlzLmlkZW50aWZpZXIgPSB0aGlzLnByb3RvY29sTWV0YWRhdGEuaWRlbnRpZmllciBhcyBQcm90b2NvbFN5bWJvbHNcblxuICAgIHRoaXMuc3ltYm9sID0gc3ltYm9sLnZhbHVlXG4gICAgdGhpcy5tYXJrZXRTeW1ib2wgPSBzeW1ib2wubWFya2V0ID8/IHN5bWJvbC52YWx1ZVxuICAgIHRoaXMuYXNzZXRTeW1ib2wgPSBzeW1ib2wuYXNzZXRcbiAgICB0aGlzLmRlY2ltYWxzID0gdW5pdHNbbWFpblVuaXRdLmRlY2ltYWxzXG5cbiAgICB0aGlzLmZlZVN5bWJvbCA9IGZlZVN5bWJvbC52YWx1ZVxuICAgIHRoaXMuZmVlRGVmYXVsdHMgPSB0aGlzLmNvbnZlcnRGZWVEZWZhdWx0c1YxVG9WMChmZWVEZWZhdWx0cylcbiAgICB0aGlzLmZlZURlY2ltYWxzID0gZmVlVW5pdHNbbWFpbkZlZVVuaXRdLmRlY2ltYWxzXG5cbiAgICB0aGlzLnVuaXRzID0gT2JqZWN0LmVudHJpZXMocHJvdG9jb2xNZXRhZGF0YS51bml0cykubWFwKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgdW5pdFN5bWJvbDogc3RyaW5nID0gZW50cnlbMF1cbiAgICAgIGNvbnN0IGZhY3Rvcjogc3RyaW5nID0gbmV3IEJpZ051bWJlcigxKS5zaGlmdGVkQnkoLShtYXhEZWNpbWFscyAtIGVudHJ5WzFdLmRlY2ltYWxzKSkudG9GaXhlZCgpXG5cbiAgICAgIHJldHVybiB7IHVuaXRTeW1ib2wsIGZhY3RvciB9XG4gICAgfSlcblxuICAgIHRoaXMuc3VwcG9ydHNIRCA9IGlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpXG5cbiAgICB0aGlzLnN0YW5kYXJkRGVyaXZhdGlvblBhdGggPSB0aGlzLnByb3RvY29sTWV0YWRhdGEuYWNjb3VudD8uc3RhbmRhcmREZXJpdmF0aW9uUGF0aCA/PyAnbS8nXG4gICAgdGhpcy5hZGRyZXNzSXNDYXNlU2Vuc2l0aXZlID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLmFjY291bnQuYWRkcmVzcz8uaXNDYXNlU2Vuc2l0aXZlID8/IGZhbHNlXG4gICAgdGhpcy5hZGRyZXNzVmFsaWRhdGlvblBhdHRlcm4gPSB0aGlzLnByb3RvY29sTWV0YWRhdGEuYWNjb3VudD8uYWRkcmVzcz8ucmVnZXggPz8gJyorJ1xuICAgIHRoaXMuYWRkcmVzc1BsYWNlaG9sZGVyID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLmFjY291bnQ/LmFkZHJlc3M/LnBsYWNlaG9sZGVyID8/ICcnXG5cbiAgICBsZXQga25vd25PcHRpb25zOiBQcm90b2NvbE9wdGlvbnNWMCB8IHVuZGVmaW5lZFxuICAgIHRyeSB7XG4gICAgICBrbm93bk9wdGlvbnMgPSBnZXRQcm90b2NvbE9wdGlvbnNCeUlkZW50aWZpZXJMZWdhY3kodGhpcy5wcm90b2NvbE1ldGFkYXRhLmlkZW50aWZpZXIgYXMgUHJvdG9jb2xTeW1ib2xzKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgdGhpcy5ibG9ja0V4cGxvcmVyVjAgPVxuICAgICAgYmxvY2tFeHBsb3JlclYxICYmIGJsb2NrRXhwbG9yZXJNZXRhZGF0YSA/IG5ldyBQcm90b2NvbEJsb2NrRXhwbG9yZXJBZGFwdGVyKGJsb2NrRXhwbG9yZXJWMSwgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLnVybCkgOiB1bmRlZmluZWRcbiAgICB0aGlzLm5ldHdvcmtWMCA9IHRoaXMuZ2V0TmV0d29yayhrbm93bk9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gbmV3IFByb3RvY29sT3B0aW9uc0FkYXB0ZXIodGhpcy5uZXR3b3JrVjAsIGtub3duT3B0aW9ucz8uY29uZmlnID8/IHt9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFN5bWJvbCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN5bWJvbFxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5uYW1lXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWFya2V0U3ltYm9sKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubWFya2V0U3ltYm9sXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXNzZXRTeW1ib2woKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3NldFN5bWJvbFxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEZlZVN5bWJvbCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZlZVN5bWJvbFxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEZlZURlZmF1bHRzKCk6IFByb21pc2U8RmVlRGVmYXVsdHNWMD4ge1xuICAgIHJldHVybiB0aGlzLmZlZURlZmF1bHRzXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVjaW1hbHMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5kZWNpbWFsc1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEZlZURlY2ltYWxzKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZmVlRGVjaW1hbHNcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJZGVudGlmaWVyKCk6IFByb21pc2U8UHJvdG9jb2xTeW1ib2xzPiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllclxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFVuaXRzKCk6IFByb21pc2U8eyB1bml0U3ltYm9sOiBzdHJpbmc7IGZhY3Rvcjogc3RyaW5nIH1bXT4ge1xuICAgIHJldHVybiB0aGlzLnVuaXRzXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U3VwcG9ydHNIRCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3J0c0hEXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U3RhbmRhcmREZXJpdmF0aW9uUGF0aCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0YW5kYXJkRGVyaXZhdGlvblBhdGhcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBZGRyZXNzSXNDYXNlU2Vuc2l0aXZlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmFkZHJlc3NJc0Nhc2VTZW5zaXRpdmVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBZGRyZXNzVmFsaWRhdGlvblBhdHRlcm4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzVmFsaWRhdGlvblBhdHRlcm5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBZGRyZXNzUGxhY2Vob2xkZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzUGxhY2Vob2xkZXJcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPcHRpb25zKCk6IFByb21pc2U8UHJvdG9jb2xPcHRpb25zVjA+IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmxvY2tFeHBsb3JlckxpbmtGb3JBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuYmxvY2tFeHBsb3JlclYwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIEJsb2NrRXhwbG9yZXIgbm90IGZvdW5kLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYmxvY2tFeHBsb3JlclYwLmdldEFkZHJlc3NMaW5rKGFkZHJlc3MpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmxvY2tFeHBsb3JlckxpbmtGb3JUeElkKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuYmxvY2tFeHBsb3JlclYwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIEJsb2NrRXhwbG9yZXIgbm90IGZvdW5kLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYmxvY2tFeHBsb3JlclYwLmdldFRyYW5zYWN0aW9uTGluayh0eElkKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uc0Zyb21QdWJsaWNLZXkoXG4gICAgcHVibGljS2V5OiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlcixcbiAgICBjdXJzb3I/OiBJUHJvdG9jb2xUcmFuc2FjdGlvbkN1cnNvclxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uczogQWlyR2FwVHJhbnNhY3Rpb25zV2l0aEN1cnNvciA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvbnNGb3JQdWJsaWNLZXkoXG4gICAgICBuZXdQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpLFxuICAgICAgbGltaXQsXG4gICAgICBjdXJzb3IgYXMgVHJhbnNhY3Rpb25DdXJzb3JcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNhY3Rpb25zOiBhd2FpdCB0aGlzLmNvbnZlcnRUcmFuc2FjdGlvbkRldGFpbHNWMVRvVjAodHJhbnNhY3Rpb25zLnRyYW5zYWN0aW9ucyksXG4gICAgICBjdXJzb3JcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25zRnJvbUV4dGVuZGVkUHVibGljS2V5KFxuICAgIGV4dGVuZGVkUHVibGljS2V5OiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlcixcbiAgICBjdXJzb3I/OiBJUHJvdG9jb2xUcmFuc2FjdGlvbkN1cnNvclxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW50ZXJmYWNlOiBPbmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25zOiBBaXJHYXBUcmFuc2FjdGlvbnNXaXRoQ3Vyc29yID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uc0ZvclB1YmxpY0tleShcbiAgICAgIG5ld0V4dGVuZGVkUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKGV4dGVuZGVkUHVibGljS2V5KSksXG4gICAgICBsaW1pdCxcbiAgICAgIGN1cnNvciBhcyBUcmFuc2FjdGlvbkN1cnNvclxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2FjdGlvbnM6IGF3YWl0IHRoaXMuY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0cmFuc2FjdGlvbnMudHJhbnNhY3Rpb25zKSxcbiAgICAgIGN1cnNvclxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbnNGcm9tQWRkcmVzc2VzKFxuICAgIGFkZHJlc3Nlczogc3RyaW5nW10sXG4gICAgbGltaXQ6IG51bWJlcixcbiAgICBjdXJzb3I/OiBJUHJvdG9jb2xUcmFuc2FjdGlvbkN1cnNvclxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIGxldCB0cmFuc2FjdGlvbnM6IEFpckdhcFRyYW5zYWN0aW9uc1dpdGhDdXJzb3JcbiAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA9PT0gMSAmJiBjYW5GZXRjaERhdGFGb3JBZGRyZXNzKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRyYW5zYWN0aW9ucyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvbnNGb3JBZGRyZXNzKGFkZHJlc3Nlc1swXSwgbGltaXQsIGN1cnNvciBhcyBUcmFuc2FjdGlvbkN1cnNvcilcbiAgICB9IGVsc2UgaWYgKGNhbkZldGNoRGF0YUZvck11bHRpcGxlQWRkcmVzc2VzKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIHRyYW5zYWN0aW9ucyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvbnNGb3JBZGRyZXNzZXMoYWRkcmVzc2VzLCBsaW1pdCwgY3Vyc29yIGFzIFRyYW5zYWN0aW9uQ3Vyc29yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2FjdGlvbnM6IGF3YWl0IHRoaXMuY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0cmFuc2FjdGlvbnMudHJhbnNhY3Rpb25zKSxcbiAgICAgIGN1cnNvcjogdHJhbnNhY3Rpb25zLmN1cnNvciA/IHRyYW5zYWN0aW9ucy5jdXJzb3IgOiBjdXJzb3JcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmFsYW5jZU9mQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10sIF9kYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIGxldCBiYWxhbmNlOiBCYWxhbmNlXG4gICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPT09IDEgJiYgY2FuRmV0Y2hEYXRhRm9yQWRkcmVzcyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZkFkZHJlc3MoYWRkcmVzc2VzWzBdKVxuICAgIH0gZWxzZSBpZiAoY2FuRmV0Y2hEYXRhRm9yTXVsdGlwbGVBZGRyZXNzZXModGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRCYWxhbmNlT2ZBZGRyZXNzZXMoYWRkcmVzc2VzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdBbW91bnQoYmFsYW5jZS50b3RhbCkuYmxvY2tjaGFpbih0aGlzLnByb3RvY29sTWV0YWRhdGEudW5pdHMpLnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmFsYW5jZU9mUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIGRhdGE/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd247IGFkZHJlc3NJbmRleD86IG51bWJlcjsgYXNzZXRJRD86IHN0cmluZyB9XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLicpXG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljS2V5VjE6IFB1YmxpY0tleSA9IG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcblxuICAgIGNvbnN0IGJhbGFuY2U6IEJhbGFuY2UgPVxuICAgICAgZGF0YT8uYXNzZXRJRCAmJiBpc011bHRpVG9rZW5TdWJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpXG4gICAgICAgID8gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZlB1YmxpY0tleShwdWJsaWNLZXlWMSwgeyB0b2tlbklkOiBkYXRhLmFzc2V0SUQgfSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0QmFsYW5jZU9mUHVibGljS2V5KHB1YmxpY0tleVYxKVxuXG4gICAgcmV0dXJuIG5ld0Ftb3VudChiYWxhbmNlLnRvdGFsKS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlT2ZFeHRlbmRlZFB1YmxpY0tleShcbiAgICBleHRlbmRlZFB1YmxpY0tleTogc3RyaW5nLFxuICAgIF9vZmZzZXQ6IG51bWJlcixcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duOyBhc3NldElEPzogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkUHVibGljS2V5VjE6IEV4dGVuZGVkUHVibGljS2V5ID0gbmV3RXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQdWJsaWNLZXkpKVxuXG4gICAgY29uc3QgYmFsYW5jZTogQmFsYW5jZSA9XG4gICAgICBkYXRhPy5hc3NldElEICYmIGlzTXVsdGlUb2tlblN1YlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSlcbiAgICAgICAgPyBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0QmFsYW5jZU9mUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5VjEsIHsgdG9rZW5JZDogZGF0YS5hc3NldElEIH0pXG4gICAgICAgIDogYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZlB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleVYxKVxuXG4gICAgcmV0dXJuIG5ld0Ftb3VudChiYWxhbmNlLnRvdGFsKS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBdmFpbGFibGVCYWxhbmNlT2ZBZGRyZXNzZXMoYWRkcmVzc2VzOiBzdHJpbmdbXSwgX2RhdGE/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGludGVyZmFjZTogT25saW5lLCBGZXRjaERhdGFGb3JBZGRyZXNzL0ZldGNoRGF0YUZvck11bHRpcGxlQWRkcmVzc2VzLicpXG4gICAgfVxuXG4gICAgbGV0IGJhbGFuY2U6IEJhbGFuY2VcbiAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA9PT0gMSAmJiBjYW5GZXRjaERhdGFGb3JBZGRyZXNzKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIGJhbGFuY2UgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0QmFsYW5jZU9mQWRkcmVzcyhhZGRyZXNzZXNbMF0pXG4gICAgfSBlbHNlIGlmIChjYW5GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZkFkZHJlc3NlcyhhZGRyZXNzZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGludGVyZmFjZTogT25saW5lLCBGZXRjaERhdGFGb3JBZGRyZXNzL0ZldGNoRGF0YUZvck11bHRpcGxlQWRkcmVzc2VzLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0Ftb3VudChiYWxhbmNlLnRyYW5zZmVyYWJsZSA/PyBiYWxhbmNlLnRvdGFsKS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvblN0YXR1c2VzKHRyYW5zYWN0aW9uSGFzaDogc3RyaW5nW10pOiBQcm9taXNlPEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjBbXT4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc1RyYW5zYWN0aW9uU3RhdHVzQ2hlY2tlcih0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZSwgVHJhbnNhY3Rpb25TdGF0dXNDaGVja2VyLicpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzZXM6IFJlY29yZDxzdHJpbmcsIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzPiA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvblN0YXR1cyh0cmFuc2FjdGlvbkhhc2gpXG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25IYXNoLm1hcCgoaGFzaDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXM6IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzID0gc3RhdHVzZXNbaGFzaF1cblxuICAgICAgcmV0dXJuIGNvbnZlcnRUcmFuc2FjdGlvblN0YXR1c1YxVG9WMChzdGF0dXMpXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlT2ZQdWJsaWNLZXlGb3JTdWJQcm90b2NvbHMoX3B1YmxpY0tleTogc3RyaW5nLCBfc3ViUHJvdG9jb2xzOiBJQ29pblN1YlByb3RvY29sW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZC4nKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGVzdGltYXRlTWF4VHJhbnNhY3Rpb25WYWx1ZUZyb21FeHRlbmRlZFB1YmxpY0tleShcbiAgICBleHRlbmRlZFB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIGZlZT86IHN0cmluZyxcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IG1heEFtb3VudDogQW1vdW50ID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uTWF4QW1vdW50V2l0aFB1YmxpY0tleShcbiAgICAgIG5ld0V4dGVuZGVkUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKGV4dGVuZGVkUHVibGljS2V5KSksXG4gICAgICByZWNpcGllbnRzLFxuICAgICAge1xuICAgICAgICBhcmJpdHJhcnlEYXRhOiB0aGlzLmdldEFyYml0cmFyeURhdGEoZGF0YSksXG4gICAgICAgIGZlZTogZmVlID8gbmV3QW1vdW50KGZlZSwgJ2Jsb2NrY2hhaW4nKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiBuZXdBbW91bnQobWF4QW1vdW50KS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlc3RpbWF0ZU1heFRyYW5zYWN0aW9uVmFsdWVGcm9tUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIGZlZT86IHN0cmluZyxcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duOyBhZGRyZXNzSW5kZXg/OiBudW1iZXIgfVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IG1heEFtb3VudDogQW1vdW50ID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uTWF4QW1vdW50V2l0aFB1YmxpY0tleShcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSksXG4gICAgICByZWNpcGllbnRzLFxuICAgICAge1xuICAgICAgICBmZWU6IGZlZSA/IG5ld0Ftb3VudChmZWUsICdibG9ja2NoYWluJykgOiB1bmRlZmluZWQsXG4gICAgICAgIGFyYml0cmFyeURhdGE6IHRoaXMuZ2V0QXJiaXRyYXJ5RGF0YShkYXRhKVxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiBuZXdBbW91bnQobWF4QW1vdW50KS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlc3RpbWF0ZUZlZURlZmF1bHRzRnJvbUV4dGVuZGVkUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIHZhbHVlczogc3RyaW5nW10sXG4gICAgZGF0YT86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cblxuICAgICAgLy8gVGV6b3MgRkEyXG4gICAgICBhc3NldElEPzogc3RyaW5nXG4gICAgfVxuICApOiBQcm9taXNlPEZlZURlZmF1bHRzVjA+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGZlZUVzdGltYXRpb246IEZlZUVzdGltYXRpb24gfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0VHJhbnNhY3Rpb25GZWVXaXRoUHVibGljS2V5KFxuICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpLFxuICAgICAgdGhpcy5jb21iaW5lVHJhbnNhY3Rpb25EZXRhaWxzKHJlY2lwaWVudHMsIHZhbHVlcyksXG4gICAgICB7XG4gICAgICAgIGFyYml0cmFyeURhdGE6IHRoaXMuZ2V0QXJiaXRyYXJ5RGF0YShkYXRhKSxcbiAgICAgICAgYXNzZXRJZDogZGF0YT8uYXNzZXRJRCA/IHBhcnNlSW50KGRhdGEuYXNzZXRJRCwgMTApIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKGZlZUVzdGltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgYGVzdGltYXRlRmVlRGVmYXVsdHNGcm9tRXh0ZW5kZWRQdWJsaWNLZXlgIG5vdCBzdXBwb3J0ZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBmZWVEZWZhdWx0czogRmVlRGVmYXVsdHMgPSBpc0Ftb3VudChmZWVFc3RpbWF0aW9uKVxuICAgICAgPyB7IGxvdzogZmVlRXN0aW1hdGlvbiwgbWVkaXVtOiBmZWVFc3RpbWF0aW9uLCBoaWdoOiBmZWVFc3RpbWF0aW9uIH1cbiAgICAgIDogZmVlRXN0aW1hdGlvblxuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydEZlZURlZmF1bHRzVjFUb1YwKGZlZURlZmF1bHRzKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGVzdGltYXRlRmVlRGVmYXVsdHNGcm9tUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIHZhbHVlczogc3RyaW5nW10sXG4gICAgZGF0YT86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cblxuICAgICAgLy8gVGV6b3MgRkEyXG4gICAgICBhc3NldElEPzogc3RyaW5nXG4gICAgfVxuICApOiBQcm9taXNlPEZlZURlZmF1bHRzVjA+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPbmxpbmUuJylcbiAgICB9XG5cbiAgICBpZiAocmVjaXBpZW50cy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVjaXBpZW50cyBsZW5ndGggbXVzdCBtYXRjaCB2YWx1ZXMgbGVuZ3RoLicpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25EZXRhaWxzOiBUcmFuc2FjdGlvbkRldGFpbHNbXSA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQ6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgIHRvOiByZWNpcGllbnQsXG4gICAgICBhbW91bnQ6IG5ld0Ftb3VudCh2YWx1ZXNbaW5kZXhdLCAnYmxvY2tjaGFpbicpXG4gICAgfSkpXG5cbiAgICBjb25zdCBmZWVFc3RpbWF0aW9uOiBGZWVFc3RpbWF0aW9uIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uRmVlV2l0aFB1YmxpY0tleShcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSksXG4gICAgICB0cmFuc2FjdGlvbkRldGFpbHMsXG4gICAgICB7XG4gICAgICAgIGFyYml0cmFyeURhdGE6IHRoaXMuZ2V0QXJiaXRyYXJ5RGF0YShkYXRhKSxcbiAgICAgICAgYXNzZXRJZDogZGF0YT8uYXNzZXRJRCA/IHBhcnNlSW50KGRhdGEuYXNzZXRJRCwgMTApIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKGZlZUVzdGltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgYGVzdGltYXRlRmVlRGVmYXVsdHNGcm9tUHVibGljS2V5YCBub3Qgc3VwcG9ydGVkLicpXG4gICAgfVxuXG4gICAgY29uc3QgZmVlRGVmYXVsdHM6IEZlZURlZmF1bHRzID0gaXNBbW91bnQoZmVlRXN0aW1hdGlvbilcbiAgICAgID8geyBsb3c6IGZlZUVzdGltYXRpb24sIG1lZGl1bTogZmVlRXN0aW1hdGlvbiwgaGlnaDogZmVlRXN0aW1hdGlvbiB9XG4gICAgICA6IGZlZUVzdGltYXRpb25cblxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRGZWVEZWZhdWx0c1YxVG9WMChmZWVEZWZhdWx0cylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlVHJhbnNhY3Rpb25Gcm9tRXh0ZW5kZWRQdWJsaWNLZXkoXG4gICAgZXh0ZW5kZWRQdWJsaWNLZXk6IHN0cmluZyxcbiAgICBfb2Zmc2V0OiBudW1iZXIsXG4gICAgcmVjaXBpZW50czogc3RyaW5nW10sXG4gICAgdmFsdWVzOiBzdHJpbmdbXSxcbiAgICBmZWU6IHN0cmluZyxcbiAgICBleHRyYXM/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG5cbiAgICAgIC8vIEJpdGNvaW5cbiAgICAgIG1hc3RlckZpbmdlcnByaW50OiBzdHJpbmdcbiAgICAgIHJlcGxhY2VCeUZlZTogYm9vbGVhblxuXG4gICAgICAvLyBUZXpvcyBGQTJcbiAgICAgIGFzc2V0SUQ/OiBzdHJpbmdcbiAgICB9XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IGlzU2Vnd2l0ID0gaXNCaXRjb2luU2Vnd2l0UHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKVxuICAgIGNvbnN0IGlzVGFwcm9vdCA9IGlzQml0Y29pblRhcHJvb3RQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpXG5cbiAgICBsZXQgdHJhbnNhY3Rpb246IFVuc2lnbmVkVHJhbnNhY3Rpb25cbiAgICBpZiAoaXNTZWd3aXQgfHwgaXNUYXByb290KSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IChpc1NlZ3dpdFxuICAgICAgICA/ICh0aGlzLnByb3RvY29sVjEgYXMgQml0Y29pblNlZ3dpdFByb3RvY29sKVxuICAgICAgICA6ICh0aGlzLnByb3RvY29sVjEgYXMgQml0Y29pblRhcHJvb3RQcm90b2NvbClcbiAgICAgICkucHJlcGFyZVRyYW5zYWN0aW9uV2l0aFB1YmxpY0tleShcbiAgICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQdWJsaWNLZXkpKSxcbiAgICAgICAgdGhpcy5jb21iaW5lVHJhbnNhY3Rpb25EZXRhaWxzKHJlY2lwaWVudHMsIHZhbHVlcyksXG4gICAgICAgIHtcbiAgICAgICAgICBmZWU6IG5ld0Ftb3VudChmZWUsICdibG9ja2NoYWluJyksXG4gICAgICAgICAgYXJiaXRyYXJ5RGF0YTogdGhpcy5nZXRBcmJpdHJhcnlEYXRhKGV4dHJhcyksXG4gICAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ2hleCcsXG4gICAgICAgICAgICB2YWx1ZTogZXh0cmFzPy5tYXN0ZXJGaW5nZXJwcmludFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwbGFjZUJ5RmVlOiBleHRyYXM/LnJlcGxhY2VCeUZlZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnByZXBhcmVUcmFuc2FjdGlvbldpdGhQdWJsaWNLZXkoXG4gICAgICAgIG5ld0V4dGVuZGVkUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKGV4dGVuZGVkUHVibGljS2V5KSksXG4gICAgICAgIHRoaXMuY29tYmluZVRyYW5zYWN0aW9uRGV0YWlscyhyZWNpcGllbnRzLCB2YWx1ZXMpLFxuICAgICAgICB7XG4gICAgICAgICAgZmVlOiBuZXdBbW91bnQoZmVlLCAnYmxvY2tjaGFpbicpLFxuICAgICAgICAgIGFzc2V0SWQ6IGV4dHJhcz8uYXNzZXRJRCA/IHBhcnNlSW50KGV4dHJhcy5hc3NldElELCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXJiaXRyYXJ5RGF0YTogdGhpcy5nZXRBcmJpdHJhcnlEYXRhKGV4dHJhcylcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uVjAgPSBhd2FpdCB0aGlzLmNvbnZlcnRVbnNpZ25lZFRyYW5zYWN0aW9uVjFUb1YwKHRyYW5zYWN0aW9uLCBleHRlbmRlZFB1YmxpY0tleSlcblxuICAgIHJldHVybiB0cmFuc2FjdGlvblYwLnRyYW5zYWN0aW9uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZVRyYW5zYWN0aW9uRnJvbVB1YmxpY0tleShcbiAgICBwdWJsaWNLZXk6IHN0cmluZyxcbiAgICByZWNpcGllbnRzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdLFxuICAgIGZlZTogc3RyaW5nLFxuICAgIGV4dHJhcz86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cblxuICAgICAgLy8gVGV6b3MgRkEyXG4gICAgICBhc3NldElEPzogc3RyaW5nXG4gICAgfVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBVbnNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnByZXBhcmVUcmFuc2FjdGlvbldpdGhQdWJsaWNLZXkoXG4gICAgICBuZXdQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpLFxuICAgICAgdGhpcy5jb21iaW5lVHJhbnNhY3Rpb25EZXRhaWxzKHJlY2lwaWVudHMsIHZhbHVlcyksXG4gICAgICB7XG4gICAgICAgIGZlZTogbmV3QW1vdW50KGZlZSwgJ2Jsb2NrY2hhaW4nKSxcbiAgICAgICAgYXJiaXRyYXJ5RGF0YTogdGhpcy5nZXRBcmJpdHJhcnlEYXRhKGV4dHJhcyksXG4gICAgICAgIGFzc2V0SWQ6IGV4dHJhcz8uYXNzZXRJRCA/IHBhcnNlSW50KGV4dHJhcy5hc3NldElELCAxMCkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICApXG5cbiAgICBjb25zdCB0cmFuc2FjdGlvblYwID0gYXdhaXQgdGhpcy5jb252ZXJ0VW5zaWduZWRUcmFuc2FjdGlvblYxVG9WMCh0cmFuc2FjdGlvbiwgcHVibGljS2V5KVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uVjAudHJhbnNhY3Rpb25cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBicm9hZGNhc3RUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPbmxpbmUuJylcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgdHJhbnNhY3Rpb246IHJhd1RyYW5zYWN0aW9uLCBhY2NvdW50SWRlbnRpZmllcjogJycgfVxuICAgIGNvbnN0IHNpZ25lZDogU2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNvbnZlcnRTaWduZWRUcmFuc2FjdGlvblYwVG9WMSh0cmFuc2FjdGlvbilcblxuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuYnJvYWRjYXN0VHJhbnNhY3Rpb24oc2lnbmVkKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBfY3Vyc29yPzogSVByb3RvY29sQWRkcmVzc0N1cnNvcik6IFByb21pc2U8SUFpckdhcEFkZHJlc3NSZXN1bHQ+IHtcbiAgICBjb25zdCBhZGRyZXNzOiBBZGRyZXNzV2l0aEN1cnNvciB8IHN0cmluZyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnID8gYWRkcmVzcyA6IGFkZHJlc3MuYWRkcmVzcyxcbiAgICAgIGN1cnNvcjogdHlwZW9mIGFkZHJlc3MgPT09ICdvYmplY3QnID8gYWRkcmVzcy5jdXJzb3IgOiB7IGhhc05leHQ6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWRkcmVzc2VzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZywgX2N1cnNvcj86IElQcm90b2NvbEFkZHJlc3NDdXJzb3IpOiBQcm9taXNlPElBaXJHYXBBZGRyZXNzUmVzdWx0W10+IHtcbiAgICBpZiAoaGFzTXVsdGlBZGRyZXNzUHVibGljS2V5cyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICBjb25zdCBwazogUHVibGljS2V5ID0gbmV3UHVibGljS2V5KHB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpKVxuICAgICAgY29uc3QgYWRkcmVzc2VzOiBBZGRyZXNzV2l0aEN1cnNvcltdID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEluaXRpYWxBZGRyZXNzZXNGcm9tUHVibGljS2V5KHBrKVxuXG4gICAgICByZXR1cm4gYWRkcmVzc2VzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbYXdhaXQgdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXkpXVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBZGRyZXNzRnJvbUV4dGVuZGVkUHVibGljS2V5KFxuICAgIGV4dGVuZGVkUHVibGljS2V5OiBzdHJpbmcsXG4gICAgdmlzaWJpbGl0eURlcml2YXRpb25JbmRleDogbnVtYmVyLFxuICAgIGFkZHJlc3NEZXJpdmF0aW9uSW5kZXg6IG51bWJlclxuICApOiBQcm9taXNlPElBaXJHYXBBZGRyZXNzUmVzdWx0PiB7XG4gICAgaWYgKCFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGRlcml2ZWRQdWJsaWNLZXk6IFB1YmxpY0tleSA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5kZXJpdmVGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoXG4gICAgICBuZXdFeHRlbmRlZFB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChleHRlbmRlZFB1YmxpY0tleSkpLFxuICAgICAgdmlzaWJpbGl0eURlcml2YXRpb25JbmRleCxcbiAgICAgIGFkZHJlc3NEZXJpdmF0aW9uSW5kZXhcbiAgICApXG5cbiAgICByZXR1cm4gdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LnZhbHVlKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFkZHJlc3Nlc0Zyb21FeHRlbmRlZFB1YmxpY0tleShcbiAgICBleHRlbmRlZFB1YmxpY0tleTogc3RyaW5nLFxuICAgIHZpc2liaWxpdHlEZXJpdmF0aW9uSW5kZXg6IG51bWJlcixcbiAgICBhZGRyZXNzQ291bnQ6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlclxuICApOiBQcm9taXNlPElBaXJHYXBBZGRyZXNzUmVzdWx0W10+IHtcbiAgICBpZiAoIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXJhdG9yQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBBcnJheShhZGRyZXNzQ291bnQpLCAoXywgaSkgPT4gaSArIG9mZnNldClcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGdlbmVyYXRvckFycmF5Lm1hcCgoYWRkcmVzc0Rlcml2YXRpb25JbmRleDogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLmdldEFkZHJlc3NGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIHZpc2liaWxpdHlEZXJpdmF0aW9uSW5kZXgsIGFkZHJlc3NEZXJpdmF0aW9uSW5kZXgpXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uRGV0YWlscyhcbiAgICB0cmFuc2FjdGlvbjogVW5zaWduZWRUcmFuc2FjdGlvblYwLFxuICAgIGRhdGE/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG4gICAgICB0cmFuc2FjdGlvbk93bmVyPzogc3RyaW5nXG5cbiAgICAgIC8vIFRlem9zU2FwbGluZ1xuICAgICAga25vd25WaWV3aW5nS2V5cz86IHN0cmluZ1tdXG4gICAgfVxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3QgdW5zaWduZWQ6IFVuc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNvbnZlcnRVbnNpZ25lZFRyYW5zYWN0aW9uVjBUb1YxKHRyYW5zYWN0aW9uLCBkYXRhPy50cmFuc2FjdGlvbk93bmVyKVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uczogQWlyR2FwVHJhbnNhY3Rpb25bXVxuICAgIGlmICh0aGlzLmlzRXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24ucHVibGljS2V5KSkge1xuICAgICAgaWYgKCFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IEJpcDMyLicpXG4gICAgICB9XG5cbiAgICAgIHRyYW5zYWN0aW9ucyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXREZXRhaWxzRnJvbVRyYW5zYWN0aW9uKFxuICAgICAgICB1bnNpZ25lZCxcbiAgICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24ucHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHRyYW5zYWN0aW9uLnB1YmxpY0tleSkpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHB1YmxpY0tleTogUHVibGljS2V5ID0gbmV3UHVibGljS2V5KHRyYW5zYWN0aW9uLnB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMCh0cmFuc2FjdGlvbi5wdWJsaWNLZXkpKVxuICAgICAgdHJhbnNhY3Rpb25zID1cbiAgICAgICAgZGF0YT8ua25vd25WaWV3aW5nS2V5cyAmJiBpc1Rlem9zU2FwbGluZ1Byb3RvY29sKHRoaXMucHJvdG9jb2xWMSlcbiAgICAgICAgICA/IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXREZXRhaWxzRnJvbVRyYW5zYWN0aW9uKHVuc2lnbmVkIGFzIGFueSwgcHVibGljS2V5LCBkYXRhLmtub3duVmlld2luZ0tleXMpXG4gICAgICAgICAgOiBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0RGV0YWlsc0Zyb21UcmFuc2FjdGlvbih1bnNpZ25lZCwgcHVibGljS2V5KVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uc1YwOiBJQWlyR2FwVHJhbnNhY3Rpb25bXSA9IGF3YWl0IHRoaXMuY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0cmFuc2FjdGlvbnMpXG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25zVjAubWFwKFxuICAgICAgKHR4OiBJQWlyR2FwVHJhbnNhY3Rpb24pOiBJQWlyR2FwVHJhbnNhY3Rpb24gPT4gKHtcbiAgICAgICAgLi4udHgsXG4gICAgICAgIHRyYW5zYWN0aW9uRGV0YWlsczogdHgudHJhbnNhY3Rpb25EZXRhaWxzID8/IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkRldGFpbHNGcm9tU2lnbmVkKFxuICAgIHRyYW5zYWN0aW9uOiBTaWduZWRUcmFuc2FjdGlvblYwLFxuICAgIGRhdGE/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG4gICAgICB0cmFuc2FjdGlvbk93bmVyPzogc3RyaW5nXG5cbiAgICAgIC8vIFRlem9zU2FwbGluZ1xuICAgICAga25vd25WaWV3aW5nS2V5cz86IHN0cmluZ1tdXG4gICAgfVxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3Qgc2lnbmVkOiBTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY29udmVydFNpZ25lZFRyYW5zYWN0aW9uVjBUb1YxKHRyYW5zYWN0aW9uLCBkYXRhPy50cmFuc2FjdGlvbk93bmVyKVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uczogQWlyR2FwVHJhbnNhY3Rpb25bXVxuICAgIGlmICh0aGlzLmlzRXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24uYWNjb3VudElkZW50aWZpZXIpKSB7XG4gICAgICBpZiAoIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogQmlwMzIuJylcbiAgICAgIH1cblxuICAgICAgdHJhbnNhY3Rpb25zID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldERldGFpbHNGcm9tVHJhbnNhY3Rpb24oXG4gICAgICAgIHNpZ25lZCxcbiAgICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24uYWNjb3VudElkZW50aWZpZXIsIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAodHJhbnNhY3Rpb24uYWNjb3VudElkZW50aWZpZXIpKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwdWJsaWNLZXk6IFB1YmxpY0tleSA9IG5ld1B1YmxpY0tleSh0cmFuc2FjdGlvbi5hY2NvdW50SWRlbnRpZmllciwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMCh0cmFuc2FjdGlvbi5hY2NvdW50SWRlbnRpZmllcikpXG4gICAgICB0cmFuc2FjdGlvbnMgPVxuICAgICAgICBkYXRhPy5rbm93blZpZXdpbmdLZXlzICYmIGlzVGV6b3NTYXBsaW5nUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKVxuICAgICAgICAgID8gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldERldGFpbHNGcm9tVHJhbnNhY3Rpb24oc2lnbmVkIGFzIGFueSwgcHVibGljS2V5LCBkYXRhLmtub3duVmlld2luZ0tleXMpXG4gICAgICAgICAgOiBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0RGV0YWlsc0Zyb21UcmFuc2FjdGlvbihzaWduZWQsIHB1YmxpY0tleSlcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNWMDogSUFpckdhcFRyYW5zYWN0aW9uW10gPSBhd2FpdCB0aGlzLmNvbnZlcnRUcmFuc2FjdGlvbkRldGFpbHNWMVRvVjAodHJhbnNhY3Rpb25zKVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uc1YwLm1hcChcbiAgICAgICh0eDogSUFpckdhcFRyYW5zYWN0aW9uKTogSUFpckdhcFRyYW5zYWN0aW9uID0+ICh7XG4gICAgICAgIC4uLnR4LFxuICAgICAgICB0cmFuc2FjdGlvbkRldGFpbHM6IHR4LnRyYW5zYWN0aW9uRGV0YWlscyA/PyB0cmFuc2FjdGlvbi50cmFuc2FjdGlvblxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhY2FuU2lnbk1lc3NhZ2UodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBTaWduTWVzc2FnZS4nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEudmVyaWZ5TWVzc2FnZVdpdGhQdWJsaWNLZXkoXG4gICAgICBtZXNzYWdlLFxuICAgICAgbmV3U2lnbmF0dXJlKHNpZ25hdHVyZSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChzaWduYXR1cmUpKSxcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW5jcnlwdEFzeW1tZXRyaWMocGF5bG9hZDogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFjYW5FbmNyeXB0QXN5bW1ldHJpYyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEFzeW1tZXRyaWNFbmNyeXB0aW9uLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5lbmNyeXB0QXN5bW1ldHJpY1dpdGhQdWJsaWNLZXkocGF5bG9hZCwgbmV3UHVibGljS2V5KHB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQdWJsaWNLZXlGcm9tTW5lbW9uaWMobW5lbW9uaWM6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZywgcGFzc3dvcmQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3Qgc2VlZDogQnVmZmVyID0gYXdhaXQgbW5lbW9uaWNUb1NlZWQoY3J5cHRvLCBtbmVtb25pYywgcGFzc3dvcmQpXG5cbiAgICByZXR1cm4gdGhpcy5nZXRQdWJsaWNLZXlGcm9tSGV4U2VjcmV0KHNlZWQudG9TdHJpbmcoJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcml2YXRlS2V5RnJvbU1uZW1vbmljKG1uZW1vbmljOiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIHBhc3N3b3JkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiA9IHRoaXMuY3J5cHRvID8/IChhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0Q3J5cHRvQ29uZmlndXJhdGlvbigpKVxuICAgIGNvbnN0IHNlZWQ6IEJ1ZmZlciA9IGF3YWl0IG1uZW1vbmljVG9TZWVkKGNyeXB0bywgbW5lbW9uaWMsIHBhc3N3b3JkKVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21IZXhTZWNyZXQoc2VlZC50b1N0cmluZygnaGV4JyksIGRlcml2YXRpb25QYXRoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEV4dGVuZGVkUHVibGljS2V5RnJvbU1uZW1vbmljKG1uZW1vbmljOiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIHBhc3N3b3JkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3Qgc2VlZDogQnVmZmVyID0gYXdhaXQgbW5lbW9uaWNUb1NlZWQoY3J5cHRvLCBtbmVtb25pYywgcGFzc3dvcmQpXG5cbiAgICByZXR1cm4gdGhpcy5nZXRFeHRlbmRlZFB1YmxpY0tleUZyb21IZXhTZWNyZXQoc2VlZC50b1N0cmluZygnaGV4JyksIGRlcml2YXRpb25QYXRoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEV4dGVuZGVkUHJpdmF0ZUtleUZyb21NbmVtb25pYyhtbmVtb25pYzogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiA9IHRoaXMuY3J5cHRvID8/IChhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0Q3J5cHRvQ29uZmlndXJhdGlvbigpKVxuICAgIGNvbnN0IHNlZWQ6IEJ1ZmZlciA9IGF3YWl0IG1uZW1vbmljVG9TZWVkKGNyeXB0bywgbW5lbW9uaWMsIHBhc3N3b3JkKVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RXh0ZW5kZWRQcml2YXRlS2V5RnJvbUhleFNlY3JldChzZWVkLnRvU3RyaW5nKCdoZXgnKSwgZGVyaXZhdGlvblBhdGgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVibGljS2V5RnJvbUhleFNlY3JldChzZWNyZXQ6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3QgZGVyaXZhdGl2ZTogQ3J5cHRvRGVyaXZhdGl2ZSA9IGF3YWl0IGRlcml2ZShjcnlwdG8sIEJ1ZmZlci5mcm9tKHNlY3JldCwgJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgICBjb25zdCBrZXlQYWlyOiBLZXlQYWlyID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEtleVBhaXJGcm9tRGVyaXZhdGl2ZShkZXJpdmF0aXZlKVxuXG4gICAgcmV0dXJuIGtleVBhaXIucHVibGljS2V5LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpdmF0ZUtleUZyb21IZXhTZWNyZXQoc2VjcmV0OiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3QgZGVyaXZhdGl2ZTogQ3J5cHRvRGVyaXZhdGl2ZSA9IGF3YWl0IGRlcml2ZShjcnlwdG8sIEJ1ZmZlci5mcm9tKHNlY3JldCwgJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgICBjb25zdCBrZXlQYWlyOiBLZXlQYWlyID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEtleVBhaXJGcm9tRGVyaXZhdGl2ZShkZXJpdmF0aXZlKVxuXG4gICAgcmV0dXJuIGtleVBhaXIuc2VjcmV0S2V5LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RXh0ZW5kZWRQdWJsaWNLZXlGcm9tSGV4U2VjcmV0KHNlY3JldDogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3QgZGVyaXZhdGl2ZTogQ3J5cHRvRGVyaXZhdGl2ZSA9IGF3YWl0IGRlcml2ZShjcnlwdG8sIEJ1ZmZlci5mcm9tKHNlY3JldCwgJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgICBjb25zdCBrZXlQYWlyOiBFeHRlbmRlZEtleVBhaXIgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0RXh0ZW5kZWRLZXlQYWlyRnJvbURlcml2YXRpdmUoZGVyaXZhdGl2ZSlcblxuICAgIHJldHVybiBrZXlQYWlyLnB1YmxpY0tleS52YWx1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEV4dGVuZGVkUHJpdmF0ZUtleUZyb21IZXhTZWNyZXQoc2VjcmV0OiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZSwgQmlwMzIuJylcbiAgICB9XG5cbiAgICBjb25zdCBjcnlwdG86IENyeXB0b0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNyeXB0byA/PyAoYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldENyeXB0b0NvbmZpZ3VyYXRpb24oKSlcbiAgICBjb25zdCBkZXJpdmF0aXZlOiBDcnlwdG9EZXJpdmF0aXZlID0gYXdhaXQgZGVyaXZlKGNyeXB0bywgQnVmZmVyLmZyb20oc2VjcmV0LCAnaGV4JyksIGRlcml2YXRpb25QYXRoKVxuICAgIGNvbnN0IGtleVBhaXI6IEV4dGVuZGVkS2V5UGFpciA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRFeHRlbmRlZEtleVBhaXJGcm9tRGVyaXZhdGl2ZShkZXJpdmF0aXZlKVxuXG4gICAgcmV0dXJuIGtleVBhaXIuc2VjcmV0S2V5LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbldpdGhFeHRlbmRlZFByaXZhdGVLZXkoZXh0ZW5kZWRQcml2YXRlS2V5OiBzdHJpbmcsIHRyYW5zYWN0aW9uOiBhbnksIGNoaWxkRGVyaXZhdGlvblBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZSwgQmlwMzIuJylcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEoe1xuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBwdWJsaWNLZXk6ICcnXG4gICAgfSlcblxuICAgIGNvbnN0IGV4dGVuZGVkU2VjcmV0S2V5OiBFeHRlbmRlZFNlY3JldEtleSA9IG5ld0V4dGVuZGVkU2VjcmV0S2V5KGV4dGVuZGVkUHJpdmF0ZUtleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChleHRlbmRlZFByaXZhdGVLZXkpKVxuXG4gICAgY29uc3Qgc2VjcmV0S2V5OiBFeHRlbmRlZFNlY3JldEtleSB8IFNlY3JldEtleSA9IGNoaWxkRGVyaXZhdGlvblBhdGhcbiAgICAgID8gYXdhaXQgdGhpcy5kZXJpdmVTZWNyZXRLZXkoZXh0ZW5kZWRTZWNyZXRLZXksIGNoaWxkRGVyaXZhdGlvblBhdGgpXG4gICAgICA6IGV4dGVuZGVkU2VjcmV0S2V5XG5cbiAgICBjb25zdCBzaWduZWQ6IFNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnNpZ25UcmFuc2FjdGlvbldpdGhTZWNyZXRLZXkodW5zaWduZWQsIHNlY3JldEtleSlcbiAgICBjb25zdCBzaWduZWRWMDogVHJhbnNhY3Rpb25TaWduUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRTaWduZWRUcmFuc2FjdGlvblYxVG9WMChzaWduZWQsICcnKVxuXG4gICAgcmV0dXJuIHNpZ25lZFYwLnRyYW5zYWN0aW9uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbldpdGhQcml2YXRlS2V5KHByaXZhdGVLZXk6IHN0cmluZywgdHJhbnNhY3Rpb246IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUuJylcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEoe1xuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBwdWJsaWNLZXk6ICcnXG4gICAgfSlcblxuICAgIGNvbnN0IHNpZ25lZDogU2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuc2lnblRyYW5zYWN0aW9uV2l0aFNlY3JldEtleShcbiAgICAgIHVuc2lnbmVkLFxuICAgICAgbmV3U2VjcmV0S2V5KHByaXZhdGVLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHJpdmF0ZUtleSkpXG4gICAgKVxuICAgIGNvbnN0IHNpZ25lZFYwOiBUcmFuc2FjdGlvblNpZ25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydFNpZ25lZFRyYW5zYWN0aW9uVjFUb1YwKHNpZ25lZCwgJycpXG5cbiAgICByZXR1cm4gc2lnbmVkVjAudHJhbnNhY3Rpb25cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGtleXBhaXI6IHsgcHVibGljS2V5Pzogc3RyaW5nOyBwcml2YXRlS2V5OiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFjYW5TaWduTWVzc2FnZSh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIFNpZ25NZXNzYWdlLicpXG4gICAgfVxuXG4gICAgY29uc3QgcHJpdmF0ZUtleSA9XG4gICAgICBnZXRTZWNyZXRLZXlUeXBlKGtleXBhaXIucHJpdmF0ZUtleSkgPT09ICd4cHJpdidcbiAgICAgICAgPyBhd2FpdCB0aGlzLmdldFByaXZhdGVLZXlGcm9tRXh0ZW5kZWRQcml2YXRlS2V5KGtleXBhaXIucHJpdmF0ZUtleSlcbiAgICAgICAgOiBrZXlwYWlyLnByaXZhdGVLZXlcblxuICAgIGNvbnN0IHB1YmxpY0tleSA9IGtleXBhaXIucHVibGljS2V5XG4gICAgICA/IGdldFB1YmxpY0tleVR5cGUoa2V5cGFpci5wdWJsaWNLZXkpID09PSAneHB1YidcbiAgICAgICAgPyBhd2FpdCB0aGlzLmdldFB1YmxpY0tleUZyb21FeHRlbmRlZFByaXZhdGVLZXkoa2V5cGFpci5wdWJsaWNLZXkpXG4gICAgICAgIDoga2V5cGFpci5wdWJsaWNLZXlcbiAgICAgIDogJydcblxuICAgIGNvbnN0IHNpZ25hdHVyZTogU2lnbmF0dXJlID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnNpZ25NZXNzYWdlV2l0aEtleVBhaXIobWVzc2FnZSwge1xuICAgICAgc2VjcmV0S2V5OiBuZXdTZWNyZXRLZXkocHJpdmF0ZUtleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwcml2YXRlS2V5KSksXG4gICAgICBwdWJsaWNLZXk6IG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNpZ25hdHVyZS52YWx1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlY3J5cHRBc3ltbWV0cmljKGVuY3J5cHRlZFBheWxvYWQ6IHN0cmluZywga2V5cGFpcjogeyBwdWJsaWNLZXk/OiBzdHJpbmc7IHByaXZhdGVLZXk6IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWNhbkVuY3J5cHRBc3ltbWV0cmljKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZSwgQXN5bW1ldHJpY0VuY3J5cHRpb24uJylcbiAgICB9XG5cbiAgICBjb25zdCBwcml2YXRlS2V5ID1cbiAgICAgIGdldFNlY3JldEtleVR5cGUoa2V5cGFpci5wcml2YXRlS2V5KSA9PT0gJ3hwcml2J1xuICAgICAgICA/IGF3YWl0IHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21FeHRlbmRlZFByaXZhdGVLZXkoa2V5cGFpci5wcml2YXRlS2V5KVxuICAgICAgICA6IGtleXBhaXIucHJpdmF0ZUtleVxuXG4gICAgY29uc3QgcHVibGljS2V5ID0ga2V5cGFpci5wdWJsaWNLZXlcbiAgICAgID8gZ2V0UHVibGljS2V5VHlwZShrZXlwYWlyLnB1YmxpY0tleSkgPT09ICd4cHViJ1xuICAgICAgICA/IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5RnJvbUV4dGVuZGVkUHJpdmF0ZUtleShrZXlwYWlyLnB1YmxpY0tleSlcbiAgICAgICAgOiBrZXlwYWlyLnB1YmxpY0tleVxuICAgICAgOiAnJ1xuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5kZWNyeXB0QXN5bW1ldHJpY1dpdGhLZXlQYWlyKGVuY3J5cHRlZFBheWxvYWQsIHtcbiAgICAgIHNlY3JldEtleTogbmV3U2VjcmV0S2V5KHByaXZhdGVLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHJpdmF0ZUtleSkpLFxuICAgICAgcHVibGljS2V5OiBuZXdQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbmNyeXB0QUVTKHBheWxvYWQ6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWNhbkVuY3J5cHRBRVModGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBBRVMuJylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBwcml2YXRlS2V5ID0gZ2V0U2VjcmV0S2V5VHlwZShwcml2YXRlS2V5KSA9PT0gJ3hwcml2JyA/IGF3YWl0IHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21FeHRlbmRlZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgOiBwcml2YXRlS2V5XG5cbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmVuY3J5cHRBRVNXaXRoU2VjcmV0S2V5KHBheWxvYWQsIG5ld1NlY3JldEtleShwcml2YXRlS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHByaXZhdGVLZXkpKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWNyeXB0QUVTKGVuY3J5cHRlZFBheWxvYWQ6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWNhbkVuY3J5cHRBRVModGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBBRVMuJylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBwcml2YXRlS2V5ID0gZ2V0U2VjcmV0S2V5VHlwZShwcml2YXRlS2V5KSA9PT0gJ3hwcml2JyA/IGF3YWl0IHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21FeHRlbmRlZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgOiBwcml2YXRlS2V5XG5cbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmRlY3J5cHRBRVNXaXRoU2VjcmV0S2V5KGVuY3J5cHRlZFBheWxvYWQsIG5ld1NlY3JldEtleShwcml2YXRlS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHByaXZhdGVLZXkpKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcml2YXRlS2V5RnJvbUV4dGVuZGVkUHJpdmF0ZUtleShleHRlbmRlZFByaXZhdGVLZXk6IHN0cmluZywgY2hpbGREZXJpdmF0aW9uUGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IHNlY3JldEtleTogU2VjcmV0S2V5ID0gYXdhaXQgdGhpcy5kZXJpdmVTZWNyZXRLZXkoXG4gICAgICBuZXdFeHRlbmRlZFNlY3JldEtleShleHRlbmRlZFByaXZhdGVLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQcml2YXRlS2V5KSksXG4gICAgICBjaGlsZERlcml2YXRpb25QYXRoXG4gICAgKVxuXG4gICAgcmV0dXJuIHNlY3JldEtleS52YWx1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1YmxpY0tleUZyb21FeHRlbmRlZFByaXZhdGVLZXkoZXh0ZW5kZWRQdWJsaWNLZXk6IHN0cmluZywgY2hpbGREZXJpdmF0aW9uUGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IHB1YmxpY0tleTogUHVibGljS2V5ID0gYXdhaXQgdGhpcy5kZXJpdmVQdWJsaWNLZXkoXG4gICAgICBuZXdFeHRlbmRlZFB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChleHRlbmRlZFB1YmxpY0tleSkpLFxuICAgICAgY2hpbGREZXJpdmF0aW9uUGF0aFxuICAgIClcblxuICAgIHJldHVybiBwdWJsaWNLZXkudmFsdWVcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXROZXR3b3JrKHByb3RvY29sT3B0aW9ucz86IFByb3RvY29sT3B0aW9uc1YwKTogUHJvdG9jb2xOZXR3b3JrVjAge1xuICAgIGxldCBrbm93bk9wdGlvbnM6IFByb3RvY29sT3B0aW9uc1YwIHwgdW5kZWZpbmVkXG4gICAgdHJ5IHtcbiAgICAgIGtub3duT3B0aW9ucyA9IHByb3RvY29sT3B0aW9ucyA/PyBnZXRQcm90b2NvbE9wdGlvbnNCeUlkZW50aWZpZXJMZWdhY3kodGhpcy5pZGVudGlmaWVyKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgY29uc3QgeyBuYW1lLCB0eXBlLCBycGNVcmwsIC4uLnJlc3QgfSA9IHRoaXMubmV0d29yayA/PyB7fVxuXG4gICAgcmV0dXJuIG5ldyBQcm90b2NvbE5ldHdvcmtBZGFwdGVyKFxuICAgICAgbmFtZSA/PyBrbm93bk9wdGlvbnM/Lm5ldHdvcmsubmFtZSA/PyAnJyxcbiAgICAgIHR5cGUgPz8ga25vd25PcHRpb25zPy5uZXR3b3JrLnR5cGUgPz8gJ21haW5uZXQnLFxuICAgICAgcnBjVXJsID8/IGtub3duT3B0aW9ucz8ubmV0d29yay5ycGNVcmwgPz8gJycsXG4gICAgICB0aGlzLmJsb2NrRXhwbG9yZXJWMCxcbiAgICAgIHJlc3QgfHwgKGtub3duT3B0aW9ucz8ubmV0d29yay5leHRyYXMgPz8ge30pXG4gICAgKVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlcml2ZVNlY3JldEtleShleHRlbmRlZFNlY3JldEtleTogRXh0ZW5kZWRTZWNyZXRLZXksIGNoaWxkRGVyaXZhdGlvblBhdGg6IHN0cmluZyA9ICcwLzAnKTogUHJvbWlzZTxTZWNyZXRLZXk+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydCBzZWNyZXQga2V5IGRlcml2YXRpb24sIG1pc3NpbmcgaW5mZXJmYWNlOiBPZmZsaW5lLCBCaXAzMi5gKVxuICAgIH1cblxuICAgIGlmIChjaGlsZERlcml2YXRpb25QYXRoLnN0YXJ0c1dpdGgoJ20nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNlaXZlZCBmdWxsIGRlcml2YXRpb24gcGF0aCwgZXhwZWN0ZWQgY2hpbGQgZGVyaXZhdGlvbiBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY2hpbGREZXJpdmF0aW9uUGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdoJykgfHwgY2hpbGREZXJpdmF0aW9uUGF0aC5pbmNsdWRlcyhgJ2ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIGRlcml2YXRpb24gcGF0aCBjYW5ub3QgaW5jbHVkZSBoYXJkZW5lZCBjaGlsZHJlbicpXG4gICAgfVxuXG4gICAgY29uc3QgW3Zpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4XTogbnVtYmVyW10gPSBjaGlsZERlcml2YXRpb25QYXRoLnNwbGl0KCcvJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKVxuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5kZXJpdmVGcm9tRXh0ZW5kZWRTZWNyZXRLZXkoZXh0ZW5kZWRTZWNyZXRLZXksIHZpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4KVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlcml2ZVB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleTogRXh0ZW5kZWRQdWJsaWNLZXksIGNoaWxkRGVyaXZhdGlvblBhdGg6IHN0cmluZyA9ICcwLzAnKTogUHJvbWlzZTxQdWJsaWNLZXk+IHtcbiAgICBpZiAoIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydCBwdWJsaWMga2V5IGRlcml2YXRpb24sIG1pc3NpbmcgaW5mZXJmYWNlOiBCaXAzMi5gKVxuICAgIH1cblxuICAgIGlmIChjaGlsZERlcml2YXRpb25QYXRoLnN0YXJ0c1dpdGgoJ20nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNlaXZlZCBmdWxsIGRlcml2YXRpb24gcGF0aCwgZXhwZWN0ZWQgY2hpbGQgZGVyaXZhdGlvbiBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY2hpbGREZXJpdmF0aW9uUGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdoJykgfHwgY2hpbGREZXJpdmF0aW9uUGF0aC5pbmNsdWRlcyhgJ2ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIGRlcml2YXRpb24gcGF0aCBjYW5ub3QgaW5jbHVkZSBoYXJkZW5lZCBjaGlsZHJlbicpXG4gICAgfVxuXG4gICAgY29uc3QgW3Zpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4XTogbnVtYmVyW10gPSBjaGlsZERlcml2YXRpb25QYXRoLnNwbGl0KCcvJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKVxuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5kZXJpdmVGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIHZpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4KVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFNlcmlhbGl6ZXJJZGVudGlmaWVyKGJhc2U/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXI6IHN0cmluZyA9IGJhc2UgPz8gKGF3YWl0IHRoaXMuZ2V0SWRlbnRpZmllcigpKVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXIuc3RhcnRzV2l0aChTdWJQcm90b2NvbFN5bWJvbHMuRVRIX0VSQzIwKVxuICAgICAgPyBTdWJQcm90b2NvbFN5bWJvbHMuRVRIX0VSQzIwXG4gICAgICA6IGlkZW50aWZpZXIuc3RhcnRzV2l0aChTdWJQcm90b2NvbFN5bWJvbHMuT1BUSU1JU01fRVJDMjApXG4gICAgICA/IFN1YlByb3RvY29sU3ltYm9scy5PUFRJTUlTTV9FUkMyMFxuICAgICAgOiBpZGVudGlmaWVyXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2lnblJlcXVlc3QsIG93bmVyPzogc3RyaW5nKTogUHJvbWlzZTxVbnNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaWRlbnRpZmllcjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRTZXJpYWxpemVySWRlbnRpZmllcihvd25lcilcblxuICAgIHJldHVybiB0aGlzLnYzU2VyaWFsaXplckNvbXBhbmlvbi5mcm9tVHJhbnNhY3Rpb25TaWduUmVxdWVzdChpZGVudGlmaWVyLCB0cmFuc2FjdGlvbilcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0VW5zaWduZWRUcmFuc2FjdGlvblYxVG9WMChcbiAgICB0cmFuc2FjdGlvbjogVW5zaWduZWRUcmFuc2FjdGlvbixcbiAgICBwdWJsaWNLZXk6IHN0cmluZyxcbiAgICBjYWxsYmFja1VybD86IHN0cmluZyxcbiAgICBvd25lcj86IHN0cmluZ1xuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uU2lnblJlcXVlc3Q+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFNlcmlhbGl6ZXJJZGVudGlmaWVyKG93bmVyKVxuXG4gICAgcmV0dXJuIHRoaXMudjNTZXJpYWxpemVyQ29tcGFuaW9uLnRvVHJhbnNhY3Rpb25TaWduUmVxdWVzdChpZGVudGlmaWVyLCB0cmFuc2FjdGlvbiwgcHVibGljS2V5LCBjYWxsYmFja1VybClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0U2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2lnblJlc3BvbnNlLCBvd25lcj86IHN0cmluZyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFNlcmlhbGl6ZXJJZGVudGlmaWVyKG93bmVyKVxuXG4gICAgcmV0dXJuIHRoaXMudjNTZXJpYWxpemVyQ29tcGFuaW9uLmZyb21UcmFuc2FjdGlvblNpZ25SZXNwb25zZShpZGVudGlmaWVyLCB0cmFuc2FjdGlvbilcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0U2lnbmVkVHJhbnNhY3Rpb25WMVRvVjAoXG4gICAgdHJhbnNhY3Rpb246IFNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIGFjY291bnRJZGVudGlmaWVyOiBzdHJpbmcsXG4gICAgb3duZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvblNpZ25SZXNwb25zZT4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXI6IHN0cmluZyA9IGF3YWl0IHRoaXMuZ2V0U2VyaWFsaXplcklkZW50aWZpZXIob3duZXIpXG5cbiAgICByZXR1cm4gdGhpcy52M1NlcmlhbGl6ZXJDb21wYW5pb24udG9UcmFuc2FjdGlvblNpZ25SZXNwb25zZShpZGVudGlmaWVyLCB0cmFuc2FjdGlvbiwgYWNjb3VudElkZW50aWZpZXIpXG4gIH1cblxuICBwdWJsaWMgY29udmVydEZlZURlZmF1bHRzVjFUb1YwKGZlZURlZmF1bHRzOiBGZWVEZWZhdWx0cyk6IEZlZURlZmF1bHRzVjAge1xuICAgIHJldHVybiBjb252ZXJ0RmVlRGVmYXVsdHNWMVRvVjAoZmVlRGVmYXVsdHMsIHRoaXMucHJvdG9jb2xNZXRhZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0VHJhbnNhY3Rpb25EZXRhaWxzVjFUb1YwKHR4czogQWlyR2FwVHJhbnNhY3Rpb25bXSk6IFByb21pc2U8SUFpckdhcFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0eHMsIHRoaXMucHJvdG9jb2xNZXRhZGF0YSwgdGhpcy5uZXR3b3JrVjApXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tYmluZVRyYW5zYWN0aW9uRGV0YWlsczxfVW5pdHMgZXh0ZW5kcyBzdHJpbmc+KHJlY2lwaWVudHM6IHN0cmluZ1tdLCB2YWx1ZXM6IHN0cmluZ1tdKTogVHJhbnNhY3Rpb25EZXRhaWxzPF9Vbml0cz5bXSB7XG4gICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY2lwaWVudHMgbGVuZ3RoIG11c3QgbWF0Y2ggdmFsdWVzIGxlbmd0aC4nKVxuICAgIH1cblxuICAgIHJldHVybiByZWNpcGllbnRzLm1hcCgocmVjaXBpZW50OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICB0bzogcmVjaXBpZW50LFxuICAgICAgYW1vdW50OiBuZXdBbW91bnQodmFsdWVzW2luZGV4XSwgJ2Jsb2NrY2hhaW4nKVxuICAgIH0pKVxuICB9XG5cbiAgcHJvdGVjdGVkIGlzRXh0ZW5kZWRQdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHVibGljS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSB8fCBwdWJsaWNLZXkuc3RhcnRzV2l0aCgneXB1YicpIHx8IHB1YmxpY0tleS5zdGFydHNXaXRoKCd6cHViJylcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBcmJpdHJhcnlEYXRhKGRhdGE6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2ltcGxlQXJiaXRyYXJ5RGF0YU1ldGFkYXRhU2NoZW1hOiBTY2hlbWE8UHJvdG9jb2xUcmFuc2FjdGlvbkFyYml0cmFyeURhdGFNZXRhZGF0YT4gPSB7XG4gICAgICBuYW1lOiAncmVxdWlyZWQnLFxuICAgICAgbWF4TGVuZ3RoOiAnb3B0aW9uYWwnLFxuICAgICAgcmVnZXg6ICdvcHRpb25hbCdcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbE1ldGFkYXRhLnRyYW5zYWN0aW9uPy5hcmJpdHJhcnlEYXRhXG4gICAgICA/IGltcGxlbWVudHNJbnRlcmZhY2U8UHJvdG9jb2xUcmFuc2FjdGlvbkFyYml0cmFyeURhdGFNZXRhZGF0YT4oXG4gICAgICAgICAgdGhpcy5wcm90b2NvbE1ldGFkYXRhLnRyYW5zYWN0aW9uPy5hcmJpdHJhcnlEYXRhLFxuICAgICAgICAgIHNpbXBsZUFyYml0cmFyeURhdGFNZXRhZGF0YVNjaGVtYVxuICAgICAgICApXG4gICAgICAgID8gZGF0YVt0aGlzLnByb3RvY29sTWV0YWRhdGEudHJhbnNhY3Rpb24uYXJiaXRyYXJ5RGF0YS5uYW1lXVxuICAgICAgICA6IGRhdGFbdGhpcy5wcm90b2NvbE1ldGFkYXRhLnRyYW5zYWN0aW9uLmFyYml0cmFyeURhdGEucm9vdD8ubmFtZSA/PyB0aGlzLnByb3RvY29sTWV0YWRhdGEudHJhbnNhY3Rpb24uYXJiaXRyYXJ5RGF0YS5pbm5lcj8ubmFtZV1cbiAgICAgIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuLy8gSUNvaW5EZWxlZ2F0ZVByb3RvY29sXG5cbmV4cG9ydCBjbGFzcyBJQ29pbkRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyPFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCAmIEFpckdhcERlbGVnYXRlUHJvdG9jb2w+XG4gIGV4dGVuZHMgSUNvaW5Qcm90b2NvbEFkYXB0ZXI8VD5cbiAgaW1wbGVtZW50cyBJQ29pbkRlbGVnYXRlUHJvdG9jb2xcbntcbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHREZWxlZ2F0ZWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlZmF1bHREZWxlZ2F0ZWUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuZ2V0Q3VycmVudERlbGVnYXRlZXNGb3JQdWJsaWNLZXkoXG4gICAgICB7IHR5cGU6ICdwdWInLCB2YWx1ZTogcHVibGljS2V5LCBmb3JtYXQ6IGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSB9LFxuICAgICAgZGF0YVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50RGVsZWdhdGVlc0ZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuZ2V0Q3VycmVudERlbGVnYXRlZXNGb3JBZGRyZXNzKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdGVlRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRlZURldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlbGVnYXRlZURldGFpbHMoYWRkcmVzcywgZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc1B1YmxpY0tleURlbGVnYXRpbmcocHVibGljS2V5OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmlzUHVibGljS2V5RGVsZWdhdGluZyh7IHR5cGU6ICdwdWInLCB2YWx1ZTogcHVibGljS2V5LCBmb3JtYXQ6IGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSB9LCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzQWRkcmVzc0RlbGVnYXRpbmcoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5pc0FkZHJlc3NEZWxlZ2F0aW5nKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRvckRldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlbGVnYXRvckRldGFpbHNGcm9tUHVibGljS2V5KFxuICAgICAgeyB0eXBlOiAncHViJywgdmFsdWU6IHB1YmxpY0tleSwgZm9ybWF0OiBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkgfSxcbiAgICAgIGRhdGFcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8RGVsZWdhdG9yRGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdGlvbkRldGFpbHNGcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBkZWxlZ2F0ZWVzOiBzdHJpbmdbXSwgZGF0YT86IGFueSk6IFByb21pc2U8RGVsZWdhdGlvbkRldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlbGVnYXRpb25EZXRhaWxzRnJvbVB1YmxpY0tleShcbiAgICAgIHsgdHlwZTogJ3B1YicsIHZhbHVlOiBwdWJsaWNLZXksIGZvcm1hdDogZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpIH0sXG4gICAgICBkZWxlZ2F0ZWVzLFxuICAgICAgZGF0YVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxlZ2F0aW9uRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGVsZWdhdGVlczogc3RyaW5nW10sIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRpb25EZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5nZXREZWxlZ2F0aW9uRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3MsIGRlbGVnYXRlZXMsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZURlbGVnYXRvckFjdGlvbkZyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIHR5cGU6IGFueSwgZGF0YT86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEucHJlcGFyZURlbGVnYXRvckFjdGlvbkZyb21QdWJsaWNLZXkoXG4gICAgICB7IHR5cGU6ICdwdWInLCB2YWx1ZTogcHVibGljS2V5LCBmb3JtYXQ6IGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSB9LFxuICAgICAgdHlwZSxcbiAgICAgIGRhdGFcbiAgICApXG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNWMCA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHJhbnNhY3Rpb25zLm1hcCgodHJhbnNhY3Rpb24pID0+IHRoaXMuY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMVRvVjAodHJhbnNhY3Rpb24sIHB1YmxpY0tleSkpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uc1YwLm1hcCgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKVxuICB9XG59XG5cbi8vIElDb2luU3ViUHJvdG9jb2xcblxuZXhwb3J0IGNsYXNzIElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCAmIFN1YlByb3RvY29sID0gQWlyR2FwQW55UHJvdG9jb2wgJiBTdWJQcm90b2NvbD5cbiAgZXh0ZW5kcyBJQ29pblByb3RvY29sQWRhcHRlcjxUPlxuICBpbXBsZW1lbnRzIElDb2luU3ViUHJvdG9jb2xcbntcbiAgcHVibGljIHJlYWRvbmx5IGlzU3ViUHJvdG9jb2w6IGJvb2xlYW4gPSB0cnVlXG4gIHB1YmxpYyByZWFkb25seSBzdWJQcm90b2NvbFR5cGU6IFN1YlByb3RvY29sVHlwZVYwXG4gIHB1YmxpYyByZWFkb25seSBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90b2NvbFYxOiBULFxuICAgIHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEsXG4gICAgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIG5ldHdvcms6IFByb3RvY29sTmV0d29yayB8IHVuZGVmaW5lZCxcbiAgICB2MUJsb2NrRXhwbG9yZXI6IEFpckdhcEJsb2NrRXhwbG9yZXIgfCB1bmRlZmluZWQsXG4gICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhOiBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uOiBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gICAgdHlwZTogU3ViUHJvdG9jb2xUeXBlLFxuICAgIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKHByb3RvY29sVjEsIHByb3RvY29sTWV0YWRhdGEsIGNyeXB0bywgbmV0d29yaywgdjFCbG9ja0V4cGxvcmVyLCBibG9ja0V4cGxvcmVyTWV0YWRhdGEsIHYzU2VyaWFsaXplckNvbXBhbmlvbilcblxuICAgIHRoaXMuc3ViUHJvdG9jb2xUeXBlID0gdHlwZSA9PT0gJ2FjY291bnQnID8gU3ViUHJvdG9jb2xUeXBlVjAuQUNDT1VOVCA6IFN1YlByb3RvY29sVHlwZVYwLlRPS0VOXG4gICAgdGhpcy5jb250cmFjdEFkZHJlc3MgPSBjb250cmFjdEFkZHJlc3NcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJc1N1YlByb3RvY29sKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzU3ViUHJvdG9jb2xcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTdWJQcm90b2NvbFR5cGUoKTogUHJvbWlzZTxTdWJQcm90b2NvbFR5cGVWMD4ge1xuICAgIHJldHVybiB0aGlzLnN1YlByb3RvY29sVHlwZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbnRyYWN0QWRkcmVzcygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyYWN0QWRkcmVzc1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJQ29pbkRlbGVnYXRlU3ViUHJvdG9jb2xBZGFwdGVyPFxuICAgIFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCAmIEFpckdhcERlbGVnYXRlUHJvdG9jb2wgJiBTdWJQcm90b2NvbCA9IEFpckdhcEFueVByb3RvY29sICYgQWlyR2FwRGVsZWdhdGVQcm90b2NvbCAmIFN1YlByb3RvY29sXG4gID5cbiAgZXh0ZW5kcyBJQ29pblN1YlByb3RvY29sQWRhcHRlcjxUPlxuICBpbXBsZW1lbnRzIElDb2luU3ViUHJvdG9jb2wsIElDb2luRGVsZWdhdGVQcm90b2NvbFxue1xuICBwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyOiBJQ29pbkRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyPFQ+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xWMTogVCxcbiAgICBwcm90b2NvbE1ldGFkYXRhOiBQcm90b2NvbE1ldGFkYXRhLFxuICAgIGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmsgfCB1bmRlZmluZWQsXG4gICAgdjFCbG9ja0V4cGxvcmVyOiBBaXJHYXBCbG9ja0V4cGxvcmVyIHwgdW5kZWZpbmVkLFxuICAgIGJsb2NrRXhwbG9yZXJNZXRhZGF0YTogQmxvY2tFeHBsb3Jlck1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIHYzU2VyaWFsaXplckNvbXBhbmlvbjogQWlyR2FwVjNTZXJpYWxpemVyQ29tcGFuaW9uLFxuICAgIHR5cGU6IFN1YlByb3RvY29sVHlwZSxcbiAgICBjb250cmFjdEFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIHByb3RvY29sVjEsXG4gICAgICBwcm90b2NvbE1ldGFkYXRhLFxuICAgICAgY3J5cHRvLFxuICAgICAgbmV0d29yayxcbiAgICAgIHYxQmxvY2tFeHBsb3JlcixcbiAgICAgIGJsb2NrRXhwbG9yZXJNZXRhZGF0YSxcbiAgICAgIHYzU2VyaWFsaXplckNvbXBhbmlvbixcbiAgICAgIHR5cGUsXG4gICAgICBjb250cmFjdEFkZHJlc3NcbiAgICApXG5cbiAgICB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyID0gbmV3IElDb2luRGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIoXG4gICAgICBwcm90b2NvbFYxLFxuICAgICAgcHJvdG9jb2xNZXRhZGF0YSxcbiAgICAgIGNyeXB0byxcbiAgICAgIG5ldHdvcmssXG4gICAgICB2MUJsb2NrRXhwbG9yZXIsXG4gICAgICBibG9ja0V4cGxvcmVyTWV0YWRhdGEsXG4gICAgICB2M1NlcmlhbGl6ZXJDb21wYW5pb25cbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdERlbGVnYXRlZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldERlZmF1bHREZWxlZ2F0ZWUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yUHVibGljS2V5KHB1YmxpY0tleSwgZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50RGVsZWdhdGVlc0ZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yQWRkcmVzcyhhZGRyZXNzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGVnYXRlZURldGFpbHMoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxEZWxlZ2F0ZWVEZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIuZ2V0RGVsZWdhdGVlRGV0YWlscyhhZGRyZXNzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzUHVibGljS2V5RGVsZWdhdGluZyhwdWJsaWNLZXk6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmlzUHVibGljS2V5RGVsZWdhdGluZyhwdWJsaWNLZXksIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNBZGRyZXNzRGVsZWdhdGluZyhhZGRyZXNzOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVByb3RvY29sQWRhcHRlci5pc0FkZHJlc3NEZWxlZ2F0aW5nKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRvckRldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVByb3RvY29sQWRhcHRlci5nZXREZWxlZ2F0b3JEZXRhaWxzRnJvbVB1YmxpY0tleShwdWJsaWNLZXksIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8RGVsZWdhdG9yRGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldERlbGVnYXRvckRldGFpbHNGcm9tQWRkcmVzcyhhZGRyZXNzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGVnYXRpb25EZXRhaWxzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZywgZGVsZWdhdGVlczogc3RyaW5nW10sIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRpb25EZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIuZ2V0RGVsZWdhdGlvbkRldGFpbHNGcm9tUHVibGljS2V5KHB1YmxpY0tleSwgZGVsZWdhdGVlcywgZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxlZ2F0aW9uRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGVsZWdhdGVlczogc3RyaW5nW10sIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRpb25EZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIuZ2V0RGVsZWdhdGlvbkRldGFpbHNGcm9tQWRkcmVzcyhhZGRyZXNzLCBkZWxlZ2F0ZWVzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHByZXBhcmVEZWxlZ2F0b3JBY3Rpb25Gcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCB0eXBlOiBhbnksIGRhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIucHJlcGFyZURlbGVnYXRvckFjdGlvbkZyb21QdWJsaWNLZXkocHVibGljS2V5LCB0eXBlLCBkYXRhKVxuICB9XG59XG5cbi8vIEZhY3Rvcmllc1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSUNvaW5Qcm90b2NvbEFkYXB0ZXI8VCBleHRlbmRzIEFpckdhcEFueVByb3RvY29sPihcbiAgcHJvdG9jb2xWMTogVCxcbiAgYmxvY2tFeHBsb3JlclYxOiBBaXJHYXBCbG9ja0V4cGxvcmVyIHwgdW5kZWZpbmVkLFxuICB2M1NlcmlhbGl6ZXJDb21wYW5pb246IEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbixcbiAgZXh0cmE6IHtcbiAgICB0eXBlPzogUHJvdG9jb2xDb25maWd1cmF0aW9uWyd0eXBlJ11cbiAgICBwcm90b2NvbE1ldGFkYXRhPzogUHJvdG9jb2xNZXRhZGF0YVxuICAgIGNyeXB0bz86IENyeXB0b0NvbmZpZ3VyYXRpb24gfCBudWxsXG4gICAgbmV0d29yaz86IFByb3RvY29sTmV0d29yayB8IG51bGxcbiAgICBibG9ja0V4cGxvcmVyTWV0YWRhdGE/OiBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCBudWxsXG4gIH0gPSB7fVxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxUPj4ge1xuICBjb25zdCBbcHJvdG9jb2xNZXRhZGF0YSwgY3J5cHRvLCBuZXR3b3JrLCBibG9ja0V4cGxvcmVyTWV0YWRhdGFdOiBbXG4gICAgUHJvdG9jb2xNZXRhZGF0YSxcbiAgICBDcnlwdG9Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIFByb3RvY29sTmV0d29yayB8IHVuZGVmaW5lZCxcbiAgICBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCB1bmRlZmluZWRcbiAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBleHRyYS5wcm90b2NvbE1ldGFkYXRhID8gUHJvbWlzZS5yZXNvbHZlKGV4dHJhLnByb3RvY29sTWV0YWRhdGEpIDogcHJvdG9jb2xWMS5nZXRNZXRhZGF0YSgpLFxuICAgIGV4dHJhLmNyeXB0b1xuICAgICAgPyBQcm9taXNlLnJlc29sdmUoZXh0cmEuY3J5cHRvKVxuICAgICAgOiBleHRyYS5jcnlwdG8gPT09IG51bGwgfHwgIWlzT2ZmbGluZVByb3RvY29sKHByb3RvY29sVjEpIHx8IChleHRyYS50eXBlICE9PSAnb2ZmbGluZScgJiYgZXh0cmEudHlwZSAhPT0gJ2Z1bGwnKVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgOiBwcm90b2NvbFYxLmdldENyeXB0b0NvbmZpZ3VyYXRpb24oKSxcbiAgICBleHRyYS5uZXR3b3JrXG4gICAgICA/IFByb21pc2UucmVzb2x2ZShleHRyYS5uZXR3b3JrKVxuICAgICAgOiBleHRyYS5uZXR3b3JrID09PSBudWxsIHx8ICFpc09ubGluZVByb3RvY29sKHByb3RvY29sVjEpIHx8IChleHRyYS50eXBlICE9PSAnb25saW5lJyAmJiBleHRyYS50eXBlICE9PSAnZnVsbCcpXG4gICAgICA/IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICA6IHByb3RvY29sVjEuZ2V0TmV0d29yaygpLFxuICAgIGV4dHJhLmJsb2NrRXhwbG9yZXJNZXRhZGF0YVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUoZXh0cmEuYmxvY2tFeHBsb3Jlck1ldGFkYXRhKVxuICAgICAgOiBleHRyYS5ibG9ja0V4cGxvcmVyTWV0YWRhdGEgPT09IG51bGwgfHwgYmxvY2tFeHBsb3JlclYxID09PSB1bmRlZmluZWQgfHwgKGV4dHJhLnR5cGUgIT09ICdvbmxpbmUnICYmIGV4dHJhLnR5cGUgIT09ICdmdWxsJylcbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIDogYmxvY2tFeHBsb3JlclYxLmdldE1ldGFkYXRhKClcbiAgXSlcblxuICBpZiAoc3VwcG9ydHNWMURlbGVnYXRpb24ocHJvdG9jb2xWMSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgcmV0dXJuIG5ldyBJQ29pbkRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyKFxuICAgICAgcHJvdG9jb2xWMSxcbiAgICAgIHByb3RvY29sTWV0YWRhdGEsXG4gICAgICBjcnlwdG8sXG4gICAgICBuZXR3b3JrLFxuICAgICAgYmxvY2tFeHBsb3JlclYxLFxuICAgICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICAgICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgSUNvaW5Qcm90b2NvbEFkYXB0ZXIoXG4gICAgICBwcm90b2NvbFYxLFxuICAgICAgcHJvdG9jb2xNZXRhZGF0YSxcbiAgICAgIGNyeXB0byxcbiAgICAgIG5ldHdvcmssXG4gICAgICBibG9ja0V4cGxvcmVyVjEsXG4gICAgICBibG9ja0V4cGxvcmVyTWV0YWRhdGEsXG4gICAgICB2M1NlcmlhbGl6ZXJDb21wYW5pb25cbiAgICApXG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVJQ29pblN1YlByb3RvY29sQWRhcHRlcjxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2wgJiBTdWJQcm90b2NvbD4oXG4gIHByb3RvY29sVjE6IFQsXG4gIGJsb2NrRXhwbG9yZXJWMTogQWlyR2FwQmxvY2tFeHBsb3JlciB8IHVuZGVmaW5lZCxcbiAgdjNTZXJpYWxpemVyQ29tcGFuaW9uOiBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gIGV4dHJhOiB7XG4gICAgdHlwZT86IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddXG4gICAgcHJvdG9jb2xNZXRhZGF0YT86IFByb3RvY29sTWV0YWRhdGFcbiAgICBjcnlwdG8/OiBDcnlwdG9Db25maWd1cmF0aW9uIHwgbnVsbFxuICAgIG5ldHdvcms/OiBQcm90b2NvbE5ldHdvcmsgfCBudWxsXG4gICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhPzogQmxvY2tFeHBsb3Jlck1ldGFkYXRhIHwgbnVsbFxuICAgIHN1YlR5cGU/OiBTdWJQcm90b2NvbFR5cGVcbiAgICBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmcgfCBudWxsXG4gIH0gPSB7fVxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxUPj4ge1xuICBjb25zdCBbcHJvdG9jb2xNZXRhZGF0YSwgY3J5cHRvLCBuZXR3b3JrLCBibG9ja0V4cGxvcmVyTWV0YWRhdGEsIHR5cGUsIGNvbnRyYWN0QWRkcmVzc106IFtcbiAgICBQcm90b2NvbE1ldGFkYXRhLFxuICAgIENyeXB0b0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgUHJvdG9jb2xOZXR3b3JrIHwgdW5kZWZpbmVkLFxuICAgIEJsb2NrRXhwbG9yZXJNZXRhZGF0YSB8IHVuZGVmaW5lZCxcbiAgICBTdWJQcm90b2NvbFR5cGUsXG4gICAgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZXh0cmEucHJvdG9jb2xNZXRhZGF0YSA/IFByb21pc2UucmVzb2x2ZShleHRyYS5wcm90b2NvbE1ldGFkYXRhKSA6IHByb3RvY29sVjEuZ2V0TWV0YWRhdGEoKSxcbiAgICBleHRyYS5jcnlwdG9cbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGV4dHJhLmNyeXB0bylcbiAgICAgIDogZXh0cmEuY3J5cHRvID09PSBudWxsIHx8ICFpc09mZmxpbmVQcm90b2NvbChwcm90b2NvbFYxKSB8fCAoZXh0cmE/LnR5cGUgIT09ICdvZmZsaW5lJyAmJiBleHRyYT8udHlwZSAhPT0gJ2Z1bGwnKVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgOiBwcm90b2NvbFYxLmdldENyeXB0b0NvbmZpZ3VyYXRpb24oKSxcbiAgICBleHRyYS5uZXR3b3JrXG4gICAgICA/IFByb21pc2UucmVzb2x2ZShleHRyYS5uZXR3b3JrKVxuICAgICAgOiBleHRyYS5uZXR3b3JrID09PSBudWxsIHx8ICFpc09ubGluZVByb3RvY29sKHByb3RvY29sVjEpIHx8IChleHRyYT8udHlwZSAhPT0gJ29ubGluZScgJiYgZXh0cmE/LnR5cGUgIT09ICdmdWxsJylcbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIDogcHJvdG9jb2xWMS5nZXROZXR3b3JrKCksXG4gICAgZXh0cmEuYmxvY2tFeHBsb3Jlck1ldGFkYXRhXG4gICAgICA/IFByb21pc2UucmVzb2x2ZShleHRyYS5ibG9ja0V4cGxvcmVyTWV0YWRhdGEpXG4gICAgICA6IGV4dHJhLmJsb2NrRXhwbG9yZXJNZXRhZGF0YSA9PT0gbnVsbCB8fCBibG9ja0V4cGxvcmVyVjEgPT09IHVuZGVmaW5lZCB8fCAoZXh0cmE/LnR5cGUgIT09ICdvbmxpbmUnICYmIGV4dHJhPy50eXBlICE9PSAnZnVsbCcpXG4gICAgICA/IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICA6IGJsb2NrRXhwbG9yZXJWMS5nZXRNZXRhZGF0YSgpLFxuICAgIGV4dHJhLnN1YlR5cGUgPyBQcm9taXNlLnJlc29sdmUoZXh0cmEuc3ViVHlwZSkgOiBwcm90b2NvbFYxLmdldFR5cGUoKSxcbiAgICBleHRyYS5jb250cmFjdEFkZHJlc3NcbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGV4dHJhLmNvbnRyYWN0QWRkcmVzcylcbiAgICAgIDogZXh0cmEuY29udHJhY3RBZGRyZXNzID09PSBudWxsIHx8ICFoYXNDb25maWd1cmFibGVDb250cmFjdChwcm90b2NvbFYxKVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgOiBwcm90b2NvbFYxLmdldENvbnRyYWN0QWRkcmVzcygpXG4gIF0pXG5cbiAgaWYgKHN1cHBvcnRzVjFEZWxlZ2F0aW9uKHByb3RvY29sVjEpKSB7XG4gICAgcmV0dXJuIG5ldyBJQ29pbkRlbGVnYXRlU3ViUHJvdG9jb2xBZGFwdGVyKFxuICAgICAgcHJvdG9jb2xWMSxcbiAgICAgIHByb3RvY29sTWV0YWRhdGEsXG4gICAgICBjcnlwdG8sXG4gICAgICBuZXR3b3JrLFxuICAgICAgYmxvY2tFeHBsb3JlclYxLFxuICAgICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICAgICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uLFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRyYWN0QWRkcmVzc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IElDb2luU3ViUHJvdG9jb2xBZGFwdGVyKFxuICAgICAgcHJvdG9jb2xWMSxcbiAgICAgIHByb3RvY29sTWV0YWRhdGEsXG4gICAgICBjcnlwdG8sXG4gICAgICBuZXR3b3JrLFxuICAgICAgYmxvY2tFeHBsb3JlclYxLFxuICAgICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICAgICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uLFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRyYWN0QWRkcmVzc1xuICAgIClcbiAgfVxufVxuIl19
|
|
880
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wtdjAtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcHJvdG9jb2wvYWRhcHRlci9wcm90b2NvbC12MC1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhCQUE4QjtBQUM5Qix5Q0FBeUM7QUFDekMsT0FBTyxFQVlMLFdBQVcsSUFBSSxhQUFhLEVBQzVCLHFCQUFxQixJQUFJLHVCQUF1QixFQUNoRCxlQUFlLElBQUksaUJBQWlCLEVBR3BDLGtCQUFrQixFQUNsQixlQUFlLElBQUksaUJBQWlCLEVBRXJDLE1BQU0sNEJBQTRCLENBQUE7QUFJbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM3RCxPQUFPLEVBV0wsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLGNBQWMsRUFRZCx1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUUxQixTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osWUFBWSxFQUNaLFlBQVksRUFrQmIsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqQyxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUE7QUFHcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDNUQsT0FBTyxFQUFpRCx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3hJLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3RFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIs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TyxJQUFJLCtCQUErQixDQUN4QyxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixPQUFPLEVBQ1AsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsSUFBSSxFQUNKLGVBQWUsQ0FDaEIsQ0FBQTtJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixPQUFPLEVBQ1AsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsSUFBSSxFQUNKLGVBQWUsQ0FDaEIsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuaW1wb3J0IHtcbiAgQ3J5cHRvQ2xpZW50LFxuICBEZWxlZ2F0ZWVEZXRhaWxzLFxuICBEZWxlZ2F0aW9uRGV0YWlscyxcbiAgRGVsZWdhdG9yRGV0YWlscyxcbiAgRmVlRGVmYXVsdHMgYXMgRmVlRGVmYXVsdHNWMCxcbiAgSUFpckdhcFRyYW5zYWN0aW9uLFxuICBJQWlyR2FwVHJhbnNhY3Rpb25SZXN1bHQsXG4gIElDb2luRGVsZWdhdGVQcm90b2NvbCxcbiAgSUNvaW5Qcm90b2NvbCxcbiAgSUNvaW5TdWJQcm90b2NvbCxcbiAgSVByb3RvY29sVHJhbnNhY3Rpb25DdXJzb3IsXG4gIE5ldHdvcmtUeXBlIGFzIE5ldHdvcmtUeXBlVjAsXG4gIFByb3RvY29sQmxvY2tFeHBsb3JlciBhcyBQcm90b2NvbEJsb2NrRXhwbG9yZXJWMCxcbiAgUHJvdG9jb2xOZXR3b3JrIGFzIFByb3RvY29sTmV0d29ya1YwLFxuICBQcm90b2NvbFN5bWJvbHMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uIGFzIFNpZ25lZFRyYW5zYWN0aW9uVjAsXG4gIFN1YlByb3RvY29sU3ltYm9scyxcbiAgU3ViUHJvdG9jb2xUeXBlIGFzIFN1YlByb3RvY29sVHlwZVYwLFxuICBVbnNpZ25lZFRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHJhbnNhY3Rpb25WMFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZSdcbmltcG9ydCB7IElQcm90b2NvbEFkZHJlc3NDdXJzb3IsIElBaXJHYXBBZGRyZXNzUmVzdWx0IH0gZnJvbSAnQHdhbGxmcmVlLWRldi9jb2lubGliLWNvcmUvaW50ZXJmYWNlcy9JQWlyR2FwQWRkcmVzcydcbmltcG9ydCB7IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzIGFzIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZS9pbnRlcmZhY2VzL0lBaXJHYXBUcmFuc2FjdGlvbidcbmltcG9ydCB7IFByb3RvY29sT3B0aW9ucyBhcyBQcm90b2NvbE9wdGlvbnNWMCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlL3V0aWxzL1Byb3RvY29sT3B0aW9ucydcbmltcG9ydCB7IGRlcml2ZSwgbW5lbW9uaWNUb1NlZWQgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2NyeXB0bydcbmltcG9ydCB7XG4gIEFkZHJlc3NXaXRoQ3Vyc29yLFxuICBBaXJHYXBBbnlQcm90b2NvbCxcbiAgQWlyR2FwQmxvY2tFeHBsb3JlcixcbiAgQWlyR2FwVHJhbnNhY3Rpb24sXG4gIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzLFxuICBBaXJHYXBUcmFuc2FjdGlvbnNXaXRoQ3Vyc29yLFxuICBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gIEFtb3VudCxcbiAgQmFsYW5jZSxcbiAgQmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICBjYW5FbmNyeXB0QUVTLFxuICBjYW5FbmNyeXB0QXN5bW1ldHJpYyxcbiAgY2FuRmV0Y2hEYXRhRm9yQWRkcmVzcyxcbiAgY2FuRmV0Y2hEYXRhRm9yTXVsdGlwbGVBZGRyZXNzZXMsXG4gIGNhblNpZ25NZXNzYWdlLFxuICBDcnlwdG9Db25maWd1cmF0aW9uLFxuICBDcnlwdG9EZXJpdmF0aXZlLFxuICBFeHRlbmRlZEtleVBhaXIsXG4gIEV4dGVuZGVkUHVibGljS2V5LFxuICBFeHRlbmRlZFNlY3JldEtleSxcbiAgRmVlRGVmYXVsdHMsXG4gIEZlZUVzdGltYXRpb24sXG4gIGhhc0NvbmZpZ3VyYWJsZUNvbnRyYWN0LFxuICBoYXNNdWx0aUFkZHJlc3NQdWJsaWNLZXlzLFxuICBpbXBsZW1lbnRzSW50ZXJmYWNlLFxuICBpc0Ftb3VudCxcbiAgaXNCaXAzMlByb3RvY29sLFxuICBpc011bHRpVG9rZW5TdWJQcm90b2NvbCxcbiAgaXNPZmZsaW5lUHJvdG9jb2wsXG4gIGlzT25saW5lUHJvdG9jb2wsXG4gIGlzVHJhbnNhY3Rpb25TdGF0dXNDaGVja2VyLFxuICBLZXlQYWlyLFxuICBuZXdBbW91bnQsXG4gIG5ld0V4dGVuZGVkUHVibGljS2V5LFxuICBuZXdFeHRlbmRlZFNlY3JldEtleSxcbiAgbmV3UHVibGljS2V5LFxuICBuZXdTZWNyZXRLZXksXG4gIG5ld1NpZ25hdHVyZSxcbiAgUHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICBQcm90b2NvbE1ldGFkYXRhLFxuICBQcm90b2NvbE5ldHdvcmssXG4gIFByb3RvY29sTmV0d29ya1R5cGUsXG4gIFByb3RvY29sU3ltYm9sLFxuICBQcm90b2NvbFRyYW5zYWN0aW9uQXJiaXRyYXJ5RGF0YU1ldGFkYXRhLFxuICBQcm90b2NvbFVuaXRzTWV0YWRhdGEsXG4gIFB1YmxpY0tleSxcbiAgU2NoZW1hLFxuICBTZWNyZXRLZXksXG4gIFNpZ25hdHVyZSxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFN1YlByb3RvY29sLFxuICBTdWJQcm90b2NvbFR5cGUsXG4gIFRyYW5zYWN0aW9uQ3Vyc29yLFxuICBUcmFuc2FjdGlvbkRldGFpbHMsXG4gIFVuc2lnbmVkVHJhbnNhY3Rpb25cbn0gZnJvbSAnQHdhbGxmcmVlLWRldi9tb2R1bGUta2l0J1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnXG5pbXBvcnQgeyBUcmFuc2FjdGlvblNpZ25SZXF1ZXN0LCBUcmFuc2FjdGlvblNpZ25SZXNwb25zZSwgVHJhbnNhY3Rpb25WYWxpZGF0b3IgfSBmcm9tICdAd2FsbGZyZWUtZGV2L3NlcmlhbGl6ZXInXG5pbXBvcnQgeyBBaXJHYXBEZWxlZ2F0ZVByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9tb2R1bGUta2l0L2ludGVybmFsJ1xuaW1wb3J0IHsgaXNUZXpvc1NhcGxpbmdQcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvdGV6b3MnXG5pbXBvcnQgeyBCaXRjb2luU2Vnd2l0UHJvdG9jb2wsIEJpdGNvaW5UYXByb290UHJvdG9jb2wsIGlzQml0Y29pblNlZ3dpdFByb3RvY29sLCBpc0JpdGNvaW5UYXByb290UHJvdG9jb2wgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2JpdGNvaW4nXG5pbXBvcnQgeyBnZXRQcm90b2NvbE9wdGlvbnNCeUlkZW50aWZpZXJMZWdhY3kgfSBmcm9tICcuLi8uLi91dGlscy9wcm90b2NvbC9wcm90b2NvbC1vcHRpb25zJ1xuaW1wb3J0IHsgc3VwcG9ydHNWMURlbGVnYXRpb24gfSBmcm9tICcuLi8uLi91dGlscy9wcm90b2NvbC9kZWxlZ2F0aW9uJ1xuaW1wb3J0IHtcbiAgY29udmVydEZlZURlZmF1bHRzVjFUb1YwLFxuICBjb252ZXJ0TmV0d29ya1R5cGVWMVRvVjAsXG4gIGNvbnZlcnRUcmFuc2FjdGlvbkRldGFpbHNWMVRvVjAsXG4gIGNvbnZlcnRUcmFuc2FjdGlvblN0YXR1c1YxVG9WMCxcbiAgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMCxcbiAgZ2V0UHVibGljS2V5VHlwZSxcbiAgZ2V0U2VjcmV0S2V5VHlwZVxufSBmcm9tICcuLi8uLi91dGlscy9wcm90b2NvbC9wcm90b2NvbC12MC1hZGFwdGVyJ1xuXG4vLyBQcm90b2NvbEJsb2NrRXhwbG9yZXJcblxuZXhwb3J0IGNsYXNzIFByb3RvY29sQmxvY2tFeHBsb3JlckFkYXB0ZXIgZXh0ZW5kcyBQcm90b2NvbEJsb2NrRXhwbG9yZXJWMCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmxvY2tFeHBsb3JlclYxOiBBaXJHYXBCbG9ja0V4cGxvcmVyLCB1cmw6IHN0cmluZykge1xuICAgIHN1cGVyKHVybClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBZGRyZXNzTGluayhhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmJsb2NrRXhwbG9yZXJWMS5jcmVhdGVBZGRyZXNzVXJsKGFkZHJlc3MpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25MaW5rKHRyYW5zYWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tFeHBsb3JlclYxLmNyZWF0ZVRyYW5zYWN0aW9uVXJsKHRyYW5zYWN0aW9uSWQpXG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrRXhwbG9yZXI6IHRoaXMuYmxvY2tFeHBsb3JlclxuICAgIH1cbiAgfVxufVxuXG4vLyBQcm90b2NvbE5ldHdvcmtcblxuZXhwb3J0IGNsYXNzIFByb3RvY29sTmV0d29ya0FkYXB0ZXIgZXh0ZW5kcyBQcm90b2NvbE5ldHdvcmtWMCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB0eXBlOiBQcm90b2NvbE5ldHdvcmtUeXBlIHwgTmV0d29ya1R5cGVWMCxcbiAgICBycGNVcmw6IHN0cmluZyxcbiAgICBibG9ja0V4cGxvcmVyOiBQcm90b2NvbEJsb2NrRXhwbG9yZXJWMCB8IHVuZGVmaW5lZCxcbiAgICBleHRyYXM6IHVua25vd24gPSB7fVxuICApIHtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogTmV0d29ya1R5cGVWMCA9IE9iamVjdC52YWx1ZXMoTmV0d29ya1R5cGVWMCkuaW5jbHVkZXModHlwZSBhcyBOZXR3b3JrVHlwZVYwKVxuICAgICAgPyAodHlwZSBhcyBOZXR3b3JrVHlwZVYwKVxuICAgICAgOiBjb252ZXJ0TmV0d29ya1R5cGVWMVRvVjAodHlwZSBhcyBQcm90b2NvbE5ldHdvcmtUeXBlKVxuXG4gICAgc3VwZXIobmFtZSwgbmV0d29ya1R5cGUsIHJwY1VybCwgYmxvY2tFeHBsb3JlciwgZXh0cmFzKVxuICB9XG59XG5cbi8vIFByb3RvY29sT3B0aW9uc1xuXG5leHBvcnQgY2xhc3MgUHJvdG9jb2xPcHRpb25zQWRhcHRlciBpbXBsZW1lbnRzIFByb3RvY29sT3B0aW9uc1YwIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG5ldHdvcms6IFByb3RvY29sTmV0d29ya1YwLCBwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiB1bmtub3duID0ge30pIHt9XG59XG5cbi8vIFRyYW5zYWN0aW9uVmFsaWRhdG9yXG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblZhbGlkYXRvckFkYXB0ZXIgaW1wbGVtZW50cyBUcmFuc2FjdGlvblZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2xJZGVudGlmaWVyOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgc2VyaWFsaXplckNvbXBhbmlvbjogQWlyR2FwVjNTZXJpYWxpemVyQ29tcGFuaW9uKSB7fVxuXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZVVuc2lnbmVkVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2lnblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXJDb21wYW5pb24udmFsaWRhdGVUcmFuc2FjdGlvblNpZ25SZXF1ZXN0KHRoaXMucHJvdG9jb2xJZGVudGlmaWVyLCB0cmFuc2FjdGlvbilcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZVNpZ25lZFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblNpZ25SZXNwb25zZSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplckNvbXBhbmlvbi52YWxpZGF0ZVRyYW5zYWN0aW9uU2lnblJlc3BvbnNlKHRoaXMucHJvdG9jb2xJZGVudGlmaWVyLCB0cmFuc2FjdGlvbilcbiAgfVxufVxuXG4vLyBJQ29pblByb3RvY29sXG5cbmV4cG9ydCBjbGFzcyBJQ29pblByb3RvY29sQWRhcHRlcjxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2wgPSBBaXJHYXBBbnlQcm90b2NvbD4gaW1wbGVtZW50cyBJQ29pblByb3RvY29sIHtcbiAgcHVibGljIHJlYWRvbmx5IHN5bWJvbDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IG1hcmtldFN5bWJvbDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBhc3NldFN5bWJvbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHB1YmxpYyByZWFkb25seSBmZWVTeW1ib2w6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgZmVlRGVmYXVsdHM6IEZlZURlZmF1bHRzVjBcbiAgcHVibGljIHJlYWRvbmx5IGRlY2ltYWxzOiBudW1iZXJcbiAgcHVibGljIHJlYWRvbmx5IGZlZURlY2ltYWxzOiBudW1iZXJcbiAgcHVibGljIHJlYWRvbmx5IGlkZW50aWZpZXI6IFByb3RvY29sU3ltYm9sc1xuICBwdWJsaWMgcmVhZG9ubHkgdW5pdHM6IHsgdW5pdFN5bWJvbDogc3RyaW5nOyBmYWN0b3I6IHN0cmluZyB9W11cbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzSEQ6IGJvb2xlYW5cbiAgcHVibGljIHJlYWRvbmx5IHN0YW5kYXJkRGVyaXZhdGlvblBhdGg6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc0lzQ2FzZVNlbnNpdGl2ZTogYm9vbGVhblxuICBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc1ZhbGlkYXRpb25QYXR0ZXJuOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IGFkZHJlc3NQbGFjZWhvbGRlcjogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBQcm90b2NvbE9wdGlvbnNWMFxuICBwdWJsaWMgcmVhZG9ubHkgY3J5cHRvQ2xpZW50OiBDcnlwdG9DbGllbnRcblxuICBwcml2YXRlIHJlYWRvbmx5IG5ldHdvcmtWMDogUHJvdG9jb2xOZXR3b3JrVjBcbiAgcHJpdmF0ZSByZWFkb25seSBibG9ja0V4cGxvcmVyVjA6IFByb3RvY29sQmxvY2tFeHBsb3JlckFkYXB0ZXIgfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdG9jb2xWMTogVCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcnlwdG86IENyeXB0b0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmsgfCB1bmRlZmluZWQsXG4gICAgYmxvY2tFeHBsb3JlclYxOiBBaXJHYXBCbG9ja0V4cGxvcmVyIHwgdW5kZWZpbmVkLFxuICAgIGJsb2NrRXhwbG9yZXJNZXRhZGF0YTogQmxvY2tFeHBsb3Jlck1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdjNTZXJpYWxpemVyQ29tcGFuaW9uOiBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb25cbiAgKSB7XG4gICAgY29uc3QgdW5pdHM6IFByb3RvY29sVW5pdHNNZXRhZGF0YSA9IHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0c1xuICAgIGNvbnN0IG1haW5Vbml0OiBzdHJpbmcgPSB0aGlzLnByb3RvY29sTWV0YWRhdGEubWFpblVuaXRcbiAgICBjb25zdCBzeW1ib2w6IFByb3RvY29sU3ltYm9sID0gdW5pdHNbbWFpblVuaXRdLnN5bWJvbFxuXG4gICAgY29uc3QgZmVlVW5pdHM6IFByb3RvY29sVW5pdHNNZXRhZGF0YSA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy51bml0cyA/PyBwcm90b2NvbE1ldGFkYXRhLnVuaXRzXG4gICAgY29uc3QgbWFpbkZlZVVuaXQ6IHN0cmluZyA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy5tYWluVW5pdCA/PyBwcm90b2NvbE1ldGFkYXRhLm1haW5Vbml0XG4gICAgY29uc3QgZmVlU3ltYm9sOiBQcm90b2NvbFN5bWJvbCA9IGZlZVVuaXRzW21haW5GZWVVbml0XS5zeW1ib2xcblxuICAgIGNvbnN0IGZlZURlZmF1bHRzOiBGZWVEZWZhdWx0cyA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy5kZWZhdWx0cyA/PyB7XG4gICAgICBsb3c6IG5ld0Ftb3VudCgnMCcsICdibG9ja2NoYWluJyksXG4gICAgICBtZWRpdW06IG5ld0Ftb3VudCgnMCcsICdibG9ja2NoYWluJyksXG4gICAgICBoaWdoOiBuZXdBbW91bnQoJzAnLCAnYmxvY2tjaGFpbicpXG4gICAgfVxuXG4gICAgY29uc3QgbWF4RGVjaW1hbHM6IG51bWJlciA9IE1hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMocHJvdG9jb2xNZXRhZGF0YS51bml0cykubWFwKCh1bml0KSA9PiB1bml0LmRlY2ltYWxzKSlcblxuICAgIHRoaXMubmFtZSA9IHRoaXMucHJvdG9jb2xNZXRhZGF0YS5uYW1lXG4gICAgdGhpcy5pZGVudGlmaWVyID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLmlkZW50aWZpZXIgYXMgUHJvdG9jb2xTeW1ib2xzXG5cbiAgICB0aGlzLnN5bWJvbCA9IHN5bWJvbC52YWx1ZVxuICAgIHRoaXMubWFya2V0U3ltYm9sID0gc3ltYm9sLm1hcmtldCA/PyBzeW1ib2wudmFsdWVcbiAgICB0aGlzLmFzc2V0U3ltYm9sID0gc3ltYm9sLmFzc2V0XG4gICAgdGhpcy5kZWNpbWFscyA9IHVuaXRzW21haW5Vbml0XS5kZWNpbWFsc1xuXG4gICAgdGhpcy5mZWVTeW1ib2wgPSBmZWVTeW1ib2wudmFsdWVcbiAgICB0aGlzLmZlZURlZmF1bHRzID0gdGhpcy5jb252ZXJ0RmVlRGVmYXVsdHNWMVRvVjAoZmVlRGVmYXVsdHMpXG4gICAgdGhpcy5mZWVEZWNpbWFscyA9IGZlZVVuaXRzW21haW5GZWVVbml0XS5kZWNpbWFsc1xuXG4gICAgdGhpcy51bml0cyA9IE9iamVjdC5lbnRyaWVzKHByb3RvY29sTWV0YWRhdGEudW5pdHMpLm1hcCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHVuaXRTeW1ib2w6IHN0cmluZyA9IGVudHJ5WzBdXG4gICAgICBjb25zdCBmYWN0b3I6IHN0cmluZyA9IG5ldyBCaWdOdW1iZXIoMSkuc2hpZnRlZEJ5KC0obWF4RGVjaW1hbHMgLSBlbnRyeVsxXS5kZWNpbWFscykpLnRvRml4ZWQoKVxuXG4gICAgICByZXR1cm4geyB1bml0U3ltYm9sLCBmYWN0b3IgfVxuICAgIH0pXG5cbiAgICB0aGlzLnN1cHBvcnRzSEQgPSBpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKVxuXG4gICAgdGhpcy5zdGFuZGFyZERlcml2YXRpb25QYXRoID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLmFjY291bnQ/LnN0YW5kYXJkRGVyaXZhdGlvblBhdGggPz8gJ20vJ1xuICAgIHRoaXMuYWRkcmVzc0lzQ2FzZVNlbnNpdGl2ZSA9IHRoaXMucHJvdG9jb2xNZXRhZGF0YS5hY2NvdW50LmFkZHJlc3M/LmlzQ2FzZVNlbnNpdGl2ZSA/PyBmYWxzZVxuICAgIHRoaXMuYWRkcmVzc1ZhbGlkYXRpb25QYXR0ZXJuID0gdGhpcy5wcm90b2NvbE1ldGFkYXRhLmFjY291bnQ/LmFkZHJlc3M/LnJlZ2V4ID8/ICcqKydcbiAgICB0aGlzLmFkZHJlc3NQbGFjZWhvbGRlciA9IHRoaXMucHJvdG9jb2xNZXRhZGF0YS5hY2NvdW50Py5hZGRyZXNzPy5wbGFjZWhvbGRlciA/PyAnJ1xuXG4gICAgbGV0IGtub3duT3B0aW9uczogUHJvdG9jb2xPcHRpb25zVjAgfCB1bmRlZmluZWRcbiAgICB0cnkge1xuICAgICAga25vd25PcHRpb25zID0gZ2V0UHJvdG9jb2xPcHRpb25zQnlJZGVudGlmaWVyTGVnYWN5KHRoaXMucHJvdG9jb2xNZXRhZGF0YS5pZGVudGlmaWVyIGFzIFByb3RvY29sU3ltYm9scylcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2gge31cblxuICAgIHRoaXMuYmxvY2tFeHBsb3JlclYwID1cbiAgICAgIGJsb2NrRXhwbG9yZXJWMSAmJiBibG9ja0V4cGxvcmVyTWV0YWRhdGEgPyBuZXcgUHJvdG9jb2xCbG9ja0V4cGxvcmVyQWRhcHRlcihibG9ja0V4cGxvcmVyVjEsIGJsb2NrRXhwbG9yZXJNZXRhZGF0YS51cmwpIDogdW5kZWZpbmVkXG4gICAgdGhpcy5uZXR3b3JrVjAgPSB0aGlzLmdldE5ldHdvcmsoa25vd25PcHRpb25zKVxuICAgIHRoaXMub3B0aW9ucyA9IG5ldyBQcm90b2NvbE9wdGlvbnNBZGFwdGVyKHRoaXMubmV0d29ya1YwLCBrbm93bk9wdGlvbnM/LmNvbmZpZyA/PyB7fSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTeW1ib2woKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zeW1ib2xcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXROYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1hcmtldFN5bWJvbCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLm1hcmtldFN5bWJvbFxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFzc2V0U3ltYm9sKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXNzZXRTeW1ib2xcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWVTeW1ib2woKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5mZWVTeW1ib2xcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWVEZWZhdWx0cygpOiBQcm9taXNlPEZlZURlZmF1bHRzVjA+IHtcbiAgICByZXR1cm4gdGhpcy5mZWVEZWZhdWx0c1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlY2ltYWxzKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVjaW1hbHNcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWVEZWNpbWFscygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmZlZURlY2ltYWxzXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SWRlbnRpZmllcigpOiBQcm9taXNlPFByb3RvY29sU3ltYm9scz4ge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRVbml0cygpOiBQcm9taXNlPHsgdW5pdFN5bWJvbDogc3RyaW5nOyBmYWN0b3I6IHN0cmluZyB9W10+IHtcbiAgICByZXR1cm4gdGhpcy51bml0c1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFN1cHBvcnRzSEQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9ydHNIRFxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFN0YW5kYXJkRGVyaXZhdGlvblBhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFuZGFyZERlcml2YXRpb25QYXRoXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWRkcmVzc0lzQ2FzZVNlbnNpdGl2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzSXNDYXNlU2Vuc2l0aXZlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWRkcmVzc1ZhbGlkYXRpb25QYXR0ZXJuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkcmVzc1ZhbGlkYXRpb25QYXR0ZXJuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWRkcmVzc1BsYWNlaG9sZGVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkcmVzc1BsYWNlaG9sZGVyXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3B0aW9ucygpOiBQcm9taXNlPFByb3RvY29sT3B0aW9uc1YwPiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEJsb2NrRXhwbG9yZXJMaW5rRm9yQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmJsb2NrRXhwbG9yZXJWMCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCBCbG9ja0V4cGxvcmVyIG5vdCBmb3VuZC4nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJsb2NrRXhwbG9yZXJWMC5nZXRBZGRyZXNzTGluayhhZGRyZXNzKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEJsb2NrRXhwbG9yZXJMaW5rRm9yVHhJZCh0eElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmJsb2NrRXhwbG9yZXJWMCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCBCbG9ja0V4cGxvcmVyIG5vdCBmb3VuZC4nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJsb2NrRXhwbG9yZXJWMC5nZXRUcmFuc2FjdGlvbkxpbmsodHhJZClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbnNGcm9tUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgY3Vyc29yPzogSVByb3RvY29sVHJhbnNhY3Rpb25DdXJzb3JcbiAgKTogUHJvbWlzZTxJQWlyR2FwVHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW50ZXJmYWNlOiBPbmxpbmUuJylcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnM6IEFpckdhcFRyYW5zYWN0aW9uc1dpdGhDdXJzb3IgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0VHJhbnNhY3Rpb25zRm9yUHVibGljS2V5KFxuICAgICAgbmV3UHVibGljS2V5KHB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpKSxcbiAgICAgIGxpbWl0LFxuICAgICAgY3Vyc29yIGFzIFRyYW5zYWN0aW9uQ3Vyc29yXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uczogYXdhaXQgdGhpcy5jb252ZXJ0VHJhbnNhY3Rpb25EZXRhaWxzVjFUb1YwKHRyYW5zYWN0aW9ucy50cmFuc2FjdGlvbnMpLFxuICAgICAgY3Vyc29yOiB0cmFuc2FjdGlvbnMuY3Vyc29yID8gdHJhbnNhY3Rpb25zLmN1cnNvciA6IGN1cnNvclxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbnNGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoXG4gICAgZXh0ZW5kZWRQdWJsaWNLZXk6IHN0cmluZyxcbiAgICBsaW1pdDogbnVtYmVyLFxuICAgIGN1cnNvcj86IElQcm90b2NvbFRyYW5zYWN0aW9uQ3Vyc29yXG4gICk6IFByb21pc2U8SUFpckdhcFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgQmlwMzIuJylcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnM6IEFpckdhcFRyYW5zYWN0aW9uc1dpdGhDdXJzb3IgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0VHJhbnNhY3Rpb25zRm9yUHVibGljS2V5KFxuICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQdWJsaWNLZXkpKSxcbiAgICAgIGxpbWl0LFxuICAgICAgY3Vyc29yIGFzIFRyYW5zYWN0aW9uQ3Vyc29yXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uczogYXdhaXQgdGhpcy5jb252ZXJ0VHJhbnNhY3Rpb25EZXRhaWxzVjFUb1YwKHRyYW5zYWN0aW9ucy50cmFuc2FjdGlvbnMpLFxuICAgICAgY3Vyc29yOiB0cmFuc2FjdGlvbnMuY3Vyc29yID8gdHJhbnNhY3Rpb25zLmN1cnNvciA6IGN1cnNvclxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbnNGcm9tQWRkcmVzc2VzKFxuICAgIGFkZHJlc3Nlczogc3RyaW5nW10sXG4gICAgbGltaXQ6IG51bWJlcixcbiAgICBjdXJzb3I/OiBJUHJvdG9jb2xUcmFuc2FjdGlvbkN1cnNvclxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIGxldCB0cmFuc2FjdGlvbnM6IEFpckdhcFRyYW5zYWN0aW9uc1dpdGhDdXJzb3JcbiAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA9PT0gMSAmJiBjYW5GZXRjaERhdGFGb3JBZGRyZXNzKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRyYW5zYWN0aW9ucyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvbnNGb3JBZGRyZXNzKGFkZHJlc3Nlc1swXSwgbGltaXQsIGN1cnNvciBhcyBUcmFuc2FjdGlvbkN1cnNvcilcbiAgICB9IGVsc2UgaWYgKGNhbkZldGNoRGF0YUZvck11bHRpcGxlQWRkcmVzc2VzKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIHRyYW5zYWN0aW9ucyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvbnNGb3JBZGRyZXNzZXMoYWRkcmVzc2VzLCBsaW1pdCwgY3Vyc29yIGFzIFRyYW5zYWN0aW9uQ3Vyc29yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2FjdGlvbnM6IGF3YWl0IHRoaXMuY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0cmFuc2FjdGlvbnMudHJhbnNhY3Rpb25zKSxcbiAgICAgIGN1cnNvcjogdHJhbnNhY3Rpb25zLmN1cnNvciA/IHRyYW5zYWN0aW9ucy5jdXJzb3IgOiBjdXJzb3JcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmFsYW5jZU9mQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10sIF9kYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIGxldCBiYWxhbmNlOiBCYWxhbmNlXG4gICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPT09IDEgJiYgY2FuRmV0Y2hEYXRhRm9yQWRkcmVzcyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZkFkZHJlc3MoYWRkcmVzc2VzWzBdKVxuICAgIH0gZWxzZSBpZiAoY2FuRmV0Y2hEYXRhRm9yTXVsdGlwbGVBZGRyZXNzZXModGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRCYWxhbmNlT2ZBZGRyZXNzZXMoYWRkcmVzc2VzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbnRlcmZhY2U6IE9ubGluZSwgRmV0Y2hEYXRhRm9yQWRkcmVzcy9GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcy4nKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdBbW91bnQoYmFsYW5jZS50b3RhbCkuYmxvY2tjaGFpbih0aGlzLnByb3RvY29sTWV0YWRhdGEudW5pdHMpLnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QmFsYW5jZU9mUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIGRhdGE/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd247IGFkZHJlc3NJbmRleD86IG51bWJlcjsgYXNzZXRJRD86IHN0cmluZyB9XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLicpXG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljS2V5VjE6IFB1YmxpY0tleSA9IG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcblxuICAgIGNvbnN0IGJhbGFuY2U6IEJhbGFuY2UgPVxuICAgICAgZGF0YT8uYXNzZXRJRCAmJiBpc011bHRpVG9rZW5TdWJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpXG4gICAgICAgID8gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZlB1YmxpY0tleShwdWJsaWNLZXlWMSwgeyB0b2tlbklkOiBkYXRhLmFzc2V0SUQgfSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0QmFsYW5jZU9mUHVibGljS2V5KHB1YmxpY0tleVYxKVxuXG4gICAgcmV0dXJuIG5ld0Ftb3VudChiYWxhbmNlLnRvdGFsKS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlT2ZFeHRlbmRlZFB1YmxpY0tleShcbiAgICBleHRlbmRlZFB1YmxpY0tleTogc3RyaW5nLFxuICAgIF9vZmZzZXQ6IG51bWJlcixcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duOyBhc3NldElEPzogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkUHVibGljS2V5VjE6IEV4dGVuZGVkUHVibGljS2V5ID0gbmV3RXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQdWJsaWNLZXkpKVxuXG4gICAgY29uc3QgYmFsYW5jZTogQmFsYW5jZSA9XG4gICAgICBkYXRhPy5hc3NldElEICYmIGlzTXVsdGlUb2tlblN1YlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSlcbiAgICAgICAgPyBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0QmFsYW5jZU9mUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5VjEsIHsgdG9rZW5JZDogZGF0YS5hc3NldElEIH0pXG4gICAgICAgIDogYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZlB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleVYxKVxuXG4gICAgcmV0dXJuIG5ld0Ftb3VudChiYWxhbmNlLnRvdGFsKS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBdmFpbGFibGVCYWxhbmNlT2ZBZGRyZXNzZXMoYWRkcmVzc2VzOiBzdHJpbmdbXSwgX2RhdGE/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGludGVyZmFjZTogT25saW5lLCBGZXRjaERhdGFGb3JBZGRyZXNzL0ZldGNoRGF0YUZvck11bHRpcGxlQWRkcmVzc2VzLicpXG4gICAgfVxuXG4gICAgbGV0IGJhbGFuY2U6IEJhbGFuY2VcbiAgICBpZiAoYWRkcmVzc2VzLmxlbmd0aCA9PT0gMSAmJiBjYW5GZXRjaERhdGFGb3JBZGRyZXNzKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIGJhbGFuY2UgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0QmFsYW5jZU9mQWRkcmVzcyhhZGRyZXNzZXNbMF0pXG4gICAgfSBlbHNlIGlmIChjYW5GZXRjaERhdGFGb3JNdWx0aXBsZUFkZHJlc3Nlcyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEJhbGFuY2VPZkFkZHJlc3NlcyhhZGRyZXNzZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGludGVyZmFjZTogT25saW5lLCBGZXRjaERhdGFGb3JBZGRyZXNzL0ZldGNoRGF0YUZvck11bHRpcGxlQWRkcmVzc2VzLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0Ftb3VudChiYWxhbmNlLnRyYW5zZmVyYWJsZSA/PyBiYWxhbmNlLnRvdGFsKS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvblN0YXR1c2VzKHRyYW5zYWN0aW9uSGFzaDogc3RyaW5nW10pOiBQcm9taXNlPEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjBbXT4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc1RyYW5zYWN0aW9uU3RhdHVzQ2hlY2tlcih0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZSwgVHJhbnNhY3Rpb25TdGF0dXNDaGVja2VyLicpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzZXM6IFJlY29yZDxzdHJpbmcsIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzPiA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRUcmFuc2FjdGlvblN0YXR1cyh0cmFuc2FjdGlvbkhhc2gpXG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25IYXNoLm1hcCgoaGFzaDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXM6IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzID0gc3RhdHVzZXNbaGFzaF1cblxuICAgICAgcmV0dXJuIGNvbnZlcnRUcmFuc2FjdGlvblN0YXR1c1YxVG9WMChzdGF0dXMpXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlT2ZQdWJsaWNLZXlGb3JTdWJQcm90b2NvbHMoX3B1YmxpY0tleTogc3RyaW5nLCBfc3ViUHJvdG9jb2xzOiBJQ29pblN1YlByb3RvY29sW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZC4nKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGVzdGltYXRlTWF4VHJhbnNhY3Rpb25WYWx1ZUZyb21FeHRlbmRlZFB1YmxpY0tleShcbiAgICBleHRlbmRlZFB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIGZlZT86IHN0cmluZyxcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IG1heEFtb3VudDogQW1vdW50ID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uTWF4QW1vdW50V2l0aFB1YmxpY0tleShcbiAgICAgIG5ld0V4dGVuZGVkUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKGV4dGVuZGVkUHVibGljS2V5KSksXG4gICAgICByZWNpcGllbnRzLFxuICAgICAge1xuICAgICAgICBhcmJpdHJhcnlEYXRhOiB0aGlzLmdldEFyYml0cmFyeURhdGEoZGF0YSksXG4gICAgICAgIGZlZTogZmVlID8gbmV3QW1vdW50KGZlZSwgJ2Jsb2NrY2hhaW4nKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiBuZXdBbW91bnQobWF4QW1vdW50KS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlc3RpbWF0ZU1heFRyYW5zYWN0aW9uVmFsdWVGcm9tUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIGZlZT86IHN0cmluZyxcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duOyBhZGRyZXNzSW5kZXg/OiBudW1iZXIgfVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IG1heEFtb3VudDogQW1vdW50ID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uTWF4QW1vdW50V2l0aFB1YmxpY0tleShcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSksXG4gICAgICByZWNpcGllbnRzLFxuICAgICAge1xuICAgICAgICBmZWU6IGZlZSA/IG5ld0Ftb3VudChmZWUsICdibG9ja2NoYWluJykgOiB1bmRlZmluZWQsXG4gICAgICAgIGFyYml0cmFyeURhdGE6IHRoaXMuZ2V0QXJiaXRyYXJ5RGF0YShkYXRhKVxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiBuZXdBbW91bnQobWF4QW1vdW50KS5ibG9ja2NoYWluKHRoaXMucHJvdG9jb2xNZXRhZGF0YS51bml0cykudmFsdWVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlc3RpbWF0ZUZlZURlZmF1bHRzRnJvbUV4dGVuZGVkUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIHZhbHVlczogc3RyaW5nW10sXG4gICAgZGF0YT86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cblxuICAgICAgLy8gVGV6b3MgRkEyXG4gICAgICBhc3NldElEPzogc3RyaW5nXG4gICAgfVxuICApOiBQcm9taXNlPEZlZURlZmF1bHRzVjA+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT25saW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGZlZUVzdGltYXRpb246IEZlZUVzdGltYXRpb24gfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0VHJhbnNhY3Rpb25GZWVXaXRoUHVibGljS2V5KFxuICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpLFxuICAgICAgdGhpcy5jb21iaW5lVHJhbnNhY3Rpb25EZXRhaWxzKHJlY2lwaWVudHMsIHZhbHVlcyksXG4gICAgICB7XG4gICAgICAgIGFyYml0cmFyeURhdGE6IHRoaXMuZ2V0QXJiaXRyYXJ5RGF0YShkYXRhKSxcbiAgICAgICAgYXNzZXRJZDogZGF0YT8uYXNzZXRJRCA/IHBhcnNlSW50KGRhdGEuYXNzZXRJRCwgMTApIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKGZlZUVzdGltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgYGVzdGltYXRlRmVlRGVmYXVsdHNGcm9tRXh0ZW5kZWRQdWJsaWNLZXlgIG5vdCBzdXBwb3J0ZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBmZWVEZWZhdWx0czogRmVlRGVmYXVsdHMgPSBpc0Ftb3VudChmZWVFc3RpbWF0aW9uKVxuICAgICAgPyB7IGxvdzogZmVlRXN0aW1hdGlvbiwgbWVkaXVtOiBmZWVFc3RpbWF0aW9uLCBoaWdoOiBmZWVFc3RpbWF0aW9uIH1cbiAgICAgIDogZmVlRXN0aW1hdGlvblxuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydEZlZURlZmF1bHRzVjFUb1YwKGZlZURlZmF1bHRzKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGVzdGltYXRlRmVlRGVmYXVsdHNGcm9tUHVibGljS2V5KFxuICAgIHB1YmxpY0tleTogc3RyaW5nLFxuICAgIHJlY2lwaWVudHM6IHN0cmluZ1tdLFxuICAgIHZhbHVlczogc3RyaW5nW10sXG4gICAgZGF0YT86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cblxuICAgICAgLy8gVGV6b3MgRkEyXG4gICAgICBhc3NldElEPzogc3RyaW5nXG4gICAgfVxuICApOiBQcm9taXNlPEZlZURlZmF1bHRzVjA+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPbmxpbmUuJylcbiAgICB9XG5cbiAgICBpZiAocmVjaXBpZW50cy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVjaXBpZW50cyBsZW5ndGggbXVzdCBtYXRjaCB2YWx1ZXMgbGVuZ3RoLicpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25EZXRhaWxzOiBUcmFuc2FjdGlvbkRldGFpbHNbXSA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQ6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgIHRvOiByZWNpcGllbnQsXG4gICAgICBhbW91bnQ6IG5ld0Ftb3VudCh2YWx1ZXNbaW5kZXhdLCAnYmxvY2tjaGFpbicpXG4gICAgfSkpXG5cbiAgICBjb25zdCBmZWVFc3RpbWF0aW9uOiBGZWVFc3RpbWF0aW9uIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldFRyYW5zYWN0aW9uRmVlV2l0aFB1YmxpY0tleShcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSksXG4gICAgICB0cmFuc2FjdGlvbkRldGFpbHMsXG4gICAgICB7XG4gICAgICAgIGFyYml0cmFyeURhdGE6IHRoaXMuZ2V0QXJiaXRyYXJ5RGF0YShkYXRhKSxcbiAgICAgICAgYXNzZXRJZDogZGF0YT8uYXNzZXRJRCA/IHBhcnNlSW50KGRhdGEuYXNzZXRJRCwgMTApIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKGZlZUVzdGltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgYGVzdGltYXRlRmVlRGVmYXVsdHNGcm9tUHVibGljS2V5YCBub3Qgc3VwcG9ydGVkLicpXG4gICAgfVxuXG4gICAgY29uc3QgZmVlRGVmYXVsdHM6IEZlZURlZmF1bHRzID0gaXNBbW91bnQoZmVlRXN0aW1hdGlvbilcbiAgICAgID8geyBsb3c6IGZlZUVzdGltYXRpb24sIG1lZGl1bTogZmVlRXN0aW1hdGlvbiwgaGlnaDogZmVlRXN0aW1hdGlvbiB9XG4gICAgICA6IGZlZUVzdGltYXRpb25cblxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRGZWVEZWZhdWx0c1YxVG9WMChmZWVEZWZhdWx0cylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlVHJhbnNhY3Rpb25Gcm9tRXh0ZW5kZWRQdWJsaWNLZXkoXG4gICAgZXh0ZW5kZWRQdWJsaWNLZXk6IHN0cmluZyxcbiAgICBfb2Zmc2V0OiBudW1iZXIsXG4gICAgcmVjaXBpZW50czogc3RyaW5nW10sXG4gICAgdmFsdWVzOiBzdHJpbmdbXSxcbiAgICBmZWU6IHN0cmluZyxcbiAgICBleHRyYXM/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG5cbiAgICAgIC8vIEJpdGNvaW5cbiAgICAgIG1hc3RlckZpbmdlcnByaW50OiBzdHJpbmdcbiAgICAgIHJlcGxhY2VCeUZlZTogYm9vbGVhblxuXG4gICAgICAvLyBUZXpvcyBGQTJcbiAgICAgIGFzc2V0SUQ/OiBzdHJpbmdcbiAgICB9XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFpc09ubGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IGlzU2Vnd2l0ID0gaXNCaXRjb2luU2Vnd2l0UHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKVxuICAgIGNvbnN0IGlzVGFwcm9vdCA9IGlzQml0Y29pblRhcHJvb3RQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpXG5cbiAgICBsZXQgdHJhbnNhY3Rpb246IFVuc2lnbmVkVHJhbnNhY3Rpb25cbiAgICBpZiAoaXNTZWd3aXQgfHwgaXNUYXByb290KSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IChpc1NlZ3dpdFxuICAgICAgICA/ICh0aGlzLnByb3RvY29sVjEgYXMgQml0Y29pblNlZ3dpdFByb3RvY29sKVxuICAgICAgICA6ICh0aGlzLnByb3RvY29sVjEgYXMgQml0Y29pblRhcHJvb3RQcm90b2NvbClcbiAgICAgICkucHJlcGFyZVRyYW5zYWN0aW9uV2l0aFB1YmxpY0tleShcbiAgICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQdWJsaWNLZXkpKSxcbiAgICAgICAgdGhpcy5jb21iaW5lVHJhbnNhY3Rpb25EZXRhaWxzKHJlY2lwaWVudHMsIHZhbHVlcyksXG4gICAgICAgIHtcbiAgICAgICAgICBmZWU6IG5ld0Ftb3VudChmZWUsICdibG9ja2NoYWluJyksXG4gICAgICAgICAgYXJiaXRyYXJ5RGF0YTogdGhpcy5nZXRBcmJpdHJhcnlEYXRhKGV4dHJhcyksXG4gICAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ2hleCcsXG4gICAgICAgICAgICB2YWx1ZTogZXh0cmFzPy5tYXN0ZXJGaW5nZXJwcmludFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwbGFjZUJ5RmVlOiBleHRyYXM/LnJlcGxhY2VCeUZlZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnByZXBhcmVUcmFuc2FjdGlvbldpdGhQdWJsaWNLZXkoXG4gICAgICAgIG5ld0V4dGVuZGVkUHVibGljS2V5KGV4dGVuZGVkUHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKGV4dGVuZGVkUHVibGljS2V5KSksXG4gICAgICAgIHRoaXMuY29tYmluZVRyYW5zYWN0aW9uRGV0YWlscyhyZWNpcGllbnRzLCB2YWx1ZXMpLFxuICAgICAgICB7XG4gICAgICAgICAgZmVlOiBuZXdBbW91bnQoZmVlLCAnYmxvY2tjaGFpbicpLFxuICAgICAgICAgIGFzc2V0SWQ6IGV4dHJhcz8uYXNzZXRJRCA/IHBhcnNlSW50KGV4dHJhcy5hc3NldElELCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXJiaXRyYXJ5RGF0YTogdGhpcy5nZXRBcmJpdHJhcnlEYXRhKGV4dHJhcylcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uVjAgPSBhd2FpdCB0aGlzLmNvbnZlcnRVbnNpZ25lZFRyYW5zYWN0aW9uVjFUb1YwKHRyYW5zYWN0aW9uLCBleHRlbmRlZFB1YmxpY0tleSlcblxuICAgIHJldHVybiB0cmFuc2FjdGlvblYwLnRyYW5zYWN0aW9uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZVRyYW5zYWN0aW9uRnJvbVB1YmxpY0tleShcbiAgICBwdWJsaWNLZXk6IHN0cmluZyxcbiAgICByZWNpcGllbnRzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZXM6IHN0cmluZ1tdLFxuICAgIGZlZTogc3RyaW5nLFxuICAgIGV4dHJhcz86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cblxuICAgICAgLy8gVGV6b3MgRkEyXG4gICAgICBhc3NldElEPzogc3RyaW5nXG4gICAgfVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghaXNPbmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9ubGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBVbnNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnByZXBhcmVUcmFuc2FjdGlvbldpdGhQdWJsaWNLZXkoXG4gICAgICBuZXdQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpLFxuICAgICAgdGhpcy5jb21iaW5lVHJhbnNhY3Rpb25EZXRhaWxzKHJlY2lwaWVudHMsIHZhbHVlcyksXG4gICAgICB7XG4gICAgICAgIGZlZTogbmV3QW1vdW50KGZlZSwgJ2Jsb2NrY2hhaW4nKSxcbiAgICAgICAgYXJiaXRyYXJ5RGF0YTogdGhpcy5nZXRBcmJpdHJhcnlEYXRhKGV4dHJhcyksXG4gICAgICAgIGFzc2V0SWQ6IGV4dHJhcz8uYXNzZXRJRCA/IHBhcnNlSW50KGV4dHJhcy5hc3NldElELCAxMCkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICApXG5cbiAgICBjb25zdCB0cmFuc2FjdGlvblYwID0gYXdhaXQgdGhpcy5jb252ZXJ0VW5zaWduZWRUcmFuc2FjdGlvblYxVG9WMCh0cmFuc2FjdGlvbiwgcHVibGljS2V5KVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uVjAudHJhbnNhY3Rpb25cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBicm9hZGNhc3RUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT25saW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPbmxpbmUuJylcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgdHJhbnNhY3Rpb246IHJhd1RyYW5zYWN0aW9uLCBhY2NvdW50SWRlbnRpZmllcjogJycgfVxuICAgIGNvbnN0IHNpZ25lZDogU2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNvbnZlcnRTaWduZWRUcmFuc2FjdGlvblYwVG9WMSh0cmFuc2FjdGlvbilcblxuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuYnJvYWRjYXN0VHJhbnNhY3Rpb24oc2lnbmVkKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBfY3Vyc29yPzogSVByb3RvY29sQWRkcmVzc0N1cnNvcik6IFByb21pc2U8SUFpckdhcEFkZHJlc3NSZXN1bHQ+IHtcbiAgICBjb25zdCBhZGRyZXNzOiBBZGRyZXNzV2l0aEN1cnNvciB8IHN0cmluZyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnID8gYWRkcmVzcyA6IGFkZHJlc3MuYWRkcmVzcyxcbiAgICAgIGN1cnNvcjogdHlwZW9mIGFkZHJlc3MgPT09ICdvYmplY3QnID8gYWRkcmVzcy5jdXJzb3IgOiB7IGhhc05leHQ6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWRkcmVzc2VzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZywgX2N1cnNvcj86IElQcm90b2NvbEFkZHJlc3NDdXJzb3IpOiBQcm9taXNlPElBaXJHYXBBZGRyZXNzUmVzdWx0W10+IHtcbiAgICBpZiAoaGFzTXVsdGlBZGRyZXNzUHVibGljS2V5cyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICBjb25zdCBwazogUHVibGljS2V5ID0gbmV3UHVibGljS2V5KHB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpKVxuICAgICAgY29uc3QgYWRkcmVzc2VzOiBBZGRyZXNzV2l0aEN1cnNvcltdID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEluaXRpYWxBZGRyZXNzZXNGcm9tUHVibGljS2V5KHBrKVxuXG4gICAgICByZXR1cm4gYWRkcmVzc2VzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbYXdhaXQgdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXkpXVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBZGRyZXNzRnJvbUV4dGVuZGVkUHVibGljS2V5KFxuICAgIGV4dGVuZGVkUHVibGljS2V5OiBzdHJpbmcsXG4gICAgdmlzaWJpbGl0eURlcml2YXRpb25JbmRleDogbnVtYmVyLFxuICAgIGFkZHJlc3NEZXJpdmF0aW9uSW5kZXg6IG51bWJlclxuICApOiBQcm9taXNlPElBaXJHYXBBZGRyZXNzUmVzdWx0PiB7XG4gICAgaWYgKCFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGRlcml2ZWRQdWJsaWNLZXk6IFB1YmxpY0tleSA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5kZXJpdmVGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoXG4gICAgICBuZXdFeHRlbmRlZFB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChleHRlbmRlZFB1YmxpY0tleSkpLFxuICAgICAgdmlzaWJpbGl0eURlcml2YXRpb25JbmRleCxcbiAgICAgIGFkZHJlc3NEZXJpdmF0aW9uSW5kZXhcbiAgICApXG5cbiAgICByZXR1cm4gdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LnZhbHVlKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFkZHJlc3Nlc0Zyb21FeHRlbmRlZFB1YmxpY0tleShcbiAgICBleHRlbmRlZFB1YmxpY0tleTogc3RyaW5nLFxuICAgIHZpc2liaWxpdHlEZXJpdmF0aW9uSW5kZXg6IG51bWJlcixcbiAgICBhZGRyZXNzQ291bnQ6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlclxuICApOiBQcm9taXNlPElBaXJHYXBBZGRyZXNzUmVzdWx0W10+IHtcbiAgICBpZiAoIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXJhdG9yQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBBcnJheShhZGRyZXNzQ291bnQpLCAoXywgaSkgPT4gaSArIG9mZnNldClcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGdlbmVyYXRvckFycmF5Lm1hcCgoYWRkcmVzc0Rlcml2YXRpb25JbmRleDogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLmdldEFkZHJlc3NGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIHZpc2liaWxpdHlEZXJpdmF0aW9uSW5kZXgsIGFkZHJlc3NEZXJpdmF0aW9uSW5kZXgpXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uRGV0YWlscyhcbiAgICB0cmFuc2FjdGlvbjogVW5zaWduZWRUcmFuc2FjdGlvblYwLFxuICAgIGRhdGE/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG4gICAgICB0cmFuc2FjdGlvbk93bmVyPzogc3RyaW5nXG5cbiAgICAgIC8vIFRlem9zU2FwbGluZ1xuICAgICAga25vd25WaWV3aW5nS2V5cz86IHN0cmluZ1tdXG4gICAgfVxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3QgdW5zaWduZWQ6IFVuc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNvbnZlcnRVbnNpZ25lZFRyYW5zYWN0aW9uVjBUb1YxKHRyYW5zYWN0aW9uLCBkYXRhPy50cmFuc2FjdGlvbk93bmVyKVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uczogQWlyR2FwVHJhbnNhY3Rpb25bXVxuICAgIGlmICh0aGlzLmlzRXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24ucHVibGljS2V5KSkge1xuICAgICAgaWYgKCFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IEJpcDMyLicpXG4gICAgICB9XG5cbiAgICAgIHRyYW5zYWN0aW9ucyA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXREZXRhaWxzRnJvbVRyYW5zYWN0aW9uKFxuICAgICAgICB1bnNpZ25lZCxcbiAgICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24ucHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHRyYW5zYWN0aW9uLnB1YmxpY0tleSkpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHB1YmxpY0tleTogUHVibGljS2V5ID0gbmV3UHVibGljS2V5KHRyYW5zYWN0aW9uLnB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMCh0cmFuc2FjdGlvbi5wdWJsaWNLZXkpKVxuICAgICAgdHJhbnNhY3Rpb25zID1cbiAgICAgICAgZGF0YT8ua25vd25WaWV3aW5nS2V5cyAmJiBpc1Rlem9zU2FwbGluZ1Byb3RvY29sKHRoaXMucHJvdG9jb2xWMSlcbiAgICAgICAgICA/IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXREZXRhaWxzRnJvbVRyYW5zYWN0aW9uKHVuc2lnbmVkIGFzIGFueSwgcHVibGljS2V5LCBkYXRhLmtub3duVmlld2luZ0tleXMpXG4gICAgICAgICAgOiBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0RGV0YWlsc0Zyb21UcmFuc2FjdGlvbih1bnNpZ25lZCwgcHVibGljS2V5KVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uc1YwOiBJQWlyR2FwVHJhbnNhY3Rpb25bXSA9IGF3YWl0IHRoaXMuY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0cmFuc2FjdGlvbnMpXG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25zVjAubWFwKFxuICAgICAgKHR4OiBJQWlyR2FwVHJhbnNhY3Rpb24pOiBJQWlyR2FwVHJhbnNhY3Rpb24gPT4gKHtcbiAgICAgICAgLi4udHgsXG4gICAgICAgIHRyYW5zYWN0aW9uRGV0YWlsczogdHgudHJhbnNhY3Rpb25EZXRhaWxzID8/IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkRldGFpbHNGcm9tU2lnbmVkKFxuICAgIHRyYW5zYWN0aW9uOiBTaWduZWRUcmFuc2FjdGlvblYwLFxuICAgIGRhdGE/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG4gICAgICB0cmFuc2FjdGlvbk93bmVyPzogc3RyaW5nXG5cbiAgICAgIC8vIFRlem9zU2FwbGluZ1xuICAgICAga25vd25WaWV3aW5nS2V5cz86IHN0cmluZ1tdXG4gICAgfVxuICApOiBQcm9taXNlPElBaXJHYXBUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3Qgc2lnbmVkOiBTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY29udmVydFNpZ25lZFRyYW5zYWN0aW9uVjBUb1YxKHRyYW5zYWN0aW9uLCBkYXRhPy50cmFuc2FjdGlvbk93bmVyKVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uczogQWlyR2FwVHJhbnNhY3Rpb25bXVxuICAgIGlmICh0aGlzLmlzRXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24uYWNjb3VudElkZW50aWZpZXIpKSB7XG4gICAgICBpZiAoIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogQmlwMzIuJylcbiAgICAgIH1cblxuICAgICAgdHJhbnNhY3Rpb25zID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldERldGFpbHNGcm9tVHJhbnNhY3Rpb24oXG4gICAgICAgIHNpZ25lZCxcbiAgICAgICAgbmV3RXh0ZW5kZWRQdWJsaWNLZXkodHJhbnNhY3Rpb24uYWNjb3VudElkZW50aWZpZXIsIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAodHJhbnNhY3Rpb24uYWNjb3VudElkZW50aWZpZXIpKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwdWJsaWNLZXk6IFB1YmxpY0tleSA9IG5ld1B1YmxpY0tleSh0cmFuc2FjdGlvbi5hY2NvdW50SWRlbnRpZmllciwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMCh0cmFuc2FjdGlvbi5hY2NvdW50SWRlbnRpZmllcikpXG4gICAgICB0cmFuc2FjdGlvbnMgPVxuICAgICAgICBkYXRhPy5rbm93blZpZXdpbmdLZXlzICYmIGlzVGV6b3NTYXBsaW5nUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKVxuICAgICAgICAgID8gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldERldGFpbHNGcm9tVHJhbnNhY3Rpb24oc2lnbmVkIGFzIGFueSwgcHVibGljS2V5LCBkYXRhLmtub3duVmlld2luZ0tleXMpXG4gICAgICAgICAgOiBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0RGV0YWlsc0Zyb21UcmFuc2FjdGlvbihzaWduZWQsIHB1YmxpY0tleSlcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNWMDogSUFpckdhcFRyYW5zYWN0aW9uW10gPSBhd2FpdCB0aGlzLmNvbnZlcnRUcmFuc2FjdGlvbkRldGFpbHNWMVRvVjAodHJhbnNhY3Rpb25zKVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uc1YwLm1hcChcbiAgICAgICh0eDogSUFpckdhcFRyYW5zYWN0aW9uKTogSUFpckdhcFRyYW5zYWN0aW9uID0+ICh7XG4gICAgICAgIC4uLnR4LFxuICAgICAgICB0cmFuc2FjdGlvbkRldGFpbHM6IHR4LnRyYW5zYWN0aW9uRGV0YWlscyA/PyB0cmFuc2FjdGlvbi50cmFuc2FjdGlvblxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhY2FuU2lnbk1lc3NhZ2UodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBTaWduTWVzc2FnZS4nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEudmVyaWZ5TWVzc2FnZVdpdGhQdWJsaWNLZXkoXG4gICAgICBtZXNzYWdlLFxuICAgICAgbmV3U2lnbmF0dXJlKHNpZ25hdHVyZSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChzaWduYXR1cmUpKSxcbiAgICAgIG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW5jcnlwdEFzeW1tZXRyaWMocGF5bG9hZDogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFjYW5FbmNyeXB0QXN5bW1ldHJpYyh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEFzeW1tZXRyaWNFbmNyeXB0aW9uLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5lbmNyeXB0QXN5bW1ldHJpY1dpdGhQdWJsaWNLZXkocGF5bG9hZCwgbmV3UHVibGljS2V5KHB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQdWJsaWNLZXlGcm9tTW5lbW9uaWMobW5lbW9uaWM6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZywgcGFzc3dvcmQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3Qgc2VlZDogQnVmZmVyID0gYXdhaXQgbW5lbW9uaWNUb1NlZWQoY3J5cHRvLCBtbmVtb25pYywgcGFzc3dvcmQpXG5cbiAgICByZXR1cm4gdGhpcy5nZXRQdWJsaWNLZXlGcm9tSGV4U2VjcmV0KHNlZWQudG9TdHJpbmcoJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcml2YXRlS2V5RnJvbU1uZW1vbmljKG1uZW1vbmljOiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIHBhc3N3b3JkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZS4nKVxuICAgIH1cblxuICAgIGNvbnN0IGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiA9IHRoaXMuY3J5cHRvID8/IChhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0Q3J5cHRvQ29uZmlndXJhdGlvbigpKVxuICAgIGNvbnN0IHNlZWQ6IEJ1ZmZlciA9IGF3YWl0IG1uZW1vbmljVG9TZWVkKGNyeXB0bywgbW5lbW9uaWMsIHBhc3N3b3JkKVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21IZXhTZWNyZXQoc2VlZC50b1N0cmluZygnaGV4JyksIGRlcml2YXRpb25QYXRoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEV4dGVuZGVkUHVibGljS2V5RnJvbU1uZW1vbmljKG1uZW1vbmljOiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIHBhc3N3b3JkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3Qgc2VlZDogQnVmZmVyID0gYXdhaXQgbW5lbW9uaWNUb1NlZWQoY3J5cHRvLCBtbmVtb25pYywgcGFzc3dvcmQpXG5cbiAgICByZXR1cm4gdGhpcy5nZXRFeHRlbmRlZFB1YmxpY0tleUZyb21IZXhTZWNyZXQoc2VlZC50b1N0cmluZygnaGV4JyksIGRlcml2YXRpb25QYXRoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEV4dGVuZGVkUHJpdmF0ZUtleUZyb21NbmVtb25pYyhtbmVtb25pYzogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiA9IHRoaXMuY3J5cHRvID8/IChhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0Q3J5cHRvQ29uZmlndXJhdGlvbigpKVxuICAgIGNvbnN0IHNlZWQ6IEJ1ZmZlciA9IGF3YWl0IG1uZW1vbmljVG9TZWVkKGNyeXB0bywgbW5lbW9uaWMsIHBhc3N3b3JkKVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RXh0ZW5kZWRQcml2YXRlS2V5RnJvbUhleFNlY3JldChzZWVkLnRvU3RyaW5nKCdoZXgnKSwgZGVyaXZhdGlvblBhdGgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVibGljS2V5RnJvbUhleFNlY3JldChzZWNyZXQ6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3QgZGVyaXZhdGl2ZTogQ3J5cHRvRGVyaXZhdGl2ZSA9IGF3YWl0IGRlcml2ZShjcnlwdG8sIEJ1ZmZlci5mcm9tKHNlY3JldCwgJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgICBjb25zdCBrZXlQYWlyOiBLZXlQYWlyID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEtleVBhaXJGcm9tRGVyaXZhdGl2ZShkZXJpdmF0aXZlKVxuXG4gICAgcmV0dXJuIGtleVBhaXIucHVibGljS2V5LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpdmF0ZUtleUZyb21IZXhTZWNyZXQoc2VjcmV0OiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3QgZGVyaXZhdGl2ZTogQ3J5cHRvRGVyaXZhdGl2ZSA9IGF3YWl0IGRlcml2ZShjcnlwdG8sIEJ1ZmZlci5mcm9tKHNlY3JldCwgJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgICBjb25zdCBrZXlQYWlyOiBLZXlQYWlyID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldEtleVBhaXJGcm9tRGVyaXZhdGl2ZShkZXJpdmF0aXZlKVxuXG4gICAgcmV0dXJuIGtleVBhaXIuc2VjcmV0S2V5LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RXh0ZW5kZWRQdWJsaWNLZXlGcm9tSGV4U2VjcmV0KHNlY3JldDogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIEJpcDMyLicpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uID0gdGhpcy5jcnlwdG8gPz8gKGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRDcnlwdG9Db25maWd1cmF0aW9uKCkpXG4gICAgY29uc3QgZGVyaXZhdGl2ZTogQ3J5cHRvRGVyaXZhdGl2ZSA9IGF3YWl0IGRlcml2ZShjcnlwdG8sIEJ1ZmZlci5mcm9tKHNlY3JldCwgJ2hleCcpLCBkZXJpdmF0aW9uUGF0aClcbiAgICBjb25zdCBrZXlQYWlyOiBFeHRlbmRlZEtleVBhaXIgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuZ2V0RXh0ZW5kZWRLZXlQYWlyRnJvbURlcml2YXRpdmUoZGVyaXZhdGl2ZSlcblxuICAgIHJldHVybiBrZXlQYWlyLnB1YmxpY0tleS52YWx1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEV4dGVuZGVkUHJpdmF0ZUtleUZyb21IZXhTZWNyZXQoc2VjcmV0OiBzdHJpbmcsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZSwgQmlwMzIuJylcbiAgICB9XG5cbiAgICBjb25zdCBjcnlwdG86IENyeXB0b0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNyeXB0byA/PyAoYXdhaXQgdGhpcy5wcm90b2NvbFYxLmdldENyeXB0b0NvbmZpZ3VyYXRpb24oKSlcbiAgICBjb25zdCBkZXJpdmF0aXZlOiBDcnlwdG9EZXJpdmF0aXZlID0gYXdhaXQgZGVyaXZlKGNyeXB0bywgQnVmZmVyLmZyb20oc2VjcmV0LCAnaGV4JyksIGRlcml2YXRpb25QYXRoKVxuICAgIGNvbnN0IGtleVBhaXI6IEV4dGVuZGVkS2V5UGFpciA9IGF3YWl0IHRoaXMucHJvdG9jb2xWMS5nZXRFeHRlbmRlZEtleVBhaXJGcm9tRGVyaXZhdGl2ZShkZXJpdmF0aXZlKVxuXG4gICAgcmV0dXJuIGtleVBhaXIuc2VjcmV0S2V5LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbldpdGhFeHRlbmRlZFByaXZhdGVLZXkoZXh0ZW5kZWRQcml2YXRlS2V5OiBzdHJpbmcsIHRyYW5zYWN0aW9uOiBhbnksIGNoaWxkRGVyaXZhdGlvblBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNPZmZsaW5lUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSB8fCAhaXNCaXAzMlByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZSwgQmlwMzIuJylcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEoe1xuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBwdWJsaWNLZXk6ICcnXG4gICAgfSlcblxuICAgIGNvbnN0IGV4dGVuZGVkU2VjcmV0S2V5OiBFeHRlbmRlZFNlY3JldEtleSA9IG5ld0V4dGVuZGVkU2VjcmV0S2V5KGV4dGVuZGVkUHJpdmF0ZUtleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChleHRlbmRlZFByaXZhdGVLZXkpKVxuXG4gICAgY29uc3Qgc2VjcmV0S2V5OiBFeHRlbmRlZFNlY3JldEtleSB8IFNlY3JldEtleSA9IGNoaWxkRGVyaXZhdGlvblBhdGhcbiAgICAgID8gYXdhaXQgdGhpcy5kZXJpdmVTZWNyZXRLZXkoZXh0ZW5kZWRTZWNyZXRLZXksIGNoaWxkRGVyaXZhdGlvblBhdGgpXG4gICAgICA6IGV4dGVuZGVkU2VjcmV0S2V5XG5cbiAgICBjb25zdCBzaWduZWQ6IFNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnNpZ25UcmFuc2FjdGlvbldpdGhTZWNyZXRLZXkodW5zaWduZWQsIHNlY3JldEtleSlcbiAgICBjb25zdCBzaWduZWRWMDogVHJhbnNhY3Rpb25TaWduUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRTaWduZWRUcmFuc2FjdGlvblYxVG9WMChzaWduZWQsICcnKVxuXG4gICAgcmV0dXJuIHNpZ25lZFYwLnRyYW5zYWN0aW9uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbldpdGhQcml2YXRlS2V5KHByaXZhdGVLZXk6IHN0cmluZywgdHJhbnNhY3Rpb246IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUuJylcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEoe1xuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBwdWJsaWNLZXk6ICcnXG4gICAgfSlcblxuICAgIGNvbnN0IHNpZ25lZDogU2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLnByb3RvY29sVjEuc2lnblRyYW5zYWN0aW9uV2l0aFNlY3JldEtleShcbiAgICAgIHVuc2lnbmVkLFxuICAgICAgbmV3U2VjcmV0S2V5KHByaXZhdGVLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHJpdmF0ZUtleSkpXG4gICAgKVxuICAgIGNvbnN0IHNpZ25lZFYwOiBUcmFuc2FjdGlvblNpZ25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydFNpZ25lZFRyYW5zYWN0aW9uVjFUb1YwKHNpZ25lZCwgJycpXG5cbiAgICByZXR1cm4gc2lnbmVkVjAudHJhbnNhY3Rpb25cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGtleXBhaXI6IHsgcHVibGljS2V5Pzogc3RyaW5nOyBwcml2YXRlS2V5OiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFjYW5TaWduTWVzc2FnZSh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3Qgc3VwcG9ydGVkLCByZXF1aXJlZCBpbmZlcmZhY2U6IE9mZmxpbmUsIFNpZ25NZXNzYWdlLicpXG4gICAgfVxuXG4gICAgY29uc3QgcHJpdmF0ZUtleSA9XG4gICAgICBnZXRTZWNyZXRLZXlUeXBlKGtleXBhaXIucHJpdmF0ZUtleSkgPT09ICd4cHJpdidcbiAgICAgICAgPyBhd2FpdCB0aGlzLmdldFByaXZhdGVLZXlGcm9tRXh0ZW5kZWRQcml2YXRlS2V5KGtleXBhaXIucHJpdmF0ZUtleSlcbiAgICAgICAgOiBrZXlwYWlyLnByaXZhdGVLZXlcblxuICAgIGNvbnN0IHB1YmxpY0tleSA9IGtleXBhaXIucHVibGljS2V5XG4gICAgICA/IGdldFB1YmxpY0tleVR5cGUoa2V5cGFpci5wdWJsaWNLZXkpID09PSAneHB1YidcbiAgICAgICAgPyBhd2FpdCB0aGlzLmdldFB1YmxpY0tleUZyb21FeHRlbmRlZFByaXZhdGVLZXkoa2V5cGFpci5wdWJsaWNLZXkpXG4gICAgICAgIDoga2V5cGFpci5wdWJsaWNLZXlcbiAgICAgIDogJydcblxuICAgIGNvbnN0IHNpZ25hdHVyZTogU2lnbmF0dXJlID0gYXdhaXQgdGhpcy5wcm90b2NvbFYxLnNpZ25NZXNzYWdlV2l0aEtleVBhaXIobWVzc2FnZSwge1xuICAgICAgc2VjcmV0S2V5OiBuZXdTZWNyZXRLZXkocHJpdmF0ZUtleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwcml2YXRlS2V5KSksXG4gICAgICBwdWJsaWNLZXk6IG5ld1B1YmxpY0tleShwdWJsaWNLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNpZ25hdHVyZS52YWx1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlY3J5cHRBc3ltbWV0cmljKGVuY3J5cHRlZFBheWxvYWQ6IHN0cmluZywga2V5cGFpcjogeyBwdWJsaWNLZXk/OiBzdHJpbmc7IHByaXZhdGVLZXk6IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWNhbkVuY3J5cHRBc3ltbWV0cmljKHRoaXMucHJvdG9jb2xWMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVkIGluZmVyZmFjZTogT2ZmbGluZSwgQXN5bW1ldHJpY0VuY3J5cHRpb24uJylcbiAgICB9XG5cbiAgICBjb25zdCBwcml2YXRlS2V5ID1cbiAgICAgIGdldFNlY3JldEtleVR5cGUoa2V5cGFpci5wcml2YXRlS2V5KSA9PT0gJ3hwcml2J1xuICAgICAgICA/IGF3YWl0IHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21FeHRlbmRlZFByaXZhdGVLZXkoa2V5cGFpci5wcml2YXRlS2V5KVxuICAgICAgICA6IGtleXBhaXIucHJpdmF0ZUtleVxuXG4gICAgY29uc3QgcHVibGljS2V5ID0ga2V5cGFpci5wdWJsaWNLZXlcbiAgICAgID8gZ2V0UHVibGljS2V5VHlwZShrZXlwYWlyLnB1YmxpY0tleSkgPT09ICd4cHViJ1xuICAgICAgICA/IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5RnJvbUV4dGVuZGVkUHJpdmF0ZUtleShrZXlwYWlyLnB1YmxpY0tleSlcbiAgICAgICAgOiBrZXlwYWlyLnB1YmxpY0tleVxuICAgICAgOiAnJ1xuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5kZWNyeXB0QXN5bW1ldHJpY1dpdGhLZXlQYWlyKGVuY3J5cHRlZFBheWxvYWQsIHtcbiAgICAgIHNlY3JldEtleTogbmV3U2VjcmV0S2V5KHByaXZhdGVLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHJpdmF0ZUtleSkpLFxuICAgICAgcHVibGljS2V5OiBuZXdQdWJsaWNLZXkocHVibGljS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkpXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbmNyeXB0QUVTKHBheWxvYWQ6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWNhbkVuY3J5cHRBRVModGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBBRVMuJylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBwcml2YXRlS2V5ID0gZ2V0U2VjcmV0S2V5VHlwZShwcml2YXRlS2V5KSA9PT0gJ3hwcml2JyA/IGF3YWl0IHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21FeHRlbmRlZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgOiBwcml2YXRlS2V5XG5cbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmVuY3J5cHRBRVNXaXRoU2VjcmV0S2V5KHBheWxvYWQsIG5ld1NlY3JldEtleShwcml2YXRlS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHByaXZhdGVLZXkpKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWNyeXB0QUVTKGVuY3J5cHRlZFBheWxvYWQ6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWNhbkVuY3J5cHRBRVModGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBBRVMuJylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBwcml2YXRlS2V5ID0gZ2V0U2VjcmV0S2V5VHlwZShwcml2YXRlS2V5KSA9PT0gJ3hwcml2JyA/IGF3YWl0IHRoaXMuZ2V0UHJpdmF0ZUtleUZyb21FeHRlbmRlZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgOiBwcml2YXRlS2V5XG5cbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmRlY3J5cHRBRVNXaXRoU2VjcmV0S2V5KGVuY3J5cHRlZFBheWxvYWQsIG5ld1NlY3JldEtleShwcml2YXRlS2V5LCBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHByaXZhdGVLZXkpKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcml2YXRlS2V5RnJvbUV4dGVuZGVkUHJpdmF0ZUtleShleHRlbmRlZFByaXZhdGVLZXk6IHN0cmluZywgY2hpbGREZXJpdmF0aW9uUGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc09mZmxpbmVQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpIHx8ICFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBPZmZsaW5lLCBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IHNlY3JldEtleTogU2VjcmV0S2V5ID0gYXdhaXQgdGhpcy5kZXJpdmVTZWNyZXRLZXkoXG4gICAgICBuZXdFeHRlbmRlZFNlY3JldEtleShleHRlbmRlZFByaXZhdGVLZXksIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoZXh0ZW5kZWRQcml2YXRlS2V5KSksXG4gICAgICBjaGlsZERlcml2YXRpb25QYXRoXG4gICAgKVxuXG4gICAgcmV0dXJuIHNlY3JldEtleS52YWx1ZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1YmxpY0tleUZyb21FeHRlbmRlZFByaXZhdGVLZXkoZXh0ZW5kZWRQdWJsaWNLZXk6IHN0cmluZywgY2hpbGREZXJpdmF0aW9uUGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFpc0JpcDMyUHJvdG9jb2wodGhpcy5wcm90b2NvbFYxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IHN1cHBvcnRlZCwgcmVxdWlyZWQgaW5mZXJmYWNlOiBCaXAzMi4nKVxuICAgIH1cblxuICAgIGNvbnN0IHB1YmxpY0tleTogUHVibGljS2V5ID0gYXdhaXQgdGhpcy5kZXJpdmVQdWJsaWNLZXkoXG4gICAgICBuZXdFeHRlbmRlZFB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleSwgZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChleHRlbmRlZFB1YmxpY0tleSkpLFxuICAgICAgY2hpbGREZXJpdmF0aW9uUGF0aFxuICAgIClcblxuICAgIHJldHVybiBwdWJsaWNLZXkudmFsdWVcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXROZXR3b3JrKHByb3RvY29sT3B0aW9ucz86IFByb3RvY29sT3B0aW9uc1YwKTogUHJvdG9jb2xOZXR3b3JrVjAge1xuICAgIGxldCBrbm93bk9wdGlvbnM6IFByb3RvY29sT3B0aW9uc1YwIHwgdW5kZWZpbmVkXG4gICAgdHJ5IHtcbiAgICAgIGtub3duT3B0aW9ucyA9IHByb3RvY29sT3B0aW9ucyA/PyBnZXRQcm90b2NvbE9wdGlvbnNCeUlkZW50aWZpZXJMZWdhY3kodGhpcy5pZGVudGlmaWVyKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgY29uc3QgeyBuYW1lLCB0eXBlLCBycGNVcmwsIC4uLnJlc3QgfSA9IHRoaXMubmV0d29yayA/PyB7fVxuXG4gICAgcmV0dXJuIG5ldyBQcm90b2NvbE5ldHdvcmtBZGFwdGVyKFxuICAgICAgbmFtZSA/PyBrbm93bk9wdGlvbnM/Lm5ldHdvcmsubmFtZSA/PyAnJyxcbiAgICAgIHR5cGUgPz8ga25vd25PcHRpb25zPy5uZXR3b3JrLnR5cGUgPz8gJ21haW5uZXQnLFxuICAgICAgcnBjVXJsID8/IGtub3duT3B0aW9ucz8ubmV0d29yay5ycGNVcmwgPz8gJycsXG4gICAgICB0aGlzLmJsb2NrRXhwbG9yZXJWMCxcbiAgICAgIHJlc3QgfHwgKGtub3duT3B0aW9ucz8ubmV0d29yay5leHRyYXMgPz8ge30pXG4gICAgKVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlcml2ZVNlY3JldEtleShleHRlbmRlZFNlY3JldEtleTogRXh0ZW5kZWRTZWNyZXRLZXksIGNoaWxkRGVyaXZhdGlvblBhdGg6IHN0cmluZyA9ICcwLzAnKTogUHJvbWlzZTxTZWNyZXRLZXk+IHtcbiAgICBpZiAoIWlzT2ZmbGluZVByb3RvY29sKHRoaXMucHJvdG9jb2xWMSkgfHwgIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydCBzZWNyZXQga2V5IGRlcml2YXRpb24sIG1pc3NpbmcgaW5mZXJmYWNlOiBPZmZsaW5lLCBCaXAzMi5gKVxuICAgIH1cblxuICAgIGlmIChjaGlsZERlcml2YXRpb25QYXRoLnN0YXJ0c1dpdGgoJ20nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNlaXZlZCBmdWxsIGRlcml2YXRpb24gcGF0aCwgZXhwZWN0ZWQgY2hpbGQgZGVyaXZhdGlvbiBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY2hpbGREZXJpdmF0aW9uUGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdoJykgfHwgY2hpbGREZXJpdmF0aW9uUGF0aC5pbmNsdWRlcyhgJ2ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIGRlcml2YXRpb24gcGF0aCBjYW5ub3QgaW5jbHVkZSBoYXJkZW5lZCBjaGlsZHJlbicpXG4gICAgfVxuXG4gICAgY29uc3QgW3Zpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4XTogbnVtYmVyW10gPSBjaGlsZERlcml2YXRpb25QYXRoLnNwbGl0KCcvJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKVxuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5kZXJpdmVGcm9tRXh0ZW5kZWRTZWNyZXRLZXkoZXh0ZW5kZWRTZWNyZXRLZXksIHZpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4KVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlcml2ZVB1YmxpY0tleShleHRlbmRlZFB1YmxpY0tleTogRXh0ZW5kZWRQdWJsaWNLZXksIGNoaWxkRGVyaXZhdGlvblBhdGg6IHN0cmluZyA9ICcwLzAnKTogUHJvbWlzZTxQdWJsaWNLZXk+IHtcbiAgICBpZiAoIWlzQmlwMzJQcm90b2NvbCh0aGlzLnByb3RvY29sVjEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydCBwdWJsaWMga2V5IGRlcml2YXRpb24sIG1pc3NpbmcgaW5mZXJmYWNlOiBCaXAzMi5gKVxuICAgIH1cblxuICAgIGlmIChjaGlsZERlcml2YXRpb25QYXRoLnN0YXJ0c1dpdGgoJ20nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWNlaXZlZCBmdWxsIGRlcml2YXRpb24gcGF0aCwgZXhwZWN0ZWQgY2hpbGQgZGVyaXZhdGlvbiBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY2hpbGREZXJpdmF0aW9uUGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdoJykgfHwgY2hpbGREZXJpdmF0aW9uUGF0aC5pbmNsdWRlcyhgJ2ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIGRlcml2YXRpb24gcGF0aCBjYW5ub3QgaW5jbHVkZSBoYXJkZW5lZCBjaGlsZHJlbicpXG4gICAgfVxuXG4gICAgY29uc3QgW3Zpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4XTogbnVtYmVyW10gPSBjaGlsZERlcml2YXRpb25QYXRoLnNwbGl0KCcvJykubWFwKChpbmRleDogc3RyaW5nKSA9PiBwYXJzZUludChpbmRleCwgMTApKVxuXG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5kZXJpdmVGcm9tRXh0ZW5kZWRQdWJsaWNLZXkoZXh0ZW5kZWRQdWJsaWNLZXksIHZpc2liaWxpdHlJbmRleCwgYWRkcmVzc0luZGV4KVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFNlcmlhbGl6ZXJJZGVudGlmaWVyKGJhc2U/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXI6IHN0cmluZyA9IGJhc2UgPz8gKGF3YWl0IHRoaXMuZ2V0SWRlbnRpZmllcigpKVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXIuc3RhcnRzV2l0aChTdWJQcm90b2NvbFN5bWJvbHMuRVRIX0VSQzIwKVxuICAgICAgPyBTdWJQcm90b2NvbFN5bWJvbHMuRVRIX0VSQzIwXG4gICAgICA6IGlkZW50aWZpZXIuc3RhcnRzV2l0aChTdWJQcm90b2NvbFN5bWJvbHMuT1BUSU1JU01fRVJDMjApXG4gICAgICA/IFN1YlByb3RvY29sU3ltYm9scy5PUFRJTUlTTV9FUkMyMFxuICAgICAgOiBpZGVudGlmaWVyXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2lnblJlcXVlc3QsIG93bmVyPzogc3RyaW5nKTogUHJvbWlzZTxVbnNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaWRlbnRpZmllcjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRTZXJpYWxpemVySWRlbnRpZmllcihvd25lcilcblxuICAgIHJldHVybiB0aGlzLnYzU2VyaWFsaXplckNvbXBhbmlvbi5mcm9tVHJhbnNhY3Rpb25TaWduUmVxdWVzdChpZGVudGlmaWVyLCB0cmFuc2FjdGlvbilcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0VW5zaWduZWRUcmFuc2FjdGlvblYxVG9WMChcbiAgICB0cmFuc2FjdGlvbjogVW5zaWduZWRUcmFuc2FjdGlvbixcbiAgICBwdWJsaWNLZXk6IHN0cmluZyxcbiAgICBjYWxsYmFja1VybD86IHN0cmluZyxcbiAgICBvd25lcj86IHN0cmluZ1xuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uU2lnblJlcXVlc3Q+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFNlcmlhbGl6ZXJJZGVudGlmaWVyKG93bmVyKVxuXG4gICAgcmV0dXJuIHRoaXMudjNTZXJpYWxpemVyQ29tcGFuaW9uLnRvVHJhbnNhY3Rpb25TaWduUmVxdWVzdChpZGVudGlmaWVyLCB0cmFuc2FjdGlvbiwgcHVibGljS2V5LCBjYWxsYmFja1VybClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0U2lnbmVkVHJhbnNhY3Rpb25WMFRvVjEodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uU2lnblJlc3BvbnNlLCBvd25lcj86IHN0cmluZyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFNlcmlhbGl6ZXJJZGVudGlmaWVyKG93bmVyKVxuXG4gICAgcmV0dXJuIHRoaXMudjNTZXJpYWxpemVyQ29tcGFuaW9uLmZyb21UcmFuc2FjdGlvblNpZ25SZXNwb25zZShpZGVudGlmaWVyLCB0cmFuc2FjdGlvbilcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0U2lnbmVkVHJhbnNhY3Rpb25WMVRvVjAoXG4gICAgdHJhbnNhY3Rpb246IFNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIGFjY291bnRJZGVudGlmaWVyOiBzdHJpbmcsXG4gICAgb3duZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvblNpZ25SZXNwb25zZT4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXI6IHN0cmluZyA9IGF3YWl0IHRoaXMuZ2V0U2VyaWFsaXplcklkZW50aWZpZXIob3duZXIpXG5cbiAgICByZXR1cm4gdGhpcy52M1NlcmlhbGl6ZXJDb21wYW5pb24udG9UcmFuc2FjdGlvblNpZ25SZXNwb25zZShpZGVudGlmaWVyLCB0cmFuc2FjdGlvbiwgYWNjb3VudElkZW50aWZpZXIpXG4gIH1cblxuICBwdWJsaWMgY29udmVydEZlZURlZmF1bHRzVjFUb1YwKGZlZURlZmF1bHRzOiBGZWVEZWZhdWx0cyk6IEZlZURlZmF1bHRzVjAge1xuICAgIHJldHVybiBjb252ZXJ0RmVlRGVmYXVsdHNWMVRvVjAoZmVlRGVmYXVsdHMsIHRoaXMucHJvdG9jb2xNZXRhZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb252ZXJ0VHJhbnNhY3Rpb25EZXRhaWxzVjFUb1YwKHR4czogQWlyR2FwVHJhbnNhY3Rpb25bXSk6IFByb21pc2U8SUFpckdhcFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMCh0eHMsIHRoaXMucHJvdG9jb2xNZXRhZGF0YSwgdGhpcy5uZXR3b3JrVjApXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tYmluZVRyYW5zYWN0aW9uRGV0YWlsczxfVW5pdHMgZXh0ZW5kcyBzdHJpbmc+KHJlY2lwaWVudHM6IHN0cmluZ1tdLCB2YWx1ZXM6IHN0cmluZ1tdKTogVHJhbnNhY3Rpb25EZXRhaWxzPF9Vbml0cz5bXSB7XG4gICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY2lwaWVudHMgbGVuZ3RoIG11c3QgbWF0Y2ggdmFsdWVzIGxlbmd0aC4nKVxuICAgIH1cblxuICAgIHJldHVybiByZWNpcGllbnRzLm1hcCgocmVjaXBpZW50OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICB0bzogcmVjaXBpZW50LFxuICAgICAgYW1vdW50OiBuZXdBbW91bnQodmFsdWVzW2luZGV4XSwgJ2Jsb2NrY2hhaW4nKVxuICAgIH0pKVxuICB9XG5cbiAgcHJvdGVjdGVkIGlzRXh0ZW5kZWRQdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHVibGljS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSB8fCBwdWJsaWNLZXkuc3RhcnRzV2l0aCgneXB1YicpIHx8IHB1YmxpY0tleS5zdGFydHNXaXRoKCd6cHViJylcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBcmJpdHJhcnlEYXRhKGRhdGE6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2ltcGxlQXJiaXRyYXJ5RGF0YU1ldGFkYXRhU2NoZW1hOiBTY2hlbWE8UHJvdG9jb2xUcmFuc2FjdGlvbkFyYml0cmFyeURhdGFNZXRhZGF0YT4gPSB7XG4gICAgICBuYW1lOiAncmVxdWlyZWQnLFxuICAgICAgbWF4TGVuZ3RoOiAnb3B0aW9uYWwnLFxuICAgICAgcmVnZXg6ICdvcHRpb25hbCdcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbE1ldGFkYXRhLnRyYW5zYWN0aW9uPy5hcmJpdHJhcnlEYXRhXG4gICAgICA/IGltcGxlbWVudHNJbnRlcmZhY2U8UHJvdG9jb2xUcmFuc2FjdGlvbkFyYml0cmFyeURhdGFNZXRhZGF0YT4oXG4gICAgICAgICAgdGhpcy5wcm90b2NvbE1ldGFkYXRhLnRyYW5zYWN0aW9uPy5hcmJpdHJhcnlEYXRhLFxuICAgICAgICAgIHNpbXBsZUFyYml0cmFyeURhdGFNZXRhZGF0YVNjaGVtYVxuICAgICAgICApXG4gICAgICAgID8gZGF0YVt0aGlzLnByb3RvY29sTWV0YWRhdGEudHJhbnNhY3Rpb24uYXJiaXRyYXJ5RGF0YS5uYW1lXVxuICAgICAgICA6IGRhdGFbdGhpcy5wcm90b2NvbE1ldGFkYXRhLnRyYW5zYWN0aW9uLmFyYml0cmFyeURhdGEucm9vdD8ubmFtZSA/PyB0aGlzLnByb3RvY29sTWV0YWRhdGEudHJhbnNhY3Rpb24uYXJiaXRyYXJ5RGF0YS5pbm5lcj8ubmFtZV1cbiAgICAgIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuLy8gSUNvaW5EZWxlZ2F0ZVByb3RvY29sXG5cbmV4cG9ydCBjbGFzcyBJQ29pbkRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyPFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCAmIEFpckdhcERlbGVnYXRlUHJvdG9jb2w+XG4gIGV4dGVuZHMgSUNvaW5Qcm90b2NvbEFkYXB0ZXI8VD5cbiAgaW1wbGVtZW50cyBJQ29pbkRlbGVnYXRlUHJvdG9jb2xcbntcbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHREZWxlZ2F0ZWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlZmF1bHREZWxlZ2F0ZWUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuZ2V0Q3VycmVudERlbGVnYXRlZXNGb3JQdWJsaWNLZXkoXG4gICAgICB7IHR5cGU6ICdwdWInLCB2YWx1ZTogcHVibGljS2V5LCBmb3JtYXQ6IGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSB9LFxuICAgICAgZGF0YVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50RGVsZWdhdGVlc0ZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuZ2V0Q3VycmVudERlbGVnYXRlZXNGb3JBZGRyZXNzKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdGVlRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRlZURldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlbGVnYXRlZURldGFpbHMoYWRkcmVzcywgZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc1B1YmxpY0tleURlbGVnYXRpbmcocHVibGljS2V5OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmlzUHVibGljS2V5RGVsZWdhdGluZyh7IHR5cGU6ICdwdWInLCB2YWx1ZTogcHVibGljS2V5LCBmb3JtYXQ6IGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSB9LCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzQWRkcmVzc0RlbGVnYXRpbmcoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5pc0FkZHJlc3NEZWxlZ2F0aW5nKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRvckRldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlbGVnYXRvckRldGFpbHNGcm9tUHVibGljS2V5KFxuICAgICAgeyB0eXBlOiAncHViJywgdmFsdWU6IHB1YmxpY0tleSwgZm9ybWF0OiBnZXRCeXRlc0Zvcm1hdFYxRnJvbVYwKHB1YmxpY0tleSkgfSxcbiAgICAgIGRhdGFcbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8RGVsZWdhdG9yRGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sVjEuZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdGlvbkRldGFpbHNGcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBkZWxlZ2F0ZWVzOiBzdHJpbmdbXSwgZGF0YT86IGFueSk6IFByb21pc2U8RGVsZWdhdGlvbkRldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbFYxLmdldERlbGVnYXRpb25EZXRhaWxzRnJvbVB1YmxpY0tleShcbiAgICAgIHsgdHlwZTogJ3B1YicsIHZhbHVlOiBwdWJsaWNLZXksIGZvcm1hdDogZ2V0Qnl0ZXNGb3JtYXRWMUZyb21WMChwdWJsaWNLZXkpIH0sXG4gICAgICBkZWxlZ2F0ZWVzLFxuICAgICAgZGF0YVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxlZ2F0aW9uRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGVsZWdhdGVlczogc3RyaW5nW10sIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRpb25EZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2xWMS5nZXREZWxlZ2F0aW9uRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3MsIGRlbGVnYXRlZXMsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZURlbGVnYXRvckFjdGlvbkZyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIHR5cGU6IGFueSwgZGF0YT86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhd2FpdCB0aGlzLnByb3RvY29sVjEucHJlcGFyZURlbGVnYXRvckFjdGlvbkZyb21QdWJsaWNLZXkoXG4gICAgICB7IHR5cGU6ICdwdWInLCB2YWx1ZTogcHVibGljS2V5LCBmb3JtYXQ6IGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAocHVibGljS2V5KSB9LFxuICAgICAgdHlwZSxcbiAgICAgIGRhdGFcbiAgICApXG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNWMCA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHJhbnNhY3Rpb25zLm1hcCgodHJhbnNhY3Rpb24pID0+IHRoaXMuY29udmVydFVuc2lnbmVkVHJhbnNhY3Rpb25WMVRvVjAodHJhbnNhY3Rpb24sIHB1YmxpY0tleSkpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uc1YwLm1hcCgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKVxuICB9XG59XG5cbi8vIElDb2luU3ViUHJvdG9jb2xcblxuZXhwb3J0IGNsYXNzIElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCAmIFN1YlByb3RvY29sID0gQWlyR2FwQW55UHJvdG9jb2wgJiBTdWJQcm90b2NvbD5cbiAgZXh0ZW5kcyBJQ29pblByb3RvY29sQWRhcHRlcjxUPlxuICBpbXBsZW1lbnRzIElDb2luU3ViUHJvdG9jb2xcbntcbiAgcHVibGljIHJlYWRvbmx5IGlzU3ViUHJvdG9jb2w6IGJvb2xlYW4gPSB0cnVlXG4gIHB1YmxpYyByZWFkb25seSBzdWJQcm90b2NvbFR5cGU6IFN1YlByb3RvY29sVHlwZVYwXG4gIHB1YmxpYyByZWFkb25seSBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90b2NvbFYxOiBULFxuICAgIHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEsXG4gICAgY3J5cHRvOiBDcnlwdG9Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIG5ldHdvcms6IFByb3RvY29sTmV0d29yayB8IHVuZGVmaW5lZCxcbiAgICB2MUJsb2NrRXhwbG9yZXI6IEFpckdhcEJsb2NrRXhwbG9yZXIgfCB1bmRlZmluZWQsXG4gICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhOiBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uOiBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gICAgdHlwZTogU3ViUHJvdG9jb2xUeXBlLFxuICAgIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKHByb3RvY29sVjEsIHByb3RvY29sTWV0YWRhdGEsIGNyeXB0bywgbmV0d29yaywgdjFCbG9ja0V4cGxvcmVyLCBibG9ja0V4cGxvcmVyTWV0YWRhdGEsIHYzU2VyaWFsaXplckNvbXBhbmlvbilcblxuICAgIHRoaXMuc3ViUHJvdG9jb2xUeXBlID0gdHlwZSA9PT0gJ2FjY291bnQnID8gU3ViUHJvdG9jb2xUeXBlVjAuQUNDT1VOVCA6IFN1YlByb3RvY29sVHlwZVYwLlRPS0VOXG4gICAgdGhpcy5jb250cmFjdEFkZHJlc3MgPSBjb250cmFjdEFkZHJlc3NcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJc1N1YlByb3RvY29sKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzU3ViUHJvdG9jb2xcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTdWJQcm90b2NvbFR5cGUoKTogUHJvbWlzZTxTdWJQcm90b2NvbFR5cGVWMD4ge1xuICAgIHJldHVybiB0aGlzLnN1YlByb3RvY29sVHlwZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbnRyYWN0QWRkcmVzcygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyYWN0QWRkcmVzc1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJQ29pbkRlbGVnYXRlU3ViUHJvdG9jb2xBZGFwdGVyPFxuICAgIFQgZXh0ZW5kcyBBaXJHYXBBbnlQcm90b2NvbCAmIEFpckdhcERlbGVnYXRlUHJvdG9jb2wgJiBTdWJQcm90b2NvbCA9IEFpckdhcEFueVByb3RvY29sICYgQWlyR2FwRGVsZWdhdGVQcm90b2NvbCAmIFN1YlByb3RvY29sXG4gID5cbiAgZXh0ZW5kcyBJQ29pblN1YlByb3RvY29sQWRhcHRlcjxUPlxuICBpbXBsZW1lbnRzIElDb2luU3ViUHJvdG9jb2wsIElDb2luRGVsZWdhdGVQcm90b2NvbFxue1xuICBwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyOiBJQ29pbkRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyPFQ+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xWMTogVCxcbiAgICBwcm90b2NvbE1ldGFkYXRhOiBQcm90b2NvbE1ldGFkYXRhLFxuICAgIGNyeXB0bzogQ3J5cHRvQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmsgfCB1bmRlZmluZWQsXG4gICAgdjFCbG9ja0V4cGxvcmVyOiBBaXJHYXBCbG9ja0V4cGxvcmVyIHwgdW5kZWZpbmVkLFxuICAgIGJsb2NrRXhwbG9yZXJNZXRhZGF0YTogQmxvY2tFeHBsb3Jlck1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIHYzU2VyaWFsaXplckNvbXBhbmlvbjogQWlyR2FwVjNTZXJpYWxpemVyQ29tcGFuaW9uLFxuICAgIHR5cGU6IFN1YlByb3RvY29sVHlwZSxcbiAgICBjb250cmFjdEFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIHByb3RvY29sVjEsXG4gICAgICBwcm90b2NvbE1ldGFkYXRhLFxuICAgICAgY3J5cHRvLFxuICAgICAgbmV0d29yayxcbiAgICAgIHYxQmxvY2tFeHBsb3JlcixcbiAgICAgIGJsb2NrRXhwbG9yZXJNZXRhZGF0YSxcbiAgICAgIHYzU2VyaWFsaXplckNvbXBhbmlvbixcbiAgICAgIHR5cGUsXG4gICAgICBjb250cmFjdEFkZHJlc3NcbiAgICApXG5cbiAgICB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyID0gbmV3IElDb2luRGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIoXG4gICAgICBwcm90b2NvbFYxLFxuICAgICAgcHJvdG9jb2xNZXRhZGF0YSxcbiAgICAgIGNyeXB0byxcbiAgICAgIG5ldHdvcmssXG4gICAgICB2MUJsb2NrRXhwbG9yZXIsXG4gICAgICBibG9ja0V4cGxvcmVyTWV0YWRhdGEsXG4gICAgICB2M1NlcmlhbGl6ZXJDb21wYW5pb25cbiAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdERlbGVnYXRlZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldERlZmF1bHREZWxlZ2F0ZWUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yUHVibGljS2V5KHB1YmxpY0tleSwgZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50RGVsZWdhdGVlc0ZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldEN1cnJlbnREZWxlZ2F0ZWVzRm9yQWRkcmVzcyhhZGRyZXNzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGVnYXRlZURldGFpbHMoYWRkcmVzczogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxEZWxlZ2F0ZWVEZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIuZ2V0RGVsZWdhdGVlRGV0YWlscyhhZGRyZXNzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzUHVibGljS2V5RGVsZWdhdGluZyhwdWJsaWNLZXk6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmlzUHVibGljS2V5RGVsZWdhdGluZyhwdWJsaWNLZXksIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNBZGRyZXNzRGVsZWdhdGluZyhhZGRyZXNzOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVByb3RvY29sQWRhcHRlci5pc0FkZHJlc3NEZWxlZ2F0aW5nKGFkZHJlc3MsIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRvckRldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZVByb3RvY29sQWRhcHRlci5nZXREZWxlZ2F0b3JEZXRhaWxzRnJvbVB1YmxpY0tleShwdWJsaWNLZXksIGRhdGEpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsZWdhdG9yRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8RGVsZWdhdG9yRGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyLmdldERlbGVnYXRvckRldGFpbHNGcm9tQWRkcmVzcyhhZGRyZXNzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGVnYXRpb25EZXRhaWxzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZywgZGVsZWdhdGVlczogc3RyaW5nW10sIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRpb25EZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIuZ2V0RGVsZWdhdGlvbkRldGFpbHNGcm9tUHVibGljS2V5KHB1YmxpY0tleSwgZGVsZWdhdGVlcywgZGF0YSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxlZ2F0aW9uRGV0YWlsc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZGVsZWdhdGVlczogc3RyaW5nW10sIGRhdGE/OiBhbnkpOiBQcm9taXNlPERlbGVnYXRpb25EZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIuZ2V0RGVsZWdhdGlvbkRldGFpbHNGcm9tQWRkcmVzcyhhZGRyZXNzLCBkZWxlZ2F0ZWVzLCBkYXRhKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHByZXBhcmVEZWxlZ2F0b3JBY3Rpb25Gcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nLCB0eXBlOiBhbnksIGRhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVQcm90b2NvbEFkYXB0ZXIucHJlcGFyZURlbGVnYXRvckFjdGlvbkZyb21QdWJsaWNLZXkocHVibGljS2V5LCB0eXBlLCBkYXRhKVxuICB9XG59XG5cbi8vIEZhY3Rvcmllc1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSUNvaW5Qcm90b2NvbEFkYXB0ZXI8VCBleHRlbmRzIEFpckdhcEFueVByb3RvY29sPihcbiAgcHJvdG9jb2xWMTogVCxcbiAgYmxvY2tFeHBsb3JlclYxOiBBaXJHYXBCbG9ja0V4cGxvcmVyIHwgdW5kZWZpbmVkLFxuICB2M1NlcmlhbGl6ZXJDb21wYW5pb246IEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbixcbiAgZXh0cmE6IHtcbiAgICB0eXBlPzogUHJvdG9jb2xDb25maWd1cmF0aW9uWyd0eXBlJ11cbiAgICBwcm90b2NvbE1ldGFkYXRhPzogUHJvdG9jb2xNZXRhZGF0YVxuICAgIGNyeXB0bz86IENyeXB0b0NvbmZpZ3VyYXRpb24gfCBudWxsXG4gICAgbmV0d29yaz86IFByb3RvY29sTmV0d29yayB8IG51bGxcbiAgICBibG9ja0V4cGxvcmVyTWV0YWRhdGE/OiBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCBudWxsXG4gIH0gPSB7fVxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxUPj4ge1xuICBjb25zdCBbcHJvdG9jb2xNZXRhZGF0YSwgY3J5cHRvLCBuZXR3b3JrLCBibG9ja0V4cGxvcmVyTWV0YWRhdGFdOiBbXG4gICAgUHJvdG9jb2xNZXRhZGF0YSxcbiAgICBDcnlwdG9Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIFByb3RvY29sTmV0d29yayB8IHVuZGVmaW5lZCxcbiAgICBCbG9ja0V4cGxvcmVyTWV0YWRhdGEgfCB1bmRlZmluZWRcbiAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBleHRyYS5wcm90b2NvbE1ldGFkYXRhID8gUHJvbWlzZS5yZXNvbHZlKGV4dHJhLnByb3RvY29sTWV0YWRhdGEpIDogcHJvdG9jb2xWMS5nZXRNZXRhZGF0YSgpLFxuICAgIGV4dHJhLmNyeXB0b1xuICAgICAgPyBQcm9taXNlLnJlc29sdmUoZXh0cmEuY3J5cHRvKVxuICAgICAgOiBleHRyYS5jcnlwdG8gPT09IG51bGwgfHwgIWlzT2ZmbGluZVByb3RvY29sKHByb3RvY29sVjEpIHx8IChleHRyYS50eXBlICE9PSAnb2ZmbGluZScgJiYgZXh0cmEudHlwZSAhPT0gJ2Z1bGwnKVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgOiBwcm90b2NvbFYxLmdldENyeXB0b0NvbmZpZ3VyYXRpb24oKSxcbiAgICBleHRyYS5uZXR3b3JrXG4gICAgICA/IFByb21pc2UucmVzb2x2ZShleHRyYS5uZXR3b3JrKVxuICAgICAgOiBleHRyYS5uZXR3b3JrID09PSBudWxsIHx8ICFpc09ubGluZVByb3RvY29sKHByb3RvY29sVjEpIHx8IChleHRyYS50eXBlICE9PSAnb25saW5lJyAmJiBleHRyYS50eXBlICE9PSAnZnVsbCcpXG4gICAgICA/IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICA6IHByb3RvY29sVjEuZ2V0TmV0d29yaygpLFxuICAgIGV4dHJhLmJsb2NrRXhwbG9yZXJNZXRhZGF0YVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUoZXh0cmEuYmxvY2tFeHBsb3Jlck1ldGFkYXRhKVxuICAgICAgOiBleHRyYS5ibG9ja0V4cGxvcmVyTWV0YWRhdGEgPT09IG51bGwgfHwgYmxvY2tFeHBsb3JlclYxID09PSB1bmRlZmluZWQgfHwgKGV4dHJhLnR5cGUgIT09ICdvbmxpbmUnICYmIGV4dHJhLnR5cGUgIT09ICdmdWxsJylcbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIDogYmxvY2tFeHBsb3JlclYxLmdldE1ldGFkYXRhKClcbiAgXSlcblxuICBpZiAoc3VwcG9ydHNWMURlbGVnYXRpb24ocHJvdG9jb2xWMSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgcmV0dXJuIG5ldyBJQ29pbkRlbGVnYXRlUHJvdG9jb2xBZGFwdGVyKFxuICAgICAgcHJvdG9jb2xWMSxcbiAgICAgIHByb3RvY29sTWV0YWRhdGEsXG4gICAgICBjcnlwdG8sXG4gICAgICBuZXR3b3JrLFxuICAgICAgYmxvY2tFeHBsb3JlclYxLFxuICAgICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICAgICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgSUNvaW5Qcm90b2NvbEFkYXB0ZXIoXG4gICAgICBwcm90b2NvbFYxLFxuICAgICAgcHJvdG9jb2xNZXRhZGF0YSxcbiAgICAgIGNyeXB0byxcbiAgICAgIG5ldHdvcmssXG4gICAgICBibG9ja0V4cGxvcmVyVjEsXG4gICAgICBibG9ja0V4cGxvcmVyTWV0YWRhdGEsXG4gICAgICB2M1NlcmlhbGl6ZXJDb21wYW5pb25cbiAgICApXG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVJQ29pblN1YlByb3RvY29sQWRhcHRlcjxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2wgJiBTdWJQcm90b2NvbD4oXG4gIHByb3RvY29sVjE6IFQsXG4gIGJsb2NrRXhwbG9yZXJWMTogQWlyR2FwQmxvY2tFeHBsb3JlciB8IHVuZGVmaW5lZCxcbiAgdjNTZXJpYWxpemVyQ29tcGFuaW9uOiBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gIGV4dHJhOiB7XG4gICAgdHlwZT86IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddXG4gICAgcHJvdG9jb2xNZXRhZGF0YT86IFByb3RvY29sTWV0YWRhdGFcbiAgICBjcnlwdG8/OiBDcnlwdG9Db25maWd1cmF0aW9uIHwgbnVsbFxuICAgIG5ldHdvcms/OiBQcm90b2NvbE5ldHdvcmsgfCBudWxsXG4gICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhPzogQmxvY2tFeHBsb3Jlck1ldGFkYXRhIHwgbnVsbFxuICAgIHN1YlR5cGU/OiBTdWJQcm90b2NvbFR5cGVcbiAgICBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmcgfCBudWxsXG4gIH0gPSB7fVxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxUPj4ge1xuICBjb25zdCBbcHJvdG9jb2xNZXRhZGF0YSwgY3J5cHRvLCBuZXR3b3JrLCBibG9ja0V4cGxvcmVyTWV0YWRhdGEsIHR5cGUsIGNvbnRyYWN0QWRkcmVzc106IFtcbiAgICBQcm90b2NvbE1ldGFkYXRhLFxuICAgIENyeXB0b0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgUHJvdG9jb2xOZXR3b3JrIHwgdW5kZWZpbmVkLFxuICAgIEJsb2NrRXhwbG9yZXJNZXRhZGF0YSB8IHVuZGVmaW5lZCxcbiAgICBTdWJQcm90b2NvbFR5cGUsXG4gICAgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZXh0cmEucHJvdG9jb2xNZXRhZGF0YSA/IFByb21pc2UucmVzb2x2ZShleHRyYS5wcm90b2NvbE1ldGFkYXRhKSA6IHByb3RvY29sVjEuZ2V0TWV0YWRhdGEoKSxcbiAgICBleHRyYS5jcnlwdG9cbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGV4dHJhLmNyeXB0bylcbiAgICAgIDogZXh0cmEuY3J5cHRvID09PSBudWxsIHx8ICFpc09mZmxpbmVQcm90b2NvbChwcm90b2NvbFYxKSB8fCAoZXh0cmE/LnR5cGUgIT09ICdvZmZsaW5lJyAmJiBleHRyYT8udHlwZSAhPT0gJ2Z1bGwnKVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgOiBwcm90b2NvbFYxLmdldENyeXB0b0NvbmZpZ3VyYXRpb24oKSxcbiAgICBleHRyYS5uZXR3b3JrXG4gICAgICA/IFByb21pc2UucmVzb2x2ZShleHRyYS5uZXR3b3JrKVxuICAgICAgOiBleHRyYS5uZXR3b3JrID09PSBudWxsIHx8ICFpc09ubGluZVByb3RvY29sKHByb3RvY29sVjEpIHx8IChleHRyYT8udHlwZSAhPT0gJ29ubGluZScgJiYgZXh0cmE/LnR5cGUgIT09ICdmdWxsJylcbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIDogcHJvdG9jb2xWMS5nZXROZXR3b3JrKCksXG4gICAgZXh0cmEuYmxvY2tFeHBsb3Jlck1ldGFkYXRhXG4gICAgICA/IFByb21pc2UucmVzb2x2ZShleHRyYS5ibG9ja0V4cGxvcmVyTWV0YWRhdGEpXG4gICAgICA6IGV4dHJhLmJsb2NrRXhwbG9yZXJNZXRhZGF0YSA9PT0gbnVsbCB8fCBibG9ja0V4cGxvcmVyVjEgPT09IHVuZGVmaW5lZCB8fCAoZXh0cmE/LnR5cGUgIT09ICdvbmxpbmUnICYmIGV4dHJhPy50eXBlICE9PSAnZnVsbCcpXG4gICAgICA/IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICA6IGJsb2NrRXhwbG9yZXJWMS5nZXRNZXRhZGF0YSgpLFxuICAgIGV4dHJhLnN1YlR5cGUgPyBQcm9taXNlLnJlc29sdmUoZXh0cmEuc3ViVHlwZSkgOiBwcm90b2NvbFYxLmdldFR5cGUoKSxcbiAgICBleHRyYS5jb250cmFjdEFkZHJlc3NcbiAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGV4dHJhLmNvbnRyYWN0QWRkcmVzcylcbiAgICAgIDogZXh0cmEuY29udHJhY3RBZGRyZXNzID09PSBudWxsIHx8ICFoYXNDb25maWd1cmFibGVDb250cmFjdChwcm90b2NvbFYxKVxuICAgICAgPyBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgOiBwcm90b2NvbFYxLmdldENvbnRyYWN0QWRkcmVzcygpXG4gIF0pXG5cbiAgaWYgKHN1cHBvcnRzVjFEZWxlZ2F0aW9uKHByb3RvY29sVjEpKSB7XG4gICAgcmV0dXJuIG5ldyBJQ29pbkRlbGVnYXRlU3ViUHJvdG9jb2xBZGFwdGVyKFxuICAgICAgcHJvdG9jb2xWMSxcbiAgICAgIHByb3RvY29sTWV0YWRhdGEsXG4gICAgICBjcnlwdG8sXG4gICAgICBuZXR3b3JrLFxuICAgICAgYmxvY2tFeHBsb3JlclYxLFxuICAgICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICAgICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uLFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRyYWN0QWRkcmVzc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IElDb2luU3ViUHJvdG9jb2xBZGFwdGVyKFxuICAgICAgcHJvdG9jb2xWMSxcbiAgICAgIHByb3RvY29sTWV0YWRhdGEsXG4gICAgICBjcnlwdG8sXG4gICAgICBuZXR3b3JrLFxuICAgICAgYmxvY2tFeHBsb3JlclYxLFxuICAgICAgYmxvY2tFeHBsb3Jlck1ldGFkYXRhLFxuICAgICAgdjNTZXJpYWxpemVyQ29tcGFuaW9uLFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRyYWN0QWRkcmVzc1xuICAgIClcbiAgfVxufVxuIl19
|