payload 2.24.2 → 2.25.0

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.
@@ -27,6 +27,7 @@ const _sanitizefilename = /*#__PURE__*/ _interop_require_default(require("saniti
27
27
  const _sharp = /*#__PURE__*/ _interop_require_default(require("sharp"));
28
28
  const _isNumber = require("../utilities/isNumber");
29
29
  const _fileExists = /*#__PURE__*/ _interop_require_default(require("./fileExists"));
30
+ const _optionallyAppendMetadata = require("./optionallyAppendMetadata");
30
31
  function _interop_require_default(obj) {
31
32
  return obj && obj.__esModule ? obj : {
32
33
  default: obj
@@ -157,7 +158,7 @@ const createImageName = ({ extension, height, outputImageName, width })=>{
157
158
  }
158
159
  return sharpMetadata.height;
159
160
  }
160
- async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, staticPath, uploadEdits }) {
161
+ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, staticPath, uploadEdits, withMetadata }) {
161
162
  const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload;
162
163
  // Focal point adjustments
163
164
  const incomingFocalPoint = uploadEdits?.focalPoint ? {
@@ -220,8 +221,13 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
220
221
  height: prioritizeHeight ? resizeHeight : undefined,
221
222
  width: prioritizeHeight ? undefined : resizeWidth
222
223
  });
223
- // must read from buffer, resize.metadata will return the original image metadata
224
- const { info } = await resized.toBuffer({
224
+ const metadataAppendedFile = await (0, _optionallyAppendMetadata.optionallyAppendMetadata)({
225
+ req,
226
+ sharpFile: resized,
227
+ withMetadata
228
+ });
229
+ // Must read from buffer, resized.metadata will return the original image metadata
230
+ const { info } = await metadataAppendedFile.toBuffer({
225
231
  resolveWithObject: true
226
232
  });
227
233
  resizeImageMeta.height = extractHeightFromImage({
@@ -268,7 +274,12 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
268
274
  if (imageResizeConfig.trimOptions) {
269
275
  resized = resized.trim(imageResizeConfig.trimOptions);
270
276
  }
271
- const { data: bufferData, info: bufferInfo } = await resized.toBuffer({
277
+ const metadataAppendedFile = await (0, _optionallyAppendMetadata.optionallyAppendMetadata)({
278
+ req,
279
+ sharpFile: resized,
280
+ withMetadata
281
+ });
282
+ const { data: bufferData, info: bufferInfo } = await metadataAppendedFile.toBuffer({
272
283
  resolveWithObject: true
273
284
  });
274
285
  const sanitizedImage = getSanitizedImageData(savedFilename);
@@ -318,4 +329,4 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
318
329
  });
319
330
  }
320
331
 
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2ltYWdlUmVzaXplci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgU2hhcnAsIE1ldGFkYXRhIGFzIFNoYXJwTWV0YWRhdGEsIFNoYXJwT3B0aW9ucyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgeyBmcm9tQnVmZmVyIH0gZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJ1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZXhwcmVzcy90eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgRmlsZVNpemUsXG4gIEZpbGVTaXplcyxcbiAgRmlsZVRvU2F2ZSxcbiAgSW1hZ2VTaXplLFxuICBQcm9iZWRJbWFnZVNpemUsXG4gIFVwbG9hZEVkaXRzLFxufSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4uL3V0aWxpdGllcy9pc051bWJlcidcbmltcG9ydCBmaWxlRXhpc3RzIGZyb20gJy4vZmlsZUV4aXN0cydcblxudHlwZSBSZXNpemVBcmdzID0ge1xuICBjb25maWc6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdcbiAgZGltZW5zaW9uczogUHJvYmVkSW1hZ2VTaXplXG4gIGZpbGU6IFVwbG9hZGVkRmlsZVxuICBtaW1lVHlwZTogc3RyaW5nXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2F2ZWRGaWxlbmFtZTogc3RyaW5nXG4gIHN0YXRpY1BhdGg6IHN0cmluZ1xuICB1cGxvYWRFZGl0cz86IFVwbG9hZEVkaXRzXG59XG5cbi8qKiBSZXN1bHQgZnJvbSByZXNpemluZyBhbmQgdHJhbnNmb3JtaW5nIHRoZSByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZXMgKi9cbnR5cGUgSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgZm9jYWxQb2ludD86IFVwbG9hZEVkaXRzWydmb2NhbFBvaW50J11cbiAgc2l6ZURhdGE6IEZpbGVTaXplc1xuICBzaXplc1RvU2F2ZTogRmlsZVRvU2F2ZVtdXG59XG5cbnR5cGUgU2FuaXRpemVkSW1hZ2VEYXRhID0ge1xuICBleHQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSB0aGUgaW1hZ2UgbmFtZSBhbmQgZXh0cmFjdCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIHNvdXJjZSBpbWFnZVxuICpcbiAqIEBwYXJhbSBzb3VyY2VJbWFnZSAtIHRoZSBzb3VyY2UgaW1hZ2VcbiAqIEByZXR1cm5zIHRoZSBzYW5pdGl6ZWQgbmFtZSBhbmQgZXh0ZW5zaW9uXG4gKi9cbmNvbnN0IGdldFNhbml0aXplZEltYWdlRGF0YSA9IChzb3VyY2VJbWFnZTogc3RyaW5nKTogU2FuaXRpemVkSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gc291cmNlSW1hZ2Uuc3BsaXQoJy4nKS5wb3AoKVxuICBjb25zdCBuYW1lID0gc2FuaXRpemUoc291cmNlSW1hZ2Uuc3Vic3RyaW5nKDAsIHNvdXJjZUltYWdlLmxhc3RJbmRleE9mKCcuJykpIHx8IHNvdXJjZUltYWdlKVxuICByZXR1cm4geyBuYW1lLCBleHQ6IGV4dGVuc2lvbiB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGltYWdlIG5hbWUgYmFzZWQgb24gdGhlIG91dHB1dCBpbWFnZSBuYW1lLCB0aGUgZGltZW5zaW9ucyBhbmRcbiAqIHRoZSBleHRlbnNpb24uXG4gKlxuICogSWdub3JlIHRoZSBmYWN0IHRoYXQgZHVwbGljYXRlIG5hbWVzIGNvdWxkIGhhcHBlbiBpZiB0aGUgdGhlcmUgaXMgb25lXG4gKiBzaXplIHdpdGggYHdpZHRoIEFORCBoZWlnaHRgIGFuZCBvbmUgd2l0aCBvbmx5IGBoZWlnaHQgT1Igd2lkdGhgLiBCZWNhdXNlXG4gKiBzcGFjZSBpcyBleHBlbnNpdmUsIHdlIHdpbGwgcmV1c2UgdGhlIHNhbWUgaW1hZ2UgZm9yIGJvdGggc2l6ZXMuXG4gKlxuICogQHBhcmFtIG91dHB1dEltYWdlTmFtZSAtIHRoZSBzYW5pdGl6ZWQgaW1hZ2UgbmFtZVxuICogQHBhcmFtIGJ1ZmZlckluZm8gLSB0aGUgYnVmZmVyIGluZm9cbiAqIEBwYXJhbSBleHRlbnNpb24gLSB0aGUgZXh0ZW5zaW9uIHRvIHVzZVxuICogQHJldHVybnMgdGhlIG5ldyBpbWFnZSBuYW1lIHRoYXQgaXMgbm90IHRha2VuXG4gKi9cblxudHlwZSBDcmVhdGVJbWFnZU5hbWVBcmdzID0ge1xuICBleHRlbnNpb246IHN0cmluZ1xuICBoZWlnaHQ6IG51bWJlclxuICBvdXRwdXRJbWFnZU5hbWU6IHN0cmluZ1xuICB3aWR0aDogbnVtYmVyXG59XG5jb25zdCBjcmVhdGVJbWFnZU5hbWUgPSAoe1xuICBleHRlbnNpb24sXG4gIGhlaWdodCxcbiAgb3V0cHV0SW1hZ2VOYW1lLFxuICB3aWR0aCxcbn06IENyZWF0ZUltYWdlTmFtZUFyZ3MpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYCR7b3V0cHV0SW1hZ2VOYW1lfS0ke3dpZHRofXgke2hlaWdodH0uJHtleHRlbnNpb259YFxufVxuXG50eXBlIENyZWF0ZVJlc3VsdEFyZ3MgPSB7XG4gIGZpbGVuYW1lPzogRmlsZVNpemVbJ2ZpbGVuYW1lJ11cbiAgZmlsZXNpemU/OiBGaWxlU2l6ZVsnZmlsZXNpemUnXVxuICBoZWlnaHQ/OiBGaWxlU2l6ZVsnaGVpZ2h0J11cbiAgbWltZVR5cGU/OiBGaWxlU2l6ZVsnbWltZVR5cGUnXVxuICBuYW1lOiBzdHJpbmdcbiAgc2l6ZXNUb1NhdmU/OiBGaWxlVG9TYXZlW11cbiAgd2lkdGg/OiBGaWxlU2l6ZVsnd2lkdGgnXVxufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcmVzdWx0IG9iamVjdCBmb3IgdGhlIGltYWdlIHJlc2l6ZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlXG4gKiBwcm92aWRlZCBwYXJhbWV0ZXJzLiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWQsIGFuIGVtcHR5IHJlc3VsdCBvYmplY3RcbiAqIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gd2lkdGggLSB0aGUgd2lkdGggb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gaGVpZ2h0IC0gdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBmaWxlc2l6ZSAtIHRoZSBmaWxlc2l6ZSBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBtaW1lVHlwZSAtIHRoZSBtaW1lIHR5cGUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gc2l6ZXNUb1NhdmUgLSB0aGUgc2l6ZXMgdG8gc2F2ZVxuICogQHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3RcbiAqL1xuY29uc3QgY3JlYXRlUmVzdWx0ID0gKHtcbiAgbmFtZSxcbiAgZmlsZW5hbWUgPSBudWxsLFxuICBmaWxlc2l6ZSA9IG51bGwsXG4gIGhlaWdodCA9IG51bGwsXG4gIG1pbWVUeXBlID0gbnVsbCxcbiAgc2l6ZXNUb1NhdmUgPSBbXSxcbiAgd2lkdGggPSBudWxsLFxufTogQ3JlYXRlUmVzdWx0QXJncyk6IEltYWdlU2l6ZXNSZXN1bHQgPT4ge1xuICByZXR1cm4ge1xuICAgIHNpemVEYXRhOiB7XG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIGZpbGVzaXplLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIG1pbWVUeXBlLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzaXplc1RvU2F2ZSxcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byByZXNpemUgdGhlIGltYWdlLlxuICogLSByZXNpemUgdXNpbmcgaW1hZ2UgY29uZmlnXG4gKiAtIHJlc2l6ZSB1c2luZyBpbWFnZSBjb25maWcgd2l0aCBmb2NhbCBhZGp1c3RtZW50c1xuICogLSBkbyBub3QgcmVzaXplIGF0IGFsbFxuICpcbiAqIGBpbWFnZVJlc2l6ZUNvbmZpZy53aXRob3V0RW5sYXJnZW1lbnRgOlxuICogLSB1bmRlZmluZWQgW2RlZmF1bHRdOiB1cGxvYWRpbmcgaW1hZ2VzIHdpdGggc21hbGxlciB3aWR0aCBBTkQgaGVpZ2h0IHRoYW4gdGhlIGltYWdlIHNpemUgd2lsbCByZXR1cm4gbnVsbFxuICogLSBmYWxzZTogYWx3YXlzIGVubGFyZ2UgaW1hZ2VzIHRvIHRoZSBpbWFnZSBzaXplXG4gKiAtIHRydWU6IGlmIHRoZSBpbWFnZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdlIHNpemUsIHJldHVybiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqXG4gKiBgaW1hZ2VSZXNpemVDb25maWcud2l0aG91dFJlZHVjdGlvbmA6XG4gKiAtIGZhbHNlIFtkZWZhdWx0XTogYWx3YXlzIGVubGFyZ2UgaW1hZ2VzIHRvIHRoZSBpbWFnZSBzaXplXG4gKiAtIHRydWU6IGlmIHRoZSBpbWFnZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdlIHNpemUsIHJldHVybiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqXG4gKiBAcmV0dXJuICdvbWl0JyB8ICdyZXNpemUnIHwgJ3Jlc2l6ZVdpdGhGb2NhbFBvaW50J1xuICovXG5jb25zdCBnZXRJbWFnZVJlc2l6ZUFjdGlvbiA9ICh7XG4gIGRpbWVuc2lvbnM6IG9yaWdpbmFsSW1hZ2UsXG4gIGhhc0ZvY2FsUG9pbnQsXG4gIGltYWdlUmVzaXplQ29uZmlnLFxufToge1xuICBkaW1lbnNpb25zOiBQcm9iZWRJbWFnZVNpemVcbiAgaGFzRm9jYWxQb2ludD86IGJvb2xlYW5cbiAgaW1hZ2VSZXNpemVDb25maWc6IEltYWdlU2l6ZVxufSk6ICdvbWl0JyB8ICdyZXNpemUnIHwgJ3Jlc2l6ZVdpdGhGb2NhbFBvaW50JyA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaXQsXG4gICAgaGVpZ2h0OiB0YXJnZXRIZWlnaHQsXG4gICAgd2lkdGg6IHRhcmdldFdpZHRoLFxuICAgIHdpdGhvdXRFbmxhcmdlbWVudCxcbiAgICB3aXRob3V0UmVkdWN0aW9uLFxuICB9ID0gaW1hZ2VSZXNpemVDb25maWdcblxuICAvLyBwcmV2ZW50IHVwc2NhbGluZyBieSBkZWZhdWx0IHdoZW4geCBhbmQgeSBhcmUgYm90aCBzbWFsbGVyIHRoYW4gdGFyZ2V0IGltYWdlIHNpemVcbiAgaWYgKHRhcmdldEhlaWdodCAmJiB0YXJnZXRXaWR0aCkge1xuICAgIGNvbnN0IG9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYQW5kWSA9XG4gICAgICBvcmlnaW5hbEltYWdlLndpZHRoIDwgdGFyZ2V0V2lkdGggJiYgb3JpZ2luYWxJbWFnZS5oZWlnaHQgPCB0YXJnZXRIZWlnaHRcbiAgICBpZiAod2l0aG91dEVubGFyZ2VtZW50ID09PSB1bmRlZmluZWQgJiYgb3JpZ2luYWxJbWFnZUlzU21hbGxlclhBbmRZKSB7XG4gICAgICByZXR1cm4gJ29taXQnIC8vIHByZXZlbnQgaW1hZ2Ugc2l6ZSBmcm9tIGJlaW5nIGVubGFyZ2VkXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxJbWFnZUlzU21hbGxlclhPclkgPVxuICAgIG9yaWdpbmFsSW1hZ2Uud2lkdGggPCB0YXJnZXRXaWR0aCB8fCBvcmlnaW5hbEltYWdlLmhlaWdodCA8IHRhcmdldEhlaWdodFxuICBpZiAoZml0ID09PSAnY29udGFpbicgfHwgZml0ID09PSAnaW5zaWRlJykgcmV0dXJuICdyZXNpemUnXG4gIGlmICghaXNOdW1iZXIodGFyZ2V0SGVpZ2h0KSAmJiAhaXNOdW1iZXIodGFyZ2V0V2lkdGgpKSByZXR1cm4gJ3Jlc2l6ZSdcblxuICBjb25zdCB0YXJnZXRBc3BlY3RSYXRpbyA9IHRhcmdldFdpZHRoIC8gdGFyZ2V0SGVpZ2h0XG4gIGNvbnN0IG9yaWdpbmFsQXNwZWN0UmF0aW8gPSBvcmlnaW5hbEltYWdlLndpZHRoIC8gb3JpZ2luYWxJbWFnZS5oZWlnaHRcbiAgaWYgKG9yaWdpbmFsQXNwZWN0UmF0aW8gPT09IHRhcmdldEFzcGVjdFJhdGlvKSByZXR1cm4gJ3Jlc2l6ZSdcblxuICBpZiAod2l0aG91dEVubGFyZ2VtZW50ICYmIG9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYT3JZKSByZXR1cm4gJ3Jlc2l6ZSdcbiAgaWYgKHdpdGhvdXRSZWR1Y3Rpb24gJiYgIW9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYT3JZKSByZXR1cm4gJ3Jlc2l6ZSdcblxuICByZXR1cm4gaGFzRm9jYWxQb2ludCA/ICdyZXNpemVXaXRoRm9jYWxQb2ludCcgOiAncmVzaXplJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBpbWFnZSBzaG91bGQgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIHNoYXJwIHdpdGhvdXQgcGF5bG9hZCBhZGp1c3RpbmcgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0gcmVzaXplQ29uZmlnIC0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFuZCByZXNpemUgb3B0aW9uc1xuICogQHBhcmFtIG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIGltYWdlIHNpemVcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGltYWdlIHNob3VsZCBwYXNzZWQgZGlyZWN0bHkgdG8gc2hhcnBcbiAqL1xuY29uc3QgYXBwbHlQYXlsb2FkQWRqdXN0bWVudHMgPSAoXG4gIHsgZml0LCBoZWlnaHQsIHdpZHRoLCB3aXRob3V0RW5sYXJnZW1lbnQsIHdpdGhvdXRSZWR1Y3Rpb24gfTogSW1hZ2VTaXplLFxuICBvcmlnaW5hbDogUHJvYmVkSW1hZ2VTaXplLFxuKSA9PiB7XG4gIGlmIChmaXQgPT09ICdjb250YWluJyB8fCBmaXQgPT09ICdpbnNpZGUnKSByZXR1cm4gZmFsc2VcbiAgaWYgKCFpc051bWJlcihoZWlnaHQpICYmICFpc051bWJlcih3aWR0aCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHRhcmdldEFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHRcbiAgY29uc3Qgb3JpZ2luYWxBc3BlY3RSYXRpbyA9IG9yaWdpbmFsLndpZHRoIC8gb3JpZ2luYWwuaGVpZ2h0XG4gIGlmIChvcmlnaW5hbEFzcGVjdFJhdGlvID09PSB0YXJnZXRBc3BlY3RSYXRpbykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc2tpcEVubGFyZ2VtZW50ID0gd2l0aG91dEVubGFyZ2VtZW50ICYmIChvcmlnaW5hbC5oZWlnaHQgPCBoZWlnaHQgfHwgb3JpZ2luYWwud2lkdGggPCB3aWR0aClcbiAgY29uc3Qgc2tpcFJlZHVjdGlvbiA9IHdpdGhvdXRSZWR1Y3Rpb24gJiYgKG9yaWdpbmFsLmhlaWdodCA+IGhlaWdodCB8fCBvcmlnaW5hbC53aWR0aCA+IHdpZHRoKVxuICBpZiAoc2tpcEVubGFyZ2VtZW50IHx8IHNraXBSZWR1Y3Rpb24pIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogU2FuaXRpemUgdGhlIHJlc2l6ZSBjb25maWcuIElmIHRoZSByZXNpemUgY29uZmlnIGhhcyB0aGUgYHdpdGhvdXRSZWR1Y3Rpb25gXG4gKiBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSwgdGhlIGBmaXRgIGFuZCBgcG9zaXRpb25gIHByb3BlcnRpZXMgd2lsbCBiZSBzZXQgdG8gYGNvbnRhaW5gXG4gKiBhbmQgYHRvcCBsZWZ0YCByZXNwZWN0aXZlbHkuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyBhIHNhbml0aXplZCByZXNpemUgY29uZmlnXG4gKi9cbmNvbnN0IHNhbml0aXplUmVzaXplQ29uZmlnID0gKHJlc2l6ZUNvbmZpZzogSW1hZ2VTaXplKTogSW1hZ2VTaXplID0+IHtcbiAgaWYgKHJlc2l6ZUNvbmZpZy53aXRob3V0UmVkdWN0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc2l6ZUNvbmZpZyxcbiAgICAgIC8vIFdoeSBmaXQgYGNvbnRhaW5gIHNob3VsZCBhbHNvIGJlIHNldCB0byBodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8zNTk1XG4gICAgICBmaXQ6IHJlc2l6ZUNvbmZpZz8uZml0IHx8ICdjb250YWluJyxcbiAgICAgIHBvc2l0aW9uOiByZXNpemVDb25maWc/LnBvc2l0aW9uIHx8ICdsZWZ0IHRvcCcsXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNpemVDb25maWdcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGV4dHJhY3QgaGVpZ2h0IGZyb20gaW1hZ2VzLCBhbmltYXRlZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHNoYXJwTWV0YWRhdGEgLSB0aGUgc2hhcnAgbWV0YWRhdGFcbiAqIEByZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGltYWdlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RIZWlnaHRGcm9tSW1hZ2Uoc2hhcnBNZXRhZGF0YTogU2hhcnBNZXRhZGF0YSk6IG51bWJlciB7XG4gIGlmIChzaGFycE1ldGFkYXRhPy5wYWdlcykge1xuICAgIHJldHVybiBzaGFycE1ldGFkYXRhLmhlaWdodCAvIHNoYXJwTWV0YWRhdGEucGFnZXNcbiAgfVxuICByZXR1cm4gc2hhcnBNZXRhZGF0YS5oZWlnaHRcbn1cblxuLyoqXG4gKiBGb3IgdGhlIHByb3ZpZGVkIGltYWdlIHNpemVzLCBoYW5kbGUgdGhlIHJlc2l6aW5nIGFuZCB0aGUgdHJhbnNmb3Jtc1xuICogKGZvcm1hdCwgdHJpbSwgZXRjLikgb2YgZWFjaCByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2JqZWN0LlxuICogVGhpcyBvbmx5IGhhbmRsZXMgdGhlIGltYWdlIHNpemVzLiBUaGUgdHJhbnNmb3JtcyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqIGFyZSBoYW5kbGVkIGluIHtAbGluayAuL2dlbmVyYXRlRmlsZURhdGEudHN9LlxuICpcbiAqIFRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZFxuICogcmVzaXplIGNvbmZpZy4gSWYgbm8gaW1hZ2Ugc2l6ZXMgYXJlIHJlcXVlc3RlZCwgdGhlIHJlc29sdmVkIGRhdGEgd2lsbCBiZSBlbXB0eS5cbiAqIEZvciBldmVyeSBpbWFnZSB0aGF0IGRvZXMgbm90IG5lZWQgdG8gYmUgcmVzaXplZCwgYSByZXN1bHQgb2JqZWN0IHdpdGggYG51bGxgXG4gKiBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSByZXNpemUgb3BlcmF0aW9uKHMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICBjb25maWcsXG4gIGRpbWVuc2lvbnMsXG4gIGZpbGUsXG4gIG1pbWVUeXBlLFxuICByZXEsXG4gIHNhdmVkRmlsZW5hbWUsXG4gIHN0YXRpY1BhdGgsXG4gIHVwbG9hZEVkaXRzLFxufTogUmVzaXplQXJncyk6IFByb21pc2U8SW1hZ2VTaXplc1Jlc3VsdD4ge1xuICBjb25zdCB7IGZvY2FsUG9pbnQ6IGZvY2FsUG9pbnRFbmFibGVkID0gdHJ1ZSwgaW1hZ2VTaXplcyB9ID0gY29uZmlnLnVwbG9hZFxuXG4gIC8vIEZvY2FsIHBvaW50IGFkanVzdG1lbnRzXG4gIGNvbnN0IGluY29taW5nRm9jYWxQb2ludCA9IHVwbG9hZEVkaXRzPy5mb2NhbFBvaW50XG4gICAgPyB7XG4gICAgICAgIHg6IGlzTnVtYmVyKHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueCkgPyBNYXRoLnJvdW5kKHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueCkgOiA1MCxcbiAgICAgICAgeTogaXNOdW1iZXIodXBsb2FkRWRpdHMuZm9jYWxQb2ludC55KSA/IE1hdGgucm91bmQodXBsb2FkRWRpdHMuZm9jYWxQb2ludC55KSA6IDUwLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG5cbiAgY29uc3QgZGVmYXVsdFJlc3VsdDogSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgICAuLi4oZm9jYWxQb2ludEVuYWJsZWQgJiYgaW5jb21pbmdGb2NhbFBvaW50ICYmIHsgZm9jYWxQb2ludDogaW5jb21pbmdGb2NhbFBvaW50IH0pLFxuICAgIHNpemVEYXRhOiB7fSxcbiAgICBzaXplc1RvU2F2ZTogW10sXG4gIH1cblxuICAvLyBOb3RoaW5nIHRvIHJlc2l6ZSBoZXJlIHNvIHJldHVybiBhcyBlYXJseSBhcyBwb3NzaWJsZVxuICBpZiAoIWltYWdlU2l6ZXMpIHJldHVybiBkZWZhdWx0UmVzdWx0XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGlzIGFuaW1hdGVkXG4gIGNvbnN0IGZpbGVJc0FuaW1hdGVkVHlwZSA9IFsnaW1hZ2UvYXZpZicsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCddLmluY2x1ZGVzKGZpbGUubWltZXR5cGUpXG4gIGNvbnN0IHNoYXJwT3B0aW9uczogU2hhcnBPcHRpb25zID0ge31cblxuICBpZiAoZmlsZUlzQW5pbWF0ZWRUeXBlKSBzaGFycE9wdGlvbnMuYW5pbWF0ZWQgPSB0cnVlXG5cbiAgY29uc3Qgc2hhcnBCYXNlOiBTaGFycCB8IHVuZGVmaW5lZCA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoIHx8IGZpbGUuZGF0YSwgc2hhcnBPcHRpb25zKS5yb3RhdGUoKSAvLyBwYXNzIHJvdGF0ZSgpIHRvIGF1dG8tcm90YXRlIGJhc2VkIG9uIEVYSUYgZGF0YS4gaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzMwODFcbiAgY29uc3Qgb3JpZ2luYWxJbWFnZU1ldGEgPSBhd2FpdCBzaGFycEJhc2UubWV0YWRhdGEoKVxuXG4gIGNvbnN0IHJlc2l6ZUltYWdlTWV0YSA9IHtcbiAgICBoZWlnaHQ6IGV4dHJhY3RIZWlnaHRGcm9tSW1hZ2Uob3JpZ2luYWxJbWFnZU1ldGEpLFxuICAgIHdpZHRoOiBvcmlnaW5hbEltYWdlTWV0YS53aWR0aCxcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHM6IEltYWdlU2l6ZXNSZXN1bHRbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGltYWdlU2l6ZXMubWFwKGFzeW5jIChpbWFnZVJlc2l6ZUNvbmZpZyk6IFByb21pc2U8SW1hZ2VTaXplc1Jlc3VsdD4gPT4ge1xuICAgICAgaW1hZ2VSZXNpemVDb25maWcgPSBzYW5pdGl6ZVJlc2l6ZUNvbmZpZyhpbWFnZVJlc2l6ZUNvbmZpZylcblxuICAgICAgY29uc3QgcmVzaXplQWN0aW9uID0gZ2V0SW1hZ2VSZXNpemVBY3Rpb24oe1xuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICBoYXNGb2NhbFBvaW50OiBCb29sZWFuKGluY29taW5nRm9jYWxQb2ludCksXG4gICAgICAgIGltYWdlUmVzaXplQ29uZmlnLFxuICAgICAgfSlcbiAgICAgIGlmIChyZXNpemVBY3Rpb24gPT09ICdvbWl0JykgcmV0dXJuIGNyZWF0ZVJlc3VsdCh7IG5hbWU6IGltYWdlUmVzaXplQ29uZmlnLm5hbWUgfSlcblxuICAgICAgY29uc3QgaW1hZ2VUb1Jlc2l6ZSA9IHNoYXJwQmFzZS5jbG9uZSgpXG4gICAgICBsZXQgcmVzaXplZCA9IGltYWdlVG9SZXNpemVcblxuICAgICAgaWYgKHJlc2l6ZUFjdGlvbiA9PT0gJ3Jlc2l6ZVdpdGhGb2NhbFBvaW50Jykge1xuICAgICAgICBsZXQgeyBoZWlnaHQ6IHJlc2l6ZUhlaWdodCwgd2lkdGg6IHJlc2l6ZVdpZHRoIH0gPSBpbWFnZVJlc2l6ZUNvbmZpZ1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQXNwZWN0UmF0aW8gPSBkaW1lbnNpb25zLndpZHRoIC8gZGltZW5zaW9ucy5oZWlnaHRcblxuICAgICAgICAvLyBDYWxjdWxhdGUgcmVzaXplV2lkdGggYmFzZWQgb24gb3JpZ2luYWwgYXNwZWN0IHJhdGlvIGlmIGl0J3MgdW5kZWZpbmVkXG4gICAgICAgIGlmIChyZXNpemVIZWlnaHQgJiYgIXJlc2l6ZVdpZHRoKSB7XG4gICAgICAgICAgcmVzaXplV2lkdGggPSBNYXRoLnJvdW5kKHJlc2l6ZUhlaWdodCAqIG9yaWdpbmFsQXNwZWN0UmF0aW8pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgcmVzaXplSGVpZ2h0IGJhc2VkIG9uIG9yaWdpbmFsIGFzcGVjdCByYXRpbyBpZiBpdCdzIHVuZGVmaW5lZFxuICAgICAgICBpZiAocmVzaXplV2lkdGggJiYgIXJlc2l6ZUhlaWdodCkge1xuICAgICAgICAgIHJlc2l6ZUhlaWdodCA9IE1hdGgucm91bmQocmVzaXplV2lkdGggLyBvcmlnaW5hbEFzcGVjdFJhdGlvKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNpemVIZWlnaHQpIHJlc2l6ZUhlaWdodCA9IHJlc2l6ZUltYWdlTWV0YS5oZWlnaHRcbiAgICAgICAgaWYgKCFyZXNpemVXaWR0aCkgcmVzaXplV2lkdGggPSByZXNpemVJbWFnZU1ldGEud2lkdGhcblxuICAgICAgICBjb25zdCByZXNpemVBc3BlY3RSYXRpbyA9IHJlc2l6ZVdpZHRoIC8gcmVzaXplSGVpZ2h0XG4gICAgICAgIGNvbnN0IHByaW9yaXRpemVIZWlnaHQgPSByZXNpemVBc3BlY3RSYXRpbyA8IG9yaWdpbmFsQXNwZWN0UmF0aW9cbiAgICAgICAgLy8gU2NhbGVzIHRoZSBpbWFnZSBiZWZvcmUgZXh0cmFjdGluZyBmcm9tIGl0XG4gICAgICAgIHJlc2l6ZWQgPSBpbWFnZVRvUmVzaXplLnJlc2l6ZSh7XG4gICAgICAgICAgaGVpZ2h0OiBwcmlvcml0aXplSGVpZ2h0ID8gcmVzaXplSGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBwcmlvcml0aXplSGVpZ2h0ID8gdW5kZWZpbmVkIDogcmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gbXVzdCByZWFkIGZyb20gYnVmZmVyLCByZXNpemUubWV0YWRhdGEgd2lsbCByZXR1cm4gdGhlIG9yaWdpbmFsIGltYWdlIG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IHsgaW5mbyB9ID0gYXdhaXQgcmVzaXplZC50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pXG4gICAgICAgIHJlc2l6ZUltYWdlTWV0YS5oZWlnaHQgPSBleHRyYWN0SGVpZ2h0RnJvbUltYWdlKHtcbiAgICAgICAgICAuLi5vcmlnaW5hbEltYWdlTWV0YSxcbiAgICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgICB9KVxuICAgICAgICByZXNpemVJbWFnZU1ldGEud2lkdGggPSBpbmZvLndpZHRoXG5cbiAgICAgICAgY29uc3QgaGFsZlJlc2l6ZVggPSByZXNpemVXaWR0aCAvIDJcbiAgICAgICAgY29uc3QgeEZvY2FsQ2VudGVyID0gcmVzaXplSW1hZ2VNZXRhLndpZHRoICogKGluY29taW5nRm9jYWxQb2ludC54IC8gMTAwKVxuICAgICAgICBjb25zdCBjYWxjdWxhdGVkUmlnaHRQaXhlbEJvdW5kID0geEZvY2FsQ2VudGVyICsgaGFsZlJlc2l6ZVhcbiAgICAgICAgbGV0IGxlZnRCb3VuZCA9IHhGb2NhbENlbnRlciAtIGhhbGZSZXNpemVYXG5cbiAgICAgICAgLy8gaWYgdGhlIHJpZ2h0IGJvdW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaW1hZ2Ugd2lkdGgsIGFkanVzdCB0aGUgbGVmdCBib3VuZFxuICAgICAgICAvLyBrZWVwaW5nIGZvY3VzIG9uIHRoZSByaWdodFxuICAgICAgICBpZiAoY2FsY3VsYXRlZFJpZ2h0UGl4ZWxCb3VuZCA+IHJlc2l6ZUltYWdlTWV0YS53aWR0aCkge1xuICAgICAgICAgIGxlZnRCb3VuZCA9IHJlc2l6ZUltYWdlTWV0YS53aWR0aCAtIHJlc2l6ZVdpZHRoXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgbGVmdCBib3VuZCBpcyBsZXNzIHRoYW4gMCwgYWRqdXN0IHRoZSBsZWZ0IGJvdW5kIHRvIDBcbiAgICAgICAgLy8ga2VlcGluZyB0aGUgZm9jdXMgb24gdGhlIGxlZnRcbiAgICAgICAgaWYgKGxlZnRCb3VuZCA8IDApIGxlZnRCb3VuZCA9IDBcblxuICAgICAgICBjb25zdCBoYWxmUmVzaXplWSA9IHJlc2l6ZUhlaWdodCAvIDJcbiAgICAgICAgY29uc3QgeUZvY2FsQ2VudGVyID0gcmVzaXplSW1hZ2VNZXRhLmhlaWdodCAqIChpbmNvbWluZ0ZvY2FsUG9pbnQueSAvIDEwMClcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlZEJvdHRvbVBpeGVsQm91bmQgPSB5Rm9jYWxDZW50ZXIgKyBoYWxmUmVzaXplWVxuICAgICAgICBsZXQgdG9wQm91bmQgPSB5Rm9jYWxDZW50ZXIgLSBoYWxmUmVzaXplWVxuXG4gICAgICAgIC8vIGlmIHRoZSBib3R0b20gYm91bmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBpbWFnZSBoZWlnaHQsIGFkanVzdCB0aGUgdG9wIGJvdW5kXG4gICAgICAgIC8vIGtlZXBpbmcgdGhlIGltYWdlIGFzIGZhciByaWdodCBhcyBwb3NzaWJsZVxuICAgICAgICBpZiAoY2FsY3VsYXRlZEJvdHRvbVBpeGVsQm91bmQgPiByZXNpemVJbWFnZU1ldGEuaGVpZ2h0KSB7XG4gICAgICAgICAgdG9wQm91bmQgPSByZXNpemVJbWFnZU1ldGEuaGVpZ2h0IC0gcmVzaXplSGVpZ2h0XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgdG9wIGJvdW5kIGlzIGxlc3MgdGhhbiAwLCBhZGp1c3QgdGhlIHRvcCBib3VuZCB0byAwXG4gICAgICAgIC8vIGtlZXBpbmcgdGhlIGltYWdlIGZvY3VzIG5lYXIgdGhlIHRvcFxuICAgICAgICBpZiAodG9wQm91bmQgPCAwKSB0b3BCb3VuZCA9IDBcblxuICAgICAgICByZXNpemVkID0gcmVzaXplZC5leHRyYWN0KHtcbiAgICAgICAgICBoZWlnaHQ6IHJlc2l6ZUhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBNYXRoLmZsb29yKGxlZnRCb3VuZCksXG4gICAgICAgICAgdG9wOiBNYXRoLmZsb29yKHRvcEJvdW5kKSxcbiAgICAgICAgICB3aWR0aDogcmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNpemVkID0gaW1hZ2VUb1Jlc2l6ZS5yZXNpemUoaW1hZ2VSZXNpemVDb25maWcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZVJlc2l6ZUNvbmZpZy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnRvRm9ybWF0KFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1hZ2VSZXNpemVDb25maWcudHJpbU9wdGlvbnMpIHtcbiAgICAgICAgcmVzaXplZCA9IHJlc2l6ZWQudHJpbShpbWFnZVJlc2l6ZUNvbmZpZy50cmltT3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiBidWZmZXJEYXRhLCBpbmZvOiBidWZmZXJJbmZvIH0gPSBhd2FpdCByZXNpemVkLnRvQnVmZmVyKHtcbiAgICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbWFnZSA9IGdldFNhbml0aXplZEltYWdlRGF0YShzYXZlZEZpbGVuYW1lKVxuXG4gICAgICBpZiAocmVxLnBheWxvYWRVcGxvYWRTaXplcykge1xuICAgICAgICByZXEucGF5bG9hZFVwbG9hZFNpemVzW2ltYWdlUmVzaXplQ29uZmlnLm5hbWVdID0gYnVmZmVyRGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lSW5mbyA9IGF3YWl0IGZyb21CdWZmZXIoYnVmZmVyRGF0YSlcblxuICAgICAgY29uc3QgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMgPSBjcmVhdGVJbWFnZU5hbWUoe1xuICAgICAgICBleHRlbnNpb246IG1pbWVJbmZvPy5leHQgfHwgc2FuaXRpemVkSW1hZ2UuZXh0LFxuICAgICAgICBoZWlnaHQ6IGV4dHJhY3RIZWlnaHRGcm9tSW1hZ2Uoe1xuICAgICAgICAgIC4uLm9yaWdpbmFsSW1hZ2VNZXRhLFxuICAgICAgICAgIGhlaWdodDogYnVmZmVySW5mby5oZWlnaHQsXG4gICAgICAgIH0pLFxuICAgICAgICBvdXRwdXRJbWFnZU5hbWU6IHNhbml0aXplZEltYWdlLm5hbWUsXG4gICAgICAgIHdpZHRoOiBidWZmZXJJbmZvLndpZHRoLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaW1hZ2VQYXRoID0gYCR7c3RhdGljUGF0aH0vJHtpbWFnZU5hbWVXaXRoRGltZW5zaW9uc31gXG5cbiAgICAgIGlmIChhd2FpdCBmaWxlRXhpc3RzKGltYWdlUGF0aCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy51bmxpbmtTeW5jKGltYWdlUGF0aClcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIHVubGluayBlcnJvcnNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGhlaWdodCwgc2l6ZSwgd2lkdGggfSA9IGJ1ZmZlckluZm9cbiAgICAgIHJldHVybiBjcmVhdGVSZXN1bHQoe1xuICAgICAgICBuYW1lOiBpbWFnZVJlc2l6ZUNvbmZpZy5uYW1lLFxuICAgICAgICBmaWxlbmFtZTogaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMsXG4gICAgICAgIGZpbGVzaXplOiBzaXplLFxuICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgZmlsZUlzQW5pbWF0ZWRUeXBlICYmIG9yaWdpbmFsSW1hZ2VNZXRhLnBhZ2VzID8gaGVpZ2h0IC8gb3JpZ2luYWxJbWFnZU1ldGEucGFnZXMgOiBoZWlnaHQsXG4gICAgICAgIG1pbWVUeXBlOiBtaW1lSW5mbz8ubWltZSB8fCBtaW1lVHlwZSxcbiAgICAgICAgc2l6ZXNUb1NhdmU6IFt7IGJ1ZmZlcjogYnVmZmVyRGF0YSwgcGF0aDogaW1hZ2VQYXRoIH1dLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0pXG4gICAgfSksXG4gIClcblxuICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoXG4gICAgKGFjYywgcmVzdWx0KSA9PiB7XG4gICAgICBPYmplY3QuYXNzaWduKGFjYy5zaXplRGF0YSwgcmVzdWx0LnNpemVEYXRhKVxuICAgICAgYWNjLnNpemVzVG9TYXZlLnB1c2goLi4ucmVzdWx0LnNpemVzVG9TYXZlKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAgeyAuLi5kZWZhdWx0UmVzdWx0IH0sXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwiZ2V0U2FuaXRpemVkSW1hZ2VEYXRhIiwic291cmNlSW1hZ2UiLCJleHRlbnNpb24iLCJzcGxpdCIsInBvcCIsIm5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZXh0IiwiY3JlYXRlSW1hZ2VOYW1lIiwiaGVpZ2h0Iiwib3V0cHV0SW1hZ2VOYW1lIiwid2lkdGgiLCJjcmVhdGVSZXN1bHQiLCJmaWxlbmFtZSIsImZpbGVzaXplIiwibWltZVR5cGUiLCJzaXplc1RvU2F2ZSIsInNpemVEYXRhIiwiZ2V0SW1hZ2VSZXNpemVBY3Rpb24iLCJkaW1lbnNpb25zIiwib3JpZ2luYWxJbWFnZSIsImhhc0ZvY2FsUG9pbnQiLCJpbWFnZVJlc2l6ZUNvbmZpZyIsImZpdCIsInRhcmdldEhlaWdodCIsInRhcmdldFdpZHRoIiwid2l0aG91dEVubGFyZ2VtZW50Iiwid2l0aG91dFJlZHVjdGlvbiIsIm9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYQW5kWSIsInVuZGVmaW5lZCIsIm9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYT3JZIiwiaXNOdW1iZXIiLCJ0YXJnZXRBc3BlY3RSYXRpbyIsIm9yaWdpbmFsQXNwZWN0UmF0aW8iLCJhcHBseVBheWxvYWRBZGp1c3RtZW50cyIsIm9yaWdpbmFsIiwic2tpcEVubGFyZ2VtZW50Iiwic2tpcFJlZHVjdGlvbiIsInNhbml0aXplUmVzaXplQ29uZmlnIiwicmVzaXplQ29uZmlnIiwicG9zaXRpb24iLCJleHRyYWN0SGVpZ2h0RnJvbUltYWdlIiwic2hhcnBNZXRhZGF0YSIsInBhZ2VzIiwiY29uZmlnIiwiZmlsZSIsInJlcSIsInNhdmVkRmlsZW5hbWUiLCJzdGF0aWNQYXRoIiwidXBsb2FkRWRpdHMiLCJmb2NhbFBvaW50IiwiZm9jYWxQb2ludEVuYWJsZWQiLCJpbWFnZVNpemVzIiwidXBsb2FkIiwiaW5jb21pbmdGb2NhbFBvaW50IiwieCIsIk1hdGgiLCJyb3VuZCIsInkiLCJkZWZhdWx0UmVzdWx0IiwiZmlsZUlzQW5pbWF0ZWRUeXBlIiwiaW5jbHVkZXMiLCJtaW1ldHlwZSIsInNoYXJwT3B0aW9ucyIsImFuaW1hdGVkIiwic2hhcnBCYXNlIiwic2hhcnAiLCJ0ZW1wRmlsZVBhdGgiLCJkYXRhIiwicm90YXRlIiwib3JpZ2luYWxJbWFnZU1ldGEiLCJtZXRhZGF0YSIsInJlc2l6ZUltYWdlTWV0YSIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicmVzaXplQWN0aW9uIiwiQm9vbGVhbiIsImltYWdlVG9SZXNpemUiLCJjbG9uZSIsInJlc2l6ZWQiLCJyZXNpemVIZWlnaHQiLCJyZXNpemVXaWR0aCIsInJlc2l6ZUFzcGVjdFJhdGlvIiwicHJpb3JpdGl6ZUhlaWdodCIsInJlc2l6ZSIsImluZm8iLCJ0b0J1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiaGFsZlJlc2l6ZVgiLCJ4Rm9jYWxDZW50ZXIiLCJjYWxjdWxhdGVkUmlnaHRQaXhlbEJvdW5kIiwibGVmdEJvdW5kIiwiaGFsZlJlc2l6ZVkiLCJ5Rm9jYWxDZW50ZXIiLCJjYWxjdWxhdGVkQm90dG9tUGl4ZWxCb3VuZCIsInRvcEJvdW5kIiwiZXh0cmFjdCIsImxlZnQiLCJmbG9vciIsInRvcCIsImZvcm1hdE9wdGlvbnMiLCJ0b0Zvcm1hdCIsImZvcm1hdCIsIm9wdGlvbnMiLCJ0cmltT3B0aW9ucyIsInRyaW0iLCJidWZmZXJEYXRhIiwiYnVmZmVySW5mbyIsInNhbml0aXplZEltYWdlIiwicGF5bG9hZFVwbG9hZFNpemVzIiwibWltZUluZm8iLCJmcm9tQnVmZmVyIiwiaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMiLCJpbWFnZVBhdGgiLCJmaWxlRXhpc3RzIiwiZnMiLCJ1bmxpbmtTeW5jIiwic2l6ZSIsIm1pbWUiLCJidWZmZXIiLCJwYXRoIiwicmVkdWNlIiwiYWNjIiwicmVzdWx0IiwiT2JqZWN0IiwiYXNzaWduIiwicHVzaCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiI7Ozs7K0JBeVBBOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDRDs7O2VBQThCQTs7OzBCQXBRSDsyREFDWjt5RUFDTTs4REFDSDswQkFhTzttRUFDRjs7Ozs7O0FBeUJ2Qjs7Ozs7Q0FLQyxHQUNELE1BQU1DLHdCQUF3QixDQUFDQztJQUM3QixNQUFNQyxZQUFZRCxZQUFZRSxLQUFLLENBQUMsS0FBS0MsR0FBRztJQUM1QyxNQUFNQyxPQUFPQyxJQUFBQSx5QkFBUSxFQUFDTCxZQUFZTSxTQUFTLENBQUMsR0FBR04sWUFBWU8sV0FBVyxD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
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2ltYWdlUmVzaXplci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgU2hhcnAsIE1ldGFkYXRhIGFzIFNoYXJwTWV0YWRhdGEsIFNoYXJwT3B0aW9ucyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgeyBmcm9tQnVmZmVyIH0gZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJ1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZXhwcmVzcy90eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgRmlsZVNpemUsXG4gIEZpbGVTaXplcyxcbiAgRmlsZVRvU2F2ZSxcbiAgSW1hZ2VTaXplLFxuICBQcm9iZWRJbWFnZVNpemUsXG4gIFVwbG9hZEVkaXRzLFxufSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4uL3V0aWxpdGllcy9pc051bWJlcidcbmltcG9ydCBmaWxlRXhpc3RzIGZyb20gJy4vZmlsZUV4aXN0cydcbmltcG9ydCB7IHR5cGUgV2l0aE1ldGFkYXRhLCBvcHRpb25hbGx5QXBwZW5kTWV0YWRhdGEgfSBmcm9tICcuL29wdGlvbmFsbHlBcHBlbmRNZXRhZGF0YSdcblxudHlwZSBSZXNpemVBcmdzID0ge1xuICBjb25maWc6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdcbiAgZGltZW5zaW9uczogUHJvYmVkSW1hZ2VTaXplXG4gIGZpbGU6IFVwbG9hZGVkRmlsZVxuICBtaW1lVHlwZTogc3RyaW5nXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2F2ZWRGaWxlbmFtZTogc3RyaW5nXG4gIHN0YXRpY1BhdGg6IHN0cmluZ1xuICB1cGxvYWRFZGl0cz86IFVwbG9hZEVkaXRzXG4gIHdpdGhNZXRhZGF0YT86IFdpdGhNZXRhZGF0YVxufVxuXG4vKiogUmVzdWx0IGZyb20gcmVzaXppbmcgYW5kIHRyYW5zZm9ybWluZyB0aGUgcmVxdWVzdGVkIGltYWdlIHNpemVzICovXG50eXBlIEltYWdlU2l6ZXNSZXN1bHQgPSB7XG4gIGZvY2FsUG9pbnQ/OiBVcGxvYWRFZGl0c1snZm9jYWxQb2ludCddXG4gIHNpemVEYXRhOiBGaWxlU2l6ZXNcbiAgc2l6ZXNUb1NhdmU6IEZpbGVUb1NhdmVbXVxufVxuXG50eXBlIFNhbml0aXplZEltYWdlRGF0YSA9IHtcbiAgZXh0OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG59XG5cbi8qKlxuICogU2FuaXRpemUgdGhlIGltYWdlIG5hbWUgYW5kIGV4dHJhY3QgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZSBzb3VyY2UgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gc291cmNlSW1hZ2UgLSB0aGUgc291cmNlIGltYWdlXG4gKiBAcmV0dXJucyB0aGUgc2FuaXRpemVkIG5hbWUgYW5kIGV4dGVuc2lvblxuICovXG5jb25zdCBnZXRTYW5pdGl6ZWRJbWFnZURhdGEgPSAoc291cmNlSW1hZ2U6IHN0cmluZyk6IFNhbml0aXplZEltYWdlRGF0YSA9PiB7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IHNvdXJjZUltYWdlLnNwbGl0KCcuJykucG9wKClcbiAgY29uc3QgbmFtZSA9IHNhbml0aXplKHNvdXJjZUltYWdlLnN1YnN0cmluZygwLCBzb3VyY2VJbWFnZS5sYXN0SW5kZXhPZignLicpKSB8fCBzb3VyY2VJbWFnZSlcbiAgcmV0dXJuIHsgbmFtZSwgZXh0OiBleHRlbnNpb24gfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbWFnZSBuYW1lIGJhc2VkIG9uIHRoZSBvdXRwdXQgaW1hZ2UgbmFtZSwgdGhlIGRpbWVuc2lvbnMgYW5kXG4gKiB0aGUgZXh0ZW5zaW9uLlxuICpcbiAqIElnbm9yZSB0aGUgZmFjdCB0aGF0IGR1cGxpY2F0ZSBuYW1lcyBjb3VsZCBoYXBwZW4gaWYgdGhlIHRoZXJlIGlzIG9uZVxuICogc2l6ZSB3aXRoIGB3aWR0aCBBTkQgaGVpZ2h0YCBhbmQgb25lIHdpdGggb25seSBgaGVpZ2h0IE9SIHdpZHRoYC4gQmVjYXVzZVxuICogc3BhY2UgaXMgZXhwZW5zaXZlLCB3ZSB3aWxsIHJldXNlIHRoZSBzYW1lIGltYWdlIGZvciBib3RoIHNpemVzLlxuICpcbiAqIEBwYXJhbSBvdXRwdXRJbWFnZU5hbWUgLSB0aGUgc2FuaXRpemVkIGltYWdlIG5hbWVcbiAqIEBwYXJhbSBidWZmZXJJbmZvIC0gdGhlIGJ1ZmZlciBpbmZvXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIC0gdGhlIGV4dGVuc2lvbiB0byB1c2VcbiAqIEByZXR1cm5zIHRoZSBuZXcgaW1hZ2UgbmFtZSB0aGF0IGlzIG5vdCB0YWtlblxuICovXG5cbnR5cGUgQ3JlYXRlSW1hZ2VOYW1lQXJncyA9IHtcbiAgZXh0ZW5zaW9uOiBzdHJpbmdcbiAgaGVpZ2h0OiBudW1iZXJcbiAgb3V0cHV0SW1hZ2VOYW1lOiBzdHJpbmdcbiAgd2lkdGg6IG51bWJlclxufVxuY29uc3QgY3JlYXRlSW1hZ2VOYW1lID0gKHtcbiAgZXh0ZW5zaW9uLFxuICBoZWlnaHQsXG4gIG91dHB1dEltYWdlTmFtZSxcbiAgd2lkdGgsXG59OiBDcmVhdGVJbWFnZU5hbWVBcmdzKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGAke291dHB1dEltYWdlTmFtZX0tJHt3aWR0aH14JHtoZWlnaHR9LiR7ZXh0ZW5zaW9ufWBcbn1cblxudHlwZSBDcmVhdGVSZXN1bHRBcmdzID0ge1xuICBmaWxlbmFtZT86IEZpbGVTaXplWydmaWxlbmFtZSddXG4gIGZpbGVzaXplPzogRmlsZVNpemVbJ2ZpbGVzaXplJ11cbiAgaGVpZ2h0PzogRmlsZVNpemVbJ2hlaWdodCddXG4gIG1pbWVUeXBlPzogRmlsZVNpemVbJ21pbWVUeXBlJ11cbiAgbmFtZTogc3RyaW5nXG4gIHNpemVzVG9TYXZlPzogRmlsZVRvU2F2ZVtdXG4gIHdpZHRoPzogRmlsZVNpemVbJ3dpZHRoJ11cbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHJlc3VsdCBvYmplY3QgZm9yIHRoZSBpbWFnZSByZXNpemUgb3BlcmF0aW9uIGJhc2VkIG9uIHRoZVxuICogcHJvdmlkZWQgcGFyYW1ldGVycy4gSWYgdGhlIG5hbWUgaXMgbm90IHByb3ZpZGVkLCBhbiBlbXB0eSByZXN1bHQgb2JqZWN0XG4gKiBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBpbWFnZVxuICogQHBhcmFtIGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBpbWFnZVxuICogQHBhcmFtIHdpZHRoIC0gdGhlIHdpZHRoIG9mIHRoZSBpbWFnZVxuICogQHBhcmFtIGhlaWdodCAtIHRoZSBoZWlnaHQgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gZmlsZXNpemUgLSB0aGUgZmlsZXNpemUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gbWltZVR5cGUgLSB0aGUgbWltZSB0eXBlIG9mIHRoZSBpbWFnZVxuICogQHBhcmFtIHNpemVzVG9TYXZlIC0gdGhlIHNpemVzIHRvIHNhdmVcbiAqIEByZXR1cm5zIHRoZSByZXN1bHQgb2JqZWN0XG4gKi9cbmNvbnN0IGNyZWF0ZVJlc3VsdCA9ICh7XG4gIG5hbWUsXG4gIGZpbGVuYW1lID0gbnVsbCxcbiAgZmlsZXNpemUgPSBudWxsLFxuICBoZWlnaHQgPSBudWxsLFxuICBtaW1lVHlwZSA9IG51bGwsXG4gIHNpemVzVG9TYXZlID0gW10sXG4gIHdpZHRoID0gbnVsbCxcbn06IENyZWF0ZVJlc3VsdEFyZ3MpOiBJbWFnZVNpemVzUmVzdWx0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzaXplRGF0YToge1xuICAgICAgW25hbWVdOiB7XG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBmaWxlc2l6ZSxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgd2lkdGgsXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2l6ZXNUb1NhdmUsXG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gcmVzaXplIHRoZSBpbWFnZS5cbiAqIC0gcmVzaXplIHVzaW5nIGltYWdlIGNvbmZpZ1xuICogLSByZXNpemUgdXNpbmcgaW1hZ2UgY29uZmlnIHdpdGggZm9jYWwgYWRqdXN0bWVudHNcbiAqIC0gZG8gbm90IHJlc2l6ZSBhdCBhbGxcbiAqXG4gKiBgaW1hZ2VSZXNpemVDb25maWcud2l0aG91dEVubGFyZ2VtZW50YDpcbiAqIC0gdW5kZWZpbmVkIFtkZWZhdWx0XTogdXBsb2FkaW5nIGltYWdlcyB3aXRoIHNtYWxsZXIgd2lkdGggQU5EIGhlaWdodCB0aGFuIHRoZSBpbWFnZSBzaXplIHdpbGwgcmV0dXJuIG51bGxcbiAqIC0gZmFsc2U6IGFsd2F5cyBlbmxhcmdlIGltYWdlcyB0byB0aGUgaW1hZ2Ugc2l6ZVxuICogLSB0cnVlOiBpZiB0aGUgaW1hZ2UgaXMgc21hbGxlciB0aGFuIHRoZSBpbWFnZSBzaXplLCByZXR1cm4gdGhlIG9yaWdpbmFsIGltYWdlXG4gKlxuICogYGltYWdlUmVzaXplQ29uZmlnLndpdGhvdXRSZWR1Y3Rpb25gOlxuICogLSBmYWxzZSBbZGVmYXVsdF06IGFsd2F5cyBlbmxhcmdlIGltYWdlcyB0byB0aGUgaW1hZ2Ugc2l6ZVxuICogLSB0cnVlOiBpZiB0aGUgaW1hZ2UgaXMgc21hbGxlciB0aGFuIHRoZSBpbWFnZSBzaXplLCByZXR1cm4gdGhlIG9yaWdpbmFsIGltYWdlXG4gKlxuICogQHJldHVybiAnb21pdCcgfCAncmVzaXplJyB8ICdyZXNpemVXaXRoRm9jYWxQb2ludCdcbiAqL1xuY29uc3QgZ2V0SW1hZ2VSZXNpemVBY3Rpb24gPSAoe1xuICBkaW1lbnNpb25zOiBvcmlnaW5hbEltYWdlLFxuICBoYXNGb2NhbFBvaW50LFxuICBpbWFnZVJlc2l6ZUNvbmZpZyxcbn06IHtcbiAgZGltZW5zaW9uczogUHJvYmVkSW1hZ2VTaXplXG4gIGhhc0ZvY2FsUG9pbnQ/OiBib29sZWFuXG4gIGltYWdlUmVzaXplQ29uZmlnOiBJbWFnZVNpemVcbn0pOiAnb21pdCcgfCAncmVzaXplJyB8ICdyZXNpemVXaXRoRm9jYWxQb2ludCcgPT4ge1xuICBjb25zdCB7XG4gICAgZml0LFxuICAgIGhlaWdodDogdGFyZ2V0SGVpZ2h0LFxuICAgIHdpZHRoOiB0YXJnZXRXaWR0aCxcbiAgICB3aXRob3V0RW5sYXJnZW1lbnQsXG4gICAgd2l0aG91dFJlZHVjdGlvbixcbiAgfSA9IGltYWdlUmVzaXplQ29uZmlnXG5cbiAgLy8gcHJldmVudCB1cHNjYWxpbmcgYnkgZGVmYXVsdCB3aGVuIHggYW5kIHkgYXJlIGJvdGggc21hbGxlciB0aGFuIHRhcmdldCBpbWFnZSBzaXplXG4gIGlmICh0YXJnZXRIZWlnaHQgJiYgdGFyZ2V0V2lkdGgpIHtcbiAgICBjb25zdCBvcmlnaW5hbEltYWdlSXNTbWFsbGVyWEFuZFkgPVxuICAgICAgb3JpZ2luYWxJbWFnZS53aWR0aCA8IHRhcmdldFdpZHRoICYmIG9yaWdpbmFsSW1hZ2UuaGVpZ2h0IDwgdGFyZ2V0SGVpZ2h0XG4gICAgaWYgKHdpdGhvdXRFbmxhcmdlbWVudCA9PT0gdW5kZWZpbmVkICYmIG9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYQW5kWSkge1xuICAgICAgcmV0dXJuICdvbWl0JyAvLyBwcmV2ZW50IGltYWdlIHNpemUgZnJvbSBiZWluZyBlbmxhcmdlZFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYT3JZID1cbiAgICBvcmlnaW5hbEltYWdlLndpZHRoIDwgdGFyZ2V0V2lkdGggfHwgb3JpZ2luYWxJbWFnZS5oZWlnaHQgPCB0YXJnZXRIZWlnaHRcbiAgaWYgKGZpdCA9PT0gJ2NvbnRhaW4nIHx8IGZpdCA9PT0gJ2luc2lkZScpIHJldHVybiAncmVzaXplJ1xuICBpZiAoIWlzTnVtYmVyKHRhcmdldEhlaWdodCkgJiYgIWlzTnVtYmVyKHRhcmdldFdpZHRoKSkgcmV0dXJuICdyZXNpemUnXG5cbiAgY29uc3QgdGFyZ2V0QXNwZWN0UmF0aW8gPSB0YXJnZXRXaWR0aCAvIHRhcmdldEhlaWdodFxuICBjb25zdCBvcmlnaW5hbEFzcGVjdFJhdGlvID0gb3JpZ2luYWxJbWFnZS53aWR0aCAvIG9yaWdpbmFsSW1hZ2UuaGVpZ2h0XG4gIGlmIChvcmlnaW5hbEFzcGVjdFJhdGlvID09PSB0YXJnZXRBc3BlY3RSYXRpbykgcmV0dXJuICdyZXNpemUnXG5cbiAgaWYgKHdpdGhvdXRFbmxhcmdlbWVudCAmJiBvcmlnaW5hbEltYWdlSXNTbWFsbGVyWE9yWSkgcmV0dXJuICdyZXNpemUnXG4gIGlmICh3aXRob3V0UmVkdWN0aW9uICYmICFvcmlnaW5hbEltYWdlSXNTbWFsbGVyWE9yWSkgcmV0dXJuICdyZXNpemUnXG5cbiAgcmV0dXJuIGhhc0ZvY2FsUG9pbnQgPyAncmVzaXplV2l0aEZvY2FsUG9pbnQnIDogJ3Jlc2l6ZSdcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHBhc3NlZCBkaXJlY3RseSB0byBzaGFycCB3aXRob3V0IHBheWxvYWQgYWRqdXN0aW5nIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIG9iamVjdCBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBhbmQgcmVzaXplIG9wdGlvbnNcbiAqIEBwYXJhbSBvcmlnaW5hbCAtIHRoZSBvcmlnaW5hbCBpbWFnZSBzaXplXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbWFnZSBzaG91bGQgcGFzc2VkIGRpcmVjdGx5IHRvIHNoYXJwXG4gKi9cbmNvbnN0IGFwcGx5UGF5bG9hZEFkanVzdG1lbnRzID0gKFxuICB7IGZpdCwgaGVpZ2h0LCB3aWR0aCwgd2l0aG91dEVubGFyZ2VtZW50LCB3aXRob3V0UmVkdWN0aW9uIH06IEltYWdlU2l6ZSxcbiAgb3JpZ2luYWw6IFByb2JlZEltYWdlU2l6ZSxcbikgPT4ge1xuICBpZiAoZml0ID09PSAnY29udGFpbicgfHwgZml0ID09PSAnaW5zaWRlJykgcmV0dXJuIGZhbHNlXG4gIGlmICghaXNOdW1iZXIoaGVpZ2h0KSAmJiAhaXNOdW1iZXIod2lkdGgpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCB0YXJnZXRBc3BlY3RSYXRpbyA9IHdpZHRoIC8gaGVpZ2h0XG4gIGNvbnN0IG9yaWdpbmFsQXNwZWN0UmF0aW8gPSBvcmlnaW5hbC53aWR0aCAvIG9yaWdpbmFsLmhlaWdodFxuICBpZiAob3JpZ2luYWxBc3BlY3RSYXRpbyA9PT0gdGFyZ2V0QXNwZWN0UmF0aW8pIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHNraXBFbmxhcmdlbWVudCA9IHdpdGhvdXRFbmxhcmdlbWVudCAmJiAob3JpZ2luYWwuaGVpZ2h0IDwgaGVpZ2h0IHx8IG9yaWdpbmFsLndpZHRoIDwgd2lkdGgpXG4gIGNvbnN0IHNraXBSZWR1Y3Rpb24gPSB3aXRob3V0UmVkdWN0aW9uICYmIChvcmlnaW5hbC5oZWlnaHQgPiBoZWlnaHQgfHwgb3JpZ2luYWwud2lkdGggPiB3aWR0aClcbiAgaWYgKHNraXBFbmxhcmdlbWVudCB8fCBza2lwUmVkdWN0aW9uKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIFNhbml0aXplIHRoZSByZXNpemUgY29uZmlnLiBJZiB0aGUgcmVzaXplIGNvbmZpZyBoYXMgdGhlIGB3aXRob3V0UmVkdWN0aW9uYFxuICogcHJvcGVydHkgc2V0IHRvIHRydWUsIHRoZSBgZml0YCBhbmQgYHBvc2l0aW9uYCBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0IHRvIGBjb250YWluYFxuICogYW5kIGB0b3AgbGVmdGAgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIEBwYXJhbSByZXNpemVDb25maWcgLSB0aGUgcmVzaXplIGNvbmZpZ1xuICogQHJldHVybnMgYSBzYW5pdGl6ZWQgcmVzaXplIGNvbmZpZ1xuICovXG5jb25zdCBzYW5pdGl6ZVJlc2l6ZUNvbmZpZyA9IChyZXNpemVDb25maWc6IEltYWdlU2l6ZSk6IEltYWdlU2l6ZSA9PiB7XG4gIGlmIChyZXNpemVDb25maWcud2l0aG91dFJlZHVjdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNpemVDb25maWcsXG4gICAgICAvLyBXaHkgZml0IGBjb250YWluYCBzaG91bGQgYWxzbyBiZSBzZXQgdG8gaHR0cHM6Ly9naXRodWIuY29tL2xvdmVsbC9zaGFycC9pc3N1ZXMvMzU5NVxuICAgICAgZml0OiByZXNpemVDb25maWc/LmZpdCB8fCAnY29udGFpbicsXG4gICAgICBwb3NpdGlvbjogcmVzaXplQ29uZmlnPy5wb3NpdGlvbiB8fCAnbGVmdCB0b3AnLFxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzaXplQ29uZmlnXG59XG5cbi8qKlxuICogVXNlZCB0byBleHRyYWN0IGhlaWdodCBmcm9tIGltYWdlcywgYW5pbWF0ZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBzaGFycE1ldGFkYXRhIC0gdGhlIHNoYXJwIG1ldGFkYXRhXG4gKiBAcmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZVxuICovXG5mdW5jdGlvbiBleHRyYWN0SGVpZ2h0RnJvbUltYWdlKHNoYXJwTWV0YWRhdGE6IFNoYXJwTWV0YWRhdGEpOiBudW1iZXIge1xuICBpZiAoc2hhcnBNZXRhZGF0YT8ucGFnZXMpIHtcbiAgICByZXR1cm4gc2hhcnBNZXRhZGF0YS5oZWlnaHQgLyBzaGFycE1ldGFkYXRhLnBhZ2VzXG4gIH1cbiAgcmV0dXJuIHNoYXJwTWV0YWRhdGEuaGVpZ2h0XG59XG5cbi8qKlxuICogRm9yIHRoZSBwcm92aWRlZCBpbWFnZSBzaXplcywgaGFuZGxlIHRoZSByZXNpemluZyBhbmQgdGhlIHRyYW5zZm9ybXNcbiAqIChmb3JtYXQsIHRyaW0sIGV0Yy4pIG9mIGVhY2ggcmVxdWVzdGVkIGltYWdlIHNpemUgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9iamVjdC5cbiAqIFRoaXMgb25seSBoYW5kbGVzIHRoZSBpbWFnZSBzaXplcy4gVGhlIHRyYW5zZm9ybXMgb2YgdGhlIG9yaWdpbmFsIGltYWdlXG4gKiBhcmUgaGFuZGxlZCBpbiB7QGxpbmsgLi9nZW5lcmF0ZUZpbGVEYXRhLnRzfS5cbiAqXG4gKiBUaGUgaW1hZ2Ugd2lsbCBiZSByZXNpemVkIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWRcbiAqIHJlc2l6ZSBjb25maWcuIElmIG5vIGltYWdlIHNpemVzIGFyZSByZXF1ZXN0ZWQsIHRoZSByZXNvbHZlZCBkYXRhIHdpbGwgYmUgZW1wdHkuXG4gKiBGb3IgZXZlcnkgaW1hZ2UgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQsIGEgcmVzdWx0IG9iamVjdCB3aXRoIGBudWxsYFxuICogcGFyYW1ldGVycyB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSByZXNpemVDb25maWcgLSB0aGUgcmVzaXplIGNvbmZpZ1xuICogQHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgcmVzaXplIG9wZXJhdGlvbihzKVxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiByZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzKHtcbiAgY29uZmlnLFxuICBkaW1lbnNpb25zLFxuICBmaWxlLFxuICBtaW1lVHlwZSxcbiAgcmVxLFxuICBzYXZlZEZpbGVuYW1lLFxuICBzdGF0aWNQYXRoLFxuICB1cGxvYWRFZGl0cyxcbiAgd2l0aE1ldGFkYXRhLFxufTogUmVzaXplQXJncyk6IFByb21pc2U8SW1hZ2VTaXplc1Jlc3VsdD4ge1xuICBjb25zdCB7IGZvY2FsUG9pbnQ6IGZvY2FsUG9pbnRFbmFibGVkID0gdHJ1ZSwgaW1hZ2VTaXplcyB9ID0gY29uZmlnLnVwbG9hZFxuXG4gIC8vIEZvY2FsIHBvaW50IGFkanVzdG1lbnRzXG4gIGNvbnN0IGluY29taW5nRm9jYWxQb2ludCA9IHVwbG9hZEVkaXRzPy5mb2NhbFBvaW50XG4gICAgPyB7XG4gICAgICAgIHg6IGlzTnVtYmVyKHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueCkgPyBNYXRoLnJvdW5kKHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueCkgOiA1MCxcbiAgICAgICAgeTogaXNOdW1iZXIodXBsb2FkRWRpdHMuZm9jYWxQb2ludC55KSA/IE1hdGgucm91bmQodXBsb2FkRWRpdHMuZm9jYWxQb2ludC55KSA6IDUwLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG5cbiAgY29uc3QgZGVmYXVsdFJlc3VsdDogSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgICAuLi4oZm9jYWxQb2ludEVuYWJsZWQgJiYgaW5jb21pbmdGb2NhbFBvaW50ICYmIHsgZm9jYWxQb2ludDogaW5jb21pbmdGb2NhbFBvaW50IH0pLFxuICAgIHNpemVEYXRhOiB7fSxcbiAgICBzaXplc1RvU2F2ZTogW10sXG4gIH1cblxuICAvLyBOb3RoaW5nIHRvIHJlc2l6ZSBoZXJlIHNvIHJldHVybiBhcyBlYXJseSBhcyBwb3NzaWJsZVxuICBpZiAoIWltYWdlU2l6ZXMpIHJldHVybiBkZWZhdWx0UmVzdWx0XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGlzIGFuaW1hdGVkXG4gIGNvbnN0IGZpbGVJc0FuaW1hdGVkVHlwZSA9IFsnaW1hZ2UvYXZpZicsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCddLmluY2x1ZGVzKGZpbGUubWltZXR5cGUpXG4gIGNvbnN0IHNoYXJwT3B0aW9uczogU2hhcnBPcHRpb25zID0ge31cblxuICBpZiAoZmlsZUlzQW5pbWF0ZWRUeXBlKSBzaGFycE9wdGlvbnMuYW5pbWF0ZWQgPSB0cnVlXG5cbiAgY29uc3Qgc2hhcnBCYXNlOiBTaGFycCB8IHVuZGVmaW5lZCA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoIHx8IGZpbGUuZGF0YSwgc2hhcnBPcHRpb25zKS5yb3RhdGUoKSAvLyBwYXNzIHJvdGF0ZSgpIHRvIGF1dG8tcm90YXRlIGJhc2VkIG9uIEVYSUYgZGF0YS4gaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzMwODFcbiAgY29uc3Qgb3JpZ2luYWxJbWFnZU1ldGEgPSBhd2FpdCBzaGFycEJhc2UubWV0YWRhdGEoKVxuXG4gIGNvbnN0IHJlc2l6ZUltYWdlTWV0YSA9IHtcbiAgICBoZWlnaHQ6IGV4dHJhY3RIZWlnaHRGcm9tSW1hZ2Uob3JpZ2luYWxJbWFnZU1ldGEpLFxuICAgIHdpZHRoOiBvcmlnaW5hbEltYWdlTWV0YS53aWR0aCxcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHM6IEltYWdlU2l6ZXNSZXN1bHRbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGltYWdlU2l6ZXMubWFwKGFzeW5jIChpbWFnZVJlc2l6ZUNvbmZpZyk6IFByb21pc2U8SW1hZ2VTaXplc1Jlc3VsdD4gPT4ge1xuICAgICAgaW1hZ2VSZXNpemVDb25maWcgPSBzYW5pdGl6ZVJlc2l6ZUNvbmZpZyhpbWFnZVJlc2l6ZUNvbmZpZylcblxuICAgICAgY29uc3QgcmVzaXplQWN0aW9uID0gZ2V0SW1hZ2VSZXNpemVBY3Rpb24oe1xuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICBoYXNGb2NhbFBvaW50OiBCb29sZWFuKGluY29taW5nRm9jYWxQb2ludCksXG4gICAgICAgIGltYWdlUmVzaXplQ29uZmlnLFxuICAgICAgfSlcbiAgICAgIGlmIChyZXNpemVBY3Rpb24gPT09ICdvbWl0JykgcmV0dXJuIGNyZWF0ZVJlc3VsdCh7IG5hbWU6IGltYWdlUmVzaXplQ29uZmlnLm5hbWUgfSlcblxuICAgICAgY29uc3QgaW1hZ2VUb1Jlc2l6ZSA9IHNoYXJwQmFzZS5jbG9uZSgpXG4gICAgICBsZXQgcmVzaXplZCA9IGltYWdlVG9SZXNpemVcblxuICAgICAgaWYgKHJlc2l6ZUFjdGlvbiA9PT0gJ3Jlc2l6ZVdpdGhGb2NhbFBvaW50Jykge1xuICAgICAgICBsZXQgeyBoZWlnaHQ6IHJlc2l6ZUhlaWdodCwgd2lkdGg6IHJlc2l6ZVdpZHRoIH0gPSBpbWFnZVJlc2l6ZUNvbmZpZ1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQXNwZWN0UmF0aW8gPSBkaW1lbnNpb25zLndpZHRoIC8gZGltZW5zaW9ucy5oZWlnaHRcblxuICAgICAgICAvLyBDYWxjdWxhdGUgcmVzaXplV2lkdGggYmFzZWQgb24gb3JpZ2luYWwgYXNwZWN0IHJhdGlvIGlmIGl0J3MgdW5kZWZpbmVkXG4gICAgICAgIGlmIChyZXNpemVIZWlnaHQgJiYgIXJlc2l6ZVdpZHRoKSB7XG4gICAgICAgICAgcmVzaXplV2lkdGggPSBNYXRoLnJvdW5kKHJlc2l6ZUhlaWdodCAqIG9yaWdpbmFsQXNwZWN0UmF0aW8pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgcmVzaXplSGVpZ2h0IGJhc2VkIG9uIG9yaWdpbmFsIGFzcGVjdCByYXRpbyBpZiBpdCdzIHVuZGVmaW5lZFxuICAgICAgICBpZiAocmVzaXplV2lkdGggJiYgIXJlc2l6ZUhlaWdodCkge1xuICAgICAgICAgIHJlc2l6ZUhlaWdodCA9IE1hdGgucm91bmQocmVzaXplV2lkdGggLyBvcmlnaW5hbEFzcGVjdFJhdGlvKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNpemVIZWlnaHQpIHJlc2l6ZUhlaWdodCA9IHJlc2l6ZUltYWdlTWV0YS5oZWlnaHRcbiAgICAgICAgaWYgKCFyZXNpemVXaWR0aCkgcmVzaXplV2lkdGggPSByZXNpemVJbWFnZU1ldGEud2lkdGhcblxuICAgICAgICBjb25zdCByZXNpemVBc3BlY3RSYXRpbyA9IHJlc2l6ZVdpZHRoIC8gcmVzaXplSGVpZ2h0XG4gICAgICAgIGNvbnN0IHByaW9yaXRpemVIZWlnaHQgPSByZXNpemVBc3BlY3RSYXRpbyA8IG9yaWdpbmFsQXNwZWN0UmF0aW9cbiAgICAgICAgLy8gU2NhbGVzIHRoZSBpbWFnZSBiZWZvcmUgZXh0cmFjdGluZyBmcm9tIGl0XG4gICAgICAgIHJlc2l6ZWQgPSBpbWFnZVRvUmVzaXplLnJlc2l6ZSh7XG4gICAgICAgICAgaGVpZ2h0OiBwcmlvcml0aXplSGVpZ2h0ID8gcmVzaXplSGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBwcmlvcml0aXplSGVpZ2h0ID8gdW5kZWZpbmVkIDogcmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgbWV0YWRhdGFBcHBlbmRlZEZpbGUgPSBhd2FpdCBvcHRpb25hbGx5QXBwZW5kTWV0YWRhdGEoe1xuICAgICAgICAgIHJlcSxcbiAgICAgICAgICBzaGFycEZpbGU6IHJlc2l6ZWQsXG4gICAgICAgICAgd2l0aE1ldGFkYXRhLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIE11c3QgcmVhZCBmcm9tIGJ1ZmZlciwgcmVzaXplZC5tZXRhZGF0YSB3aWxsIHJldHVybiB0aGUgb3JpZ2luYWwgaW1hZ2UgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgeyBpbmZvIH0gPSBhd2FpdCBtZXRhZGF0YUFwcGVuZGVkRmlsZS50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pXG5cbiAgICAgICAgcmVzaXplSW1hZ2VNZXRhLmhlaWdodCA9IGV4dHJhY3RIZWlnaHRGcm9tSW1hZ2Uoe1xuICAgICAgICAgIC4uLm9yaWdpbmFsSW1hZ2VNZXRhLFxuICAgICAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICAgIH0pXG4gICAgICAgIHJlc2l6ZUltYWdlTWV0YS53aWR0aCA9IGluZm8ud2lkdGhcblxuICAgICAgICBjb25zdCBoYWxmUmVzaXplWCA9IHJlc2l6ZVdpZHRoIC8gMlxuICAgICAgICBjb25zdCB4Rm9jYWxDZW50ZXIgPSByZXNpemVJbWFnZU1ldGEud2lkdGggKiAoaW5jb21pbmdGb2NhbFBvaW50LnggLyAxMDApXG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRSaWdodFBpeGVsQm91bmQgPSB4Rm9jYWxDZW50ZXIgKyBoYWxmUmVzaXplWFxuICAgICAgICBsZXQgbGVmdEJvdW5kID0geEZvY2FsQ2VudGVyIC0gaGFsZlJlc2l6ZVhcblxuICAgICAgICAvLyBpZiB0aGUgcmlnaHQgYm91bmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBpbWFnZSB3aWR0aCwgYWRqdXN0IHRoZSBsZWZ0IGJvdW5kXG4gICAgICAgIC8vIGtlZXBpbmcgZm9jdXMgb24gdGhlIHJpZ2h0XG4gICAgICAgIGlmIChjYWxjdWxhdGVkUmlnaHRQaXhlbEJvdW5kID4gcmVzaXplSW1hZ2VNZXRhLndpZHRoKSB7XG4gICAgICAgICAgbGVmdEJvdW5kID0gcmVzaXplSW1hZ2VNZXRhLndpZHRoIC0gcmVzaXplV2lkdGhcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBsZWZ0IGJvdW5kIGlzIGxlc3MgdGhhbiAwLCBhZGp1c3QgdGhlIGxlZnQgYm91bmQgdG8gMFxuICAgICAgICAvLyBrZWVwaW5nIHRoZSBmb2N1cyBvbiB0aGUgbGVmdFxuICAgICAgICBpZiAobGVmdEJvdW5kIDwgMCkgbGVmdEJvdW5kID0gMFxuXG4gICAgICAgIGNvbnN0IGhhbGZSZXNpemVZID0gcmVzaXplSGVpZ2h0IC8gMlxuICAgICAgICBjb25zdCB5Rm9jYWxDZW50ZXIgPSByZXNpemVJbWFnZU1ldGEuaGVpZ2h0ICogKGluY29taW5nRm9jYWxQb2ludC55IC8gMTAwKVxuICAgICAgICBjb25zdCBjYWxjdWxhdGVkQm90dG9tUGl4ZWxCb3VuZCA9IHlGb2NhbENlbnRlciArIGhhbGZSZXNpemVZXG4gICAgICAgIGxldCB0b3BCb3VuZCA9IHlGb2NhbENlbnRlciAtIGhhbGZSZXNpemVZXG5cbiAgICAgICAgLy8gaWYgdGhlIGJvdHRvbSBib3VuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGltYWdlIGhlaWdodCwgYWRqdXN0IHRoZSB0b3AgYm91bmRcbiAgICAgICAgLy8ga2VlcGluZyB0aGUgaW1hZ2UgYXMgZmFyIHJpZ2h0IGFzIHBvc3NpYmxlXG4gICAgICAgIGlmIChjYWxjdWxhdGVkQm90dG9tUGl4ZWxCb3VuZCA+IHJlc2l6ZUltYWdlTWV0YS5oZWlnaHQpIHtcbiAgICAgICAgICB0b3BCb3VuZCA9IHJlc2l6ZUltYWdlTWV0YS5oZWlnaHQgLSByZXNpemVIZWlnaHRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSB0b3AgYm91bmQgaXMgbGVzcyB0aGFuIDAsIGFkanVzdCB0aGUgdG9wIGJvdW5kIHRvIDBcbiAgICAgICAgLy8ga2VlcGluZyB0aGUgaW1hZ2UgZm9jdXMgbmVhciB0aGUgdG9wXG4gICAgICAgIGlmICh0b3BCb3VuZCA8IDApIHRvcEJvdW5kID0gMFxuXG4gICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLmV4dHJhY3Qoe1xuICAgICAgICAgIGhlaWdodDogcmVzaXplSGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IE1hdGguZmxvb3IobGVmdEJvdW5kKSxcbiAgICAgICAgICB0b3A6IE1hdGguZmxvb3IodG9wQm91bmQpLFxuICAgICAgICAgIHdpZHRoOiByZXNpemVXaWR0aCxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2l6ZWQgPSBpbWFnZVRvUmVzaXplLnJlc2l6ZShpbWFnZVJlc2l6ZUNvbmZpZylcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgcmVzaXplZCA9IHJlc2l6ZWQudG9Gb3JtYXQoXG4gICAgICAgICAgaW1hZ2VSZXNpemVDb25maWcuZm9ybWF0T3B0aW9ucy5mb3JtYXQsXG4gICAgICAgICAgaW1hZ2VSZXNpemVDb25maWcuZm9ybWF0T3B0aW9ucy5vcHRpb25zLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZVJlc2l6ZUNvbmZpZy50cmltT3B0aW9ucykge1xuICAgICAgICByZXNpemVkID0gcmVzaXplZC50cmltKGltYWdlUmVzaXplQ29uZmlnLnRyaW1PcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRhZGF0YUFwcGVuZGVkRmlsZSA9IGF3YWl0IG9wdGlvbmFsbHlBcHBlbmRNZXRhZGF0YSh7XG4gICAgICAgIHJlcSxcbiAgICAgICAgc2hhcnBGaWxlOiByZXNpemVkLFxuICAgICAgICB3aXRoTWV0YWRhdGEsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7IGRhdGE6IGJ1ZmZlckRhdGEsIGluZm86IGJ1ZmZlckluZm8gfSA9IGF3YWl0IG1ldGFkYXRhQXBwZW5kZWRGaWxlLnRvQnVmZmVyKHtcbiAgICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbWFnZSA9IGdldFNhbml0aXplZEltYWdlRGF0YShzYXZlZEZpbGVuYW1lKVxuXG4gICAgICBpZiAocmVxLnBheWxvYWRVcGxvYWRTaXplcykge1xuICAgICAgICByZXEucGF5bG9hZFVwbG9hZFNpemVzW2ltYWdlUmVzaXplQ29uZmlnLm5hbWVdID0gYnVmZmVyRGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lSW5mbyA9IGF3YWl0IGZyb21CdWZmZXIoYnVmZmVyRGF0YSlcblxuICAgICAgY29uc3QgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMgPSBjcmVhdGVJbWFnZU5hbWUoe1xuICAgICAgICBleHRlbnNpb246IG1pbWVJbmZvPy5leHQgfHwgc2FuaXRpemVkSW1hZ2UuZXh0LFxuICAgICAgICBoZWlnaHQ6IGV4dHJhY3RIZWlnaHRGcm9tSW1hZ2Uoe1xuICAgICAgICAgIC4uLm9yaWdpbmFsSW1hZ2VNZXRhLFxuICAgICAgICAgIGhlaWdodDogYnVmZmVySW5mby5oZWlnaHQsXG4gICAgICAgIH0pLFxuICAgICAgICBvdXRwdXRJbWFnZU5hbWU6IHNhbml0aXplZEltYWdlLm5hbWUsXG4gICAgICAgIHdpZHRoOiBidWZmZXJJbmZvLndpZHRoLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaW1hZ2VQYXRoID0gYCR7c3RhdGljUGF0aH0vJHtpbWFnZU5hbWVXaXRoRGltZW5zaW9uc31gXG5cbiAgICAgIGlmIChhd2FpdCBmaWxlRXhpc3RzKGltYWdlUGF0aCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy51bmxpbmtTeW5jKGltYWdlUGF0aClcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIHVubGluayBlcnJvcnNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGhlaWdodCwgc2l6ZSwgd2lkdGggfSA9IGJ1ZmZlckluZm9cbiAgICAgIHJldHVybiBjcmVhdGVSZXN1bHQoe1xuICAgICAgICBuYW1lOiBpbWFnZVJlc2l6ZUNvbmZpZy5uYW1lLFxuICAgICAgICBmaWxlbmFtZTogaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMsXG4gICAgICAgIGZpbGVzaXplOiBzaXplLFxuICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgZmlsZUlzQW5pbWF0ZWRUeXBlICYmIG9yaWdpbmFsSW1hZ2VNZXRhLnBhZ2VzID8gaGVpZ2h0IC8gb3JpZ2luYWxJbWFnZU1ldGEucGFnZXMgOiBoZWlnaHQsXG4gICAgICAgIG1pbWVUeXBlOiBtaW1lSW5mbz8ubWltZSB8fCBtaW1lVHlwZSxcbiAgICAgICAgc2l6ZXNUb1NhdmU6IFt7IGJ1ZmZlcjogYnVmZmVyRGF0YSwgcGF0aDogaW1hZ2VQYXRoIH1dLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0pXG4gICAgfSksXG4gIClcblxuICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoXG4gICAgKGFjYywgcmVzdWx0KSA9PiB7XG4gICAgICBPYmplY3QuYXNzaWduKGFjYy5zaXplRGF0YSwgcmVzdWx0LnNpemVEYXRhKVxuICAgICAgYWNjLnNpemVzVG9TYXZlLnB1c2goLi4ucmVzdWx0LnNpemVzVG9TYXZlKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAgeyAuLi5kZWZhdWx0UmVzdWx0IH0sXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwiZ2V0U2FuaXRpemVkSW1hZ2VEYXRhIiwic291cmNlSW1hZ2UiLCJleHRlbnNpb24iLCJzcGxpdCIsInBvcCIsIm5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZXh0IiwiY3JlYXRlSW1hZ2VOYW1lIiwiaGVpZ2h0Iiwib3V0cHV0SW1hZ2VOYW1lIiwid2lkdGgiLCJjcmVhdGVSZXN1bHQiLCJmaWxlbmFtZSIsImZpbGVzaXplIiwibWltZVR5cGUiLCJzaXplc1RvU2F2ZSIsInNpemVEYXRhIiwiZ2V0SW1hZ2VSZXNpemVBY3Rpb24iLCJkaW1lbnNpb25zIiwib3JpZ2luYWxJbWFnZSIsImhhc0ZvY2FsUG9pbnQiLCJpbWFnZVJlc2l6ZUNvbmZpZyIsImZpdCIsInRhcmdldEhlaWdodCIsInRhcmdldFdpZHRoIiwid2l0aG91dEVubGFyZ2VtZW50Iiwid2l0aG91dFJlZHVjdGlvbiIsIm9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYQW5kWSIsInVuZGVmaW5lZCIsIm9yaWdpbmFsSW1hZ2VJc1NtYWxsZXJYT3JZIiwiaXNOdW1iZXIiLCJ0YXJnZXRBc3BlY3RSYXRpbyIsIm9yaWdpbmFsQXNwZWN0UmF0aW8iLCJhcHBseVBheWxvYWRBZGp1c3RtZW50cyIsIm9yaWdpbmFsIiwic2tpcEVubGFyZ2VtZW50Iiwic2tpcFJlZHVjdGlvbiIsInNhbml0aXplUmVzaXplQ29uZmlnIiwicmVzaXplQ29uZmlnIiwicG9zaXRpb24iLCJleHRyYWN0SGVpZ2h0RnJvbUltYWdlIiwic2hhcnBNZXRhZGF0YSIsInBhZ2VzIiwiY29uZmlnIiwiZmlsZSIsInJlcSIsInNhdmVkRmlsZW5hbWUiLCJzdGF0aWNQYXRoIiwidXBsb2FkRWRpdHMiLCJ3aXRoTWV0YWRhdGEiLCJmb2NhbFBvaW50IiwiZm9jYWxQb2ludEVuYWJsZWQiLCJpbWFnZVNpemVzIiwidXBsb2FkIiwiaW5jb21pbmdGb2NhbFBvaW50IiwieCIsIk1hdGgiLCJyb3VuZCIsInkiLCJkZWZhdWx0UmVzdWx0IiwiZmlsZUlzQW5pbWF0ZWRUeXBlIiwiaW5jbHVkZXMiLCJtaW1ldHlwZSIsInNoYXJwT3B0aW9ucyIsImFuaW1hdGVkIiwic2hhcnBCYXNlIiwic2hhcnAiLCJ0ZW1wRmlsZVBhdGgiLCJkYXRhIiwicm90YXRlIiwib3JpZ2luYWxJbWFnZU1ldGEiLCJtZXRhZGF0YSIsInJlc2l6ZUltYWdlTWV0YSIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicmVzaXplQWN0aW9uIiwiQm9vbGVhbiIsImltYWdlVG9SZXNpemUiLCJjbG9uZSIsInJlc2l6ZWQiLCJyZXNpemVIZWlnaHQiLCJyZXNpemVXaWR0aCIsInJlc2l6ZUFzcGVjdFJhdGlvIiwicHJpb3JpdGl6ZUhlaWdodCIsInJlc2l6ZSIsIm1ldGFkYXRhQXBwZW5kZWRGaWxlIiwib3B0aW9uYWxseUFwcGVuZE1ldGFkYXRhIiwic2hhcnBGaWxlIiwiaW5mbyIsInRvQnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJoYWxmUmVzaXplWCIsInhGb2NhbENlbnRlciIsImNhbGN1bGF0ZWRSaWdodFBpeGVsQm91bmQiLCJsZWZ0Qm91bmQiLCJoYWxmUmVzaXplWSIsInlGb2NhbENlbnRlciIsImNhbGN1bGF0ZWRCb3R0b21QaXhlbEJvdW5kIiwidG9wQm91bmQiLCJleHRyYWN0IiwibGVmdCIsImZsb29yIiwidG9wIiwiZm9ybWF0T3B0aW9ucyIsInRvRm9ybWF0IiwiZm9ybWF0Iiwib3B0aW9ucyIsInRyaW1PcHRpb25zIiwidHJpbSIsImJ1ZmZlckRhdGEiLCJidWZmZXJJbmZvIiwic2FuaXRpemVkSW1hZ2UiLCJwYXlsb2FkVXBsb2FkU2l6ZXMiLCJtaW1lSW5mbyIsImZyb21CdWZmZXIiLCJpbWFnZU5hbWVXaXRoRGltZW5zaW9ucyIsImltYWdlUGF0aCIsImZpbGVFeGlzdHMiLCJmcyIsInVubGlua1N5bmMiLCJzaXplIiwibWltZSIsImJ1ZmZlciIsInBhdGgiLCJyZWR1Y2UiLCJhY2MiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJwdXNoIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -0,0 +1,12 @@
1
+ import type { Sharp, Metadata as SharpMetadata } from 'sharp';
2
+ import type { PayloadRequest } from '../types/index.js';
3
+ export type WithMetadata = ((options: {
4
+ metadata: SharpMetadata;
5
+ req: PayloadRequest;
6
+ }) => Promise<boolean>) | boolean;
7
+ export declare function optionallyAppendMetadata({ req, sharpFile, withMetadata, }: {
8
+ req: PayloadRequest;
9
+ sharpFile: Sharp;
10
+ withMetadata: WithMetadata;
11
+ }): Promise<Sharp>;
12
+ //# sourceMappingURL=optionallyAppendMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionallyAppendMetadata.d.ts","sourceRoot":"","sources":["../../src/uploads/optionallyAppendMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,MAAM,YAAY,GACpB,CAAC,CAAC,OAAO,EAAE;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GACjF,OAAO,CAAA;AAEX,wBAAsB,wBAAwB,CAAC,EAC7C,GAAG,EACH,SAAS,EACT,YAAY,GACb,EAAE;IACD,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,KAAK,CAAA;IAChB,YAAY,EAAE,YAAY,CAAA;CAC3B,GAAG,OAAO,CAAC,KAAK,CAAC,CAWjB"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "optionallyAppendMetadata", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return optionallyAppendMetadata;
9
+ }
10
+ });
11
+ async function optionallyAppendMetadata({ req, sharpFile, withMetadata }) {
12
+ const metadata = await sharpFile.metadata();
13
+ if (withMetadata === true) {
14
+ return sharpFile.withMetadata();
15
+ } else if (typeof withMetadata === 'function') {
16
+ const useMetadata = await withMetadata({
17
+ metadata,
18
+ req
19
+ });
20
+ if (useMetadata) return sharpFile.withMetadata();
21
+ }
22
+ return sharpFile;
23
+ }
24
+
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL29wdGlvbmFsbHlBcHBlbmRNZXRhZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNoYXJwLCBNZXRhZGF0YSBhcyBTaGFycE1ldGFkYXRhIH0gZnJvbSAnc2hhcnAnXG5cbmltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgV2l0aE1ldGFkYXRhID1cbiAgfCAoKG9wdGlvbnM6IHsgbWV0YWRhdGE6IFNoYXJwTWV0YWRhdGE7IHJlcTogUGF5bG9hZFJlcXVlc3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPilcbiAgfCBib29sZWFuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcHRpb25hbGx5QXBwZW5kTWV0YWRhdGEoe1xuICByZXEsXG4gIHNoYXJwRmlsZSxcbiAgd2l0aE1ldGFkYXRhLFxufToge1xuICByZXE6IFBheWxvYWRSZXF1ZXN0XG4gIHNoYXJwRmlsZTogU2hhcnBcbiAgd2l0aE1ldGFkYXRhOiBXaXRoTWV0YWRhdGFcbn0pOiBQcm9taXNlPFNoYXJwPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnBGaWxlLm1ldGFkYXRhKClcbiAgaWYgKHdpdGhNZXRhZGF0YSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBzaGFycEZpbGUud2l0aE1ldGFkYXRhKClcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2l0aE1ldGFkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgdXNlTWV0YWRhdGEgPSBhd2FpdCB3aXRoTWV0YWRhdGEoeyBtZXRhZGF0YSwgcmVxIH0pXG5cbiAgICBpZiAodXNlTWV0YWRhdGEpIHJldHVybiBzaGFycEZpbGUud2l0aE1ldGFkYXRhKClcbiAgfVxuXG4gIHJldHVybiBzaGFycEZpbGVcbn1cbiJdLCJuYW1lcyI6WyJvcHRpb25hbGx5QXBwZW5kTWV0YWRhdGEiLCJyZXEiLCJzaGFycEZpbGUiLCJ3aXRoTWV0YWRhdGEiLCJtZXRhZGF0YSIsInVzZU1ldGFkYXRhIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiI7Ozs7K0JBUXNCQTs7O2VBQUFBOzs7QUFBZixlQUFlQSx5QkFBeUIsRUFDN0NDLEdBQUcsRUFDSEMsU0FBUyxFQUNUQyxZQUFZLEVBS2I7SUFDQyxNQUFNQyxXQUFXLE1BQU1GLFVBQVVFLFFBQVE7SUFDekMsSUFBSUQsaUJBQWlCLE1BQU07UUFDekIsT0FBT0QsVUFBVUMsWUFBWTtJQUMvQixPQUFPLElBQUksT0FBT0EsaUJBQWlCLFlBQVk7UUFDN0MsTUFBTUUsY0FBYyxNQUFNRixhQUFhO1lBQUVDO1lBQVVIO1FBQUk7UUFFdkQsSUFBSUksYUFBYSxPQUFPSCxVQUFVQyxZQUFZO0lBQ2hEO0lBRUEsT0FBT0Q7QUFDVCJ9
@@ -2,6 +2,7 @@
2
2
  import type express from 'express';
3
3
  import type serveStatic from 'serve-static';
4
4
  import type { ResizeOptions, Sharp } from 'sharp';
5
+ import type { WithMetadata } from './optionallyAppendMetadata';
5
6
  export type FileSize = {
6
7
  filename: null | string;
7
8
  filesize: null | number;
@@ -87,6 +88,7 @@ export type IncomingUploadType = {
87
88
  staticOptions?: serveStatic.ServeStaticOptions<express.Response<any, Record<string, any>>>;
88
89
  staticURL?: string;
89
90
  trimOptions?: ImageUploadTrimOptions;
91
+ withMetadata?: WithMetadata;
90
92
  };
91
93
  export type Upload = {
92
94
  adminThumbnail?: GetAdminThumbnail | string;
@@ -103,6 +105,7 @@ export type Upload = {
103
105
  staticOptions?: serveStatic.ServeStaticOptions<express.Response<any, Record<string, any>>>;
104
106
  staticURL: string;
105
107
  trimOptions?: ImageUploadTrimOptions;
108
+ withMetadata?: WithMetadata;
106
109
  };
107
110
  export type File = {
108
111
  data: Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,wBAsB1B,CAAA"}
1
+ {"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,wBAwB1B,CAAA"}
@@ -8,7 +8,14 @@ Object.defineProperty(exports, "deepCopyObject", {
8
8
  return deepCopyObject;
9
9
  }
10
10
  });
11
+ const _bsonobjectid = /*#__PURE__*/ _interop_require_default(require("bson-objectid"));
12
+ function _interop_require_default(obj) {
13
+ return obj && obj.__esModule ? obj : {
14
+ default: obj
15
+ };
16
+ }
11
17
  const deepCopyObject = (inObject)=>{
18
+ if (_bsonobjectid.default.isValid(inObject)) return inObject;
12
19
  if (inObject instanceof Date) return inObject;
13
20
  if (inObject instanceof Set) return new Set(inObject);
14
21
  if (inObject instanceof Map) return new Map(inObject);
@@ -26,4 +33,4 @@ const deepCopyObject = (inObject)=>{
26
33
  return outObject;
27
34
  };
28
35
 
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZGVlcENvcHlPYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGRlZXBDb3B5T2JqZWN0ID0gKGluT2JqZWN0KSA9PiB7XG4gIGlmIChpbk9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBpbk9iamVjdFxuXG4gIGlmIChpbk9iamVjdCBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIG5ldyBTZXQoaW5PYmplY3QpXG5cbiAgaWYgKGluT2JqZWN0IGluc3RhbmNlb2YgTWFwKSByZXR1cm4gbmV3IE1hcChpbk9iamVjdClcblxuICBpZiAodHlwZW9mIGluT2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpbk9iamVjdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBpbk9iamVjdCAvLyBSZXR1cm4gdGhlIHZhbHVlIGlmIGluT2JqZWN0IGlzIG5vdCBhbiBvYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvciBvYmplY3QgdG8gaG9sZCB0aGUgdmFsdWVzXG4gIGNvbnN0IG91dE9iamVjdCA9IEFycmF5LmlzQXJyYXkoaW5PYmplY3QpID8gW10gOiB7fVxuXG4gIE9iamVjdC5rZXlzKGluT2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGluT2JqZWN0W2tleV1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IChkZWVwKSBjb3B5IGZvciBuZXN0ZWQgb2JqZWN0cywgaW5jbHVkaW5nIGFycmF5c1xuICAgIG91dE9iamVjdFtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCA/IGRlZXBDb3B5T2JqZWN0KHZhbHVlKSA6IHZhbHVlXG4gIH0pXG5cbiAgcmV0dXJuIG91dE9iamVjdFxufVxuIl0sIm5hbWVzIjpbImRlZXBDb3B5T2JqZWN0IiwiaW5PYmplY3QiLCJEYXRlIiwiU2V0IiwiTWFwIiwib3V0T2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJ2YWx1ZSJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7OzsrQkFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsaUJBQWlCLENBQUNDO0lBQzdCLElBQUlBLG9CQUFvQkMsTUFBTSxPQUFPRDtJQUVyQyxJQUFJQSxvQkFBb0JFLEtBQUssT0FBTyxJQUFJQSxJQUFJRjtJQUU1QyxJQUFJQSxvQkFBb0JHLEtBQUssT0FBTyxJQUFJQSxJQUFJSDtJQUU1QyxJQUFJLE9BQU9BLGFBQWEsWUFBWUEsYUFBYSxNQUFNO1FBQ3JELE9BQU9BLFNBQVMsZ0RBQWdEOztJQUNsRTtJQUVBLCtDQUErQztJQUMvQyxNQUFNSSxZQUFZQyxNQUFNQyxPQUFPLENBQUNOLFlBQVksRUFBRSxHQUFHLENBQUM7SUFFbERPLE9BQU9DLElBQUksQ0FBQ1IsVUFBVVMsT0FBTyxDQUFDLENBQUNDO1FBQzdCLE1BQU1DLFFBQVFYLFFBQVEsQ0FBQ1UsSUFBSTtRQUUzQiwrREFBK0Q7UUFDL0ROLFNBQVMsQ0FBQ00sSUFBSSxHQUFHLE9BQU9DLFVBQVUsWUFBWUEsVUFBVSxPQUFPWixlQUFlWSxTQUFTQTtJQUN6RjtJQUVBLE9BQU9QO0FBQ1QifQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZGVlcENvcHlPYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdElEIGZyb20gJ2Jzb24tb2JqZWN0aWQnXG5cbmV4cG9ydCBjb25zdCBkZWVwQ29weU9iamVjdCA9IChpbk9iamVjdCkgPT4ge1xuICBpZiAoT2JqZWN0SUQuaXNWYWxpZChpbk9iamVjdCkpIHJldHVybiBpbk9iamVjdFxuXG4gIGlmIChpbk9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBpbk9iamVjdFxuXG4gIGlmIChpbk9iamVjdCBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIG5ldyBTZXQoaW5PYmplY3QpXG5cbiAgaWYgKGluT2JqZWN0IGluc3RhbmNlb2YgTWFwKSByZXR1cm4gbmV3IE1hcChpbk9iamVjdClcblxuICBpZiAodHlwZW9mIGluT2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpbk9iamVjdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBpbk9iamVjdCAvLyBSZXR1cm4gdGhlIHZhbHVlIGlmIGluT2JqZWN0IGlzIG5vdCBhbiBvYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvciBvYmplY3QgdG8gaG9sZCB0aGUgdmFsdWVzXG4gIGNvbnN0IG91dE9iamVjdCA9IEFycmF5LmlzQXJyYXkoaW5PYmplY3QpID8gW10gOiB7fVxuXG4gIE9iamVjdC5rZXlzKGluT2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGluT2JqZWN0W2tleV1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IChkZWVwKSBjb3B5IGZvciBuZXN0ZWQgb2JqZWN0cywgaW5jbHVkaW5nIGFycmF5c1xuICAgIG91dE9iamVjdFtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCA/IGRlZXBDb3B5T2JqZWN0KHZhbHVlKSA6IHZhbHVlXG4gIH0pXG5cbiAgcmV0dXJuIG91dE9iamVjdFxufVxuIl0sIm5hbWVzIjpbImRlZXBDb3B5T2JqZWN0IiwiaW5PYmplY3QiLCJPYmplY3RJRCIsImlzVmFsaWQiLCJEYXRlIiwiU2V0IiwiTWFwIiwib3V0T2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJ2YWx1ZSJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiI7Ozs7K0JBRWFBOzs7ZUFBQUE7OztxRUFGUTs7Ozs7O0FBRWQsTUFBTUEsaUJBQWlCLENBQUNDO0lBQzdCLElBQUlDLHFCQUFRLENBQUNDLE9BQU8sQ0FBQ0YsV0FBVyxPQUFPQTtJQUV2QyxJQUFJQSxvQkFBb0JHLE1BQU0sT0FBT0g7SUFFckMsSUFBSUEsb0JBQW9CSSxLQUFLLE9BQU8sSUFBSUEsSUFBSUo7SUFFNUMsSUFBSUEsb0JBQW9CSyxLQUFLLE9BQU8sSUFBSUEsSUFBSUw7SUFFNUMsSUFBSSxPQUFPQSxhQUFhLFlBQVlBLGFBQWEsTUFBTTtRQUNyRCxPQUFPQSxTQUFTLGdEQUFnRDs7SUFDbEU7SUFFQSwrQ0FBK0M7SUFDL0MsTUFBTU0sWUFBWUMsTUFBTUMsT0FBTyxDQUFDUixZQUFZLEVBQUUsR0FBRyxDQUFDO0lBRWxEUyxPQUFPQyxJQUFJLENBQUNWLFVBQVVXLE9BQU8sQ0FBQyxDQUFDQztRQUM3QixNQUFNQyxRQUFRYixRQUFRLENBQUNZLElBQUk7UUFFM0IsK0RBQStEO1FBQy9ETixTQUFTLENBQUNNLElBQUksR0FBRyxPQUFPQyxVQUFVLFlBQVlBLFVBQVUsT0FBT2QsZUFBZWMsU0FBU0E7SUFDekY7SUFFQSxPQUFPUDtBQUNUIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "2.24.2",
3
+ "version": "2.25.0",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",