@bitgo-beta/sdk-core 8.2.1-beta.2133 → 8.2.1-beta.2135
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.
|
@@ -234,6 +234,17 @@ describe('derivableEd25519Pub', function () {
|
|
|
234
234
|
}),
|
|
235
235
|
}, message).should.be.rejectedWith(/does not verify against its public key/);
|
|
236
236
|
});
|
|
237
|
+
it('rejects a signature over mutated bytes without changing the original message', async function () {
|
|
238
|
+
const input = Uint8Array.from(message);
|
|
239
|
+
await (0, src_1.signWithExternalEd25519Signer)({
|
|
240
|
+
publicKey,
|
|
241
|
+
sign: async (m) => {
|
|
242
|
+
m[0] ^= 0xff;
|
|
243
|
+
return { signature: Buffer.from(nacl.sign.detached(m, keyPair.secretKey)).toString('hex') };
|
|
244
|
+
},
|
|
245
|
+
}, input).should.be.rejectedWith(/does not verify against its public key/);
|
|
246
|
+
Buffer.from(input).equals(message).should.equal(true);
|
|
247
|
+
});
|
|
237
248
|
it('signs and returns a verified 64-byte signature', async function () {
|
|
238
249
|
const signature = await (0, src_1.signWithExternalEd25519Signer)(validSigner, message);
|
|
239
250
|
signature.should.match(/^[0-9a-f]{128}$/);
|
|
@@ -254,4 +265,4 @@ describe('derivableEd25519Pub', function () {
|
|
|
254
265
|
});
|
|
255
266
|
});
|
|
256
267
|
});
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyx5Q0F5QnlCO0FBRXpCLHdEQUF3RDtBQUN4RCxtR0FBbUc7QUFDbkcsOEVBQThFO0FBQzlFLDZFQUErRDtBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQXlCLEVBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsTUFBTSxhQUFhLEdBQUcsMERBQTBELENBQUM7QUFDakYsTUFBTSxXQUFXLEdBQUcsMERBQTBELENBQUM7QUFFL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsSUFB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QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDekYsd0NBQXdDLENBQ3pDLENBQUM7WUFDRiwwRkFBMEY7WUFDMUYsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQge1xuICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTLFxuICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILFxuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBiaWdJbnRGcm9tQnVmZmVyTEUsXG4gIGJpZ0ludFRvQnVmZmVyTEUsXG4gIGNsYW1wLFxuICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBhc3NlcnRWYWxpZEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbiAgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIsXG4gIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIsXG4gIGlzRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIHNpZ25FZDI1NTE5RXh0ZW5kZWQsXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTksXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgsXG4gIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgsXG4gIHR5cGUgRXh0ZXJuYWxFZDI1NTE5U2lnbmVyLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vLyBDcm9zcy1yZXBvIGZpeHR1cmU6IGJ5dGUtaWRlbnRpY2FsIHRvIHdhbGxldC1wbGF0Zm9ybVxuLy8gdGVzdC91bml0L2Jhc2Uvc2FmZXMvZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uLiBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzXG4vLyBmb3JtYXQgd2lsbCBvdGhlcndpc2UgZHJpZnQsIGFuZCB0aGUgZmFpbHVyZSBtb2RlIGlzIHVucmVjb3ZlcmFibGUgd2FsbGV0cy5cbmltcG9ydCAqIGFzIGZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24nO1xuXG5jb25zdCBQVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbmNvbnN0IENIQUlOX0NPREUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuY29uc3QgUk9PVF9QVUIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFBVQkxJQ19LRVksIENIQUlOX0NPREUpO1xuY29uc3QgUk9PVF9LRVlDSEFJTiA9IEJ1ZmZlci5jb25jYXQoW1BVQkxJQ19LRVksIENIQUlOX0NPREVdKS50b1N0cmluZygnaGV4Jyk7XG5jb25zdCBTVFJLRVlfUFVCTElDID0gJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJztcbmNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdiYXNlMzIgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2VuY29kZXMgMzItYnl0ZSBwdWJsaWMga2V5IHBsdXMgMzItYnl0ZSBjaGFpbiBjb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoMTAzKTtcbiAgICAgIFJPT1RfUFVCLnNob3VsZC5tYXRjaCgvXltBLVoyLTddezEwM30kLyk7XG4gICAgICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFJPT1RfUFVCKS5wdWIuZXF1YWxzKFBVQkxJQ19LRVkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLmNoYWluQ29kZS5lcXVhbHMoQ0hBSU5fQ09ERSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgdGhlIGNvbnN0YW50cyBwaW5uZWQgaW4gdGhlIHNoYXJlZCBmaXh0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoZml4dHVyZS5yb290UHViQmFzZTMyTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMuc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlQnl0ZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dlbmVyYXRlcyByYXcgY2hhaW4gY29kZSBmb3Igcm9vdCBjb21wb3NpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZml4dHVyZSB2ZWN0b3JzJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGByb3VuZC10cmlwcyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpXG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvc2l0ZS5zaG91bGQuZXF1YWwodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpO1xuICAgICAgICBkZWNvZGVkLnB1Yi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5wdWIpO1xuICAgICAgICBkZWNvZGVkLmNoYWluQ29kZS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGFpbkNvZGUpO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyYXcgcHVibGljIHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBhIGRldGVybWluaXN0aWMgcHVibGljIGtleSBhbmQgZGlzY2FyZHMgdGhlIGNoaWxkIGNoYWluIGNvZGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlZGRzYSA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSk7XG4gICAgICBjb25zdCBkZXJpdmVkID0gZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChST09UX0tFWUNIQUlOLCAnbS83Jyk7XG4gICAgICBkZXJpdmVkLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoMCwgNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIChhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCA3KSkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChkZXJpdmVkLnNsaWNlKDAsIDY0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZ29sZGVuIHZlY3RvcnMgYmVsb3cgcGluIHRoZSB1bmhhcmRlbmVkIGRlcml2YXRpb24gb3V0cHV0IHNoYXJlZCBjcm9zcy1yZXBvIHdpdGhcbiAgICAvLyB3YWxsZXQtcGxhdGZvcm06IGEgZGl2ZXJnZW50IGltcGxlbWVudGF0aW9uIGRlcml2ZXMgY28tc2lnbmVyIGtleXMgbm9ib2R5IGVsc2UgY2FuXG4gICAgLy8gcmVwcm9kdWNlLCBwZXJtYW5lbnRseSBicmlja2luZyB0aGUgd2FsbGV0cyBtaW50ZWQgd2l0aCBpdC5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLnNvZnREZXJpdmF0aW9uKSB7XG4gICAgICBpdChgZGVyaXZlcyB0aGUgcGlubmVkIGdvbGRlbiBjaGlsZDogJHt2ZWN0b3IubmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoZSBwdWIvY2hhaW5Db2RlIGZpZWxkcyBtdXN0IGVuY29kZSB0byB0aGUgY29tcG9zaXRlIGFjdHVhbGx5IGRlcml2ZWQgZnJvbS5cbiAgICAgICAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksIEJ1ZmZlci5mcm9tKHZlY3Rvci5jaGFpbkNvZGUsICdoZXgnKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHZlY3Rvci5jb21wb3NpdGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KHZlY3Rvci5jb21wb3NpdGUsIHZlY3Rvci5pbmRleCk7XG4gICAgICAgIGNoaWxkLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLmNoaWxkUHViKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdyZWplY3RzIGEgaGFyZGVuZWQgb3Igb3V0LW9mLXJhbmdlIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgLTEpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgMHg4MDAwMDAwMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAxLjUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgcm9vdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlWzFdLmNvbXBvc2l0ZSwgMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViL1xuICAgICAgKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoU1RSS0VZX1BVQkxJQywgMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ211bHRpLXNlZ21lbnQgc29mdCBkZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCk7XG4gICAgY29uc3Qgcm9vdFB1YiA9IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpLnB1YmxpY0tleSk7XG4gICAgY29uc3Qgcm9vdENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihyb290UHViLCByb290Q2hhaW5Db2RlKTtcbiAgICBjb25zdCBjaGFpbkNvZGVTdHIgPSBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlKHJvb3RDaGFpbkNvZGUpO1xuXG4gICAgaXQoJ3ByaXZhdGUgZGVyaXZlIHB1YmxpYyBoYWxmIG1hdGNoZXMgcHVibGljIGRlcml2ZSBhdCBtLzAgYW5kIG0vNDQvMjgzLzIvMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBbJ20vMCcsICdtLzQ0LzI4My8yLzAnXSkge1xuICAgICAgICBjb25zdCBwdWIgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgcGF0aCk7XG4gICAgICAgIGNvbnN0IHBydiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoeyBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCwgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsIHBhdGggfSk7XG4gICAgICAgIHBydi5wdWIuZXF1YWxzKHB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICAvLyBSZWNvbXB1dGUgdGhlIHB1YmxpYyBwb2ludCBkaXJlY3RseSBmcm9tIGtMIHRvIHByb3ZlIHRoZSBwcml2YXRlIHNjYWxhciBtYXBzIHRvIHB1Yi5cbiAgICAgICAgYmlnSW50VG9CdWZmZXJMRShFZGRzYS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KGJpZ0ludEZyb21CdWZmZXJMRShwcnYua0wpKSwgMzIpXG4gICAgICAgICAgLmVxdWFscyhwcnYucHViKVxuICAgICAgICAgIC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBoYXJkZW5lZCBhbmQgb3V0LW9mLXJhbmdlIHBhdGhzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsIFwibS8wJ1wiKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHNvZnQgZGVyaXZhdGlvbiBwYXRoLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoKHtcbiAgICAgICAgc2VlZFN0cktleTogU1RSS0VZX1NFRUQsXG4gICAgICAgIGNoYWluQ29kZTogY2hhaW5Db2RlU3RyLFxuICAgICAgICBwYXRoOiBcIm0vMCdcIixcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgc29mdCBkZXJpdmF0aW9uIHBhdGgvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCAnbS8yMTQ3NDgzNjQ4Jykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvb3V0IG9mIHJhbmdlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTdGVsbGFyIHVzZXIta2V5IGNvZGVjcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgna2VlcHMgU3RlbGxhciBlbmNvZGluZyBzZXBhcmF0ZSBmcm9tIHRoZSBuZXV0cmFsIHJvb3QgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMpKS5zaG91bGQuZXF1YWwoU1RSS0VZX1BVQkxJQyk7XG4gICAgICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCkubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBwdWJsaWMga2V5IHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzZWNyZXQgc2VlZCB3aGVyZSBhIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnU0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgKCgpID0+IGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL1N0cktleSBwdWJsaWMga2V5L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWJhc2UzMiBjaGFyYWN0ZXIsIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBsb3dlcmNhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDLnRvTG93ZXJDYXNlKCkpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHRlbmRlZC1rZXkgc2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZXh0ZW5kZWQta2V5IHNpZ25hdHVyZScpO1xuICAgIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuICAgIGNvbnN0IGNoYWluQ29kZVN0ciA9IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUocm9vdENoYWluQ29kZSk7XG5cbiAgICBpdCgnbWF0Y2hlcyB0aGUgc2VlZC1iYXNlZCBzaWduZXIgZm9yIGEgc2VlZC1iYWNrZWQga2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaCA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKTtcbiAgICAgIGNvbnN0IGtMID0gYmlnSW50VG9CdWZmZXJMRShjbGFtcChiaWdJbnRGcm9tQnVmZmVyTEUoaC5zdWJhcnJheSgwLCAzMikpKSwgMzIpO1xuICAgICAgY29uc3Qga1IgPSBoLnN1YmFycmF5KDMyKTtcbiAgICAgIGNvbnN0IHNpZyA9IGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwga0wsIGtSKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG1lc3NhZ2UsIG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpLnNlY3JldEtleSkpO1xuICAgICAgc2lnLmVxdWFscyhleHBlY3RlZCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25zIGEgc29mdC1kZXJpdmVkIGtleSB3aXRoIG5vIHNlZWQgYW5kIHZlcmlmaWVzIGFnYWluc3QgaXRzIHB1YicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBydiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoe1xuICAgICAgICBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCxcbiAgICAgICAgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsXG4gICAgICAgIHBhdGg6ICdtLzAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWcgPSBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIHBydi5rTCwgcHJ2LmtSKTtcbiAgICAgIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkobWVzc2FnZSwgc2lnLCBwcnYucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAvLyBUaGUgc29mdC1kZXJpdmVkIHNjYWxhciBoYXMgbm8gc2VlZDogdHJlYXRpbmcga0wgYXMgYSBzZWVkIHlpZWxkcyBhIGRpZmZlcmVudCBwdWIuXG4gICAgICBCdWZmZXIuZnJvbShuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChwcnYua0wpLnB1YmxpY0tleSkuZXF1YWxzKHBydi5wdWIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBrTC9rUiB0aGF0IGFyZSBub3QgMzIgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIEJ1ZmZlci5hbGxvYygzMSksIEJ1ZmZlci5hbGxvYygzMikpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2tMIGxlbmd0aC8pO1xuICAgICAgYXdhaXQgc2lnbkVkMjU1MTlFeHRlbmRlZChtZXNzYWdlLCBCdWZmZXIuYWxsb2MoMzIpLCBCdWZmZXIuYWxsb2MoMzMpKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9rUiBsZW5ndGgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4dGVybmFsRWQyNTUxOVNpZ25lcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2V4dGVybmFsLXNpZ25lciBtZXNzYWdlJyk7XG4gICAgY29uc3Qga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKEJ1ZmZlci5hbGxvYygzMiwgMHg0MikpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKGtleVBhaXIucHVibGljS2V5KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgb3RoZXJLZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoQnVmZmVyLmFsbG9jKDMyLCAweDc3KSk7XG4gICAgY29uc3QgdmFsaWRTaWduZXI6IEV4dGVybmFsRWQyNTUxOVNpZ25lciA9IHtcbiAgICAgIHB1YmxpY0tleSxcbiAgICAgIHNpZ246IGFzeW5jIChtOiBVaW50OEFycmF5KSA9PiAoe1xuICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5kZXRhY2hlZChtLCBrZXlQYWlyLnNlY3JldEtleSkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHtcbiAgICAgICAgICBwdWJsaWNLZXk6ICdub3QtaGV4JyxcbiAgICAgICAgICBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhJy5yZXBlYXQoMTI4KSB9KSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvZXhwZWN0ZWQgMzIgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcHVibGljIGtleSB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgYWZ0ZXIgNjQgaGV4IGNoYXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnVmZmVyLmZyb20ocHViLCAnaGV4JykgdHJ1bmNhdGVzIGF0IHRoZSBmaXJzdCBiYWQgcGFpciwgc28gYSBsZW5ndGgtb25seSBjaGVjayB3b3VsZFxuICAgICAgLy8gYWNjZXB0IHRoaXM7IHRoZSBzdHJpY3QgcmVnZXggbXVzdCBub3QuXG4gICAgICAoKCkgPT5cbiAgICAgICAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoe1xuICAgICAgICAgIHB1YmxpY0tleTogJ2YxJy5yZXBlYXQoMzIpICsgJ3p6JyxcbiAgICAgICAgICBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhJy5yZXBlYXQoMTI4KSB9KSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvZXhwZWN0ZWQgMzIgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2lnbmVyIHdpdGhvdXQgYSBzaWduIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHtcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgc2lnbjogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRXh0ZXJuYWxFZDI1NTE5U2lnbmVyWydzaWduJ10sXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coL3NpZ24gbXVzdCBiZSBhIGZ1bmN0aW9uLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbi02NC1ieXRlIHNpZ25hdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICAgICAgICB7IHB1YmxpY0tleSwgc2lnbjogYXN5bmMgKCkgPT4gKHsgc2lnbmF0dXJlOiAnYWInIH0pIH0sXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhwZWN0ZWQgNjQgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHdoZW4gc2lnbiByZXNvbHZlcyB0byBhIG5vbi1vYmplY3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihcbiAgICAgICAgeyBwdWJsaWNLZXksIHNpZ246IGFzeW5jICgpID0+IG51bGwgYXMgdW5rbm93biBhcyB7IHNpZ25hdHVyZTogc3RyaW5nIH0gfSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaWduIG11c3QgcmVzb2x2ZSB0byBcXHsgc2lnbmF0dXJlOiBzdHJpbmcgXFx9Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHdlbGwtZm9ybWVkIHNpZ25hdHVyZSBmcm9tIHRoZSB3cm9uZyBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihcbiAgICAgICAge1xuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICBzaWduOiBhc3luYyAobTogVWludDhBcnJheSkgPT4gKHtcbiAgICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG0sIG90aGVyS2V5UGFpci5zZWNyZXRLZXkpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZG9lcyBub3QgdmVyaWZ5IGFnYWluc3QgaXRzIHB1YmxpYyBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWducyBhbmQgcmV0dXJucyBhIHZlcmlmaWVkIDY0LWJ5dGUgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIodmFsaWRTaWduZXIsIG1lc3NhZ2UpO1xuICAgICAgc2lnbmF0dXJlLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezEyOH0kLyk7XG4gICAgICBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG1lc3NhZ2UsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpLCBrZXlQYWlyLnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzaWduZXIgdGhhdCBtdXRhdGVzIGl0cyBtZXNzYWdlIGFyZ3VtZW50LCBsZWF2aW5nIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGludGFjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTWVzc2FnZSA9IFVpbnQ4QXJyYXkuZnJvbShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IG11dGF0aW5nU2lnbmVyOiBFeHRlcm5hbEVkMjU1MTlTaWduZXIgPSB7XG4gICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgc2lnbjogYXN5bmMgKG06IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgICBtLmZpbGwoMHgwMCk7XG4gICAgICAgICAgcmV0dXJuIHsgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShuYWNsLnNpZ24uZGV0YWNoZWQobSwga2V5UGFpci5zZWNyZXRLZXkpKS50b1N0cmluZygnaGV4JykgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihtdXRhdGluZ1NpZ25lciwgb3JpZ2luYWxNZXNzYWdlKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvZG9lcyBub3QgdmVyaWZ5IGFnYWluc3QgaXRzIHB1YmxpYyBrZXkvXG4gICAgICApO1xuICAgICAgLy8gVGhlIGF1dGhvcml0YXRpdmUgbWVzc2FnZSBtdXN0IGJlIHVuY2hhbmdlZDogdGhlIHNpZ25lciBvbmx5IGV2ZXIgc2F3IGEgZGVmZW5zaXZlIGNvcHkuXG4gICAgICBCdWZmZXIuZnJvbShvcmlnaW5hbE1lc3NhZ2UpLmVxdWFscyhCdWZmZXIuZnJvbShtZXNzYWdlKSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyx5Q0F5QnlCO0FBRXpCLHdEQUF3RDtBQUN4RCxtR0FBbUc7QUFDbkcsOEVBQThFO0FBQzlFLDZFQUErRDtBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQXlCLEVBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsTUFBTSxhQUFhLEdBQUcsMERBQTBELENBQUM7QUFDakYsTUFBTSxXQUFXLEdBQUcsMERBQTBELENBQUM7QUFFL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsSUFB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QUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RkFBeUYsRUFBRSxLQUFLO1lBQ2pHLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsTUFBTSxjQUFjLEdBQTBCO2dCQUM1QyxTQUFTO2dCQUNULElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBYSxFQUFFLEVBQUU7b0JBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUYsQ0FBQzthQUNGLENBQUM7WUFDRixNQUFNLElBQUEsbUNBQTZCLEVBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUN6Rix3Q0FBd0MsQ0FDekMsQ0FBQztZQUNGLDBGQUEwRjtZQUMxRixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCB7XG4gIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMsXG4gIERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEgsXG4gIEVkMjU1MTlCSVAzMixcbiAgRWRkc2EsXG4gIGJpZ0ludEZyb21CdWZmZXJMRSxcbiAgYmlnSW50VG9CdWZmZXJMRSxcbiAgY2xhbXAsXG4gIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkLFxuICBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBlbmNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBnZW5lcmF0ZUVkMjU1MTlDaGFpbkNvZGUsXG4gIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyLFxuICBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbiAgaXNDaGVja3N1bVZhbGlkU3RyS2V5RWQyNTUxOVB1YixcbiAgaXNEZXJpdmFibGVFZDI1NTE5UHViLFxuICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgc2lnbkVkMjU1MTlFeHRlbmRlZCxcbiAgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOSxcbiAgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aCxcbiAgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCxcbiAgdHlwZSBFeHRlcm5hbEVkMjU1MTlTaWduZXIsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbi8vIENyb3NzLXJlcG8gZml4dHVyZTogYnl0ZS1pZGVudGljYWwgdG8gd2FsbGV0LXBsYXRmb3JtXG4vLyB0ZXN0L3VuaXQvYmFzZS9zYWZlcy9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24uIEZvdXIgaW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXNcbi8vIGZvcm1hdCB3aWxsIG90aGVyd2lzZSBkcmlmdCwgYW5kIHRoZSBmYWlsdXJlIG1vZGUgaXMgdW5yZWNvdmVyYWJsZSB3YWxsZXRzLlxuaW1wb3J0ICogYXMgZml4dHVyZSBmcm9tICcuL2ZpeHR1cmVzL2Rlcml2YWJsZUVkMjU1MTlQdWIuanNvbic7XG5cbmNvbnN0IFBVQkxJQ19LRVkgPSBCdWZmZXIuYWxsb2MoMzIpO1xuY29uc3QgQ0hBSU5fQ09ERSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG5jb25zdCBST09UX1BVQiA9IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUFVCTElDX0tFWSwgQ0hBSU5fQ09ERSk7XG5jb25zdCBST09UX0tFWUNIQUlOID0gQnVmZmVyLmNvbmNhdChbUFVCTElDX0tFWSwgQ0hBSU5fQ09ERV0pLnRvU3RyaW5nKCdoZXgnKTtcbmNvbnN0IFNUUktFWV9QVUJMSUMgPSAnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnO1xuY29uc3QgU1RSS0VZX1NFRUQgPSAnU0FBQUNBUURBUUNRTUJZSUJFRkFXREFOQllIUkFFSVNDTUtCS0ZRWERBTVJVR1k0RFVQQjZOS0knO1xuXG5kZXNjcmliZSgnZGVyaXZhYmxlRWQyNTUxOVB1YicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2Jhc2UzMiByb290IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZW5jb2RlcyAzMi1ieXRlIHB1YmxpYyBrZXkgcGx1cyAzMi1ieXRlIGNoYWluIGNvZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTLnNob3VsZC5lcXVhbCgzMik7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILnNob3VsZC5lcXVhbCgxMDMpO1xuICAgICAgUk9PVF9QVUIuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117MTAzfSQvKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLnB1Yi5lcXVhbHMoUFVCTElDX0tFWSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihST09UX1BVQikuY2hhaW5Db2RlLmVxdWFscyhDSEFJTl9DT0RFKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyB0aGUgY29uc3RhbnRzIHBpbm5lZCBpbiB0aGUgc2hhcmVkIGZpeHR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILnNob3VsZC5lcXVhbChmaXh0dXJlLnJvb3RQdWJCYXNlMzJMZW5ndGgpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoZml4dHVyZS5jaGFpbkNvZGVCeXRlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2VuZXJhdGVzIHJhdyBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlKCkubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmaXh0dXJlIHZlY3RvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS52YWxpZCkge1xuICAgICAgaXQoYHJvdW5kLXRyaXBzICR7dmVjdG9yLm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb21wb3NpdGUgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFxuICAgICAgICAgIEJ1ZmZlci5mcm9tKHZlY3Rvci5wdWIsICdoZXgnKSxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IuY2hhaW5Db2RlLCAnaGV4JylcbiAgICAgICAgKTtcbiAgICAgICAgY29tcG9zaXRlLnNob3VsZC5lcXVhbCh2ZWN0b3IuY29tcG9zaXRlKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGRlY29kZWQucHViLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLnB1Yik7XG4gICAgICAgIGRlY29kZWQuY2hhaW5Db2RlLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLmNoYWluQ29kZSk7XG4gICAgICAgIGlzRGVyaXZhYmxlRWQyNTUxOVB1Yih2ZWN0b3IuY29tcG9zaXRlKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLmludmFsaWRDb21wb3NpdGUpIHtcbiAgICAgIGl0KGByZWplY3RzICR7dmVjdG9yLm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgICAgKCgpID0+IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkpLnNob3VsZC50aHJvdygvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JhdyBwdWJsaWMgc29mdCBkZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdkZXJpdmVzIGEgZGV0ZXJtaW5pc3RpYyBwdWJsaWMga2V5IGFuZCBkaXNjYXJkcyB0aGUgY2hpbGQgY2hhaW4gY29kZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVkZHNhID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZShhd2FpdCBFZDI1NTE5QklQMzIuaW5pdGlhbGl6ZSgpKTtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSBlZGRzYS5kZXJpdmVVbmhhcmRlbmVkKFJPT1RfS0VZQ0hBSU4sICdtLzcnKTtcbiAgICAgIGRlcml2ZWQubGVuZ3RoLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgICAgZGVyaXZlZC5zbGljZSgwLCA2NCkuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17NjR9JC8pO1xuICAgICAgZGVyaXZlZC5zbGljZSg2NCkuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17NjR9JC8pO1xuICAgICAgKGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDcpKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKGRlcml2ZWQuc2xpY2UoMCwgNjQpKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBnb2xkZW4gdmVjdG9ycyBiZWxvdyBwaW4gdGhlIHVuaGFyZGVuZWQgZGVyaXZhdGlvbiBvdXRwdXQgc2hhcmVkIGNyb3NzLXJlcG8gd2l0aFxuICAgIC8vIHdhbGxldC1wbGF0Zm9ybTogYSBkaXZlcmdlbnQgaW1wbGVtZW50YXRpb24gZGVyaXZlcyBjby1zaWduZXIga2V5cyBub2JvZHkgZWxzZSBjYW5cbiAgICAvLyByZXByb2R1Y2UsIHBlcm1hbmVudGx5IGJyaWNraW5nIHRoZSB3YWxsZXRzIG1pbnRlZCB3aXRoIGl0LlxuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUuc29mdERlcml2YXRpb24pIHtcbiAgICAgIGl0KGBkZXJpdmVzIHRoZSBwaW5uZWQgZ29sZGVuIGNoaWxkOiAke3ZlY3Rvci5uYW1lfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhlIHB1Yi9jaGFpbkNvZGUgZmllbGRzIG11c3QgZW5jb2RlIHRvIHRoZSBjb21wb3NpdGUgYWN0dWFsbHkgZGVyaXZlZCBmcm9tLlxuICAgICAgICBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKEJ1ZmZlci5mcm9tKHZlY3Rvci5wdWIsICdoZXgnKSwgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgdmVjdG9yLmNvbXBvc2l0ZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjaGlsZCA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkodmVjdG9yLmNvbXBvc2l0ZSwgdmVjdG9yLmluZGV4KTtcbiAgICAgICAgY2hpbGQudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh2ZWN0b3IuY2hpbGRQdWIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlamVjdHMgYSBoYXJkZW5lZCBvciBvdXQtb2YtcmFuZ2UgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAtMSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAweDgwMDAwMDAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDEuNSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShmaXh0dXJlLmludmFsaWRDb21wb3NpdGVbMV0uY29tcG9zaXRlLCAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvXG4gICAgICApO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShTVFJLRVlfUFVCTElDLCAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbXVsdGktc2VnbWVudCBzb2Z0IGRlcml2YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9IGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKFNUUktFWV9TRUVEKTtcbiAgICBjb25zdCByb290UHViID0gQnVmZmVyLmZyb20obmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoc2VlZCkucHVibGljS2V5KTtcbiAgICBjb25zdCByb290Q2hhaW5Db2RlID0gQnVmZmVyLmFsbG9jKDMyLCAweGFiKTtcbiAgICBjb25zdCBjb21wb3NpdGUgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHJvb3RQdWIsIHJvb3RDaGFpbkNvZGUpO1xuICAgIGNvbnN0IGNoYWluQ29kZVN0ciA9IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUocm9vdENoYWluQ29kZSk7XG5cbiAgICBpdCgncHJpdmF0ZSBkZXJpdmUgcHVibGljIGhhbGYgbWF0Y2hlcyBwdWJsaWMgZGVyaXZlIGF0IG0vMCBhbmQgbS80NC8yODMvMi8wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIFsnbS8wJywgJ20vNDQvMjgzLzIvMCddKSB7XG4gICAgICAgIGNvbnN0IHB1YiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCBwYXRoKTtcbiAgICAgICAgY29uc3QgcHJ2ID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7IHNlZWRTdHJLZXk6IFNUUktFWV9TRUVELCBjaGFpbkNvZGU6IGNoYWluQ29kZVN0ciwgcGF0aCB9KTtcbiAgICAgICAgcHJ2LnB1Yi5lcXVhbHMocHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIC8vIFJlY29tcHV0ZSB0aGUgcHVibGljIHBvaW50IGRpcmVjdGx5IGZyb20ga0wgdG8gcHJvdmUgdGhlIHByaXZhdGUgc2NhbGFyIG1hcHMgdG8gcHViLlxuICAgICAgICBiaWdJbnRUb0J1ZmZlckxFKEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoYmlnSW50RnJvbUJ1ZmZlckxFKHBydi5rTCkpLCAzMilcbiAgICAgICAgICAuZXF1YWxzKHBydi5wdWIpXG4gICAgICAgICAgLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGhhcmRlbmVkIGFuZCBvdXQtb2YtcmFuZ2UgcGF0aHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgXCJtLzAnXCIpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgc29mdCBkZXJpdmF0aW9uIHBhdGgvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoe1xuICAgICAgICBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCxcbiAgICAgICAgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsXG4gICAgICAgIHBhdGg6IFwibS8wJ1wiLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBzb2Z0IGRlcml2YXRpb24gcGF0aC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsICdtLzIxNDc0ODM2NDgnKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9vdXQgb2YgcmFuZ2UvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1N0ZWxsYXIgdXNlci1rZXkgY29kZWNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdrZWVwcyBTdGVsbGFyIGVuY29kaW5nIHNlcGFyYXRlIGZyb20gdGhlIG5ldXRyYWwgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBlbmNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQykpLnNob3VsZC5lcXVhbChTVFJLRVlfUFVCTElDKTtcbiAgICAgIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKFNUUktFWV9TRUVEKS5sZW5ndGguc2hvdWxkLmVxdWFsKDMyKTtcbiAgICAgIGlzRGVyaXZhYmxlRWQyNTUxOVB1YihTVFJLRVlfUFVCTElDKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNDaGVja3N1bVZhbGlkU3RyS2V5RWQyNTUxOVB1YihTVFJLRVlfUFVCTElDKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHB1YmxpYyBrZXkgd2l0aCBhIGNvcnJ1cHRlZCBjaGVja3N1bScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZQScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNlY3JldCBzZWVkIHdoZXJlIGEgcHVibGljIGtleSBpcyByZXF1aXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdTQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCcpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAoKCkgPT4gZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSgnU0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICAvU3RyS2V5IHB1YmxpYyBrZXkvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBub24tYmFzZTMyIGNoYXJhY3RlciwgdGhlIGVtcHR5IHN0cmluZywgYW5kIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZMScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMudG9Mb3dlckNhc2UoKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V4dGVuZGVkLWtleSBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKCdleHRlbmRlZC1rZXkgc2lnbmF0dXJlJyk7XG4gICAgY29uc3Qgcm9vdENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgY29uc3QgY2hhaW5Db2RlU3RyID0gZW5jb2RlRWQyNTUxOUNoYWluQ29kZShyb290Q2hhaW5Db2RlKTtcblxuICAgIGl0KCdtYXRjaGVzIHRoZSBzZWVkLWJhc2VkIHNpZ25lciBmb3IgYSBzZWVkLWJhY2tlZCBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBoID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlZWQpLmRpZ2VzdCgpO1xuICAgICAgY29uc3Qga0wgPSBiaWdJbnRUb0J1ZmZlckxFKGNsYW1wKGJpZ0ludEZyb21CdWZmZXJMRShoLnN1YmFycmF5KDAsIDMyKSkpLCAzMik7XG4gICAgICBjb25zdCBrUiA9IGguc3ViYXJyYXkoMzIpO1xuICAgICAgY29uc3Qgc2lnID0gYXdhaXQgc2lnbkVkMjU1MTlFeHRlbmRlZChtZXNzYWdlLCBrTCwga1IpO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBCdWZmZXIuZnJvbShuYWNsLnNpZ24uZGV0YWNoZWQobWVzc2FnZSwgbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoc2VlZCkuc2VjcmV0S2V5KSk7XG4gICAgICBzaWcuZXF1YWxzKGV4cGVjdGVkKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnbnMgYSBzb2Z0LWRlcml2ZWQga2V5IHdpdGggbm8gc2VlZCBhbmQgdmVyaWZpZXMgYWdhaW5zdCBpdHMgcHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHJ2ID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7XG4gICAgICAgIHNlZWRTdHJLZXk6IFNUUktFWV9TRUVELFxuICAgICAgICBjaGFpbkNvZGU6IGNoYWluQ29kZVN0cixcbiAgICAgICAgcGF0aDogJ20vMCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpZyA9IGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwgcHJ2LmtMLCBwcnYua1IpO1xuICAgICAgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeShtZXNzYWdlLCBzaWcsIHBydi5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIC8vIFRoZSBzb2Z0LWRlcml2ZWQgc2NhbGFyIGhhcyBubyBzZWVkOiB0cmVhdGluZyBrTCBhcyBhIHNlZWQgeWllbGRzIGEgZGlmZmVyZW50IHB1Yi5cbiAgICAgIEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHBydi5rTCkucHVibGljS2V5KS5lcXVhbHMocHJ2LnB1Yikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGtML2tSIHRoYXQgYXJlIG5vdCAzMiBieXRlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwgQnVmZmVyLmFsbG9jKDMxKSwgQnVmZmVyLmFsbG9jKDMyKSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgva0wgbGVuZ3RoLyk7XG4gICAgICBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIEJ1ZmZlci5hbGxvYygzMiksIEJ1ZmZlci5hbGxvYygzMykpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2tSIGxlbmd0aC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXh0ZXJuYWxFZDI1NTE5U2lnbmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZXh0ZXJuYWwtc2lnbmVyIG1lc3NhZ2UnKTtcbiAgICBjb25zdCBrZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoQnVmZmVyLmFsbG9jKDMyLCAweDQyKSk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oa2V5UGFpci5wdWJsaWNLZXkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBvdGhlcktleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChCdWZmZXIuYWxsb2MoMzIsIDB4NzcpKTtcbiAgICBjb25zdCB2YWxpZFNpZ25lcjogRXh0ZXJuYWxFZDI1NTE5U2lnbmVyID0ge1xuICAgICAgcHVibGljS2V5LFxuICAgICAgc2lnbjogYXN5bmMgKG06IFVpbnQ4QXJyYXkpID0+ICh7XG4gICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG0sIGtleVBhaXIuc2VjcmV0S2V5KSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGl0KCdyZWplY3RzIGEgbWFsZm9ybWVkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT5cbiAgICAgICAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoe1xuICAgICAgICAgIHB1YmxpY0tleTogJ25vdC1oZXgnLFxuICAgICAgICAgIHNpZ246IGFzeW5jICgpID0+ICh7IHNpZ25hdHVyZTogJ2EnLnJlcGVhdCgxMjgpIH0pLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KC9leHBlY3RlZCAzMiBieXRlcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBwdWJsaWMga2V5IHdpdGggdHJhaWxpbmcgZ2FyYmFnZSBhZnRlciA2NCBoZXggY2hhcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCdWZmZXIuZnJvbShwdWIsICdoZXgnKSB0cnVuY2F0ZXMgYXQgdGhlIGZpcnN0IGJhZCBwYWlyLCBzbyBhIGxlbmd0aC1vbmx5IGNoZWNrIHdvdWxkXG4gICAgICAvLyBhY2NlcHQgdGhpczsgdGhlIHN0cmljdCByZWdleCBtdXN0IG5vdC5cbiAgICAgICgoKSA9PlxuICAgICAgICBhc3NlcnRWYWxpZEV4dGVybmFsRWQyNTUxOVNpZ25lcih7XG4gICAgICAgICAgcHVibGljS2V5OiAnZjEnLnJlcGVhdCgzMikgKyAnenonLFxuICAgICAgICAgIHNpZ246IGFzeW5jICgpID0+ICh7IHNpZ25hdHVyZTogJ2EnLnJlcGVhdCgxMjgpIH0pLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KC9leHBlY3RlZCAzMiBieXRlcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzaWduZXIgd2l0aG91dCBhIHNpZ24gZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT5cbiAgICAgICAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoe1xuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICBzaWduOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBFeHRlcm5hbEVkMjU1MTlTaWduZXJbJ3NpZ24nXSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvc2lnbiBtdXN0IGJlIGEgZnVuY3Rpb24vKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLTY0LWJ5dGUgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIoXG4gICAgICAgIHsgcHVibGljS2V5LCBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhYicgfSkgfSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9leHBlY3RlZCA2NCBieXRlcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgd2hlbiBzaWduIHJlc29sdmVzIHRvIGEgbm9uLW9iamVjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICAgICAgICB7IHB1YmxpY0tleSwgc2lnbjogYXN5bmMgKCkgPT4gbnVsbCBhcyB1bmtub3duIGFzIHsgc2lnbmF0dXJlOiBzdHJpbmcgfSB9LFxuICAgICAgICBtZXNzYWdlXG4gICAgICApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NpZ24gbXVzdCByZXNvbHZlIHRvIFxceyBzaWduYXR1cmU6IHN0cmluZyBcXH0vKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgd2VsbC1mb3JtZWQgc2lnbmF0dXJlIGZyb20gdGhlIHdyb25nIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICAgICAgICB7XG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHNpZ246IGFzeW5jIChtOiBVaW50OEFycmF5KSA9PiAoe1xuICAgICAgICAgICAgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShuYWNsLnNpZ24uZGV0YWNoZWQobSwgb3RoZXJLZXlQYWlyLnNlY3JldEtleSkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kb2VzIG5vdCB2ZXJpZnkgYWdhaW5zdCBpdHMgcHVibGljIGtleS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzaWduYXR1cmUgb3ZlciBtdXRhdGVkIGJ5dGVzIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9yaWdpbmFsIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IFVpbnQ4QXJyYXkuZnJvbShtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICAgICAgICB7XG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHNpZ246IGFzeW5jIChtOiBVaW50OEFycmF5KSA9PiB7XG4gICAgICAgICAgICBtWzBdIF49IDB4ZmY7XG4gICAgICAgICAgICByZXR1cm4geyBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5kZXRhY2hlZChtLCBrZXlQYWlyLnNlY3JldEtleSkpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0XG4gICAgICApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2RvZXMgbm90IHZlcmlmeSBhZ2FpbnN0IGl0cyBwdWJsaWMga2V5Lyk7XG4gICAgICBCdWZmZXIuZnJvbShpbnB1dCkuZXF1YWxzKG1lc3NhZ2UpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWducyBhbmQgcmV0dXJucyBhIHZlcmlmaWVkIDY0LWJ5dGUgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIodmFsaWRTaWduZXIsIG1lc3NhZ2UpO1xuICAgICAgc2lnbmF0dXJlLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezEyOH0kLyk7XG4gICAgICBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG1lc3NhZ2UsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpLCBrZXlQYWlyLnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzaWduZXIgdGhhdCBtdXRhdGVzIGl0cyBtZXNzYWdlIGFyZ3VtZW50LCBsZWF2aW5nIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGludGFjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTWVzc2FnZSA9IFVpbnQ4QXJyYXkuZnJvbShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IG11dGF0aW5nU2lnbmVyOiBFeHRlcm5hbEVkMjU1MTlTaWduZXIgPSB7XG4gICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgc2lnbjogYXN5bmMgKG06IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgICBtLmZpbGwoMHgwMCk7XG4gICAgICAgICAgcmV0dXJuIHsgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShuYWNsLnNpZ24uZGV0YWNoZWQobSwga2V5UGFpci5zZWNyZXRLZXkpKS50b1N0cmluZygnaGV4JykgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihtdXRhdGluZ1NpZ25lciwgb3JpZ2luYWxNZXNzYWdlKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvZG9lcyBub3QgdmVyaWZ5IGFnYWluc3QgaXRzIHB1YmxpYyBrZXkvXG4gICAgICApO1xuICAgICAgLy8gVGhlIGF1dGhvcml0YXRpdmUgbWVzc2FnZSBtdXN0IGJlIHVuY2hhbmdlZDogdGhlIHNpZ25lciBvbmx5IGV2ZXIgc2F3IGEgZGVmZW5zaXZlIGNvcHkuXG4gICAgICBCdWZmZXIuZnJvbShvcmlnaW5hbE1lc3NhZ2UpLmVxdWFscyhCdWZmZXIuZnJvbShtZXNzYWdlKSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|