@bitgo-beta/key-card 0.0.1-beta.2011 → 0.0.1-beta.2013

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.
@@ -1 +1 @@
1
- {"version":3,"file":"drawKeycard.d.ts","sourceRoot":"","sources":["../../src/drawKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2BvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAgFtC,wBAAsB,WAAW,CAAC,EAChC,cAAc,EACd,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,KAAK,EACL,sBAAmD,GACpD,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CA6L/B"}
1
+ {"version":3,"file":"drawKeycard.d.ts","sourceRoot":"","sources":["../../src/drawKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2BvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAmFtC,wBAAsB,WAAW,CAAC,EAChC,cAAc,EACd,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,KAAK,EACL,sBAAmD,GACpD,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CA2M/B"}
@@ -61,7 +61,7 @@ var KeyCurveName;
61
61
  // this limitation was chosen by trial and error
62
62
  exports.QRBinaryMaxLength = 1500;
63
63
  // Default page-break layout: start a new page before the 3rd box (index 2), matching the
64
- // historical wallet keycard. Callers (e.g. the vault keycard) may override with their own indices.
64
+ // historical wallet keycard. Callers (e.g. the safe keycard) may override with their own indices.
65
65
  const DEFAULT_PAGE_BREAK_INDICES = [2];
66
66
  const font = {
67
67
  header: 24,
@@ -82,6 +82,9 @@ function left(x) {
82
82
  function moveDown(y, ydelta) {
83
83
  return y + ydelta;
84
84
  }
85
+ // Draws QR codes down the left column, returning the index of the next QR still to draw (for
86
+ // continuation on a later page) and the y-offset just below the drawn QR column (so callers
87
+ // can place content, e.g. a note, under the QR codes).
85
88
  function drawOnePageOfQrCodes(qrImages, doc, y, qrSize, startIndex) {
86
89
  doc.setFont('helvetica');
87
90
  let qrIndex = startIndex;
@@ -89,18 +92,18 @@ function drawOnePageOfQrCodes(qrImages, doc, y, qrSize, startIndex) {
89
92
  const image = qrImages[qrIndex];
90
93
  const textBuffer = 15;
91
94
  if (y + qrSize + textBuffer >= doc.internal.pageSize.getHeight()) {
92
- return qrIndex;
95
+ return { nextIndex: qrIndex, endY: y };
93
96
  }
94
97
  doc.addImage(image, left(0), y, qrSize, qrSize);
95
98
  if (qrImages.length === 1) {
96
- return qrIndex + 1;
99
+ return { nextIndex: qrIndex + 1, endY: y + qrSize };
97
100
  }
98
101
  y = moveDown(y, qrSize + textBuffer);
99
102
  doc.setFontSize(font.body).setTextColor(color.black);
100
103
  doc.text('Part ' + (qrIndex + 1).toString(), left(0), y);
101
104
  y = moveDown(y, 20);
102
105
  }
103
- return qrIndex + 1;
106
+ return { nextIndex: qrIndex, endY: y };
104
107
  }
105
108
  function computeKeyCardImageDimensions(keyCardImage) {
106
109
  // Max dimensions stablished by fixed available PDF space
@@ -197,7 +200,20 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
197
200
  for (const key of keys) {
198
201
  qrImages.push(await QRCode.toCanvas(key, { errorCorrectionLevel: 'L' }));
199
202
  }
200
- let nextQrIndex = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, 0);
203
+ const isMultiPart = qr?.data?.length > exports.QRBinaryMaxLength;
204
+ const { nextIndex, endY: qrColumnEndY } = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, 0);
205
+ let nextQrIndex = nextIndex;
206
+ // For a split key, place the "put all Parts together" note directly under the QR codes,
207
+ // wrapped to the QR column width so it stays in the left column and never overlaps the
208
+ // Data payload rendered on the right.
209
+ let qrColumnBottom = qrColumnEndY;
210
+ if (isMultiPart) {
211
+ doc.setFontSize(font.body - 2).setTextColor(color.darkgray);
212
+ const noteLines = doc.splitTextToSize('Note: you will need to put all Parts together for the full key', qrSize);
213
+ const noteY = moveDown(qrColumnEndY, 15);
214
+ doc.text(noteLines, left(0), noteY);
215
+ qrColumnBottom = noteY + noteLines.length * doc.getLineHeight();
216
+ }
201
217
  doc.setFontSize(font.subheader).setTextColor(color.black);
202
218
  y = moveDown(y, 10);
203
219
  textHeight += 10;
@@ -209,11 +225,6 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
209
225
  doc.text(qr.description, textLeft, y);
210
226
  textHeight += doc.getLineHeight();
211
227
  doc.setFontSize(font.body - 2);
212
- if (qr?.data?.length > exports.QRBinaryMaxLength) {
213
- y = moveDown(y, 30);
214
- textHeight += 30;
215
- doc.text('Note: you will need to put all Parts together for the full key', textLeft, y);
216
- }
217
228
  y = moveDown(y, 30);
218
229
  textHeight += 30;
219
230
  doc.text('Data:', textLeft, y);
@@ -231,7 +242,11 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
231
242
  textHeight = 0;
232
243
  y = 30;
233
244
  topY = y;
234
- nextQrIndex = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, nextQrIndex);
245
+ // Redraw remaining QRs on the new page and update the column bottom to THIS page, so
246
+ // the rowHeight math below stays same-page (avoids a stale page-1 coordinate).
247
+ const continued = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, nextQrIndex);
248
+ nextQrIndex = continued.nextIndex;
249
+ qrColumnBottom = continued.endY;
235
250
  doc.setFont('courier').setFontSize(9).setTextColor(color.black);
236
251
  }
237
252
  doc.text(lines[line], textLeft, y);
@@ -257,9 +272,10 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
257
272
  doc.text(splitKeyId, textLeft + 5, y + 10);
258
273
  }
259
274
  doc.setFont('helvetica');
260
- // Move down the size of the QR code minus accumulated height on the right side, plus margin
261
- // if we have a key that spans multiple pages, then exclude QR code size
262
- const rowHeight = Math.max(qr.data.length > exports.QRBinaryMaxLength ? qrSize + 20 : qrSize, textHeight);
275
+ // Move down past the taller of the two columns: the right-side text (textHeight) or the
276
+ // left-side QR column (plus the note printed under it for split keys), then add a margin.
277
+ const qrColumnHeight = isMultiPart ? qrColumnBottom - topY : qrSize;
278
+ const rowHeight = Math.max(qrColumnHeight, textHeight);
263
279
  const marginBottom = 15;
264
280
  y = moveDown(y, rowHeight - (y - topY) + marginBottom);
265
281
  }
@@ -285,4 +301,4 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
285
301
  });
286
302
  return doc;
287
303
  }
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd0tleWNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd0tleWNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkdBLGtDQXFNQztBQWpURCwrQ0FBaUM7QUFFakMsbUNBQW9DO0FBR3BDLEtBQUssVUFBVSxTQUFTO0lBQ3RCLElBQUksS0FBa0IsQ0FBQztJQUV2QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUUsd0JBQXdCO1FBQ3hCLEtBQUssR0FBRyx3REFBYSxPQUFPLEdBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLG9CQUFvQjtRQUNwQixLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBbUIsQ0FBQTtJQUNuQiwyQkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBRUQsbUZBQW1GO0FBQ25GLG9IQUFvSDtBQUNwSCxxREFBcUQ7QUFDckQsZ0RBQWdEO0FBQ25DLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLHlGQUF5RjtBQUN6RixtR0FBbUc7QUFDbkcsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsRUFBRTtJQUNiLElBQUksRUFBRSxFQUFFO0NBQ1QsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHO0lBQ1osS0FBSyxFQUFFLFNBQVM7SUFDaEIsUUFBUSxFQUFFLFNBQVM7SUFD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O0lBQ3JELENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSTtZQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBqc1BERiB9IGZyb20gJ2pzcGRmJztcbmltcG9ydCAqIGFzIFFSQ29kZSBmcm9tICdxcmNvZGUnO1xuaW1wb3J0IHsgSURyYXdLZXlDYXJkIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzcGxpdEtleXMgfSBmcm9tICcuL3V0aWxzJztcbnR5cGUganNQREZNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCdqc3BkZicpO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkSlNQREYoKTogUHJvbWlzZTxqc1BERk1vZHVsZT4ge1xuICBsZXQganNQREY6IGpzUERGTW9kdWxlO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFdlIGFyZSBpbiB0aGUgYnJvd3NlclxuICAgIGpzUERGID0gYXdhaXQgaW1wb3J0KCdqc3BkZicpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGFyZSBpbiBOb2RlLmpzXG4gICAganNQREYgPSByZXF1aXJlKCdqc3BkZicpO1xuICB9XG4gIHJldHVybiBqc1BERjtcbn1cblxuZW51bSBLZXlDdXJ2ZU5hbWUge1xuICBlZDI1NTE5ID0gJ0VERFNBJyxcbiAgc2VjcDI1NmsxID0gJ0VDRFNBJyxcbiAgYmxzID0gJ0JMUycsXG59XG5cbi8vIE1heCBmb3IgQmluYXJ5L0J5dGUgRGF0YSBodHRwczovL2dpdGh1Yi5jb20vc29sZGFpci9ub2RlLXFyY29kZSNxci1jb2RlLWNhcGFjaXR5XG4vLyB0aGUgbGFyZ2VzdCB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHZhbHVlIGlzIGFjdHVhbGx5IDI5NTMgYnV0IHRoZSBRUiBjb2RlcyBnZXQgc28gZGVuc2UgdGhhdCBzY2FubmluZyB0aGVtIHdpdGggYVxuLy8gcGhvbmUgKG9mZiBvZiBhIHByaW50ZWQgcGFnZSkgZG9lc24ndCB3b3JrIGFueW1vcmVcbi8vIHRoaXMgbGltaXRhdGlvbiB3YXMgY2hvc2VuIGJ5IHRyaWFsIGFuZCBlcnJvclxuZXhwb3J0IGNvbnN0IFFSQmluYXJ5TWF4TGVuZ3RoID0gMTUwMDtcblxuLy8gRGVmYXVsdCBwYWdlLWJyZWFrIGxheW91dDogc3RhcnQgYSBuZXcgcGFnZSBiZWZvcmUgdGhlIDNyZCBib3ggKGluZGV4IDIpLCBtYXRjaGluZyB0aGVcbi8vIGhpc3RvcmljYWwgd2FsbGV0IGtleWNhcmQuIENhbGxlcnMgKGUuZy4gdGhlIHZhdWx0IGtleWNhcmQpIG1heSBvdmVycmlkZSB3aXRoIHRoZWlyIG93biBpbmRpY2VzLlxuY29uc3QgREVGQVVMVF9QQUdFX0JSRUFLX0lORElDRVMgPSBbMl07XG5cbmNvbnN0IGZvbnQgPSB7XG4gIGhlYWRlcjogMjQsXG4gIHN1YmhlYWRlcjogMTUsXG4gIGJvZHk6IDEyLFxufTtcblxuY29uc3QgY29sb3IgPSB7XG4gIGJsYWNrOiAnIzAwMDAwMCcsXG4gIGRhcmtncmF5OiAnIzRjNGM0YycsXG4gIGdyYXk6ICcjOWI5YjliJyxcbiAgcmVkOiAnI2UyMWUxZScsXG59O1xuXG5jb25zdCBtYXJnaW4gPSAzMDtcblxuLy8gSGVscGVycyBmb3IgZGF0YSBmb3JtYXR0aW5nIC8gcG9zaXRpb25pbmcgb24gdGhlIHBhcGVyXG5mdW5jdGlvbiBsZWZ0KHg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBtYXJnaW4gKyB4O1xufVxuZnVuY3Rpb24gbW92ZURvd24oeTogbnVtYmVyLCB5ZGVsdGE6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB5ICsgeWRlbHRhO1xufVxuXG5mdW5jdGlvbiBkcmF3T25lUGFnZU9mUXJDb2RlcyhcbiAgcXJJbWFnZXM6IEhUTUxDYW52YXNFbGVtZW50W10sXG4gIGRvYzoganNQREYsXG4gIHk6IG51bWJlcixcbiAgcXJTaXplOiBudW1iZXIsXG4gIHN0YXJ0SW5kZXhcbik6IG51bWJlciB7XG4gIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcbiAgbGV0IHFySW5kZXg6IG51bWJlciA9IHN0YXJ0SW5kZXg7XG4gIGZvciAoOyBxckluZGV4IDwgcXJJbWFnZXMubGVuZ3RoOyBxckluZGV4KyspIHtcbiAgICBjb25zdCBpbWFnZSA9IHFySW1hZ2VzW3FySW5kZXhdO1xuICAgIGNvbnN0IHRleHRCdWZmZXIgPSAxNTtcbiAgICBpZiAoeSArIHFyU2l6ZSArIHRleHRCdWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICByZXR1cm4gcXJJbmRleDtcbiAgICB9XG5cbiAgICBkb2MuYWRkSW1hZ2UoaW1hZ2UsIGxlZnQoMCksIHksIHFyU2l6ZSwgcXJTaXplKTtcblxuICAgIGlmIChxckltYWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBxckluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB5ID0gbW92ZURvd24oeSwgcXJTaXplICsgdGV4dEJ1ZmZlcik7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBkb2MudGV4dCgnUGFydCAnICsgKHFySW5kZXggKyAxKS50b1N0cmluZygpLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICB9XG4gIHJldHVybiBxckluZGV4ICsgMTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUtleUNhcmRJbWFnZURpbWVuc2lvbnMoa2V5Q2FyZEltYWdlOiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gIC8vIE1heCBkaW1lbnNpb25zIHN0YWJsaXNoZWQgYnkgZml4ZWQgYXZhaWxhYmxlIFBERiBzcGFjZVxuICBjb25zdCBLRVlfQ0FSRF9JTUFHRV9NQVhfRElNRU5TSU9OUyA9IHtcbiAgICB3aWR0aDogMzAzLFxuICAgIGhlaWdodDogNDAsXG4gIH07XG5cbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGgsIGhlaWdodDogaW1nSGVpZ2h0IH0gPSBrZXlDYXJkSW1hZ2U7XG4gIGNvbnN0IHsgd2lkdGg6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9ID0gS0VZX0NBUkRfSU1BR0VfTUFYX0RJTUVOU0lPTlM7XG5cbiAgLy8gVHJ5IHNjYWxpbmcgcmF0aW8gYmFzZWQgb24gd2lkdGhcbiAgY29uc3Qgd1JhdGlvID0gaW1nV2lkdGggLyBtYXhXaWR0aDtcbiAgbGV0IGZpbmFsUmF0aW8gPSB3UmF0aW87XG5cbiAgLy8gSWYgcmVzaXplZCBoZWlnaHQgZXhjZWVkcyB0aGUgYXZhaWxhYmxlIGhlaWdodCBzcGFjZSwgYmFzZSByYXRpbyBhbHNvIG9uIGhlaWdodFxuICBpZiAoaW1nSGVpZ2h0IC8gZmluYWxSYXRpbyA+IG1heEhlaWdodCkge1xuICAgIGZpbmFsUmF0aW8gPSBpbWdIZWlnaHQgLyBtYXhIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIFtpbWdXaWR0aCAvIGZpbmFsUmF0aW8sIGltZ0hlaWdodCAvIGZpbmFsUmF0aW9dO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd0tleWNhcmQoe1xuICBhY3RpdmF0aW9uQ29kZSxcbiAgcXVlc3Rpb25zLFxuICBrZXlDYXJkSW1hZ2UsXG4gIHFyRGF0YSxcbiAgd2FsbGV0TGFiZWwsXG4gIGN1cnZlLFxuICBwYWdlQnJlYWtCZWZvcmVJbmRpY2VzID0gREVGQVVMVF9QQUdFX0JSRUFLX0lORElDRVMsXG59OiBJRHJhd0tleUNhcmQpOiBQcm9taXNlPGpzUERGPiB7XG4gIGNvbnN0IGpzUERGTW9kdWxlID0gYXdhaXQgbG9hZEpTUERGKCk7XG5cbiAgLy8gZG9jdW1lbnQgZGV0YWlsc1xuICBjb25zdCB3aWR0aCA9IDguNSAqIDcyO1xuICBsZXQgeSA9IDA7XG5cbiAgLy8gQ3JlYXRlIHRoZSBQREYgaW5zdGFuY2VcbiAgY29uc3QgZG9jID0gbmV3IGpzUERGTW9kdWxlLmpzUERGKCdwb3J0cmFpdCcsICdwdCcsICdsZXR0ZXInKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcblxuICAvLyBQREYgSGVhZGVyIEFyZWEgLSBpbmNsdWRlcyB0aGUgbG9nbyBhbmQgY29tcGFueSBuYW1lXG4gIC8vIFRoaXMgaXMgZGF0YSBmb3IgdGhlIEJpdEdvIGxvZ28gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZSBQREZcbiAgeSA9IG1vdmVEb3duKHksIDMwKTtcblxuICBpZiAoa2V5Q2FyZEltYWdlKSB7XG4gICAgY29uc3QgW2ltZ1dpZHRoLCBpbWdIZWlnaHRdID0gY29tcHV0ZUtleUNhcmRJbWFnZURpbWVuc2lvbnMoa2V5Q2FyZEltYWdlKTtcbiAgICBkb2MuYWRkSW1hZ2Uoa2V5Q2FyZEltYWdlLCBsZWZ0KDApLCB5LCBpbWdXaWR0aCwgaW1nSGVpZ2h0KTtcbiAgfVxuXG4gIC8vIEFjdGl2YXRpb24gQ29kZVxuICBpZiAoYWN0aXZhdGlvbkNvZGUpIHtcbiAgICB5ID0gbW92ZURvd24oeSwgOCk7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuICAgIGRvYy50ZXh0KCdBY3RpdmF0aW9uIENvZGUnLCBsZWZ0KDQ2MCksIHkpO1xuICB9XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgeSA9IG1vdmVEb3duKHksIDI1KTtcbiAgZG9jLnRleHQoJ0tleUNhcmQnLCBsZWZ0KGN1cnZlICYmICFhY3RpdmF0aW9uQ29kZSA/IDQ2MCA6IDMyNSksIHkgLSAxKTtcbiAgaWYgKGFjdGl2YXRpb25Db2RlKSB7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuZ3JheSk7XG4gICAgZG9jLnRleHQoYWN0aXZhdGlvbkNvZGUsIGxlZnQoNDYwKSwgeSk7XG4gIH1cblxuICAvLyBTdWJoZWFkZXJcbiAgLy8gdGl0bGVzXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpO1xuICB5ID0gbW92ZURvd24oeSwgbWFyZ2luKTtcbiAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuXG4gIGlmIChjdXJ2ZSB8fCB3YWxsZXRMYWJlbCkge1xuICAgIGNvbnN0IHRpdGxlID0gY3VydmUgPyBLZXlDdXJ2ZU5hbWVbY3VydmVdICsgJyBrZXk6JyA6ICd3YWxsZXQgbmFtZWQ6JztcbiAgICBkb2MudGV4dCgnQ3JlYXRlZCBvbiAnICsgZGF0ZSArICcgZm9yICcgKyB0aXRsZSwgbGVmdCgwKSwgeSk7XG4gICAgLy8gY29weVxuICAgIHkgPSBtb3ZlRG93bih5LCAyNSk7XG4gICAgaWYgKHdhbGxldExhYmVsKSB7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgICBkb2MudGV4dCh3YWxsZXRMYWJlbCwgbGVmdCgwKSwgeSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvYy50ZXh0KCdDcmVhdGVkIG9uICcgKyBkYXRlLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjUpO1xuICB9XG4gIGlmICghY3VydmUpIHtcbiAgICAvLyBSZWQgQmFyXG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0RmlsbENvbG9yKDI1NSwgMjMwLCAyMzApO1xuICAgIGRvYy5yZWN0KGxlZnQoMCksIHksIHdpZHRoIC0gMiAqIG1hcmdpbiwgMzIsICdGJyk7XG5cbiAgICAvLyB3YXJuaW5nIG1lc3NhZ2VcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5yZWQpO1xuICAgIGRvYy50ZXh0KCdQcmludCB0aGlzIGRvY3VtZW50LCBvciBrZWVwIGl0IHNlY3VyZWx5IG9mZmxpbmUuIFNlZSBiZWxvdyBmb3IgRkFRLicsIGxlZnQoNzUpLCB5KTtcbiAgfVxuICAvLyBHZW5lcmF0ZSB0aGUgZmlyc3QgcGFnZSdzIGRhdGEgZm9yIHRoZSBiYWNrdXAgUERGXG4gIHkgPSBtb3ZlRG93bih5LCAzNSk7XG4gIGNvbnN0IHFyU2l6ZSA9IDEzMDtcbiAgY29uc3QgcXJLZXlzID0gWyd1c2VyJywgJ3VzZXJNYXN0ZXJQdWJsaWNLZXknLCAnYmFja3VwJywgJ2JhY2t1cE1hc3RlclB1YmxpY0tleScsICdiaXRnbycsICdwYXNzY29kZSddLmZpbHRlcihcbiAgICAoa2V5KSA9PiAhIXFyRGF0YVtrZXldXG4gICk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBxcktleXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgbmFtZSA9IHFyS2V5c1tpbmRleF07XG5cbiAgICBpZiAocGFnZUJyZWFrQmVmb3JlSW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgIC8vIFN0YXJ0IGEgbmV3IHBhZ2UgZm9yIHRoaXMgYm94XG4gICAgICBkb2MuYWRkUGFnZSgpO1xuXG4gICAgICAvLyAybmQgcGFnZSB0aXRsZVxuICAgICAgeSA9IDMwO1xuICAgIH1cblxuICAgIGNvbnN0IHFyID0gcXJEYXRhW25hbWVdO1xuICAgIGxldCB0b3BZID0geTtcbiAgICBjb25zdCB0ZXh0TGVmdCA9IGxlZnQocXJTaXplICsgMTUpO1xuICAgIGxldCB0ZXh0SGVpZ2h0ID0gMDtcblxuICAgIGNvbnN0IHFySW1hZ2VzOiBIVE1MQ2FudmFzRWxlbWVudFtdID0gW107XG4gICAgY29uc3Qga2V5cyA9IHNwbGl0S2V5cyhxci5kYXRhLCBRUkJpbmFyeU1heExlbmd0aCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgcXJJbWFnZXMucHVzaChhd2FpdCBRUkNvZGUudG9DYW52YXMoa2V5LCB7IGVycm9yQ29ycmVjdGlvbkxldmVsOiAnTCcgfSkpO1xuICAgIH1cblxuICAgIGxldCBuZXh0UXJJbmRleCA9IGRyYXdPbmVQYWdlT2ZRckNvZGVzKHFySW1hZ2VzLCBkb2MsIHksIHFyU2l6ZSwgMCk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgeSA9IG1vdmVEb3duKHksIDEwKTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDEwO1xuICAgIGRvYy50ZXh0KHFyLnRpdGxlLCB0ZXh0TGVmdCwgeSk7XG4gICAgdGV4dEhlaWdodCArPSBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgIHkgPSBtb3ZlRG93bih5LCAxNSk7XG4gICAgdGV4dEhlaWdodCArPSAxNTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuZGFya2dyYXkpO1xuICAgIGRvYy50ZXh0KHFyLmRlc2NyaXB0aW9uLCB0ZXh0TGVmdCwgeSk7XG4gICAgdGV4dEhlaWdodCArPSBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkgLSAyKTtcbiAgICBpZiAocXI/LmRhdGE/Lmxlbmd0aCA+IFFSQmluYXJ5TWF4TGVuZ3RoKSB7XG4gICAgICB5ID0gbW92ZURvd24oeSwgMzApO1xuICAgICAgdGV4dEhlaWdodCArPSAzMDtcbiAgICAgIGRvYy50ZXh0KCdOb3RlOiB5b3Ugd2lsbCBuZWVkIHRvIHB1dCBhbGwgUGFydHMgdG9nZXRoZXIgZm9yIHRoZSBmdWxsIGtleScsIHRleHRMZWZ0LCB5KTtcbiAgICB9XG4gICAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDMwO1xuICAgIGRvYy50ZXh0KCdEYXRhOicsIHRleHRMZWZ0LCB5KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgeSA9IG1vdmVEb3duKHksIDE1KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDE1O1xuICAgIGNvbnN0IHdpZHRoID0gNzIgKiA4LjUgLSB0ZXh0TGVmdCAtIDMwO1xuICAgIGRvYy5zZXRGb250KCdjb3VyaWVyJykuc2V0Rm9udFNpemUoOSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBjb25zdCBsaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUocXIuZGF0YSwgd2lkdGgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IDEwO1xuICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDwgbGluZXMubGVuZ3RoOyBsaW5lKyspIHtcbiAgICAgIC8vIGFkZCBuZXcgcGFnZSBpZiBkYXRhIGRvZXMgbm90IGZpdCBvbiBvbmUgcGFnZVxuICAgICAgaWYgKHkgKyBidWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgIHRleHRIZWlnaHQgPSAwO1xuICAgICAgICB5ID0gMzA7XG4gICAgICAgIHRvcFkgPSB5O1xuICAgICAgICBuZXh0UXJJbmRleCA9IGRyYXdPbmVQYWdlT2ZRckNvZGVzKHFySW1hZ2VzLCBkb2MsIHksIHFyU2l6ZSwgbmV4dFFySW5kZXgpO1xuICAgICAgICBkb2Muc2V0Rm9udCgnY291cmllcicpLnNldEZvbnRTaXplKDkpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgICB9XG4gICAgICBkb2MudGV4dChsaW5lc1tsaW5lXSwgdGV4dExlZnQsIHkpO1xuICAgICAgaWYgKGxpbmUgIT09IGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgeSA9IG1vdmVEb3duKHksIGJ1ZmZlcik7XG4gICAgICAgIHRleHRIZWlnaHQgKz0gYnVmZmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBwdWJsaWMga2V5IGlmIGV4aXN0c1xuICAgIGlmIChxci5wdWJsaWNNYXN0ZXJLZXkpIHtcbiAgICAgIGNvbnN0IHRleHQgPSAnS2V5IElkOiAnICsgcXIucHVibGljTWFzdGVyS2V5O1xuXG4gICAgICAvLyBHcmF5IGJhclxuICAgICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICAgIHRleHRIZWlnaHQgKz0gMjA7XG4gICAgICBkb2Muc2V0RmlsbENvbG9yKDI0NywgMjQ5LCAyNDkpOyAvLyBHcmF5IGJhY2tncm91bmRcbiAgICAgIGRvYy5zZXREcmF3Q29sb3IoMCwgMCwgMCk7IC8vIEJvcmRlclxuXG4gICAgICAvLyBMZWF2ZSBhIGJpdCBvZiBzcGFjZSBmb3IgdGhlIHNpZGUgb2YgdGhlIHJlY3RhbmdsZS5cbiAgICAgIGNvbnN0IHNwbGl0S2V5SWQgPSBkb2Muc3BsaXRUZXh0VG9TaXplKHRleHQsIHdpZHRoIC0gMTApO1xuXG4gICAgICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBib3ggbXVzdCBiZSBhdCBsZWFzdCAxNSBweCAoZm9yIHNpbmdsZSBsaW5lIGNhc2UpLCBvclxuICAgICAgLy8gYSBtdWx0aXBsZSBvZiAxMyBmb3IgZWFjaCBsaW5lLiAgVGhpcyBhbGxvd3MgZm9yIHByb3BlciBwYWRkaW5nLlxuICAgICAgZG9jLnJlY3QodGV4dExlZnQsIHksIHdpZHRoLCBNYXRoLm1heCgxMiAqIHNwbGl0S2V5SWQubGVuZ3RoLCAxNSksICdGRCcpO1xuICAgICAgdGV4dEhlaWdodCArPSBzcGxpdEtleUlkLmxlbmd0aCAqIGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgICBkb2MudGV4dChzcGxpdEtleUlkLCB0ZXh0TGVmdCArIDUsIHkgKyAxMCk7XG4gICAgfVxuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScpO1xuICAgIC8vIE1vdmUgZG93biB0aGUgc2l6ZSBvZiB0aGUgUVIgY29kZSBtaW51cyBhY2N1bXVsYXRlZCBoZWlnaHQgb24gdGhlIHJpZ2h0IHNpZGUsIHBsdXMgbWFyZ2luXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGtleSB0aGF0IHNwYW5zIG11bHRpcGxlIHBhZ2VzLCB0aGVuIGV4Y2x1ZGUgUVIgY29kZSBzaXplXG4gICAgY29uc3Qgcm93SGVpZ2h0ID0gTWF0aC5tYXgocXIuZGF0YS5sZW5ndGggPiBRUkJpbmFyeU1heExlbmd0aCA/IHFyU2l6ZSArIDIwIDogcXJTaXplLCB0ZXh0SGVpZ2h0KTtcbiAgICBjb25zdCBtYXJnaW5Cb3R0b20gPSAxNTtcbiAgICB5ID0gbW92ZURvd24oeSwgcm93SGVpZ2h0IC0gKHkgLSB0b3BZKSArIG1hcmdpbkJvdHRvbSk7XG4gIH1cblxuICAvLyBBZGQgbmV4dCBQYWdlXG4gIGRvYy5hZGRQYWdlKCk7XG5cbiAgLy8gbmV4dCBwYWdlcyB0aXRsZVxuICB5ID0gMDtcbiAgeSA9IG1vdmVEb3duKHksIDU1KTtcbiAgZG9jLnNldEZvbnRTaXplKGZvbnQuaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICBkb2MudGV4dCgnQml0R28gS2V5Q2FyZCBGQVEnLCBsZWZ0KDApLCB5KTtcblxuICAvLyBHZW5lcmF0ZSB0aGUgc2Vjb25kIHBhZ2UncyBkYXRhIGZvciB0aGUgYmFja3VwIFBERlxuICB5ID0gbW92ZURvd24oeSwgMzApO1xuICBxdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocSkge1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LnN1YmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBkb2MudGV4dChxLnF1ZXN0aW9uLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5kYXJrZ3JheSk7XG4gICAgcS5hbnN3ZXIuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgZG9jLnRleHQobGluZSwgbGVmdCgwKSwgeSk7XG4gICAgICB5ID0gbW92ZURvd24oeSwgZm9udC5ib2R5ICsgMyk7XG4gICAgfSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDIyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRvYztcbn1cbiJdfQ==
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd0tleWNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd0tleWNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0hBLGtDQW1OQztBQWxVRCwrQ0FBaUM7QUFFakMsbUNBQW9DO0FBR3BDLEtBQUssVUFBVSxTQUFTO0lBQ3RCLElBQUksS0FBa0IsQ0FBQztJQUV2QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUUsd0JBQXdCO1FBQ3hCLEtBQUssR0FBRyx3REFBYSxPQUFPLEdBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLG9CQUFvQjtRQUNwQixLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBbUIsQ0FBQTtJQUNuQiwyQkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBRUQsbUZBQW1GO0FBQ25GLG9IQUFvSDtBQUNwSCxxREFBcUQ7QUFDckQsZ0RBQWdEO0FBQ25DLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLHlGQUF5RjtBQUN6RixrR0FBa0c7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsRUFBRTtJQUNiLElBQUksRUFBRSxFQUFFO0NBQ1QsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHO0lBQ1osS0FBSyxFQUFFLFNBQVM7SUFDaEIsUUFBUSxFQUFFLFNBQVM7SUFD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LENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1lBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGpzUERGIH0gZnJvbSAnanNwZGYnO1xuaW1wb3J0ICogYXMgUVJDb2RlIGZyb20gJ3FyY29kZSc7XG5pbXBvcnQgeyBJRHJhd0tleUNhcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHNwbGl0S2V5cyB9IGZyb20gJy4vdXRpbHMnO1xudHlwZSBqc1BERk1vZHVsZSA9IHR5cGVvZiBpbXBvcnQoJ2pzcGRmJyk7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRKU1BERigpOiBQcm9taXNlPGpzUERGTW9kdWxlPiB7XG4gIGxldCBqc1BERjoganNQREZNb2R1bGU7XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gV2UgYXJlIGluIHRoZSBicm93c2VyXG4gICAganNQREYgPSBhd2FpdCBpbXBvcnQoJ2pzcGRmJyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGluIE5vZGUuanNcbiAgICBqc1BERiA9IHJlcXVpcmUoJ2pzcGRmJyk7XG4gIH1cbiAgcmV0dXJuIGpzUERGO1xufVxuXG5lbnVtIEtleUN1cnZlTmFtZSB7XG4gIGVkMjU1MTkgPSAnRUREU0EnLFxuICBzZWNwMjU2azEgPSAnRUNEU0EnLFxuICBibHMgPSAnQkxTJyxcbn1cblxuLy8gTWF4IGZvciBCaW5hcnkvQnl0ZSBEYXRhIGh0dHBzOi8vZ2l0aHViLmNvbS9zb2xkYWlyL25vZGUtcXJjb2RlI3FyLWNvZGUtY2FwYWNpdHlcbi8vIHRoZSBsYXJnZXN0IHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdmFsdWUgaXMgYWN0dWFsbHkgMjk1MyBidXQgdGhlIFFSIGNvZGVzIGdldCBzbyBkZW5zZSB0aGF0IHNjYW5uaW5nIHRoZW0gd2l0aCBhXG4vLyBwaG9uZSAob2ZmIG9mIGEgcHJpbnRlZCBwYWdlKSBkb2Vzbid0IHdvcmsgYW55bW9yZVxuLy8gdGhpcyBsaW1pdGF0aW9uIHdhcyBjaG9zZW4gYnkgdHJpYWwgYW5kIGVycm9yXG5leHBvcnQgY29uc3QgUVJCaW5hcnlNYXhMZW5ndGggPSAxNTAwO1xuXG4vLyBEZWZhdWx0IHBhZ2UtYnJlYWsgbGF5b3V0OiBzdGFydCBhIG5ldyBwYWdlIGJlZm9yZSB0aGUgM3JkIGJveCAoaW5kZXggMiksIG1hdGNoaW5nIHRoZVxuLy8gaGlzdG9yaWNhbCB3YWxsZXQga2V5Y2FyZC4gQ2FsbGVycyAoZS5nLiB0aGUgc2FmZSBrZXljYXJkKSBtYXkgb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gaW5kaWNlcy5cbmNvbnN0IERFRkFVTFRfUEFHRV9CUkVBS19JTkRJQ0VTID0gWzJdO1xuXG5jb25zdCBmb250ID0ge1xuICBoZWFkZXI6IDI0LFxuICBzdWJoZWFkZXI6IDE1LFxuICBib2R5OiAxMixcbn07XG5cbmNvbnN0IGNvbG9yID0ge1xuICBibGFjazogJyMwMDAwMDAnLFxuICBkYXJrZ3JheTogJyM0YzRjNGMnLFxuICBncmF5OiAnIzliOWI5YicsXG4gIHJlZDogJyNlMjFlMWUnLFxufTtcblxuY29uc3QgbWFyZ2luID0gMzA7XG5cbi8vIEhlbHBlcnMgZm9yIGRhdGEgZm9ybWF0dGluZyAvIHBvc2l0aW9uaW5nIG9uIHRoZSBwYXBlclxuZnVuY3Rpb24gbGVmdCh4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbWFyZ2luICsgeDtcbn1cbmZ1bmN0aW9uIG1vdmVEb3duKHk6IG51bWJlciwgeWRlbHRhOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4geSArIHlkZWx0YTtcbn1cblxuLy8gRHJhd3MgUVIgY29kZXMgZG93biB0aGUgbGVmdCBjb2x1bW4sIHJldHVybmluZyB0aGUgaW5kZXggb2YgdGhlIG5leHQgUVIgc3RpbGwgdG8gZHJhdyAoZm9yXG4vLyBjb250aW51YXRpb24gb24gYSBsYXRlciBwYWdlKSBhbmQgdGhlIHktb2Zmc2V0IGp1c3QgYmVsb3cgdGhlIGRyYXduIFFSIGNvbHVtbiAoc28gY2FsbGVyc1xuLy8gY2FuIHBsYWNlIGNvbnRlbnQsIGUuZy4gYSBub3RlLCB1bmRlciB0aGUgUVIgY29kZXMpLlxuZnVuY3Rpb24gZHJhd09uZVBhZ2VPZlFyQ29kZXMoXG4gIHFySW1hZ2VzOiBIVE1MQ2FudmFzRWxlbWVudFtdLFxuICBkb2M6IGpzUERGLFxuICB5OiBudW1iZXIsXG4gIHFyU2l6ZTogbnVtYmVyLFxuICBzdGFydEluZGV4OiBudW1iZXJcbik6IHsgbmV4dEluZGV4OiBudW1iZXI7IGVuZFk6IG51bWJlciB9IHtcbiAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScpO1xuICBsZXQgcXJJbmRleDogbnVtYmVyID0gc3RhcnRJbmRleDtcbiAgZm9yICg7IHFySW5kZXggPCBxckltYWdlcy5sZW5ndGg7IHFySW5kZXgrKykge1xuICAgIGNvbnN0IGltYWdlID0gcXJJbWFnZXNbcXJJbmRleF07XG4gICAgY29uc3QgdGV4dEJ1ZmZlciA9IDE1O1xuICAgIGlmICh5ICsgcXJTaXplICsgdGV4dEJ1ZmZlciA+PSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCkpIHtcbiAgICAgIHJldHVybiB7IG5leHRJbmRleDogcXJJbmRleCwgZW5kWTogeSB9O1xuICAgIH1cblxuICAgIGRvYy5hZGRJbWFnZShpbWFnZSwgbGVmdCgwKSwgeSwgcXJTaXplLCBxclNpemUpO1xuXG4gICAgaWYgKHFySW1hZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHsgbmV4dEluZGV4OiBxckluZGV4ICsgMSwgZW5kWTogeSArIHFyU2l6ZSB9O1xuICAgIH1cblxuICAgIHkgPSBtb3ZlRG93bih5LCBxclNpemUgKyB0ZXh0QnVmZmVyKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgIGRvYy50ZXh0KCdQYXJ0ICcgKyAocXJJbmRleCArIDEpLnRvU3RyaW5nKCksIGxlZnQoMCksIHkpO1xuICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gIH1cbiAgcmV0dXJuIHsgbmV4dEluZGV4OiBxckluZGV4LCBlbmRZOiB5IH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVLZXlDYXJkSW1hZ2VEaW1lbnNpb25zKGtleUNhcmRJbWFnZTogSFRNTEltYWdlRWxlbWVudCkge1xuICAvLyBNYXggZGltZW5zaW9ucyBzdGFibGlzaGVkIGJ5IGZpeGVkIGF2YWlsYWJsZSBQREYgc3BhY2VcbiAgY29uc3QgS0VZX0NBUkRfSU1BR0VfTUFYX0RJTUVOU0lPTlMgPSB7XG4gICAgd2lkdGg6IDMwMyxcbiAgICBoZWlnaHQ6IDQwLFxuICB9O1xuXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoLCBoZWlnaHQ6IGltZ0hlaWdodCB9ID0ga2V5Q2FyZEltYWdlO1xuICBjb25zdCB7IHdpZHRoOiBtYXhXaWR0aCwgaGVpZ2h0OiBtYXhIZWlnaHQgfSA9IEtFWV9DQVJEX0lNQUdFX01BWF9ESU1FTlNJT05TO1xuXG4gIC8vIFRyeSBzY2FsaW5nIHJhdGlvIGJhc2VkIG9uIHdpZHRoXG4gIGNvbnN0IHdSYXRpbyA9IGltZ1dpZHRoIC8gbWF4V2lkdGg7XG4gIGxldCBmaW5hbFJhdGlvID0gd1JhdGlvO1xuXG4gIC8vIElmIHJlc2l6ZWQgaGVpZ2h0IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSBoZWlnaHQgc3BhY2UsIGJhc2UgcmF0aW8gYWxzbyBvbiBoZWlnaHRcbiAgaWYgKGltZ0hlaWdodCAvIGZpbmFsUmF0aW8gPiBtYXhIZWlnaHQpIHtcbiAgICBmaW5hbFJhdGlvID0gaW1nSGVpZ2h0IC8gbWF4SGVpZ2h0O1xuICB9XG4gIHJldHVybiBbaW1nV2lkdGggLyBmaW5hbFJhdGlvLCBpbWdIZWlnaHQgLyBmaW5hbFJhdGlvXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdLZXljYXJkKHtcbiAgYWN0aXZhdGlvbkNvZGUsXG4gIHF1ZXN0aW9ucyxcbiAga2V5Q2FyZEltYWdlLFxuICBxckRhdGEsXG4gIHdhbGxldExhYmVsLFxuICBjdXJ2ZSxcbiAgcGFnZUJyZWFrQmVmb3JlSW5kaWNlcyA9IERFRkFVTFRfUEFHRV9CUkVBS19JTkRJQ0VTLFxufTogSURyYXdLZXlDYXJkKTogUHJvbWlzZTxqc1BERj4ge1xuICBjb25zdCBqc1BERk1vZHVsZSA9IGF3YWl0IGxvYWRKU1BERigpO1xuXG4gIC8vIGRvY3VtZW50IGRldGFpbHNcbiAgY29uc3Qgd2lkdGggPSA4LjUgKiA3MjtcbiAgbGV0IHkgPSAwO1xuXG4gIC8vIENyZWF0ZSB0aGUgUERGIGluc3RhbmNlXG4gIGNvbnN0IGRvYyA9IG5ldyBqc1BERk1vZHVsZS5qc1BERigncG9ydHJhaXQnLCAncHQnLCAnbGV0dGVyJyk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJyk7XG5cbiAgLy8gUERGIEhlYWRlciBBcmVhIC0gaW5jbHVkZXMgdGhlIGxvZ28gYW5kIGNvbXBhbnkgbmFtZVxuICAvLyBUaGlzIGlzIGRhdGEgZm9yIHRoZSBCaXRHbyBsb2dvIGluIHRoZSB0b3AgbGVmdCBvZiB0aGUgUERGXG4gIHkgPSBtb3ZlRG93bih5LCAzMCk7XG5cbiAgaWYgKGtleUNhcmRJbWFnZSkge1xuICAgIGNvbnN0IFtpbWdXaWR0aCwgaW1nSGVpZ2h0XSA9IGNvbXB1dGVLZXlDYXJkSW1hZ2VEaW1lbnNpb25zKGtleUNhcmRJbWFnZSk7XG4gICAgZG9jLmFkZEltYWdlKGtleUNhcmRJbWFnZSwgbGVmdCgwKSwgeSwgaW1nV2lkdGgsIGltZ0hlaWdodCk7XG4gIH1cblxuICAvLyBBY3RpdmF0aW9uIENvZGVcbiAgaWYgKGFjdGl2YXRpb25Db2RlKSB7XG4gICAgeSA9IG1vdmVEb3duKHksIDgpO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5ncmF5KTtcbiAgICBkb2MudGV4dCgnQWN0aXZhdGlvbiBDb2RlJywgbGVmdCg0NjApLCB5KTtcbiAgfVxuICBkb2Muc2V0Rm9udFNpemUoZm9udC5oZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gIHkgPSBtb3ZlRG93bih5LCAyNSk7XG4gIGRvYy50ZXh0KCdLZXlDYXJkJywgbGVmdChjdXJ2ZSAmJiAhYWN0aXZhdGlvbkNvZGUgPyA0NjAgOiAzMjUpLCB5IC0gMSk7XG4gIGlmIChhY3RpdmF0aW9uQ29kZSkge1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuICAgIGRvYy50ZXh0KGFjdGl2YXRpb25Db2RlLCBsZWZ0KDQ2MCksIHkpO1xuICB9XG5cbiAgLy8gU3ViaGVhZGVyXG4gIC8vIHRpdGxlc1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKTtcbiAgeSA9IG1vdmVEb3duKHksIG1hcmdpbik7XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5ncmF5KTtcblxuICBpZiAoY3VydmUgfHwgd2FsbGV0TGFiZWwpIHtcbiAgICBjb25zdCB0aXRsZSA9IGN1cnZlID8gS2V5Q3VydmVOYW1lW2N1cnZlXSArICcga2V5OicgOiAnd2FsbGV0IG5hbWVkOic7XG4gICAgZG9jLnRleHQoJ0NyZWF0ZWQgb24gJyArIGRhdGUgKyAnIGZvciAnICsgdGl0bGUsIGxlZnQoMCksIHkpO1xuICAgIC8vIGNvcHlcbiAgICB5ID0gbW92ZURvd24oeSwgMjUpO1xuICAgIGlmICh3YWxsZXRMYWJlbCkge1xuICAgICAgZG9jLnNldEZvbnRTaXplKGZvbnQuc3ViaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgICAgZG9jLnRleHQod2FsbGV0TGFiZWwsIGxlZnQoMCksIHkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb2MudGV4dCgnQ3JlYXRlZCBvbiAnICsgZGF0ZSwgbGVmdCgwKSwgeSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDI1KTtcbiAgfVxuICBpZiAoIWN1cnZlKSB7XG4gICAgLy8gUmVkIEJhclxuICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gICAgZG9jLnNldEZpbGxDb2xvcigyNTUsIDIzMCwgMjMwKTtcbiAgICBkb2MucmVjdChsZWZ0KDApLCB5LCB3aWR0aCAtIDIgKiBtYXJnaW4sIDMyLCAnRicpO1xuXG4gICAgLy8gd2FybmluZyBtZXNzYWdlXG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IucmVkKTtcbiAgICBkb2MudGV4dCgnUHJpbnQgdGhpcyBkb2N1bWVudCwgb3Iga2VlcCBpdCBzZWN1cmVseSBvZmZsaW5lLiBTZWUgYmVsb3cgZm9yIEZBUS4nLCBsZWZ0KDc1KSwgeSk7XG4gIH1cbiAgLy8gR2VuZXJhdGUgdGhlIGZpcnN0IHBhZ2UncyBkYXRhIGZvciB0aGUgYmFja3VwIFBERlxuICB5ID0gbW92ZURvd24oeSwgMzUpO1xuICBjb25zdCBxclNpemUgPSAxMzA7XG4gIGNvbnN0IHFyS2V5cyA9IFsndXNlcicsICd1c2VyTWFzdGVyUHVibGljS2V5JywgJ2JhY2t1cCcsICdiYWNrdXBNYXN0ZXJQdWJsaWNLZXknLCAnYml0Z28nLCAncGFzc2NvZGUnXS5maWx0ZXIoXG4gICAgKGtleSkgPT4gISFxckRhdGFba2V5XVxuICApO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcXJLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IG5hbWUgPSBxcktleXNbaW5kZXhdO1xuXG4gICAgaWYgKHBhZ2VCcmVha0JlZm9yZUluZGljZXMuaW5jbHVkZXMoaW5kZXgpKSB7XG4gICAgICAvLyBTdGFydCBhIG5ldyBwYWdlIGZvciB0aGlzIGJveFxuICAgICAgZG9jLmFkZFBhZ2UoKTtcblxuICAgICAgLy8gMm5kIHBhZ2UgdGl0bGVcbiAgICAgIHkgPSAzMDtcbiAgICB9XG5cbiAgICBjb25zdCBxciA9IHFyRGF0YVtuYW1lXTtcbiAgICBsZXQgdG9wWSA9IHk7XG4gICAgY29uc3QgdGV4dExlZnQgPSBsZWZ0KHFyU2l6ZSArIDE1KTtcbiAgICBsZXQgdGV4dEhlaWdodCA9IDA7XG5cbiAgICBjb25zdCBxckltYWdlczogSFRNTENhbnZhc0VsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBzcGxpdEtleXMocXIuZGF0YSwgUVJCaW5hcnlNYXhMZW5ndGgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIHFySW1hZ2VzLnB1c2goYXdhaXQgUVJDb2RlLnRvQ2FudmFzKGtleSwgeyBlcnJvckNvcnJlY3Rpb25MZXZlbDogJ0wnIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc011bHRpUGFydCA9IHFyPy5kYXRhPy5sZW5ndGggPiBRUkJpbmFyeU1heExlbmd0aDtcbiAgICBjb25zdCB7IG5leHRJbmRleCwgZW5kWTogcXJDb2x1bW5FbmRZIH0gPSBkcmF3T25lUGFnZU9mUXJDb2RlcyhxckltYWdlcywgZG9jLCB5LCBxclNpemUsIDApO1xuICAgIGxldCBuZXh0UXJJbmRleCA9IG5leHRJbmRleDtcblxuICAgIC8vIEZvciBhIHNwbGl0IGtleSwgcGxhY2UgdGhlIFwicHV0IGFsbCBQYXJ0cyB0b2dldGhlclwiIG5vdGUgZGlyZWN0bHkgdW5kZXIgdGhlIFFSIGNvZGVzLFxuICAgIC8vIHdyYXBwZWQgdG8gdGhlIFFSIGNvbHVtbiB3aWR0aCBzbyBpdCBzdGF5cyBpbiB0aGUgbGVmdCBjb2x1bW4gYW5kIG5ldmVyIG92ZXJsYXBzIHRoZVxuICAgIC8vIERhdGEgcGF5bG9hZCByZW5kZXJlZCBvbiB0aGUgcmlnaHQuXG4gICAgbGV0IHFyQ29sdW1uQm90dG9tID0gcXJDb2x1bW5FbmRZO1xuICAgIGlmIChpc011bHRpUGFydCkge1xuICAgICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSAtIDIpLnNldFRleHRDb2xvcihjb2xvci5kYXJrZ3JheSk7XG4gICAgICBjb25zdCBub3RlTGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKCdOb3RlOiB5b3Ugd2lsbCBuZWVkIHRvIHB1dCBhbGwgUGFydHMgdG9nZXRoZXIgZm9yIHRoZSBmdWxsIGtleScsIHFyU2l6ZSk7XG4gICAgICBjb25zdCBub3RlWSA9IG1vdmVEb3duKHFyQ29sdW1uRW5kWSwgMTUpO1xuICAgICAgZG9jLnRleHQobm90ZUxpbmVzLCBsZWZ0KDApLCBub3RlWSk7XG4gICAgICBxckNvbHVtbkJvdHRvbSA9IG5vdGVZICsgbm90ZUxpbmVzLmxlbmd0aCAqIGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuc3ViaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgIHkgPSBtb3ZlRG93bih5LCAxMCk7XG4gICAgdGV4dEhlaWdodCArPSAxMDtcbiAgICBkb2MudGV4dChxci50aXRsZSwgdGV4dExlZnQsIHkpO1xuICAgIHRleHRIZWlnaHQgKz0gZG9jLmdldExpbmVIZWlnaHQoKTtcbiAgICB5ID0gbW92ZURvd24oeSwgMTUpO1xuICAgIHRleHRIZWlnaHQgKz0gMTU7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmRhcmtncmF5KTtcbiAgICBkb2MudGV4dChxci5kZXNjcmlwdGlvbiwgdGV4dExlZnQsIHkpO1xuICAgIHRleHRIZWlnaHQgKz0gZG9jLmdldExpbmVIZWlnaHQoKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5IC0gMik7XG4gICAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDMwO1xuICAgIGRvYy50ZXh0KCdEYXRhOicsIHRleHRMZWZ0LCB5KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgeSA9IG1vdmVEb3duKHksIDE1KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDE1O1xuICAgIGNvbnN0IHdpZHRoID0gNzIgKiA4LjUgLSB0ZXh0TGVmdCAtIDMwO1xuICAgIGRvYy5zZXRGb250KCdjb3VyaWVyJykuc2V0Rm9udFNpemUoOSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBjb25zdCBsaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUocXIuZGF0YSwgd2lkdGgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IDEwO1xuICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDwgbGluZXMubGVuZ3RoOyBsaW5lKyspIHtcbiAgICAgIC8vIGFkZCBuZXcgcGFnZSBpZiBkYXRhIGRvZXMgbm90IGZpdCBvbiBvbmUgcGFnZVxuICAgICAgaWYgKHkgKyBidWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgIHRleHRIZWlnaHQgPSAwO1xuICAgICAgICB5ID0gMzA7XG4gICAgICAgIHRvcFkgPSB5O1xuICAgICAgICAvLyBSZWRyYXcgcmVtYWluaW5nIFFScyBvbiB0aGUgbmV3IHBhZ2UgYW5kIHVwZGF0ZSB0aGUgY29sdW1uIGJvdHRvbSB0byBUSElTIHBhZ2UsIHNvXG4gICAgICAgIC8vIHRoZSByb3dIZWlnaHQgbWF0aCBiZWxvdyBzdGF5cyBzYW1lLXBhZ2UgKGF2b2lkcyBhIHN0YWxlIHBhZ2UtMSBjb29yZGluYXRlKS5cbiAgICAgICAgY29uc3QgY29udGludWVkID0gZHJhd09uZVBhZ2VPZlFyQ29kZXMocXJJbWFnZXMsIGRvYywgeSwgcXJTaXplLCBuZXh0UXJJbmRleCk7XG4gICAgICAgIG5leHRRckluZGV4ID0gY29udGludWVkLm5leHRJbmRleDtcbiAgICAgICAgcXJDb2x1bW5Cb3R0b20gPSBjb250aW51ZWQuZW5kWTtcbiAgICAgICAgZG9jLnNldEZvbnQoJ2NvdXJpZXInKS5zZXRGb250U2l6ZSg5KS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgICAgfVxuICAgICAgZG9jLnRleHQobGluZXNbbGluZV0sIHRleHRMZWZ0LCB5KTtcbiAgICAgIGlmIChsaW5lICE9PSBsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHkgPSBtb3ZlRG93bih5LCBidWZmZXIpO1xuICAgICAgICB0ZXh0SGVpZ2h0ICs9IGJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgcHVibGljIGtleSBpZiBleGlzdHNcbiAgICBpZiAocXIucHVibGljTWFzdGVyS2V5KSB7XG4gICAgICBjb25zdCB0ZXh0ID0gJ0tleSBJZDogJyArIHFyLnB1YmxpY01hc3RlcktleTtcblxuICAgICAgLy8gR3JheSBiYXJcbiAgICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gICAgICB0ZXh0SGVpZ2h0ICs9IDIwO1xuICAgICAgZG9jLnNldEZpbGxDb2xvcigyNDcsIDI0OSwgMjQ5KTsgLy8gR3JheSBiYWNrZ3JvdW5kXG4gICAgICBkb2Muc2V0RHJhd0NvbG9yKDAsIDAsIDApOyAvLyBCb3JkZXJcblxuICAgICAgLy8gTGVhdmUgYSBiaXQgb2Ygc3BhY2UgZm9yIHRoZSBzaWRlIG9mIHRoZSByZWN0YW5nbGUuXG4gICAgICBjb25zdCBzcGxpdEtleUlkID0gZG9jLnNwbGl0VGV4dFRvU2l6ZSh0ZXh0LCB3aWR0aCAtIDEwKTtcblxuICAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgYm94IG11c3QgYmUgYXQgbGVhc3QgMTUgcHggKGZvciBzaW5nbGUgbGluZSBjYXNlKSwgb3JcbiAgICAgIC8vIGEgbXVsdGlwbGUgb2YgMTMgZm9yIGVhY2ggbGluZS4gIFRoaXMgYWxsb3dzIGZvciBwcm9wZXIgcGFkZGluZy5cbiAgICAgIGRvYy5yZWN0KHRleHRMZWZ0LCB5LCB3aWR0aCwgTWF0aC5tYXgoMTIgKiBzcGxpdEtleUlkLmxlbmd0aCwgMTUpLCAnRkQnKTtcbiAgICAgIHRleHRIZWlnaHQgKz0gc3BsaXRLZXlJZC5sZW5ndGggKiBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgICAgZG9jLnRleHQoc3BsaXRLZXlJZCwgdGV4dExlZnQgKyA1LCB5ICsgMTApO1xuICAgIH1cblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcbiAgICAvLyBNb3ZlIGRvd24gcGFzdCB0aGUgdGFsbGVyIG9mIHRoZSB0d28gY29sdW1uczogdGhlIHJpZ2h0LXNpZGUgdGV4dCAodGV4dEhlaWdodCkgb3IgdGhlXG4gICAgLy8gbGVmdC1zaWRlIFFSIGNvbHVtbiAocGx1cyB0aGUgbm90ZSBwcmludGVkIHVuZGVyIGl0IGZvciBzcGxpdCBrZXlzKSwgdGhlbiBhZGQgYSBtYXJnaW4uXG4gICAgY29uc3QgcXJDb2x1bW5IZWlnaHQgPSBpc011bHRpUGFydCA/IHFyQ29sdW1uQm90dG9tIC0gdG9wWSA6IHFyU2l6ZTtcbiAgICBjb25zdCByb3dIZWlnaHQgPSBNYXRoLm1heChxckNvbHVtbkhlaWdodCwgdGV4dEhlaWdodCk7XG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XG4gICAgeSA9IG1vdmVEb3duKHksIHJvd0hlaWdodCAtICh5IC0gdG9wWSkgKyBtYXJnaW5Cb3R0b20pO1xuICB9XG5cbiAgLy8gQWRkIG5leHQgUGFnZVxuICBkb2MuYWRkUGFnZSgpO1xuXG4gIC8vIG5leHQgcGFnZXMgdGl0bGVcbiAgeSA9IDA7XG4gIHkgPSBtb3ZlRG93bih5LCA1NSk7XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgZG9jLnRleHQoJ0JpdEdvIEtleUNhcmQgRkFRJywgbGVmdCgwKSwgeSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIHNlY29uZCBwYWdlJ3MgZGF0YSBmb3IgdGhlIGJhY2t1cCBQREZcbiAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgcXVlc3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgZG9jLnRleHQocS5xdWVzdGlvbiwgbGVmdCgwKSwgeSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuZGFya2dyYXkpO1xuICAgIHEuYW5zd2VyLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGRvYy50ZXh0KGxpbmUsIGxlZnQoMCksIHkpO1xuICAgICAgeSA9IG1vdmVEb3duKHksIGZvbnQuYm9keSArIDMpO1xuICAgIH0pO1xuICAgIHkgPSBtb3ZlRG93bih5LCAyMik7XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG4iXX0=
@@ -1,10 +1,10 @@
1
- import { GenerateLightningQrDataParams, GenerateQrDataParams, GenerateVaultQrDataParams, QrData } from './types';
1
+ import { GenerateLightningQrDataParams, GenerateQrDataParams, GenerateSafeQrDataParams, QrData } from './types';
2
2
  export declare function generateQrData(params: GenerateQrDataParams): Promise<QrData>;
3
3
  export declare function generateLightningQrData(params: GenerateLightningQrDataParams): Promise<QrData>;
4
4
  /**
5
- * Builds vault keycard QR data in the existing wallet {@link QrData} shape: boxes A (user),
5
+ * Builds safe keycard QR data in the existing wallet {@link QrData} shape: boxes A (user),
6
6
  * B (backup), C (BitGo), D (passcode). Each of A/B/C carries a JSON object of the four roots,
7
- * so the vault renders and parses through the same {@link drawKeycard} path as a wallet.
7
+ * so the safe renders and parses through the same {@link drawKeycard} path as a wallet.
8
8
  */
9
- export declare function generateVaultQrData(params: GenerateVaultQrDataParams): Promise<QrData>;
9
+ export declare function generateSafeQrData(params: GenerateSafeQrDataParams): Promise<QrData>;
10
10
  //# sourceMappingURL=generateQrData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,yBAAyB,EAEzB,MAAM,EAKP,MAAM,SAAS,CAAC;AAoLjB,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpG;AAmCD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B5F"}
1
+ {"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EAGxB,MAAM,EAKP,MAAM,SAAS,CAAC;AAsLjB,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpG;AAmCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B1F"}
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.generateQrData = generateQrData;
37
37
  exports.generateLightningQrData = generateLightningQrData;
38
- exports.generateVaultQrData = generateVaultQrData;
38
+ exports.generateSafeQrData = generateSafeQrData;
39
39
  const sdk_api_1 = require("@bitgo-beta/sdk-api");
40
40
  const assert = __importStar(require("assert"));
41
41
  const types_1 = require("./types");
@@ -132,12 +132,13 @@ function generateUserMasterPublicKeyQRData(publicKey) {
132
132
  data: publicKey,
133
133
  };
134
134
  }
135
- async function generatePasscodeQrData(passphrase, passcodeEncryptionCode, encryptionVersion) {
136
- const encryptedWalletPasscode = await (0, sdk_api_1.encrypt)(passcodeEncryptionCode, passphrase, { encryptionVersion });
135
+ async function generatePasscodeQrData(passphrase, passcodeEncryptionCode, encryptionVersion, entityNoun = 'wallet') {
136
+ const encryptedPasscode = await (0, sdk_api_1.encrypt)(passcodeEncryptionCode, passphrase, { encryptionVersion });
137
+ const titleNoun = entityNoun === 'safe' ? 'Safe' : 'Wallet';
137
138
  return {
138
- title: 'D: Encrypted Wallet Password',
139
- description: 'This is the wallet password, encrypted client-side with a key held by BitGo.',
140
- data: encryptedWalletPasscode,
139
+ title: `D: Encrypted ${titleNoun} Password`,
140
+ description: `This is the ${entityNoun} password, encrypted client-side with a key held by BitGo.`,
141
+ data: encryptedPasscode,
141
142
  };
142
143
  }
143
144
  function generateBackupMasterPublicKeyQRData(publicKey) {
@@ -188,57 +189,57 @@ async function generateLightningQrData(params) {
188
189
  function selectRootPrivateKey(keychain, slot, role) {
189
190
  // Prefer the compact MPCv2 reduced share; fall back to encryptedPrv (e.g. multisig roots).
190
191
  const data = keychain.reducedEncryptedPrv ?? keychain.encryptedPrv;
191
- assert.ok(data, `Vault ${role} root ${slot} is missing encrypted private key material`);
192
+ assert.ok(data, `Safe ${role} root ${slot} is missing encrypted private key material`);
192
193
  return data;
193
194
  }
194
195
  function selectRootPublicKey(keychain, slot) {
195
196
  const pub = getPubFromKey(keychain);
196
- assert.ok(pub, `Vault BitGo root ${slot} is missing a public key`);
197
+ assert.ok(pub, `Safe BitGo root ${slot} is missing a public key`);
197
198
  return pub;
198
199
  }
199
200
  /**
200
201
  * Serializes one box's four roots into a single JSON object keyed by rootKeyType, e.g.
201
- * `{"secp256k1Multisig":"<encPrv>","ecdsaMpc":"<reducedEncPrv>",...}`. This keeps the vault
202
+ * `{"secp256k1Multisig":"<encPrv>","ecdsaMpc":"<reducedEncPrv>",...}`. This keeps the safe
202
203
  * keycard on the existing 4-box layout — one box (= one QR/data block) per role — with the
203
204
  * four roots packed into each box's data. `splitKeys` fragments the box if it exceeds the QR
204
- * threshold, exactly as for a normal wallet keycard. Reversed by {@link parseVaultKeycardBox}.
205
+ * threshold, exactly as for a normal wallet keycard. Reversed by {@link parseSafeKeycardBox}.
205
206
  */
206
- function buildVaultBoxData(roots, select) {
207
+ function buildSafeBoxData(roots, select) {
207
208
  const box = {};
208
- for (const slot of types_1.VAULT_ROOT_ORDER) {
209
+ for (const slot of types_1.SAFE_ROOT_ORDER) {
209
210
  const root = roots[slot];
210
- assert.ok(root, `Vault is missing the ${slot} root`);
211
+ assert.ok(root, `Safe is missing the ${slot} root`);
211
212
  box[slot] = select(root, slot);
212
213
  }
213
214
  return JSON.stringify(box);
214
215
  }
215
216
  /**
216
- * Builds vault keycard QR data in the existing wallet {@link QrData} shape: boxes A (user),
217
+ * Builds safe keycard QR data in the existing wallet {@link QrData} shape: boxes A (user),
217
218
  * B (backup), C (BitGo), D (passcode). Each of A/B/C carries a JSON object of the four roots,
218
- * so the vault renders and parses through the same {@link drawKeycard} path as a wallet.
219
+ * so the safe renders and parses through the same {@link drawKeycard} path as a wallet.
219
220
  */
220
- async function generateVaultQrData(params) {
221
+ async function generateSafeQrData(params) {
221
222
  const { roots } = params;
222
223
  const qrData = {
223
224
  user: {
224
225
  title: 'A: User Key',
225
- description: 'Your 4 root private keys, encrypted with your wallet password.',
226
- data: buildVaultBoxData(roots, (root, slot) => selectRootPrivateKey(root.userKeychain, slot, 'user')),
226
+ description: 'Your 4 root private keys, encrypted with your safe password.',
227
+ data: buildSafeBoxData(roots, (root, slot) => selectRootPrivateKey(root.userKeychain, slot, 'user')),
227
228
  },
228
229
  backup: {
229
230
  title: 'B: Backup Key',
230
- description: 'Your 4 root backup keys, encrypted with your wallet password.',
231
- data: buildVaultBoxData(roots, (root, slot) => selectRootPrivateKey(root.backupKeychain, slot, 'backup')),
231
+ description: 'Your 4 root backup keys, encrypted with your safe password.',
232
+ data: buildSafeBoxData(roots, (root, slot) => selectRootPrivateKey(root.backupKeychain, slot, 'backup')),
232
233
  },
233
234
  bitgo: {
234
235
  title: 'C: BitGo Key',
235
236
  description: 'The public parts of the 4 root keys held by BitGo.',
236
- data: buildVaultBoxData(roots, (root, slot) => selectRootPublicKey(root.bitgoKeychain, slot)),
237
+ data: buildSafeBoxData(roots, (root, slot) => selectRootPublicKey(root.bitgoKeychain, slot)),
237
238
  },
238
239
  };
239
240
  if (params.passphrase && params.passcodeEncryptionCode) {
240
- qrData.passcode = await generatePasscodeQrData(params.passphrase, params.passcodeEncryptionCode, params.encryptionVersion);
241
+ qrData.passcode = await generatePasscodeQrData(params.passphrase, params.passcodeEncryptionCode, params.encryptionVersion, 'safe');
241
242
  }
242
243
  return qrData;
243
244
  }
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrTUEsd0NBWUM7QUFFRCwwREFZQztBQXdDRCxrREE2QkM7QUEvUkQsaURBQThDO0FBQzlDLCtDQUFpQztBQUNqQyxtQ0FVaUI7QUFFakIsU0FBUyxhQUFhLENBQUMsR0FBYTtJQUNsQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLEtBQUssYUFBYTtZQUNoQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFlBQXNCLEVBQUUsYUFBc0I7SUFDeEUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLGdFQUFnRTtZQUM3RSxJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQjtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsZ0VBQWdFO1lBQzdFLElBQUksRUFBRSxZQUFZLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsT0FBTztRQUNMLEtBQUssRUFBRSxzQkFBc0I7UUFD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b0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDMUc7UUFDRCxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUUsY0FBYztZQUNyQixXQUFXLEVBQUUsb0RBQW9EO1lBQ2pFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlGO0tBQ0YsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQzVDLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxzQkFBc0IsRUFDN0IsTUFBTSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5Y2hhaW4sIEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBlbmNyeXB0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zLFxuICBHZW5lcmF0ZVFyRGF0YVBhcmFtcyxcbiAgR2VuZXJhdGVWYXVsdFFyRGF0YVBhcmFtcyxcbiAgTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnksXG4gIFFyRGF0YSxcbiAgUXJEYXRhRW50cnksXG4gIFZhdWx0S2V5Y2FyZFJvb3RzLFxuICBWYXVsdFJvb3RLZXlUeXBlLFxuICBWQVVMVF9ST09UX09SREVSLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0UHViRnJvbUtleShrZXk6IEtleWNoYWluKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgIGNhc2UgJ2Jsc2RrZyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vblB1YjtcbiAgICBjYXNlICd0c3MnOlxuICAgICAgcmV0dXJuIGtleS5jb21tb25LZXljaGFpbjtcbiAgICBjYXNlICdpbmRlcGVuZGVudCc6XG4gICAgICByZXR1cm4ga2V5LnB1YjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVzZXJRckRhdGEodXNlcktleWNoYWluOiBLZXljaGFpbiwgdXNlck1hc3RlcktleT86IHN0cmluZyk6IFFyRGF0YUVudHJ5IHtcbiAgaWYgKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KHVzZXJLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdBOiBQcm92aWRlZCBVc2VyIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiB1c2VyTWFzdGVyS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShcbiAgY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LFxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4sXG4gIHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICBiYWNrdXBNYXN0ZXJLZXksXG4gIH06IHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcj86IHN0cmluZztcbiAgICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUXJEYXRhRW50cnkge1xuICBjb25zdCB0aXRsZSA9ICdCOiBCYWNrdXAgS2V5JztcbiAgaWYgKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cbiAgaWYgKGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIGJhY2t1cCBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuJyxcbiAgICAgIGRhdGE6IGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGJhY2t1cEtleVByb3ZpZGVyID09PSAnQml0R28gVHJ1c3QnICYmIGJhY2t1cEtleWNoYWluLnR5cGUgPT09ICd0c3MnKSB7XG4gICAgY29uc3Qga2V5U2hhcmVzID0gYmFja3VwS2V5Y2hhaW4ua2V5U2hhcmVzPy5maWx0ZXIoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGFzc2VydC5vayhrZXlTaGFyZXM/Lmxlbmd0aCA9PT0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQjogQmFja3VwIEtleSBTaGFyZXMnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGVzZSBhcmUgdGhlIGtleSBzaGFyZXMgZm9yICR7YmFja3VwS2V5UHJvdmlkZXJ9LiBJZiBCaXRHbyBJbmMuIGdvZXMgb3V0IG9mIGJ1c2luZXNzLFxcclxcbmAgK1xuICAgICAgICBgY29udGFjdCAke2JhY2t1cEtleVByb3ZpZGVyfSBhbmQgdGhleSB3aWxsIGhlbHAgeW91IHJlY292ZXIgeW91ciBmdW5kcy5gLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoa2V5U2hhcmVzKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleShiYWNrdXBLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlcikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGlzIGlzIHRoZSBwdWJsaWMga2V5IGhlbGQgYXQgJHtiYWNrdXBLZXlQcm92aWRlcn0sIGFuICR7Y29pbi5uYW1lfSByZWNvdmVyeSBzZXJ2aWNlLiBgICtcbiAgICAgICAgYElmIHlvdSBsb3NlXFxyXFxueW91ciBrZXksICR7YmFja3VwS2V5UHJvdmlkZXJ9IHdpbGwgYmUgYWJsZSB0byBzaWduIHRyYW5zYWN0aW9ucyB0byByZWNvdmVyIGZ1bmRzLmAsXG4gICAgICBkYXRhOiBwdWIsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdCOiBQcm92aWRlZCBCYWNrdXAgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgeW91IHByb3ZpZGVkIGZvciB5b3VyIHdhbGxldC4nLFxuICAgIGRhdGE6IHB1YixcbiAgICBwdWJsaWNNYXN0ZXJLZXk6IGJhY2t1cE1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluOiBLZXljaGFpbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgYml0Z29EYXRhID0gZ2V0UHViRnJvbUtleShiaXRnb0tleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvRGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0M6IEJpdEdvIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUga2V5IGhlbGQgYnkgQml0R28uJyxcbiAgICBkYXRhOiBiaXRnb0RhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YShwdWJsaWNLZXk6IHN0cmluZyk6IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0U6IE1hc3RlciBVc2VyIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIHVzZXIga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGFzc2NvZGVRckRhdGEoXG4gIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nLFxuICBlbmNyeXB0aW9uVmVyc2lvbj86IDEgfCAyXG4pOiBQcm9taXNlPFFyRGF0YUVudHJ5PiB7XG4gIGNvbnN0IGVuY3J5cHRlZFdhbGxldFBhc3Njb2RlID0gYXdhaXQgZW5jcnlwdChwYXNzY29kZUVuY3J5cHRpb25Db2RlLCBwYXNzcGhyYXNlLCB7IGVuY3J5cHRpb25WZXJzaW9uIH0pO1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRDogRW5jcnlwdGVkIFdhbGxldCBQYXNzd29yZCcsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSB3YWxsZXQgcGFzc3dvcmQsIGVuY3J5cHRlZCBjbGllbnQtc2lkZSB3aXRoIGEga2V5IGhlbGQgYnkgQml0R28uJyxcbiAgICBkYXRhOiBlbmNyeXB0ZWRXYWxsZXRQYXNzY29kZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCYWNrdXBNYXN0ZXJQdWJsaWNLZXlRUkRhdGEocHVibGljS2V5OiBzdHJpbmcpOiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdGOiBNYXN0ZXIgQmFja3VwIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIGJhY2t1cCBrZXkgZm9yIHRoZSB3YWxsZXQuIFRoaXMgaXMgbm90IHN0b3JlZCBieSBCaXRHbywgYW5kIG1heSBiZSByZXF1aXJlZCBmb3IgdXNlIGluIHJlY292ZXJ5IHNjZW5hcmlvcy4nLFxuICAgIGRhdGE6IHB1YmxpY0tleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRXYWxsZXRRckRhdGEoe1xuICBiYWNrdXBLZXljaGFpbixcbiAgYmFja3VwS2V5UHJvdmlkZXIsXG4gIGJhY2t1cE1hc3RlcktleSxcbiAgYml0Z29LZXljaGFpbixcbiAgY29pbixcbiAgdXNlcktleWNoYWluLFxuICB1c2VyTWFzdGVyS2V5LFxuICB1c2VyTWFzdGVyUHVibGljS2V5LFxuICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXksXG59OiBHZW5lcmF0ZVFyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIHJldHVybiB7XG4gICAgdXNlcjogZ2VuZXJhdGVVc2VyUXJEYXRhKHVzZXJLZXljaGFpbiwgdXNlck1hc3RlcktleSksXG4gICAgdXNlck1hc3RlclB1YmxpY0tleTogdXNlck1hc3RlclB1YmxpY0tleSA/IGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YSh1c2VyTWFzdGVyUHVibGljS2V5KSA6IHVuZGVmaW5lZCxcbiAgICBiYWNrdXA6IGdlbmVyYXRlQmFja3VwUXJEYXRhKGNvaW4sIGJhY2t1cEtleWNoYWluLCB7XG4gICAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICAgIGJhY2t1cE1hc3RlcktleSxcbiAgICB9KSxcbiAgICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXk6IGJhY2t1cE1hc3RlclB1YmxpY0tleVxuICAgICAgPyBnZW5lcmF0ZUJhY2t1cE1hc3RlclB1YmxpY0tleVFSRGF0YShiYWNrdXBNYXN0ZXJQdWJsaWNLZXkpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBiaXRnbzogZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRMaWdodG5pbmdRckRhdGEoeyB1c2VyQXV0aEtleWNoYWluIH06IEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zKTogUXJEYXRhIHtcbiAgYXNzZXJ0Lm9rKHVzZXJBdXRoS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LCAndXNlckF1dGhLZXljaGFpbiBtdXN0IGhhdmUgYW4gZW5jcnlwdGVkUHJ2Jyk7XG5cbiAgcmV0dXJuIHtcbiAgICB1c2VyOiB7XG4gICAgICB0aXRsZTogJ0E6IFVzZXIgQXV0aCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdUaGlzIGlzIHlvdXIgdXNlciBhdXRoZW50aWNhdGlvbiBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuXFxyXFxuSXQgaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgcGF5bWVudCBhbmQgd2FsbGV0IG9wZXJhdGlvbnMuJyxcbiAgICAgIGRhdGE6IHVzZXJBdXRoS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVFyRGF0YShwYXJhbXM6IEdlbmVyYXRlUXJEYXRhUGFyYW1zKTogUHJvbWlzZTxRckRhdGE+IHtcbiAgY29uc3QgcXJEYXRhID0gYnVpbGRXYWxsZXRRckRhdGEocGFyYW1zKTtcblxuICBpZiAocGFyYW1zLnBhc3NwaHJhc2UgJiYgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUpIHtcbiAgICBxckRhdGEucGFzc2NvZGUgPSBhd2FpdCBnZW5lcmF0ZVBhc3Njb2RlUXJEYXRhKFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvblxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcXJEYXRhO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWdodG5pbmdRckRhdGEocGFyYW1zOiBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk6IFByb21pc2U8UXJEYXRhPiB7XG4gIGNvbnN0IHFyRGF0YSA9IGJ1aWxkTGlnaHRuaW5nUXJEYXRhKHBhcmFtcyk7XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gYXdhaXQgZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0Um9vdFByaXZhdGVLZXkoa2V5Y2hhaW46IEtleWNoYWluLCBzbG90OiBWYXVsdFJvb3RLZXlUeXBlLCByb2xlOiAndXNlcicgfCAnYmFja3VwJyk6IHN0cmluZyB7XG4gIC8vIFByZWZlciB0aGUgY29tcGFjdCBNUEN2MiByZWR1Y2VkIHNoYXJlOyBmYWxsIGJhY2sgdG8gZW5jcnlwdGVkUHJ2IChlLmcuIG11bHRpc2lnIHJvb3RzKS5cbiAgY29uc3QgZGF0YSA9IGtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYgPz8ga2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICBhc3NlcnQub2soZGF0YSwgYFZhdWx0ICR7cm9sZX0gcm9vdCAke3Nsb3R9IGlzIG1pc3NpbmcgZW5jcnlwdGVkIHByaXZhdGUga2V5IG1hdGVyaWFsYCk7XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RSb290UHVibGljS2V5KGtleWNoYWluOiBLZXljaGFpbiwgc2xvdDogVmF1bHRSb290S2V5VHlwZSk6IHN0cmluZyB7XG4gIGNvbnN0IHB1YiA9IGdldFB1YkZyb21LZXkoa2V5Y2hhaW4pO1xuICBhc3NlcnQub2socHViLCBgVmF1bHQgQml0R28gcm9vdCAke3Nsb3R9IGlzIG1pc3NpbmcgYSBwdWJsaWMga2V5YCk7XG4gIHJldHVybiBwdWI7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBvbmUgYm94J3MgZm91ciByb290cyBpbnRvIGEgc2luZ2xlIEpTT04gb2JqZWN0IGtleWVkIGJ5IHJvb3RLZXlUeXBlLCBlLmcuXG4gKiBge1wic2VjcDI1NmsxTXVsdGlzaWdcIjpcIjxlbmNQcnY+XCIsXCJlY2RzYU1wY1wiOlwiPHJlZHVjZWRFbmNQcnY+XCIsLi4ufWAuIFRoaXMga2VlcHMgdGhlIHZhdWx0XG4gKiBrZXljYXJkIG9uIHRoZSBleGlzdGluZyA0LWJveCBsYXlvdXQg4oCUIG9uZSBib3ggKD0gb25lIFFSL2RhdGEgYmxvY2spIHBlciByb2xlIOKAlCB3aXRoIHRoZVxuICogZm91ciByb290cyBwYWNrZWQgaW50byBlYWNoIGJveCdzIGRhdGEuIGBzcGxpdEtleXNgIGZyYWdtZW50cyB0aGUgYm94IGlmIGl0IGV4Y2VlZHMgdGhlIFFSXG4gKiB0aHJlc2hvbGQsIGV4YWN0bHkgYXMgZm9yIGEgbm9ybWFsIHdhbGxldCBrZXljYXJkLiBSZXZlcnNlZCBieSB7QGxpbmsgcGFyc2VWYXVsdEtleWNhcmRCb3h9LlxuICovXG5mdW5jdGlvbiBidWlsZFZhdWx0Qm94RGF0YShcbiAgcm9vdHM6IFJlY29yZDxWYXVsdFJvb3RLZXlUeXBlLCBLZXljaGFpbnNUcmlwbGV0PixcbiAgc2VsZWN0OiAocm9vdDogS2V5Y2hhaW5zVHJpcGxldCwgc2xvdDogVmF1bHRSb290S2V5VHlwZSkgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBib3g6IFZhdWx0S2V5Y2FyZFJvb3RzID0ge30gYXMgVmF1bHRLZXljYXJkUm9vdHM7XG4gIGZvciAoY29uc3Qgc2xvdCBvZiBWQVVMVF9ST09UX09SREVSKSB7XG4gICAgY29uc3Qgcm9vdCA9IHJvb3RzW3Nsb3RdO1xuICAgIGFzc2VydC5vayhyb290LCBgVmF1bHQgaXMgbWlzc2luZyB0aGUgJHtzbG90fSByb290YCk7XG4gICAgYm94W3Nsb3RdID0gc2VsZWN0KHJvb3QsIHNsb3QpO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShib3gpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB2YXVsdCBrZXljYXJkIFFSIGRhdGEgaW4gdGhlIGV4aXN0aW5nIHdhbGxldCB7QGxpbmsgUXJEYXRhfSBzaGFwZTogYm94ZXMgQSAodXNlciksXG4gKiBCIChiYWNrdXApLCBDIChCaXRHbyksIEQgKHBhc3Njb2RlKS4gRWFjaCBvZiBBL0IvQyBjYXJyaWVzIGEgSlNPTiBvYmplY3Qgb2YgdGhlIGZvdXIgcm9vdHMsXG4gKiBzbyB0aGUgdmF1bHQgcmVuZGVycyBhbmQgcGFyc2VzIHRocm91Z2ggdGhlIHNhbWUge0BsaW5rIGRyYXdLZXljYXJkfSBwYXRoIGFzIGEgd2FsbGV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVWYXVsdFFyRGF0YShwYXJhbXM6IEdlbmVyYXRlVmF1bHRRckRhdGFQYXJhbXMpOiBQcm9taXNlPFFyRGF0YT4ge1xuICBjb25zdCB7IHJvb3RzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHFyRGF0YTogUXJEYXRhID0ge1xuICAgIHVzZXI6IHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdZb3VyIDQgcm9vdCBwcml2YXRlIGtleXMsIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFZhdWx0Qm94RGF0YShyb290cywgKHJvb3QsIHNsb3QpID0+IHNlbGVjdFJvb3RQcml2YXRlS2V5KHJvb3QudXNlcktleWNoYWluLCBzbG90LCAndXNlcicpKSxcbiAgICB9LFxuICAgIGJhY2t1cDoge1xuICAgICAgdGl0bGU6ICdCOiBCYWNrdXAgS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnWW91ciA0IHJvb3QgYmFja3VwIGtleXMsIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFZhdWx0Qm94RGF0YShyb290cywgKHJvb3QsIHNsb3QpID0+IHNlbGVjdFJvb3RQcml2YXRlS2V5KHJvb3QuYmFja3VwS2V5Y2hhaW4sIHNsb3QsICdiYWNrdXAnKSksXG4gICAgfSxcbiAgICBiaXRnbzoge1xuICAgICAgdGl0bGU6ICdDOiBCaXRHbyBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGUgcHVibGljIHBhcnRzIG9mIHRoZSA0IHJvb3Qga2V5cyBoZWxkIGJ5IEJpdEdvLicsXG4gICAgICBkYXRhOiBidWlsZFZhdWx0Qm94RGF0YShyb290cywgKHJvb3QsIHNsb3QpID0+IHNlbGVjdFJvb3RQdWJsaWNLZXkocm9vdC5iaXRnb0tleWNoYWluLCBzbG90KSksXG4gICAgfSxcbiAgfTtcblxuICBpZiAocGFyYW1zLnBhc3NwaHJhc2UgJiYgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUpIHtcbiAgICBxckRhdGEucGFzc2NvZGUgPSBhd2FpdCBnZW5lcmF0ZVBhc3Njb2RlUXJEYXRhKFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvblxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcXJEYXRhO1xufVxuIl19
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxTUEsd0NBWUM7QUFFRCwwREFZQztBQXdDRCxnREE4QkM7QUFuU0QsaURBQThDO0FBQzlDLCtDQUFpQztBQUNqQyxtQ0FXaUI7QUFFakIsU0FBUyxhQUFhLENBQUMsR0FBYTtJQUNsQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLEtBQUssYUFBYTtZQUNoQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFlBQXNCLEVBQUUsYUFBc0I7SUFDeEUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLGdFQUFnRTtZQUM3RSxJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQjtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsZ0VBQWdFO1lBQzdFLElBQUksRUFBRSxZQUFZLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsT0FBTztRQUNMLEtBQUssRUFBRSxzQkFBc0I7UUFD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O1lBQ04sS0FBSyxFQUFFLGVBQWU7WUFDdEIsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDekc7UUFDRCxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUUsY0FBYztZQUNyQixXQUFXLEVBQUUsb0RBQW9EO1lBQ2pFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdGO0tBQ0YsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQzVDLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxzQkFBc0IsRUFDN0IsTUFBTSxDQUFDLGlCQUFpQixFQUN4QixNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEtleWNoYWluLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZW5jcnlwdCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyxcbiAgR2VuZXJhdGVRckRhdGFQYXJhbXMsXG4gIEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyxcbiAgS2V5Y2FyZEVudGl0eSxcbiAgTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnksXG4gIFFyRGF0YSxcbiAgUXJEYXRhRW50cnksXG4gIFNhZmVLZXljYXJkUm9vdHMsXG4gIFNhZmVSb290S2V5VHlwZSxcbiAgU0FGRV9ST09UX09SREVSLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0UHViRnJvbUtleShrZXk6IEtleWNoYWluKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgIGNhc2UgJ2Jsc2RrZyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vblB1YjtcbiAgICBjYXNlICd0c3MnOlxuICAgICAgcmV0dXJuIGtleS5jb21tb25LZXljaGFpbjtcbiAgICBjYXNlICdpbmRlcGVuZGVudCc6XG4gICAgICByZXR1cm4ga2V5LnB1YjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVzZXJRckRhdGEodXNlcktleWNoYWluOiBLZXljaGFpbiwgdXNlck1hc3RlcktleT86IHN0cmluZyk6IFFyRGF0YUVudHJ5IHtcbiAgaWYgKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KHVzZXJLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdBOiBQcm92aWRlZCBVc2VyIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiB1c2VyTWFzdGVyS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShcbiAgY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LFxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4sXG4gIHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICBiYWNrdXBNYXN0ZXJLZXksXG4gIH06IHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcj86IHN0cmluZztcbiAgICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUXJEYXRhRW50cnkge1xuICBjb25zdCB0aXRsZSA9ICdCOiBCYWNrdXAgS2V5JztcbiAgaWYgKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cbiAgaWYgKGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIGJhY2t1cCBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuJyxcbiAgICAgIGRhdGE6IGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGJhY2t1cEtleVByb3ZpZGVyID09PSAnQml0R28gVHJ1c3QnICYmIGJhY2t1cEtleWNoYWluLnR5cGUgPT09ICd0c3MnKSB7XG4gICAgY29uc3Qga2V5U2hhcmVzID0gYmFja3VwS2V5Y2hhaW4ua2V5U2hhcmVzPy5maWx0ZXIoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGFzc2VydC5vayhrZXlTaGFyZXM/Lmxlbmd0aCA9PT0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQjogQmFja3VwIEtleSBTaGFyZXMnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGVzZSBhcmUgdGhlIGtleSBzaGFyZXMgZm9yICR7YmFja3VwS2V5UHJvdmlkZXJ9LiBJZiBCaXRHbyBJbmMuIGdvZXMgb3V0IG9mIGJ1c2luZXNzLFxcclxcbmAgK1xuICAgICAgICBgY29udGFjdCAke2JhY2t1cEtleVByb3ZpZGVyfSBhbmQgdGhleSB3aWxsIGhlbHAgeW91IHJlY292ZXIgeW91ciBmdW5kcy5gLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoa2V5U2hhcmVzKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleShiYWNrdXBLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlcikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGlzIGlzIHRoZSBwdWJsaWMga2V5IGhlbGQgYXQgJHtiYWNrdXBLZXlQcm92aWRlcn0sIGFuICR7Y29pbi5uYW1lfSByZWNvdmVyeSBzZXJ2aWNlLiBgICtcbiAgICAgICAgYElmIHlvdSBsb3NlXFxyXFxueW91ciBrZXksICR7YmFja3VwS2V5UHJvdmlkZXJ9IHdpbGwgYmUgYWJsZSB0byBzaWduIHRyYW5zYWN0aW9ucyB0byByZWNvdmVyIGZ1bmRzLmAsXG4gICAgICBkYXRhOiBwdWIsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdCOiBQcm92aWRlZCBCYWNrdXAgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgeW91IHByb3ZpZGVkIGZvciB5b3VyIHdhbGxldC4nLFxuICAgIGRhdGE6IHB1YixcbiAgICBwdWJsaWNNYXN0ZXJLZXk6IGJhY2t1cE1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluOiBLZXljaGFpbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgYml0Z29EYXRhID0gZ2V0UHViRnJvbUtleShiaXRnb0tleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvRGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0M6IEJpdEdvIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUga2V5IGhlbGQgYnkgQml0R28uJyxcbiAgICBkYXRhOiBiaXRnb0RhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YShwdWJsaWNLZXk6IHN0cmluZyk6IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0U6IE1hc3RlciBVc2VyIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIHVzZXIga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGFzc2NvZGVRckRhdGEoXG4gIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nLFxuICBlbmNyeXB0aW9uVmVyc2lvbj86IDEgfCAyLFxuICBlbnRpdHlOb3VuOiBLZXljYXJkRW50aXR5ID0gJ3dhbGxldCdcbik6IFByb21pc2U8UXJEYXRhRW50cnk+IHtcbiAgY29uc3QgZW5jcnlwdGVkUGFzc2NvZGUgPSBhd2FpdCBlbmNyeXB0KHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsIHBhc3NwaHJhc2UsIHsgZW5jcnlwdGlvblZlcnNpb24gfSk7XG4gIGNvbnN0IHRpdGxlTm91biA9IGVudGl0eU5vdW4gPT09ICdzYWZlJyA/ICdTYWZlJyA6ICdXYWxsZXQnO1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiBgRDogRW5jcnlwdGVkICR7dGl0bGVOb3VufSBQYXNzd29yZGAsXG4gICAgZGVzY3JpcHRpb246IGBUaGlzIGlzIHRoZSAke2VudGl0eU5vdW59IHBhc3N3b3JkLCBlbmNyeXB0ZWQgY2xpZW50LXNpZGUgd2l0aCBhIGtleSBoZWxkIGJ5IEJpdEdvLmAsXG4gICAgZGF0YTogZW5jcnlwdGVkUGFzc2NvZGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmFja3VwTWFzdGVyUHVibGljS2V5UVJEYXRhKHB1YmxpY0tleTogc3RyaW5nKTogTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRjogTWFzdGVyIEJhY2t1cCBQdWJsaWMgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHVzZWQgdG8gZGVyaXZlIHRoZSBiYWNrdXAga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2FsbGV0UXJEYXRhKHtcbiAgYmFja3VwS2V5Y2hhaW4sXG4gIGJhY2t1cEtleVByb3ZpZGVyLFxuICBiYWNrdXBNYXN0ZXJLZXksXG4gIGJpdGdvS2V5Y2hhaW4sXG4gIGNvaW4sXG4gIHVzZXJLZXljaGFpbixcbiAgdXNlck1hc3RlcktleSxcbiAgdXNlck1hc3RlclB1YmxpY0tleSxcbiAgYmFja3VwTWFzdGVyUHVibGljS2V5LFxufTogR2VuZXJhdGVRckRhdGFQYXJhbXMpOiBRckRhdGEge1xuICByZXR1cm4ge1xuICAgIHVzZXI6IGdlbmVyYXRlVXNlclFyRGF0YSh1c2VyS2V5Y2hhaW4sIHVzZXJNYXN0ZXJLZXkpLFxuICAgIHVzZXJNYXN0ZXJQdWJsaWNLZXk6IHVzZXJNYXN0ZXJQdWJsaWNLZXkgPyBnZW5lcmF0ZVVzZXJNYXN0ZXJQdWJsaWNLZXlRUkRhdGEodXNlck1hc3RlclB1YmxpY0tleSkgOiB1bmRlZmluZWQsXG4gICAgYmFja3VwOiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShjb2luLCBiYWNrdXBLZXljaGFpbiwge1xuICAgICAgYmFja3VwS2V5UHJvdmlkZXIsXG4gICAgICBiYWNrdXBNYXN0ZXJLZXksXG4gICAgfSksXG4gICAgYmFja3VwTWFzdGVyUHVibGljS2V5OiBiYWNrdXBNYXN0ZXJQdWJsaWNLZXlcbiAgICAgID8gZ2VuZXJhdGVCYWNrdXBNYXN0ZXJQdWJsaWNLZXlRUkRhdGEoYmFja3VwTWFzdGVyUHVibGljS2V5KVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgYml0Z286IGdlbmVyYXRlQml0R29RckRhdGEoYml0Z29LZXljaGFpbiksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGlnaHRuaW5nUXJEYXRhKHsgdXNlckF1dGhLZXljaGFpbiB9OiBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIGFzc2VydC5vayh1c2VyQXV0aEtleWNoYWluLmVuY3J5cHRlZFBydiwgJ3VzZXJBdXRoS2V5Y2hhaW4gbXVzdCBoYXZlIGFuIGVuY3J5cHRlZFBydicpO1xuXG4gIHJldHVybiB7XG4gICAgdXNlcjoge1xuICAgICAgdGl0bGU6ICdBOiBVc2VyIEF1dGggS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVGhpcyBpcyB5b3VyIHVzZXIgYXV0aGVudGljYXRpb24gcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLlxcclxcbkl0IGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHBheW1lbnQgYW5kIHdhbGxldCBvcGVyYXRpb25zLicsXG4gICAgICBkYXRhOiB1c2VyQXV0aEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVRckRhdGEocGFyYW1zOiBHZW5lcmF0ZVFyRGF0YVBhcmFtcyk6IFByb21pc2U8UXJEYXRhPiB7XG4gIGNvbnN0IHFyRGF0YSA9IGJ1aWxkV2FsbGV0UXJEYXRhKHBhcmFtcyk7XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gYXdhaXQgZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhKHBhcmFtczogR2VuZXJhdGVMaWdodG5pbmdRckRhdGFQYXJhbXMpOiBQcm9taXNlPFFyRGF0YT4ge1xuICBjb25zdCBxckRhdGEgPSBidWlsZExpZ2h0bmluZ1FyRGF0YShwYXJhbXMpO1xuXG4gIGlmIChwYXJhbXMucGFzc3BocmFzZSAmJiBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSkge1xuICAgIHFyRGF0YS5wYXNzY29kZSA9IGF3YWl0IGdlbmVyYXRlUGFzc2NvZGVRckRhdGEoXG4gICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBxckRhdGE7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFJvb3RQcml2YXRlS2V5KGtleWNoYWluOiBLZXljaGFpbiwgc2xvdDogU2FmZVJvb3RLZXlUeXBlLCByb2xlOiAndXNlcicgfCAnYmFja3VwJyk6IHN0cmluZyB7XG4gIC8vIFByZWZlciB0aGUgY29tcGFjdCBNUEN2MiByZWR1Y2VkIHNoYXJlOyBmYWxsIGJhY2sgdG8gZW5jcnlwdGVkUHJ2IChlLmcuIG11bHRpc2lnIHJvb3RzKS5cbiAgY29uc3QgZGF0YSA9IGtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYgPz8ga2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICBhc3NlcnQub2soZGF0YSwgYFNhZmUgJHtyb2xlfSByb290ICR7c2xvdH0gaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXkgbWF0ZXJpYWxgKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFJvb3RQdWJsaWNLZXkoa2V5Y2hhaW46IEtleWNoYWluLCBzbG90OiBTYWZlUm9vdEtleVR5cGUpOiBzdHJpbmcge1xuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KGtleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKHB1YiwgYFNhZmUgQml0R28gcm9vdCAke3Nsb3R9IGlzIG1pc3NpbmcgYSBwdWJsaWMga2V5YCk7XG4gIHJldHVybiBwdWI7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBvbmUgYm94J3MgZm91ciByb290cyBpbnRvIGEgc2luZ2xlIEpTT04gb2JqZWN0IGtleWVkIGJ5IHJvb3RLZXlUeXBlLCBlLmcuXG4gKiBge1wic2VjcDI1NmsxTXVsdGlzaWdcIjpcIjxlbmNQcnY+XCIsXCJlY2RzYU1wY1wiOlwiPHJlZHVjZWRFbmNQcnY+XCIsLi4ufWAuIFRoaXMga2VlcHMgdGhlIHNhZmVcbiAqIGtleWNhcmQgb24gdGhlIGV4aXN0aW5nIDQtYm94IGxheW91dCDigJQgb25lIGJveCAoPSBvbmUgUVIvZGF0YSBibG9jaykgcGVyIHJvbGUg4oCUIHdpdGggdGhlXG4gKiBmb3VyIHJvb3RzIHBhY2tlZCBpbnRvIGVhY2ggYm94J3MgZGF0YS4gYHNwbGl0S2V5c2AgZnJhZ21lbnRzIHRoZSBib3ggaWYgaXQgZXhjZWVkcyB0aGUgUVJcbiAqIHRocmVzaG9sZCwgZXhhY3RseSBhcyBmb3IgYSBub3JtYWwgd2FsbGV0IGtleWNhcmQuIFJldmVyc2VkIGJ5IHtAbGluayBwYXJzZVNhZmVLZXljYXJkQm94fS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTYWZlQm94RGF0YShcbiAgcm9vdHM6IFJlY29yZDxTYWZlUm9vdEtleVR5cGUsIEtleWNoYWluc1RyaXBsZXQ+LFxuICBzZWxlY3Q6IChyb290OiBLZXljaGFpbnNUcmlwbGV0LCBzbG90OiBTYWZlUm9vdEtleVR5cGUpID0+IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgYm94OiBTYWZlS2V5Y2FyZFJvb3RzID0ge30gYXMgU2FmZUtleWNhcmRSb290cztcbiAgZm9yIChjb25zdCBzbG90IG9mIFNBRkVfUk9PVF9PUkRFUikge1xuICAgIGNvbnN0IHJvb3QgPSByb290c1tzbG90XTtcbiAgICBhc3NlcnQub2socm9vdCwgYFNhZmUgaXMgbWlzc2luZyB0aGUgJHtzbG90fSByb290YCk7XG4gICAgYm94W3Nsb3RdID0gc2VsZWN0KHJvb3QsIHNsb3QpO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShib3gpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBzYWZlIGtleWNhcmQgUVIgZGF0YSBpbiB0aGUgZXhpc3Rpbmcgd2FsbGV0IHtAbGluayBRckRhdGF9IHNoYXBlOiBib3hlcyBBICh1c2VyKSxcbiAqIEIgKGJhY2t1cCksIEMgKEJpdEdvKSwgRCAocGFzc2NvZGUpLiBFYWNoIG9mIEEvQi9DIGNhcnJpZXMgYSBKU09OIG9iamVjdCBvZiB0aGUgZm91ciByb290cyxcbiAqIHNvIHRoZSBzYWZlIHJlbmRlcnMgYW5kIHBhcnNlcyB0aHJvdWdoIHRoZSBzYW1lIHtAbGluayBkcmF3S2V5Y2FyZH0gcGF0aCBhcyBhIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2FmZVFyRGF0YShwYXJhbXM6IEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyk6IFByb21pc2U8UXJEYXRhPiB7XG4gIGNvbnN0IHsgcm9vdHMgfSA9IHBhcmFtcztcbiAgY29uc3QgcXJEYXRhOiBRckRhdGEgPSB7XG4gICAgdXNlcjoge1xuICAgICAgdGl0bGU6ICdBOiBVc2VyIEtleScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1lvdXIgNCByb290IHByaXZhdGUga2V5cywgZW5jcnlwdGVkIHdpdGggeW91ciBzYWZlIHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFNhZmVCb3hEYXRhKHJvb3RzLCAocm9vdCwgc2xvdCkgPT4gc2VsZWN0Um9vdFByaXZhdGVLZXkocm9vdC51c2VyS2V5Y2hhaW4sIHNsb3QsICd1c2VyJykpLFxuICAgIH0sXG4gICAgYmFja3VwOiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdZb3VyIDQgcm9vdCBiYWNrdXAga2V5cywgZW5jcnlwdGVkIHdpdGggeW91ciBzYWZlIHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFNhZmVCb3hEYXRhKHJvb3RzLCAocm9vdCwgc2xvdCkgPT4gc2VsZWN0Um9vdFByaXZhdGVLZXkocm9vdC5iYWNrdXBLZXljaGFpbiwgc2xvdCwgJ2JhY2t1cCcpKSxcbiAgICB9LFxuICAgIGJpdGdvOiB7XG4gICAgICB0aXRsZTogJ0M6IEJpdEdvIEtleScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwdWJsaWMgcGFydHMgb2YgdGhlIDQgcm9vdCBrZXlzIGhlbGQgYnkgQml0R28uJyxcbiAgICAgIGRhdGE6IGJ1aWxkU2FmZUJveERhdGEocm9vdHMsIChyb290LCBzbG90KSA9PiBzZWxlY3RSb290UHVibGljS2V5KHJvb3QuYml0Z29LZXljaGFpbiwgc2xvdCkpLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gYXdhaXQgZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAnc2FmZSdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { GenerateKeycardParams, GenerateLightningQrDataParams, GenerateQrDataBaseParams, GenerateVaultQrDataParams } from './types';
1
+ import { GenerateKeycardParams, GenerateLightningQrDataParams, GenerateQrDataBaseParams, GenerateSafeQrDataParams } from './types';
2
2
  export * from './drawKeycard';
3
3
  export * from './extractKeycardFromPDF';
4
4
  export * from './faq';
@@ -9,10 +9,10 @@ export * from './types';
9
9
  export declare function generateKeycard(params: GenerateKeycardParams): Promise<void>;
10
10
  export declare function generateLightningKeycard(params: GenerateQrDataBaseParams & GenerateLightningQrDataParams): Promise<void>;
11
11
  /**
12
- * Generates a vault keycard using the existing 4-box layout: boxes A/B/C each carry a JSON
13
- * object of the four roots (see {@link generateVaultQrData}), rendered through the same
14
- * {@link drawKeycard} path as a wallet. Generated as part of vault creation, once all four
12
+ * Generates a safe keycard using the existing 4-box layout: boxes A/B/C each carry a JSON
13
+ * object of the four roots (see {@link generateSafeQrData}), rendered through the same
14
+ * {@link drawKeycard} path as a wallet. Generated as part of safe creation, once all four
15
15
  * root triplets exist.
16
16
  */
17
- export declare function generateVaultKeycard(params: GenerateQrDataBaseParams & GenerateVaultQrDataParams): Promise<void>;
17
+ export declare function generateSafeKeycard(params: GenerateQrDataBaseParams & GenerateSafeQrDataParams): Promise<void>;
18
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAEjB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlF;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,wBAAwB,GAAG,6BAA6B,GAC/D,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,wBAAwB,GAAG,yBAAyB,GAC3D,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlF;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,wBAAwB,GAAG,6BAA6B,GAC/D,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpH"}
package/dist/src/index.js CHANGED
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.generateKeycard = generateKeycard;
18
18
  exports.generateLightningKeycard = generateLightningKeycard;
19
- exports.generateVaultKeycard = generateVaultKeycard;
19
+ exports.generateSafeKeycard = generateSafeKeycard;
20
20
  const generateQrData_1 = require("./generateQrData");
21
21
  const faq_1 = require("./faq");
22
22
  const drawKeycard_1 = require("./drawKeycard");
@@ -61,16 +61,16 @@ async function generateLightningKeycard(params) {
61
61
  keycard.save(`BitGo Keycard for ${label}.pdf`);
62
62
  }
63
63
  /**
64
- * Generates a vault keycard using the existing 4-box layout: boxes A/B/C each carry a JSON
65
- * object of the four roots (see {@link generateVaultQrData}), rendered through the same
66
- * {@link drawKeycard} path as a wallet. Generated as part of vault creation, once all four
64
+ * Generates a safe keycard using the existing 4-box layout: boxes A/B/C each carry a JSON
65
+ * object of the four roots (see {@link generateSafeQrData}), rendered through the same
66
+ * {@link drawKeycard} path as a wallet. Generated as part of safe creation, once all four
67
67
  * root triplets exist.
68
68
  */
69
- async function generateVaultKeycard(params) {
69
+ async function generateSafeKeycard(params) {
70
70
  const questions = (0, faq_1.generateFaq)(params.coin.fullName);
71
- const qrData = await (0, generateQrData_1.generateVaultQrData)(params);
71
+ const qrData = await (0, generateQrData_1.generateSafeQrData)(params);
72
72
  const keycard = await (0, drawKeycard_1.drawKeycard)({ ...params, questions, qrData, pageBreakBeforeIndices: [1, 2] });
73
73
  const label = params.walletLabel || params.coin.fullName;
74
74
  keycard.save(`BitGo Keycard for ${label}.pdf`);
75
75
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSwwQ0FxQkM7QUFFRCw0REFRQztBQVFELG9EQVFDO0FBbEVELHFEQUFnRztBQUNoRywrQkFBMEQ7QUFDMUQsK0NBQTRDO0FBQzVDLGlGQUE4RTtBQVE5RSxnREFBOEI7QUFDOUIsMERBQXdDO0FBQ3hDLHdDQUFzQjtBQUN0QixtREFBaUM7QUFDakMsaURBQStCO0FBQy9CLDBDQUF3QjtBQUN4QiwwQ0FBd0I7QUFFakIsS0FBSyxVQUFVLGVBQWUsQ0FBQyxNQUE2QjtJQUNqRSxJQUFJLGtCQUFrQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsd0NBQXVCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHlCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztTQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUEsaUJBQVcsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSwrQkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxJQUFBLDJEQUE0QixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxNQUFnRTtJQUVoRSxNQUFNLFNBQVMsR0FBRyxJQUFBLDBCQUFvQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHdDQUF1QixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsTUFBNEQ7SUFFNUQsTUFBTSxTQUFTLEdBQUcsSUFBQSxpQkFBVyxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLG9DQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YSwgZ2VuZXJhdGVRckRhdGEsIGdlbmVyYXRlVmF1bHRRckRhdGEgfSBmcm9tICcuL2dlbmVyYXRlUXJEYXRhJztcbmltcG9ydCB7IGdlbmVyYXRlRmFxLCBnZW5lcmF0ZUxpZ2h0bmluZ0ZhcSB9IGZyb20gJy4vZmFxJztcbmltcG9ydCB7IGRyYXdLZXljYXJkIH0gZnJvbSAnLi9kcmF3S2V5Y2FyZCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVBhcmFtc0ZvcktleUNyZWF0aW9uIH0gZnJvbSAnLi9nZW5lcmF0ZVBhcmFtc0ZvcktleUNyZWF0aW9uJztcbmltcG9ydCB7XG4gIEdlbmVyYXRlS2V5Y2FyZFBhcmFtcyxcbiAgR2VuZXJhdGVMaWdodG5pbmdRckRhdGFQYXJhbXMsXG4gIEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyxcbiAgR2VuZXJhdGVWYXVsdFFyRGF0YVBhcmFtcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhd0tleWNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9leHRyYWN0S2V5Y2FyZEZyb21QREYnO1xuZXhwb3J0ICogZnJvbSAnLi9mYXEnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlS2V5Y2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXljYXJkKHBhcmFtczogR2VuZXJhdGVLZXljYXJkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgndXNlckF1dGhLZXljaGFpbicgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICAgIGNvbnN0IHFyRGF0YSA9IGF3YWl0IGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhKHBhcmFtcyk7XG4gICAgY29uc3Qga2V5Y2FyZCA9IGF3YWl0IGRyYXdLZXljYXJkKHsgLi4ucGFyYW1zLCBxdWVzdGlvbnMsIHFyRGF0YSB9KTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAgICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xuICB9IGVsc2UgaWYgKCdjb2luJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShwYXJhbXMuY29pbi5mdWxsTmFtZSk7XG4gICAgY29uc3QgcXJEYXRhID0gYXdhaXQgZ2VuZXJhdGVRckRhdGEocGFyYW1zKTtcbiAgICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICAgIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICAgIGtleWNhcmQuc2F2ZShgQml0R28gS2V5Y2FyZCBmb3IgJHtsYWJlbH0ucGRmYCk7XG4gIH0gZWxzZSBpZiAoJ2N1cnZlJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbihwYXJhbXMpO1xuICAgIGNvbnN0IGtleWNhcmQgPSBhd2FpdCBkcmF3S2V5Y2FyZChkYXRhKTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY3VydmU7XG4gICAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBjdXJ2ZSBvciBjb2luIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWdodG5pbmdLZXljYXJkKFxuICBwYXJhbXM6IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICBjb25zdCBxckRhdGEgPSBhd2FpdCBnZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YShwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB2YXVsdCBrZXljYXJkIHVzaW5nIHRoZSBleGlzdGluZyA0LWJveCBsYXlvdXQ6IGJveGVzIEEvQi9DIGVhY2ggY2FycnkgYSBKU09OXG4gKiBvYmplY3Qgb2YgdGhlIGZvdXIgcm9vdHMgKHNlZSB7QGxpbmsgZ2VuZXJhdGVWYXVsdFFyRGF0YX0pLCByZW5kZXJlZCB0aHJvdWdoIHRoZSBzYW1lXG4gKiB7QGxpbmsgZHJhd0tleWNhcmR9IHBhdGggYXMgYSB3YWxsZXQuIEdlbmVyYXRlZCBhcyBwYXJ0IG9mIHZhdWx0IGNyZWF0aW9uLCBvbmNlIGFsbCBmb3VyXG4gKiByb290IHRyaXBsZXRzIGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVWYXVsdEtleWNhcmQoXG4gIHBhcmFtczogR2VuZXJhdGVRckRhdGFCYXNlUGFyYW1zICYgR2VuZXJhdGVWYXVsdFFyRGF0YVBhcmFtc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IGdlbmVyYXRlRmFxKHBhcmFtcy5jb2luLmZ1bGxOYW1lKTtcbiAgY29uc3QgcXJEYXRhID0gYXdhaXQgZ2VuZXJhdGVWYXVsdFFyRGF0YShwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhLCBwYWdlQnJlYWtCZWZvcmVJbmRpY2VzOiBbMSwgMl0gfSk7XG4gIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSwwQ0FxQkM7QUFFRCw0REFRQztBQVFELGtEQU1DO0FBaEVELHFEQUErRjtBQUMvRiwrQkFBMEQ7QUFDMUQsK0NBQTRDO0FBQzVDLGlGQUE4RTtBQVE5RSxnREFBOEI7QUFDOUIsMERBQXdDO0FBQ3hDLHdDQUFzQjtBQUN0QixtREFBaUM7QUFDakMsaURBQStCO0FBQy9CLDBDQUF3QjtBQUN4QiwwQ0FBd0I7QUFFakIsS0FBSyxVQUFVLGVBQWUsQ0FBQyxNQUE2QjtJQUNqRSxJQUFJLGtCQUFrQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsd0NBQXVCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHlCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztTQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUEsaUJBQVcsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSwrQkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxJQUFBLDJEQUE0QixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxNQUFnRTtJQUVoRSxNQUFNLFNBQVMsR0FBRyxJQUFBLDBCQUFvQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHdDQUF1QixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxNQUEyRDtJQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFBLGlCQUFXLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUNBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHlCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhLCBnZW5lcmF0ZVFyRGF0YSwgZ2VuZXJhdGVTYWZlUXJEYXRhIH0gZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5pbXBvcnQgeyBnZW5lcmF0ZUZhcSwgZ2VuZXJhdGVMaWdodG5pbmdGYXEgfSBmcm9tICcuL2ZhcSc7XG5pbXBvcnQgeyBkcmF3S2V5Y2FyZCB9IGZyb20gJy4vZHJhd0tleWNhcmQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbiB9IGZyb20gJy4vZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbic7XG5pbXBvcnQge1xuICBHZW5lcmF0ZUtleWNhcmRQYXJhbXMsXG4gIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zLFxuICBHZW5lcmF0ZVFyRGF0YUJhc2VQYXJhbXMsXG4gIEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhd0tleWNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9leHRyYWN0S2V5Y2FyZEZyb21QREYnO1xuZXhwb3J0ICogZnJvbSAnLi9mYXEnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlS2V5Y2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXljYXJkKHBhcmFtczogR2VuZXJhdGVLZXljYXJkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgndXNlckF1dGhLZXljaGFpbicgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICAgIGNvbnN0IHFyRGF0YSA9IGF3YWl0IGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhKHBhcmFtcyk7XG4gICAgY29uc3Qga2V5Y2FyZCA9IGF3YWl0IGRyYXdLZXljYXJkKHsgLi4ucGFyYW1zLCBxdWVzdGlvbnMsIHFyRGF0YSB9KTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAgICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xuICB9IGVsc2UgaWYgKCdjb2luJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShwYXJhbXMuY29pbi5mdWxsTmFtZSk7XG4gICAgY29uc3QgcXJEYXRhID0gYXdhaXQgZ2VuZXJhdGVRckRhdGEocGFyYW1zKTtcbiAgICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICAgIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICAgIGtleWNhcmQuc2F2ZShgQml0R28gS2V5Y2FyZCBmb3IgJHtsYWJlbH0ucGRmYCk7XG4gIH0gZWxzZSBpZiAoJ2N1cnZlJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbihwYXJhbXMpO1xuICAgIGNvbnN0IGtleWNhcmQgPSBhd2FpdCBkcmF3S2V5Y2FyZChkYXRhKTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY3VydmU7XG4gICAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBjdXJ2ZSBvciBjb2luIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWdodG5pbmdLZXljYXJkKFxuICBwYXJhbXM6IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICBjb25zdCBxckRhdGEgPSBhd2FpdCBnZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YShwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBzYWZlIGtleWNhcmQgdXNpbmcgdGhlIGV4aXN0aW5nIDQtYm94IGxheW91dDogYm94ZXMgQS9CL0MgZWFjaCBjYXJyeSBhIEpTT05cbiAqIG9iamVjdCBvZiB0aGUgZm91ciByb290cyAoc2VlIHtAbGluayBnZW5lcmF0ZVNhZmVRckRhdGF9KSwgcmVuZGVyZWQgdGhyb3VnaCB0aGUgc2FtZVxuICoge0BsaW5rIGRyYXdLZXljYXJkfSBwYXRoIGFzIGEgd2FsbGV0LiBHZW5lcmF0ZWQgYXMgcGFydCBvZiBzYWZlIGNyZWF0aW9uLCBvbmNlIGFsbCBmb3VyXG4gKiByb290IHRyaXBsZXRzIGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTYWZlS2V5Y2FyZChwYXJhbXM6IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmIEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShwYXJhbXMuY29pbi5mdWxsTmFtZSk7XG4gIGNvbnN0IHFyRGF0YSA9IGF3YWl0IGdlbmVyYXRlU2FmZVFyRGF0YShwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhLCBwYWdlQnJlYWtCZWZvcmVJbmRpY2VzOiBbMSwgMl0gfSk7XG4gIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { VaultKeycardRoots } from './types';
1
+ import { SafeKeycardRoots } from './types';
2
2
  export type PDFTextNode = {
3
3
  text: string;
4
4
  x: number;
@@ -11,12 +11,12 @@ export type KeycardEntry = {
11
11
  value: string;
12
12
  };
13
13
  /**
14
- * Parses a vault keycard box value — the JSON packed by `generateVaultQrData`, e.g.
14
+ * Parses a safe keycard box value — the JSON packed by `generateSafeQrData`, e.g.
15
15
  * `{"secp256k1Multisig":"…","ecdsaMpc":"…",…}` — into its four roots. Validates that all four
16
16
  * roots are present. Recovery tooling calls this on the A/B/C box value returned by
17
17
  * {@link parseKeycardFromLines}, then decrypts each root value with the wallet password.
18
18
  */
19
- export declare function parseVaultKeycardBox(data: string): VaultKeycardRoots;
19
+ export declare function parseSafeKeycardBox(data: string): SafeKeycardRoots;
20
20
  /**
21
21
  * Reconstructs logical text lines from an unordered set of PDF text nodes.
22
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"parseKeycard.d.ts","sourceRoot":"","sources":["../../src/parseKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAiBpE;AAwCD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CA4DrE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAyErE"}
1
+ {"version":3,"file":"parseKeycard.d.ts","sourceRoot":"","sources":["../../src/parseKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAiBlE;AA0CD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CA4DrE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAyErE"}