payload 2.16.1 → 2.18.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.
Files changed (88) hide show
  1. package/components/index.js +4 -4
  2. package/components/styles.css +1 -1
  3. package/dist/admin/Root.d.ts.map +1 -1
  4. package/dist/admin/Root.js +3 -2
  5. package/dist/admin/components/elements/DocumentControls/index.d.ts.map +1 -1
  6. package/dist/admin/components/elements/DocumentControls/index.js +8 -2
  7. package/dist/admin/components/elements/EditUpload/index.d.ts.map +1 -1
  8. package/dist/admin/components/elements/EditUpload/index.js +16 -18
  9. package/dist/admin/components/elements/Loading/index.d.ts.map +1 -1
  10. package/dist/admin/components/elements/Loading/index.js +7 -7
  11. package/dist/admin/components/elements/ReactSelect/index.d.ts.map +1 -1
  12. package/dist/admin/components/elements/ReactSelect/index.js +5 -2
  13. package/dist/admin/components/elements/StepNav/index.scss +1 -2
  14. package/dist/admin/components/forms/field-types/Checkbox/index.d.ts.map +1 -1
  15. package/dist/admin/components/forms/field-types/Checkbox/index.js +4 -2
  16. package/dist/admin/components/forms/field-types/RadioGroup/RadioInput/index.d.ts.map +1 -1
  17. package/dist/admin/components/forms/field-types/RadioGroup/RadioInput/index.js +4 -2
  18. package/dist/admin/components/utilities/LanguageWrap/index.d.ts +6 -0
  19. package/dist/admin/components/utilities/LanguageWrap/index.d.ts.map +1 -0
  20. package/dist/admin/components/utilities/LanguageWrap/index.js +32 -0
  21. package/dist/admin/components/views/API/index.js +11 -8
  22. package/dist/admin/components/views/collections/List/Cell/field-types/Checkbox/index.d.ts.map +1 -1
  23. package/dist/admin/components/views/collections/List/Cell/field-types/Checkbox/index.js +8 -3
  24. package/dist/admin/scss/app.scss +7 -0
  25. package/dist/collections/operations/create.d.ts.map +1 -1
  26. package/dist/collections/operations/create.js +2 -1
  27. package/dist/collections/operations/update.d.ts.map +1 -1
  28. package/dist/collections/operations/update.js +2 -1
  29. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  30. package/dist/collections/operations/updateByID.js +3 -1
  31. package/dist/exports/types.d.ts +1 -1
  32. package/dist/exports/types.d.ts.map +1 -1
  33. package/dist/exports/types.js +1 -1
  34. package/dist/fields/config/types.d.ts +0 -4
  35. package/dist/fields/config/types.d.ts.map +1 -1
  36. package/dist/fields/config/types.js +1 -1
  37. package/dist/fields/validations.d.ts.map +1 -1
  38. package/dist/fields/validations.js +12 -4
  39. package/dist/translations/ar.json +5 -1
  40. package/dist/translations/az.json +5 -1
  41. package/dist/translations/bg.json +5 -1
  42. package/dist/translations/cs.json +5 -1
  43. package/dist/translations/de.json +5 -1
  44. package/dist/translations/en.json +4 -0
  45. package/dist/translations/es.json +5 -1
  46. package/dist/translations/fa.json +5 -1
  47. package/dist/translations/fr.json +5 -1
  48. package/dist/translations/hr.json +5 -1
  49. package/dist/translations/hu.json +5 -1
  50. package/dist/translations/index.d.ts +125 -4
  51. package/dist/translations/index.d.ts.map +1 -1
  52. package/dist/translations/it.json +5 -1
  53. package/dist/translations/ja.json +5 -1
  54. package/dist/translations/ko.json +10 -5
  55. package/dist/translations/my.json +5 -1
  56. package/dist/translations/nb.json +5 -1
  57. package/dist/translations/nl.json +5 -1
  58. package/dist/translations/pl.json +5 -1
  59. package/dist/translations/pt.json +5 -1
  60. package/dist/translations/ro.json +5 -1
  61. package/dist/translations/rs-latin.json +5 -1
  62. package/dist/translations/rs.json +5 -1
  63. package/dist/translations/ru.json +5 -1
  64. package/dist/translations/sv.json +5 -1
  65. package/dist/translations/th.json +5 -1
  66. package/dist/translations/tr.json +5 -1
  67. package/dist/translations/ua.json +5 -1
  68. package/dist/translations/vi.json +5 -1
  69. package/dist/translations/zh-tw.json +4 -0
  70. package/dist/translations/zh.json +5 -1
  71. package/dist/uploads/cropImage.d.ts +1 -1
  72. package/dist/uploads/cropImage.d.ts.map +1 -1
  73. package/dist/uploads/cropImage.js +2 -1
  74. package/dist/uploads/generateFileData.d.ts +3 -1
  75. package/dist/uploads/generateFileData.d.ts.map +1 -1
  76. package/dist/uploads/generateFileData.js +47 -6
  77. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  78. package/dist/uploads/getBaseFields.js +31 -16
  79. package/dist/uploads/getExternalFile.js +2 -2
  80. package/dist/uploads/imageResizer.d.ts +5 -8
  81. package/dist/uploads/imageResizer.d.ts.map +1 -1
  82. package/dist/uploads/imageResizer.js +35 -20
  83. package/dist/uploads/types.d.ts +14 -0
  84. package/dist/uploads/types.d.ts.map +1 -1
  85. package/dist/uploads/types.js +2 -2
  86. package/package.json +1 -1
  87. package/types.d.ts +1 -1
  88. package/types.js +1 -1
@@ -6,6 +6,7 @@
6
6
  "alreadyActivated": "Hesap zaten etkinleştirildi",
7
7
  "alreadyLoggedIn": "Hesaba zaten giriş yapıldı",
8
8
  "apiKey": "API Anahtarı",
9
+ "authenticated": "Doğrulandı",
9
10
  "backToLogin": "Giriş ekranına geri dön",
10
11
  "beginCreateFirstUser": "Başlamak için ilk kullanıcı hesabını oluşturun.",
11
12
  "changePassword": "Parolayı Değiştir",
@@ -177,6 +178,7 @@
177
178
  "deletedCountSuccessfully": "{{count}} {{label}} başarıyla silindi.",
178
179
  "deletedSuccessfully": "Başarıyla silindi.",
179
180
  "deleting": "Siliniyor...",
181
+ "depth": "Derinlik",
180
182
  "descending": "Azalan",
181
183
  "deselectAllRows": "Tüm satırların seçimini kaldır",
182
184
  "document": "Belge",
@@ -195,6 +197,7 @@
195
197
  "error": "Hata",
196
198
  "errors": "Hatalar",
197
199
  "fallbackToDefaultLocale": "Varsayılan yerel ayara geri dönme",
200
+ "false": "Yanlış",
198
201
  "filter": "Filtrele",
199
202
  "filterWhere": "{{label}} filtrele:",
200
203
  "filters": "Filtreler",
@@ -250,6 +253,7 @@
250
253
  "successfullyDuplicated": "{{label}} başarıyla kopyalandı.",
251
254
  "thisLanguage": "Türkçe",
252
255
  "titleDeleted": "{{label}} {{title}} başarıyla silindi.",
256
+ "true": "Doğru",
253
257
  "unauthorized": "Yetkisiz",
254
258
  "unsavedChangesDuplicate": "Kaydedilmemiş değişiklikler var. Çoğaltma işlemine devam etmek istiyor musunuz?",
255
259
  "untitled": "Başlıksız",
@@ -373,4 +377,4 @@
373
377
  "viewingVersions": "{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor",
374
378
  "viewingVersionsGlobal": "`Global {{entityLabel}} için sürümler gösteriliyor"
375
379
  }
376
- }
380
+ }
@@ -6,6 +6,7 @@
6
6
  "alreadyActivated": "Вже активований",
7
7
  "alreadyLoggedIn": "Вже увійшли в систему",
8
8
  "apiKey": "API ключ",
9
+ "authenticated": "Автентифікований",
9
10
  "backToLogin": "Повернутися до входу",
10
11
  "beginCreateFirstUser": "Щоб розпочати - створість першого користувача",
11
12
  "changePassword": "Змінити пароль",
@@ -177,6 +178,7 @@
177
178
  "deletedCountSuccessfully": "Успішно видалено {{count}} {{label}}.",
178
179
  "deletedSuccessfully": "Успішно видалено.",
179
180
  "deleting": "Видалення...",
181
+ "depth": "Глибина",
180
182
  "descending": "В порядку спадання",
181
183
  "deselectAllRows": "Скасувати вибір всіх рядків",
182
184
  "document": "Документ",
@@ -195,6 +197,7 @@
195
197
  "error": "Помилка",
196
198
  "errors": "Помилки",
197
199
  "fallbackToDefaultLocale": "Відновлення локалі за замовчуванням",
200
+ "false": "Неправда",
198
201
  "filter": "Фільтрувати",
199
202
  "filterWhere": "Де фільтрувати {{label}}",
200
203
  "filters": "Фільтри",
@@ -250,6 +253,7 @@
250
253
  "successfullyDuplicated": "{{label}} успішно продубльовано.",
251
254
  "thisLanguage": "Українська",
252
255
  "titleDeleted": "{{label}} \"{{title}}\" успішно видалено.",
256
+ "true": "Правда",
253
257
  "unauthorized": "Немає доступу",
254
258
  "unsavedChangesDuplicate": "Ви маєте не збережені зміни. Чи бажаєте ви продовжити дублювання?",
255
259
  "untitled": "Без назви",
@@ -373,4 +377,4 @@
373
377
  "viewingVersions": "Огляд версій для {{entityLabel}} {{documentTitle}}",
374
378
  "viewingVersionsGlobal": "Огляд версій для глобальної колекції {{entityLabel}}"
375
379
  }
376
- }
380
+ }
@@ -6,6 +6,7 @@
6
6
  "alreadyActivated": "Đã được kích hoạt",
7
7
  "alreadyLoggedIn": "Đã đăng nhập",
8
8
  "apiKey": "API Key",
9
+ "authenticated": "Đã xác thực",
9
10
  "backToLogin": "Quay lại đăng nhập.",
10
11
  "beginCreateFirstUser": "Để bắt đầu, hãy tạo người dùng đầu tiên.",
11
12
  "changePassword": "Đổi mật khẩu",
@@ -177,6 +178,7 @@
177
178
  "deletedCountSuccessfully": "Đã xóa thành công {{count}} {{label}}.",
178
179
  "deletedSuccessfully": "Đã xoá thành công.",
179
180
  "deleting": "Đang xóa...",
181
+ "depth": "Độ sâu",
180
182
  "descending": "Xếp theo thứ tự giảm dần",
181
183
  "deselectAllRows": "Bỏ chọn tất cả các hàng",
182
184
  "document": "Tài liệu",
@@ -195,6 +197,7 @@
195
197
  "error": "Lỗi",
196
198
  "errors": "Lỗi",
197
199
  "fallbackToDefaultLocale": "Ngôn ngữ mặc định",
200
+ "false": "Sai",
198
201
  "filter": "Lọc",
199
202
  "filterWhere": "Lọc {{label}} với điều kiện:",
200
203
  "filters": "Bộ lọc",
@@ -250,6 +253,7 @@
250
253
  "successfullyDuplicated": "{{label}} đã được sao chép thành công.",
251
254
  "thisLanguage": "Vietnamese (Tiếng Việt)",
252
255
  "titleDeleted": "{{label}} {{title}} đã được xóa thành công.",
256
+ "true": "Thật",
253
257
  "unauthorized": "Không có quyền truy cập.",
254
258
  "unsavedChangesDuplicate": "Bạn chưa lưu các thay đổi. Bạn có muốn tiếp tục tạo bản sao?",
255
259
  "untitled": "Chưa có tiêu đề",
@@ -373,4 +377,4 @@
373
377
  "viewingVersions": "Xem những phiên bản của {{entityLabel}} {{documentTitle}}",
374
378
  "viewingVersionsGlobal": "`Xem những phiên bản toàn thể (global) của {{entityLabel}}"
375
379
  }
376
- }
380
+ }
@@ -6,6 +6,7 @@
6
6
  "alreadyActivated": "已經啟用了",
7
7
  "alreadyLoggedIn": "已經登入了",
8
8
  "apiKey": "API金鑰",
9
+ "authenticated": "經過身份驗證的",
9
10
  "backToLogin": "返回登入頁面",
10
11
  "beginCreateFirstUser": "首先,請建立您的第一個使用者。",
11
12
  "changePassword": "更改密碼",
@@ -177,6 +178,7 @@
177
178
  "deletedCountSuccessfully": "已成功刪除 {{count}} 個 {{label}}。",
178
179
  "deletedSuccessfully": "已成功刪除。",
179
180
  "deleting": "刪除中...",
181
+ "depth": "深度",
180
182
  "descending": "降冪",
181
183
  "deselectAllRows": "取消選擇全部",
182
184
  "document": "文件",
@@ -195,6 +197,7 @@
195
197
  "error": "錯誤",
196
198
  "errors": "錯誤",
197
199
  "fallbackToDefaultLocale": "回到預設的語言",
200
+ "false": "假的",
198
201
  "filter": "過濾器",
199
202
  "filterWhere": "過濾{{label}}",
200
203
  "filters": "過濾器",
@@ -250,6 +253,7 @@
250
253
  "successfullyDuplicated": "成功複製{{label}}",
251
254
  "thisLanguage": "中文 (繁體)",
252
255
  "titleDeleted": "{{label}} \"{{title}}\"已被成功刪除。",
256
+ "true": "真實",
253
257
  "unauthorized": "未經授權",
254
258
  "unsavedChangesDuplicate": "您有還沒儲存的修改,確定要繼續複製嗎?",
255
259
  "untitled": "無標題",
@@ -6,6 +6,7 @@
6
6
  "alreadyActivated": "已经激活了",
7
7
  "alreadyLoggedIn": "已经登入了",
8
8
  "apiKey": "API密钥",
9
+ "authenticated": "已验证",
9
10
  "backToLogin": "回到登录页面",
10
11
  "beginCreateFirstUser": "首先,请创建您的第一个用户。",
11
12
  "changePassword": "更改密码",
@@ -177,6 +178,7 @@
177
178
  "deletedCountSuccessfully": "已成功删除 {{count}} {{label}}。",
178
179
  "deletedSuccessfully": "已成功删除。",
179
180
  "deleting": "删除中...",
181
+ "depth": "深度",
180
182
  "descending": "降序",
181
183
  "deselectAllRows": "取消选择所有行",
182
184
  "document": "文件",
@@ -195,6 +197,7 @@
195
197
  "error": "错误",
196
198
  "errors": "错误",
197
199
  "fallbackToDefaultLocale": "回退到默认语言环境",
200
+ "false": "假的",
198
201
  "filter": "过滤器",
199
202
  "filterWhere": "过滤{{label}}",
200
203
  "filters": "过滤器",
@@ -250,6 +253,7 @@
250
253
  "successfullyDuplicated": "成功复制{{label}}",
251
254
  "thisLanguage": "中文 (简体)",
252
255
  "titleDeleted": "{{label}} \"{{title}}\"已被成功删除。",
256
+ "true": "真实",
253
257
  "unauthorized": "未经授权",
254
258
  "unsavedChangesDuplicate": "您有未保存的修改。您确定要继续重复吗?",
255
259
  "untitled": "无标题",
@@ -373,4 +377,4 @@
373
377
  "viewingVersions": "正在查看{{entityLabel}} {{documentTitle}}的版本",
374
378
  "viewingVersionsGlobal": "正在查看全局{{entityLabel}}的版本"
375
379
  }
376
- }
380
+ }
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import sharp from 'sharp';
3
- export declare const percentToPixel: (value: any, dimension: any) => number;
3
+ export declare const percentToPixel: (value: string, dimension: number) => number;
4
4
  export default function cropImage({ cropData, dimensions, file }: {
5
5
  cropData: any;
6
6
  dimensions: any;
@@ -1 +1 @@
1
- {"version":3,"file":"cropImage.d.ts","sourceRoot":"","sources":["../../src/uploads/cropImage.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,cAAc,wCAE1B,CAAA;AAED,wBAA8B,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;;;;CAAA;;;GAoBrE"}
1
+ {"version":3,"file":"cropImage.d.ts","sourceRoot":"","sources":["../../src/uploads/cropImage.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,cAAc,UAAW,MAAM,aAAa,MAAM,KAAG,MAGjE,CAAA;AAED,wBAA8B,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;;;;CAAA;;;GAoBrE"}
@@ -23,6 +23,7 @@ function _interop_require_default(obj) {
23
23
  };
24
24
  }
25
25
  const percentToPixel = (value, dimension)=>{
26
+ if (!value) return 0;
26
27
  return Math.floor(parseFloat(value) / 100 * dimension);
27
28
  };
28
29
  async function cropImage({ cropData, dimensions, file }) {
@@ -44,4 +45,4 @@ async function cropImage({ cropData, dimensions, file }) {
44
45
  }
45
46
  }
46
47
 
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2Nyb3BJbWFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXG5cbmV4cG9ydCBjb25zdCBwZXJjZW50VG9QaXhlbCA9ICh2YWx1ZSwgZGltZW5zaW9uKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKChwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCkgKiBkaW1lbnNpb24pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGNyb3BJbWFnZSh7IGNyb3BEYXRhLCBkaW1lbnNpb25zLCBmaWxlIH0pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGgsIHgsIHkgfSA9IGNyb3BEYXRhXG5cbiAgICBjb25zdCBmb3JtYXR0ZWRDcm9wRGF0YSA9IHtcbiAgICAgIGhlaWdodDogcGVyY2VudFRvUGl4ZWwoaGVpZ2h0LCBkaW1lbnNpb25zLmhlaWdodCksXG4gICAgICBsZWZ0OiBwZXJjZW50VG9QaXhlbCh4LCBkaW1lbnNpb25zLndpZHRoKSxcbiAgICAgIHRvcDogcGVyY2VudFRvUGl4ZWwoeSwgZGltZW5zaW9ucy5oZWlnaHQpLFxuICAgICAgd2lkdGg6IHBlcmNlbnRUb1BpeGVsKHdpZHRoLCBkaW1lbnNpb25zLndpZHRoKSxcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gc2hhcnAoZmlsZS50ZW1wRmlsZVBhdGggfHwgZmlsZS5kYXRhKS5leHRyYWN0KGZvcm1hdHRlZENyb3BEYXRhKVxuXG4gICAgcmV0dXJuIGF3YWl0IGNyb3BwZWQudG9CdWZmZXIoe1xuICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFcnJvciBjcm9wcGluZyBpbWFnZTpgLCBlcnJvcilcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iXSwibmFtZXMiOlsiY3JvcEltYWdlIiwicGVyY2VudFRvUGl4ZWwiLCJ2YWx1ZSIsImRpbWVuc2lvbiIsIk1hdGgiLCJmbG9vciIsInBhcnNlRmxvYXQiLCJjcm9wRGF0YSIsImRpbWVuc2lvbnMiLCJmaWxlIiwiaGVpZ2h0Iiwid2lkdGgiLCJ4IiwieSIsImZvcm1hdHRlZENyb3BEYXRhIiwibGVmdCIsInRvcCIsImNyb3BwZWQiLCJzaGFycCIsInRlbXBGaWxlUGF0aCIsImRhdGEiLCJleHRyYWN0IiwidG9CdWZmZXIiLCJyZXNvbHZlV2l0aE9iamVjdCIsImVycm9yIiwiY29uc29sZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFNQSxPQW9CQztlQXBCNkJBOztJQUpqQkMsY0FBYztlQUFkQTs7OzhEQUZLOzs7Ozs7QUFFWCxNQUFNQSxpQkFBaUIsQ0FBQ0MsT0FBT0M7SUFDcEMsT0FBT0MsS0FBS0MsS0FBSyxDQUFDLEFBQUNDLFdBQVdKLFNBQVMsTUFBT0M7QUFDaEQ7QUFFZSxlQUFlSCxVQUFVLEVBQUVPLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUU7SUFDcEUsSUFBSTtRQUNGLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFLEdBQUdOO1FBRWhDLE1BQU1PLG9CQUFvQjtZQUN4QkosUUFBUVQsZUFBZVMsUUFBUUYsV0FBV0UsTUFBTTtZQUNoREssTUFBTWQsZUFBZVcsR0FBR0osV0FBV0csS0FBSztZQUN4Q0ssS0FBS2YsZUFBZVksR0FBR0wsV0FBV0UsTUFBTTtZQUN4Q0MsT0FBT1YsZUFBZVUsT0FBT0gsV0FBV0csS0FBSztRQUMvQztRQUVBLE1BQU1NLFVBQVVDLElBQUFBLGNBQUssRUFBQ1QsS0FBS1UsWUFBWSxJQUFJVixLQUFLVyxJQUFJLEVBQUVDLE9BQU8sQ0FBQ1A7UUFFOUQsT0FBTyxNQUFNRyxRQUFRSyxRQUFRLENBQUM7WUFDNUJDLG1CQUFtQjtRQUNyQjtJQUNGLEVBQUUsT0FBT0MsT0FBTztRQUNkQyxRQUFRRCxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFQTtRQUN2QyxNQUFNQTtJQUNSO0FBQ0YifQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2Nyb3BJbWFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXG5cbmV4cG9ydCBjb25zdCBwZXJjZW50VG9QaXhlbCA9ICh2YWx1ZTogc3RyaW5nLCBkaW1lbnNpb246IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiAwXG4gIHJldHVybiBNYXRoLmZsb29yKChwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCkgKiBkaW1lbnNpb24pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGNyb3BJbWFnZSh7IGNyb3BEYXRhLCBkaW1lbnNpb25zLCBmaWxlIH0pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGgsIHgsIHkgfSA9IGNyb3BEYXRhXG5cbiAgICBjb25zdCBmb3JtYXR0ZWRDcm9wRGF0YTogc2hhcnAuUmVnaW9uID0ge1xuICAgICAgaGVpZ2h0OiBwZXJjZW50VG9QaXhlbChoZWlnaHQsIGRpbWVuc2lvbnMuaGVpZ2h0KSxcbiAgICAgIGxlZnQ6IHBlcmNlbnRUb1BpeGVsKHgsIGRpbWVuc2lvbnMud2lkdGgpLFxuICAgICAgdG9wOiBwZXJjZW50VG9QaXhlbCh5LCBkaW1lbnNpb25zLmhlaWdodCksXG4gICAgICB3aWR0aDogcGVyY2VudFRvUGl4ZWwod2lkdGgsIGRpbWVuc2lvbnMud2lkdGgpLFxuICAgIH1cblxuICAgIGNvbnN0IGNyb3BwZWQgPSBzaGFycChmaWxlLnRlbXBGaWxlUGF0aCB8fCBmaWxlLmRhdGEpLmV4dHJhY3QoZm9ybWF0dGVkQ3JvcERhdGEpXG5cbiAgICByZXR1cm4gYXdhaXQgY3JvcHBlZC50b0J1ZmZlcih7XG4gICAgICByZXNvbHZlV2l0aE9iamVjdDogdHJ1ZSxcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGNyb3BwaW5nIGltYWdlOmAsIGVycm9yKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjcm9wSW1hZ2UiLCJwZXJjZW50VG9QaXhlbCIsInZhbHVlIiwiZGltZW5zaW9uIiwiTWF0aCIsImZsb29yIiwicGFyc2VGbG9hdCIsImNyb3BEYXRhIiwiZGltZW5zaW9ucyIsImZpbGUiLCJoZWlnaHQiLCJ3aWR0aCIsIngiLCJ5IiwiZm9ybWF0dGVkQ3JvcERhdGEiLCJsZWZ0IiwidG9wIiwiY3JvcHBlZCIsInNoYXJwIiwidGVtcEZpbGVQYXRoIiwiZGF0YSIsImV4dHJhY3QiLCJ0b0J1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiZXJyb3IiLCJjb25zb2xlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQU9BLE9Bb0JDO2VBcEI2QkE7O0lBTGpCQyxjQUFjO2VBQWRBOzs7OERBRks7Ozs7OztBQUVYLE1BQU1BLGlCQUFpQixDQUFDQyxPQUFlQztJQUM1QyxJQUFJLENBQUNELE9BQU8sT0FBTztJQUNuQixPQUFPRSxLQUFLQyxLQUFLLENBQUMsQUFBQ0MsV0FBV0osU0FBUyxNQUFPQztBQUNoRDtBQUVlLGVBQWVILFVBQVUsRUFBRU8sUUFBUSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRTtJQUNwRSxJQUFJO1FBQ0YsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUUsR0FBR047UUFFaEMsTUFBTU8sb0JBQWtDO1lBQ3RDSixRQUFRVCxlQUFlUyxRQUFRRixXQUFXRSxNQUFNO1lBQ2hESyxNQUFNZCxlQUFlVyxHQUFHSixXQUFXRyxLQUFLO1lBQ3hDSyxLQUFLZixlQUFlWSxHQUFHTCxXQUFXRSxNQUFNO1lBQ3hDQyxPQUFPVixlQUFlVSxPQUFPSCxXQUFXRyxLQUFLO1FBQy9DO1FBRUEsTUFBTU0sVUFBVUMsSUFBQUEsY0FBSyxFQUFDVCxLQUFLVSxZQUFZLElBQUlWLEtBQUtXLElBQUksRUFBRUMsT0FBTyxDQUFDUDtRQUU5RCxPQUFPLE1BQU1HLFFBQVFLLFFBQVEsQ0FBQztZQUM1QkMsbUJBQW1CO1FBQ3JCO0lBQ0YsRUFBRSxPQUFPQyxPQUFPO1FBQ2RDLFFBQVFELEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQUVBO1FBQ3ZDLE1BQU1BO0lBQ1I7QUFDRiJ9
@@ -6,6 +6,8 @@ type Args<T> = {
6
6
  collection: Collection;
7
7
  config: SanitizedConfig;
8
8
  data: T;
9
+ operation: 'create' | 'update';
10
+ originalDoc?: T;
9
11
  overwriteExistingFiles?: boolean;
10
12
  req: PayloadRequest;
11
13
  throwOnMissingFile?: boolean;
@@ -14,6 +16,6 @@ type Result<T> = Promise<{
14
16
  data: T;
15
17
  files: FileToSave[];
16
18
  }>;
17
- export declare const generateFileData: <T>({ collection: { config: collectionConfig }, config, data, overwriteExistingFiles, req, throwOnMissingFile, }: Args<T>) => Result<T>;
19
+ export declare const generateFileData: <T>({ collection: { config: collectionConfig }, config, data, operation, originalDoc, overwriteExistingFiles, req, throwOnMissingFile, }: Args<T>) => Result<T>;
18
20
  export {};
19
21
  //# sourceMappingURL=generateFileData.d.ts.map
@@ -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,EAAmB,MAAM,SAAS,CAAA;AAapE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,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,yIAuO5B,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,iKAkP5B,CAAA"}
@@ -29,7 +29,7 @@ function _interop_require_default(obj) {
29
29
  default: obj
30
30
  };
31
31
  }
32
- const generateFileData = async ({ collection: { config: collectionConfig }, config, data, overwriteExistingFiles, req, throwOnMissingFile })=>{
32
+ const generateFileData = async ({ collection: { config: collectionConfig }, config, data, operation, originalDoc, overwriteExistingFiles, req, throwOnMissingFile })=>{
33
33
  if (!collectionConfig.upload) {
34
34
  return {
35
35
  data,
@@ -37,7 +37,12 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
37
37
  };
38
38
  }
39
39
  let file = req.files?.file || undefined;
40
- const { uploadEdits } = req.query || {};
40
+ const uploadEdits = parseUploadEditsFromReqOrIncomingData({
41
+ data,
42
+ operation,
43
+ originalDoc,
44
+ req
45
+ });
41
46
  const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } = collectionConfig.upload;
42
47
  let staticPath = staticDir;
43
48
  if (staticDir.indexOf('/') !== 0) {
@@ -199,7 +204,7 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
199
204
  }
200
205
  if (Array.isArray(imageSizes) && fileSupportsResize) {
201
206
  req.payloadUploadSizes = {};
202
- const { sizeData, sizesToSave } = await (0, _imageResizer.default)({
207
+ const { focalPoint, sizeData, sizesToSave } = await (0, _imageResizer.default)({
203
208
  config: collectionConfig,
204
209
  dimensions: !cropData ? dimensions : {
205
210
  ...dimensions,
@@ -210,13 +215,19 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
210
215
  mimeType: fileData.mimeType,
211
216
  req,
212
217
  savedFilename: fsSafeName || file.name,
213
- staticPath
218
+ staticPath,
219
+ uploadEdits
214
220
  });
215
221
  fileData.sizes = sizeData;
222
+ fileData.focalX = focalPoint?.x;
223
+ fileData.focalY = focalPoint?.y;
216
224
  filesToSave.push(...sizesToSave);
217
225
  }
218
226
  } catch (err) {
219
- console.error(err);
227
+ req.payload.logger.error({
228
+ err,
229
+ msg: 'Error uploading file'
230
+ });
220
231
  throw new _errors.FileUploadError(req.t);
221
232
  }
222
233
  newData = {
@@ -228,5 +239,35 @@ const generateFileData = async ({ collection: { config: collectionConfig }, conf
228
239
  files: filesToSave
229
240
  };
230
241
  };
242
+ /**
243
+ * Parse upload edits from req or incoming data
244
+ */ function parseUploadEditsFromReqOrIncomingData(args) {
245
+ const { data, operation, originalDoc, req } = args;
246
+ // Get intended focal point change from query string or incoming data
247
+ const { uploadEdits = {} } = req.query || {};
248
+ if (uploadEdits.focalPoint) return uploadEdits;
249
+ const incomingData = data;
250
+ const origDoc = originalDoc;
251
+ // If no change in focal point, return undefined.
252
+ // This prevents a refocal operation triggered from admin, because it always sends the focal point.
253
+ if (origDoc && incomingData.focalX === origDoc.focalX && incomingData.focalY === origDoc.focalY) {
254
+ return undefined;
255
+ }
256
+ if (incomingData.focalX && incomingData.focalY) {
257
+ uploadEdits.focalPoint = {
258
+ x: incomingData.focalX,
259
+ y: incomingData.focalY
260
+ };
261
+ return uploadEdits;
262
+ }
263
+ // If no focal point is set, default to center
264
+ if (operation === 'create') {
265
+ uploadEdits.focalPoint = {
266
+ x: 50,
267
+ y: 50
268
+ };
269
+ }
270
+ return uploadEdits;
271
+ }
231
272
 
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dlbmVyYXRlRmlsZURhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBVcGxvYWRlZEZpbGUgfSBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgdHlwZSB7IE91dHB1dEluZm8sIFNoYXJwLCBTaGFycE9wdGlvbnMgfSBmcm9tICdzaGFycCdcblxuaW1wb3J0IHsgZnJvbUJ1ZmZlciB9IGZyb20gJ2ZpbGUtdHlwZSdcbmltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICdzYW5pdGl6ZS1maWxlbmFtZSdcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZXhwcmVzcy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmlsZURhdGEsIEZpbGVUb1NhdmUsIFByb2JlZEltYWdlU2l6ZSB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCB7IEZpbGVVcGxvYWRFcnJvciwgTWlzc2luZ0ZpbGUgfSBmcm9tICcuLi9lcnJvcnMnXG5pbXBvcnQgRmlsZVJldHJpZXZhbEVycm9yIGZyb20gJy4uL2Vycm9ycy9GaWxlUmV0cmlldmFsRXJyb3InXG5pbXBvcnQgY2FuUmVzaXplSW1hZ2UgZnJvbSAnLi9jYW5SZXNpemVJbWFnZSdcbmltcG9ydCBjcm9wSW1hZ2UgZnJvbSAnLi9jcm9wSW1hZ2UnXG5pbXBvcnQgeyBnZXRFeHRlcm5hbEZpbGUgfSBmcm9tICcuL2dldEV4dGVybmFsRmlsZSdcbmltcG9ydCBnZXRGaWxlQnlQYXRoIGZyb20gJy4vZ2V0RmlsZUJ5UGF0aCdcbmltcG9ydCBnZXRJbWFnZVNpemUgZnJvbSAnLi9nZXRJbWFnZVNpemUnXG5pbXBvcnQgZ2V0U2FmZUZpbGVOYW1lIGZyb20gJy4vZ2V0U2FmZUZpbGVuYW1lJ1xuaW1wb3J0IHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMgZnJvbSAnLi9pbWFnZVJlc2l6ZXInXG5pbXBvcnQgaXNJbWFnZSBmcm9tICcuL2lzSW1hZ2UnXG5cbnR5cGUgQXJnczxUPiA9IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvblxuICBjb25maWc6IFNhbml0aXplZENvbmZpZ1xuICBkYXRhOiBUXG4gIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXM/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgdGhyb3dPbk1pc3NpbmdGaWxlPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdDxUPiA9IFByb21pc2U8e1xuICBkYXRhOiBUXG4gIGZpbGVzOiBGaWxlVG9TYXZlW11cbn0+XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUZpbGVEYXRhID0gYXN5bmMgPFQ+KHtcbiAgY29sbGVjdGlvbjogeyBjb25maWc6IGNvbGxlY3Rpb25Db25maWcgfSxcbiAgY29uZmlnLFxuICBkYXRhLFxuICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzLFxuICByZXEsXG4gIHRocm93T25NaXNzaW5nRmlsZSxcbn06IEFyZ3M8VD4pOiBSZXN1bHQ8VD4gPT4ge1xuICBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBmaWxlczogW10sXG4gICAgfVxuICB9XG5cbiAgbGV0IGZpbGUgPSByZXEuZmlsZXM/LmZpbGUgfHwgdW5kZWZpbmVkXG4gIGNvbnN0IHsgdXBsb2FkRWRpdHMgfSA9IHJlcS5xdWVyeSB8fCB7fVxuXG4gIGNvbnN0IHsgZGlzYWJsZUxvY2FsU3RvcmFnZSwgZm9ybWF0T3B0aW9ucywgaW1hZ2VTaXplcywgcmVzaXplT3B0aW9ucywgc3RhdGljRGlyLCB0cmltT3B0aW9ucyB9ID1cbiAgICBjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZFxuXG4gIGxldCBzdGF0aWNQYXRoID0gc3RhdGljRGlyXG4gIGlmIChzdGF0aWNEaXIuaW5kZXhPZignLycpICE9PSAwKSB7XG4gICAgc3RhdGljUGF0aCA9IHBhdGgucmVzb2x2ZShjb25maWcucGF0aHMuY29uZmlnRGlyLCBzdGF0aWNEaXIpXG4gIH1cblxuICBpZiAoIWZpbGUgJiYgdXBsb2FkRWRpdHMgJiYgZGF0YSkge1xuICAgIGNvbnN0IHsgZmlsZW5hbWUsIHVybCB9ID0gZGF0YSBhcyBGaWxlRGF0YVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh1cmwgJiYgdXJsLnN0YXJ0c1dpdGgoJy8nKSAmJiAhZGlzYWJsZUxvY2FsU3RvcmFnZSkge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGAke3N0YXRpY1BhdGh9LyR7ZmlsZW5hbWV9YFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldEZpbGVCeVBhdGgoZmlsZVBhdGgpXG4gICAgICAgIGZpbGUgPSByZXNwb25zZSBhcyBVcGxvYWRlZEZpbGVcbiAgICAgICAgb3ZlcndyaXRlRXhpc3RpbmdGaWxlcyA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUgJiYgdXJsKSB7XG4gICAgICAgIGZpbGUgPSAoYXdhaXQgZ2V0RXh0ZXJuYWxGaWxlKHtcbiAgICAgICAgICBkYXRhOiBkYXRhIGFzIEZpbGVEYXRhLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICB1cGxvYWRDb25maWc6IGNvbGxlY3Rpb25Db25maWcudXBsb2FkLFxuICAgICAgICB9KSkgYXMgVXBsb2FkZWRGaWxlXG4gICAgICAgIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXMgPSB0cnVlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVSZXRyaWV2YWxFcnJvcihyZXEudCwgZXJyLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmaWxlKSB7XG4gICAgaWYgKHRocm93T25NaXNzaW5nRmlsZSkgdGhyb3cgbmV3IE1pc3NpbmdGaWxlKHJlcS50KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBmaWxlczogW10sXG4gICAgfVxuICB9XG5cbiAgaWYgKCFkaXNhYmxlTG9jYWxTdG9yYWdlKSB7XG4gICAgbWtkaXJwLnN5bmMoc3RhdGljUGF0aClcbiAgfVxuXG4gIGxldCBuZXdEYXRhID0gZGF0YVxuICBjb25zdCBmaWxlc1RvU2F2ZTogRmlsZVRvU2F2ZVtdID0gW11cbiAgY29uc3QgZmlsZURhdGE6IFBhcnRpYWw8RmlsZURhdGE+ID0ge31cbiAgY29uc3QgZmlsZUlzQW5pbWF0ZWQgPSBmaWxlLm1pbWV0eXBlID09PSAnaW1hZ2UvZ2lmJyB8fCBmaWxlLm1pbWV0eXBlID09PSAnaW1hZ2Uvd2VicCdcbiAgY29uc3QgY3JvcERhdGEgPVxuICAgIHR5cGVvZiB1cGxvYWRFZGl0cyA9PT0gJ29iamVjdCcgJiYgJ2Nyb3AnIGluIHVwbG9hZEVkaXRzID8gdXBsb2FkRWRpdHMuY3JvcCA6IHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZVN1cHBvcnRzUmVzaXplID0gY2FuUmVzaXplSW1hZ2UoZmlsZS5taW1ldHlwZSlcbiAgICBsZXQgZnNTYWZlTmFtZTogc3RyaW5nXG4gICAgbGV0IHNoYXJwRmlsZTogU2hhcnAgfCB1bmRlZmluZWRcbiAgICBsZXQgZGltZW5zaW9uczogUHJvYmVkSW1hZ2VTaXplIHwgdW5kZWZpbmVkXG4gICAgbGV0IGZpbGVCdWZmZXI6IHsgZGF0YTogQnVmZmVyOyBpbmZvOiBPdXRwdXRJbmZvIH1cbiAgICBsZXQgZXh0XG4gICAgbGV0IG1pbWU6IHN0cmluZ1xuICAgIGNvbnN0IGZpbGVIYXNBZGp1c3RtZW50cyA9XG4gICAgICBmaWxlU3VwcG9ydHNSZXNpemUgJiZcbiAgICAgIEJvb2xlYW4ocmVzaXplT3B0aW9ucyB8fCBmb3JtYXRPcHRpb25zIHx8IHRyaW1PcHRpb25zIHx8IGZpbGUudGVtcEZpbGVQYXRoKVxuXG4gICAgY29uc3Qgc2hhcnBPcHRpb25zOiBTaGFycE9wdGlvbnMgPSB7fVxuXG4gICAgaWYgKGZpbGVJc0FuaW1hdGVkKSBzaGFycE9wdGlvbnMuYW5pbWF0ZWQgPSB0cnVlXG5cbiAgICBpZiAoZmlsZUhhc0FkanVzdG1lbnRzKSB7XG4gICAgICBpZiAoZmlsZS50ZW1wRmlsZVBhdGgpIHtcbiAgICAgICAgc2hhcnBGaWxlID0gc2hhcnAoZmlsZS50ZW1wRmlsZVBhdGgsIHNoYXJwT3B0aW9ucykucm90YXRlKCkgLy8gcGFzcyByb3RhdGUoKSB0byBhdXRvLXJvdGF0ZSBiYXNlZCBvbiBFWElGIGRhdGEuIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC8zMDgxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaGFycEZpbGUgPSBzaGFycChmaWxlLmRhdGEsIHNoYXJwT3B0aW9ucykucm90YXRlKCkgLy8gcGFzcyByb3RhdGUoKSB0byBhdXRvLXJvdGF0ZSBiYXNlZCBvbiBFWElGIGRhdGEuIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC8zMDgxXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNpemVPcHRpb25zKSB7XG4gICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwRmlsZS5yZXNpemUocmVzaXplT3B0aW9ucylcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwRmlsZS50b0Zvcm1hdChmb3JtYXRPcHRpb25zLmZvcm1hdCwgZm9ybWF0T3B0aW9ucy5vcHRpb25zKVxuICAgICAgfVxuICAgICAgaWYgKHRyaW1PcHRpb25zKSB7XG4gICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwRmlsZS50cmltKHRyaW1PcHRpb25zKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWxlU3VwcG9ydHNSZXNpemUgfHwgaXNJbWFnZShmaWxlLm1pbWV0eXBlKSkge1xuICAgICAgZGltZW5zaW9ucyA9IGF3YWl0IGdldEltYWdlU2l6ZShmaWxlKVxuICAgICAgZmlsZURhdGEud2lkdGggPSBkaW1lbnNpb25zLndpZHRoXG4gICAgICBmaWxlRGF0YS5oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodFxuICAgIH1cblxuICAgIGlmIChzaGFycEZpbGUpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnBGaWxlLm1ldGFkYXRhKClcbiAgICAgIGZpbGVCdWZmZXIgPSBhd2FpdCBzaGFycEZpbGUudG9CdWZmZXIoeyByZXNvbHZlV2l0aE9iamVjdDogdHJ1ZSB9KVxuICAgICAgOyh7IGV4dCwgbWltZSB9ID0gYXdhaXQgZnJvbUJ1ZmZlcihmaWxlQnVmZmVyLmRhdGEpKSAvLyBUaGlzIGlzIGdldHRpbmcgYW4gaW5jb3JyZWN0IGdpZiBoZWlnaHQgYmFjay5cbiAgICAgIGZpbGVEYXRhLndpZHRoID0gZmlsZUJ1ZmZlci5pbmZvLndpZHRoXG4gICAgICBmaWxlRGF0YS5oZWlnaHQgPSBmaWxlQnVmZmVyLmluZm8uaGVpZ2h0XG4gICAgICBmaWxlRGF0YS5maWxlc2l6ZSA9IGZpbGVCdWZmZXIuaW5mby5zaXplXG5cbiAgICAgIC8vIEFuaW1hdGVkIEdJRnMgKyBXZWJQIGFnZ3JlZ2F0ZSB0aGUgaGVpZ2h0IGZyb20gZXZlcnkgZnJhbWUsIHNvIHdlIG5lZWQgdG8gdXNlIGRpdmlkZSBieSBudW1iZXIgb2YgcGFnZXNcbiAgICAgIGlmIChtZXRhZGF0YS5wYWdlcykge1xuICAgICAgICBmaWxlRGF0YS5oZWlnaHQgPSBmaWxlQnVmZmVyLmluZm8uaGVpZ2h0IC8gbWV0YWRhdGEucGFnZXNcbiAgICAgICAgZmlsZURhdGEuZmlsZXNpemUgPSBmaWxlQnVmZmVyLmRhdGEubGVuZ3RoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbWUgPSBmaWxlLm1pbWV0eXBlXG4gICAgICBmaWxlRGF0YS5maWxlc2l6ZSA9IGZpbGUuc2l6ZVxuXG4gICAgICBpZiAoZmlsZS5uYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXh0ID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dCA9ICcnXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWR1c3QgU1ZHIG1pbWUgdHlwZS4gZnJvbUJ1ZmZlciBtb2RpZmllcyBpdC5cbiAgICBpZiAobWltZSA9PT0gJ2FwcGxpY2F0aW9uL3htbCcgJiYgZXh0ID09PSAnc3ZnJykgbWltZSA9ICdpbWFnZS9zdmcreG1sJ1xuICAgIGZpbGVEYXRhLm1pbWVUeXBlID0gbWltZVxuXG4gICAgY29uc3QgYmFzZUZpbGVuYW1lID0gc2FuaXRpemUoZmlsZS5uYW1lLnN1YnN0cmluZygwLCBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKSkgfHwgZmlsZS5uYW1lKVxuICAgIGZzU2FmZU5hbWUgPSBgJHtiYXNlRmlsZW5hbWV9JHtleHQgPyBgLiR7ZXh0fWAgOiAnJ31gXG5cbiAgICBpZiAoIW92ZXJ3cml0ZUV4aXN0aW5nRmlsZXMpIHtcbiAgICAgIGZzU2FmZU5hbWUgPSBhd2FpdCBnZXRTYWZlRmlsZU5hbWUoe1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZzogY29sbGVjdGlvbkNvbmZpZy5zbHVnLFxuICAgICAgICBkZXNpcmVkRmlsZW5hbWU6IGZzU2FmZU5hbWUsXG4gICAgICAgIHJlcSxcbiAgICAgICAgc3RhdGljUGF0aCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZmlsZURhdGEuZmlsZW5hbWUgPSBmc1NhZmVOYW1lXG4gICAgbGV0IGZpbGVGb3JSZXNpemUgPSBmaWxlXG5cbiAgICBpZiAoY3JvcERhdGEpIHtcbiAgICAgIGNvbnN0IHsgZGF0YTogY3JvcHBlZEltYWdlLCBpbmZvIH0gPSBhd2FpdCBjcm9wSW1hZ2UoeyBjcm9wRGF0YSwgZGltZW5zaW9ucywgZmlsZSB9KVxuXG4gICAgICBmaWxlc1RvU2F2ZS5wdXNoKHtcbiAgICAgICAgYnVmZmVyOiBjcm9wcGVkSW1hZ2UsXG4gICAgICAgIHBhdGg6IGAke3N0YXRpY1BhdGh9LyR7ZnNTYWZlTmFtZX1gLFxuICAgICAgfSlcblxuICAgICAgZmlsZUZvclJlc2l6ZSA9IHtcbiAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgZGF0YTogY3JvcHBlZEltYWdlLFxuICAgICAgICBzaXplOiBpbmZvLnNpemUsXG4gICAgICB9XG4gICAgICBmaWxlRGF0YS53aWR0aCA9IGluZm8ud2lkdGhcbiAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGluZm8uaGVpZ2h0XG4gICAgICBmaWxlRGF0YS5maWxlc2l6ZSA9IGluZm8uc2l6ZVxuXG4gICAgICBpZiAoZmlsZS50ZW1wRmlsZVBhdGgpIHtcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKGZpbGUudGVtcEZpbGVQYXRoLCBjcm9wcGVkSW1hZ2UpIC8vIHdyaXRlIGZpbGVCdWZmZXIgdG8gdGhlIHRlbXAgcGF0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLmZpbGVzLmZpbGUgPSBmaWxlRm9yUmVzaXplXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVzVG9TYXZlLnB1c2goe1xuICAgICAgICBidWZmZXI6IGZpbGVCdWZmZXI/LmRhdGEgfHwgZmlsZS5kYXRhLFxuICAgICAgICBwYXRoOiBgJHtzdGF0aWNQYXRofS8ke2ZzU2FmZU5hbWV9YCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElmIHVzaW5nIHRlbXAgZmlsZXMgYW5kIHRoZSBpbWFnZSBpcyBiZWluZyByZXNpemVkLCB3cml0ZSB0aGUgZmlsZSB0byB0aGUgdGVtcCBwYXRoXG4gICAgICBpZiAoZmlsZUJ1ZmZlcj8uZGF0YSB8fCBmaWxlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZmlsZS50ZW1wRmlsZVBhdGgpIHtcbiAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZS50ZW1wRmlsZVBhdGgsIGZpbGVCdWZmZXI/LmRhdGEgfHwgZmlsZS5kYXRhKSAvLyB3cml0ZSBmaWxlQnVmZmVyIHRvIHRoZSB0ZW1wIHBhdGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3NpZ24gdGhlIF9wb3NzaWJseSBtb2RpZmllZF8gZmlsZSB0byB0aGUgcmVxdWVzdCBvYmplY3RcbiAgICAgICAgICByZXEuZmlsZXMuZmlsZSA9IHtcbiAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICBkYXRhOiBmaWxlQnVmZmVyPy5kYXRhIHx8IGZpbGUuZGF0YSxcbiAgICAgICAgICAgIHNpemU6IGZpbGVCdWZmZXI/LmluZm8uc2l6ZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZVNpemVzKSAmJiBmaWxlU3VwcG9ydHNSZXNpemUpIHtcbiAgICAgIHJlcS5wYXlsb2FkVXBsb2FkU2l6ZXMgPSB7fVxuICAgICAgY29uc3QgeyBzaXplRGF0YSwgc2l6ZXNUb1NhdmUgfSA9IGF3YWl0IHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICAgICAgICBjb25maWc6IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIGRpbWVuc2lvbnM6ICFjcm9wRGF0YVxuICAgICAgICAgID8gZGltZW5zaW9uc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5kaW1lbnNpb25zLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGZpbGVEYXRhLmhlaWdodCxcbiAgICAgICAgICAgICAgd2lkdGg6IGZpbGVEYXRhLndpZHRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgZmlsZTogZmlsZUZvclJlc2l6ZSxcbiAgICAgICAgbWltZVR5cGU6IGZpbGVEYXRhLm1pbWVUeXBlLFxuICAgICAgICByZXEsXG4gICAgICAgIHNhdmVkRmlsZW5hbWU6IGZzU2FmZU5hbWUgfHwgZmlsZS5uYW1lLFxuICAgICAgICBzdGF0aWNQYXRoLFxuICAgICAgfSlcblxuICAgICAgZmlsZURhdGEuc2l6ZXMgPSBzaXplRGF0YVxuICAgICAgZmlsZXNUb1NhdmUucHVzaCguLi5zaXplc1RvU2F2ZSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIHRocm93IG5ldyBGaWxlVXBsb2FkRXJyb3IocmVxLnQpXG4gIH1cblxuICBuZXdEYXRhID0ge1xuICAgIC4uLm5ld0RhdGEsXG4gICAgLi4uZmlsZURhdGEsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRhdGE6IG5ld0RhdGEsXG4gICAgZmlsZXM6IGZpbGVzVG9TYXZlLFxuICB9XG59XG4iXSwibmFtZXMiOlsiZ2VuZXJhdGVGaWxlRGF0YSIsImNvbGxlY3Rpb24iLCJjb25maWciLCJjb2xsZWN0aW9uQ29uZmlnIiwiZGF0YSIsIm92ZXJ3cml0ZUV4aXN0aW5nRmlsZXMiLCJyZXEiLCJ0aHJvd09uTWlzc2luZ0ZpbGUiLCJ1cGxvYWQiLCJmaWxlcyIsImZpbGUiLCJ1bmRlZmluZWQiLCJ1cGxvYWRFZGl0cyIsInF1ZXJ5IiwiZGlzYWJsZUxvY2FsU3RvcmFnZSIsImZvcm1hdE9wdGlvbnMiLCJpbWFnZVNpemVzIiwicmVzaXplT3B0aW9ucyIsInN0YXRpY0RpciIsInRyaW1PcHRpb25zIiwic3RhdGljUGF0aCIsImluZGV4T2YiLCJwYXRoIiwicmVzb2x2ZSIsInBhdGhzIiwiY29uZmlnRGlyIiwiZmlsZW5hbWUiLCJ1cmwiLCJzdGFydHNXaXRoIiwiZmlsZVBhdGgiLCJyZXNwb25zZSIsImdldEZpbGVCeVBhdGgiLCJnZXRFeHRlcm5hbEZpbGUiLCJ1cGxvYWRDb25maWciLCJlcnIiLCJFcnJvciIsIkZpbGVSZXRyaWV2YWxFcnJvciIsInQiLCJtZXNzYWdlIiwiTWlzc2luZ0ZpbGUiLCJta2RpcnAiLCJzeW5jIiwibmV3RGF0YSIsImZpbGVzVG9TYXZlIiwiZmlsZURhdGEiLCJmaWxlSXNBbmltYXRlZCIsIm1pbWV0eXBlIiwiY3JvcERhdGEiLCJjcm9wIiwiZmlsZVN1cHBvcnRzUmVzaXplIiwiY2FuUmVzaXplSW1hZ2UiLCJmc1NhZmVOYW1lIiwic2hhcnBGaWxlIiwiZGltZW5zaW9ucyIsImZpbGVCdWZmZXIiLCJleHQiLCJtaW1lIiwiZmlsZUhhc0FkanVzdG1lbnRzIiwiQm9vbGVhbiIsInRlbXBGaWxlUGF0aCIsInNoYXJwT3B0aW9ucyIsImFuaW1hdGVkIiwic2hhcnAiLCJyb3RhdGUiLCJyZXNpemUiLCJ0b0Zvcm1hdCIsImZvcm1hdCIsIm9wdGlvbnMiLCJ0cmltIiwiaXNJbWFnZSIsImdldEltYWdlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwibWV0YWRhdGEiLCJ0b0J1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiZnJvbUJ1ZmZlciIsImluZm8iLCJmaWxlc2l6ZSIsInNpemUiLCJwYWdlcyIsImxlbmd0aCIsIm5hbWUiLCJpbmNsdWRlcyIsInNwbGl0IiwicG9wIiwibWltZVR5cGUiLCJiYXNlRmlsZW5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZ2V0U2FmZUZpbGVOYW1lIiwiY29sbGVjdGlvblNsdWciLCJzbHVnIiwiZGVzaXJlZEZpbGVuYW1lIiwiZmlsZUZvclJlc2l6ZSIsImNyb3BwZWRJbWFnZSIsImNyb3BJbWFnZSIsInB1c2giLCJidWZmZXIiLCJmcyIsInByb21pc2VzIiwid3JpdGVGaWxlIiwiQXJyYXkiLCJpc0FycmF5IiwicGF5bG9hZFVwbG9hZFNpemVzIiwic2l6ZURhdGEiLCJzaXplc1RvU2F2ZSIsInJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMiLCJzYXZlZEZpbGVuYW1lIiwic2l6ZXMiLCJjb25zb2xlIiwiZXJyb3IiLCJGaWxlVXBsb2FkRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7K0JBd0NhQTs7O2VBQUFBOzs7MEJBckNjOzJEQUNaOytEQUNJ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
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dlbmVyYXRlRmlsZURhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBVcGxvYWRlZEZpbGUgfSBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgdHlwZSB7IE91dHB1dEluZm8sIFNoYXJwLCBTaGFycE9wdGlvbnMgfSBmcm9tICdzaGFycCdcblxuaW1wb3J0IHsgZnJvbUJ1ZmZlciB9IGZyb20gJ2ZpbGUtdHlwZSdcbmltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICdzYW5pdGl6ZS1maWxlbmFtZSdcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZXhwcmVzcy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmlsZURhdGEsIEZpbGVUb1NhdmUsIFByb2JlZEltYWdlU2l6ZSwgVXBsb2FkRWRpdHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBGaWxlVXBsb2FkRXJyb3IsIE1pc3NpbmdGaWxlIH0gZnJvbSAnLi4vZXJyb3JzJ1xuaW1wb3J0IEZpbGVSZXRyaWV2YWxFcnJvciBmcm9tICcuLi9lcnJvcnMvRmlsZVJldHJpZXZhbEVycm9yJ1xuaW1wb3J0IGNhblJlc2l6ZUltYWdlIGZyb20gJy4vY2FuUmVzaXplSW1hZ2UnXG5pbXBvcnQgY3JvcEltYWdlIGZyb20gJy4vY3JvcEltYWdlJ1xuaW1wb3J0IHsgZ2V0RXh0ZXJuYWxGaWxlIH0gZnJvbSAnLi9nZXRFeHRlcm5hbEZpbGUnXG5pbXBvcnQgZ2V0RmlsZUJ5UGF0aCBmcm9tICcuL2dldEZpbGVCeVBhdGgnXG5pbXBvcnQgZ2V0SW1hZ2VTaXplIGZyb20gJy4vZ2V0SW1hZ2VTaXplJ1xuaW1wb3J0IGdldFNhZmVGaWxlTmFtZSBmcm9tICcuL2dldFNhZmVGaWxlbmFtZSdcbmltcG9ydCByZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIGZyb20gJy4vaW1hZ2VSZXNpemVyJ1xuaW1wb3J0IGlzSW1hZ2UgZnJvbSAnLi9pc0ltYWdlJ1xuXG50eXBlIEFyZ3M8VD4gPSB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWdcbiAgZGF0YTogVFxuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3JpZ2luYWxEb2M/OiBUXG4gIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXM/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgdGhyb3dPbk1pc3NpbmdGaWxlPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdDxUPiA9IFByb21pc2U8e1xuICBkYXRhOiBUXG4gIGZpbGVzOiBGaWxlVG9TYXZlW11cbn0+XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUZpbGVEYXRhID0gYXN5bmMgPFQ+KHtcbiAgY29sbGVjdGlvbjogeyBjb25maWc6IGNvbGxlY3Rpb25Db25maWcgfSxcbiAgY29uZmlnLFxuICBkYXRhLFxuICBvcGVyYXRpb24sXG4gIG9yaWdpbmFsRG9jLFxuICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzLFxuICByZXEsXG4gIHRocm93T25NaXNzaW5nRmlsZSxcbn06IEFyZ3M8VD4pOiBSZXN1bHQ8VD4gPT4ge1xuICBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBmaWxlczogW10sXG4gICAgfVxuICB9XG5cbiAgbGV0IGZpbGUgPSByZXEuZmlsZXM/LmZpbGUgfHwgdW5kZWZpbmVkXG5cbiAgY29uc3QgdXBsb2FkRWRpdHMgPSBwYXJzZVVwbG9hZEVkaXRzRnJvbVJlcU9ySW5jb21pbmdEYXRhKHtcbiAgICBkYXRhLFxuICAgIG9wZXJhdGlvbixcbiAgICBvcmlnaW5hbERvYyxcbiAgICByZXEsXG4gIH0pXG5cbiAgY29uc3QgeyBkaXNhYmxlTG9jYWxTdG9yYWdlLCBmb3JtYXRPcHRpb25zLCBpbWFnZVNpemVzLCByZXNpemVPcHRpb25zLCBzdGF0aWNEaXIsIHRyaW1PcHRpb25zIH0gPVxuICAgIGNvbGxlY3Rpb25Db25maWcudXBsb2FkXG5cbiAgbGV0IHN0YXRpY1BhdGggPSBzdGF0aWNEaXJcbiAgaWYgKHN0YXRpY0Rpci5pbmRleE9mKCcvJykgIT09IDApIHtcbiAgICBzdGF0aWNQYXRoID0gcGF0aC5yZXNvbHZlKGNvbmZpZy5wYXRocy5jb25maWdEaXIsIHN0YXRpY0RpcilcbiAgfVxuXG4gIGlmICghZmlsZSAmJiB1cGxvYWRFZGl0cyAmJiBkYXRhKSB7XG4gICAgY29uc3QgeyBmaWxlbmFtZSwgdXJsIH0gPSBkYXRhIGFzIEZpbGVEYXRhXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHVybCAmJiB1cmwuc3RhcnRzV2l0aCgnLycpICYmICFkaXNhYmxlTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7c3RhdGljUGF0aH0vJHtmaWxlbmFtZX1gXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0RmlsZUJ5UGF0aChmaWxlUGF0aClcbiAgICAgICAgZmlsZSA9IHJlc3BvbnNlIGFzIFVwbG9hZGVkRmlsZVxuICAgICAgICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChmaWxlbmFtZSAmJiB1cmwpIHtcbiAgICAgICAgZmlsZSA9IChhd2FpdCBnZXRFeHRlcm5hbEZpbGUoe1xuICAgICAgICAgIGRhdGE6IGRhdGEgYXMgRmlsZURhdGEsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHVwbG9hZENvbmZpZzogY29sbGVjdGlvbkNvbmZpZy51cGxvYWQsXG4gICAgICAgIH0pKSBhcyBVcGxvYWRlZEZpbGVcbiAgICAgICAgb3ZlcndyaXRlRXhpc3RpbmdGaWxlcyA9IHRydWVcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRmlsZVJldHJpZXZhbEVycm9yKHJlcS50LCBlcnIubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWZpbGUpIHtcbiAgICBpZiAodGhyb3dPbk1pc3NpbmdGaWxlKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGUocmVxLnQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICB9XG4gIH1cblxuICBpZiAoIWRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICBta2RpcnAuc3luYyhzdGF0aWNQYXRoKVxuICB9XG5cbiAgbGV0IG5ld0RhdGEgPSBkYXRhXG4gIGNvbnN0IGZpbGVzVG9TYXZlOiBGaWxlVG9TYXZlW10gPSBbXVxuICBjb25zdCBmaWxlRGF0YTogUGFydGlhbDxGaWxlRGF0YT4gPSB7fVxuICBjb25zdCBmaWxlSXNBbmltYXRlZCA9IGZpbGUubWltZXR5cGUgPT09ICdpbWFnZS9naWYnIHx8IGZpbGUubWltZXR5cGUgPT09ICdpbWFnZS93ZWJwJ1xuICBjb25zdCBjcm9wRGF0YSA9XG4gICAgdHlwZW9mIHVwbG9hZEVkaXRzID09PSAnb2JqZWN0JyAmJiAnY3JvcCcgaW4gdXBsb2FkRWRpdHMgPyB1cGxvYWRFZGl0cy5jcm9wIDogdW5kZWZpbmVkXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlU3VwcG9ydHNSZXNpemUgPSBjYW5SZXNpemVJbWFnZShmaWxlLm1pbWV0eXBlKVxuICAgIGxldCBmc1NhZmVOYW1lOiBzdHJpbmdcbiAgICBsZXQgc2hhcnBGaWxlOiBTaGFycCB8IHVuZGVmaW5lZFxuICAgIGxldCBkaW1lbnNpb25zOiBQcm9iZWRJbWFnZVNpemUgfCB1bmRlZmluZWRcbiAgICBsZXQgZmlsZUJ1ZmZlcjogeyBkYXRhOiBCdWZmZXI7IGluZm86IE91dHB1dEluZm8gfVxuICAgIGxldCBleHRcbiAgICBsZXQgbWltZTogc3RyaW5nXG4gICAgY29uc3QgZmlsZUhhc0FkanVzdG1lbnRzID1cbiAgICAgIGZpbGVTdXBwb3J0c1Jlc2l6ZSAmJlxuICAgICAgQm9vbGVhbihyZXNpemVPcHRpb25zIHx8IGZvcm1hdE9wdGlvbnMgfHwgdHJpbU9wdGlvbnMgfHwgZmlsZS50ZW1wRmlsZVBhdGgpXG5cbiAgICBjb25zdCBzaGFycE9wdGlvbnM6IFNoYXJwT3B0aW9ucyA9IHt9XG5cbiAgICBpZiAoZmlsZUlzQW5pbWF0ZWQpIHNoYXJwT3B0aW9ucy5hbmltYXRlZCA9IHRydWVcblxuICAgIGlmIChmaWxlSGFzQWRqdXN0bWVudHMpIHtcbiAgICAgIGlmIChmaWxlLnRlbXBGaWxlUGF0aCkge1xuICAgICAgICBzaGFycEZpbGUgPSBzaGFycChmaWxlLnRlbXBGaWxlUGF0aCwgc2hhcnBPcHRpb25zKS5yb3RhdGUoKSAvLyBwYXNzIHJvdGF0ZSgpIHRvIGF1dG8tcm90YXRlIGJhc2VkIG9uIEVYSUYgZGF0YS4gaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzMwODFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNoYXJwRmlsZSA9IHNoYXJwKGZpbGUuZGF0YSwgc2hhcnBPcHRpb25zKS5yb3RhdGUoKSAvLyBwYXNzIHJvdGF0ZSgpIHRvIGF1dG8tcm90YXRlIGJhc2VkIG9uIEVYSUYgZGF0YS4gaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzMwODFcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc2l6ZU9wdGlvbnMpIHtcbiAgICAgICAgc2hhcnBGaWxlID0gc2hhcnBGaWxlLnJlc2l6ZShyZXNpemVPcHRpb25zKVxuICAgICAgfVxuICAgICAgaWYgKGZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgc2hhcnBGaWxlID0gc2hhcnBGaWxlLnRvRm9ybWF0KGZvcm1hdE9wdGlvbnMuZm9ybWF0LCBmb3JtYXRPcHRpb25zLm9wdGlvbnMpXG4gICAgICB9XG4gICAgICBpZiAodHJpbU9wdGlvbnMpIHtcbiAgICAgICAgc2hhcnBGaWxlID0gc2hhcnBGaWxlLnRyaW0odHJpbU9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpbGVTdXBwb3J0c1Jlc2l6ZSB8fCBpc0ltYWdlKGZpbGUubWltZXR5cGUpKSB7XG4gICAgICBkaW1lbnNpb25zID0gYXdhaXQgZ2V0SW1hZ2VTaXplKGZpbGUpXG4gICAgICBmaWxlRGF0YS53aWR0aCA9IGRpbWVuc2lvbnMud2lkdGhcbiAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuXG4gICAgaWYgKHNoYXJwRmlsZSkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBzaGFycEZpbGUubWV0YWRhdGEoKVxuICAgICAgZmlsZUJ1ZmZlciA9IGF3YWl0IHNoYXJwRmlsZS50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pXG4gICAgICA7KHsgZXh0LCBtaW1lIH0gPSBhd2FpdCBmcm9tQnVmZmVyKGZpbGVCdWZmZXIuZGF0YSkpIC8vIFRoaXMgaXMgZ2V0dGluZyBhbiBpbmNvcnJlY3QgZ2lmIGhlaWdodCBiYWNrLlxuICAgICAgZmlsZURhdGEud2lkdGggPSBmaWxlQnVmZmVyLmluZm8ud2lkdGhcbiAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGZpbGVCdWZmZXIuaW5mby5oZWlnaHRcbiAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gZmlsZUJ1ZmZlci5pbmZvLnNpemVcblxuICAgICAgLy8gQW5pbWF0ZWQgR0lGcyArIFdlYlAgYWdncmVnYXRlIHRoZSBoZWlnaHQgZnJvbSBldmVyeSBmcmFtZSwgc28gd2UgbmVlZCB0byB1c2UgZGl2aWRlIGJ5IG51bWJlciBvZiBwYWdlc1xuICAgICAgaWYgKG1ldGFkYXRhLnBhZ2VzKSB7XG4gICAgICAgIGZpbGVEYXRhLmhlaWdodCA9IGZpbGVCdWZmZXIuaW5mby5oZWlnaHQgLyBtZXRhZGF0YS5wYWdlc1xuICAgICAgICBmaWxlRGF0YS5maWxlc2l6ZSA9IGZpbGVCdWZmZXIuZGF0YS5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWltZSA9IGZpbGUubWltZXR5cGVcbiAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gZmlsZS5zaXplXG5cbiAgICAgIGlmIChmaWxlLm5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBleHQgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0ID0gJydcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZHVzdCBTVkcgbWltZSB0eXBlLiBmcm9tQnVmZmVyIG1vZGlmaWVzIGl0LlxuICAgIGlmIChtaW1lID09PSAnYXBwbGljYXRpb24veG1sJyAmJiBleHQgPT09ICdzdmcnKSBtaW1lID0gJ2ltYWdlL3N2Zyt4bWwnXG4gICAgZmlsZURhdGEubWltZVR5cGUgPSBtaW1lXG5cbiAgICBjb25zdCBiYXNlRmlsZW5hbWUgPSBzYW5pdGl6ZShmaWxlLm5hbWUuc3Vic3RyaW5nKDAsIGZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpKSB8fCBmaWxlLm5hbWUpXG4gICAgZnNTYWZlTmFtZSA9IGAke2Jhc2VGaWxlbmFtZX0ke2V4dCA/IGAuJHtleHR9YCA6ICcnfWBcblxuICAgIGlmICghb3ZlcndyaXRlRXhpc3RpbmdGaWxlcykge1xuICAgICAgZnNTYWZlTmFtZSA9IGF3YWl0IGdldFNhZmVGaWxlTmFtZSh7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgIGRlc2lyZWRGaWxlbmFtZTogZnNTYWZlTmFtZSxcbiAgICAgICAgcmVxLFxuICAgICAgICBzdGF0aWNQYXRoLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmaWxlRGF0YS5maWxlbmFtZSA9IGZzU2FmZU5hbWVcbiAgICBsZXQgZmlsZUZvclJlc2l6ZSA9IGZpbGVcblxuICAgIGlmIChjcm9wRGF0YSkge1xuICAgICAgY29uc3QgeyBkYXRhOiBjcm9wcGVkSW1hZ2UsIGluZm8gfSA9IGF3YWl0IGNyb3BJbWFnZSh7IGNyb3BEYXRhLCBkaW1lbnNpb25zLCBmaWxlIH0pXG5cbiAgICAgIGZpbGVzVG9TYXZlLnB1c2goe1xuICAgICAgICBidWZmZXI6IGNyb3BwZWRJbWFnZSxcbiAgICAgICAgcGF0aDogYCR7c3RhdGljUGF0aH0vJHtmc1NhZmVOYW1lfWAsXG4gICAgICB9KVxuXG4gICAgICBmaWxlRm9yUmVzaXplID0ge1xuICAgICAgICAuLi5maWxlLFxuICAgICAgICBkYXRhOiBjcm9wcGVkSW1hZ2UsXG4gICAgICAgIHNpemU6IGluZm8uc2l6ZSxcbiAgICAgIH1cbiAgICAgIGZpbGVEYXRhLndpZHRoID0gaW5mby53aWR0aFxuICAgICAgZmlsZURhdGEuaGVpZ2h0ID0gaW5mby5oZWlnaHRcbiAgICAgIGZpbGVEYXRhLmZpbGVzaXplID0gaW5mby5zaXplXG5cbiAgICAgIGlmIChmaWxlLnRlbXBGaWxlUGF0aCkge1xuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZS50ZW1wRmlsZVBhdGgsIGNyb3BwZWRJbWFnZSkgLy8gd3JpdGUgZmlsZUJ1ZmZlciB0byB0aGUgdGVtcCBwYXRoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEuZmlsZXMuZmlsZSA9IGZpbGVGb3JSZXNpemVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZXNUb1NhdmUucHVzaCh7XG4gICAgICAgIGJ1ZmZlcjogZmlsZUJ1ZmZlcj8uZGF0YSB8fCBmaWxlLmRhdGEsXG4gICAgICAgIHBhdGg6IGAke3N0YXRpY1BhdGh9LyR7ZnNTYWZlTmFtZX1gLFxuICAgICAgfSlcblxuICAgICAgLy8gSWYgdXNpbmcgdGVtcCBmaWxlcyBhbmQgdGhlIGltYWdlIGlzIGJlaW5nIHJlc2l6ZWQsIHdyaXRlIHRoZSBmaWxlIHRvIHRoZSB0ZW1wIHBhdGhcbiAgICAgIGlmIChmaWxlQnVmZmVyPy5kYXRhIHx8IGZpbGUuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChmaWxlLnRlbXBGaWxlUGF0aCkge1xuICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShmaWxlLnRlbXBGaWxlUGF0aCwgZmlsZUJ1ZmZlcj8uZGF0YSB8fCBmaWxlLmRhdGEpIC8vIHdyaXRlIGZpbGVCdWZmZXIgdG8gdGhlIHRlbXAgcGF0aFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzc2lnbiB0aGUgX3Bvc3NpYmx5IG1vZGlmaWVkXyBmaWxlIHRvIHRoZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgIHJlcS5maWxlcy5maWxlID0ge1xuICAgICAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IGZpbGVCdWZmZXI/LmRhdGEgfHwgZmlsZS5kYXRhLFxuICAgICAgICAgICAgc2l6ZTogZmlsZUJ1ZmZlcj8uaW5mby5zaXplLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGltYWdlU2l6ZXMpICYmIGZpbGVTdXBwb3J0c1Jlc2l6ZSkge1xuICAgICAgcmVxLnBheWxvYWRVcGxvYWRTaXplcyA9IHt9XG4gICAgICBjb25zdCB7IGZvY2FsUG9pbnQsIHNpemVEYXRhLCBzaXplc1RvU2F2ZSB9ID0gYXdhaXQgcmVzaXplQW5kVHJhbnNmb3JtSW1hZ2VTaXplcyh7XG4gICAgICAgIGNvbmZpZzogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZGltZW5zaW9uczogIWNyb3BEYXRhXG4gICAgICAgICAgPyBkaW1lbnNpb25zXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIC4uLmRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgIGhlaWdodDogZmlsZURhdGEuaGVpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aDogZmlsZURhdGEud2lkdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICBmaWxlOiBmaWxlRm9yUmVzaXplLFxuICAgICAgICBtaW1lVHlwZTogZmlsZURhdGEubWltZVR5cGUsXG4gICAgICAgIHJlcSxcbiAgICAgICAgc2F2ZWRGaWxlbmFtZTogZnNTYWZlTmFtZSB8fCBmaWxlLm5hbWUsXG4gICAgICAgIHN0YXRpY1BhdGgsXG4gICAgICAgIHVwbG9hZEVkaXRzLFxuICAgICAgfSlcblxuICAgICAgZmlsZURhdGEuc2l6ZXMgPSBzaXplRGF0YVxuICAgICAgZmlsZURhdGEuZm9jYWxYID0gZm9jYWxQb2ludD8ueFxuICAgICAgZmlsZURhdGEuZm9jYWxZID0gZm9jYWxQb2ludD8ueVxuICAgICAgZmlsZXNUb1NhdmUucHVzaCguLi5zaXplc1RvU2F2ZSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJlcS5wYXlsb2FkLmxvZ2dlci5lcnJvcih7IGVyciwgbXNnOiAnRXJyb3IgdXBsb2FkaW5nIGZpbGUnIH0pXG4gICAgdGhyb3cgbmV3IEZpbGVVcGxvYWRFcnJvcihyZXEudClcbiAgfVxuXG4gIG5ld0RhdGEgPSB7XG4gICAgLi4ubmV3RGF0YSxcbiAgICAuLi5maWxlRGF0YSxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGF0YTogbmV3RGF0YSxcbiAgICBmaWxlczogZmlsZXNUb1NhdmUsXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSB1cGxvYWQgZWRpdHMgZnJvbSByZXEgb3IgaW5jb21pbmcgZGF0YVxuICovXG5mdW5jdGlvbiBwYXJzZVVwbG9hZEVkaXRzRnJvbVJlcU9ySW5jb21pbmdEYXRhKGFyZ3M6IHtcbiAgZGF0YTogdW5rbm93blxuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3JpZ2luYWxEb2M6IHVua25vd25cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxufSk6IFVwbG9hZEVkaXRzIHtcbiAgY29uc3QgeyBkYXRhLCBvcGVyYXRpb24sIG9yaWdpbmFsRG9jLCByZXEgfSA9IGFyZ3NcblxuICAvLyBHZXQgaW50ZW5kZWQgZm9jYWwgcG9pbnQgY2hhbmdlIGZyb20gcXVlcnkgc3RyaW5nIG9yIGluY29taW5nIGRhdGFcbiAgY29uc3Qge1xuICAgIHVwbG9hZEVkaXRzID0ge30sXG4gIH06IHtcbiAgICB1cGxvYWRFZGl0cz86IFVwbG9hZEVkaXRzXG4gIH0gPSByZXEucXVlcnkgfHwge31cblxuICBpZiAodXBsb2FkRWRpdHMuZm9jYWxQb2ludCkgcmV0dXJuIHVwbG9hZEVkaXRzXG5cbiAgY29uc3QgaW5jb21pbmdEYXRhID0gZGF0YSBhcyBGaWxlRGF0YVxuICBjb25zdCBvcmlnRG9jID0gb3JpZ2luYWxEb2MgYXMgRmlsZURhdGFcblxuICAvLyBJZiBubyBjaGFuZ2UgaW4gZm9jYWwgcG9pbnQsIHJldHVybiB1bmRlZmluZWQuXG4gIC8vIFRoaXMgcHJldmVudHMgYSByZWZvY2FsIG9wZXJhdGlvbiB0cmlnZ2VyZWQgZnJvbSBhZG1pbiwgYmVjYXVzZSBpdCBhbHdheXMgc2VuZHMgdGhlIGZvY2FsIHBvaW50LlxuICBpZiAob3JpZ0RvYyAmJiBpbmNvbWluZ0RhdGEuZm9jYWxYID09PSBvcmlnRG9jLmZvY2FsWCAmJiBpbmNvbWluZ0RhdGEuZm9jYWxZID09PSBvcmlnRG9jLmZvY2FsWSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGlmIChpbmNvbWluZ0RhdGEuZm9jYWxYICYmIGluY29taW5nRGF0YS5mb2NhbFkpIHtcbiAgICB1cGxvYWRFZGl0cy5mb2NhbFBvaW50ID0ge1xuICAgICAgeDogaW5jb21pbmdEYXRhLmZvY2FsWCxcbiAgICAgIHk6IGluY29taW5nRGF0YS5mb2NhbFksXG4gICAgfVxuICAgIHJldHVybiB1cGxvYWRFZGl0c1xuICB9XG5cbiAgLy8gSWYgbm8gZm9jYWwgcG9pbnQgaXMgc2V0LCBkZWZhdWx0IHRvIGNlbnRlclxuICBpZiAob3BlcmF0aW9uID09PSAnY3JlYXRlJykge1xuICAgIHVwbG9hZEVkaXRzLmZvY2FsUG9pbnQgPSB7XG4gICAgICB4OiA1MCxcbiAgICAgIHk6IDUwLFxuICAgIH1cbiAgfVxuICByZXR1cm4gdXBsb2FkRWRpdHNcbn1cbiJdLCJuYW1lcyI6WyJnZW5lcmF0ZUZpbGVEYXRhIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsImNvbGxlY3Rpb25Db25maWciLCJkYXRhIiwib3BlcmF0aW9uIiwib3JpZ2luYWxEb2MiLCJvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzIiwicmVxIiwidGhyb3dPbk1pc3NpbmdGaWxlIiwidXBsb2FkIiwiZmlsZXMiLCJmaWxlIiwidW5kZWZpbmVkIiwidXBsb2FkRWRpdHMiLCJwYXJzZVVwbG9hZEVkaXRzRnJvbVJlcU9ySW5jb21pbmdEYXRhIiwiZGlzYWJsZUxvY2FsU3RvcmFnZSIsImZvcm1hdE9wdGlvbnMiLCJpbWFnZVNpemVzIiwicmVzaXplT3B0aW9ucyIsInN0YXRpY0RpciIsInRyaW1PcHRpb25zIiwic3RhdGljUGF0aCIsImluZGV4T2YiLCJwYXRoIiwicmVzb2x2ZSIsInBhdGhzIiwiY29uZmlnRGlyIiwiZmlsZW5hbWUiLCJ1cmwiLCJzdGFydHNXaXRoIiwiZmlsZVBhdGgiLCJyZXNwb25zZSIsImdldEZpbGVCeVBhdGgiLCJnZXRFeHRlcm5hbEZpbGUiLCJ1cGxvYWRDb25maWciLCJlcnIiLCJFcnJvciIsIkZpbGVSZXRyaWV2YWxFcnJvciIsInQiLCJtZXNzYWdlIiwiTWlzc2luZ0ZpbGUiLCJta2RpcnAiLCJzeW5jIiwibmV3RGF0YSIsImZpbGVzVG9TYXZlIiwiZmlsZURhdGEiLCJmaWxlSXNBbmltYXRlZCIsIm1pbWV0eXBlIiwiY3JvcERhdGEiLCJjcm9wIiwiZmlsZVN1cHBvcnRzUmVzaXplIiwiY2FuUmVzaXplSW1hZ2UiLCJmc1NhZmVOYW1lIiwic2hhcnBGaWxlIiwiZGltZW5zaW9ucyIsImZpbGVCdWZmZXIiLCJleHQiLCJtaW1lIiwiZmlsZUhhc0FkanVzdG1lbnRzIiwiQm9vbGVhbiIsInRlbXBGaWxlUGF0aCIsInNoYXJwT3B0aW9ucyIsImFuaW1hdGVkIiwic2hhcnAiLCJyb3RhdGUiLCJyZXNpemUiLCJ0b0Zvcm1hdCIsImZvcm1hdCIsIm9wdGlvbnMiLCJ0cmltIiwiaXNJbWFnZSIsImdldEltYWdlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwibWV0YWRhdGEiLCJ0b0J1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiZnJvbUJ1ZmZlciIsImluZm8iLCJmaWxlc2l6ZSIsInNpemUiLCJwYWdlcyIsImxlbmd0aCIsIm5hbWUiLCJpbmNsdWRlcyIsInNwbGl0IiwicG9wIiwibWltZVR5cGUiLCJiYXNlRmlsZW5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZ2V0U2FmZUZpbGVOYW1lIiwiY29sbGVjdGlvblNsdWciLCJzbHVnIiwiZGVzaXJlZEZpbGVuYW1lIiwiZmlsZUZvclJlc2l6ZSIsImNyb3BwZWRJbWFnZSIsImNyb3BJbWFnZSIsInB1c2giLCJidWZmZXIiLCJmcyIsInByb21pc2VzIiwid3JpdGVGaWxlIiwiQXJyYXkiLCJpc0FycmF5IiwicGF5bG9hZFVwbG9hZFNpemVzIiwiZm9jYWxQb2ludCIsInNpemVEYXRhIiwic2l6ZXNUb1NhdmUiLCJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwic2F2ZWRGaWxlbmFtZSIsInNpemVzIiwiZm9jYWxYIiwieCIsImZvY2FsWSIsInkiLCJwYXlsb2FkIiwibG9nZ2VyIiwiZXJyb3IiLCJtc2ciLCJGaWxlVXBsb2FkRXJyb3IiLCJhcmdzIiwicXVlcnkiLCJpbmNvbWluZ0RhdGEiLCJvcmlnRG9jIl0sIm1hcHBpbmdzIjoiOzs7OytCQTBDYUE7OztlQUFBQTs7OzBCQXZDYzsyREFDWjsrREFDSTs2REFDRjt5RUFDSTs4REFDSDt3QkFPMkI7MkVBQ2Q7dUVBQ0o7a0VBQ0w7aUNBQ1U7c0VBQ047cUVBQ0Q7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
@@ -1 +1 @@
1
- {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAcnD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,QAAA,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EAkJnE,CAAA;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAcnD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,QAAA,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EAqKnE,CAAA;AAED,eAAe,mBAAmB,CAAA"}
@@ -21,51 +21,52 @@ const getBaseUploadFields = ({ collection, config })=>{
21
21
  const uploadOptions = typeof collection.upload === 'object' ? collection.upload : {};
22
22
  const mimeType = {
23
23
  name: 'mimeType',
24
+ type: 'text',
24
25
  admin: {
25
26
  hidden: true,
26
27
  readOnly: true
27
28
  },
28
- label: 'MIME Type',
29
- type: 'text'
29
+ label: 'MIME Type'
30
30
  };
31
31
  const url = {
32
32
  name: 'url',
33
+ type: 'text',
33
34
  admin: {
34
35
  hidden: true,
35
36
  readOnly: true
36
37
  },
37
- label: 'URL',
38
- type: 'text'
38
+ label: 'URL'
39
39
  };
40
40
  const width = {
41
41
  name: 'width',
42
+ type: 'number',
42
43
  admin: {
43
44
  hidden: true,
44
45
  readOnly: true
45
46
  },
46
- label: labels['upload:width'],
47
- type: 'number'
47
+ label: labels['upload:width']
48
48
  };
49
49
  const height = {
50
50
  name: 'height',
51
+ type: 'number',
51
52
  admin: {
52
53
  hidden: true,
53
54
  readOnly: true
54
55
  },
55
- label: labels['upload:height'],
56
- type: 'number'
56
+ label: labels['upload:height']
57
57
  };
58
58
  const filesize = {
59
59
  name: 'filesize',
60
+ type: 'number',
60
61
  admin: {
61
62
  hidden: true,
62
63
  readOnly: true
63
64
  },
64
- label: labels['upload:fileSize'],
65
- type: 'number'
65
+ label: labels['upload:fileSize']
66
66
  };
67
67
  const filename = {
68
68
  name: 'filename',
69
+ type: 'text',
69
70
  admin: {
70
71
  disableBulkEdit: true,
71
72
  hidden: true,
@@ -73,7 +74,6 @@ const getBaseUploadFields = ({ collection, config })=>{
73
74
  },
74
75
  index: true,
75
76
  label: labels['upload:fileName'],
76
- type: 'text',
77
77
  unique: true
78
78
  };
79
79
  let uploadFields = [
@@ -102,15 +102,32 @@ const getBaseUploadFields = ({ collection, config })=>{
102
102
  if (uploadOptions.mimeTypes) {
103
103
  mimeType.validate = (0, _mimeTypeValidator.mimeTypeValidator)(uploadOptions.mimeTypes);
104
104
  }
105
+ // Add focal point fields if not disabled
106
+ if (uploadOptions.focalPoint !== false && (uploadOptions.imageSizes || uploadOptions.resizeOptions)) {
107
+ uploadFields = uploadFields.concat([
108
+ 'focalX',
109
+ 'focalY'
110
+ ].map((name)=>{
111
+ return {
112
+ name,
113
+ type: 'number',
114
+ admin: {
115
+ hidden: true
116
+ }
117
+ };
118
+ }));
119
+ }
105
120
  if (uploadOptions.imageSizes) {
106
121
  uploadFields = uploadFields.concat([
107
122
  {
108
123
  name: 'sizes',
124
+ type: 'group',
109
125
  admin: {
110
126
  hidden: true
111
127
  },
112
128
  fields: uploadOptions.imageSizes.map((size)=>({
113
129
  name: size.name,
130
+ type: 'group',
114
131
  admin: {
115
132
  hidden: true
116
133
  },
@@ -141,11 +158,9 @@ const getBaseUploadFields = ({ collection, config })=>{
141
158
  unique: false
142
159
  }
143
160
  ],
144
- label: size.name,
145
- type: 'group'
161
+ label: size.name
146
162
  })),
147
- label: labels['upload:Sizes'],
148
- type: 'group'
163
+ label: labels['upload:sizes']
149
164
  }
150
165
  ]);
151
166
  }
@@ -153,4 +168,4 @@ const getBaseUploadFields = ({ collection, config })=>{
153
168
  };
154
169
  const _default = getBaseUploadFields;
155
170
 
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dldEJhc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdVcGxvYWRUeXBlIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgZXh0cmFjdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy9leHRyYWN0VHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgbWltZVR5cGVWYWxpZGF0b3IgfSBmcm9tICcuL21pbWVUeXBlVmFsaWRhdG9yJ1xuXG5jb25zdCBsYWJlbHMgPSBleHRyYWN0VHJhbnNsYXRpb25zKFtcbiAgJ3VwbG9hZDp3aWR0aCcsXG4gICd1cGxvYWQ6aGVpZ2h0JyxcbiAgJ3VwbG9hZDpmaWxlU2l6ZScsXG4gICd1cGxvYWQ6ZmlsZU5hbWUnLFxuICAndXBsb2FkOnNpemVzJyxcbl0pXG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbkNvbmZpZ1xuICBjb25maWc6IENvbmZpZ1xufVxuXG5jb25zdCBnZXRCYXNlVXBsb2FkRmllbGRzID0gKHsgY29sbGVjdGlvbiwgY29uZmlnIH06IE9wdGlvbnMpOiBGaWVsZFtdID0+IHtcbiAgY29uc3QgdXBsb2FkT3B0aW9uczogSW5jb21pbmdVcGxvYWRUeXBlID1cbiAgICB0eXBlb2YgY29sbGVjdGlvbi51cGxvYWQgPT09ICdvYmplY3QnID8gY29sbGVjdGlvbi51cGxvYWQgOiB7fVxuXG4gIGNvbnN0IG1pbWVUeXBlOiBGaWVsZCA9IHtcbiAgICBuYW1lOiAnbWltZVR5cGUnLFxuICAgIGFkbWluOiB7XG4gICAgICBoaWRkZW46IHRydWUsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICB9LFxuICAgIGxhYmVsOiAnTUlNRSBUeXBlJyxcbiAgICB0eXBlOiAndGV4dCcsXG4gIH1cblxuICBjb25zdCB1cmw6IEZpZWxkID0ge1xuICAgIG5hbWU6ICd1cmwnLFxuICAgIGFkbWluOiB7XG4gICAgICBoaWRkZW46IHRydWUsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICB9LFxuICAgIGxhYmVsOiAnVVJMJyxcbiAgICB0eXBlOiAndGV4dCcsXG4gIH1cblxuICBjb25zdCB3aWR0aDogRmllbGQgPSB7XG4gICAgbmFtZTogJ3dpZHRoJyxcbiAgICBhZG1pbjoge1xuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgfSxcbiAgICBsYWJlbDogbGFiZWxzWyd1cGxvYWQ6d2lkdGgnXSxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgfVxuXG4gIGNvbnN0IGhlaWdodDogRmllbGQgPSB7XG4gICAgbmFtZTogJ2hlaWdodCcsXG4gICAgYWRtaW46IHtcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0sXG4gICAgbGFiZWw6IGxhYmVsc1sndXBsb2FkOmhlaWdodCddLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICB9XG5cbiAgY29uc3QgZmlsZXNpemU6IEZpZWxkID0ge1xuICAgIG5hbWU6ICdmaWxlc2l6ZScsXG4gICAgYWRtaW46IHtcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0sXG4gICAgbGFiZWw6IGxhYmVsc1sndXBsb2FkOmZpbGVTaXplJ10sXG4gICAgdHlwZTogJ251bWJlcicsXG4gIH1cblxuICBjb25zdCBmaWxlbmFtZTogRmllbGQgPSB7XG4gICAgbmFtZTogJ2ZpbGVuYW1lJyxcbiAgICBhZG1pbjoge1xuICAgICAgZGlzYWJsZUJ1bGtFZGl0OiB0cnVlLFxuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgfSxcbiAgICBpbmRleDogdHJ1ZSxcbiAgICBsYWJlbDogbGFiZWxzWyd1cGxvYWQ6ZmlsZU5hbWUnXSxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgdW5pcXVlOiB0cnVlLFxuICB9XG5cbiAgbGV0IHVwbG9hZEZpZWxkczogRmllbGRbXSA9IFtcbiAgICB7XG4gICAgICAuLi51cmwsXG4gICAgICBob29rczoge1xuICAgICAgICBhZnRlclJlYWQ6IFtcbiAgICAgICAgICAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhPy5maWxlbmFtZSkge1xuICAgICAgICAgICAgICBpZiAodXBsb2FkT3B0aW9ucy5zdGF0aWNVUkwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbmZpZy5zZXJ2ZXJVUkx9JHt1cGxvYWRPcHRpb25zLnN0YXRpY1VSTH0vJHtkYXRhLmZpbGVuYW1lfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYCR7dXBsb2FkT3B0aW9ucy5zdGF0aWNVUkx9LyR7ZGF0YS5maWxlbmFtZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGZpbGVuYW1lLFxuICAgIG1pbWVUeXBlLFxuICAgIGZpbGVzaXplLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgXVxuXG4gIGlmICh1cGxvYWRPcHRpb25zLm1pbWVUeXBlcykge1xuICAgIG1pbWVUeXBlLnZhbGlkYXRlID0gbWltZVR5cGVWYWxpZGF0b3IodXBsb2FkT3B0aW9ucy5taW1lVHlwZXMpXG4gIH1cblxuICBpZiAodXBsb2FkT3B0aW9ucy5pbWFnZVNpemVzKSB7XG4gICAgdXBsb2FkRmllbGRzID0gdXBsb2FkRmllbGRzLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzaXplcycsXG4gICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IHVwbG9hZE9wdGlvbnMuaW1hZ2VTaXplcy5tYXAoKHNpemUpID0+ICh7XG4gICAgICAgICAgbmFtZTogc2l6ZS5uYW1lLFxuICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4udXJsLFxuICAgICAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgICAgIGFmdGVyUmVhZDogW1xuICAgICAgICAgICAgICAgICAgKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVGaWxlbmFtZSA9IGRhdGE/LnNpemVzPy5bc2l6ZS5uYW1lXT8uZmlsZW5hbWVcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZUZpbGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHVwbG9hZE9wdGlvbnMuc3RhdGljVVJMLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbmZpZy5zZXJ2ZXJVUkx9JHt1cGxvYWRPcHRpb25zLnN0YXRpY1VSTH0vJHtzaXplRmlsZW5hbWV9YFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7dXBsb2FkT3B0aW9ucy5zdGF0aWNVUkx9LyR7c2l6ZUZpbGVuYW1lfWBcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgICAgIGZpbGVzaXplLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5maWxlbmFtZSxcbiAgICAgICAgICAgICAgdW5pcXVlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBsYWJlbDogc2l6ZS5uYW1lLFxuICAgICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgIH0pKSxcbiAgICAgICAgbGFiZWw6IGxhYmVsc1sndXBsb2FkOlNpemVzJ10sXG4gICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICB9LFxuICAgIF0pXG4gIH1cbiAgcmV0dXJuIHVwbG9hZEZpZWxkc1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRCYXNlVXBsb2FkRmllbGRzXG4iXSwibmFtZXMiOlsibGFiZWxzIiwiZXh0cmFjdFRyYW5zbGF0aW9ucyIsImdldEJhc2VVcGxvYWRGaWVsZHMiLCJjb2xsZWN0aW9uIiwiY29uZmlnIiwidXBsb2FkT3B0aW9ucyIsInVwbG9hZCIsIm1pbWVUeXBlIiwibmFtZSIsImFkbWluIiwiaGlkZGVuIiwicmVhZE9ubHkiLCJsYWJlbCIsInR5cGUiLCJ1cmwiLCJ3aWR0aCIsImhlaWdodCIsImZpbGVzaXplIiwiZmlsZW5hbWUiLCJkaXNhYmxlQnVsa0VkaXQiLCJpbmRleCIsInVuaXF1ZSIsInVwbG9hZEZpZWxkcyIsImhvb2tzIiwiYWZ0ZXJSZWFkIiwiZGF0YSIsInN0YXRpY1VSTCIsInN0YXJ0c1dpdGgiLCJzZXJ2ZXJVUkwiLCJ1bmRlZmluZWQiLCJtaW1lVHlwZXMiLCJ2YWxpZGF0ZSIsIm1pbWVUeXBlVmFsaWRhdG9yIiwiaW1hZ2VTaXplcyIsImNvbmNhdCIsImZpZWxkcyIsIm1hcCIsInNpemUiLCJzaXplRmlsZW5hbWUiLCJzaXplcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF5S0E7Oztl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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dldEJhc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdVcGxvYWRUeXBlIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgZXh0cmFjdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy9leHRyYWN0VHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgbWltZVR5cGVWYWxpZGF0b3IgfSBmcm9tICcuL21pbWVUeXBlVmFsaWRhdG9yJ1xuXG5jb25zdCBsYWJlbHMgPSBleHRyYWN0VHJhbnNsYXRpb25zKFtcbiAgJ3VwbG9hZDp3aWR0aCcsXG4gICd1cGxvYWQ6aGVpZ2h0JyxcbiAgJ3VwbG9hZDpmaWxlU2l6ZScsXG4gICd1cGxvYWQ6ZmlsZU5hbWUnLFxuICAndXBsb2FkOnNpemVzJyxcbl0pXG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbkNvbmZpZ1xuICBjb25maWc6IENvbmZpZ1xufVxuXG5jb25zdCBnZXRCYXNlVXBsb2FkRmllbGRzID0gKHsgY29sbGVjdGlvbiwgY29uZmlnIH06IE9wdGlvbnMpOiBGaWVsZFtdID0+IHtcbiAgY29uc3QgdXBsb2FkT3B0aW9uczogSW5jb21pbmdVcGxvYWRUeXBlID1cbiAgICB0eXBlb2YgY29sbGVjdGlvbi51cGxvYWQgPT09ICdvYmplY3QnID8gY29sbGVjdGlvbi51cGxvYWQgOiB7fVxuXG4gIGNvbnN0IG1pbWVUeXBlOiBGaWVsZCA9IHtcbiAgICBuYW1lOiAnbWltZVR5cGUnLFxuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBhZG1pbjoge1xuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgfSxcbiAgICBsYWJlbDogJ01JTUUgVHlwZScsXG4gIH1cblxuICBjb25zdCB1cmw6IEZpZWxkID0ge1xuICAgIG5hbWU6ICd1cmwnLFxuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBhZG1pbjoge1xuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgfSxcbiAgICBsYWJlbDogJ1VSTCcsXG4gIH1cblxuICBjb25zdCB3aWR0aDogRmllbGQgPSB7XG4gICAgbmFtZTogJ3dpZHRoJyxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBhZG1pbjoge1xuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgfSxcbiAgICBsYWJlbDogbGFiZWxzWyd1cGxvYWQ6d2lkdGgnXSxcbiAgfVxuXG4gIGNvbnN0IGhlaWdodDogRmllbGQgPSB7XG4gICAgbmFtZTogJ2hlaWdodCcsXG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgYWRtaW46IHtcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0sXG4gICAgbGFiZWw6IGxhYmVsc1sndXBsb2FkOmhlaWdodCddLFxuICB9XG5cbiAgY29uc3QgZmlsZXNpemU6IEZpZWxkID0ge1xuICAgIG5hbWU6ICdmaWxlc2l6ZScsXG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgYWRtaW46IHtcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0sXG4gICAgbGFiZWw6IGxhYmVsc1sndXBsb2FkOmZpbGVTaXplJ10sXG4gIH1cblxuICBjb25zdCBmaWxlbmFtZTogRmllbGQgPSB7XG4gICAgbmFtZTogJ2ZpbGVuYW1lJyxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgYWRtaW46IHtcbiAgICAgIGRpc2FibGVCdWxrRWRpdDogdHJ1ZSxcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0sXG4gICAgaW5kZXg6IHRydWUsXG4gICAgbGFiZWw6IGxhYmVsc1sndXBsb2FkOmZpbGVOYW1lJ10sXG4gICAgdW5pcXVlOiB0cnVlLFxuICB9XG5cbiAgbGV0IHVwbG9hZEZpZWxkczogRmllbGRbXSA9IFtcbiAgICB7XG4gICAgICAuLi51cmwsXG4gICAgICBob29rczoge1xuICAgICAgICBhZnRlclJlYWQ6IFtcbiAgICAgICAgICAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhPy5maWxlbmFtZSkge1xuICAgICAgICAgICAgICBpZiAodXBsb2FkT3B0aW9ucy5zdGF0aWNVUkwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbmZpZy5zZXJ2ZXJVUkx9JHt1cGxvYWRPcHRpb25zLnN0YXRpY1VSTH0vJHtkYXRhLmZpbGVuYW1lfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYCR7dXBsb2FkT3B0aW9ucy5zdGF0aWNVUkx9LyR7ZGF0YS5maWxlbmFtZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGZpbGVuYW1lLFxuICAgIG1pbWVUeXBlLFxuICAgIGZpbGVzaXplLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgXVxuXG4gIGlmICh1cGxvYWRPcHRpb25zLm1pbWVUeXBlcykge1xuICAgIG1pbWVUeXBlLnZhbGlkYXRlID0gbWltZVR5cGVWYWxpZGF0b3IodXBsb2FkT3B0aW9ucy5taW1lVHlwZXMpXG4gIH1cblxuICAvLyBBZGQgZm9jYWwgcG9pbnQgZmllbGRzIGlmIG5vdCBkaXNhYmxlZFxuICBpZiAoXG4gICAgdXBsb2FkT3B0aW9ucy5mb2NhbFBvaW50ICE9PSBmYWxzZSAmJlxuICAgICh1cGxvYWRPcHRpb25zLmltYWdlU2l6ZXMgfHwgdXBsb2FkT3B0aW9ucy5yZXNpemVPcHRpb25zKVxuICApIHtcbiAgICB1cGxvYWRGaWVsZHMgPSB1cGxvYWRGaWVsZHMuY29uY2F0KFxuICAgICAgWydmb2NhbFgnLCAnZm9jYWxZJ10ubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICBhZG1pbjoge1xuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIGlmICh1cGxvYWRPcHRpb25zLmltYWdlU2l6ZXMpIHtcbiAgICB1cGxvYWRGaWVsZHMgPSB1cGxvYWRGaWVsZHMuY29uY2F0KFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NpemVzJyxcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogdXBsb2FkT3B0aW9ucy5pbWFnZVNpemVzLm1hcCgoc2l6ZSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzaXplLm5hbWUsXG4gICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICBhZG1pbjoge1xuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnVybCxcbiAgICAgICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgICAgICBhZnRlclJlYWQ6IFtcbiAgICAgICAgICAgICAgICAgICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplRmlsZW5hbWUgPSBkYXRhPy5zaXplcz8uW3NpemUubmFtZV0/LmZpbGVuYW1lXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVGaWxlbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGxvYWRPcHRpb25zLnN0YXRpY1VSTC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb25maWcuc2VydmVyVVJMfSR7dXBsb2FkT3B0aW9ucy5zdGF0aWNVUkx9LyR7c2l6ZUZpbGVuYW1lfWBcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3VwbG9hZE9wdGlvbnMuc3RhdGljVVJMfS8ke3NpemVGaWxlbmFtZX1gXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgbWltZVR5cGUsXG4gICAgICAgICAgICBmaWxlc2l6ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uZmlsZW5hbWUsXG4gICAgICAgICAgICAgIHVuaXF1ZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbGFiZWw6IHNpemUubmFtZSxcbiAgICAgICAgfSkpLFxuICAgICAgICBsYWJlbDogbGFiZWxzWyd1cGxvYWQ6c2l6ZXMnXSxcbiAgICAgIH0sXG4gICAgXSlcbiAgfVxuXG4gIHJldHVybiB1cGxvYWRGaWVsZHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QmFzZVVwbG9hZEZpZWxkc1xuIl0sIm5hbWVzIjpbImxhYmVscyIsImV4dHJhY3RUcmFuc2xhdGlvbnMiLCJnZXRCYXNlVXBsb2FkRmllbGRzIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsInVwbG9hZE9wdGlvbnMiLCJ1cGxvYWQiLCJtaW1lVHlwZSIsIm5hbWUiLCJ0eXBlIiwiYWRtaW4iLCJoaWRkZW4iLCJyZWFkT25seSIsImxhYmVsIiwidXJsIiwid2lkdGgiLCJoZWlnaHQiLCJmaWxlc2l6ZSIsImZpbGVuYW1lIiwiZGlzYWJsZUJ1bGtFZGl0IiwiaW5kZXgiLCJ1bmlxdWUiLCJ1cGxvYWRGaWVsZHMiLCJob29rcyIsImFmdGVyUmVhZCIsImRhdGEiLCJzdGF0aWNVUkwiLCJzdGFydHNXaXRoIiwic2VydmVyVVJMIiwidW5kZWZpbmVkIiwibWltZVR5cGVzIiwidmFsaWRhdGUiLCJtaW1lVHlwZVZhbGlkYXRvciIsImZvY2FsUG9pbnQiLCJpbWFnZVNpemVzIiwicmVzaXplT3B0aW9ucyIsImNvbmNhdCIsIm1hcCIsImZpZWxkcyIsInNpemUiLCJzaXplRmlsZW5hbWUiLCJzaXplcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE0TEE7OztlQUFBOzs7cUNBdkxvQzttQ0FDRjtBQUVsQyxNQUFNQSxTQUFTQyxJQUFBQSx3Q0FBbUIsRUFBQztJQUNqQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFPRCxNQUFNQyxzQkFBc0IsQ0FBQyxFQUFFQyxVQUFVLEVBQUVDLE1BQU0sRUFBVztJQUMxRCxNQUFNQyxnQkFDSixPQUFPRixXQUFXRyxNQUFNLEtBQUssV0FBV0gsV0FBV0csTUFBTSxHQUFHLENBQUM7SUFFL0QsTUFBTUMsV0FBa0I7UUFDdEJDLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsVUFBVTtRQUNaO1FBQ0FDLE9BQU87SUFDVDtJQUVBLE1BQU1DLE1BQWE7UUFDakJOLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsVUFBVTtRQUNaO1FBQ0FDLE9BQU87SUFDVDtJQUVBLE1BQU1FLFFBQWU7UUFDbkJQLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMs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