payload 2.23.1 → 2.24.1

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.
Files changed (78) hide show
  1. package/dist/admin/components/elements/Dropzone/index.d.ts +2 -1
  2. package/dist/admin/components/elements/Dropzone/index.d.ts.map +1 -1
  3. package/dist/admin/components/elements/Dropzone/index.js +15 -10
  4. package/dist/admin/components/elements/EditUpload/index.d.ts +12 -4
  5. package/dist/admin/components/elements/EditUpload/index.d.ts.map +1 -1
  6. package/dist/admin/components/elements/EditUpload/index.js +41 -40
  7. package/dist/admin/components/utilities/Auth/index.d.ts.map +1 -1
  8. package/dist/admin/components/utilities/Auth/index.js +64 -61
  9. package/dist/admin/components/utilities/Auth/types.d.ts +3 -1
  10. package/dist/admin/components/utilities/Auth/types.d.ts.map +1 -1
  11. package/dist/admin/components/utilities/Locale/index.d.ts.map +1 -1
  12. package/dist/admin/components/utilities/Locale/index.js +31 -20
  13. package/dist/admin/components/utilities/UploadEdits/index.d.ts +1 -0
  14. package/dist/admin/components/utilities/UploadEdits/index.d.ts.map +1 -1
  15. package/dist/admin/components/utilities/UploadEdits/index.js +6 -1
  16. package/dist/admin/components/views/Unauthorized/index.d.ts.map +1 -1
  17. package/dist/admin/components/views/Unauthorized/index.js +6 -4
  18. package/dist/admin/components/views/collections/Edit/Upload/index.d.ts.map +1 -1
  19. package/dist/admin/components/views/collections/Edit/Upload/index.js +120 -28
  20. package/dist/admin/components/views/collections/Edit/Upload/index.scss +6 -3
  21. package/dist/admin/components/views/collections/Edit/types.d.ts +0 -12
  22. package/dist/admin/components/views/collections/Edit/types.d.ts.map +1 -1
  23. package/dist/collections/config/types.d.ts.map +1 -1
  24. package/dist/collections/config/types.js +1 -1
  25. package/dist/exports/types.d.ts +1 -1
  26. package/dist/exports/types.d.ts.map +1 -1
  27. package/dist/exports/types.js +1 -1
  28. package/dist/fields/hooks/beforeValidate/promise.d.ts +2 -1
  29. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  30. package/dist/fields/hooks/beforeValidate/promise.js +18 -6
  31. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +2 -1
  32. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  33. package/dist/fields/hooks/beforeValidate/traverseFields.js +18 -3
  34. package/dist/translations/ar.json +3 -1
  35. package/dist/translations/az.json +3 -1
  36. package/dist/translations/bg.json +3 -1
  37. package/dist/translations/cs.json +3 -1
  38. package/dist/translations/de.json +3 -1
  39. package/dist/translations/en.json +2 -0
  40. package/dist/translations/es.json +3 -1
  41. package/dist/translations/fa.json +3 -1
  42. package/dist/translations/fr.json +3 -1
  43. package/dist/translations/hr.json +3 -1
  44. package/dist/translations/hu.json +3 -1
  45. package/dist/translations/index.d.ts +60 -0
  46. package/dist/translations/index.d.ts.map +1 -1
  47. package/dist/translations/it.json +3 -1
  48. package/dist/translations/ja.json +3 -1
  49. package/dist/translations/ko.json +3 -1
  50. package/dist/translations/my.json +3 -1
  51. package/dist/translations/nb.json +3 -1
  52. package/dist/translations/nl.json +3 -1
  53. package/dist/translations/pl.json +3 -1
  54. package/dist/translations/pt.json +3 -1
  55. package/dist/translations/ro.json +3 -1
  56. package/dist/translations/rs-latin.json +3 -1
  57. package/dist/translations/rs.json +3 -1
  58. package/dist/translations/ru.json +3 -1
  59. package/dist/translations/sv.json +3 -1
  60. package/dist/translations/th.json +3 -1
  61. package/dist/translations/tr.json +3 -1
  62. package/dist/translations/translation-schema.json +6 -0
  63. package/dist/translations/ua.json +3 -1
  64. package/dist/translations/vi.json +3 -1
  65. package/dist/translations/zh-tw.json +3 -1
  66. package/dist/translations/zh.json +3 -1
  67. package/dist/uploads/cropImage.d.ts +15 -6
  68. package/dist/uploads/cropImage.d.ts.map +1 -1
  69. package/dist/uploads/cropImage.js +6 -6
  70. package/dist/uploads/generateFileData.d.ts.map +1 -1
  71. package/dist/uploads/generateFileData.js +9 -7
  72. package/dist/uploads/imageResizer.d.ts.map +1 -1
  73. package/dist/uploads/imageResizer.js +117 -84
  74. package/dist/uploads/types.d.ts +16 -10
  75. package/dist/uploads/types.d.ts.map +1 -1
  76. package/package.json +1 -1
  77. package/types.d.ts +1 -1
  78. package/types.js +1 -1
@@ -283,6 +283,7 @@
283
283
  "near": "perto"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Adicionar arquivo",
286
287
  "crop": "Cultura",
287
288
  "cropToolDescription": "Arraste as bordas da área selecionada, desenhe uma nova área ou ajuste os valores abaixo.",
288
289
  "dragAndDrop": "Arraste e solte um arquivo",
@@ -295,6 +296,7 @@
295
296
  "height": "Altura",
296
297
  "lessInfo": "Ver menos",
297
298
  "moreInfo": "Ver mais",
299
+ "pasteURL": "Colar URL",
298
300
  "previewSizes": "Tamanhos de Pré-visualização",
299
301
  "selectCollectionToBrowse": "Selecione uma Coleção para Navegar",
300
302
  "selectFile": "Selecione um arquivo",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Visualizando versões para o/a {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "`Visualizando versões para o global {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "în apropiere de"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Adaugă fișier",
286
287
  "crop": "Cultură",
287
288
  "cropToolDescription": "Trageți colțurile zonei selectate, desenați o nouă zonă sau ajustați valorile de mai jos.",
288
289
  "dragAndDrop": "Trageți și plasați un fișier",
@@ -295,6 +296,7 @@
295
296
  "height": "Înălțime",
296
297
  "lessInfo": "Mai puține informații",
297
298
  "moreInfo": "Mai multe informații",
299
+ "pasteURL": "Lipește URL",
298
300
  "previewSizes": "Dimensiuni Previzualizare",
299
301
  "selectCollectionToBrowse": "Selectați o colecție pentru navigare",
300
302
  "selectFile": "Selectați un fișier",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Vizualizarea versiunilor pentru {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "Vizualizarea versiunilor pentru globala {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "blizu"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Dodaj datoteku",
286
287
  "crop": "Isecite sliku",
287
288
  "cropToolDescription": "Prevucite uglove izabranog područja, nacrtajte novo područje ili prilagodite vrednosti ispod.",
288
289
  "dragAndDrop": "Prevucite i ispustite datoteku",
@@ -295,6 +296,7 @@
295
296
  "height": "Visina",
296
297
  "lessInfo": "Manje informacija",
297
298
  "moreInfo": "Više informacija",
299
+ "pasteURL": "Nalepi URL",
298
300
  "previewSizes": "Veličine pregleda",
299
301
  "selectCollectionToBrowse": "Odaberite kolekciju za pregled",
300
302
  "selectFile": "Odaberite datoteku",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Pregled verzija za {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "Pregled verzije za globalni {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "близу"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Додај датотеку",
286
287
  "crop": "Исеците слику",
287
288
  "cropToolDescription": "Превуците углове изабраног подручја, нацртајте ново подручје или прилагодите вредности испод.",
288
289
  "dragAndDrop": "Превуците и испустите датотеку",
@@ -295,6 +296,7 @@
295
296
  "height": "Висина",
296
297
  "lessInfo": "Мање информација",
297
298
  "moreInfo": "Више информација",
299
+ "pasteURL": "Налепи URL",
298
300
  "previewSizes": "Величине прегледа",
299
301
  "selectCollectionToBrowse": "Одаберите колекцију за преглед",
300
302
  "selectFile": "Одаберите датотеку",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Преглед верзија за {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "Преглед верзије за глобални {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "рядом"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Добавить файл",
286
287
  "crop": "Обрезать",
287
288
  "cropToolDescription": "Перетащите углы выбранной области, нарисуйте новую область или отрегулируйте значения ниже.",
288
289
  "dragAndDrop": "Перетащите файл",
@@ -295,6 +296,7 @@
295
296
  "height": "Высота",
296
297
  "lessInfo": "Меньше информации",
297
298
  "moreInfo": "Больше информации",
299
+ "pasteURL": "Вставить URL",
298
300
  "previewSizes": "Предварительный просмотр размеров",
299
301
  "selectCollectionToBrowse": "Выберите Коллекцию для просмотра",
300
302
  "selectFile": "Выберите файл",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Просмотр версий для {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "`Просмотр версии для глобальной Коллекции {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "nära"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Lägg till fil",
286
287
  "crop": "Skörd",
287
288
  "cropToolDescription": "Dra i hörnen på det valda området, rita ett nytt område eller justera värdena nedan.",
288
289
  "dragAndDrop": "Dra och släpp en fil",
@@ -295,6 +296,7 @@
295
296
  "height": "Höjd",
296
297
  "lessInfo": "Mindre info",
297
298
  "moreInfo": "Mer info",
299
+ "pasteURL": "Klistra in URL",
298
300
  "previewSizes": "Förhandsgranska Storlekar",
299
301
  "selectCollectionToBrowse": "Välj en Samling att Bläddra i",
300
302
  "selectFile": "Välj en fil",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Visar versioner för {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "Visa versioner för den globala {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "ใกล้"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "เพิ่มไฟล์",
286
287
  "crop": "พืชผล",
287
288
  "cropToolDescription": "ลากมุมของพื้นที่ที่เลือก, วาดพื้นที่ใหม่หรือปรับค่าด้านล่าง",
288
289
  "dragAndDrop": "ลากและวางไฟล์",
@@ -295,6 +296,7 @@
295
296
  "height": "ความสูง",
296
297
  "lessInfo": "ซ่อนข้อมูล",
297
298
  "moreInfo": "แสดงข้อมูล",
299
+ "pasteURL": "วาง URL",
298
300
  "previewSizes": "ขนาดตัวอย่าง",
299
301
  "selectCollectionToBrowse": "เลือก Collection ที่ต้องการค้นหา",
300
302
  "selectFile": "เลือกไฟล์",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "กำลังดูเวอร์ชันของ global {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "yakın"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Dosya ekle",
286
287
  "crop": "Kırp",
287
288
  "cropToolDescription": "Seçili alanın köşelerini sürükleyin, yeni bir alan çizin veya aşağıdaki değerleri ayarlayın.",
288
289
  "dragAndDrop": "Bir dosyayı sürükleyip bırakın",
@@ -295,6 +296,7 @@
295
296
  "height": "Yükseklik",
296
297
  "lessInfo": "Daha az bilgi",
297
298
  "moreInfo": "Daha fazla bilgi",
299
+ "pasteURL": "URL yapıştır",
298
300
  "previewSizes": "Önizleme Boyutları",
299
301
  "selectCollectionToBrowse": "Gözatmak için bir Koleksiyon seçin",
300
302
  "selectFile": "Bir dosya seçin",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "{{entityLabel}} {{documentTitle}} için sürümler görüntüleniyor",
382
384
  "viewingVersionsGlobal": "Global {{entityLabel}} için sürümler görüntüleniyor"
383
385
  }
384
- }
386
+ }
@@ -1108,6 +1108,9 @@
1108
1108
  "upload": {
1109
1109
  "additionalProperties": false,
1110
1110
  "properties": {
1111
+ "addFile": {
1112
+ "type": "string"
1113
+ },
1111
1114
  "crop": {
1112
1115
  "type": "string"
1113
1116
  },
@@ -1144,6 +1147,9 @@
1144
1147
  "moreInfo": {
1145
1148
  "type": "string"
1146
1149
  },
1150
+ "pasteURL": {
1151
+ "type": "string"
1152
+ },
1147
1153
  "previewSizes": {
1148
1154
  "type": "string"
1149
1155
  },
@@ -283,6 +283,7 @@
283
283
  "near": "поруч"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Додати файл",
286
287
  "crop": "Обрізати",
287
288
  "cropToolDescription": "Перетягніть кути обраної області, намалюйте нову область або скоригуйте значення нижче.",
288
289
  "dragAndDrop": "Перемістіть файл",
@@ -295,6 +296,7 @@
295
296
  "height": "Висота",
296
297
  "lessInfo": "Менше інформації",
297
298
  "moreInfo": "Більше інформації",
299
+ "pasteURL": "Вставити URL",
298
300
  "previewSizes": "Розміри попереднього перегляду",
299
301
  "selectCollectionToBrowse": "Виберіть колекцію для перегляду",
300
302
  "selectFile": "Виберіть файл",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Огляд версій для {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "Огляд версій для глобальної колекції {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "gần"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "Thêm tập tin",
286
287
  "crop": "Mùa vụ",
287
288
  "cropToolDescription": "Kéo các góc của khu vực đã chọn, vẽ một khu vực mới hoặc điều chỉnh các giá trị dưới đây.",
288
289
  "dragAndDrop": "Kéo và thả một tập tin",
@@ -295,6 +296,7 @@
295
296
  "height": "Chiều cao",
296
297
  "lessInfo": "Hiển thị ít hơn",
297
298
  "moreInfo": "Thêm",
299
+ "pasteURL": "Dán URL",
298
300
  "previewSizes": "Kích cỡ xem trước",
299
301
  "selectCollectionToBrowse": "Chọn một Collection để tìm",
300
302
  "selectFile": "Chọn một file",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "Xem những phiên bản của {{entityLabel}} {{documentTitle}}",
382
384
  "viewingVersionsGlobal": "`Xem những phiên bản toàn thể (global) của {{entityLabel}}"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "附近"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "添加文件",
286
287
  "crop": "裁剪",
287
288
  "cropToolDescription": "拖動所選區域的角落,繪製一個新區域或調整以下的值。",
288
289
  "dragAndDrop": "拖放一個檔案",
@@ -295,6 +296,7 @@
295
296
  "height": "高度",
296
297
  "lessInfo": "更少資訊",
297
298
  "moreInfo": "更多資訊",
299
+ "pasteURL": "貼上網址",
298
300
  "previewSizes": "預覽尺寸",
299
301
  "selectCollectionToBrowse": "選擇一個要瀏覽的集合",
300
302
  "selectFile": "選擇一個文件",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "正在查看{{entityLabel}} {{documentTitle}}的版本",
382
384
  "viewingVersionsGlobal": "正在查看全域{{entityLabel}}的版本"
383
385
  }
384
- }
386
+ }
@@ -283,6 +283,7 @@
283
283
  "near": "附近"
284
284
  },
285
285
  "upload": {
286
+ "addFile": "添加文件",
286
287
  "crop": "作物",
287
288
  "cropToolDescription": "拖动所选区域的角落,绘制一个新区域或调整以下的值。",
288
289
  "dragAndDrop": "拖放一个文件",
@@ -295,6 +296,7 @@
295
296
  "height": "高度",
296
297
  "lessInfo": "更少信息",
297
298
  "moreInfo": "更多信息",
299
+ "pasteURL": "粘贴网址",
298
300
  "previewSizes": "预览尺寸",
299
301
  "selectCollectionToBrowse": "选择一个要浏览的集合",
300
302
  "selectFile": "选择一个文件",
@@ -381,4 +383,4 @@
381
383
  "viewingVersions": "正在查看{{entityLabel}} {{documentTitle}}的版本",
382
384
  "viewingVersionsGlobal": "正在查看全局{{entityLabel}}的版本"
383
385
  }
384
- }
386
+ }
@@ -1,12 +1,21 @@
1
1
  /// <reference types="node" />
2
+ import type { UploadedFile } from 'express-fileupload';
2
3
  import sharp from 'sharp';
3
- export declare const percentToPixel: (value: string, dimension: number) => number;
4
- export default function cropImage({ cropData, dimensions, file }: {
5
- cropData: any;
6
- dimensions: any;
7
- file: any;
8
- }): Promise<{
4
+ import type { UploadEdits } from './types';
5
+ export declare const percentToPixel: (value: any, dimension: any) => number;
6
+ type CropImageArgs = {
7
+ cropData: UploadEdits['crop'];
8
+ dimensions: {
9
+ height: number;
10
+ width: number;
11
+ };
12
+ file: UploadedFile;
13
+ heightInPixels: number;
14
+ widthInPixels: number;
15
+ };
16
+ export declare function cropImage({ cropData, dimensions, file, heightInPixels, widthInPixels, }: CropImageArgs): Promise<{
9
17
  data: Buffer;
10
18
  info: sharp.OutputInfo;
11
19
  }>;
20
+ export {};
12
21
  //# sourceMappingURL=cropImage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cropImage.d.ts","sourceRoot":"","sources":["../../src/uploads/cropImage.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,cAAc,UAAW,MAAM,aAAa,MAAM,KAAG,MAGjE,CAAA;AACD,wBAA8B,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;;;;CAAA;;;GA0BrE"}
1
+ {"version":3,"file":"cropImage.d.ts","sourceRoot":"","sources":["../../src/uploads/cropImage.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGtD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,eAAO,MAAM,cAAc,kCAAuB,MAGjD,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC7B,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,IAAI,EAAE,YAAY,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AACD,wBAAsB,SAAS,CAAC,EAC9B,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,cAAc,EACd,aAAa,GACd,EAAE,aAAa;;;GA0Bf"}
@@ -9,7 +9,7 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- default: function() {
12
+ cropImage: function() {
13
13
  return cropImage;
14
14
  },
15
15
  percentToPixel: function() {
@@ -26,21 +26,21 @@ const percentToPixel = (value, dimension)=>{
26
26
  if (!value) return 0;
27
27
  return Math.floor(parseFloat(value) / 100 * dimension);
28
28
  };
29
- async function cropImage({ cropData, dimensions, file }) {
29
+ async function cropImage({ cropData, dimensions, file, heightInPixels, widthInPixels }) {
30
30
  try {
31
+ const { x, y } = cropData;
31
32
  const fileIsAnimatedType = [
32
33
  'image/avif',
33
34
  'image/gif',
34
35
  'image/webp'
35
36
  ].includes(file.mimetype);
36
- const { heightPixels, widthPixels, x, y } = cropData;
37
37
  const sharpOptions = {};
38
38
  if (fileIsAnimatedType) sharpOptions.animated = true;
39
39
  const formattedCropData = {
40
- height: Number(heightPixels),
40
+ height: Number(heightInPixels),
41
41
  left: percentToPixel(x, dimensions.width),
42
42
  top: percentToPixel(y, dimensions.height),
43
- width: Number(widthPixels)
43
+ width: Number(widthInPixels)
44
44
  };
45
45
  const cropped = (0, _sharp.default)(file.tempFilePath || file.data, sharpOptions).extract(formattedCropData);
46
46
  return await cropped.toBuffer({
@@ -52,4 +52,4 @@ async function cropImage({ cropData, dimensions, file }) {
52
52
  }
53
53
  }
54
54
 
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2Nyb3BJbWFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNoYXJwT3B0aW9ucyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXG5cbmV4cG9ydCBjb25zdCBwZXJjZW50VG9QaXhlbCA9ICh2YWx1ZTogc3RyaW5nLCBkaW1lbnNpb246IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiAwXG4gIHJldHVybiBNYXRoLmZsb29yKChwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCkgKiBkaW1lbnNpb24pXG59XG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBjcm9wSW1hZ2UoeyBjcm9wRGF0YSwgZGltZW5zaW9ucywgZmlsZSB9KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZUlzQW5pbWF0ZWRUeXBlID0gWydpbWFnZS9hdmlmJywgJ2ltYWdlL2dpZicsICdpbWFnZS93ZWJwJ10uaW5jbHVkZXMoZmlsZS5taW1ldHlwZSlcblxuICAgIGNvbnN0IHsgaGVpZ2h0UGl4ZWxzLCB3aWR0aFBpeGVscywgeCwgeSB9ID0gY3JvcERhdGFcblxuICAgIGNvbnN0IHNoYXJwT3B0aW9uczogU2hhcnBPcHRpb25zID0ge31cblxuICAgIGlmIChmaWxlSXNBbmltYXRlZFR5cGUpIHNoYXJwT3B0aW9ucy5hbmltYXRlZCA9IHRydWVcblxuICAgIGNvbnN0IGZvcm1hdHRlZENyb3BEYXRhOiBzaGFycC5SZWdpb24gPSB7XG4gICAgICBoZWlnaHQ6IE51bWJlcihoZWlnaHRQaXhlbHMpLFxuICAgICAgbGVmdDogcGVyY2VudFRvUGl4ZWwoeCwgZGltZW5zaW9ucy53aWR0aCksXG4gICAgICB0b3A6IHBlcmNlbnRUb1BpeGVsKHksIGRpbWVuc2lvbnMuaGVpZ2h0KSxcbiAgICAgIHdpZHRoOiBOdW1iZXIod2lkdGhQaXhlbHMpLFxuICAgIH1cblxuICAgIGNvbnN0IGNyb3BwZWQgPSBzaGFycChmaWxlLnRlbXBGaWxlUGF0aCB8fCBmaWxlLmRhdGEsIHNoYXJwT3B0aW9ucykuZXh0cmFjdChmb3JtYXR0ZWRDcm9wRGF0YSlcblxuICAgIHJldHVybiBhd2FpdCBjcm9wcGVkLnRvQnVmZmVyKHtcbiAgICAgIHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlLFxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgY3JvcHBpbmcgaW1hZ2U6YCwgZXJyb3IpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyb3BJbWFnZSIsInBlcmNlbnRUb1BpeGVsIiwidmFsdWUiLCJkaW1lbnNpb24iLCJNYXRoIiwiZmxvb3IiLCJwYXJzZUZsb2F0IiwiY3JvcERhdGEiLCJkaW1lbnNpb25zIiwiZmlsZSIsImZpbGVJc0FuaW1hdGVkVHlwZSIsImluY2x1ZGVzIiwibWltZXR5cGUiLCJoZWlnaHRQaXhlbHMiLCJ3aWR0aFBpeGVscyIsIngiLCJ5Iiwic2hhcnBPcHRpb25zIiwiYW5pbWF0ZWQiLCJmb3JtYXR0ZWRDcm9wRGF0YSIsImhlaWdodCIsIk51bWJlciIsImxlZnQiLCJ3aWR0aCIsInRvcCIsImNyb3BwZWQiLCJzaGFycCIsInRlbXBGaWxlUGF0aCIsImRhdGEiLCJleHRyYWN0IiwidG9CdWZmZXIiLCJyZXNvbHZlV2l0aE9iamVjdCIsImVycm9yIiwiY29uc29sZSJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQVFBLE9BMEJDO2VBMUI2QkE7O0lBSmpCQyxjQUFjO2VBQWRBOzs7OERBRks7Ozs7OztBQUVYLE1BQU1BLGlCQUFpQixDQUFDQyxPQUFlQztJQUM1QyxJQUFJLENBQUNELE9BQU8sT0FBTztJQUNuQixPQUFPRSxLQUFLQyxLQUFLLENBQUMsQUFBQ0MsV0FBV0osU0FBUyxNQUFPQztBQUNoRDtBQUNlLGVBQWVILFVBQVUsRUFBRU8sUUFBUSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRTtJQUNwRSxJQUFJO1FBQ0YsTUFBTUMscUJBQXFCO1lBQUM7WUFBYztZQUFhO1NBQWEsQ0FBQ0MsUUFBUSxDQUFDRixLQUFLRyxRQUFRO1FBRTNGLE1BQU0sRUFBRUMsWUFBWSxFQUFFQyxXQUFXLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFLEdBQUdUO1FBRTVDLE1BQU1VLGVBQTZCLENBQUM7UUFFcEMsSUFBSVAsb0JBQW9CTyxhQUFhQyxRQUFRLEdBQUc7UUFFaEQsTUFBTUMsb0JBQWtDO1lBQ3RDQyxRQUFRQyxPQUFPUjtZQUNmUyxNQUFNckIsZUFBZWMsR0FBR1AsV0FBV2UsS0FBSztZQUN4Q0MsS0FBS3ZCLGVBQWVlLEdBQUdSLFdBQVdZLE1BQU07WUFDeENHLE9BQU9GLE9BQU9QO1FBQ2hCO1FBRUEsTUFBTVcsVUFBVUMsSUFBQUEsY0FBSyxFQUFDakIsS0FBS2tCLFlBQVksSUFBSWxCLEtBQUttQixJQUFJLEVBQUVYLGNBQWNZLE9BQU8sQ0FBQ1Y7UUFFNUUsT0FBTyxNQUFNTSxRQUFRSyxRQUFRLENBQUM7WUFDNUJDLG1CQUFtQjtRQUNyQjtJQUNGLEVBQUUsT0FBT0MsT0FBTztRQUNkQyxRQUFRRCxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFQTtRQUN2QyxNQUFNQTtJQUNSO0FBQ0YifQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2Nyb3BJbWFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgU2hhcnBPcHRpb25zIH0gZnJvbSAnc2hhcnAnXG5cbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcblxuaW1wb3J0IHR5cGUgeyBVcGxvYWRFZGl0cyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBwZXJjZW50VG9QaXhlbCA9ICh2YWx1ZSwgZGltZW5zaW9uKTogbnVtYmVyID0+IHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIDBcbiAgcmV0dXJuIE1hdGguZmxvb3IoKHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwKSAqIGRpbWVuc2lvbilcbn1cblxudHlwZSBDcm9wSW1hZ2VBcmdzID0ge1xuICBjcm9wRGF0YTogVXBsb2FkRWRpdHNbJ2Nyb3AnXVxuICBkaW1lbnNpb25zOiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH1cbiAgZmlsZTogVXBsb2FkZWRGaWxlXG4gIGhlaWdodEluUGl4ZWxzOiBudW1iZXJcbiAgd2lkdGhJblBpeGVsczogbnVtYmVyXG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JvcEltYWdlKHtcbiAgY3JvcERhdGEsXG4gIGRpbWVuc2lvbnMsXG4gIGZpbGUsXG4gIGhlaWdodEluUGl4ZWxzLFxuICB3aWR0aEluUGl4ZWxzLFxufTogQ3JvcEltYWdlQXJncykge1xuICB0cnkge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gY3JvcERhdGFcblxuICAgIGNvbnN0IGZpbGVJc0FuaW1hdGVkVHlwZSA9IFsnaW1hZ2UvYXZpZicsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCddLmluY2x1ZGVzKGZpbGUubWltZXR5cGUpXG5cbiAgICBjb25zdCBzaGFycE9wdGlvbnM6IFNoYXJwT3B0aW9ucyA9IHt9XG5cbiAgICBpZiAoZmlsZUlzQW5pbWF0ZWRUeXBlKSBzaGFycE9wdGlvbnMuYW5pbWF0ZWQgPSB0cnVlXG5cbiAgICBjb25zdCBmb3JtYXR0ZWRDcm9wRGF0YSA9IHtcbiAgICAgIGhlaWdodDogTnVtYmVyKGhlaWdodEluUGl4ZWxzKSxcbiAgICAgIGxlZnQ6IHBlcmNlbnRUb1BpeGVsKHgsIGRpbWVuc2lvbnMud2lkdGgpLFxuICAgICAgdG9wOiBwZXJjZW50VG9QaXhlbCh5LCBkaW1lbnNpb25zLmhlaWdodCksXG4gICAgICB3aWR0aDogTnVtYmVyKHdpZHRoSW5QaXhlbHMpLFxuICAgIH1cblxuICAgIGNvbnN0IGNyb3BwZWQgPSBzaGFycChmaWxlLnRlbXBGaWxlUGF0aCB8fCBmaWxlLmRhdGEsIHNoYXJwT3B0aW9ucykuZXh0cmFjdChmb3JtYXR0ZWRDcm9wRGF0YSlcblxuICAgIHJldHVybiBhd2FpdCBjcm9wcGVkLnRvQnVmZmVyKHtcbiAgICAgIHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlLFxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgY3JvcHBpbmcgaW1hZ2U6YCwgZXJyb3IpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyb3BJbWFnZSIsInBlcmNlbnRUb1BpeGVsIiwidmFsdWUiLCJkaW1lbnNpb24iLCJNYXRoIiwiZmxvb3IiLCJwYXJzZUZsb2F0IiwiY3JvcERhdGEiLCJkaW1lbnNpb25zIiwiZmlsZSIsImhlaWdodEluUGl4ZWxzIiwid2lkdGhJblBpeGVscyIsIngiLCJ5IiwiZmlsZUlzQW5pbWF0ZWRUeXBlIiwiaW5jbHVkZXMiLCJtaW1ldHlwZSIsInNoYXJwT3B0aW9ucyIsImFuaW1hdGVkIiwiZm9ybWF0dGVkQ3JvcERhdGEiLCJoZWlnaHQiLCJOdW1iZXIiLCJsZWZ0Iiwid2lkdGgiLCJ0b3AiLCJjcm9wcGVkIiwic2hhcnAiLCJ0ZW1wRmlsZVBhdGgiLCJkYXRhIiwiZXh0cmFjdCIsInRvQnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJlcnJvciIsImNvbnNvbGUiXSwicmFuZ2VNYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFtQnNCQSxTQUFTO2VBQVRBOztJQVpUQyxjQUFjO2VBQWRBOzs7OERBSks7Ozs7OztBQUlYLE1BQU1BLGlCQUFpQixDQUFDQyxPQUFPQztJQUNwQyxJQUFJLENBQUNELE9BQU8sT0FBTztJQUNuQixPQUFPRSxLQUFLQyxLQUFLLENBQUMsQUFBQ0MsV0FBV0osU0FBUyxNQUFPQztBQUNoRDtBQVNPLGVBQWVILFVBQVUsRUFDOUJPLFFBQVEsRUFDUkMsVUFBVSxFQUNWQyxJQUFJLEVBQ0pDLGNBQWMsRUFDZEMsYUFBYSxFQUNDO0lBQ2QsSUFBSTtRQUNGLE1BQU0sRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUUsR0FBR047UUFFakIsTUFBTU8scUJBQXFCO1lBQUM7WUFBYztZQUFhO1NBQWEsQ0FBQ0MsUUFBUSxDQUFDTixLQUFLTyxRQUFRO1FBRTNGLE1BQU1DLGVBQTZCLENBQUM7UUFFcEMsSUFBSUgsb0JBQW9CRyxhQUFhQyxRQUFRLEdBQUc7UUFFaEQsTUFBTUMsb0JBQW9CO1lBQ3hCQyxRQUFRQyxPQUFPWDtZQUNmWSxNQUFNckIsZUFBZVcsR0FBR0osV0FBV2UsS0FBSztZQUN4Q0MsS0FBS3ZCLGVBQWVZLEdBQUdMLFdBQVdZLE1BQU07WUFDeENHLE9BQU9GLE9BQU9WO1FBQ2hCO1FBRUEsTUFBTWMsVUFBVUMsSUFBQUEsY0FBSyxFQUFDakIsS0FBS2tCLFlBQVksSUFBSWxCLEtBQUttQixJQUFJLEVBQUVYLGNBQWNZLE9BQU8sQ0FBQ1Y7UUFFNUUsT0FBTyxNQUFNTSxRQUFRSyxRQUFRLENBQUM7WUFDNUJDLG1CQUFtQjtRQUNyQjtJQUNGLEVBQUUsT0FBT0MsT0FBTztRQUNkQyxRQUFRRCxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFQTtRQUN2QyxNQUFNQTtJQUNSO0FBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAY,UAAU,EAAgC,MAAM,SAAS,CAAA;AAajF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AAEF,eAAO,MAAM,gBAAgB,iKA+P5B,CAAA"}
1
+ {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAY,UAAU,EAAgC,MAAM,SAAS,CAAA;AAajF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AAEF,eAAO,MAAM,gBAAgB,iKAqQ5B,CAAA"}
@@ -17,7 +17,7 @@ const _sharp = /*#__PURE__*/ _interop_require_default(require("sharp"));
17
17
  const _errors = require("../errors");
18
18
  const _FileRetrievalError = /*#__PURE__*/ _interop_require_default(require("../errors/FileRetrievalError"));
19
19
  const _canResizeImage = /*#__PURE__*/ _interop_require_default(require("./canResizeImage"));
20
- const _cropImage = /*#__PURE__*/ _interop_require_default(require("./cropImage"));
20
+ const _cropImage = require("./cropImage");
21
21
  const _getExternalFile = require("./getExternalFile");
22
22
  const _getFileByPath = /*#__PURE__*/ _interop_require_default(require("./getFileByPath"));
23
23
  const _getImageSize = /*#__PURE__*/ _interop_require_default(require("./getImageSize"));
@@ -144,12 +144,12 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
144
144
  mime = file.mimetype;
145
145
  fileData.filesize = file.size;
146
146
  if (file.name.includes('.')) {
147
- ext = file.name.split('.').pop();
147
+ ext = file.name.split('.').pop().split('?')[0];
148
148
  } else {
149
149
  ext = '';
150
150
  }
151
151
  }
152
- // Adust SVG mime type. fromBuffer modifies it.
152
+ // Adjust SVG mime type. fromBuffer modifies it.
153
153
  if (mime === 'application/xml' && ext === 'svg') mime = 'image/svg+xml';
154
154
  fileData.mimeType = mime;
155
155
  const baseFilename = (0, _sanitizefilename.default)(file.name.substring(0, file.name.lastIndexOf('.')) || file.name);
@@ -165,10 +165,12 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
165
165
  fileData.filename = fsSafeName;
166
166
  let fileForResize = file;
167
167
  if (cropData) {
168
- const { data: croppedImage, info } = await (0, _cropImage.default)({
168
+ const { data: croppedImage, info } = await (0, _cropImage.cropImage)({
169
169
  cropData,
170
170
  dimensions,
171
- file
171
+ file,
172
+ heightInPixels: uploadEdits.heightInPixels,
173
+ widthInPixels: uploadEdits.widthInPixels
172
174
  });
173
175
  filesToSave.push({
174
176
  buffer: croppedImage,
@@ -254,7 +256,7 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
254
256
  */ function parseUploadEditsFromReqOrIncomingData(args) {
255
257
  const { data, operation, originalDoc, req } = args;
256
258
  // Get intended focal point change from query string or incoming data
257
- const { uploadEdits = {} } = req.query || {};
259
+ const uploadEdits = req.query?.uploadEdits && typeof req.query.uploadEdits === 'object' ? req.query.uploadEdits : {};
258
260
  if (uploadEdits.focalPoint) return uploadEdits;
259
261
  const incomingData = data;
260
262
  const origDoc = originalDoc;
@@ -280,4 +282,4 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
280
282
  return uploadEdits;
281
283
  }
282
284
 
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dlbmVyYXRlRmlsZURhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBVcGxvYWRlZEZpbGUgfSBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgdHlwZSB7IE91dHB1dEluZm8sIFNoYXJwLCBTaGFycE9wdGlvbnMgfSBmcm9tICdzaGFycCdcblxuaW1wb3J0IHsgZnJvbUJ1ZmZlciB9IGZyb20gJ2ZpbGUtdHlwZSdcbmltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICdzYW5pdGl6ZS1maWxlbmFtZSdcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZXhwcmVzcy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmlsZURhdGEsIEZpbGVUb1NhdmUsIFByb2JlZEltYWdlU2l6ZSwgVXBsb2FkRWRpdHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBGaWxlVXBsb2FkRXJyb3IsIE1pc3NpbmdGaWxlIH0gZnJvbSAnLi4vZXJyb3JzJ1xuaW1wb3J0IEZpbGVSZXRyaWV2YWxFcnJvciBmcm9tICcuLi9lcnJvcnMvRmlsZVJldHJpZXZhbEVycm9yJ1xuaW1wb3J0IGNhblJlc2l6ZUltYWdlIGZyb20gJy4vY2FuUmVzaXplSW1hZ2UnXG5pbXBvcnQgY3JvcEltYWdlIGZyb20gJy4vY3JvcEltYWdlJ1xuaW1wb3J0IHsgZ2V0RXh0ZXJuYWxGaWxlIH0gZnJvbSAnLi9nZXRFeHRlcm5hbEZpbGUnXG5pbXBvcnQgZ2V0RmlsZUJ5UGF0aCBmcm9tICcuL2dldEZpbGVCeVBhdGgnXG5pbXBvcnQgZ2V0SW1hZ2VTaXplIGZyb20gJy4vZ2V0SW1hZ2VTaXplJ1xuaW1wb3J0IGdldFNhZmVGaWxlTmFtZSBmcm9tICcuL2dldFNhZmVGaWxlbmFtZSdcbmltcG9ydCByZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIGZyb20gJy4vaW1hZ2VSZXNpemVyJ1xuaW1wb3J0IGlzSW1hZ2UgZnJvbSAnLi9pc0ltYWdlJ1xuXG50eXBlIEFyZ3M8VD4gPSB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWdcbiAgZGF0YTogVFxuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3JpZ2luYWxEb2M/OiBUXG4gIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXM/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgdGhyb3dPbk1pc3NpbmdGaWxlPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdDxUPiA9IFByb21pc2U8e1xuICBkYXRhOiBUXG4gIGZpbGVzOiBGaWxlVG9TYXZlW11cbn0+XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUZpbGVEYXRhID0gYXN5bmMgPFQ+KHtcbiAgY29sbGVjdGlvbjogeyBjb25maWc6IGNvbGxlY3Rpb25Db25maWcgfSxcbiAgY29uZmlnLFxuICBkYXRhLFxuICBvcGVyYXRpb24sXG4gIG9yaWdpbmFsRG9jLFxuICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzLFxuICByZXEsXG4gIHRocm93T25NaXNzaW5nRmlsZSxcbn06IEFyZ3M8VD4pOiBSZXN1bHQ8VD4gPT4ge1xuICBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBmaWxlczogW10sXG4gICAgfVxuICB9XG5cbiAgbGV0IGZpbGUgPSByZXEuZmlsZXM/LmZpbGUgfHwgdW5kZWZpbmVkXG5cbiAgY29uc3QgdXBsb2FkRWRpdHMgPSBwYXJzZVVwbG9hZEVkaXRzRnJvbVJlcU9ySW5jb21pbmdEYXRhKHtcbiAgICBkYXRhLFxuICAgIG9wZXJhdGlvbixcbiAgICBvcmlnaW5hbERvYyxcbiAgICByZXEsXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGRpc2FibGVMb2NhbFN0b3JhZ2UsXG4gICAgZm9jYWxQb2ludDogZm9jYWxQb2ludEVuYWJsZWQsXG4gICAgZm9ybWF0T3B0aW9ucyxcbiAgICBpbWFnZVNpemVzLFxuICAgIHJlc2l6ZU9wdGlvbnMsXG4gICAgc3RhdGljRGlyLFxuICAgIHRyaW1PcHRpb25zLFxuICB9ID0gY29sbGVjdGlvbkNvbmZpZy51cGxvYWRcblxuICBsZXQgc3RhdGljUGF0aCA9IHN0YXRpY0RpclxuICBpZiAoc3RhdGljRGlyLmluZGV4T2YoJy8nKSAhPT0gMCkge1xuICAgIHN0YXRpY1BhdGggPSBwYXRoLnJlc29sdmUoY29uZmlnLnBhdGhzLmNvbmZpZ0Rpciwgc3RhdGljRGlyKVxuICB9XG5cbiAgaWYgKCFmaWxlICYmIHVwbG9hZEVkaXRzICYmIGRhdGEpIHtcbiAgICBjb25zdCB7IGZpbGVuYW1lLCB1cmwgfSA9IGRhdGEgYXMgRmlsZURhdGFcblxuICAgIHRyeSB7XG4gICAgICBpZiAodXJsICYmIHVybC5zdGFydHNXaXRoKCcvJykgJiYgIWRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHtzdGF0aWNQYXRofS8ke2ZpbGVuYW1lfWBcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZXRGaWxlQnlQYXRoKGZpbGVQYXRoKVxuICAgICAgICBmaWxlID0gcmVzcG9uc2UgYXMgVXBsb2FkZWRGaWxlXG4gICAgICAgIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXMgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGZpbGVuYW1lICYmIHVybCkge1xuICAgICAgICBmaWxlID0gKGF3YWl0IGdldEV4dGVybmFsRmlsZSh7XG4gICAgICAgICAgZGF0YTogZGF0YSBhcyBGaWxlRGF0YSxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgdXBsb2FkQ29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZCxcbiAgICAgICAgfSkpIGFzIFVwbG9hZGVkRmlsZVxuICAgICAgICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBGaWxlUmV0cmlldmFsRXJyb3IocmVxLnQsIGVyci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghZmlsZSkge1xuICAgIGlmICh0aHJvd09uTWlzc2luZ0ZpbGUpIHRocm93IG5ldyBNaXNzaW5nRmlsZShyZXEudClcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZmlsZXM6IFtdLFxuICAgIH1cbiAgfVxuXG4gIGlmICghZGlzYWJsZUxvY2FsU3RvcmFnZSkge1xuICAgIG1rZGlycC5zeW5jKHN0YXRpY1BhdGgpXG4gIH1cblxuICBsZXQgbmV3RGF0YSA9IGRhdGFcbiAgY29uc3QgZmlsZXNUb1NhdmU6IEZpbGVUb1NhdmVbXSA9IFtdXG4gIGNvbnN0IGZpbGVEYXRhOiBQYXJ0aWFsPEZpbGVEYXRhPiA9IHt9XG4gIGNvbnN0IGZpbGVJc0FuaW1hdGVkVHlwZSA9IFsnaW1hZ2UvYXZpZicsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCddLmluY2x1ZGVzKGZpbGUubWltZXR5cGUpXG4gIGNvbnN0IGNyb3BEYXRhID1cbiAgICB0eXBlb2YgdXBsb2FkRWRpdHMgPT09ICdvYmplY3QnICYmICdjcm9wJyBpbiB1cGxvYWRFZGl0cyA/IHVwbG9hZEVkaXRzLmNyb3AgOiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIGNvbnN0IGZpbGVTdXBwb3J0c1Jlc2l6ZSA9IGNhblJlc2l6ZUltYWdlKGZpbGUubWltZXR5cGUpXG4gICAgbGV0IGZzU2FmZU5hbWU6IHN0cmluZ1xuICAgIGxldCBzaGFycEZpbGU6IFNoYXJwIHwgdW5kZWZpbmVkXG4gICAgbGV0IGRpbWVuc2lvbnM6IFByb2JlZEltYWdlU2l6ZSB8IHVuZGVmaW5lZFxuICAgIGxldCBmaWxlQnVmZmVyOiB7IGRhdGE6IEJ1ZmZlcjsgaW5mbzogT3V0cHV0SW5mbyB9XG4gICAgbGV0IGV4dFxuICAgIGxldCBtaW1lOiBzdHJpbmdcbiAgICBjb25zdCBmaWxlSGFzQWRqdXN0bWVudHMgPVxuICAgICAgZmlsZVN1cHBvcnRzUmVzaXplICYmXG4gICAgICBCb29sZWFuKHJlc2l6ZU9wdGlvbnMgfHwgZm9ybWF0T3B0aW9ucyB8fCBpbWFnZVNpemVzIHx8IHRyaW1PcHRpb25zIHx8IGZpbGUudGVtcEZpbGVQYXRoKVxuXG4gICAgY29uc3Qgc2hhcnBPcHRpb25zOiBTaGFycE9wdGlvbnMgPSB7fVxuXG4gICAgaWYgKGZpbGVJc0FuaW1hdGVkVHlwZSkgc2hhcnBPcHRpb25zLmFuaW1hdGVkID0gdHJ1ZVxuXG4gICAgaWYgKHNoYXJwICYmIChmaWxlSXNBbmltYXRlZFR5cGUgfHwgZmlsZUhhc0FkanVzdG1lbnRzKSkge1xuICAgICAgaWYgKGZpbGUudGVtcEZpbGVQYXRoKSB7XG4gICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoLCBzaGFycE9wdGlvbnMpLnJvdGF0ZSgpIC8vIHBhc3Mgcm90YXRlKCkgdG8gYXV0by1yb3RhdGUgYmFzZWQgb24gRVhJRiBkYXRhLiBodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkL3B1bGwvMzA4MVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hhcnBGaWxlID0gc2hhcnAoZmlsZS5kYXRhLCBzaGFycE9wdGlvbnMpLnJvdGF0ZSgpIC8vIHBhc3Mgcm90YXRlKCkgdG8gYXV0by1yb3RhdGUgYmFzZWQgb24gRVhJRiBkYXRhLiBodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkL3B1bGwvMzA4MVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUhhc0FkanVzdG1lbnRzKSB7XG4gICAgICAgIGlmIChyZXNpemVPcHRpb25zKSB7XG4gICAgICAgICAgc2hhcnBGaWxlID0gc2hhcnBGaWxlLnJlc2l6ZShyZXNpemVPcHRpb25zKVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgc2hhcnBGaWxlID0gc2hhcnBGaWxlLnRvRm9ybWF0KGZvcm1hdE9wdGlvbnMuZm9ybWF0LCBmb3JtYXRPcHRpb25zLm9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaW1PcHRpb25zKSB7XG4gICAgICAgICAgc2hhcnBGaWxlID0gc2hhcnBGaWxlLnRyaW0odHJpbU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsZVN1cHBvcnRzUmVzaXplIHx8IGlzSW1hZ2UoZmlsZS5taW1ldHlwZSkpIHtcbiAgICAgIGRpbWVuc2lvbnMgPSBhd2FpdCBnZXRJbWFnZVNpemUoZmlsZSlcbiAgICAgIGZpbGVEYXRhLndpZHRoID0gZGltZW5zaW9ucy53aWR0aFxuICAgICAgZmlsZURhdGEuaGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHRcbiAgICB9XG5cbiAgICBpZiAoc2hhcnBGaWxlKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHNoYXJwRmlsZS5tZXRhZGF0YSgpXG4gICAgICBmaWxlQnVmZmVyID0gYXdhaXQgc2hhcnBGaWxlLnRvQnVmZmVyKHsgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUgfSlcbiAgICAgIDsoeyBleHQsIG1pbWUgfSA9IGF3YWl0IGZyb21CdWZmZXIoZmlsZUJ1ZmZlci5kYXRhKSkgLy8gVGhpcyBpcyBnZXR0aW5nIGFuIGluY29ycmVjdCBnaWYgaGVpZ2h0IGJhY2suXG4gICAgICBmaWxlRGF0YS53aWR0aCA9IGZpbGVCdWZmZXIuaW5mby53aWR0aFxuICAgICAgZmlsZURhdGEuaGVpZ2h0ID0gZmlsZUJ1ZmZlci5pbmZvLmhlaWdodFxuICAgICAgZmlsZURhdGEuZmlsZXNpemUgPSBmaWxlQnVmZmVyLmluZm8uc2l6ZVxuXG4gICAgICAvLyBBbmltYXRlZCBHSUZzICsgV2ViUCBhZ2dyZWdhdGUgdGhlIGhlaWdodCBmcm9tIGV2ZXJ5IGZyYW1lLCBzbyB3ZSBuZWVkIHRvIHVzZSBkaXZpZGUgYnkgbnVtYmVyIG9mIHBhZ2VzXG4gICAgICBpZiAobWV0YWRhdGEucGFnZXMpIHtcbiAgICAgICAgZmlsZURhdGEuaGVpZ2h0ID0gZmlsZUJ1ZmZlci5pbmZvLmhlaWdodCAvIG1ldGFkYXRhLnBhZ2VzXG4gICAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gZmlsZUJ1ZmZlci5kYXRhLmxlbmd0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtaW1lID0gZmlsZS5taW1ldHlwZVxuICAgICAgZmlsZURhdGEuZmlsZXNpemUgPSBmaWxlLnNpemVcblxuICAgICAgaWYgKGZpbGUubmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIGV4dCA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHQgPSAnJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkdXN0IFNWRyBtaW1lIHR5cGUuIGZyb21CdWZmZXIgbW9kaWZpZXMgaXQuXG4gICAgaWYgKG1pbWUgPT09ICdhcHBsaWNhdGlvbi94bWwnICYmIGV4dCA9PT0gJ3N2ZycpIG1pbWUgPSAnaW1hZ2Uvc3ZnK3htbCdcbiAgICBmaWxlRGF0YS5taW1lVHlwZSA9IG1pbWVcblxuICAgIGNvbnN0IGJhc2VGaWxlbmFtZSA9IHNhbml0aXplKGZpbGUubmFtZS5zdWJzdHJpbmcoMCwgZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJykpIHx8IGZpbGUubmFtZSlcbiAgICBmc1NhZmVOYW1lID0gYCR7YmFzZUZpbGVuYW1lfSR7ZXh0ID8gYC4ke2V4dH1gIDogJyd9YFxuXG4gICAgaWYgKCFvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzKSB7XG4gICAgICBmc1NhZmVOYW1lID0gYXdhaXQgZ2V0U2FmZUZpbGVOYW1lKHtcbiAgICAgICAgY29sbGVjdGlvblNsdWc6IGNvbGxlY3Rpb25Db25maWcuc2x1ZyxcbiAgICAgICAgZGVzaXJlZEZpbGVuYW1lOiBmc1NhZmVOYW1lLFxuICAgICAgICByZXEsXG4gICAgICAgIHN0YXRpY1BhdGgsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZpbGVEYXRhLmZpbGVuYW1lID0gZnNTYWZlTmFtZVxuICAgIGxldCBmaWxlRm9yUmVzaXplID0gZmlsZVxuXG4gICAgaWYgKGNyb3BEYXRhKSB7XG4gICAgICBjb25zdCB7IGRhdGE6IGNyb3BwZWRJbWFnZSwgaW5mbyB9ID0gYXdhaXQgY3JvcEltYWdlKHsgY3JvcERhdGEsIGRpbWVuc2lvbnMsIGZpbGUgfSlcblxuICAgICAgZmlsZXNUb1NhdmUucHVzaCh7XG4gICAgICAgIGJ1ZmZlcjogY3JvcHBlZEltYWdlLFxuICAgICAgICBwYXRoOiBgJHtzdGF0aWNQYXRofS8ke2ZzU2FmZU5hbWV9YCxcbiAgICAgIH0pXG5cbiAgICAgIGZpbGVGb3JSZXNpemUgPSB7XG4gICAgICAgIC4uLmZpbGUsXG4gICAgICAgIGRhdGE6IGNyb3BwZWRJbWFnZSxcbiAgICAgICAgc2l6ZTogaW5mby5zaXplLFxuICAgICAgfVxuICAgICAgZmlsZURhdGEud2lkdGggPSBpbmZvLndpZHRoXG4gICAgICBmaWxlRGF0YS5oZWlnaHQgPSBpbmZvLmhlaWdodFxuICAgICAgaWYgKGZpbGVJc0FuaW1hdGVkVHlwZSkge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHNoYXJwRmlsZS5tZXRhZGF0YSgpXG4gICAgICAgIGZpbGVEYXRhLmhlaWdodCA9IG1ldGFkYXRhLnBhZ2VzID8gaW5mby5oZWlnaHQgLyBtZXRhZGF0YS5wYWdlcyA6IGluZm8uaGVpZ2h0XG4gICAgICB9XG4gICAgICBmaWxlRGF0YS5maWxlc2l6ZSA9IGluZm8uc2l6ZVxuXG4gICAgICBpZiAoZmlsZS50ZW1wRmlsZVBhdGgpIHtcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKGZpbGUudGVtcEZpbGVQYXRoLCBjcm9wcGVkSW1hZ2UpIC8vIHdyaXRlIGZpbGVCdWZmZXIgdG8gdGhlIHRlbXAgcGF0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLmZpbGVzLmZpbGUgPSBmaWxlRm9yUmVzaXplXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVzVG9TYXZlLnB1c2goe1xuICAgICAgICBidWZmZXI6IGZpbGVCdWZmZXI/LmRhdGEgfHwgZmlsZS5kYXRhLFxuICAgICAgICBwYXRoOiBgJHtzdGF0aWNQYXRofS8ke2ZzU2FmZU5hbWV9YCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElmIHVzaW5nIHRlbXAgZmlsZXMgYW5kIHRoZSBpbWFnZSBpcyBiZWluZyByZXNpemVkLCB3cml0ZSB0aGUgZmlsZSB0byB0aGUgdGVtcCBwYXRoXG4gICAgICBpZiAoZmlsZUJ1ZmZlcj8uZGF0YSB8fCBmaWxlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZmlsZS50ZW1wRmlsZVBhdGgpIHtcbiAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZS50ZW1wRmlsZVBhdGgsIGZpbGVCdWZmZXI/LmRhdGEgfHwgZmlsZS5kYXRhKSAvLyB3cml0ZSBmaWxlQnVmZmVyIHRvIHRoZSB0ZW1wIHBhdGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3NpZ24gdGhlIF9wb3NzaWJseSBtb2RpZmllZF8gZmlsZSB0byB0aGUgcmVxdWVzdCBvYmplY3RcbiAgICAgICAgICByZXEuZmlsZXMuZmlsZSA9IHtcbiAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICBkYXRhOiBmaWxlQnVmZmVyPy5kYXRhIHx8IGZpbGUuZGF0YSxcbiAgICAgICAgICAgIHNpemU6IGZpbGVCdWZmZXI/LmluZm8uc2l6ZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsZVN1cHBvcnRzUmVzaXplICYmIChBcnJheS5pc0FycmF5KGltYWdlU2l6ZXMpIHx8IGZvY2FsUG9pbnRFbmFibGVkICE9PSBmYWxzZSkpIHtcbiAgICAgIHJlcS5wYXlsb2FkVXBsb2FkU2l6ZXMgPSB7fVxuICAgICAgY29uc3QgeyBmb2NhbFBvaW50LCBzaXplRGF0YSwgc2l6ZXNUb1NhdmUgfSA9IGF3YWl0IHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICAgICAgICBjb25maWc6IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIGRpbWVuc2lvbnM6ICFjcm9wRGF0YVxuICAgICAgICAgID8gZGltZW5zaW9uc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5kaW1lbnNpb25zLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGZpbGVEYXRhLmhlaWdodCxcbiAgICAgICAgICAgICAgd2lkdGg6IGZpbGVEYXRhLndpZHRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgZmlsZTogZmlsZUZvclJlc2l6ZSxcbiAgICAgICAgbWltZVR5cGU6IGZpbGVEYXRhLm1pbWVUeXBlLFxuICAgICAgICByZXEsXG4gICAgICAgIHNhdmVkRmlsZW5hbWU6IGZzU2FmZU5hbWUgfHwgZmlsZS5uYW1lLFxuICAgICAgICBzdGF0aWNQYXRoLFxuICAgICAgICB1cGxvYWRFZGl0cyxcbiAgICAgIH0pXG5cbiAgICAgIGZpbGVEYXRhLnNpemVzID0gc2l6ZURhdGFcbiAgICAgIGZpbGVEYXRhLmZvY2FsWCA9IGZvY2FsUG9pbnQ/LnhcbiAgICAgIGZpbGVEYXRhLmZvY2FsWSA9IGZvY2FsUG9pbnQ/LnlcbiAgICAgIGZpbGVzVG9TYXZlLnB1c2goLi4uc2l6ZXNUb1NhdmUpXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXEucGF5bG9hZC5sb2dnZXIuZXJyb3IoeyBlcnIsIG1zZzogJ0Vycm9yIHVwbG9hZGluZyBmaWxlJyB9KVxuICAgIHRocm93IG5ldyBGaWxlVXBsb2FkRXJyb3IocmVxLnQpXG4gIH1cblxuICBuZXdEYXRhID0ge1xuICAgIC4uLm5ld0RhdGEsXG4gICAgLi4uZmlsZURhdGEsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRhdGE6IG5ld0RhdGEsXG4gICAgZmlsZXM6IGZpbGVzVG9TYXZlLFxuICB9XG59XG5cbi8qKlxuICogUGFyc2UgdXBsb2FkIGVkaXRzIGZyb20gcmVxIG9yIGluY29taW5nIGRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VVcGxvYWRFZGl0c0Zyb21SZXFPckluY29taW5nRGF0YShhcmdzOiB7XG4gIGRhdGE6IHVua25vd25cbiAgb3BlcmF0aW9uOiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gIG9yaWdpbmFsRG9jOiB1bmtub3duXG4gIHJlcTogUGF5bG9hZFJlcXVlc3Rcbn0pOiBVcGxvYWRFZGl0cyB7XG4gIGNvbnN0IHsgZGF0YSwgb3BlcmF0aW9uLCBvcmlnaW5hbERvYywgcmVxIH0gPSBhcmdzXG5cbiAgLy8gR2V0IGludGVuZGVkIGZvY2FsIHBvaW50IGNoYW5nZSBmcm9tIHF1ZXJ5IHN0cmluZyBvciBpbmNvbWluZyBkYXRhXG4gIGNvbnN0IHtcbiAgICB1cGxvYWRFZGl0cyA9IHt9LFxuICB9OiB7XG4gICAgdXBsb2FkRWRpdHM/OiBVcGxvYWRFZGl0c1xuICB9ID0gcmVxLnF1ZXJ5IHx8IHt9XG5cbiAgaWYgKHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQpIHJldHVybiB1cGxvYWRFZGl0c1xuXG4gIGNvbnN0IGluY29taW5nRGF0YSA9IGRhdGEgYXMgRmlsZURhdGFcbiAgY29uc3Qgb3JpZ0RvYyA9IG9yaWdpbmFsRG9jIGFzIEZpbGVEYXRhXG5cbiAgLy8gSWYgbm8gY2hhbmdlIGluIGZvY2FsIHBvaW50LCByZXR1cm4gdW5kZWZpbmVkLlxuICAvLyBUaGlzIHByZXZlbnRzIGEgcmVmb2NhbCBvcGVyYXRpb24gdHJpZ2dlcmVkIGZyb20gYWRtaW4sIGJlY2F1c2UgaXQgYWx3YXlzIHNlbmRzIHRoZSBmb2NhbCBwb2ludC5cbiAgaWYgKG9yaWdEb2MgJiYgaW5jb21pbmdEYXRhLmZvY2FsWCA9PT0gb3JpZ0RvYy5mb2NhbFggJiYgaW5jb21pbmdEYXRhLmZvY2FsWSA9PT0gb3JpZ0RvYy5mb2NhbFkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBpZiAoaW5jb21pbmdEYXRhLmZvY2FsWCAmJiBpbmNvbWluZ0RhdGEuZm9jYWxZKSB7XG4gICAgdXBsb2FkRWRpdHMuZm9jYWxQb2ludCA9IHtcbiAgICAgIHg6IGluY29taW5nRGF0YS5mb2NhbFgsXG4gICAgICB5OiBpbmNvbWluZ0RhdGEuZm9jYWxZLFxuICAgIH1cbiAgICByZXR1cm4gdXBsb2FkRWRpdHNcbiAgfVxuXG4gIC8vIElmIG5vIGZvY2FsIHBvaW50IGlzIHNldCwgZGVmYXVsdCB0byBjZW50ZXJcbiAgaWYgKG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScpIHtcbiAgICB1cGxvYWRFZGl0cy5mb2NhbFBvaW50ID0ge1xuICAgICAgeDogNTAsXG4gICAgICB5OiA1MCxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVwbG9hZEVkaXRzXG59XG4iXSwibmFtZXMiOlsiZ2VuZXJhdGVGaWxlRGF0YSIsImNvbGxlY3Rpb24iLCJjb25maWciLCJjb2xsZWN0aW9uQ29uZmlnIiwiZGF0YSIsIm9wZXJhdGlvbiIsIm9yaWdpbmFsRG9jIiwib3ZlcndyaXRlRXhpc3RpbmdGaWxlcyIsInJlcSIsInRocm93T25NaXNzaW5nRmlsZSIsInVwbG9hZCIsImZpbGVzIiwiZmlsZSIsInVuZGVmaW5lZCIsInVwbG9hZEVkaXRzIiwicGFyc2VVcGxvYWRFZGl0c0Zyb21SZXFPckluY29taW5nRGF0YSIsImRpc2FibGVMb2NhbFN0b3JhZ2UiLCJmb2NhbFBvaW50IiwiZm9jYWxQb2ludEVuYWJsZWQiLCJmb3JtYXRPcHRpb25zIiwiaW1hZ2VTaXplcyIsInJlc2l6ZU9wdGlvbnMiLCJzdGF0aWNEaXIiLCJ0cmltT3B0aW9ucyIsInN0YXRpY1BhdGgiLCJpbmRleE9mIiwicGF0aCIsInJlc29sdmUiLCJwYXRocyIsImNvbmZpZ0RpciIsImZpbGVuYW1lIiwidXJsIiwic3RhcnRzV2l0aCIsImZpbGVQYXRoIiwicmVzcG9uc2UiLCJnZXRGaWxlQnlQYXRoIiwiZ2V0RXh0ZXJuYWxGaWxlIiwidXBsb2FkQ29uZmlnIiwiZXJyIiwiRXJyb3IiLCJGaWxlUmV0cmlldmFsRXJyb3IiLCJ0IiwibWVzc2FnZSIsIk1pc3NpbmdGaWxlIiwibWtkaXJwIiwic3luYyIsIm5ld0RhdGEiLCJmaWxlc1RvU2F2ZSIsImZpbGVEYXRhIiwiZmlsZUlzQW5pbWF0ZWRUeXBlIiwiaW5jbHVkZXMiLCJtaW1ldHlwZSIsImNyb3BEYXRhIiwiY3JvcCIsImZpbGVTdXBwb3J0c1Jlc2l6ZSIsImNhblJlc2l6ZUltYWdlIiwiZnNTYWZlTmFtZSIsInNoYXJwRmlsZSIsImRpbWVuc2lvbnMiLCJmaWxlQnVmZmVyIiwiZXh0IiwibWltZSIsImZpbGVIYXNBZGp1c3RtZW50cyIsIkJvb2xlYW4iLCJ0ZW1wRmlsZVBhdGgiLCJzaGFycE9wdGlvbnMiLCJhbmltYXRlZCIsInNoYXJwIiwicm90YXRlIiwicmVzaXplIiwidG9Gb3JtYXQiLCJmb3JtYXQiLCJvcHRpb25zIiwidHJpbSIsImlzSW1hZ2UiLCJnZXRJbWFnZVNpemUiLCJ3aWR0aCIsImhlaWdodCIsIm1ldGFkYXRhIiwidG9CdWZmZXIiLCJyZXNvbHZlV2l0aE9iamVjdCIsImZyb21CdWZmZXIiLCJpbmZvIiwiZmlsZXNpemUiLCJzaXplIiwicGFnZXMiLCJsZW5ndGgiLCJuYW1lIiwic3BsaXQiLCJwb3AiLCJtaW1lVHlwZSIsImJhc2VGaWxlbmFtZSIsInNhbml0aXplIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJnZXRTYWZlRmlsZU5hbWUiLCJjb2xsZWN0aW9uU2x1ZyIsInNsdWciLCJkZXNpcmVkRmlsZW5hbWUiLCJmaWxlRm9yUmVzaXplIiwiY3JvcHBlZEltYWdlIiwiY3JvcEltYWdlIiwicHVzaCIsImJ1ZmZlciIsImZzIiwicHJvbWlzZXMiLCJ3cml0ZUZpbGUiLCJBcnJheSIsImlzQXJyYXkiLCJwYXlsb2FkVXBsb2FkU2l6ZXMiLCJzaXplRGF0YSIsInNpemVzVG9TYXZlIiwicmVzaXplQW5kVHJhbnNmb3JtSW1hZ2VTaXplcyIsInNhdmVkRmlsZW5hbWUiLCJzaXplcyIsImZvY2FsWCIsIngiLCJmb2NhbFkiLCJ5IiwicGF5bG9hZCIsImxvZ2dlciIsImVycm9yIiwibXNnIiwiRmlsZVVwbG9hZEVycm9yIiwiYXJncyIsInF1ZXJ5IiwiaW5jb21pbmdEYXRhIiwib3JpZ0RvYyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiOzs7OytCQTBDYUE7OztlQUFBQTs7OzBCQXZDYzsyREFDWjsrREFDSTs2REFDRjt5RUFDSTs4REFDSDt3QkFPMkI7MkVBQ2Q7dUVBQ0o7a0VBQ0w7aUNBQ1U7c0VBQ047cUVBQ0Q7d0VBQ0c7cUVBQ2E7Z0VBQ3JCOzs7Ozs7QUFrQmIsTUFBTUEsbUJBQW1CLE9BQVUsRUFDeENDLFlBQVksRUFBRUMsUUFBUUMsZ0JBQWdCLEVBQUUsRUFDeENELE1BQU0sRUFDTkUsSUFBSSxFQUNKQyxTQUFTLEVBQ1RDLFdBQVcsRUFDWEMsc0JBQXNCLEVBQ3RCQyxHQUFHLEVBQ0hDLGtCQUFrQixFQUNWO0lBQ1IsSUFB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
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dlbmVyYXRlRmlsZURhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBVcGxvYWRlZEZpbGUgfSBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgdHlwZSB7IE91dHB1dEluZm8sIFNoYXJwLCBTaGFycE9wdGlvbnMgfSBmcm9tICdzaGFycCdcblxuaW1wb3J0IHsgZnJvbUJ1ZmZlciB9IGZyb20gJ2ZpbGUtdHlwZSdcbmltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICdzYW5pdGl6ZS1maWxlbmFtZSdcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZXhwcmVzcy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmlsZURhdGEsIEZpbGVUb1NhdmUsIFByb2JlZEltYWdlU2l6ZSwgVXBsb2FkRWRpdHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBGaWxlVXBsb2FkRXJyb3IsIE1pc3NpbmdGaWxlIH0gZnJvbSAnLi4vZXJyb3JzJ1xuaW1wb3J0IEZpbGVSZXRyaWV2YWxFcnJvciBmcm9tICcuLi9lcnJvcnMvRmlsZVJldHJpZXZhbEVycm9yJ1xuaW1wb3J0IGNhblJlc2l6ZUltYWdlIGZyb20gJy4vY2FuUmVzaXplSW1hZ2UnXG5pbXBvcnQgeyBjcm9wSW1hZ2UgfSBmcm9tICcuL2Nyb3BJbWFnZSdcbmltcG9ydCB7IGdldEV4dGVybmFsRmlsZSB9IGZyb20gJy4vZ2V0RXh0ZXJuYWxGaWxlJ1xuaW1wb3J0IGdldEZpbGVCeVBhdGggZnJvbSAnLi9nZXRGaWxlQnlQYXRoJ1xuaW1wb3J0IGdldEltYWdlU2l6ZSBmcm9tICcuL2dldEltYWdlU2l6ZSdcbmltcG9ydCBnZXRTYWZlRmlsZU5hbWUgZnJvbSAnLi9nZXRTYWZlRmlsZW5hbWUnXG5pbXBvcnQgcmVzaXplQW5kVHJhbnNmb3JtSW1hZ2VTaXplcyBmcm9tICcuL2ltYWdlUmVzaXplcidcbmltcG9ydCBpc0ltYWdlIGZyb20gJy4vaXNJbWFnZSdcblxudHlwZSBBcmdzPFQ+ID0ge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uXG4gIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnXG4gIGRhdGE6IFRcbiAgb3BlcmF0aW9uOiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gIG9yaWdpbmFsRG9jPzogVFxuICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzPzogYm9vbGVhblxuICByZXE6IFBheWxvYWRSZXF1ZXN0XG4gIHRocm93T25NaXNzaW5nRmlsZT86IGJvb2xlYW5cbn1cblxudHlwZSBSZXN1bHQ8VD4gPSBQcm9taXNlPHtcbiAgZGF0YTogVFxuICBmaWxlczogRmlsZVRvU2F2ZVtdXG59PlxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVGaWxlRGF0YSA9IGFzeW5jIDxUPih7XG4gIGNvbGxlY3Rpb246IHsgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnIH0sXG4gIGNvbmZpZyxcbiAgZGF0YSxcbiAgb3BlcmF0aW9uLFxuICBvcmlnaW5hbERvYyxcbiAgb3ZlcndyaXRlRXhpc3RpbmdGaWxlcyxcbiAgcmVxLFxuICB0aHJvd09uTWlzc2luZ0ZpbGUsXG59OiBBcmdzPFQ+KTogUmVzdWx0PFQ+ID0+IHtcbiAgaWYgKCFjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZCkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZmlsZXM6IFtdLFxuICAgIH1cbiAgfVxuXG4gIGxldCBmaWxlID0gcmVxLmZpbGVzPy5maWxlIHx8IHVuZGVmaW5lZFxuXG4gIGNvbnN0IHVwbG9hZEVkaXRzID0gcGFyc2VVcGxvYWRFZGl0c0Zyb21SZXFPckluY29taW5nRGF0YSh7XG4gICAgZGF0YSxcbiAgICBvcGVyYXRpb24sXG4gICAgb3JpZ2luYWxEb2MsXG4gICAgcmVxLFxuICB9KVxuXG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlTG9jYWxTdG9yYWdlLFxuICAgIGZvY2FsUG9pbnQ6IGZvY2FsUG9pbnRFbmFibGVkLFxuICAgIGZvcm1hdE9wdGlvbnMsXG4gICAgaW1hZ2VTaXplcyxcbiAgICByZXNpemVPcHRpb25zLFxuICAgIHN0YXRpY0RpcixcbiAgICB0cmltT3B0aW9ucyxcbiAgfSA9IGNvbGxlY3Rpb25Db25maWcudXBsb2FkXG5cbiAgbGV0IHN0YXRpY1BhdGggPSBzdGF0aWNEaXJcbiAgaWYgKHN0YXRpY0Rpci5pbmRleE9mKCcvJykgIT09IDApIHtcbiAgICBzdGF0aWNQYXRoID0gcGF0aC5yZXNvbHZlKGNvbmZpZy5wYXRocy5jb25maWdEaXIsIHN0YXRpY0RpcilcbiAgfVxuXG4gIGlmICghZmlsZSAmJiB1cGxvYWRFZGl0cyAmJiBkYXRhKSB7XG4gICAgY29uc3QgeyBmaWxlbmFtZSwgdXJsIH0gPSBkYXRhIGFzIEZpbGVEYXRhXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHVybCAmJiB1cmwuc3RhcnRzV2l0aCgnLycpICYmICFkaXNhYmxlTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7c3RhdGljUGF0aH0vJHtmaWxlbmFtZX1gXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0RmlsZUJ5UGF0aChmaWxlUGF0aClcbiAgICAgICAgZmlsZSA9IHJlc3BvbnNlIGFzIFVwbG9hZGVkRmlsZVxuICAgICAgICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChmaWxlbmFtZSAmJiB1cmwpIHtcbiAgICAgICAgZmlsZSA9IChhd2FpdCBnZXRFeHRlcm5hbEZpbGUoe1xuICAgICAgICAgIGRhdGE6IGRhdGEgYXMgRmlsZURhdGEsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHVwbG9hZENvbmZpZzogY29sbGVjdGlvbkNvbmZpZy51cGxvYWQsXG4gICAgICAgIH0pKSBhcyBVcGxvYWRlZEZpbGVcbiAgICAgICAgb3ZlcndyaXRlRXhpc3RpbmdGaWxlcyA9IHRydWVcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRmlsZVJldHJpZXZhbEVycm9yKHJlcS50LCBlcnIubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWZpbGUpIHtcbiAgICBpZiAodGhyb3dPbk1pc3NpbmdGaWxlKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGUocmVxLnQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICB9XG4gIH1cblxuICBpZiAoIWRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICBta2RpcnAuc3luYyhzdGF0aWNQYXRoKVxuICB9XG5cbiAgbGV0IG5ld0RhdGEgPSBkYXRhXG4gIGNvbnN0IGZpbGVzVG9TYXZlOiBGaWxlVG9TYXZlW10gPSBbXVxuICBjb25zdCBmaWxlRGF0YTogUGFydGlhbDxGaWxlRGF0YT4gPSB7fVxuICBjb25zdCBmaWxlSXNBbmltYXRlZFR5cGUgPSBbJ2ltYWdlL2F2aWYnLCAnaW1hZ2UvZ2lmJywgJ2ltYWdlL3dlYnAnXS5pbmNsdWRlcyhmaWxlLm1pbWV0eXBlKVxuICBjb25zdCBjcm9wRGF0YSA9XG4gICAgdHlwZW9mIHVwbG9hZEVkaXRzID09PSAnb2JqZWN0JyAmJiAnY3JvcCcgaW4gdXBsb2FkRWRpdHMgPyB1cGxvYWRFZGl0cy5jcm9wIDogdW5kZWZpbmVkXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlU3VwcG9ydHNSZXNpemUgPSBjYW5SZXNpemVJbWFnZShmaWxlLm1pbWV0eXBlKVxuICAgIGxldCBmc1NhZmVOYW1lOiBzdHJpbmdcbiAgICBsZXQgc2hhcnBGaWxlOiBTaGFycCB8IHVuZGVmaW5lZFxuICAgIGxldCBkaW1lbnNpb25zOiBQcm9iZWRJbWFnZVNpemUgfCB1bmRlZmluZWRcbiAgICBsZXQgZmlsZUJ1ZmZlcjogeyBkYXRhOiBCdWZmZXI7IGluZm86IE91dHB1dEluZm8gfVxuICAgIGxldCBleHRcbiAgICBsZXQgbWltZTogc3RyaW5nXG4gICAgY29uc3QgZmlsZUhhc0FkanVzdG1lbnRzID1cbiAgICAgIGZpbGVTdXBwb3J0c1Jlc2l6ZSAmJlxuICAgICAgQm9vbGVhbihyZXNpemVPcHRpb25zIHx8IGZvcm1hdE9wdGlvbnMgfHwgaW1hZ2VTaXplcyB8fCB0cmltT3B0aW9ucyB8fCBmaWxlLnRlbXBGaWxlUGF0aClcblxuICAgIGNvbnN0IHNoYXJwT3B0aW9uczogU2hhcnBPcHRpb25zID0ge31cblxuICAgIGlmIChmaWxlSXNBbmltYXRlZFR5cGUpIHNoYXJwT3B0aW9ucy5hbmltYXRlZCA9IHRydWVcblxuICAgIGlmIChzaGFycCAmJiAoZmlsZUlzQW5pbWF0ZWRUeXBlIHx8IGZpbGVIYXNBZGp1c3RtZW50cykpIHtcbiAgICAgIGlmIChmaWxlLnRlbXBGaWxlUGF0aCkge1xuICAgICAgICBzaGFycEZpbGUgPSBzaGFycChmaWxlLnRlbXBGaWxlUGF0aCwgc2hhcnBPcHRpb25zKS5yb3RhdGUoKSAvLyBwYXNzIHJvdGF0ZSgpIHRvIGF1dG8tcm90YXRlIGJhc2VkIG9uIEVYSUYgZGF0YS4gaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzMwODFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwKGZpbGUuZGF0YSwgc2hhcnBPcHRpb25zKS5yb3RhdGUoKSAvLyBwYXNzIHJvdGF0ZSgpIHRvIGF1dG8tcm90YXRlIGJhc2VkIG9uIEVYSUYgZGF0YS4gaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzMwODFcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVIYXNBZGp1c3RtZW50cykge1xuICAgICAgICBpZiAocmVzaXplT3B0aW9ucykge1xuICAgICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwRmlsZS5yZXNpemUocmVzaXplT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwRmlsZS50b0Zvcm1hdChmb3JtYXRPcHRpb25zLmZvcm1hdCwgZm9ybWF0T3B0aW9ucy5vcHRpb25zKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0cmltT3B0aW9ucykge1xuICAgICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwRmlsZS50cmltKHRyaW1PcHRpb25zKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpbGVTdXBwb3J0c1Jlc2l6ZSB8fCBpc0ltYWdlKGZpbGUubWltZXR5cGUpKSB7XG4gICAgICBkaW1lbnNpb25zID0gYXdhaXQgZ2V0SW1hZ2VTaXplKGZpbGUpXG4gICAgICBmaWxlRGF0YS53aWR0aCA9IGRpbWVuc2lvbnMud2lkdGhcbiAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuXG4gICAgaWYgKHNoYXJwRmlsZSkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBzaGFycEZpbGUubWV0YWRhdGEoKVxuICAgICAgZmlsZUJ1ZmZlciA9IGF3YWl0IHNoYXJwRmlsZS50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pXG4gICAgICA7KHsgZXh0LCBtaW1lIH0gPSBhd2FpdCBmcm9tQnVmZmVyKGZpbGVCdWZmZXIuZGF0YSkpIC8vIFRoaXMgaXMgZ2V0dGluZyBhbiBpbmNvcnJlY3QgZ2lmIGhlaWdodCBiYWNrLlxuICAgICAgZmlsZURhdGEud2lkdGggPSBmaWxlQnVmZmVyLmluZm8ud2lkdGhcbiAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGZpbGVCdWZmZXIuaW5mby5oZWlnaHRcbiAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gZmlsZUJ1ZmZlci5pbmZvLnNpemVcblxuICAgICAgLy8gQW5pbWF0ZWQgR0lGcyArIFdlYlAgYWdncmVnYXRlIHRoZSBoZWlnaHQgZnJvbSBldmVyeSBmcmFtZSwgc28gd2UgbmVlZCB0byB1c2UgZGl2aWRlIGJ5IG51bWJlciBvZiBwYWdlc1xuICAgICAgaWYgKG1ldGFkYXRhLnBhZ2VzKSB7XG4gICAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGZpbGVCdWZmZXIuaW5mby5oZWlnaHQgLyBtZXRhZGF0YS5wYWdlc1xuICAgICAgICBmaWxlRGF0YS5maWxlc2l6ZSA9IGZpbGVCdWZmZXIuZGF0YS5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWltZSA9IGZpbGUubWltZXR5cGVcbiAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gZmlsZS5zaXplXG5cbiAgICAgIGlmIChmaWxlLm5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBleHQgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKS5zcGxpdCgnPycpWzBdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHQgPSAnJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkanVzdCBTVkcgbWltZSB0eXBlLiBmcm9tQnVmZmVyIG1vZGlmaWVzIGl0LlxuICAgIGlmIChtaW1lID09PSAnYXBwbGljYXRpb24veG1sJyAmJiBleHQgPT09ICdzdmcnKSBtaW1lID0gJ2ltYWdlL3N2Zyt4bWwnXG4gICAgZmlsZURhdGEubWltZVR5cGUgPSBtaW1lXG5cbiAgICBjb25zdCBiYXNlRmlsZW5hbWUgPSBzYW5pdGl6ZShmaWxlLm5hbWUuc3Vic3RyaW5nKDAsIGZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpKSB8fCBmaWxlLm5hbWUpXG4gICAgZnNTYWZlTmFtZSA9IGAke2Jhc2VGaWxlbmFtZX0ke2V4dCA/IGAuJHtleHR9YCA6ICcnfWBcblxuICAgIGlmICghb3ZlcndyaXRlRXhpc3RpbmdGaWxlcykge1xuICAgICAgZnNTYWZlTmFtZSA9IGF3YWl0IGdldFNhZmVGaWxlTmFtZSh7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgIGRlc2lyZWRGaWxlbmFtZTogZnNTYWZlTmFtZSxcbiAgICAgICAgcmVxLFxuICAgICAgICBzdGF0aWNQYXRoLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmaWxlRGF0YS5maWxlbmFtZSA9IGZzU2FmZU5hbWVcbiAgICBsZXQgZmlsZUZvclJlc2l6ZSA9IGZpbGVcblxuICAgIGlmIChjcm9wRGF0YSkge1xuICAgICAgY29uc3QgeyBkYXRhOiBjcm9wcGVkSW1hZ2UsIGluZm8gfSA9IGF3YWl0IGNyb3BJbWFnZSh7XG4gICAgICAgIGNyb3BEYXRhLFxuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICBmaWxlLFxuICAgICAgICBoZWlnaHRJblBpeGVsczogdXBsb2FkRWRpdHMuaGVpZ2h0SW5QaXhlbHMsXG4gICAgICAgIHdpZHRoSW5QaXhlbHM6IHVwbG9hZEVkaXRzLndpZHRoSW5QaXhlbHMsXG4gICAgICB9KVxuXG4gICAgICBmaWxlc1RvU2F2ZS5wdXNoKHtcbiAgICAgICAgYnVmZmVyOiBjcm9wcGVkSW1hZ2UsXG4gICAgICAgIHBhdGg6IGAke3N0YXRpY1BhdGh9LyR7ZnNTYWZlTmFtZX1gLFxuICAgICAgfSlcblxuICAgICAgZmlsZUZvclJlc2l6ZSA9IHtcbiAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgZGF0YTogY3JvcHBlZEltYWdlLFxuICAgICAgICBzaXplOiBpbmZvLnNpemUsXG4gICAgICB9XG4gICAgICBmaWxlRGF0YS53aWR0aCA9IGluZm8ud2lkdGhcbiAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGluZm8uaGVpZ2h0XG4gICAgICBpZiAoZmlsZUlzQW5pbWF0ZWRUeXBlKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnBGaWxlLm1ldGFkYXRhKClcbiAgICAgICAgZmlsZURhdGEuaGVpZ2h0ID0gbWV0YWRhdGEucGFnZXMgPyBpbmZvLmhlaWdodCAvIG1ldGFkYXRhLnBhZ2VzIDogaW5mby5oZWlnaHRcbiAgICAgIH1cbiAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gaW5mby5zaXplXG5cbiAgICAgIGlmIChmaWxlLnRlbXBGaWxlUGF0aCkge1xuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZS50ZW1wRmlsZVBhdGgsIGNyb3BwZWRJbWFnZSkgLy8gd3JpdGUgZmlsZUJ1ZmZlciB0byB0aGUgdGVtcCBwYXRoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEuZmlsZXMuZmlsZSA9IGZpbGVGb3JSZXNpemVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZXNUb1NhdmUucHVzaCh7XG4gICAgICAgIGJ1ZmZlcjogZmlsZUJ1ZmZlcj8uZGF0YSB8fCBmaWxlLmRhdGEsXG4gICAgICAgIHBhdGg6IGAke3N0YXRpY1BhdGh9LyR7ZnNTYWZlTmFtZX1gLFxuICAgICAgfSlcblxuICAgICAgLy8gSWYgdXNpbmcgdGVtcCBmaWxlcyBhbmQgdGhlIGltYWdlIGlzIGJlaW5nIHJlc2l6ZWQsIHdyaXRlIHRoZSBmaWxlIHRvIHRoZSB0ZW1wIHBhdGhcbiAgICAgIGlmIChmaWxlQnVmZmVyPy5kYXRhIHx8IGZpbGUuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChmaWxlLnRlbXBGaWxlUGF0aCkge1xuICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShmaWxlLnRlbXBGaWxlUGF0aCwgZmlsZUJ1ZmZlcj8uZGF0YSB8fCBmaWxlLmRhdGEpIC8vIHdyaXRlIGZpbGVCdWZmZXIgdG8gdGhlIHRlbXAgcGF0aFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzc2lnbiB0aGUgX3Bvc3NpYmx5IG1vZGlmaWVkXyBmaWxlIHRvIHRoZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgIHJlcS5maWxlcy5maWxlID0ge1xuICAgICAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IGZpbGVCdWZmZXI/LmRhdGEgfHwgZmlsZS5kYXRhLFxuICAgICAgICAgICAgc2l6ZTogZmlsZUJ1ZmZlcj8uaW5mby5zaXplLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWxlU3VwcG9ydHNSZXNpemUgJiYgKEFycmF5LmlzQXJyYXkoaW1hZ2VTaXplcykgfHwgZm9jYWxQb2ludEVuYWJsZWQgIT09IGZhbHNlKSkge1xuICAgICAgcmVxLnBheWxvYWRVcGxvYWRTaXplcyA9IHt9XG4gICAgICBjb25zdCB7IGZvY2FsUG9pbnQsIHNpemVEYXRhLCBzaXplc1RvU2F2ZSB9ID0gYXdhaXQgcmVzaXplQW5kVHJhbnNmb3JtSW1hZ2VTaXplcyh7XG4gICAgICAgIGNvbmZpZzogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZGltZW5zaW9uczogIWNyb3BEYXRhXG4gICAgICAgICAgPyBkaW1lbnNpb25zXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIC4uLmRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgIGhlaWdodDogZmlsZURhdGEuaGVpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aDogZmlsZURhdGEud2lkdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICBmaWxlOiBmaWxlRm9yUmVzaXplLFxuICAgICAgICBtaW1lVHlwZTogZmlsZURhdGEubWltZVR5cGUsXG4gICAgICAgIHJlcSxcbiAgICAgICAgc2F2ZWRGaWxlbmFtZTogZnNTYWZlTmFtZSB8fCBmaWxlLm5hbWUsXG4gICAgICAgIHN0YXRpY1BhdGgsXG4gICAgICAgIHVwbG9hZEVkaXRzLFxuICAgICAgfSlcblxuICAgICAgZmlsZURhdGEuc2l6ZXMgPSBzaXplRGF0YVxuICAgICAgZmlsZURhdGEuZm9jYWxYID0gZm9jYWxQb2ludD8ueFxuICAgICAgZmlsZURhdGEuZm9jYWxZID0gZm9jYWxQb2ludD8ueVxuICAgICAgZmlsZXNUb1NhdmUucHVzaCguLi5zaXplc1RvU2F2ZSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJlcS5wYXlsb2FkLmxvZ2dlci5lcnJvcih7IGVyciwgbXNnOiAnRXJyb3IgdXBsb2FkaW5nIGZpbGUnIH0pXG4gICAgdGhyb3cgbmV3IEZpbGVVcGxvYWRFcnJvcihyZXEudClcbiAgfVxuXG4gIG5ld0RhdGEgPSB7XG4gICAgLi4ubmV3RGF0YSxcbiAgICAuLi5maWxlRGF0YSxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGF0YTogbmV3RGF0YSxcbiAgICBmaWxlczogZmlsZXNUb1NhdmUsXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSB1cGxvYWQgZWRpdHMgZnJvbSByZXEgb3IgaW5jb21pbmcgZGF0YVxuICovXG5mdW5jdGlvbiBwYXJzZVVwbG9hZEVkaXRzRnJvbVJlcU9ySW5jb21pbmdEYXRhKGFyZ3M6IHtcbiAgZGF0YTogdW5rbm93blxuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3JpZ2luYWxEb2M6IHVua25vd25cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxufSk6IFVwbG9hZEVkaXRzIHtcbiAgY29uc3QgeyBkYXRhLCBvcGVyYXRpb24sIG9yaWdpbmFsRG9jLCByZXEgfSA9IGFyZ3NcblxuICAvLyBHZXQgaW50ZW5kZWQgZm9jYWwgcG9pbnQgY2hhbmdlIGZyb20gcXVlcnkgc3RyaW5nIG9yIGluY29taW5nIGRhdGFcbiAgY29uc3QgdXBsb2FkRWRpdHMgPVxuICAgIHJlcS5xdWVyeT8udXBsb2FkRWRpdHMgJiYgdHlwZW9mIHJlcS5xdWVyeS51cGxvYWRFZGl0cyA9PT0gJ29iamVjdCdcbiAgICAgID8gKHJlcS5xdWVyeS51cGxvYWRFZGl0cyBhcyBVcGxvYWRFZGl0cylcbiAgICAgIDoge31cblxuICBpZiAodXBsb2FkRWRpdHMuZm9jYWxQb2ludCkgcmV0dXJuIHVwbG9hZEVkaXRzXG5cbiAgY29uc3QgaW5jb21pbmdEYXRhID0gZGF0YSBhcyBGaWxlRGF0YVxuICBjb25zdCBvcmlnRG9jID0gb3JpZ2luYWxEb2MgYXMgRmlsZURhdGFcblxuICAvLyBJZiBubyBjaGFuZ2UgaW4gZm9jYWwgcG9pbnQsIHJldHVybiB1bmRlZmluZWQuXG4gIC8vIFRoaXMgcHJldmVudHMgYSByZWZvY2FsIG9wZXJhdGlvbiB0cmlnZ2VyZWQgZnJvbSBhZG1pbiwgYmVjYXVzZSBpdCBhbHdheXMgc2VuZHMgdGhlIGZvY2FsIHBvaW50LlxuICBpZiAob3JpZ0RvYyAmJiBpbmNvbWluZ0RhdGEuZm9jYWxYID09PSBvcmlnRG9jLmZvY2FsWCAmJiBpbmNvbWluZ0RhdGEuZm9jYWxZID09PSBvcmlnRG9jLmZvY2FsWSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGlmIChpbmNvbWluZ0RhdGEuZm9jYWxYICYmIGluY29taW5nRGF0YS5mb2NhbFkpIHtcbiAgICB1cGxvYWRFZGl0cy5mb2NhbFBvaW50ID0ge1xuICAgICAgeDogaW5jb21pbmdEYXRhLmZvY2FsWCxcbiAgICAgIHk6IGluY29taW5nRGF0YS5mb2NhbFksXG4gICAgfVxuICAgIHJldHVybiB1cGxvYWRFZGl0c1xuICB9XG5cbiAgLy8gSWYgbm8gZm9jYWwgcG9pbnQgaXMgc2V0LCBkZWZhdWx0IHRvIGNlbnRlclxuICBpZiAob3BlcmF0aW9uID09PSAnY3JlYXRlJykge1xuICAgIHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQgPSB7XG4gICAgICB4OiA1MCxcbiAgICAgIHk6IDUwLFxuICAgIH1cbiAgfVxuICByZXR1cm4gdXBsb2FkRWRpdHNcbn1cbiJdLCJuYW1lcyI6WyJnZW5lcmF0ZUZpbGVEYXRhIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsImNvbGxlY3Rpb25Db25maWciLCJkYXRhIiwib3BlcmF0aW9uIiwib3JpZ2luYWxEb2MiLCJvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzIiwicmVxIiwidGhyb3dPbk1pc3NpbmdGaWxlIiwidXBsb2FkIiwiZmlsZXMiLCJmaWxlIiwidW5kZWZpbmVkIiwidXBsb2FkRWRpdHMiLCJwYXJzZVVwbG9hZEVkaXRzRnJvbVJlcU9ySW5jb21pbmdEYXRhIiwiZGlzYWJsZUxvY2FsU3RvcmFnZSIsImZvY2FsUG9pbnQiLCJmb2NhbFBvaW50RW5hYmxlZCIsImZvcm1hdE9wdGlvbnMiLCJpbWFnZVNpemVzIiwicmVzaXplT3B0aW9ucyIsInN0YXRpY0RpciIsInRyaW1PcHRpb25zIiwic3RhdGljUGF0aCIsImluZGV4T2YiLCJwYXRoIiwicmVzb2x2ZSIsInBhdGhzIiwiY29uZmlnRGlyIiwiZmlsZW5hbWUiLCJ1cmwiLCJzdGFydHNXaXRoIiwiZmlsZVBhdGgiLCJyZXNwb25zZSIsImdldEZpbGVCeVBhdGgiLCJnZXRFeHRlcm5hbEZpbGUiLCJ1cGxvYWRDb25maWciLCJlcnIiLCJFcnJvciIsIkZpbGVSZXRyaWV2YWxFcnJvciIsInQiLCJtZXNzYWdlIiwiTWlzc2luZ0ZpbGUiLCJta2RpcnAiLCJzeW5jIiwibmV3RGF0YSIsImZpbGVzVG9TYXZlIiwiZmlsZURhdGEiLCJmaWxlSXNBbmltYXRlZFR5cGUiLCJpbmNsdWRlcyIsIm1pbWV0eXBlIiwiY3JvcERhdGEiLCJjcm9wIiwiZmlsZVN1cHBvcnRzUmVzaXplIiwiY2FuUmVzaXplSW1hZ2UiLCJmc1NhZmVOYW1lIiwic2hhcnBGaWxlIiwiZGltZW5zaW9ucyIsImZpbGVCdWZmZXIiLCJleHQiLCJtaW1lIiwiZmlsZUhhc0FkanVzdG1lbnRzIiwiQm9vbGVhbiIsInRlbXBGaWxlUGF0aCIsInNoYXJwT3B0aW9ucyIsImFuaW1hdGVkIiwic2hhcnAiLCJyb3RhdGUiLCJyZXNpemUiLCJ0b0Zvcm1hdCIsImZvcm1hdCIsIm9wdGlvbnMiLCJ0cmltIiwiaXNJbWFnZSIsImdldEltYWdlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwibWV0YWRhdGEiLCJ0b0J1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiZnJvbUJ1ZmZlciIsImluZm8iLCJmaWxlc2l6ZSIsInNpemUiLCJwYWdlcyIsImxlbmd0aCIsIm5hbWUiLCJzcGxpdCIsInBvcCIsIm1pbWVUeXBlIiwiYmFzZUZpbGVuYW1lIiwic2FuaXRpemUiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImdldFNhZmVGaWxlTmFtZSIsImNvbGxlY3Rpb25TbHVnIiwic2x1ZyIsImRlc2lyZWRGaWxlbmFtZSIsImZpbGVGb3JSZXNpemUiLCJjcm9wcGVkSW1hZ2UiLCJjcm9wSW1hZ2UiLCJoZWlnaHRJblBpeGVscyIsIndpZHRoSW5QaXhlbHMiLCJwdXNoIiwiYnVmZmVyIiwiZnMiLCJwcm9taXNlcyIsIndyaXRlRmlsZSIsIkFycmF5IiwiaXNBcnJheSIsInBheWxvYWRVcGxvYWRTaXplcyIsInNpemVEYXRhIiwic2l6ZXNUb1NhdmUiLCJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwic2F2ZWRGaWxlbmFtZSIsInNpemVzIiwiZm9jYWxYIiwieCIsImZvY2FsWSIsInkiLCJwYXlsb2FkIiwibG9nZ2VyIiwiZXJyb3IiLCJtc2ciLCJGaWxlVXBsb2FkRXJyb3IiLCJhcmdzIiwicXVlcnkiLCJpbmNvbWluZ0RhdGEiLCJvcmlnRG9jIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7OzsrQkEwQ2FBOzs7ZUFBQUE7OzswQkF2Q2M7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
@@ -1 +1 @@
1
- {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAQtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EAEV,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAA;AAKhB,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AA6KD;;;;;;;;;;;;;GAaG;AACH,wBAA8B,4BAA4B,CAAC,EACzD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,UAAU,EACV,WAAW,GACZ,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+JxC"}
1
+ {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAQtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EAEV,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAA;AAKhB,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAmND;;;;;;;;;;;;;GAaG;AACH,wBAA8B,4BAA4B,CAAC,EACzD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,UAAU,EACV,WAAW,GACZ,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2LxC"}