@merchi/product-form 1.19.12
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.
- package/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- package/package.json +93 -0
|
@@ -0,0 +1,685 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
5
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
6
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
7
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
8
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
9
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
11
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
15
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
16
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
17
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
18
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
19
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
20
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
21
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
22
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
23
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
24
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
25
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
26
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
27
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
28
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
29
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
30
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
31
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
32
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
33
|
+
import * as React from 'react';
|
|
34
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
35
|
+
import { createPortal } from 'react-dom';
|
|
36
|
+
import { FaArrowDown, FaArrowUp, FaCheck, FaFont, FaImage, FaLayerGroup, FaLock, FaPlus, FaUnlock, FaTimes, FaTrash } from 'react-icons/fa';
|
|
37
|
+
import { CgSpinner } from 'react-icons/cg';
|
|
38
|
+
import { useMerchiFormContext } from '../../context/MerchiProductFormProvider';
|
|
39
|
+
import { createObjectId, designGroupCount, detachField, fitTextBox, productHasVariationGroups, seedOrSyncCanvas, templatesForGroup, variationsForGroup } from '../../utils/draftTemplates';
|
|
40
|
+
import { loadDrafts, pruneDrafts, saveDrafts, savedPreview, upsertGroupTemplateDraft } from '../../utils/draftStorage';
|
|
41
|
+
import { exportDraftPngs, templateImageSources } from '../../utils/draftExport';
|
|
42
|
+
import { DEFAULT_DRAFT_FONT, DRAFT_TEXT_FONTS, cssFontFamily, ensureDraftFonts } from '../../utils/draftFonts';
|
|
43
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
44
|
+
var DraftCanvas = /*#__PURE__*/React.lazy(function () {
|
|
45
|
+
return import('./DraftCanvas');
|
|
46
|
+
});
|
|
47
|
+
var DraftCanvasBoundary = /*#__PURE__*/function (_React$Component) {
|
|
48
|
+
function DraftCanvasBoundary(props) {
|
|
49
|
+
var _this;
|
|
50
|
+
_classCallCheck(this, DraftCanvasBoundary);
|
|
51
|
+
_this = _callSuper(this, DraftCanvasBoundary, [props]);
|
|
52
|
+
_this.state = {
|
|
53
|
+
error: null
|
|
54
|
+
};
|
|
55
|
+
return _this;
|
|
56
|
+
}
|
|
57
|
+
_inherits(DraftCanvasBoundary, _React$Component);
|
|
58
|
+
return _createClass(DraftCanvasBoundary, [{
|
|
59
|
+
key: "render",
|
|
60
|
+
value: function render() {
|
|
61
|
+
if (this.state.error) {
|
|
62
|
+
return /*#__PURE__*/_jsx("div", {
|
|
63
|
+
className: "merchi-product-draft-canvas-fallback",
|
|
64
|
+
children: this.state.error
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return this.props.children;
|
|
68
|
+
}
|
|
69
|
+
}], [{
|
|
70
|
+
key: "getDerivedStateFromError",
|
|
71
|
+
value: function getDerivedStateFromError(error) {
|
|
72
|
+
return {
|
|
73
|
+
error: error instanceof Error ? error.message : 'Canvas failed to load'
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}]);
|
|
77
|
+
}(React.Component);
|
|
78
|
+
function stopBubble(event) {
|
|
79
|
+
event.stopPropagation();
|
|
80
|
+
}
|
|
81
|
+
function templateSrc(template, apiUrl) {
|
|
82
|
+
return templateImageSources(template, apiUrl);
|
|
83
|
+
}
|
|
84
|
+
function readFileAsDataUrl(file) {
|
|
85
|
+
return new Promise(function (resolve, reject) {
|
|
86
|
+
var reader = new FileReader();
|
|
87
|
+
reader.onload = function () {
|
|
88
|
+
return resolve(String(reader.result || ''));
|
|
89
|
+
};
|
|
90
|
+
reader.onerror = function () {
|
|
91
|
+
return reject(reader.error);
|
|
92
|
+
};
|
|
93
|
+
reader.readAsDataURL(file);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export default function DraftDesignerSheet(_ref) {
|
|
97
|
+
var open = _ref.open,
|
|
98
|
+
_ref$initialGroupInde = _ref.initialGroupIndex,
|
|
99
|
+
initialGroupIndex = _ref$initialGroupInde === void 0 ? 0 : _ref$initialGroupInde,
|
|
100
|
+
onClose = _ref.onClose,
|
|
101
|
+
onSaved = _ref.onSaved;
|
|
102
|
+
var _useMerchiFormContext = useMerchiFormContext(),
|
|
103
|
+
apiUrl = _useMerchiFormContext.apiUrl,
|
|
104
|
+
classNameDraftSheet = _useMerchiFormContext.classNameDraftSheet,
|
|
105
|
+
hookForm = _useMerchiFormContext.hookForm,
|
|
106
|
+
product = _useMerchiFormContext.product;
|
|
107
|
+
var formValues = hookForm.watch();
|
|
108
|
+
var hasGroups = productHasVariationGroups(product);
|
|
109
|
+
var groupCount = designGroupCount(product, formValues);
|
|
110
|
+
var _useState = useState(initialGroupIndex),
|
|
111
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
112
|
+
groupIndex = _useState2[0],
|
|
113
|
+
setGroupIndex = _useState2[1];
|
|
114
|
+
var _useState3 = useState(0),
|
|
115
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
116
|
+
templateIndex = _useState4[0],
|
|
117
|
+
setTemplateIndex = _useState4[1];
|
|
118
|
+
var _useState5 = useState({
|
|
119
|
+
width: 1000,
|
|
120
|
+
height: 1000,
|
|
121
|
+
objects: []
|
|
122
|
+
}),
|
|
123
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
124
|
+
state = _useState6[0],
|
|
125
|
+
setState = _useState6[1];
|
|
126
|
+
var _useState7 = useState(null),
|
|
127
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
128
|
+
selectedId = _useState8[0],
|
|
129
|
+
setSelectedId = _useState8[1];
|
|
130
|
+
var _useState9 = useState(null),
|
|
131
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
132
|
+
editingTextId = _useState0[0],
|
|
133
|
+
setEditingTextId = _useState0[1];
|
|
134
|
+
var _useState1 = useState(false),
|
|
135
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
136
|
+
layersOpen = _useState10[0],
|
|
137
|
+
setLayersOpen = _useState10[1];
|
|
138
|
+
var _useState11 = useState(false),
|
|
139
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
140
|
+
saving = _useState12[0],
|
|
141
|
+
setSaving = _useState12[1];
|
|
142
|
+
var _useState13 = useState(null),
|
|
143
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
144
|
+
error = _useState14[0],
|
|
145
|
+
setError = _useState14[1];
|
|
146
|
+
var fileInputRef = useRef(null);
|
|
147
|
+
var canvasRef = useRef(null);
|
|
148
|
+
var templates = useMemo(function () {
|
|
149
|
+
var _formValues$variation;
|
|
150
|
+
return templatesForGroup(product, (formValues === null || formValues === void 0 ? void 0 : formValues.variations) || [], (formValues === null || formValues === void 0 || (_formValues$variation = formValues.variationsGroups) === null || _formValues$variation === void 0 || (_formValues$variation = _formValues$variation[groupIndex]) === null || _formValues$variation === void 0 ? void 0 : _formValues$variation.variations) || []);
|
|
151
|
+
}, [product, formValues, groupIndex]);
|
|
152
|
+
var template = templates[Math.min(templateIndex, templates.length - 1)] || templates[0];
|
|
153
|
+
useEffect(function () {
|
|
154
|
+
if (open) setGroupIndex(initialGroupIndex);
|
|
155
|
+
}, [open, initialGroupIndex]);
|
|
156
|
+
useEffect(function () {
|
|
157
|
+
if (open) ensureDraftFonts();
|
|
158
|
+
}, [open]);
|
|
159
|
+
var variationSyncKey = JSON.stringify(variationsForGroup(formValues, groupIndex).map(function (variation) {
|
|
160
|
+
var _variation$variationF;
|
|
161
|
+
return {
|
|
162
|
+
id: variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.id,
|
|
163
|
+
value: variation === null || variation === void 0 ? void 0 : variation.value,
|
|
164
|
+
files: ((variation === null || variation === void 0 ? void 0 : variation.variationFiles) || []).map(function (file) {
|
|
165
|
+
return (file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.id);
|
|
166
|
+
})
|
|
167
|
+
};
|
|
168
|
+
}));
|
|
169
|
+
useEffect(function () {
|
|
170
|
+
if (!open || !template) return;
|
|
171
|
+
var drafts = loadDrafts(product.id);
|
|
172
|
+
var saved = savedPreview(drafts, groupIndex, template.id);
|
|
173
|
+
var variations = variationsForGroup(formValues, groupIndex);
|
|
174
|
+
setState(seedOrSyncCanvas((saved === null || saved === void 0 ? void 0 : saved.canvasJson) || null, template, variations));
|
|
175
|
+
setSelectedId(null);
|
|
176
|
+
setEditingTextId(null);
|
|
177
|
+
setError(null);
|
|
178
|
+
// Reload the saved canvas when switching group/template, not on every keystroke.
|
|
179
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
180
|
+
}, [open, groupIndex, template === null || template === void 0 ? void 0 : template.id, product === null || product === void 0 ? void 0 : product.id]);
|
|
181
|
+
useEffect(function () {
|
|
182
|
+
if (!open || !template) return;
|
|
183
|
+
var variations = variationsForGroup(formValues, groupIndex);
|
|
184
|
+
setState(function (current) {
|
|
185
|
+
var next = seedOrSyncCanvas(current, template, variations);
|
|
186
|
+
var same = current.width === next.width && current.height === next.height && current.objects.length === next.objects.length && current.objects.every(function (obj, index) {
|
|
187
|
+
var other = next.objects[index];
|
|
188
|
+
return obj.id === other.id && obj.text === other.text && obj.src === other.src && obj.fill === other.fill && obj.merchiFieldId === other.merchiFieldId;
|
|
189
|
+
});
|
|
190
|
+
return same ? current : next;
|
|
191
|
+
});
|
|
192
|
+
}, [open, variationSyncKey, template === null || template === void 0 ? void 0 : template.id, groupIndex]);
|
|
193
|
+
var selected = state.objects.find(function (obj) {
|
|
194
|
+
return obj.id === selectedId;
|
|
195
|
+
}) || null;
|
|
196
|
+
function patchSelected(patch) {
|
|
197
|
+
if (!selectedId) return;
|
|
198
|
+
setState(function (current) {
|
|
199
|
+
return _objectSpread(_objectSpread({}, current), {}, {
|
|
200
|
+
objects: current.objects.map(function (obj) {
|
|
201
|
+
if (obj.id !== selectedId) return obj;
|
|
202
|
+
var next = _objectSpread(_objectSpread({}, obj), patch);
|
|
203
|
+
if (next.type === 'text' && ('text' in patch || 'fontSize' in patch || 'fontFamily' in patch)) {
|
|
204
|
+
return _objectSpread(_objectSpread({}, next), fitTextBox(next));
|
|
205
|
+
}
|
|
206
|
+
return next;
|
|
207
|
+
})
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
function addText() {
|
|
212
|
+
var id = createObjectId();
|
|
213
|
+
var drafted = {
|
|
214
|
+
id: id,
|
|
215
|
+
type: 'text',
|
|
216
|
+
x: state.width * 0.5,
|
|
217
|
+
y: state.height * 0.35,
|
|
218
|
+
width: 1,
|
|
219
|
+
height: 1,
|
|
220
|
+
rotation: 0,
|
|
221
|
+
scaleX: 1,
|
|
222
|
+
scaleY: 1,
|
|
223
|
+
text: 'Your text',
|
|
224
|
+
fontSize: 56,
|
|
225
|
+
fontFamily: DEFAULT_DRAFT_FONT,
|
|
226
|
+
fill: '#111111',
|
|
227
|
+
align: 'left'
|
|
228
|
+
};
|
|
229
|
+
var obj = _objectSpread(_objectSpread({}, drafted), fitTextBox(drafted));
|
|
230
|
+
setState(function (current) {
|
|
231
|
+
return _objectSpread(_objectSpread({}, current), {}, {
|
|
232
|
+
objects: [].concat(_toConsumableArray(current.objects), [obj])
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
setSelectedId(id);
|
|
236
|
+
setEditingTextId(id);
|
|
237
|
+
}
|
|
238
|
+
function addImage(_x) {
|
|
239
|
+
return _addImage.apply(this, arguments);
|
|
240
|
+
}
|
|
241
|
+
function _addImage() {
|
|
242
|
+
_addImage = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(file) {
|
|
243
|
+
var src, id, obj;
|
|
244
|
+
return _regenerator().w(function (_context) {
|
|
245
|
+
while (1) switch (_context.n) {
|
|
246
|
+
case 0:
|
|
247
|
+
_context.n = 1;
|
|
248
|
+
return readFileAsDataUrl(file);
|
|
249
|
+
case 1:
|
|
250
|
+
src = _context.v;
|
|
251
|
+
id = createObjectId();
|
|
252
|
+
obj = {
|
|
253
|
+
id: id,
|
|
254
|
+
type: 'image',
|
|
255
|
+
x: state.width * 0.2,
|
|
256
|
+
y: state.height * 0.2,
|
|
257
|
+
width: state.width * 0.6,
|
|
258
|
+
height: state.height * 0.6,
|
|
259
|
+
rotation: 0,
|
|
260
|
+
scaleX: 1,
|
|
261
|
+
scaleY: 1,
|
|
262
|
+
src: src,
|
|
263
|
+
lockAspectRatio: true
|
|
264
|
+
};
|
|
265
|
+
setState(function (current) {
|
|
266
|
+
return _objectSpread(_objectSpread({}, current), {}, {
|
|
267
|
+
objects: [].concat(_toConsumableArray(current.objects), [obj])
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
setSelectedId(id);
|
|
271
|
+
case 2:
|
|
272
|
+
return _context.a(2);
|
|
273
|
+
}
|
|
274
|
+
}, _callee);
|
|
275
|
+
}));
|
|
276
|
+
return _addImage.apply(this, arguments);
|
|
277
|
+
}
|
|
278
|
+
function removeSelected() {
|
|
279
|
+
if (!selectedId) return;
|
|
280
|
+
setState(function (current) {
|
|
281
|
+
return detachField(current, selectedId);
|
|
282
|
+
});
|
|
283
|
+
setSelectedId(null);
|
|
284
|
+
setEditingTextId(null);
|
|
285
|
+
}
|
|
286
|
+
function moveLayer(direction) {
|
|
287
|
+
if (!selectedId) return;
|
|
288
|
+
setState(function (current) {
|
|
289
|
+
var index = current.objects.findIndex(function (obj) {
|
|
290
|
+
return obj.id === selectedId;
|
|
291
|
+
});
|
|
292
|
+
var nextIndex = index + direction;
|
|
293
|
+
if (index < 0 || nextIndex < 0 || nextIndex >= current.objects.length) {
|
|
294
|
+
return current;
|
|
295
|
+
}
|
|
296
|
+
var objects = _toConsumableArray(current.objects);
|
|
297
|
+
var _objects$splice = objects.splice(index, 1),
|
|
298
|
+
_objects$splice2 = _slicedToArray(_objects$splice, 1),
|
|
299
|
+
item = _objects$splice2[0];
|
|
300
|
+
objects.splice(nextIndex, 0, item);
|
|
301
|
+
return _objectSpread(_objectSpread({}, current), {}, {
|
|
302
|
+
objects: objects
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
function handleDone() {
|
|
307
|
+
return _handleDone.apply(this, arguments);
|
|
308
|
+
}
|
|
309
|
+
function _handleDone() {
|
|
310
|
+
_handleDone = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
311
|
+
var pngs, drafts, next, _t, _t2;
|
|
312
|
+
return _regenerator().w(function (_context2) {
|
|
313
|
+
while (1) switch (_context2.p = _context2.n) {
|
|
314
|
+
case 0:
|
|
315
|
+
if (!(!template || !(product !== null && product !== void 0 && product.id))) {
|
|
316
|
+
_context2.n = 1;
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
return _context2.a(2);
|
|
320
|
+
case 1:
|
|
321
|
+
setSaving(true);
|
|
322
|
+
setError(null);
|
|
323
|
+
_context2.p = 2;
|
|
324
|
+
if (!canvasRef.current) {
|
|
325
|
+
_context2.n = 4;
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
_context2.n = 3;
|
|
329
|
+
return canvasRef.current.exportPngs();
|
|
330
|
+
case 3:
|
|
331
|
+
_t = _context2.v;
|
|
332
|
+
_context2.n = 6;
|
|
333
|
+
break;
|
|
334
|
+
case 4:
|
|
335
|
+
_context2.n = 5;
|
|
336
|
+
return exportDraftPngs(state, templateImageSources(template, apiUrl), apiUrl);
|
|
337
|
+
case 5:
|
|
338
|
+
_t = _context2.v;
|
|
339
|
+
case 6:
|
|
340
|
+
pngs = _t;
|
|
341
|
+
drafts = pruneDrafts(loadDrafts(product.id), designGroupCount(product, hookForm.getValues()));
|
|
342
|
+
next = upsertGroupTemplateDraft(drafts, product.id, groupIndex, _objectSpread({
|
|
343
|
+
templateId: template.id,
|
|
344
|
+
canvasJson: state
|
|
345
|
+
}, pngs));
|
|
346
|
+
saveDrafts(product.id, next);
|
|
347
|
+
onSaved();
|
|
348
|
+
_context2.n = 8;
|
|
349
|
+
break;
|
|
350
|
+
case 7:
|
|
351
|
+
_context2.p = 7;
|
|
352
|
+
_t2 = _context2.v;
|
|
353
|
+
setError((_t2 === null || _t2 === void 0 ? void 0 : _t2.message) || 'Could not save draft');
|
|
354
|
+
case 8:
|
|
355
|
+
_context2.p = 8;
|
|
356
|
+
setSaving(false);
|
|
357
|
+
return _context2.f(8);
|
|
358
|
+
case 9:
|
|
359
|
+
return _context2.a(2);
|
|
360
|
+
}
|
|
361
|
+
}, _callee2, null, [[2, 7, 8, 9]]);
|
|
362
|
+
}));
|
|
363
|
+
return _handleDone.apply(this, arguments);
|
|
364
|
+
}
|
|
365
|
+
if (!open || typeof document === 'undefined') return null;
|
|
366
|
+
return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs("div", {
|
|
367
|
+
className: "".concat(classNameDraftSheet || '', " merchi-product-draft-sheet"),
|
|
368
|
+
role: "dialog",
|
|
369
|
+
"aria-modal": "true",
|
|
370
|
+
"aria-label": "Design artwork",
|
|
371
|
+
onMouseDown: stopBubble,
|
|
372
|
+
onClick: stopBubble,
|
|
373
|
+
children: [/*#__PURE__*/_jsxs("header", {
|
|
374
|
+
className: "merchi-product-draft-sheet-header",
|
|
375
|
+
children: [/*#__PURE__*/_jsx("button", {
|
|
376
|
+
type: "button",
|
|
377
|
+
className: "merchi-product-draft-icon-btn",
|
|
378
|
+
onClick: onClose,
|
|
379
|
+
"aria-label": "Close designer",
|
|
380
|
+
children: /*#__PURE__*/_jsx(FaTimes, {})
|
|
381
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
382
|
+
className: "merchi-product-draft-sheet-title",
|
|
383
|
+
children: [/*#__PURE__*/_jsx("strong", {
|
|
384
|
+
children: (template === null || template === void 0 ? void 0 : template.name) || 'Artwork'
|
|
385
|
+
}), hasGroups ? /*#__PURE__*/_jsxs("span", {
|
|
386
|
+
children: ["Group ", groupIndex + 1]
|
|
387
|
+
}) : null]
|
|
388
|
+
}), /*#__PURE__*/_jsxs("button", {
|
|
389
|
+
type: "button",
|
|
390
|
+
className: "merchi-product-draft-done-btn",
|
|
391
|
+
onClick: handleDone,
|
|
392
|
+
disabled: saving,
|
|
393
|
+
children: [saving ? /*#__PURE__*/_jsx(CgSpinner, {
|
|
394
|
+
className: "animate_spin"
|
|
395
|
+
}) : /*#__PURE__*/_jsx(FaCheck, {}), "Done"]
|
|
396
|
+
})]
|
|
397
|
+
}), hasGroups && groupCount > 1 ? /*#__PURE__*/_jsx("div", {
|
|
398
|
+
className: "merchi-product-draft-chips",
|
|
399
|
+
role: "tablist",
|
|
400
|
+
"aria-label": "Groups",
|
|
401
|
+
children: Array.from({
|
|
402
|
+
length: groupCount
|
|
403
|
+
}, function (_, index) {
|
|
404
|
+
return /*#__PURE__*/_jsxs("button", {
|
|
405
|
+
type: "button",
|
|
406
|
+
role: "tab",
|
|
407
|
+
"aria-selected": index === groupIndex,
|
|
408
|
+
className: "merchi-product-draft-chip".concat(index === groupIndex ? ' is-active' : ''),
|
|
409
|
+
onClick: function onClick() {
|
|
410
|
+
setGroupIndex(index);
|
|
411
|
+
setTemplateIndex(0);
|
|
412
|
+
},
|
|
413
|
+
children: ["Group ", index + 1]
|
|
414
|
+
}, index);
|
|
415
|
+
})
|
|
416
|
+
}) : null, templates.length > 1 ? /*#__PURE__*/_jsx("div", {
|
|
417
|
+
className: "merchi-product-draft-chips",
|
|
418
|
+
role: "tablist",
|
|
419
|
+
"aria-label": "Templates",
|
|
420
|
+
children: templates.map(function (item, index) {
|
|
421
|
+
var _item$id;
|
|
422
|
+
return /*#__PURE__*/_jsx("button", {
|
|
423
|
+
type: "button",
|
|
424
|
+
role: "tab",
|
|
425
|
+
"aria-selected": item.id === (template === null || template === void 0 ? void 0 : template.id),
|
|
426
|
+
className: "merchi-product-draft-chip".concat(item.id === (template === null || template === void 0 ? void 0 : template.id) ? ' is-active' : ''),
|
|
427
|
+
onClick: function onClick() {
|
|
428
|
+
return setTemplateIndex(index);
|
|
429
|
+
},
|
|
430
|
+
children: item.name || "Template ".concat(index + 1)
|
|
431
|
+
}, (_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : index);
|
|
432
|
+
})
|
|
433
|
+
}) : null, /*#__PURE__*/_jsxs("div", {
|
|
434
|
+
className: "merchi-product-draft-main",
|
|
435
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
436
|
+
className: "merchi-product-draft-sheet-body",
|
|
437
|
+
children: [/*#__PURE__*/_jsx(DraftCanvasBoundary, {
|
|
438
|
+
children: /*#__PURE__*/_jsx(React.Suspense, {
|
|
439
|
+
fallback: /*#__PURE__*/_jsx("div", {
|
|
440
|
+
className: "merchi-product-draft-canvas-fallback",
|
|
441
|
+
children: "Loading canvas\u2026"
|
|
442
|
+
}),
|
|
443
|
+
children: /*#__PURE__*/_jsx(DraftCanvas, {
|
|
444
|
+
ref: canvasRef,
|
|
445
|
+
state: state,
|
|
446
|
+
template: template,
|
|
447
|
+
templateSrc: templateSrc(template, apiUrl),
|
|
448
|
+
selectedId: selectedId,
|
|
449
|
+
onSelect: setSelectedId,
|
|
450
|
+
onChange: setState,
|
|
451
|
+
onEditText: function onEditText(id) {
|
|
452
|
+
setLayersOpen(false);
|
|
453
|
+
setSelectedId(id);
|
|
454
|
+
setEditingTextId(id);
|
|
455
|
+
}
|
|
456
|
+
})
|
|
457
|
+
})
|
|
458
|
+
}), layersOpen ? /*#__PURE__*/_jsxs("div", {
|
|
459
|
+
className: "merchi-product-draft-layers",
|
|
460
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
461
|
+
className: "merchi-product-draft-layers-head",
|
|
462
|
+
children: [/*#__PURE__*/_jsx("strong", {
|
|
463
|
+
children: "Layers"
|
|
464
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
465
|
+
type: "button",
|
|
466
|
+
onClick: function onClick() {
|
|
467
|
+
return setLayersOpen(false);
|
|
468
|
+
},
|
|
469
|
+
"aria-label": "Close layers",
|
|
470
|
+
children: /*#__PURE__*/_jsx(FaTimes, {})
|
|
471
|
+
})]
|
|
472
|
+
}), state.objects.length === 0 ? /*#__PURE__*/_jsx("p", {
|
|
473
|
+
children: "No objects yet. Add text or an image."
|
|
474
|
+
}) : _toConsumableArray(state.objects).reverse().map(function (obj, index) {
|
|
475
|
+
return /*#__PURE__*/_jsxs("button", {
|
|
476
|
+
type: "button",
|
|
477
|
+
className: "merchi-product-draft-layer".concat(obj.id === selectedId ? ' is-active' : ''),
|
|
478
|
+
onClick: function onClick() {
|
|
479
|
+
setSelectedId(obj.id);
|
|
480
|
+
setEditingTextId(null);
|
|
481
|
+
},
|
|
482
|
+
children: [/*#__PURE__*/_jsx(FaPlus, {
|
|
483
|
+
className: "merchi-product-draft-layer-icon"
|
|
484
|
+
}), obj.type === 'text' ? obj.text || 'Text' : obj.type === 'image' ? 'Image' : 'Base colour', /*#__PURE__*/_jsx("span", {
|
|
485
|
+
children: state.objects.length - index
|
|
486
|
+
})]
|
|
487
|
+
}, obj.id);
|
|
488
|
+
})]
|
|
489
|
+
}) : null]
|
|
490
|
+
}), error ? /*#__PURE__*/_jsx("p", {
|
|
491
|
+
className: "merchi-product-draft-error",
|
|
492
|
+
children: error
|
|
493
|
+
}) : null, /*#__PURE__*/_jsxs("aside", {
|
|
494
|
+
className: "merchi-product-draft-dock",
|
|
495
|
+
children: [selected ? /*#__PURE__*/_jsxs("div", {
|
|
496
|
+
className: "merchi-product-draft-inspector",
|
|
497
|
+
children: [selected.type === 'text' ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
498
|
+
children: [/*#__PURE__*/_jsx("textarea", {
|
|
499
|
+
className: "merchi-product-draft-text-input",
|
|
500
|
+
value: selected.text || '',
|
|
501
|
+
rows: 2,
|
|
502
|
+
autoFocus: editingTextId === selected.id,
|
|
503
|
+
"aria-label": "Edit text",
|
|
504
|
+
onChange: function onChange(e) {
|
|
505
|
+
return patchSelected({
|
|
506
|
+
text: e.target.value
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
}), /*#__PURE__*/_jsxs("label", {
|
|
510
|
+
className: "merchi-product-draft-font",
|
|
511
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
512
|
+
className: "merchi-sr-only",
|
|
513
|
+
children: "Font"
|
|
514
|
+
}), /*#__PURE__*/_jsx("select", {
|
|
515
|
+
"aria-label": "Font",
|
|
516
|
+
value: selected.fontFamily || DEFAULT_DRAFT_FONT,
|
|
517
|
+
style: {
|
|
518
|
+
fontFamily: cssFontFamily(selected.fontFamily || DEFAULT_DRAFT_FONT)
|
|
519
|
+
},
|
|
520
|
+
onChange: function onChange(e) {
|
|
521
|
+
return patchSelected({
|
|
522
|
+
fontFamily: e.target.value
|
|
523
|
+
});
|
|
524
|
+
},
|
|
525
|
+
children: DRAFT_TEXT_FONTS.map(function (font) {
|
|
526
|
+
return /*#__PURE__*/_jsx("option", {
|
|
527
|
+
value: font.value,
|
|
528
|
+
style: {
|
|
529
|
+
fontFamily: cssFontFamily(font.value)
|
|
530
|
+
},
|
|
531
|
+
children: font.label
|
|
532
|
+
}, font.value);
|
|
533
|
+
})
|
|
534
|
+
})]
|
|
535
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
536
|
+
type: "button",
|
|
537
|
+
className: "merchi-product-draft-stepper",
|
|
538
|
+
onClick: function onClick() {
|
|
539
|
+
return patchSelected({
|
|
540
|
+
fontSize: Math.max(12, (selected.fontSize || 48) - 8)
|
|
541
|
+
});
|
|
542
|
+
},
|
|
543
|
+
"aria-label": "Smaller text",
|
|
544
|
+
children: "A-"
|
|
545
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
546
|
+
type: "button",
|
|
547
|
+
className: "merchi-product-draft-stepper",
|
|
548
|
+
onClick: function onClick() {
|
|
549
|
+
return patchSelected({
|
|
550
|
+
fontSize: Math.min(240, (selected.fontSize || 48) + 8)
|
|
551
|
+
});
|
|
552
|
+
},
|
|
553
|
+
"aria-label": "Larger text",
|
|
554
|
+
children: "A+"
|
|
555
|
+
}), selected.colourFieldId != null ? /*#__PURE__*/_jsxs("label", {
|
|
556
|
+
className: "merchi-product-draft-color",
|
|
557
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
558
|
+
className: "merchi-sr-only",
|
|
559
|
+
children: "Colour"
|
|
560
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
561
|
+
type: "color",
|
|
562
|
+
value: /^#[0-9a-fA-F]{6}$/.test(selected.fill || '') ? selected.fill : '#111111',
|
|
563
|
+
onChange: function onChange(e) {
|
|
564
|
+
return patchSelected({
|
|
565
|
+
fill: e.target.value
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
})]
|
|
569
|
+
}) : null]
|
|
570
|
+
}) : null, selected.type === 'image' ? /*#__PURE__*/_jsxs("button", {
|
|
571
|
+
type: "button",
|
|
572
|
+
className: "merchi-product-draft-icon-btn".concat(selected.lockAspectRatio ? ' is-active' : ''),
|
|
573
|
+
onClick: function onClick() {
|
|
574
|
+
return patchSelected({
|
|
575
|
+
lockAspectRatio: !selected.lockAspectRatio
|
|
576
|
+
});
|
|
577
|
+
},
|
|
578
|
+
"aria-label": selected.lockAspectRatio ? 'Unlock aspect ratio' : 'Lock aspect ratio',
|
|
579
|
+
children: [selected.lockAspectRatio ? /*#__PURE__*/_jsx(FaLock, {}) : /*#__PURE__*/_jsx(FaUnlock, {}), "Ratio"]
|
|
580
|
+
}) : null, selected.type === 'rect' ? /*#__PURE__*/_jsxs("label", {
|
|
581
|
+
className: "merchi-product-draft-color",
|
|
582
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
583
|
+
className: "merchi-sr-only",
|
|
584
|
+
children: "Fill colour"
|
|
585
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
586
|
+
type: "color",
|
|
587
|
+
value: selected.fill || '#cccccc',
|
|
588
|
+
onChange: function onChange(e) {
|
|
589
|
+
return patchSelected({
|
|
590
|
+
fill: e.target.value
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
})]
|
|
594
|
+
}) : null, /*#__PURE__*/_jsx("button", {
|
|
595
|
+
type: "button",
|
|
596
|
+
className: "merchi-product-draft-icon-btn",
|
|
597
|
+
onClick: function onClick() {
|
|
598
|
+
return patchSelected({
|
|
599
|
+
scaleX: (selected.scaleX || 1) * -1
|
|
600
|
+
});
|
|
601
|
+
},
|
|
602
|
+
"aria-label": "Flip",
|
|
603
|
+
children: "Flip"
|
|
604
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
605
|
+
type: "button",
|
|
606
|
+
className: "merchi-product-draft-icon-btn",
|
|
607
|
+
onClick: function onClick() {
|
|
608
|
+
return moveLayer(1);
|
|
609
|
+
},
|
|
610
|
+
"aria-label": "Bring forward",
|
|
611
|
+
children: /*#__PURE__*/_jsx(FaArrowUp, {})
|
|
612
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
613
|
+
type: "button",
|
|
614
|
+
className: "merchi-product-draft-icon-btn",
|
|
615
|
+
onClick: function onClick() {
|
|
616
|
+
return moveLayer(-1);
|
|
617
|
+
},
|
|
618
|
+
"aria-label": "Send backward",
|
|
619
|
+
children: /*#__PURE__*/_jsx(FaArrowDown, {})
|
|
620
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
621
|
+
type: "button",
|
|
622
|
+
className: "merchi-product-draft-icon-btn is-danger",
|
|
623
|
+
onClick: removeSelected,
|
|
624
|
+
"aria-label": "Delete",
|
|
625
|
+
children: /*#__PURE__*/_jsx(FaTrash, {})
|
|
626
|
+
})]
|
|
627
|
+
}) : null, /*#__PURE__*/_jsxs("nav", {
|
|
628
|
+
className: "merchi-product-draft-toolbar",
|
|
629
|
+
"aria-label": "Design tools",
|
|
630
|
+
children: [/*#__PURE__*/_jsxs("button", {
|
|
631
|
+
type: "button",
|
|
632
|
+
onClick: function onClick() {
|
|
633
|
+
setLayersOpen(false);
|
|
634
|
+
addText();
|
|
635
|
+
},
|
|
636
|
+
children: [/*#__PURE__*/_jsx(FaFont, {}), /*#__PURE__*/_jsx("span", {
|
|
637
|
+
children: "Text"
|
|
638
|
+
})]
|
|
639
|
+
}), /*#__PURE__*/_jsxs("button", {
|
|
640
|
+
type: "button",
|
|
641
|
+
onClick: function onClick() {
|
|
642
|
+
var _fileInputRef$current;
|
|
643
|
+
setLayersOpen(false);
|
|
644
|
+
setEditingTextId(null);
|
|
645
|
+
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
646
|
+
},
|
|
647
|
+
children: [/*#__PURE__*/_jsx(FaImage, {}), /*#__PURE__*/_jsx("span", {
|
|
648
|
+
children: "Image"
|
|
649
|
+
})]
|
|
650
|
+
}), /*#__PURE__*/_jsxs("button", {
|
|
651
|
+
type: "button",
|
|
652
|
+
onClick: function onClick() {
|
|
653
|
+
setEditingTextId(null);
|
|
654
|
+
setLayersOpen(function (openNow) {
|
|
655
|
+
return !openNow;
|
|
656
|
+
});
|
|
657
|
+
},
|
|
658
|
+
children: [/*#__PURE__*/_jsx(FaLayerGroup, {}), /*#__PURE__*/_jsx("span", {
|
|
659
|
+
children: "Layers"
|
|
660
|
+
})]
|
|
661
|
+
}), /*#__PURE__*/_jsxs("button", {
|
|
662
|
+
type: "button",
|
|
663
|
+
onClick: removeSelected,
|
|
664
|
+
disabled: !selectedId,
|
|
665
|
+
children: [/*#__PURE__*/_jsx(FaTrash, {}), /*#__PURE__*/_jsx("span", {
|
|
666
|
+
children: "Delete"
|
|
667
|
+
})]
|
|
668
|
+
})]
|
|
669
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
670
|
+
ref: fileInputRef,
|
|
671
|
+
type: "file",
|
|
672
|
+
accept: "image/*",
|
|
673
|
+
className: "merchi-product-draft-file",
|
|
674
|
+
onChange: function onChange(e) {
|
|
675
|
+
var _e$target$files;
|
|
676
|
+
var file = (_e$target$files = e.target.files) === null || _e$target$files === void 0 ? void 0 : _e$target$files[0];
|
|
677
|
+
if (file) addImage(file);
|
|
678
|
+
e.target.value = '';
|
|
679
|
+
}
|
|
680
|
+
})]
|
|
681
|
+
})]
|
|
682
|
+
})]
|
|
683
|
+
}), document.body);
|
|
684
|
+
}
|
|
685
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJuIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsInRlc3QiLCJuZXh0IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkZhQXJyb3dEb3duIiwiRmFBcnJvd1VwIiwiRmFDaGVjayIsIkZhRm9udCIsIkZhSW1hZ2UiLCJGYUxheWVyR3JvdXAiLCJGYUxvY2siLCJGYVBsdXMiLCJGYVVubG9jayIsIkZhVGltZXMiLCJGYVRyYXNoIiwiQ2dTcGlubmVyIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJjcmVhdGVPYmplY3RJZCIsImRlc2lnbkdyb3VwQ291bnQiLCJkZXRhY2hGaWVsZCIsImZpdFRleHRCb3giLCJwcm9kdWN0SGFzVmFyaWF0aW9uR3JvdXBzIiwic2VlZE9yU3luY0NhbnZhcyIsInRlbXBsYXRlc0Zvckdyb3VwIiwidmFyaWF0aW9uc0Zvckdyb3VwIiwibG9hZERyYWZ0cyIsInBydW5lRHJhZnRzIiwic2F2ZURyYWZ0cyIsInNhdmVkUHJldmlldyIsInVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdCIsImV4cG9ydERyYWZ0UG5ncyIsInRlbXBsYXRlSW1hZ2VTb3VyY2VzIiwiREVGQVVMVF9EUkFGVF9GT05UIiwiRFJBRlRfVEVYVF9GT05UUyIsImNzc0ZvbnRGYW1pbHkiLCJlbnN1cmVEcmFmdEZvbnRzIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiRHJhZnRDYW52YXMiLCJsYXp5IiwiRHJhZnRDYW52YXNCb3VuZGFyeSIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwic3RhdGUiLCJlcnJvciIsInJlbmRlciIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiQ29tcG9uZW50Iiwic3RvcEJ1YmJsZSIsImV2ZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwidGVtcGxhdGVTcmMiLCJ0ZW1wbGF0ZSIsImFwaVVybCIsInJlYWRGaWxlQXNEYXRhVXJsIiwiZmlsZSIsInJlamVjdCIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwicmVhZEFzRGF0YVVSTCIsIkRyYWZ0RGVzaWduZXJTaGVldCIsIl9yZWYiLCJvcGVuIiwiX3JlZiRpbml0aWFsR3JvdXBJbmRlIiwiaW5pdGlhbEdyb3VwSW5kZXgiLCJvbkNsb3NlIiwib25TYXZlZCIsIl91c2VNZXJjaGlGb3JtQ29udGV4dCIsImNsYXNzTmFtZURyYWZ0U2hlZXQiLCJob29rRm9ybSIsInByb2R1Y3QiLCJmb3JtVmFsdWVzIiwid2F0Y2giLCJoYXNHcm91cHMiLCJncm91cENvdW50IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImdyb3VwSW5kZXgiLCJzZXRHcm91cEluZGV4IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJ0ZW1wbGF0ZUluZGV4Iiwic2V0VGVtcGxhdGVJbmRleCIsIl91c2VTdGF0ZTUiLCJ3aWR0aCIsImhlaWdodCIsIm9iamVjdHMiLCJfdXNlU3RhdGU2Iiwic2V0U3RhdGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkSWQiLCJzZXRTZWxlY3RlZElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJlZGl0aW5nVGV4dElkIiwic2V0RWRpdGluZ1RleHRJZCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImxheWVyc09wZW4iLCJzZXRMYXllcnNPcGVuIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInNhdmluZyIsInNldFNhdmluZyIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJzZXRFcnJvciIsImZpbGVJbnB1dFJlZiIsImNhbnZhc1JlZiIsInRlbXBsYXRlcyIsIl9mb3JtVmFsdWVzJHZhcmlhdGlvbiIsInZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zR3JvdXBzIiwiTWF0aCIsIm1pbiIsInZhcmlhdGlvblN5bmNLZXkiLCJKU09OIiwic3RyaW5naWZ5IiwibWFwIiwidmFyaWF0aW9uIiwiX3ZhcmlhdGlvbiR2YXJpYXRpb25GIiwiaWQiLCJ2YXJpYXRpb25GaWVsZCIsImZpbGVzIiwidmFyaWF0aW9uRmlsZXMiLCJ2aWV3VXJsIiwiZHJhZnRzIiwic2F2ZWQiLCJjYW52YXNKc29uIiwiY3VycmVudCIsInNhbWUiLCJldmVyeSIsIm9iaiIsImluZGV4Iiwib3RoZXIiLCJ0ZXh0Iiwic3JjIiwiZmlsbCIsIm1lcmNoaUZpZWxkSWQiLCJzZWxlY3RlZCIsImZpbmQiLCJwYXRjaFNlbGVjdGVkIiwicGF0Y2giLCJ0eXBlIiwiYWRkVGV4dCIsImRyYWZ0ZWQiLCJ4Iiwicm90YXRpb24iLCJzY2FsZVgiLCJzY2FsZVkiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJhbGlnbiIsImNvbmNhdCIsImFkZEltYWdlIiwiX3giLCJfYWRkSW1hZ2UiLCJfY2FsbGVlIiwiX2NvbnRleHQiLCJsb2NrQXNwZWN0UmF0aW8iLCJyZW1vdmVTZWxlY3RlZCIsIm1vdmVMYXllciIsImRpcmVjdGlvbiIsImZpbmRJbmRleCIsIm5leHRJbmRleCIsIl9vYmplY3RzJHNwbGljZSIsInNwbGljZSIsIl9vYmplY3RzJHNwbGljZTIiLCJpdGVtIiwiaGFuZGxlRG9uZSIsIl9oYW5kbGVEb25lIiwiX2NhbGxlZTIiLCJwbmdzIiwiX3QiLCJfdDIiLCJfY29udGV4dDIiLCJleHBvcnRQbmdzIiwiZ2V0VmFsdWVzIiwidGVtcGxhdGVJZCIsImRvY3VtZW50Iiwicm9sZSIsIm9uTW91c2VEb3duIiwib25DbGljayIsImRpc2FibGVkIiwiXyIsIl9pdGVtJGlkIiwiU3VzcGVuc2UiLCJmYWxsYmFjayIsInJlZiIsIm9uU2VsZWN0Iiwib25DaGFuZ2UiLCJvbkVkaXRUZXh0IiwicmV2ZXJzZSIsInJvd3MiLCJhdXRvRm9jdXMiLCJ0YXJnZXQiLCJzdHlsZSIsImZvbnQiLCJsYWJlbCIsIm1heCIsImNvbG91ckZpZWxkSWQiLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsIm9wZW5Ob3ciLCJhY2NlcHQiLCJfZSR0YXJnZXQkZmlsZXMiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZHJhZnRzL0RyYWZ0RGVzaWduZXJTaGVldC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7XG4gIEZhQXJyb3dEb3duLFxuICBGYUFycm93VXAsXG4gIEZhQ2hlY2ssXG4gIEZhRm9udCxcbiAgRmFJbWFnZSxcbiAgRmFMYXllckdyb3VwLFxuICBGYUxvY2ssXG4gIEZhUGx1cyxcbiAgRmFVbmxvY2ssXG4gIEZhVGltZXMsXG4gIEZhVHJhc2gsXG59IGZyb20gJ3JlYWN0LWljb25zL2ZhJztcbmltcG9ydCB7IENnU3Bpbm5lciB9IGZyb20gJ3JlYWN0LWljb25zL2NnJztcbmltcG9ydCB7IHVzZU1lcmNoaUZvcm1Db250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9NZXJjaGlQcm9kdWN0Rm9ybVByb3ZpZGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZU9iamVjdElkLFxuICBkZXNpZ25Hcm91cENvdW50LFxuICBkZXRhY2hGaWVsZCxcbiAgZml0VGV4dEJveCxcbiAgcHJvZHVjdEhhc1ZhcmlhdGlvbkdyb3VwcyxcbiAgc2VlZE9yU3luY0NhbnZhcyxcbiAgdGVtcGxhdGVzRm9yR3JvdXAsXG4gIHZhcmlhdGlvbnNGb3JHcm91cCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZHJhZnRUZW1wbGF0ZXMnO1xuaW1wb3J0IHtcbiAgbG9hZERyYWZ0cyxcbiAgcHJ1bmVEcmFmdHMsXG4gIHNhdmVEcmFmdHMsXG4gIHNhdmVkUHJldmlldyxcbiAgdXBzZXJ0R3JvdXBUZW1wbGF0ZURyYWZ0LFxufSBmcm9tICcuLi8uLi91dGlscy9kcmFmdFN0b3JhZ2UnO1xuaW1wb3J0IHsgZXhwb3J0RHJhZnRQbmdzLCB0ZW1wbGF0ZUltYWdlU291cmNlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2RyYWZ0RXhwb3J0JztcbmltcG9ydCB7XG4gIERyYWZ0Q2FudmFzSGFuZGxlLFxuICBEcmFmdENhbnZhc09iamVjdCxcbiAgRHJhZnRDYW52YXNTdGF0ZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9EUkFGVF9GT05ULFxuICBEUkFGVF9URVhUX0ZPTlRTLFxuICBjc3NGb250RmFtaWx5LFxuICBlbnN1cmVEcmFmdEZvbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9kcmFmdEZvbnRzJztcblxuY29uc3QgRHJhZnRDYW52YXMgPSBSZWFjdC5sYXp5KCgpID0+IGltcG9ydCgnLi9EcmFmdENhbnZhcycpKTtcblxuY2xhc3MgRHJhZnRDYW52YXNCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0sXG4gIHsgZXJyb3I6IHN0cmluZyB8IG51bGwgfVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBlcnJvcjogbnVsbCB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogdW5rbm93bikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnQ2FudmFzIGZhaWxlZCB0byBsb2FkJyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2FudmFzLWZhbGxiYWNrJz5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wQnViYmxlKGV2ZW50OiBSZWFjdC5TeW50aGV0aWNFdmVudCkge1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgb3BlbjogYm9vbGVhbjtcbiAgaW5pdGlhbEdyb3VwSW5kZXg/OiBudW1iZXI7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9uU2F2ZWQ6ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHRlbXBsYXRlU3JjKHRlbXBsYXRlOiBhbnksIGFwaVVybD86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRlbXBsYXRlSW1hZ2VTb3VyY2VzKHRlbXBsYXRlLCBhcGlVcmwpO1xufVxuXG5mdW5jdGlvbiByZWFkRmlsZUFzRGF0YVVybChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKFN0cmluZyhyZWFkZXIucmVzdWx0IHx8ICcnKSk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyYWZ0RGVzaWduZXJTaGVldCh7XG4gIG9wZW4sXG4gIGluaXRpYWxHcm91cEluZGV4ID0gMCxcbiAgb25DbG9zZSxcbiAgb25TYXZlZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGlVcmwsXG4gICAgY2xhc3NOYW1lRHJhZnRTaGVldCxcbiAgICBob29rRm9ybSxcbiAgICBwcm9kdWN0LFxuICB9ID0gdXNlTWVyY2hpRm9ybUNvbnRleHQoKTtcbiAgY29uc3QgZm9ybVZhbHVlcyA9IGhvb2tGb3JtLndhdGNoKCk7XG4gIGNvbnN0IGhhc0dyb3VwcyA9IHByb2R1Y3RIYXNWYXJpYXRpb25Hcm91cHMocHJvZHVjdCk7XG4gIGNvbnN0IGdyb3VwQ291bnQgPSBkZXNpZ25Hcm91cENvdW50KHByb2R1Y3QsIGZvcm1WYWx1ZXMpO1xuICBjb25zdCBbZ3JvdXBJbmRleCwgc2V0R3JvdXBJbmRleF0gPSB1c2VTdGF0ZShpbml0aWFsR3JvdXBJbmRleCk7XG4gIGNvbnN0IFt0ZW1wbGF0ZUluZGV4LCBzZXRUZW1wbGF0ZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlPERyYWZ0Q2FudmFzU3RhdGU+KHtcbiAgICB3aWR0aDogMTAwMCxcbiAgICBoZWlnaHQ6IDEwMDAsXG4gICAgb2JqZWN0czogW10sXG4gIH0pO1xuICBjb25zdCBbc2VsZWN0ZWRJZCwgc2V0U2VsZWN0ZWRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2VkaXRpbmdUZXh0SWQsIHNldEVkaXRpbmdUZXh0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsYXllcnNPcGVuLCBzZXRMYXllcnNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NhdmluZywgc2V0U2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjYW52YXNSZWYgPSB1c2VSZWY8RHJhZnRDYW52YXNIYW5kbGU+KG51bGwpO1xuXG4gIGNvbnN0IHRlbXBsYXRlcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gdGVtcGxhdGVzRm9yR3JvdXAoXG4gICAgICBwcm9kdWN0LFxuICAgICAgZm9ybVZhbHVlcz8udmFyaWF0aW9ucyB8fCBbXSxcbiAgICAgIGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnNHcm91cHM/Lltncm91cEluZGV4XT8udmFyaWF0aW9ucyB8fCBbXSxcbiAgICApLFxuICAgIFtwcm9kdWN0LCBmb3JtVmFsdWVzLCBncm91cEluZGV4XSxcbiAgKTtcbiAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbTWF0aC5taW4odGVtcGxhdGVJbmRleCwgdGVtcGxhdGVzLmxlbmd0aCAtIDEpXSB8fCB0ZW1wbGF0ZXNbMF07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikgc2V0R3JvdXBJbmRleChpbml0aWFsR3JvdXBJbmRleCk7XG4gIH0sIFtvcGVuLCBpbml0aWFsR3JvdXBJbmRleF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIGVuc3VyZURyYWZ0Rm9udHMoKTtcbiAgfSwgW29wZW5dKTtcblxuICBjb25zdCB2YXJpYXRpb25TeW5jS2V5ID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgdmFyaWF0aW9uc0Zvckdyb3VwKGZvcm1WYWx1ZXMsIGdyb3VwSW5kZXgpLm1hcCgodmFyaWF0aW9uOiBhbnkpID0+ICh7XG4gICAgICBpZDogdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8uaWQsXG4gICAgICB2YWx1ZTogdmFyaWF0aW9uPy52YWx1ZSxcbiAgICAgIGZpbGVzOiAodmFyaWF0aW9uPy52YXJpYXRpb25GaWxlcyB8fCBbXSkubWFwKFxuICAgICAgICAoZmlsZTogYW55KSA9PiBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmlkXG4gICAgICApLFxuICAgIH0pKVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuIHx8ICF0ZW1wbGF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IGRyYWZ0cyA9IGxvYWREcmFmdHMocHJvZHVjdC5pZCk7XG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZFByZXZpZXcoZHJhZnRzLCBncm91cEluZGV4LCB0ZW1wbGF0ZS5pZCk7XG4gICAgY29uc3QgdmFyaWF0aW9ucyA9IHZhcmlhdGlvbnNGb3JHcm91cChmb3JtVmFsdWVzLCBncm91cEluZGV4KTtcbiAgICBzZXRTdGF0ZShzZWVkT3JTeW5jQ2FudmFzKHNhdmVkPy5jYW52YXNKc29uIHx8IG51bGwsIHRlbXBsYXRlLCB2YXJpYXRpb25zKSk7XG4gICAgc2V0U2VsZWN0ZWRJZChudWxsKTtcbiAgICBzZXRFZGl0aW5nVGV4dElkKG51bGwpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIC8vIFJlbG9hZCB0aGUgc2F2ZWQgY2FudmFzIHdoZW4gc3dpdGNoaW5nIGdyb3VwL3RlbXBsYXRlLCBub3Qgb24gZXZlcnkga2V5c3Ryb2tlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW29wZW4sIGdyb3VwSW5kZXgsIHRlbXBsYXRlPy5pZCwgcHJvZHVjdD8uaWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbiB8fCAhdGVtcGxhdGUpIHJldHVybjtcbiAgICBjb25zdCB2YXJpYXRpb25zID0gdmFyaWF0aW9uc0Zvckdyb3VwKGZvcm1WYWx1ZXMsIGdyb3VwSW5kZXgpO1xuICAgIHNldFN0YXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc2VlZE9yU3luY0NhbnZhcyhjdXJyZW50LCB0ZW1wbGF0ZSwgdmFyaWF0aW9ucyk7XG4gICAgICBjb25zdCBzYW1lID0gY3VycmVudC53aWR0aCA9PT0gbmV4dC53aWR0aFxuICAgICAgICAmJiBjdXJyZW50LmhlaWdodCA9PT0gbmV4dC5oZWlnaHRcbiAgICAgICAgJiYgY3VycmVudC5vYmplY3RzLmxlbmd0aCA9PT0gbmV4dC5vYmplY3RzLmxlbmd0aFxuICAgICAgICAmJiBjdXJyZW50Lm9iamVjdHMuZXZlcnkoKG9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBvdGhlciA9IG5leHQub2JqZWN0c1tpbmRleF07XG4gICAgICAgICAgcmV0dXJuIG9iai5pZCA9PT0gb3RoZXIuaWRcbiAgICAgICAgICAgICYmIG9iai50ZXh0ID09PSBvdGhlci50ZXh0XG4gICAgICAgICAgICAmJiBvYmouc3JjID09PSBvdGhlci5zcmNcbiAgICAgICAgICAgICYmIG9iai5maWxsID09PSBvdGhlci5maWxsXG4gICAgICAgICAgICAmJiBvYmoubWVyY2hpRmllbGRJZCA9PT0gb3RoZXIubWVyY2hpRmllbGRJZDtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gc2FtZSA/IGN1cnJlbnQgOiBuZXh0O1xuICAgIH0pO1xuICB9LCBbb3BlbiwgdmFyaWF0aW9uU3luY0tleSwgdGVtcGxhdGU/LmlkLCBncm91cEluZGV4XSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSBzdGF0ZS5vYmplY3RzLmZpbmQoKG9iaikgPT4gb2JqLmlkID09PSBzZWxlY3RlZElkKSB8fCBudWxsO1xuXG4gIGZ1bmN0aW9uIHBhdGNoU2VsZWN0ZWQocGF0Y2g6IFBhcnRpYWw8RHJhZnRDYW52YXNPYmplY3Q+KSB7XG4gICAgaWYgKCFzZWxlY3RlZElkKSByZXR1cm47XG4gICAgc2V0U3RhdGUoKGN1cnJlbnQpID0+ICh7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgb2JqZWN0czogY3VycmVudC5vYmplY3RzLm1hcCgob2JqKSA9PiB7XG4gICAgICAgIGlmIChvYmouaWQgIT09IHNlbGVjdGVkSWQpIHJldHVybiBvYmo7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLm9iaiwgLi4ucGF0Y2ggfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5leHQudHlwZSA9PT0gJ3RleHQnXG4gICAgICAgICAgJiYgKCd0ZXh0JyBpbiBwYXRjaCB8fCAnZm9udFNpemUnIGluIHBhdGNoIHx8ICdmb250RmFtaWx5JyBpbiBwYXRjaClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubmV4dCwgLi4uZml0VGV4dEJveChuZXh0KSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfSksXG4gICAgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkVGV4dCgpIHtcbiAgICBjb25zdCBpZCA9IGNyZWF0ZU9iamVjdElkKCk7XG4gICAgY29uc3QgZHJhZnRlZDogRHJhZnRDYW52YXNPYmplY3QgPSB7XG4gICAgICBpZCxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHg6IHN0YXRlLndpZHRoICogMC41LFxuICAgICAgeTogc3RhdGUuaGVpZ2h0ICogMC4zNSxcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcm90YXRpb246IDAsXG4gICAgICBzY2FsZVg6IDEsXG4gICAgICBzY2FsZVk6IDEsXG4gICAgICB0ZXh0OiAnWW91ciB0ZXh0JyxcbiAgICAgIGZvbnRTaXplOiA1NixcbiAgICAgIGZvbnRGYW1pbHk6IERFRkFVTFRfRFJBRlRfRk9OVCxcbiAgICAgIGZpbGw6ICcjMTExMTExJyxcbiAgICAgIGFsaWduOiAnbGVmdCcsXG4gICAgfTtcbiAgICBjb25zdCBvYmogPSB7IC4uLmRyYWZ0ZWQsIC4uLmZpdFRleHRCb3goZHJhZnRlZCkgfTtcbiAgICBzZXRTdGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgb2JqZWN0czogWy4uLmN1cnJlbnQub2JqZWN0cywgb2JqXSB9KSk7XG4gICAgc2V0U2VsZWN0ZWRJZChpZCk7XG4gICAgc2V0RWRpdGluZ1RleHRJZChpZCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRJbWFnZShmaWxlOiBGaWxlKSB7XG4gICAgY29uc3Qgc3JjID0gYXdhaXQgcmVhZEZpbGVBc0RhdGFVcmwoZmlsZSk7XG4gICAgY29uc3QgaWQgPSBjcmVhdGVPYmplY3RJZCgpO1xuICAgIGNvbnN0IG9iajogRHJhZnRDYW52YXNPYmplY3QgPSB7XG4gICAgICBpZCxcbiAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICB4OiBzdGF0ZS53aWR0aCAqIDAuMixcbiAgICAgIHk6IHN0YXRlLmhlaWdodCAqIDAuMixcbiAgICAgIHdpZHRoOiBzdGF0ZS53aWR0aCAqIDAuNixcbiAgICAgIGhlaWdodDogc3RhdGUuaGVpZ2h0ICogMC42LFxuICAgICAgcm90YXRpb246IDAsXG4gICAgICBzY2FsZVg6IDEsXG4gICAgICBzY2FsZVk6IDEsXG4gICAgICBzcmMsXG4gICAgICBsb2NrQXNwZWN0UmF0aW86IHRydWUsXG4gICAgfTtcbiAgICBzZXRTdGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgb2JqZWN0czogWy4uLmN1cnJlbnQub2JqZWN0cywgb2JqXSB9KSk7XG4gICAgc2V0U2VsZWN0ZWRJZChpZCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICBpZiAoIXNlbGVjdGVkSWQpIHJldHVybjtcbiAgICBzZXRTdGF0ZSgoY3VycmVudCkgPT4gZGV0YWNoRmllbGQoY3VycmVudCwgc2VsZWN0ZWRJZCkpO1xuICAgIHNldFNlbGVjdGVkSWQobnVsbCk7XG4gICAgc2V0RWRpdGluZ1RleHRJZChudWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdmVMYXllcihkaXJlY3Rpb246IDEgfCAtMSkge1xuICAgIGlmICghc2VsZWN0ZWRJZCkgcmV0dXJuO1xuICAgIHNldFN0YXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQub2JqZWN0cy5maW5kSW5kZXgoKG9iaikgPT4gb2JqLmlkID09PSBzZWxlY3RlZElkKTtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgZGlyZWN0aW9uO1xuICAgICAgaWYgKGluZGV4IDwgMCB8fCBuZXh0SW5kZXggPCAwIHx8IG5leHRJbmRleCA+PSBjdXJyZW50Lm9iamVjdHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JqZWN0cyA9IFsuLi5jdXJyZW50Lm9iamVjdHNdO1xuICAgICAgY29uc3QgW2l0ZW1dID0gb2JqZWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgb2JqZWN0cy5zcGxpY2UobmV4dEluZGV4LCAwLCBpdGVtKTtcbiAgICAgIHJldHVybiB7IC4uLmN1cnJlbnQsIG9iamVjdHMgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZURvbmUoKSB7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCAhcHJvZHVjdD8uaWQpIHJldHVybjtcbiAgICBzZXRTYXZpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBuZ3MgPSBjYW52YXNSZWYuY3VycmVudFxuICAgICAgICA/IGF3YWl0IGNhbnZhc1JlZi5jdXJyZW50LmV4cG9ydFBuZ3MoKVxuICAgICAgICA6IGF3YWl0IGV4cG9ydERyYWZ0UG5ncyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICB0ZW1wbGF0ZUltYWdlU291cmNlcyh0ZW1wbGF0ZSwgYXBpVXJsKSxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBkcmFmdHMgPSBwcnVuZURyYWZ0cyhcbiAgICAgICAgbG9hZERyYWZ0cyhwcm9kdWN0LmlkKSxcbiAgICAgICAgZGVzaWduR3JvdXBDb3VudChwcm9kdWN0LCBob29rRm9ybS5nZXRWYWx1ZXMoKSksXG4gICAgICApO1xuICAgICAgY29uc3QgbmV4dCA9IHVwc2VydEdyb3VwVGVtcGxhdGVEcmFmdChkcmFmdHMsIHByb2R1Y3QuaWQsIGdyb3VwSW5kZXgsIHtcbiAgICAgICAgdGVtcGxhdGVJZDogdGVtcGxhdGUuaWQsXG4gICAgICAgIGNhbnZhc0pzb246IHN0YXRlLFxuICAgICAgICAuLi5wbmdzLFxuICAgICAgfSk7XG4gICAgICBzYXZlRHJhZnRzKHByb2R1Y3QuaWQsIG5leHQpO1xuICAgICAgb25TYXZlZCgpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBzZXRFcnJvcihlcnI/Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBzYXZlIGRyYWZ0Jyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcGVuIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWVEcmFmdFNoZWV0IHx8ICcnfSBtZXJjaGktcHJvZHVjdC1kcmFmdC1zaGVldGB9XG4gICAgICByb2xlPSdkaWFsb2cnXG4gICAgICBhcmlhLW1vZGFsPSd0cnVlJ1xuICAgICAgYXJpYS1sYWJlbD0nRGVzaWduIGFydHdvcmsnXG4gICAgICBvbk1vdXNlRG93bj17c3RvcEJ1YmJsZX1cbiAgICAgIG9uQ2xpY2s9e3N0b3BCdWJibGV9XG4gICAgPlxuICAgICAgPGhlYWRlciBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LXNoZWV0LWhlYWRlcic+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1pY29uLWJ0bidcbiAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgIGFyaWEtbGFiZWw9J0Nsb3NlIGRlc2lnbmVyJ1xuICAgICAgICA+XG4gICAgICAgICAgPEZhVGltZXMgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1zaGVldC10aXRsZSc+XG4gICAgICAgICAgPHN0cm9uZz57dGVtcGxhdGU/Lm5hbWUgfHwgJ0FydHdvcmsnfTwvc3Ryb25nPlxuICAgICAgICAgIHtoYXNHcm91cHMgPyA8c3Bhbj5Hcm91cCB7Z3JvdXBJbmRleCArIDF9PC9zcGFuPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtZG9uZS1idG4nXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRG9uZX1cbiAgICAgICAgICBkaXNhYmxlZD17c2F2aW5nfVxuICAgICAgICA+XG4gICAgICAgICAge3NhdmluZyA/IDxDZ1NwaW5uZXIgY2xhc3NOYW1lPSdhbmltYXRlX3NwaW4nIC8+IDogPEZhQ2hlY2sgLz59XG4gICAgICAgICAgRG9uZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICB7aGFzR3JvdXBzICYmIGdyb3VwQ291bnQgPiAxID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2hpcHMnIHJvbGU9J3RhYmxpc3QnIGFyaWEtbGFiZWw9J0dyb3Vwcyc+XG4gICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IGdyb3VwQ291bnQgfSwgKF8sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgcm9sZT0ndGFiJ1xuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpbmRleCA9PT0gZ3JvdXBJbmRleH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2hpcCR7aW5kZXggPT09IGdyb3VwSW5kZXggPyAnIGlzLWFjdGl2ZScgOiAnJ31gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0R3JvdXBJbmRleChpbmRleCk7XG4gICAgICAgICAgICAgICAgc2V0VGVtcGxhdGVJbmRleCgwKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgR3JvdXAge2luZGV4ICsgMX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuXG4gICAgICB7dGVtcGxhdGVzLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1jaGlwcycgcm9sZT0ndGFibGlzdCcgYXJpYS1sYWJlbD0nVGVtcGxhdGVzJz5cbiAgICAgICAgICB7dGVtcGxhdGVzLm1hcCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZCA/PyBpbmRleH1cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICByb2xlPSd0YWInXG4gICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2l0ZW0uaWQgPT09IHRlbXBsYXRlPy5pZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbWVyY2hpLXByb2R1Y3QtZHJhZnQtY2hpcCR7aXRlbS5pZCA9PT0gdGVtcGxhdGU/LmlkID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0VGVtcGxhdGVJbmRleChpbmRleCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtLm5hbWUgfHwgYFRlbXBsYXRlICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogbnVsbH1cblxuICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LW1haW4nPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtc2hlZXQtYm9keSc+XG4gICAgICAgICAgPERyYWZ0Q2FudmFzQm91bmRhcnk+XG4gICAgICAgICAgICA8UmVhY3QuU3VzcGVuc2VcbiAgICAgICAgICAgICAgZmFsbGJhY2s9e1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1jYW52YXMtZmFsbGJhY2snPkxvYWRpbmcgY2FudmFz4oCmPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERyYWZ0Q2FudmFzXG4gICAgICAgICAgICAgICAgcmVmPXtjYW52YXNSZWZ9XG4gICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgIHRlbXBsYXRlPXt0ZW1wbGF0ZX1cbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNyYz17dGVtcGxhdGVTcmModGVtcGxhdGUsIGFwaVVybCl9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJZD17c2VsZWN0ZWRJZH1cbiAgICAgICAgICAgICAgICBvblNlbGVjdD17c2V0U2VsZWN0ZWRJZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0U3RhdGV9XG4gICAgICAgICAgICAgICAgb25FZGl0VGV4dD17KGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRMYXllcnNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWQoaWQpO1xuICAgICAgICAgICAgICAgICAgc2V0RWRpdGluZ1RleHRJZChpZCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuU3VzcGVuc2U+XG4gICAgICAgICAgPC9EcmFmdENhbnZhc0JvdW5kYXJ5PlxuXG4gICAgICAgICAge2xheWVyc09wZW4gPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtbGF5ZXJzJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWxheWVycy1oZWFkJz5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkxheWVyczwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyBvbkNsaWNrPXsoKSA9PiBzZXRMYXllcnNPcGVuKGZhbHNlKX0gYXJpYS1sYWJlbD0nQ2xvc2UgbGF5ZXJzJz5cbiAgICAgICAgICAgICAgICAgIDxGYVRpbWVzIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7c3RhdGUub2JqZWN0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPHA+Tm8gb2JqZWN0cyB5ZXQuIEFkZCB0ZXh0IG9yIGFuIGltYWdlLjwvcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICBbLi4uc3RhdGUub2JqZWN0c10ucmV2ZXJzZSgpLm1hcCgob2JqLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e29iai5pZH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BtZXJjaGktcHJvZHVjdC1kcmFmdC1sYXllciR7b2JqLmlkID09PSBzZWxlY3RlZElkID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWQob2JqLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0aW5nVGV4dElkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RmFQbHVzIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtbGF5ZXItaWNvbicgLz5cbiAgICAgICAgICAgICAgICAgICAge29iai50eXBlID09PSAndGV4dCcgPyAob2JqLnRleHQgfHwgJ1RleHQnKSA6IG9iai50eXBlID09PSAnaW1hZ2UnID8gJ0ltYWdlJyA6ICdCYXNlIGNvbG91cid9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPntzdGF0ZS5vYmplY3RzLmxlbmd0aCAtIGluZGV4fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7ZXJyb3IgPyA8cCBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWVycm9yJz57ZXJyb3J9PC9wPiA6IG51bGx9XG5cbiAgICAgICAgPGFzaWRlIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtZG9jayc+XG4gICAgICAgICAge3NlbGVjdGVkID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWluc3BlY3Rvcic+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZC50eXBlID09PSAndGV4dCcgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LXRleHQtaW5wdXQnXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZC50ZXh0IHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICByb3dzPXsyfVxuICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e2VkaXRpbmdUZXh0SWQgPT09IHNlbGVjdGVkLmlkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdFZGl0IHRleHQnXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gcGF0Y2hTZWxlY3RlZCh7IHRleHQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LWZvbnQnPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1zci1vbmx5Jz5Gb250PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nRm9udCdcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWQuZm9udEZhbWlseSB8fCBERUZBVUxUX0RSQUZUX0ZPTlR9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZm9udEZhbWlseTogY3NzRm9udEZhbWlseShzZWxlY3RlZC5mb250RmFtaWx5IHx8IERFRkFVTFRfRFJBRlRfRk9OVCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHBhdGNoU2VsZWN0ZWQoeyBmb250RmFtaWx5OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtEUkFGVF9URVhUX0ZPTlRTLm1hcCgoZm9udCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2ZvbnQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb250LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBmb250RmFtaWx5OiBjc3NGb250RmFtaWx5KGZvbnQudmFsdWUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtmb250LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1wcm9kdWN0LWRyYWZ0LXN0ZXBwZXInXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHBhdGNoU2VsZWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBNYXRoLm1heCgxMiwgKHNlbGVjdGVkLmZvbnRTaXplIHx8IDQ4KSAtIDgpLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nU21hbGxlciB0ZXh0J1xuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBBLVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1zdGVwcGVyJ1xuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwYXRjaFNlbGVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogTWF0aC5taW4oMjQwLCAoc2VsZWN0ZWQuZm9udFNpemUgfHwgNDgpICsgOCksXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdMYXJnZXIgdGV4dCdcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQStcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkLmNvbG91ckZpZWxkSWQgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY29sb3InPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLXNyLW9ubHknPkNvbG91cjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2NvbG9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ey9eI1swLTlhLWZBLUZdezZ9JC8udGVzdChzZWxlY3RlZC5maWxsIHx8ICcnKSA/IHNlbGVjdGVkLmZpbGwgOiAnIzExMTExMSd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHBhdGNoU2VsZWN0ZWQoeyBmaWxsOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7c2VsZWN0ZWQudHlwZSA9PT0gJ2ltYWdlJyA/IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BtZXJjaGktcHJvZHVjdC1kcmFmdC1pY29uLWJ0biR7c2VsZWN0ZWQubG9ja0FzcGVjdFJhdGlvID8gJyBpcy1hY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHBhdGNoU2VsZWN0ZWQoeyBsb2NrQXNwZWN0UmF0aW86ICFzZWxlY3RlZC5sb2NrQXNwZWN0UmF0aW8gfSl9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtzZWxlY3RlZC5sb2NrQXNwZWN0UmF0aW8gPyAnVW5sb2NrIGFzcGVjdCByYXRpbycgOiAnTG9jayBhc3BlY3QgcmF0aW8nfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZC5sb2NrQXNwZWN0UmF0aW8gPyA8RmFMb2NrIC8+IDogPEZhVW5sb2NrIC8+fVxuICAgICAgICAgICAgICAgICAgUmF0aW9cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtzZWxlY3RlZC50eXBlID09PSAncmVjdCcgPyAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtY29sb3InPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktc3Itb25seSc+RmlsbCBjb2xvdXI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0nY29sb3InXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZC5maWxsIHx8ICcjY2NjY2NjJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBwYXRjaFNlbGVjdGVkKHsgZmlsbDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4nXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcGF0Y2hTZWxlY3RlZCh7IHNjYWxlWDogKHNlbGVjdGVkLnNjYWxlWCB8fCAxKSAqIC0xIH0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9J0ZsaXAnXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBGbGlwXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4nXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW92ZUxheWVyKDEpfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9J0JyaW5nIGZvcndhcmQnXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RmFBcnJvd1VwIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4nXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW92ZUxheWVyKC0xKX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdTZW5kIGJhY2t3YXJkJ1xuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZhQXJyb3dEb3duIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtaWNvbi1idG4gaXMtZGFuZ2VyJ1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3JlbW92ZVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9J0RlbGV0ZSdcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGYVRyYXNoIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICA8bmF2IGNsYXNzTmFtZT0nbWVyY2hpLXByb2R1Y3QtZHJhZnQtdG9vbGJhcicgYXJpYS1sYWJlbD0nRGVzaWduIHRvb2xzJz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0TGF5ZXJzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgYWRkVGV4dCgpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RmFGb250IC8+XG4gICAgICAgICAgICAgIDxzcGFuPlRleHQ8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0TGF5ZXJzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0RWRpdGluZ1RleHRJZChudWxsKTtcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZhSW1hZ2UgLz5cbiAgICAgICAgICAgICAgPHNwYW4+SW1hZ2U8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0RWRpdGluZ1RleHRJZChudWxsKTtcbiAgICAgICAgICAgICAgICBzZXRMYXllcnNPcGVuKChvcGVuTm93KSA9PiAhb3Blbk5vdyk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGYUxheWVyR3JvdXAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+TGF5ZXJzPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgb25DbGljaz17cmVtb3ZlU2VsZWN0ZWR9IGRpc2FibGVkPXshc2VsZWN0ZWRJZH0+XG4gICAgICAgICAgICAgIDxGYVRyYXNoIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICB0eXBlPSdmaWxlJ1xuICAgICAgICAgICAgYWNjZXB0PSdpbWFnZS8qJ1xuICAgICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktcHJvZHVjdC1kcmFmdC1maWxlJ1xuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlcz8uWzBdO1xuICAgICAgICAgICAgICBpZiAoZmlsZSkgYWRkSW1hZ2UoZmlsZSk7XG4gICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFBQyxTQUFBQSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLGFBQUEsSUFDYix1S0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsd0JBQUFQLE1BQUEsR0FBQUEsTUFBQSxPQUFBUSxDQUFBLEdBQUFELENBQUEsQ0FBQU4sUUFBQSxrQkFBQUYsQ0FBQSxHQUFBUSxDQUFBLENBQUFFLFdBQUEsOEJBQUFDLEVBQUFILENBQUEsRUFBQUMsQ0FBQSxFQUFBVCxDQUFBLEVBQUFXLENBQUEsUUFBQUMsQ0FBQSxHQUFBSCxDQUFBLElBQUFBLENBQUEsQ0FBQUwsU0FBQSxZQUFBUyxTQUFBLEdBQUFKLENBQUEs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
|