@merchi/checkout 1.3.5
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 +196 -0
- package/lib/actions/confirm.d.ts +2 -0
- package/lib/actions/confirm.js +85 -0
- package/lib/actions/customer.d.ts +2 -0
- package/lib/actions/customer.js +53 -0
- package/lib/actions/domain.d.ts +2 -0
- package/lib/actions/domain.js +65 -0
- package/lib/actions/files.d.ts +1 -0
- package/lib/actions/files.js +35 -0
- package/lib/actions/helpers.d.ts +19 -0
- package/lib/actions/helpers.js +125 -0
- package/lib/actions/invoice.d.ts +3 -0
- package/lib/actions/invoice.js +113 -0
- package/lib/area.d.ts +77 -0
- package/lib/area.js +298 -0
- package/lib/assets/merchi-monster-loader.gif +0 -0
- package/lib/checkoutSession.d.ts +32 -0
- package/lib/checkoutSession.js +151 -0
- package/lib/components/Alerts.d.ts +3 -0
- package/lib/components/Alerts.js +88 -0
- package/lib/components/CancelOrderConfirmModal.d.ts +10 -0
- package/lib/components/CancelOrderConfirmModal.js +50 -0
- package/lib/components/CheckoutSummaryFields.d.ts +11 -0
- package/lib/components/CheckoutSummaryFields.js +38 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/CustomerCheckoutMethodTabs.d.ts +6 -0
- package/lib/components/CustomerCheckoutMethodTabs.js +90 -0
- package/lib/components/DiscountInputGroup.d.ts +2 -0
- package/lib/components/DiscountInputGroup.js +256 -0
- package/lib/components/DraftImageUploaded.d.ts +8 -0
- package/lib/components/DraftImageUploaded.js +53 -0
- package/lib/components/FooterButtons.d.ts +11 -0
- package/lib/components/FooterButtons.js +28 -0
- package/lib/components/InvoiceInfo.d.ts +6 -0
- package/lib/components/InvoiceInfo.js +37 -0
- package/lib/components/JobInfoContent.d.ts +2 -0
- package/lib/components/JobInfoContent.js +728 -0
- package/lib/components/MerchiCheckout.d.ts +46 -0
- package/lib/components/MerchiCheckout.js +49 -0
- package/lib/components/MerchiCheckoutProvider.d.ts +167 -0
- package/lib/components/MerchiCheckoutProvider.js +569 -0
- package/lib/components/MerchiCheckoutTabs.d.ts +2 -0
- package/lib/components/MerchiCheckoutTabs.js +50 -0
- package/lib/components/TabPane.d.ts +7 -0
- package/lib/components/TabPane.js +21 -0
- package/lib/components/TabPaneAddress.d.ts +3 -0
- package/lib/components/TabPaneAddress.js +28 -0
- package/lib/components/TabPaneConfirm.d.ts +11 -0
- package/lib/components/TabPaneConfirm.js +288 -0
- package/lib/components/TabPaneContainer.d.ts +6 -0
- package/lib/components/TabPaneContainer.js +13 -0
- package/lib/components/TabPaneCustomer.d.ts +5 -0
- package/lib/components/TabPaneCustomer.js +93 -0
- package/lib/components/TabPaneNewDomain.d.ts +3 -0
- package/lib/components/TabPaneNewDomain.js +39 -0
- package/lib/components/TabPanePayment.d.ts +3 -0
- package/lib/components/TabPanePayment.js +99 -0
- package/lib/components/TabPaneSubmitted.d.ts +3 -0
- package/lib/components/TabPaneSubmitted.js +90 -0
- package/lib/components/TitleStep.d.ts +6 -0
- package/lib/components/TitleStep.js +24 -0
- package/lib/components/buttons/ButtonInvoiceDownload.d.ts +3 -0
- package/lib/components/buttons/ButtonInvoiceDownload.js +91 -0
- package/lib/components/buttons/ButtonNext.d.ts +10 -0
- package/lib/components/buttons/ButtonNext.js +48 -0
- package/lib/components/buttons/ButtonPrevious.d.ts +7 -0
- package/lib/components/buttons/ButtonPrevious.js +36 -0
- package/lib/components/buttons/index.d.ts +3 -0
- package/lib/components/buttons/index.js +4 -0
- package/lib/components/currency.d.ts +5 -0
- package/lib/components/currency.js +223 -0
- package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.d.ts +7 -0
- package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.js +22 -0
- package/lib/components/forms/FormAddresses.d.ts +6 -0
- package/lib/components/forms/FormAddresses.js +251 -0
- package/lib/components/forms/FormCustomerNew.d.ts +4 -0
- package/lib/components/forms/FormCustomerNew.js +197 -0
- package/lib/components/forms/FormCustomerReturning.d.ts +3 -0
- package/lib/components/forms/FormCustomerReturning.js +147 -0
- package/lib/components/forms/FormDomainNew.d.ts +2 -0
- package/lib/components/forms/FormDomainNew.js +152 -0
- package/lib/components/forms/FormWhatsappCustomer.d.ts +4 -0
- package/lib/components/forms/FormWhatsappCustomer.js +217 -0
- package/lib/components/forms/InputAcceptUserTermsAndConditions.d.ts +7 -0
- package/lib/components/forms/InputAcceptUserTermsAndConditions.js +38 -0
- package/lib/components/forms/InputCheckStoreName.d.ts +7 -0
- package/lib/components/forms/InputCheckStoreName.js +168 -0
- package/lib/components/forms/InputError.d.ts +8 -0
- package/lib/components/forms/InputError.js +19 -0
- package/lib/components/forms/InputFileUpload.d.ts +12 -0
- package/lib/components/forms/InputFileUpload.js +191 -0
- package/lib/components/forms/InputSelect.d.ts +14 -0
- package/lib/components/forms/InputSelect.js +52 -0
- package/lib/components/forms/InputText.d.ts +12 -0
- package/lib/components/forms/InputText.js +59 -0
- package/lib/components/forms/InputsAddress.d.ts +12 -0
- package/lib/components/forms/InputsAddress.js +533 -0
- package/lib/components/forms/index.d.ts +5 -0
- package/lib/components/forms/index.js +6 -0
- package/lib/components/lists/ListShipmentQuoteOptions.d.ts +9 -0
- package/lib/components/lists/ListShipmentQuoteOptions.js +145 -0
- package/lib/components/lists/index.d.ts +2 -0
- package/lib/components/lists/index.js +3 -0
- package/lib/fonts/nunito-bold-webfont.woff +0 -0
- package/lib/fonts/nunito-bold-webfont.woff2 +0 -0
- package/lib/fonts/nunito-regular-webfont.woff +0 -0
- package/lib/fonts/nunito-regular-webfont.woff2 +0 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +4 -0
- package/lib/merchi_source.d.ts +2 -0
- package/lib/merchi_source.js +31 -0
- package/lib/styles/globals.css +2546 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +2763 -0
- package/lib/tabs_utils.d.ts +31 -0
- package/lib/tabs_utils.js +104 -0
- package/lib/types.d.ts +43 -0
- package/lib/types.js +40 -0
- package/lib/utils.d.ts +68 -0
- package/lib/utils.js +560 -0
- package/package.json +96 -0
|
@@ -0,0 +1,728 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
4
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
5
|
+
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."); }
|
|
6
|
+
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; } }
|
|
7
|
+
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; }
|
|
8
|
+
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; } }
|
|
9
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
10
|
+
import React, { useState } from 'react';
|
|
11
|
+
import { FaFilePdf, FaRegImage } from 'react-icons/fa';
|
|
12
|
+
import { formatCurrency, currencyTotalCostShowIncTax } from './currency';
|
|
13
|
+
import { isInstructionsType, isProductSupplierMOD, isSelectable, FieldType } from '../utils';
|
|
14
|
+
import { estimateAreaCosts, formatAreaSummary, localePrefersImperial } from '../area';
|
|
15
|
+
import { useMerchiCheckboutContext } from './MerchiCheckoutProvider';
|
|
16
|
+
import { SummaryAmountRow, SummaryFieldRow } from './CheckoutSummaryFields';
|
|
17
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
18
|
+
function formatCost(product, cost) {
|
|
19
|
+
var currency = product.currency ? product.currency : 'AUD';
|
|
20
|
+
return formatCurrency(cost, {
|
|
21
|
+
currency: currency,
|
|
22
|
+
showCodeIfNoSymbol: false
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function parseCostAmount(value) {
|
|
26
|
+
var amount = parseFloat(value);
|
|
27
|
+
return Number.isFinite(amount) && amount > 0 ? amount : 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Match product-form wording: "+ $X once off" / "+ $Y per unit". */
|
|
31
|
+
function formatOnceOffUnitCostDetail(product, onceOffCost, unitCost) {
|
|
32
|
+
var currency = (product === null || product === void 0 ? void 0 : product.currency) || 'AUD';
|
|
33
|
+
var parts = [];
|
|
34
|
+
var onceOff = parseCostAmount(onceOffCost);
|
|
35
|
+
var unit = parseCostAmount(unitCost);
|
|
36
|
+
if (onceOff) {
|
|
37
|
+
parts.push(" + ".concat(formatCurrency(onceOff, {
|
|
38
|
+
currency: currency,
|
|
39
|
+
showCodeIfNoSymbol: false
|
|
40
|
+
}), " once off"));
|
|
41
|
+
}
|
|
42
|
+
if (unit) {
|
|
43
|
+
parts.push(" + ".concat(formatCurrency(unit, {
|
|
44
|
+
currency: currency,
|
|
45
|
+
showCodeIfNoSymbol: false
|
|
46
|
+
}), " per unit"));
|
|
47
|
+
}
|
|
48
|
+
return parts.join('');
|
|
49
|
+
}
|
|
50
|
+
function optionOnceOff(option) {
|
|
51
|
+
return parseCostAmount(option === null || option === void 0 ? void 0 : option.onceOffCost) || parseCostAmount(option === null || option === void 0 ? void 0 : option.variationCost) || 0;
|
|
52
|
+
}
|
|
53
|
+
function optionUnit(option) {
|
|
54
|
+
return parseCostAmount(option === null || option === void 0 ? void 0 : option.unitCost) || parseCostAmount(option === null || option === void 0 ? void 0 : option.variationUnitCost) || 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Product setup fee shown next to unit price, matching product-form wording. */
|
|
58
|
+
function productSetupSuffix(product) {
|
|
59
|
+
var setupPrice = Number(product === null || product === void 0 ? void 0 : product.setupPrice);
|
|
60
|
+
if (!setupPrice) return '';
|
|
61
|
+
var label = product.setupPerGroup ? 'setup per group' : 'setup';
|
|
62
|
+
return " + ".concat(formatCost(product, setupPrice), " ").concat(label);
|
|
63
|
+
}
|
|
64
|
+
function formatUnitPriceWithSetup(product) {
|
|
65
|
+
return "".concat(formatCost(product, Number(product === null || product === void 0 ? void 0 : product.unitPrice) || 0)).concat(productSetupSuffix(product));
|
|
66
|
+
}
|
|
67
|
+
function isPdf(file) {
|
|
68
|
+
var mimetype = (file === null || file === void 0 ? void 0 : file.mimetype) || '';
|
|
69
|
+
return mimetype === 'application/pdf' || mimetype === 'application/x-pdf';
|
|
70
|
+
}
|
|
71
|
+
function isImageFile(file) {
|
|
72
|
+
var mimetype = (file === null || file === void 0 ? void 0 : file.mimetype) || '';
|
|
73
|
+
if (mimetype.startsWith('image/')) return true;
|
|
74
|
+
var name = ((file === null || file === void 0 ? void 0 : file.name) || '').toLowerCase();
|
|
75
|
+
return /\.(jpe?g|png|gif|webp|svg|bmp)$/.test(name);
|
|
76
|
+
}
|
|
77
|
+
function absolutizeFileUrl(raw, urlApi) {
|
|
78
|
+
var url = (raw || '').trim();
|
|
79
|
+
if (!url || url === 'undefined' || url === 'null') return '';
|
|
80
|
+
if (/^(https?:|blob:|data:)/i.test(url)) return url;
|
|
81
|
+
if (!urlApi) return url;
|
|
82
|
+
try {
|
|
83
|
+
var base = new URL(urlApi);
|
|
84
|
+
return new URL(url, "".concat(base.origin, "/")).href;
|
|
85
|
+
} catch (_unused) {
|
|
86
|
+
return url;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function resolveFileUrl(file, urlApi) {
|
|
90
|
+
return absolutizeFileUrl((file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.downloadUrl) || '', urlApi);
|
|
91
|
+
}
|
|
92
|
+
function optionImageUrl(option, urlApi) {
|
|
93
|
+
var _option$linkedFile, _option$linkedFile2;
|
|
94
|
+
return absolutizeFileUrl((option === null || option === void 0 || (_option$linkedFile = option.linkedFile) === null || _option$linkedFile === void 0 ? void 0 : _option$linkedFile.viewUrl) || (option === null || option === void 0 || (_option$linkedFile2 = option.linkedFile) === null || _option$linkedFile2 === void 0 ? void 0 : _option$linkedFile2.downloadUrl) || '', urlApi);
|
|
95
|
+
}
|
|
96
|
+
function findMatchingOption(option) {
|
|
97
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
98
|
+
return options.find(function (o) {
|
|
99
|
+
return String(o.optionId) === String(option === null || option === void 0 ? void 0 : option.optionId);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function resolveOptionColour(option) {
|
|
103
|
+
var _option$colour, _findMatchingOption, _findMatchingOption2;
|
|
104
|
+
var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
105
|
+
var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
106
|
+
var direct = option === null || option === void 0 || (_option$colour = option.colour) === null || _option$colour === void 0 ? void 0 : _option$colour.trim();
|
|
107
|
+
if (direct) return direct;
|
|
108
|
+
var fromSelectable = (_findMatchingOption = findMatchingOption(option, selectableOptions)) === null || _findMatchingOption === void 0 || (_findMatchingOption = _findMatchingOption.colour) === null || _findMatchingOption === void 0 ? void 0 : _findMatchingOption.trim();
|
|
109
|
+
if (fromSelectable) return fromSelectable;
|
|
110
|
+
return ((_findMatchingOption2 = findMatchingOption(option, fieldOptions)) === null || _findMatchingOption2 === void 0 || (_findMatchingOption2 = _findMatchingOption2.colour) === null || _findMatchingOption2 === void 0 ? void 0 : _findMatchingOption2.trim()) || '';
|
|
111
|
+
}
|
|
112
|
+
function resolveOptionImageUrl(option) {
|
|
113
|
+
var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
114
|
+
var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
115
|
+
var urlApi = arguments.length > 3 ? arguments[3] : undefined;
|
|
116
|
+
var direct = optionImageUrl(option, urlApi);
|
|
117
|
+
if (direct) return direct;
|
|
118
|
+
var fromSelectable = optionImageUrl(findMatchingOption(option, selectableOptions), urlApi);
|
|
119
|
+
if (fromSelectable) return fromSelectable;
|
|
120
|
+
return optionImageUrl(findMatchingOption(option, fieldOptions), urlApi);
|
|
121
|
+
}
|
|
122
|
+
function formatOptionCost(product, option, sellerProductEditable) {
|
|
123
|
+
if (sellerProductEditable || !option) return null;
|
|
124
|
+
var onceOffUnit = formatOnceOffUnitCostDetail(product, optionOnceOff(option), optionUnit(option));
|
|
125
|
+
if (onceOffUnit) return onceOffUnit;
|
|
126
|
+
if (option.totalCost) {
|
|
127
|
+
return " + ".concat(formatCost(product, option.totalCost));
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
function variationCostDetail(product, variation, sellerProductEditable) {
|
|
132
|
+
var _variation$onceOffCos, _variation$unitCost;
|
|
133
|
+
var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
|
134
|
+
_ref$includeSelectedO = _ref.includeSelectedOptionCosts,
|
|
135
|
+
includeSelectedOptionCosts = _ref$includeSelectedO === void 0 ? true : _ref$includeSelectedO,
|
|
136
|
+
_ref$fieldCostsOnly = _ref.fieldCostsOnly,
|
|
137
|
+
fieldCostsOnly = _ref$fieldCostsOnly === void 0 ? false : _ref$fieldCostsOnly;
|
|
138
|
+
if (sellerProductEditable) return '';
|
|
139
|
+
var field = (variation === null || variation === void 0 ? void 0 : variation.variationField) || {};
|
|
140
|
+
var fieldType = Number(field.fieldType);
|
|
141
|
+
if (fieldType === FieldType.AREA) {
|
|
142
|
+
var areaCosts = estimateAreaCosts(field, variation === null || variation === void 0 ? void 0 : variation.value);
|
|
143
|
+
if (areaCosts) {
|
|
144
|
+
return formatOnceOffUnitCostDetail(product, areaCosts.onceOffCost, areaCosts.unitCost);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (fieldCostsOnly) {
|
|
148
|
+
return formatOnceOffUnitCostDetail(product, field.variationCost, field.variationUnitCost);
|
|
149
|
+
}
|
|
150
|
+
var selected = Array.isArray(variation === null || variation === void 0 ? void 0 : variation.selectedOptions) ? variation.selectedOptions : [];
|
|
151
|
+
if (includeSelectedOptionCosts && selected.length) {
|
|
152
|
+
var fieldOnce = fieldType === FieldType.COLOUR_EXTRACT ? parseCostAmount(field.variationCost) : 0;
|
|
153
|
+
var fieldUnit = fieldType === FieldType.COLOUR_EXTRACT ? parseCostAmount(field.variationUnitCost) : 0;
|
|
154
|
+
return formatOnceOffUnitCostDetail(product, fieldOnce + selected.reduce(function (sum, option) {
|
|
155
|
+
return sum + optionOnceOff(option);
|
|
156
|
+
}, 0), fieldUnit + selected.reduce(function (sum, option) {
|
|
157
|
+
return sum + optionUnit(option);
|
|
158
|
+
}, 0));
|
|
159
|
+
}
|
|
160
|
+
var onceOffUnit = formatOnceOffUnitCostDetail(product, (_variation$onceOffCos = variation === null || variation === void 0 ? void 0 : variation.onceOffCost) !== null && _variation$onceOffCos !== void 0 ? _variation$onceOffCos : field.variationCost, (_variation$unitCost = variation === null || variation === void 0 ? void 0 : variation.unitCost) !== null && _variation$unitCost !== void 0 ? _variation$unitCost : field.variationUnitCost);
|
|
161
|
+
if (onceOffUnit) return onceOffUnit;
|
|
162
|
+
if (variation !== null && variation !== void 0 && variation.cost) {
|
|
163
|
+
return " + ".concat(formatCost(product, variation.cost));
|
|
164
|
+
}
|
|
165
|
+
return '';
|
|
166
|
+
}
|
|
167
|
+
function VariationFilePreview(_ref2) {
|
|
168
|
+
var file = _ref2.file,
|
|
169
|
+
urlApi = _ref2.urlApi;
|
|
170
|
+
var fileUrl = resolveFileUrl(file, urlApi);
|
|
171
|
+
var fileName = (file === null || file === void 0 ? void 0 : file.name) || 'File';
|
|
172
|
+
var _useState = useState(false),
|
|
173
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
174
|
+
imageFailed = _useState2[0],
|
|
175
|
+
setImageFailed = _useState2[1];
|
|
176
|
+
if (isPdf(file)) {
|
|
177
|
+
return /*#__PURE__*/_jsxs("a", {
|
|
178
|
+
className: "merchi-checkout-summary-file-link",
|
|
179
|
+
href: fileUrl || undefined,
|
|
180
|
+
target: "_blank",
|
|
181
|
+
rel: "noopener noreferrer",
|
|
182
|
+
title: fileName,
|
|
183
|
+
children: [/*#__PURE__*/_jsx(FaFilePdf, {
|
|
184
|
+
"aria-hidden": true
|
|
185
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
186
|
+
children: fileName
|
|
187
|
+
})]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (isImageFile(file) && fileUrl && !imageFailed) {
|
|
191
|
+
return /*#__PURE__*/_jsx("img", {
|
|
192
|
+
className: "modal-merchi-checkout-job-info-content-img",
|
|
193
|
+
src: fileUrl,
|
|
194
|
+
alt: fileName,
|
|
195
|
+
title: fileName,
|
|
196
|
+
onError: function onError() {
|
|
197
|
+
return setImageFailed(true);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
if (isImageFile(file)) {
|
|
202
|
+
return /*#__PURE__*/_jsxs("span", {
|
|
203
|
+
className: "merchi-checkout-summary-file-fallback",
|
|
204
|
+
title: fileName,
|
|
205
|
+
children: [/*#__PURE__*/_jsx(FaRegImage, {
|
|
206
|
+
"aria-hidden": true
|
|
207
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
208
|
+
children: fileName
|
|
209
|
+
})]
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
if (fileUrl) {
|
|
213
|
+
return /*#__PURE__*/_jsx("a", {
|
|
214
|
+
className: "merchi-checkout-summary-file-link",
|
|
215
|
+
href: fileUrl,
|
|
216
|
+
target: "_blank",
|
|
217
|
+
rel: "noopener noreferrer",
|
|
218
|
+
title: fileName,
|
|
219
|
+
children: fileName
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return /*#__PURE__*/_jsx("span", {
|
|
223
|
+
children: fileName
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
function VariationInfoBody(_ref3) {
|
|
227
|
+
var costDetail = _ref3.costDetail,
|
|
228
|
+
name = _ref3.name,
|
|
229
|
+
product = _ref3.product,
|
|
230
|
+
value = _ref3.value,
|
|
231
|
+
files = _ref3.files,
|
|
232
|
+
type = _ref3.type,
|
|
233
|
+
urlApi = _ref3.urlApi;
|
|
234
|
+
var isColourPicker = type === FieldType.COLOUR_PICKER;
|
|
235
|
+
var isFileUpload = type === FieldType.FILE_UPLOAD || type === FieldType.COLOUR_EXTRACT;
|
|
236
|
+
var hasFiles = Boolean(files === null || files === void 0 ? void 0 : files.length);
|
|
237
|
+
var displayValue = isColourPicker || isFileUpload && hasFiles ? null : value;
|
|
238
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
239
|
+
className: "merchi-checkout-summary-variation-row",
|
|
240
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
241
|
+
className: "merchi-checkout-summary-variation-label",
|
|
242
|
+
children: name
|
|
243
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
244
|
+
className: "merchi-checkout-summary-variation-value",
|
|
245
|
+
children: [hasFiles && /*#__PURE__*/_jsx("div", {
|
|
246
|
+
className: "merchi-checkout-summary-file-previews",
|
|
247
|
+
children: files.map(function (file, index) {
|
|
248
|
+
return /*#__PURE__*/_jsx(VariationFilePreview, {
|
|
249
|
+
file: file,
|
|
250
|
+
urlApi: urlApi
|
|
251
|
+
}, file.viewUrl || file.id || "".concat(name, "-file-").concat(index));
|
|
252
|
+
})
|
|
253
|
+
}), isColourPicker && value && /*#__PURE__*/_jsxs("div", {
|
|
254
|
+
className: "merchi-checkout-summary-colour-value",
|
|
255
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
256
|
+
style: {
|
|
257
|
+
backgroundColor: value
|
|
258
|
+
},
|
|
259
|
+
className: "color-indicator"
|
|
260
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
261
|
+
children: value
|
|
262
|
+
})]
|
|
263
|
+
}), displayValue && displayValue, costDetail || '', !hasFiles && !value && !costDetail && '-']
|
|
264
|
+
})]
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
function VariationInfo(_ref4) {
|
|
268
|
+
var product = _ref4.product,
|
|
269
|
+
variation = _ref4.variation;
|
|
270
|
+
var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
|
|
271
|
+
urlApi = _useMerchiCheckboutCo.urlApi;
|
|
272
|
+
var variationField = variation.variationField,
|
|
273
|
+
variationFiles = variation.variationFiles,
|
|
274
|
+
selectableOptions = variation.selectableOptions;
|
|
275
|
+
var fieldType = variationField.fieldType,
|
|
276
|
+
sellerProductEditable = variationField.sellerProductEditable,
|
|
277
|
+
_variationField$optio = variationField.options,
|
|
278
|
+
fieldOptions = _variationField$optio === void 0 ? [] : _variationField$optio;
|
|
279
|
+
var isVariationSelectable = isSelectable(fieldType);
|
|
280
|
+
var isTurnaroundTime = fieldType === FieldType.TURNAROUND_TIME;
|
|
281
|
+
var isColourExtract = fieldType === FieldType.COLOUR_EXTRACT;
|
|
282
|
+
var options = resolveSelectableSelectedOptions(variation, selectableOptions, fieldOptions);
|
|
283
|
+
var useSelectableDisplay = isVariationSelectable && (Boolean(options === null || options === void 0 ? void 0 : options.length) || isTurnaroundTime && variation.value);
|
|
284
|
+
return /*#__PURE__*/_jsx("div", {
|
|
285
|
+
className: "merchi-checkout-summary-variation",
|
|
286
|
+
children: isColourExtract ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
287
|
+
children: [/*#__PURE__*/_jsx(VariationInfoBody, {
|
|
288
|
+
name: variationField.name,
|
|
289
|
+
type: fieldType,
|
|
290
|
+
value: null,
|
|
291
|
+
files: variationFiles,
|
|
292
|
+
product: product,
|
|
293
|
+
urlApi: urlApi,
|
|
294
|
+
costDetail: variationCostDetail(product, variation, sellerProductEditable,
|
|
295
|
+
// Options list shows each colour cost; keep field base cost here.
|
|
296
|
+
options !== null && options !== void 0 && options.length ? {
|
|
297
|
+
fieldCostsOnly: true
|
|
298
|
+
} : {
|
|
299
|
+
includeSelectedOptionCosts: false
|
|
300
|
+
})
|
|
301
|
+
}), options !== null && options !== void 0 && options.length ? /*#__PURE__*/_jsx(VariationOptionsInfoBody, {
|
|
302
|
+
name: "".concat(variationField.name, " colours"),
|
|
303
|
+
fieldType: fieldType,
|
|
304
|
+
value: variation.value,
|
|
305
|
+
product: product,
|
|
306
|
+
selectedOptions: options,
|
|
307
|
+
variation: variation,
|
|
308
|
+
selectableOptions: selectableOptions,
|
|
309
|
+
fieldOptions: fieldOptions,
|
|
310
|
+
sellerProductEditable: sellerProductEditable
|
|
311
|
+
}) : null]
|
|
312
|
+
}) : useSelectableDisplay ? /*#__PURE__*/_jsx(VariationOptionsInfoBody, {
|
|
313
|
+
name: variationField.name,
|
|
314
|
+
fieldType: fieldType,
|
|
315
|
+
value: variation.value,
|
|
316
|
+
product: product,
|
|
317
|
+
files: variationFiles,
|
|
318
|
+
selectedOptions: options,
|
|
319
|
+
variation: variation,
|
|
320
|
+
selectableOptions: selectableOptions,
|
|
321
|
+
fieldOptions: fieldOptions,
|
|
322
|
+
sellerProductEditable: sellerProductEditable
|
|
323
|
+
}) : /*#__PURE__*/_jsx(VariationInfoBody, {
|
|
324
|
+
name: variationField.name,
|
|
325
|
+
type: variationField.fieldType,
|
|
326
|
+
value: fieldType === FieldType.AREA && variation.value ? formatAreaSummary(variation.value, localePrefersImperial() ? 'imperial' : 'metric', variationField.areaUnit || 'mm') || variation.value : variation.value,
|
|
327
|
+
files: variationFiles,
|
|
328
|
+
product: product,
|
|
329
|
+
urlApi: urlApi,
|
|
330
|
+
costDetail: variationCostDetail(product, variation, sellerProductEditable, {
|
|
331
|
+
includeSelectedOptionCosts: false
|
|
332
|
+
})
|
|
333
|
+
})
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
function ColourSelectOption(_ref5) {
|
|
337
|
+
var _option$value;
|
|
338
|
+
var option = _ref5.option,
|
|
339
|
+
selectableOptions = _ref5.selectableOptions,
|
|
340
|
+
fieldOptions = _ref5.fieldOptions,
|
|
341
|
+
product = _ref5.product,
|
|
342
|
+
sellerProductEditable = _ref5.sellerProductEditable;
|
|
343
|
+
var label = (option === null || option === void 0 || (_option$value = option.value) === null || _option$value === void 0 ? void 0 : _option$value.trim()) || '';
|
|
344
|
+
var hex = resolveOptionColour(option, selectableOptions, fieldOptions);
|
|
345
|
+
var cost = formatOptionCost(product, option, Boolean(sellerProductEditable));
|
|
346
|
+
return /*#__PURE__*/_jsxs("span", {
|
|
347
|
+
className: "merchi-checkout-summary-colour-option",
|
|
348
|
+
children: [hex && /*#__PURE__*/_jsx("span", {
|
|
349
|
+
style: {
|
|
350
|
+
backgroundColor: hex
|
|
351
|
+
},
|
|
352
|
+
className: "color-indicator"
|
|
353
|
+
}), /*#__PURE__*/_jsxs("span", {
|
|
354
|
+
children: [label || hex || '–', cost || '']
|
|
355
|
+
})]
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
function ImageSelectOption(_ref6) {
|
|
359
|
+
var _option$value2;
|
|
360
|
+
var option = _ref6.option,
|
|
361
|
+
selectableOptions = _ref6.selectableOptions,
|
|
362
|
+
fieldOptions = _ref6.fieldOptions,
|
|
363
|
+
product = _ref6.product,
|
|
364
|
+
sellerProductEditable = _ref6.sellerProductEditable;
|
|
365
|
+
var _useMerchiCheckboutCo2 = useMerchiCheckboutContext(),
|
|
366
|
+
urlApi = _useMerchiCheckboutCo2.urlApi;
|
|
367
|
+
var imageUrl = resolveOptionImageUrl(option, selectableOptions, fieldOptions, urlApi);
|
|
368
|
+
var label = (option === null || option === void 0 || (_option$value2 = option.value) === null || _option$value2 === void 0 ? void 0 : _option$value2.trim()) || '';
|
|
369
|
+
var cost = formatOptionCost(product, option, sellerProductEditable);
|
|
370
|
+
var _useState3 = useState(false),
|
|
371
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
372
|
+
imageFailed = _useState4[0],
|
|
373
|
+
setImageFailed = _useState4[1];
|
|
374
|
+
return /*#__PURE__*/_jsxs("span", {
|
|
375
|
+
className: "merchi-checkout-summary-image-select-option",
|
|
376
|
+
children: [imageUrl && !imageFailed ? /*#__PURE__*/_jsx("img", {
|
|
377
|
+
className: "modal-merchi-checkout-job-info-content-img",
|
|
378
|
+
src: imageUrl,
|
|
379
|
+
alt: label || 'Selected option',
|
|
380
|
+
title: label || undefined,
|
|
381
|
+
onError: function onError() {
|
|
382
|
+
return setImageFailed(true);
|
|
383
|
+
}
|
|
384
|
+
}) : null, /*#__PURE__*/_jsxs("span", {
|
|
385
|
+
children: [label || '–', cost || '']
|
|
386
|
+
})]
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
function getOptionId(option) {
|
|
390
|
+
var _option$optionId;
|
|
391
|
+
return (_option$optionId = option === null || option === void 0 ? void 0 : option.optionId) !== null && _option$optionId !== void 0 ? _option$optionId : option === null || option === void 0 ? void 0 : option.id;
|
|
392
|
+
}
|
|
393
|
+
function splitSelectedOptionIds(value) {
|
|
394
|
+
if (Array.isArray(value)) {
|
|
395
|
+
return value.map(String).filter(Boolean);
|
|
396
|
+
}
|
|
397
|
+
if (value == null || value === '') return [];
|
|
398
|
+
return String(value).split(',').map(function (part) {
|
|
399
|
+
return part.trim();
|
|
400
|
+
}).filter(Boolean);
|
|
401
|
+
}
|
|
402
|
+
function resolveSelectableSelectedOptions(variation) {
|
|
403
|
+
var _variation$variationF;
|
|
404
|
+
var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
405
|
+
var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
406
|
+
var fieldType = variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.fieldType;
|
|
407
|
+
if (fieldType === FieldType.COLOUR_EXTRACT) {
|
|
408
|
+
return (variation === null || variation === void 0 ? void 0 : variation.selectedOptions) || [];
|
|
409
|
+
}
|
|
410
|
+
var selectedIds = splitSelectedOptionIds(variation === null || variation === void 0 ? void 0 : variation.value);
|
|
411
|
+
if (selectedIds.length > 0) {
|
|
412
|
+
var pools = [selectableOptions, fieldOptions];
|
|
413
|
+
var resolved = [];
|
|
414
|
+
var _iterator = _createForOfIteratorHelper(selectedIds),
|
|
415
|
+
_step;
|
|
416
|
+
try {
|
|
417
|
+
var _loop = function _loop() {
|
|
418
|
+
var id = _step.value;
|
|
419
|
+
for (var _i = 0, _pools = pools; _i < _pools.length; _i++) {
|
|
420
|
+
var pool = _pools[_i];
|
|
421
|
+
var match = pool.find(function (option) {
|
|
422
|
+
return String(getOptionId(option)) === id;
|
|
423
|
+
});
|
|
424
|
+
if (match) {
|
|
425
|
+
resolved.push(match);
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
431
|
+
_loop();
|
|
432
|
+
}
|
|
433
|
+
} catch (err) {
|
|
434
|
+
_iterator.e(err);
|
|
435
|
+
} finally {
|
|
436
|
+
_iterator.f();
|
|
437
|
+
}
|
|
438
|
+
if (resolved.length > 0) {
|
|
439
|
+
return resolved;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
return (variation === null || variation === void 0 ? void 0 : variation.selectedOptions) || [];
|
|
443
|
+
}
|
|
444
|
+
function resolveTurnaroundSelectedOption(variation) {
|
|
445
|
+
var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
446
|
+
var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
447
|
+
var resolved = resolveSelectableSelectedOptions(variation, selectableOptions, fieldOptions);
|
|
448
|
+
if (resolved.length > 0) {
|
|
449
|
+
return resolved[0];
|
|
450
|
+
}
|
|
451
|
+
var valueStr = (variation === null || variation === void 0 ? void 0 : variation.value) != null && (variation === null || variation === void 0 ? void 0 : variation.value) !== '' ? String(variation.value).trim() : '';
|
|
452
|
+
if (!valueStr) return null;
|
|
453
|
+
var pools = [selectableOptions, fieldOptions];
|
|
454
|
+
for (var _i2 = 0, _pools2 = pools; _i2 < _pools2.length; _i2++) {
|
|
455
|
+
var pool = _pools2[_i2];
|
|
456
|
+
var byValue = pool.find(function (option) {
|
|
457
|
+
var _option$value3;
|
|
458
|
+
return String((_option$value3 = option.value) !== null && _option$value3 !== void 0 ? _option$value3 : '') === valueStr;
|
|
459
|
+
});
|
|
460
|
+
if (byValue) return byValue;
|
|
461
|
+
}
|
|
462
|
+
return null;
|
|
463
|
+
}
|
|
464
|
+
function formatTurnaroundDeadline(userDeadline) {
|
|
465
|
+
if (!userDeadline) return null;
|
|
466
|
+
var seconds = Number(userDeadline);
|
|
467
|
+
if (!Number.isFinite(seconds) || seconds <= 0) return null;
|
|
468
|
+
return new Date(seconds * 1000).toLocaleDateString('en-AU', {
|
|
469
|
+
weekday: 'long',
|
|
470
|
+
year: 'numeric',
|
|
471
|
+
month: 'long',
|
|
472
|
+
day: 'numeric'
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
function TurnaroundOptionLabel(_ref7) {
|
|
476
|
+
var _option$value4, _option$value5;
|
|
477
|
+
var option = _ref7.option,
|
|
478
|
+
variationField = _ref7.variationField,
|
|
479
|
+
product = _ref7.product,
|
|
480
|
+
sellerProductEditable = _ref7.sellerProductEditable;
|
|
481
|
+
var days = parseInt(String((_option$value4 = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value4 !== void 0 ? _option$value4 : ''), 10) || 0;
|
|
482
|
+
var deadline = formatTurnaroundDeadline(option === null || option === void 0 ? void 0 : option.userDeadline);
|
|
483
|
+
var shippingTimeIncluded = Boolean(variationField === null || variationField === void 0 ? void 0 : variationField.shippingTimeIncluded);
|
|
484
|
+
var deadlineLabel = shippingTimeIncluded ? 'Delivery by' : 'Produced by';
|
|
485
|
+
var cost = formatOptionCost(product, option, sellerProductEditable);
|
|
486
|
+
return /*#__PURE__*/_jsxs("span", {
|
|
487
|
+
className: "merchi-checkout-summary-turnaround-value",
|
|
488
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
489
|
+
className: "merchi-checkout-summary-turnaround-days",
|
|
490
|
+
children: days > 0 ? "".concat(days, " business day").concat(days !== 1 ? 's' : '') : (option === null || option === void 0 || (_option$value5 = option.value) === null || _option$value5 === void 0 ? void 0 : _option$value5.trim()) || '–'
|
|
491
|
+
}), deadline && /*#__PURE__*/_jsxs("span", {
|
|
492
|
+
className: "merchi-checkout-summary-turnaround-deadline",
|
|
493
|
+
children: [deadlineLabel, " ", deadline]
|
|
494
|
+
}), cost || '']
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
function VariationOptionsInfoBody(_ref8) {
|
|
498
|
+
var _variation$variationF2;
|
|
499
|
+
var name = _ref8.name,
|
|
500
|
+
selectedOptions = _ref8.selectedOptions,
|
|
501
|
+
sellerProductEditable = _ref8.sellerProductEditable,
|
|
502
|
+
product = _ref8.product,
|
|
503
|
+
fieldType = _ref8.fieldType,
|
|
504
|
+
variation = _ref8.variation,
|
|
505
|
+
_ref8$selectableOptio = _ref8.selectableOptions,
|
|
506
|
+
selectableOptions = _ref8$selectableOptio === void 0 ? [] : _ref8$selectableOptio,
|
|
507
|
+
_ref8$fieldOptions = _ref8.fieldOptions,
|
|
508
|
+
fieldOptions = _ref8$fieldOptions === void 0 ? [] : _ref8$fieldOptions;
|
|
509
|
+
var isTurnaroundTime = fieldType === FieldType.TURNAROUND_TIME;
|
|
510
|
+
var firstOption = isTurnaroundTime ? resolveTurnaroundSelectedOption({
|
|
511
|
+
selectedOptions: selectedOptions,
|
|
512
|
+
value: variation === null || variation === void 0 ? void 0 : variation.value
|
|
513
|
+
}, selectableOptions, fieldOptions) : selectedOptions[0];
|
|
514
|
+
var isColourSelect = fieldType === FieldType.COLOUR_SELECT || fieldType === FieldType.COLOUR_EXTRACT;
|
|
515
|
+
var isImageSelect = fieldType === FieldType.IMAGE_SELECT;
|
|
516
|
+
var variationField = (_variation$variationF2 = variation === null || variation === void 0 ? void 0 : variation.variationField) !== null && _variation$variationF2 !== void 0 ? _variation$variationF2 : {};
|
|
517
|
+
function renderOptionLabel(o) {
|
|
518
|
+
var _o$value;
|
|
519
|
+
if (isTurnaroundTime) {
|
|
520
|
+
return /*#__PURE__*/_jsx(TurnaroundOptionLabel, {
|
|
521
|
+
option: o,
|
|
522
|
+
variationField: variationField,
|
|
523
|
+
product: product,
|
|
524
|
+
sellerProductEditable: sellerProductEditable
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
if (isColourSelect) {
|
|
528
|
+
return /*#__PURE__*/_jsx(ColourSelectOption, {
|
|
529
|
+
option: o,
|
|
530
|
+
selectableOptions: selectableOptions,
|
|
531
|
+
fieldOptions: fieldOptions,
|
|
532
|
+
product: product,
|
|
533
|
+
sellerProductEditable: sellerProductEditable
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
if (isImageSelect) {
|
|
537
|
+
return /*#__PURE__*/_jsx(ImageSelectOption, {
|
|
538
|
+
option: o,
|
|
539
|
+
selectableOptions: selectableOptions,
|
|
540
|
+
fieldOptions: fieldOptions,
|
|
541
|
+
product: product,
|
|
542
|
+
sellerProductEditable: sellerProductEditable
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
546
|
+
children: [((_o$value = o.value) === null || _o$value === void 0 ? void 0 : _o$value.trim()) || '–', formatOptionCost(product, o, sellerProductEditable) || '']
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
550
|
+
children: selectedOptions.length > 1 && !isTurnaroundTime ? /*#__PURE__*/_jsxs("div", {
|
|
551
|
+
className: "merchi-checkout-summary-variation-row",
|
|
552
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
553
|
+
className: "merchi-checkout-summary-variation-label",
|
|
554
|
+
children: name
|
|
555
|
+
}), /*#__PURE__*/_jsx("ul", {
|
|
556
|
+
className: "merchi-checkout-summary-variation-value list-unstyled m-0",
|
|
557
|
+
children: selectedOptions.map(function (o, i) {
|
|
558
|
+
var _o$optionId;
|
|
559
|
+
return /*#__PURE__*/_jsx("li", {
|
|
560
|
+
children: renderOptionLabel(o)
|
|
561
|
+
}, "".concat(i, "-option-key-").concat((_o$optionId = o.optionId) !== null && _o$optionId !== void 0 ? _o$optionId : i));
|
|
562
|
+
})
|
|
563
|
+
})]
|
|
564
|
+
}) : firstOption ? /*#__PURE__*/_jsxs("div", {
|
|
565
|
+
className: "merchi-checkout-summary-variation-row",
|
|
566
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
567
|
+
className: "merchi-checkout-summary-variation-label",
|
|
568
|
+
children: name
|
|
569
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
570
|
+
className: "merchi-checkout-summary-variation-value",
|
|
571
|
+
children: renderOptionLabel(firstOption)
|
|
572
|
+
})]
|
|
573
|
+
}) : /*#__PURE__*/_jsxs("div", {
|
|
574
|
+
className: "merchi-checkout-summary-variation-row",
|
|
575
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
576
|
+
className: "merchi-checkout-summary-variation-label",
|
|
577
|
+
children: name
|
|
578
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
579
|
+
className: "merchi-checkout-summary-variation-value",
|
|
580
|
+
children: "-"
|
|
581
|
+
})]
|
|
582
|
+
})
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
function VariationsInfo(_ref9) {
|
|
586
|
+
var product = _ref9.product,
|
|
587
|
+
quantity = _ref9.quantity,
|
|
588
|
+
_ref9$variations = _ref9.variations,
|
|
589
|
+
variations = _ref9$variations === void 0 ? [] : _ref9$variations;
|
|
590
|
+
return /*#__PURE__*/_jsx("div", {
|
|
591
|
+
className: "merchi-checkout-summary-variations",
|
|
592
|
+
children: variations.map(function (v, i) {
|
|
593
|
+
return !isInstructionsType(v.variationField.fieldType) ? /*#__PURE__*/_jsx(VariationInfo, {
|
|
594
|
+
quantity: quantity,
|
|
595
|
+
variation: v,
|
|
596
|
+
product: product
|
|
597
|
+
}, i) : null;
|
|
598
|
+
})
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
function VariationGroupInfo(_ref0) {
|
|
602
|
+
var group = _ref0.group,
|
|
603
|
+
index = _ref0.index,
|
|
604
|
+
product = _ref0.product,
|
|
605
|
+
showSetupOnUnitPrice = _ref0.showSetupOnUnitPrice;
|
|
606
|
+
var isResell = isProductSupplierMOD(product);
|
|
607
|
+
var quantity = group.quantity,
|
|
608
|
+
variations = group.variations;
|
|
609
|
+
var visibleVariations = (variations !== null && variations !== void 0 ? variations : []).filter(function (v) {
|
|
610
|
+
var _v$variationField;
|
|
611
|
+
return !isInstructionsType(v === null || v === void 0 || (_v$variationField = v.variationField) === null || _v$variationField === void 0 ? void 0 : _v$variationField.fieldType);
|
|
612
|
+
});
|
|
613
|
+
var costLabel = isResell ? 'Unit Cost' : 'Group Cost';
|
|
614
|
+
var unitPriceValue = showSetupOnUnitPrice ? formatUnitPriceWithSetup(product) : formatCost(product, Number(product === null || product === void 0 ? void 0 : product.unitPrice) || 0);
|
|
615
|
+
return /*#__PURE__*/_jsxs("section", {
|
|
616
|
+
className: "merchi-checkout-summary-group",
|
|
617
|
+
children: [/*#__PURE__*/_jsxs("strong", {
|
|
618
|
+
className: "merchi-checkout-summary-order-detail-title",
|
|
619
|
+
children: ["Group ", index + 1, " Information"]
|
|
620
|
+
}), !isResell && quantity > 0 && /*#__PURE__*/_jsx(SummaryFieldRow, {
|
|
621
|
+
label: "Quantity",
|
|
622
|
+
value: quantity
|
|
623
|
+
}), /*#__PURE__*/_jsx(SummaryFieldRow, {
|
|
624
|
+
label: "Unit Price",
|
|
625
|
+
value: unitPriceValue
|
|
626
|
+
}), visibleVariations.length > 0 && /*#__PURE__*/_jsx(VariationsInfo, {
|
|
627
|
+
quantity: quantity,
|
|
628
|
+
variations: variations,
|
|
629
|
+
product: product
|
|
630
|
+
}), /*#__PURE__*/_jsxs("strong", {
|
|
631
|
+
className: "merchi-checkout-summary-group-cost",
|
|
632
|
+
children: [costLabel, ": ", formatCost(product, group.groupCost)]
|
|
633
|
+
})]
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
export default function JobInfoContent() {
|
|
637
|
+
var _useMerchiCheckboutCo3 = useMerchiCheckboutContext(),
|
|
638
|
+
job = _useMerchiCheckboutCo3.job;
|
|
639
|
+
var product = job.product,
|
|
640
|
+
_job$quantity = job.quantity,
|
|
641
|
+
quantity = _job$quantity === void 0 ? 0 : _job$quantity,
|
|
642
|
+
_job$variations = job.variations,
|
|
643
|
+
variations = _job$variations === void 0 ? [] : _job$variations,
|
|
644
|
+
_job$variationsGroups = job.variationsGroups,
|
|
645
|
+
variationsGroups = _job$variationsGroups === void 0 ? [] : _job$variationsGroups;
|
|
646
|
+
var needsShipping = product.needsShipping;
|
|
647
|
+
var totalCost = currencyTotalCostShowIncTax(job);
|
|
648
|
+
var isResell = isProductSupplierMOD(product);
|
|
649
|
+
var hasGroups = variationsGroups.length > 0;
|
|
650
|
+
var jobLevelVariations = (variations !== null && variations !== void 0 ? variations : []).filter(function (v) {
|
|
651
|
+
var _v$variationField2;
|
|
652
|
+
return !isInstructionsType(v === null || v === void 0 || (_v$variationField2 = v.variationField) === null || _v$variationField2 === void 0 ? void 0 : _v$variationField2.fieldType);
|
|
653
|
+
});
|
|
654
|
+
var totalQuantity = hasGroups ? variationsGroups.reduce(function (sum, g) {
|
|
655
|
+
return sum + (Number(g.quantity) || 0);
|
|
656
|
+
}, 0) : Number(quantity) || 0;
|
|
657
|
+
var setupPerGroup = Boolean(product === null || product === void 0 ? void 0 : product.setupPerGroup);
|
|
658
|
+
var hasSetupPrice = Number(product === null || product === void 0 ? void 0 : product.setupPrice) > 0;
|
|
659
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
660
|
+
className: "modal-merchi-checkout-job-info-content merchi-checkout-summary",
|
|
661
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
662
|
+
className: "merchi-checkout-summary-section-title",
|
|
663
|
+
children: product.name
|
|
664
|
+
}), hasGroups && /*#__PURE__*/_jsx("div", {
|
|
665
|
+
className: "merchi-checkout-summary-groups",
|
|
666
|
+
children: variationsGroups.map(function (g, i) {
|
|
667
|
+
return g.quantity ? /*#__PURE__*/_jsx(VariationGroupInfo, {
|
|
668
|
+
group: g,
|
|
669
|
+
index: i,
|
|
670
|
+
product: product,
|
|
671
|
+
showSetupOnUnitPrice: setupPerGroup
|
|
672
|
+
}, "".concat(i, "-job-info-content")) : null;
|
|
673
|
+
})
|
|
674
|
+
}), !hasGroups && /*#__PURE__*/_jsxs("div", {
|
|
675
|
+
className: "merchi-checkout-summary-standalone",
|
|
676
|
+
children: [/*#__PURE__*/_jsx("strong", {
|
|
677
|
+
className: "merchi-checkout-summary-order-detail-title",
|
|
678
|
+
children: "Order Information"
|
|
679
|
+
}), quantity > 0 && /*#__PURE__*/_jsx(SummaryFieldRow, {
|
|
680
|
+
label: "Quantity",
|
|
681
|
+
value: quantity
|
|
682
|
+
}), /*#__PURE__*/_jsx(SummaryFieldRow, {
|
|
683
|
+
label: "Unit Price",
|
|
684
|
+
value: formatUnitPriceWithSetup(product)
|
|
685
|
+
}), jobLevelVariations.length > 0 && /*#__PURE__*/_jsx(VariationsInfo, {
|
|
686
|
+
quantity: quantity,
|
|
687
|
+
variations: variations,
|
|
688
|
+
product: product
|
|
689
|
+
})]
|
|
690
|
+
}), hasGroups && jobLevelVariations.length > 0 && /*#__PURE__*/_jsxs("div", {
|
|
691
|
+
className: "merchi-checkout-summary-standalone",
|
|
692
|
+
children: [/*#__PURE__*/_jsx("strong", {
|
|
693
|
+
className: "merchi-checkout-summary-order-detail-title",
|
|
694
|
+
children: "Order Information"
|
|
695
|
+
}), /*#__PURE__*/_jsx(VariationsInfo, {
|
|
696
|
+
quantity: quantity,
|
|
697
|
+
variations: variations,
|
|
698
|
+
product: product
|
|
699
|
+
})]
|
|
700
|
+
}), !isResell && /*#__PURE__*/_jsxs("div", {
|
|
701
|
+
className: "merchi-checkout-summary-total",
|
|
702
|
+
children: [totalQuantity > 0 && /*#__PURE__*/_jsx(SummaryAmountRow, {
|
|
703
|
+
className: "merchi-checkout-summary-total-quantity",
|
|
704
|
+
label: "Total Quantity",
|
|
705
|
+
amount: totalQuantity
|
|
706
|
+
}), hasGroups && hasSetupPrice && !setupPerGroup && /*#__PURE__*/_jsx(SummaryAmountRow, {
|
|
707
|
+
label: "Setup",
|
|
708
|
+
amount: formatCost(product, Number(product.setupPrice))
|
|
709
|
+
}), /*#__PURE__*/_jsx(SummaryAmountRow, {
|
|
710
|
+
label: "Total Order Cost",
|
|
711
|
+
labelExtra: needsShipping ? /*#__PURE__*/_jsx("small", {
|
|
712
|
+
className: "merchi-checkout-summary-total-note",
|
|
713
|
+
children: " ex Shipment"
|
|
714
|
+
}) : undefined,
|
|
715
|
+
amount: totalCost
|
|
716
|
+
})]
|
|
717
|
+
}), !!(isResell && !hasGroups) && /*#__PURE__*/_jsxs("div", {
|
|
718
|
+
children: [/*#__PURE__*/_jsxs("strong", {
|
|
719
|
+
className: "mb-0",
|
|
720
|
+
children: [isResell ? 'Approximate Unit' : 'Total', " Cost"]
|
|
721
|
+
}), ' ', /*#__PURE__*/_jsx("strong", {
|
|
722
|
+
className: "mb-0 d-block",
|
|
723
|
+
children: totalCost
|
|
724
|
+
})]
|
|
725
|
+
})]
|
|
726
|
+
});
|
|
727
|
+
}
|
|
728
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsImwiLCJpIiwiT2JqZWN0IiwicHVzaCIsIlJlYWN0IiwidXNlU3RhdGUiLCJGYUZpbGVQZGYiLCJGYVJlZ0ltYWdlIiwiZm9ybWF0Q3VycmVuY3kiLCJjdXJyZW5jeVRvdGFsQ29zdFNob3dJbmNUYXgiLCJpc0luc3RydWN0aW9uc1R5cGUiLCJpc1Byb2R1Y3RTdXBwbGllck1PRCIsImlzU2VsZWN0YWJsZSIsIkZpZWxkVHlwZSIsImVzdGltYXRlQXJlYUNvc3RzIiwiZm9ybWF0QXJlYVN1bW1hcnkiLCJsb2NhbGVQcmVmZXJzSW1wZXJpYWwiLCJ1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IiwiU3VtbWFyeUFtb3VudFJvdyIsIlN1bW1hcnlGaWVsZFJvdyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImZvcm1hdENvc3QiLCJwcm9kdWN0IiwiY29zdCIsImN1cnJlbmN5Iiwic2hvd0NvZGVJZk5vU3ltYm9sIiwicGFyc2VDb3N0QW1vdW50IiwiYW1vdW50IiwicGFyc2VGbG9hdCIsIk51bWJlciIsImlzRmluaXRlIiwiZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsIiwib25jZU9mZkNvc3QiLCJ1bml0Q29zdCIsInBhcnRzIiwib25jZU9mZiIsInVuaXQiLCJjb25jYXQiLCJqb2luIiwib3B0aW9uT25jZU9mZiIsIm9wdGlvbiIsInZhcmlhdGlvbkNvc3QiLCJvcHRpb25Vbml0IiwidmFyaWF0aW9uVW5pdENvc3QiLCJwcm9kdWN0U2V0dXBTdWZmaXgiLCJzZXR1cFByaWNlIiwibGFiZWwiLCJzZXR1cFBlckdyb3VwIiwiZm9ybWF0VW5pdFByaWNlV2l0aFNldHVwIiwidW5pdFByaWNlIiwiaXNQZGYiLCJmaWxlIiwibWltZXR5cGUiLCJpc0ltYWdlRmlsZSIsInN0YXJ0c1dpdGgiLCJ0b0xvd2VyQ2FzZSIsImFic29sdXRpemVGaWxlVXJsIiwicmF3IiwidXJsQXBpIiwidXJsIiwidHJpbSIsImJhc2UiLCJVUkwiLCJvcmlnaW4iLCJocmVmIiwiX3VudXNlZCIsInJlc29sdmVGaWxlVXJsIiwidmlld1VybCIsImRvd25sb2FkVXJsIiwib3B0aW9uSW1hZ2VVcmwiLCJfb3B0aW9uJGxpbmtlZEZpbGUiLCJfb3B0aW9uJGxpbmtlZEZpbGUyIiwibGlua2VkRmlsZSIsImZpbmRNYXRjaGluZ09wdGlvbiIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJmaW5kIiwiU3RyaW5nIiwib3B0aW9uSWQiLCJyZXNvbHZlT3B0aW9uQ29sb3VyIiwiX29wdGlvbiRjb2xvdXIiLCJfZmluZE1hdGNoaW5nT3B0aW9uIiwiX2ZpbmRNYXRjaGluZ09wdGlvbjIiLCJzZWxlY3RhYmxlT3B0aW9ucyIsImZpZWxkT3B0aW9ucyIsImRpcmVjdCIsImNvbG91ciIsImZyb21TZWxlY3RhYmxlIiwicmVzb2x2ZU9wdGlvbkltYWdlVXJsIiwiZm9ybWF0T3B0aW9uQ29zdCIsInNlbGxlclByb2R1Y3RFZGl0YWJsZSIsIm9uY2VPZmZVbml0IiwidG90YWxDb3N0IiwidmFyaWF0aW9uQ29zdERldGFpbCIsInZhcmlhdGlvbiIsIl92YXJpYXRpb24kb25jZU9mZkNvcyIsIl92YXJpYXRpb24kdW5pdENvc3QiLCJfcmVmIiwiX3JlZiRpbmNsdWRlU2VsZWN0ZWRPIiwiaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHMiLCJfcmVmJGZpZWxkQ29zdHNPbmx5IiwiZmllbGRDb3N0c09ubHkiLCJmaWVsZCIsInZhcmlhdGlvbkZpZWxkIiwiZmllbGRUeXBlIiwiQVJFQSIsImFyZWFDb3N0cyIsInNlbGVjdGVkIiwic2VsZWN0ZWRPcHRpb25zIiwiZmllbGRPbmNlIiwiQ09MT1VSX0VYVFJBQ1QiLCJmaWVsZFVuaXQiLCJyZWR1Y2UiLCJzdW0iLCJWYXJpYXRpb25GaWxlUHJldmlldyIsIl9yZWYyIiwiZmlsZVVybCIsImZpbGVOYW1lIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImltYWdlRmFpbGVkIiwic2V0SW1hZ2VGYWlsZWQiLCJjbGFzc05hbWUiLCJ0YXJnZXQiLCJyZWwiLCJ0aXRsZSIsImNoaWxkcmVuIiwic3JjIiwiYWx0Iiwib25FcnJvciIsIlZhcmlhdGlvbkluZm9Cb2R5IiwiX3JlZjMiLCJjb3N0RGV0YWlsIiwiZmlsZXMiLCJ0eXBlIiwiaXNDb2xvdXJQaWNrZXIiLCJDT0xPVVJfUElDS0VSIiwiaXNGaWxlVXBsb2FkIiwiRklMRV9VUExPQUQiLCJoYXNGaWxlcyIsIkJvb2xlYW4iLCJkaXNwbGF5VmFsdWUiLCJtYXAiLCJpbmRleCIsImlkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJWYXJpYXRpb25JbmZvIiwiX3JlZjQiLCJfdXNlTWVyY2hpQ2hlY2tib3V0Q28iLCJ2YXJpYXRpb25GaWxlcyIsIl92YXJpYXRpb25GaWVsZCRvcHRpbyIsImlzVmFyaWF0aW9uU2VsZWN0YWJsZSIsImlzVHVybmFyb3VuZFRpbWUiLCJUVVJOQVJPVU5EX1RJTUUiLCJpc0NvbG91ckV4dHJhY3QiLCJyZXNvbHZlU2VsZWN0YWJsZVNlbGVjdGVkT3B0aW9ucyIsInVzZVNlbGVjdGFibGVEaXNwbGF5IiwiVmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5IiwiYXJlYVVuaXQiLCJDb2xvdXJTZWxlY3RPcHRpb24iLCJfcmVmNSIsIl9vcHRpb24kdmFsdWUiLCJoZXgiLCJJbWFnZVNlbGVjdE9wdGlvbiIsIl9yZWY2IiwiX29wdGlvbiR2YWx1ZTIiLCJfdXNlTWVyY2hpQ2hlY2tib3V0Q28yIiwiaW1hZ2VVcmwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImdldE9wdGlvbklkIiwiX29wdGlvbiRvcHRpb25JZCIsInNwbGl0U2VsZWN0ZWRPcHRpb25JZHMiLCJmaWx0ZXIiLCJzcGxpdCIsInBhcnQiLCJfdmFyaWF0aW9uJHZhcmlhdGlvbkYiLCJzZWxlY3RlZElkcyIsInBvb2xzIiwicmVzb2x2ZWQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9sb29wIiwiX2kiLCJfcG9vbHMiLCJwb29sIiwibWF0Y2giLCJlcnIiLCJyZXNvbHZlVHVybmFyb3VuZFNlbGVjdGVkT3B0aW9uIiwidmFsdWVTdHIiLCJfaTIiLCJfcG9vbHMyIiwiYnlWYWx1ZSIsIl9vcHRpb24kdmFsdWUzIiwiZm9ybWF0VHVybmFyb3VuZERlYWRsaW5lIiwidXNlckRlYWRsaW5lIiwic2Vjb25kcyIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ3ZWVrZGF5IiwieWVhciIsIm1vbnRoIiwiZGF5IiwiVHVybmFyb3VuZE9wdGlvbkxhYmVsIiwiX3JlZjciLCJfb3B0aW9uJHZhbHVlNCIsIl9vcHRpb24kdmFsdWU1IiwiZGF5cyIsInBhcnNlSW50IiwiZGVhZGxpbmUiLCJzaGlwcGluZ1RpbWVJbmNsdWRlZCIsImRlYWRsaW5lTGFiZWwiLCJfcmVmOCIsIl92YXJpYXRpb24kdmFyaWF0aW9uRjIiLCJfcmVmOCRzZWxlY3RhYmxlT3B0aW8iLCJfcmVmOCRmaWVsZE9wdGlvbnMiLCJmaXJzdE9wdGlvbiIsImlzQ29sb3VyU2VsZWN0IiwiQ09MT1VSX1NFTEVDVCIsImlzSW1hZ2VTZWxlY3QiLCJJTUFHRV9TRUxFQ1QiLCJyZW5kZXJPcHRpb25MYWJlbCIsIl9vJHZhbHVlIiwiX28kb3B0aW9uSWQiLCJWYXJpYXRpb25zSW5mbyIsIl9yZWY5IiwicXVhbnRpdHkiLCJfcmVmOSR2YXJpYXRpb25zIiwidmFyaWF0aW9ucyIsInYiLCJWYXJpYXRpb25Hcm91cEluZm8iLCJfcmVmMCIsImdyb3VwIiwic2hvd1NldHVwT25Vbml0UHJpY2UiLCJpc1Jlc2VsbCIsInZpc2libGVWYXJpYXRpb25zIiwiX3YkdmFyaWF0aW9uRmllbGQiLCJjb3N0TGFiZWwiLCJ1bml0UHJpY2VWYWx1ZSIsImdyb3VwQ29zdCIsIkpvYkluZm9Db250ZW50IiwiX3VzZU1lcmNoaUNoZWNrYm91dENvMyIsImpvYiIsIl9qb2IkcXVhbnRpdHkiLCJfam9iJHZhcmlhdGlvbnMiLCJfam9iJHZhcmlhdGlvbnNHcm91cHMiLCJ2YXJpYXRpb25zR3JvdXBzIiwibmVlZHNTaGlwcGluZyIsImhhc0dyb3VwcyIsImpvYkxldmVsVmFyaWF0aW9ucyIsIl92JHZhcmlhdGlvbkZpZWxkMiIsInRvdGFsUXVhbnRpdHkiLCJnIiwiaGFzU2V0dXBQcmljZSIsImxhYmVsRXh0cmEiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9Kb2JJbmZvQ29udGVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRmFGaWxlUGRmLCBGYVJlZ0ltYWdlIH0gZnJvbSAncmVhY3QtaWNvbnMvZmEnO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGN1cnJlbmN5VG90YWxDb3N0U2hvd0luY1RheCB9IGZyb20gJy4vY3VycmVuY3knO1xuaW1wb3J0IHtcbiAgaXNJbnN0cnVjdGlvbnNUeXBlLFxuICBpc1Byb2R1Y3RTdXBwbGllck1PRCxcbiAgaXNTZWxlY3RhYmxlLFxuICBGaWVsZFR5cGUsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGVzdGltYXRlQXJlYUNvc3RzLFxuICBmb3JtYXRBcmVhU3VtbWFyeSxcbiAgbG9jYWxlUHJlZmVyc0ltcGVyaWFsLFxufSBmcm9tICcuLi9hcmVhJztcbmltcG9ydCB7IHVzZU1lcmNoaUNoZWNrYm91dENvbnRleHQgfSBmcm9tICcuL01lcmNoaUNoZWNrb3V0UHJvdmlkZXInO1xuaW1wb3J0IHtcbiAgU3VtbWFyeUFtb3VudFJvdyxcbiAgU3VtbWFyeUZpZWxkUm93LFxufSBmcm9tICcuL0NoZWNrb3V0U3VtbWFyeUZpZWxkcyc7XG5cbmZ1bmN0aW9uIGZvcm1hdENvc3QocHJvZHVjdDogYW55LCBjb3N0OiBudW1iZXIpIHtcbiAgY29uc3QgY3VycmVuY3kgPSBwcm9kdWN0LmN1cnJlbmN5ID8gcHJvZHVjdC5jdXJyZW5jeSA6ICdBVUQnO1xuICByZXR1cm4gZm9ybWF0Q3VycmVuY3koY29zdCwge1xuICAgIGN1cnJlbmN5LFxuICAgIHNob3dDb2RlSWZOb1N5bWJvbDogZmFsc2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvc3RBbW91bnQodmFsdWU6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGFtb3VudCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKGFtb3VudCkgJiYgYW1vdW50ID4gMCA/IGFtb3VudCA6IDA7XG59XG5cbi8qKiBNYXRjaCBwcm9kdWN0LWZvcm0gd29yZGluZzogXCIrICRYIG9uY2Ugb2ZmXCIgLyBcIisgJFkgcGVyIHVuaXRcIi4gKi9cbmZ1bmN0aW9uIGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcbiAgcHJvZHVjdDogYW55LFxuICBvbmNlT2ZmQ29zdDogYW55LFxuICB1bml0Q29zdDogYW55XG4pIHtcbiAgY29uc3QgY3VycmVuY3kgPSBwcm9kdWN0Py5jdXJyZW5jeSB8fCAnQVVEJztcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG9uY2VPZmYgPSBwYXJzZUNvc3RBbW91bnQob25jZU9mZkNvc3QpO1xuICBjb25zdCB1bml0ID0gcGFyc2VDb3N0QW1vdW50KHVuaXRDb3N0KTtcbiAgaWYgKG9uY2VPZmYpIHtcbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgYCArICR7Zm9ybWF0Q3VycmVuY3kob25jZU9mZiwgeyBjdXJyZW5jeSwgc2hvd0NvZGVJZk5vU3ltYm9sOiBmYWxzZSB9KX0gb25jZSBvZmZgXG4gICAgKTtcbiAgfVxuICBpZiAodW5pdCkge1xuICAgIHBhcnRzLnB1c2goXG4gICAgICBgICsgJHtmb3JtYXRDdXJyZW5jeSh1bml0LCB7IGN1cnJlbmN5LCBzaG93Q29kZUlmTm9TeW1ib2w6IGZhbHNlIH0pfSBwZXIgdW5pdGBcbiAgICApO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uT25jZU9mZihvcHRpb246IGFueSk6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgcGFyc2VDb3N0QW1vdW50KG9wdGlvbj8ub25jZU9mZkNvc3QpIHx8XG4gICAgcGFyc2VDb3N0QW1vdW50KG9wdGlvbj8udmFyaWF0aW9uQ29zdCkgfHxcbiAgICAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvblVuaXQob3B0aW9uOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIHBhcnNlQ29zdEFtb3VudChvcHRpb24/LnVuaXRDb3N0KSB8fFxuICAgIHBhcnNlQ29zdEFtb3VudChvcHRpb24/LnZhcmlhdGlvblVuaXRDb3N0KSB8fFxuICAgIDBcbiAgKTtcbn1cblxuLyoqIFByb2R1Y3Qgc2V0dXAgZmVlIHNob3duIG5leHQgdG8gdW5pdCBwcmljZSwgbWF0Y2hpbmcgcHJvZHVjdC1mb3JtIHdvcmRpbmcuICovXG5mdW5jdGlvbiBwcm9kdWN0U2V0dXBTdWZmaXgocHJvZHVjdDogYW55KSB7XG4gIGNvbnN0IHNldHVwUHJpY2UgPSBOdW1iZXIocHJvZHVjdD8uc2V0dXBQcmljZSk7XG4gIGlmICghc2V0dXBQcmljZSkgcmV0dXJuICcnO1xuICBjb25zdCBsYWJlbCA9IHByb2R1Y3Quc2V0dXBQZXJHcm91cCA/ICdzZXR1cCBwZXIgZ3JvdXAnIDogJ3NldHVwJztcbiAgcmV0dXJuIGAgKyAke2Zvcm1hdENvc3QocHJvZHVjdCwgc2V0dXBQcmljZSl9ICR7bGFiZWx9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5pdFByaWNlV2l0aFNldHVwKHByb2R1Y3Q6IGFueSkge1xuICByZXR1cm4gYCR7Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKX0ke3Byb2R1Y3RTZXR1cFN1ZmZpeChwcm9kdWN0KX1gO1xufVxuXG5mdW5jdGlvbiBpc1BkZihmaWxlOiBhbnkpIHtcbiAgY29uc3QgbWltZXR5cGUgPSBmaWxlPy5taW1ldHlwZSB8fCAnJztcbiAgcmV0dXJuIG1pbWV0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJyB8fCBtaW1ldHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtcGRmJztcbn1cblxuZnVuY3Rpb24gaXNJbWFnZUZpbGUoZmlsZTogYW55KSB7XG4gIGNvbnN0IG1pbWV0eXBlID0gZmlsZT8ubWltZXR5cGUgfHwgJyc7XG4gIGlmIChtaW1ldHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IG5hbWUgPSAoZmlsZT8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIC9cXC4oanBlP2d8cG5nfGdpZnx3ZWJwfHN2Z3xibXApJC8udGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gYWJzb2x1dGl6ZUZpbGVVcmwocmF3OiBzdHJpbmcsIHVybEFwaT86IHN0cmluZykge1xuICBjb25zdCB1cmwgPSAocmF3IHx8ICcnKS50cmltKCk7XG4gIGlmICghdXJsIHx8IHVybCA9PT0gJ3VuZGVmaW5lZCcgfHwgdXJsID09PSAnbnVsbCcpIHJldHVybiAnJztcbiAgaWYgKC9eKGh0dHBzPzp8YmxvYjp8ZGF0YTopL2kudGVzdCh1cmwpKSByZXR1cm4gdXJsO1xuICBpZiAoIXVybEFwaSkgcmV0dXJuIHVybDtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlID0gbmV3IFVSTCh1cmxBcGkpO1xuICAgIHJldHVybiBuZXcgVVJMKHVybCwgYCR7YmFzZS5vcmlnaW59L2ApLmhyZWY7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZpbGVVcmwoZmlsZTogYW55LCB1cmxBcGk/OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFic29sdXRpemVGaWxlVXJsKFxuICAgIGZpbGU/LnZpZXdVcmwgfHwgZmlsZT8uZG93bmxvYWRVcmwgfHwgJycsXG4gICAgdXJsQXBpXG4gICk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbkltYWdlVXJsKG9wdGlvbjogYW55LCB1cmxBcGk/OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFic29sdXRpemVGaWxlVXJsKFxuICAgIG9wdGlvbj8ubGlua2VkRmlsZT8udmlld1VybCB8fCBvcHRpb24/LmxpbmtlZEZpbGU/LmRvd25sb2FkVXJsIHx8ICcnLFxuICAgIHVybEFwaVxuICApO1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uOiBhbnksIG9wdGlvbnM6IGFueVtdID0gW10pIHtcbiAgcmV0dXJuIG9wdGlvbnMuZmluZCgobykgPT4gU3RyaW5nKG8ub3B0aW9uSWQpID09PSBTdHJpbmcob3B0aW9uPy5vcHRpb25JZCkpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlT3B0aW9uQ29sb3VyKFxuICBvcHRpb246IGFueSxcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXG4gIGZpZWxkT3B0aW9uczogYW55W10gPSBbXVxuKSB7XG4gIGNvbnN0IGRpcmVjdCA9IG9wdGlvbj8uY29sb3VyPy50cmltKCk7XG4gIGlmIChkaXJlY3QpIHJldHVybiBkaXJlY3Q7XG4gIGNvbnN0IGZyb21TZWxlY3RhYmxlID0gZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbiwgc2VsZWN0YWJsZU9wdGlvbnMpPy5jb2xvdXI/LnRyaW0oKTtcbiAgaWYgKGZyb21TZWxlY3RhYmxlKSByZXR1cm4gZnJvbVNlbGVjdGFibGU7XG4gIHJldHVybiBmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uLCBmaWVsZE9wdGlvbnMpPy5jb2xvdXI/LnRyaW0oKSB8fCAnJztcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbkltYWdlVXJsKFxuICBvcHRpb246IGFueSxcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXG4gIGZpZWxkT3B0aW9uczogYW55W10gPSBbXSxcbiAgdXJsQXBpPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgZGlyZWN0ID0gb3B0aW9uSW1hZ2VVcmwob3B0aW9uLCB1cmxBcGkpO1xuICBpZiAoZGlyZWN0KSByZXR1cm4gZGlyZWN0O1xuICBjb25zdCBmcm9tU2VsZWN0YWJsZSA9IG9wdGlvbkltYWdlVXJsKFxuICAgIGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zKSxcbiAgICB1cmxBcGlcbiAgKTtcbiAgaWYgKGZyb21TZWxlY3RhYmxlKSByZXR1cm4gZnJvbVNlbGVjdGFibGU7XG4gIHJldHVybiBvcHRpb25JbWFnZVVybChmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uLCBmaWVsZE9wdGlvbnMpLCB1cmxBcGkpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25Db3N0KFxuICBwcm9kdWN0OiBhbnksXG4gIG9wdGlvbjogYW55LFxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW5cbikge1xuICBpZiAoc2VsbGVyUHJvZHVjdEVkaXRhYmxlIHx8ICFvcHRpb24pIHJldHVybiBudWxsO1xuICBjb25zdCBvbmNlT2ZmVW5pdCA9IGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcbiAgICBwcm9kdWN0LFxuICAgIG9wdGlvbk9uY2VPZmYob3B0aW9uKSxcbiAgICBvcHRpb25Vbml0KG9wdGlvbilcbiAgKTtcbiAgaWYgKG9uY2VPZmZVbml0KSByZXR1cm4gb25jZU9mZlVuaXQ7XG4gIGlmIChvcHRpb24udG90YWxDb3N0KSB7XG4gICAgcmV0dXJuIGAgKyAke2Zvcm1hdENvc3QocHJvZHVjdCwgb3B0aW9uLnRvdGFsQ29zdCl9YDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdmFyaWF0aW9uQ29zdERldGFpbChcbiAgcHJvZHVjdDogYW55LFxuICB2YXJpYXRpb246IGFueSxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlOiBib29sZWFuLFxuICB7XG4gICAgaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHMgPSB0cnVlLFxuICAgIGZpZWxkQ29zdHNPbmx5ID0gZmFsc2UsXG4gIH06IHtcbiAgICBpbmNsdWRlU2VsZWN0ZWRPcHRpb25Db3N0cz86IGJvb2xlYW47XG4gICAgZmllbGRDb3N0c09ubHk/OiBib29sZWFuO1xuICB9ID0ge31cbikge1xuICBpZiAoc2VsbGVyUHJvZHVjdEVkaXRhYmxlKSByZXR1cm4gJyc7XG5cbiAgY29uc3QgZmllbGQgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkIHx8IHt9O1xuICBjb25zdCBmaWVsZFR5cGUgPSBOdW1iZXIoZmllbGQuZmllbGRUeXBlKTtcblxuICBpZiAoZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQVJFQSkge1xuICAgIGNvbnN0IGFyZWFDb3N0cyA9IGVzdGltYXRlQXJlYUNvc3RzKGZpZWxkLCB2YXJpYXRpb24/LnZhbHVlKTtcbiAgICBpZiAoYXJlYUNvc3RzKSB7XG4gICAgICByZXR1cm4gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxuICAgICAgICBwcm9kdWN0LFxuICAgICAgICBhcmVhQ29zdHMub25jZU9mZkNvc3QsXG4gICAgICAgIGFyZWFDb3N0cy51bml0Q29zdFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZmllbGRDb3N0c09ubHkpIHtcbiAgICByZXR1cm4gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxuICAgICAgcHJvZHVjdCxcbiAgICAgIGZpZWxkLnZhcmlhdGlvbkNvc3QsXG4gICAgICBmaWVsZC52YXJpYXRpb25Vbml0Q29zdFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzZWxlY3RlZCA9IEFycmF5LmlzQXJyYXkodmFyaWF0aW9uPy5zZWxlY3RlZE9wdGlvbnMpXG4gICAgPyB2YXJpYXRpb24uc2VsZWN0ZWRPcHRpb25zXG4gICAgOiBbXTtcbiAgaWYgKGluY2x1ZGVTZWxlY3RlZE9wdGlvbkNvc3RzICYmIHNlbGVjdGVkLmxlbmd0aCkge1xuICAgIGNvbnN0IGZpZWxkT25jZSA9XG4gICAgICBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVFxuICAgICAgICA/IHBhcnNlQ29zdEFtb3VudChmaWVsZC52YXJpYXRpb25Db3N0KVxuICAgICAgICA6IDA7XG4gICAgY29uc3QgZmllbGRVbml0ID1cbiAgICAgIGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9FWFRSQUNUXG4gICAgICAgID8gcGFyc2VDb3N0QW1vdW50KGZpZWxkLnZhcmlhdGlvblVuaXRDb3N0KVxuICAgICAgICA6IDA7XG4gICAgcmV0dXJuIGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcbiAgICAgIHByb2R1Y3QsXG4gICAgICBmaWVsZE9uY2UgK1xuICAgICAgICBzZWxlY3RlZC5yZWR1Y2UoXG4gICAgICAgICAgKHN1bTogbnVtYmVyLCBvcHRpb246IGFueSkgPT4gc3VtICsgb3B0aW9uT25jZU9mZihvcHRpb24pLFxuICAgICAgICAgIDBcbiAgICAgICAgKSxcbiAgICAgIGZpZWxkVW5pdCArXG4gICAgICAgIHNlbGVjdGVkLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIG9wdGlvbjogYW55KSA9PiBzdW0gKyBvcHRpb25Vbml0KG9wdGlvbiksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG9uY2VPZmZVbml0ID0gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxuICAgIHByb2R1Y3QsXG4gICAgdmFyaWF0aW9uPy5vbmNlT2ZmQ29zdCA/PyBmaWVsZC52YXJpYXRpb25Db3N0LFxuICAgIHZhcmlhdGlvbj8udW5pdENvc3QgPz8gZmllbGQudmFyaWF0aW9uVW5pdENvc3RcbiAgKTtcbiAgaWYgKG9uY2VPZmZVbml0KSByZXR1cm4gb25jZU9mZlVuaXQ7XG4gIGlmICh2YXJpYXRpb24/LmNvc3QpIHtcbiAgICByZXR1cm4gYCArICR7Zm9ybWF0Q29zdChwcm9kdWN0LCB2YXJpYXRpb24uY29zdCl9YDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkZpbGVQcmV2aWV3KHtcbiAgZmlsZSxcbiAgdXJsQXBpLFxufToge1xuICBmaWxlOiBhbnk7XG4gIHVybEFwaT86IHN0cmluZztcbn0pIHtcbiAgY29uc3QgZmlsZVVybCA9IHJlc29sdmVGaWxlVXJsKGZpbGUsIHVybEFwaSk7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZT8ubmFtZSB8fCAnRmlsZSc7XG4gIGNvbnN0IFtpbWFnZUZhaWxlZCwgc2V0SW1hZ2VGYWlsZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGlmIChpc1BkZihmaWxlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtbGluaydcbiAgICAgICAgaHJlZj17ZmlsZVVybCB8fCB1bmRlZmluZWR9XG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgICByZWw9J25vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgIHRpdGxlPXtmaWxlTmFtZX1cbiAgICAgID5cbiAgICAgICAgPEZhRmlsZVBkZiBhcmlhLWhpZGRlbiAvPlxuICAgICAgICA8c3Bhbj57ZmlsZU5hbWV9PC9zcGFuPlxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNJbWFnZUZpbGUoZmlsZSkgJiYgZmlsZVVybCAmJiAhaW1hZ2VGYWlsZWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGltZ1xuICAgICAgICBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50LWltZydcbiAgICAgICAgc3JjPXtmaWxlVXJsfVxuICAgICAgICBhbHQ9e2ZpbGVOYW1lfVxuICAgICAgICB0aXRsZT17ZmlsZU5hbWV9XG4gICAgICAgIG9uRXJyb3I9eygpID0+IHNldEltYWdlRmFpbGVkKHRydWUpfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgaWYgKGlzSW1hZ2VGaWxlKGZpbGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZmlsZS1mYWxsYmFjaydcbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxuICAgICAgPlxuICAgICAgICA8RmFSZWdJbWFnZSBhcmlhLWhpZGRlbiAvPlxuICAgICAgICA8c3Bhbj57ZmlsZU5hbWV9PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cblxuICBpZiAoZmlsZVVybCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtbGluaydcbiAgICAgICAgaHJlZj17ZmlsZVVybH1cbiAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgIHJlbD0nbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxuICAgICAgPlxuICAgICAgICB7ZmlsZU5hbWV9XG4gICAgICA8L2E+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiA8c3Bhbj57ZmlsZU5hbWV9PC9zcGFuPjtcbn1cblxuZnVuY3Rpb24gVmFyaWF0aW9uSW5mb0JvZHkoe1xuICBjb3N0RGV0YWlsLFxuICBuYW1lLFxuICBwcm9kdWN0LFxuICB2YWx1ZSxcbiAgZmlsZXMsXG4gIHR5cGUsXG4gIHVybEFwaSxcbn06IGFueSkge1xuICBjb25zdCBpc0NvbG91clBpY2tlciA9IHR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfUElDS0VSO1xuICBjb25zdCBpc0ZpbGVVcGxvYWQgPVxuICAgIHR5cGUgPT09IEZpZWxkVHlwZS5GSUxFX1VQTE9BRCB8fCB0eXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1Q7XG4gIGNvbnN0IGhhc0ZpbGVzID0gQm9vbGVhbihmaWxlcz8ubGVuZ3RoKTtcbiAgY29uc3QgZGlzcGxheVZhbHVlID0gaXNDb2xvdXJQaWNrZXIgfHwgKGlzRmlsZVVwbG9hZCAmJiBoYXNGaWxlcykgPyBudWxsIDogdmFsdWU7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXJvdyc+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPlxuICAgICAgICB7aGFzRmlsZXMgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1maWxlLXByZXZpZXdzJz5cbiAgICAgICAgICAgIHtmaWxlcy5tYXAoKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICA8VmFyaWF0aW9uRmlsZVByZXZpZXdcbiAgICAgICAgICAgICAgICBrZXk9e2ZpbGUudmlld1VybCB8fCBmaWxlLmlkIHx8IGAke25hbWV9LWZpbGUtJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIGZpbGU9e2ZpbGV9XG4gICAgICAgICAgICAgICAgdXJsQXBpPXt1cmxBcGl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2lzQ29sb3VyUGlja2VyICYmIHZhbHVlICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktY29sb3VyLXZhbHVlJz5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogdmFsdWUgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2Rpc3BsYXlWYWx1ZSAmJiBkaXNwbGF5VmFsdWV9XG4gICAgICAgIHtjb3N0RGV0YWlsIHx8ICcnfVxuICAgICAgICB7IWhhc0ZpbGVzICYmICF2YWx1ZSAmJiAhY29zdERldGFpbCAmJiAnLSd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVmFyaWF0aW9uSW5mbyh7IHByb2R1Y3QsIHZhcmlhdGlvbiB9OiBhbnkpIHtcbiAgY29uc3QgeyB1cmxBcGkgfSA9IHVzZU1lcmNoaUNoZWNrYm91dENvbnRleHQoKTtcbiAgY29uc3QgeyB2YXJpYXRpb25GaWVsZCwgdmFyaWF0aW9uRmlsZXMsIHNlbGVjdGFibGVPcHRpb25zIH0gPSB2YXJpYXRpb247XG4gIGNvbnN0IHsgZmllbGRUeXBlLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUsIG9wdGlvbnM6IGZpZWxkT3B0aW9ucyA9IFtdIH0gPVxuICAgIHZhcmlhdGlvbkZpZWxkO1xuICBjb25zdCBpc1ZhcmlhdGlvblNlbGVjdGFibGUgPSBpc1NlbGVjdGFibGUoZmllbGRUeXBlKTtcbiAgY29uc3QgaXNUdXJuYXJvdW5kVGltZSA9IGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlRVUk5BUk9VTkRfVElNRTtcbiAgY29uc3QgaXNDb2xvdXJFeHRyYWN0ID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1Q7XG4gIGNvbnN0IG9wdGlvbnMgPSByZXNvbHZlU2VsZWN0YWJsZVNlbGVjdGVkT3B0aW9ucyhcbiAgICB2YXJpYXRpb24sXG4gICAgc2VsZWN0YWJsZU9wdGlvbnMsXG4gICAgZmllbGRPcHRpb25zXG4gICk7XG4gIGNvbnN0IHVzZVNlbGVjdGFibGVEaXNwbGF5ID1cbiAgICBpc1ZhcmlhdGlvblNlbGVjdGFibGUgJiZcbiAgICAoQm9vbGVhbihvcHRpb25zPy5sZW5ndGgpIHx8IChpc1R1cm5hcm91bmRUaW1lICYmIHZhcmlhdGlvbi52YWx1ZSkpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24nPlxuICAgICAge2lzQ29sb3VyRXh0cmFjdCA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8VmFyaWF0aW9uSW5mb0JvZHlcbiAgICAgICAgICAgIG5hbWU9e3ZhcmlhdGlvbkZpZWxkLm5hbWV9XG4gICAgICAgICAgICB0eXBlPXtmaWVsZFR5cGV9XG4gICAgICAgICAgICB2YWx1ZT17bnVsbH1cbiAgICAgICAgICAgIGZpbGVzPXt2YXJpYXRpb25GaWxlc31cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICB1cmxBcGk9e3VybEFwaX1cbiAgICAgICAgICAgIGNvc3REZXRhaWw9e3ZhcmlhdGlvbkNvc3REZXRhaWwoXG4gICAgICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgICAgIHZhcmlhdGlvbixcbiAgICAgICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxuICAgICAgICAgICAgICAvLyBPcHRpb25zIGxpc3Qgc2hvd3MgZWFjaCBjb2xvdXIgY29zdDsga2VlcCBmaWVsZCBiYXNlIGNvc3QgaGVyZS5cbiAgICAgICAgICAgICAgb3B0aW9ucz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyB7IGZpZWxkQ29zdHNPbmx5OiB0cnVlIH1cbiAgICAgICAgICAgICAgICA6IHsgaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHM6IGZhbHNlIH1cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7b3B0aW9ucz8ubGVuZ3RoID8gKFxuICAgICAgICAgICAgPFZhcmlhdGlvbk9wdGlvbnNJbmZvQm9keVxuICAgICAgICAgICAgICBuYW1lPXtgJHt2YXJpYXRpb25GaWVsZC5uYW1lfSBjb2xvdXJzYH1cbiAgICAgICAgICAgICAgZmllbGRUeXBlPXtmaWVsZFR5cGV9XG4gICAgICAgICAgICAgIHZhbHVlPXt2YXJpYXRpb24udmFsdWV9XG4gICAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XG4gICAgICAgICAgICAgIHNlbGVjdGFibGVPcHRpb25zPXtzZWxlY3RhYmxlT3B0aW9uc31cbiAgICAgICAgICAgICAgZmllbGRPcHRpb25zPXtmaWVsZE9wdGlvbnN9XG4gICAgICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApIDogdXNlU2VsZWN0YWJsZURpc3BsYXkgPyAoXG4gICAgICAgIDxWYXJpYXRpb25PcHRpb25zSW5mb0JvZHlcbiAgICAgICAgICBuYW1lPXt2YXJpYXRpb25GaWVsZC5uYW1lfVxuICAgICAgICAgIGZpZWxkVHlwZT17ZmllbGRUeXBlfVxuICAgICAgICAgIHZhbHVlPXt2YXJpYXRpb24udmFsdWV9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICBmaWxlcz17dmFyaWF0aW9uRmlsZXN9XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIHZhcmlhdGlvbj17dmFyaWF0aW9ufVxuICAgICAgICAgIHNlbGVjdGFibGVPcHRpb25zPXtzZWxlY3RhYmxlT3B0aW9uc31cbiAgICAgICAgICBmaWVsZE9wdGlvbnM9e2ZpZWxkT3B0aW9uc31cbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxWYXJpYXRpb25JbmZvQm9keVxuICAgICAgICAgIG5hbWU9e3ZhcmlhdGlvbkZpZWxkLm5hbWV9XG4gICAgICAgICAgdHlwZT17dmFyaWF0aW9uRmllbGQuZmllbGRUeXBlfVxuICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgIGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkFSRUEgJiYgdmFyaWF0aW9uLnZhbHVlXG4gICAgICAgICAgICAgID8gZm9ybWF0QXJlYVN1bW1hcnkoXG4gICAgICAgICAgICAgICAgICB2YXJpYXRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICBsb2NhbGVQcmVmZXJzSW1wZXJpYWwoKSA/ICdpbXBlcmlhbCcgOiAnbWV0cmljJyxcbiAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbkZpZWxkLmFyZWFVbml0IHx8ICdtbSdcbiAgICAgICAgICAgICAgICApIHx8IHZhcmlhdGlvbi52YWx1ZVxuICAgICAgICAgICAgICA6IHZhcmlhdGlvbi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWxlcz17dmFyaWF0aW9uRmlsZXN9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICB1cmxBcGk9e3VybEFwaX1cbiAgICAgICAgICBjb3N0RGV0YWlsPXt2YXJpYXRpb25Db3N0RGV0YWlsKFxuICAgICAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgICAgIHZhcmlhdGlvbixcbiAgICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZSxcbiAgICAgICAgICAgIHsgaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHM6IGZhbHNlIH1cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQ29sb3VyU2VsZWN0T3B0aW9uKHtcbiAgb3B0aW9uLFxuICBzZWxlY3RhYmxlT3B0aW9ucyxcbiAgZmllbGRPcHRpb25zLFxuICBwcm9kdWN0LFxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXG59OiB7XG4gIG9wdGlvbjogYW55O1xuICBzZWxlY3RhYmxlT3B0aW9ucz86IGFueVtdO1xuICBmaWVsZE9wdGlvbnM/OiBhbnlbXTtcbiAgcHJvZHVjdD86IGFueTtcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgbGFiZWwgPSBvcHRpb24/LnZhbHVlPy50cmltKCkgfHwgJyc7XG4gIGNvbnN0IGhleCA9IHJlc29sdmVPcHRpb25Db2xvdXIob3B0aW9uLCBzZWxlY3RhYmxlT3B0aW9ucywgZmllbGRPcHRpb25zKTtcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QoXG4gICAgcHJvZHVjdCxcbiAgICBvcHRpb24sXG4gICAgQm9vbGVhbihzZWxsZXJQcm9kdWN0RWRpdGFibGUpXG4gICk7XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1jb2xvdXItb3B0aW9uJz5cbiAgICAgIHtoZXggJiYgKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogaGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4+XG4gICAgICAgIHtsYWJlbCB8fCBoZXggfHwgJ+KAkyd9XG4gICAgICAgIHtjb3N0IHx8ICcnfVxuICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSW1hZ2VTZWxlY3RPcHRpb24oe1xuICBvcHRpb24sXG4gIHNlbGVjdGFibGVPcHRpb25zLFxuICBmaWVsZE9wdGlvbnMsXG4gIHByb2R1Y3QsXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZSxcbn06IHtcbiAgb3B0aW9uOiBhbnk7XG4gIHNlbGVjdGFibGVPcHRpb25zPzogYW55W107XG4gIGZpZWxkT3B0aW9ucz86IGFueVtdO1xuICBwcm9kdWN0OiBhbnk7XG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZTogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgeyB1cmxBcGkgfSA9IHVzZU1lcmNoaUNoZWNrYm91dENvbnRleHQoKTtcbiAgY29uc3QgaW1hZ2VVcmwgPSByZXNvbHZlT3B0aW9uSW1hZ2VVcmwoXG4gICAgb3B0aW9uLFxuICAgIHNlbGVjdGFibGVPcHRpb25zLFxuICAgIGZpZWxkT3B0aW9ucyxcbiAgICB1cmxBcGlcbiAgKTtcbiAgY29uc3QgbGFiZWwgPSBvcHRpb24/LnZhbHVlPy50cmltKCkgfHwgJyc7XG4gIGNvbnN0IGNvc3QgPSBmb3JtYXRPcHRpb25Db3N0KHByb2R1Y3QsIG9wdGlvbiwgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKTtcbiAgY29uc3QgW2ltYWdlRmFpbGVkLCBzZXRJbWFnZUZhaWxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWltYWdlLXNlbGVjdC1vcHRpb24nPlxuICAgICAge2ltYWdlVXJsICYmICFpbWFnZUZhaWxlZCA/IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT0nbW9kYWwtbWVyY2hpLWNoZWNrb3V0LWpvYi1pbmZvLWNvbnRlbnQtaW1nJ1xuICAgICAgICAgIHNyYz17aW1hZ2VVcmx9XG4gICAgICAgICAgYWx0PXtsYWJlbCB8fCAnU2VsZWN0ZWQgb3B0aW9uJ31cbiAgICAgICAgICB0aXRsZT17bGFiZWwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEltYWdlRmFpbGVkKHRydWUpfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8c3Bhbj5cbiAgICAgICAge2xhYmVsIHx8ICfigJMnfVxuICAgICAgICB7Y29zdCB8fCAnJ31cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldE9wdGlvbklkKG9wdGlvbjogYW55KSB7XG4gIHJldHVybiBvcHRpb24/Lm9wdGlvbklkID8/IG9wdGlvbj8uaWQ7XG59XG5cbmZ1bmN0aW9uIHNwbGl0U2VsZWN0ZWRPcHRpb25JZHModmFsdWU6IGFueSk6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChTdHJpbmcpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBbXTtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHBhcnQpID0+IHBhcnQudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVTZWxlY3RhYmxlU2VsZWN0ZWRPcHRpb25zKFxuICB2YXJpYXRpb246IGFueSxcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXG4gIGZpZWxkT3B0aW9uczogYW55W10gPSBbXVxuKTogYW55W10ge1xuICBjb25zdCBmaWVsZFR5cGUgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkPy5maWVsZFR5cGU7XG4gIGlmIChmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVCkge1xuICAgIHJldHVybiB2YXJpYXRpb24/LnNlbGVjdGVkT3B0aW9ucyB8fCBbXTtcbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGVkSWRzID0gc3BsaXRTZWxlY3RlZE9wdGlvbklkcyh2YXJpYXRpb24/LnZhbHVlKTtcbiAgaWYgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwb29scyA9IFtzZWxlY3RhYmxlT3B0aW9ucywgZmllbGRPcHRpb25zXTtcbiAgICBjb25zdCByZXNvbHZlZDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGVkSWRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHBvb2wgb2YgcG9vbHMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBwb29sLmZpbmQoKG9wdGlvbjogYW55KSA9PiBTdHJpbmcoZ2V0T3B0aW9uSWQob3B0aW9uKSkgPT09IGlkKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgcmVzb2x2ZWQucHVzaChtYXRjaCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc29sdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFyaWF0aW9uPy5zZWxlY3RlZE9wdGlvbnMgfHwgW107XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24oXG4gIHZhcmlhdGlvbjogYW55LFxuICBzZWxlY3RhYmxlT3B0aW9uczogYW55W10gPSBbXSxcbiAgZmllbGRPcHRpb25zOiBhbnlbXSA9IFtdXG4pIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlU2VsZWN0YWJsZVNlbGVjdGVkT3B0aW9ucyhcbiAgICB2YXJpYXRpb24sXG4gICAgc2VsZWN0YWJsZU9wdGlvbnMsXG4gICAgZmllbGRPcHRpb25zXG4gICk7XG4gIGlmIChyZXNvbHZlZC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkWzBdO1xuICB9XG5cbiAgY29uc3QgdmFsdWVTdHIgPVxuICAgIHZhcmlhdGlvbj8udmFsdWUgIT0gbnVsbCAmJiB2YXJpYXRpb24/LnZhbHVlICE9PSAnJ1xuICAgICAgPyBTdHJpbmcodmFyaWF0aW9uLnZhbHVlKS50cmltKClcbiAgICAgIDogJyc7XG4gIGlmICghdmFsdWVTdHIpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHBvb2xzID0gW3NlbGVjdGFibGVPcHRpb25zLCBmaWVsZE9wdGlvbnNdO1xuICBmb3IgKGNvbnN0IHBvb2wgb2YgcG9vbHMpIHtcbiAgICBjb25zdCBieVZhbHVlID0gcG9vbC5maW5kKFxuICAgICAgKG9wdGlvbjogYW55KSA9PiBTdHJpbmcob3B0aW9uLnZhbHVlID8/ICcnKSA9PT0gdmFsdWVTdHJcbiAgICApO1xuICAgIGlmIChieVZhbHVlKSByZXR1cm4gYnlWYWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VHVybmFyb3VuZERlYWRsaW5lKHVzZXJEZWFkbGluZTogYW55KSB7XG4gIGlmICghdXNlckRlYWRsaW5lKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcih1c2VyRGVhZGxpbmUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShzZWNvbmRzKSB8fCBzZWNvbmRzIDw9IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IERhdGUoc2Vjb25kcyAqIDEwMDApLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQVUnLCB7XG4gICAgd2Vla2RheTogJ2xvbmcnLFxuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJ2xvbmcnLFxuICAgIGRheTogJ251bWVyaWMnLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gVHVybmFyb3VuZE9wdGlvbkxhYmVsKHtcbiAgb3B0aW9uLFxuICB2YXJpYXRpb25GaWVsZCxcbiAgcHJvZHVjdCxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxufToge1xuICBvcHRpb246IGFueTtcbiAgdmFyaWF0aW9uRmllbGQ6IGFueTtcbiAgcHJvZHVjdDogYW55O1xuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IGRheXMgPSBwYXJzZUludChTdHJpbmcob3B0aW9uPy52YWx1ZSA/PyAnJyksIDEwKSB8fCAwO1xuICBjb25zdCBkZWFkbGluZSA9IGZvcm1hdFR1cm5hcm91bmREZWFkbGluZShvcHRpb24/LnVzZXJEZWFkbGluZSk7XG4gIGNvbnN0IHNoaXBwaW5nVGltZUluY2x1ZGVkID0gQm9vbGVhbih2YXJpYXRpb25GaWVsZD8uc2hpcHBpbmdUaW1lSW5jbHVkZWQpO1xuICBjb25zdCBkZWFkbGluZUxhYmVsID0gc2hpcHBpbmdUaW1lSW5jbHVkZWQgPyAnRGVsaXZlcnkgYnknIDogJ1Byb2R1Y2VkIGJ5JztcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgb3B0aW9uLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10dXJuYXJvdW5kLXZhbHVlJz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kYXlzJz5cbiAgICAgICAge2RheXMgPiAwXG4gICAgICAgICAgPyBgJHtkYXlzfSBidXNpbmVzcyBkYXkke2RheXMgIT09IDEgPyAncycgOiAnJ31gXG4gICAgICAgICAgOiAob3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICfigJMnKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtkZWFkbGluZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kZWFkbGluZSc+XG4gICAgICAgICAge2RlYWRsaW5lTGFiZWx9IHtkZWFkbGluZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIHtjb3N0IHx8ICcnfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5KHtcbiAgbmFtZSxcbiAgc2VsZWN0ZWRPcHRpb25zLFxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXG4gIHByb2R1Y3QsXG4gIGZpZWxkVHlwZSxcbiAgdmFyaWF0aW9uLFxuICBzZWxlY3RhYmxlT3B0aW9ucyA9IFtdLFxuICBmaWVsZE9wdGlvbnMgPSBbXSxcbn06IGFueSkge1xuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xuICBjb25zdCBmaXJzdE9wdGlvbiA9IGlzVHVybmFyb3VuZFRpbWVcbiAgICA/IHJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24oXG4gICAgICAgIHsgc2VsZWN0ZWRPcHRpb25zLCB2YWx1ZTogdmFyaWF0aW9uPy52YWx1ZSB9LFxuICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucyxcbiAgICAgICAgZmllbGRPcHRpb25zXG4gICAgICApXG4gICAgOiBzZWxlY3RlZE9wdGlvbnNbMF07XG4gIGNvbnN0IGlzQ29sb3VyU2VsZWN0ID1cbiAgICBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfU0VMRUNUIHx8XG4gICAgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1Q7XG4gIGNvbnN0IGlzSW1hZ2VTZWxlY3QgPSBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1Q7XG4gIGNvbnN0IHZhcmlhdGlvbkZpZWxkID0gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZCA/PyB7fTtcblxuICBmdW5jdGlvbiByZW5kZXJPcHRpb25MYWJlbChvOiBhbnkpIHtcbiAgICBpZiAoaXNUdXJuYXJvdW5kVGltZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFR1cm5hcm91bmRPcHRpb25MYWJlbFxuICAgICAgICAgIG9wdGlvbj17b31cbiAgICAgICAgICB2YXJpYXRpb25GaWVsZD17dmFyaWF0aW9uRmllbGR9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0NvbG91clNlbGVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbG91clNlbGVjdE9wdGlvblxuICAgICAgICAgIG9wdGlvbj17b31cbiAgICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucz17c2VsZWN0YWJsZU9wdGlvbnN9XG4gICAgICAgICAgZmllbGRPcHRpb25zPXtmaWVsZE9wdGlvbnN9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0ltYWdlU2VsZWN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SW1hZ2VTZWxlY3RPcHRpb25cbiAgICAgICAgICBvcHRpb249e299XG4gICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxuICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPXtzZWxsZXJQcm9kdWN0RWRpdGFibGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge28udmFsdWU/LnRyaW0oKSB8fCAn4oCTJ31cbiAgICAgICAge2Zvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgbywgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKSB8fCAnJ31cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEgJiYgIWlzVHVybmFyb3VuZFRpbWUgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUgbGlzdC11bnN0eWxlZCBtLTAnPlxuICAgICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKG86IGFueSwgaTogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgIDxsaSBrZXk9e2Ake2l9LW9wdGlvbi1rZXktJHtvLm9wdGlvbklkID8/IGl9YH0+XG4gICAgICAgICAgICAgICAge3JlbmRlck9wdGlvbkxhYmVsKG8pfVxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogZmlyc3RPcHRpb24gPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz5cbiAgICAgICAgICAgIHtyZW5kZXJPcHRpb25MYWJlbChmaXJzdE9wdGlvbil9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1yb3cnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tbGFiZWwnPntuYW1lfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPi08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBWYXJpYXRpb25zSW5mbyh7IHByb2R1Y3QsIHF1YW50aXR5LCB2YXJpYXRpb25zID0gW10gfTogYW55KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbnMnPlxuICAgICAge3ZhcmlhdGlvbnMubWFwKCh2OiBhbnksIGk6IG51bWJlcikgPT5cbiAgICAgICAgIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2LnZhcmlhdGlvbkZpZWxkLmZpZWxkVHlwZSkgPyAoXG4gICAgICAgICAgPFZhcmlhdGlvbkluZm9cbiAgICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cbiAgICAgICAgICAgIHZhcmlhdGlvbj17dn1cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGxcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkdyb3VwSW5mbyh7XG4gIGdyb3VwLFxuICBpbmRleCxcbiAgcHJvZHVjdCxcbiAgc2hvd1NldHVwT25Vbml0UHJpY2UsXG59OiBhbnkpIHtcbiAgY29uc3QgaXNSZXNlbGwgPSBpc1Byb2R1Y3RTdXBwbGllck1PRChwcm9kdWN0KTtcbiAgY29uc3QgeyBxdWFudGl0eSwgdmFyaWF0aW9ucyB9ID0gZ3JvdXA7XG4gIGNvbnN0IHZpc2libGVWYXJpYXRpb25zID0gKHZhcmlhdGlvbnMgPz8gW10pLmZpbHRlcihcbiAgICAodjogYW55KSA9PiAhaXNJbnN0cnVjdGlvbnNUeXBlKHY/LnZhcmlhdGlvbkZpZWxkPy5maWVsZFR5cGUpXG4gICk7XG4gIGNvbnN0IGNvc3RMYWJlbCA9IGlzUmVzZWxsID8gJ1VuaXQgQ29zdCcgOiAnR3JvdXAgQ29zdCc7XG4gIGNvbnN0IHVuaXRQcmljZVZhbHVlID0gc2hvd1NldHVwT25Vbml0UHJpY2VcbiAgICA/IGZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cChwcm9kdWN0KVxuICAgIDogZm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZ3JvdXAnPlxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XG4gICAgICAgIEdyb3VwIHtpbmRleCArIDF9IEluZm9ybWF0aW9uXG4gICAgICA8L3N0cm9uZz5cbiAgICAgIHshaXNSZXNlbGwgJiYgcXVhbnRpdHkgPiAwICYmIChcbiAgICAgICAgPFN1bW1hcnlGaWVsZFJvdyBsYWJlbD0nUXVhbnRpdHknIHZhbHVlPXtxdWFudGl0eX0gLz5cbiAgICAgICl9XG4gICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdVbml0IFByaWNlJyB2YWx1ZT17dW5pdFByaWNlVmFsdWV9IC8+XG4gICAgICB7dmlzaWJsZVZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cbiAgICAgICAgICB2YXJpYXRpb25zPXt2YXJpYXRpb25zfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWdyb3VwLWNvc3QnPlxuICAgICAgICB7Y29zdExhYmVsfToge2Zvcm1hdENvc3QocHJvZHVjdCwgZ3JvdXAuZ3JvdXBDb3N0KX1cbiAgICAgIDwvc3Ryb25nPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSm9iSW5mb0NvbnRlbnQoKSB7XG4gIGNvbnN0IHsgam9iIH0gPSB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0KCk7XG4gIGNvbnN0IHsgcHJvZHVjdCwgcXVhbnRpdHkgPSAwLCB2YXJpYXRpb25zID0gW10sIHZhcmlhdGlvbnNHcm91cHMgPSBbXSB9ID0gam9iO1xuICBjb25zdCB7IG5lZWRzU2hpcHBpbmcgfSA9IHByb2R1Y3Q7XG4gIGNvbnN0IHRvdGFsQ29zdCA9IGN1cnJlbmN5VG90YWxDb3N0U2hvd0luY1RheChqb2IpO1xuICBjb25zdCBpc1Jlc2VsbCA9IGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3QpO1xuICBjb25zdCBoYXNHcm91cHMgPSB2YXJpYXRpb25zR3JvdXBzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGpvYkxldmVsVmFyaWF0aW9ucyA9ICh2YXJpYXRpb25zID8/IFtdKS5maWx0ZXIoXG4gICAgKHY6IGFueSkgPT4gIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2Py52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlKVxuICApO1xuICBjb25zdCB0b3RhbFF1YW50aXR5ID0gaGFzR3JvdXBzXG4gICAgPyB2YXJpYXRpb25zR3JvdXBzLnJlZHVjZShcbiAgICAgICAgKHN1bTogbnVtYmVyLCBnOiBhbnkpID0+IHN1bSArIChOdW1iZXIoZy5xdWFudGl0eSkgfHwgMCksXG4gICAgICAgIDBcbiAgICAgIClcbiAgICA6IE51bWJlcihxdWFudGl0eSkgfHwgMDtcbiAgY29uc3Qgc2V0dXBQZXJHcm91cCA9IEJvb2xlYW4ocHJvZHVjdD8uc2V0dXBQZXJHcm91cCk7XG4gIGNvbnN0IGhhc1NldHVwUHJpY2UgPSBOdW1iZXIocHJvZHVjdD8uc2V0dXBQcmljZSkgPiAwO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50IG1lcmNoaS1jaGVja291dC1zdW1tYXJ5Jz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zZWN0aW9uLXRpdGxlJz57cHJvZHVjdC5uYW1lfTwvZGl2PlxuICAgICAge2hhc0dyb3VwcyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1ncm91cHMnPlxuICAgICAgICAgIHt2YXJpYXRpb25zR3JvdXBzLm1hcCgoZzogYW55LCBpOiBudW1iZXIpID0+XG4gICAgICAgICAgICBnLnF1YW50aXR5ID8gKFxuICAgICAgICAgICAgICA8VmFyaWF0aW9uR3JvdXBJbmZvXG4gICAgICAgICAgICAgICAgZ3JvdXA9e2d9XG4gICAgICAgICAgICAgICAga2V5PXtgJHtpfS1qb2ItaW5mby1jb250ZW50YH1cbiAgICAgICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxuICAgICAgICAgICAgICAgIHNob3dTZXR1cE9uVW5pdFByaWNlPXtzZXR1cFBlckdyb3VwfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7IWhhc0dyb3VwcyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zdGFuZGFsb25lJz5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktb3JkZXItZGV0YWlsLXRpdGxlJz5cbiAgICAgICAgICAgIE9yZGVyIEluZm9ybWF0aW9uXG4gICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAge3F1YW50aXR5ID4gMCAmJiAoXG4gICAgICAgICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdRdWFudGl0eScgdmFsdWU9e3F1YW50aXR5fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFN1bW1hcnlGaWVsZFJvd1xuICAgICAgICAgICAgbGFiZWw9J1VuaXQgUHJpY2UnXG4gICAgICAgICAgICB2YWx1ZT17Zm9ybWF0VW5pdFByaWNlV2l0aFNldHVwKHByb2R1Y3QpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2pvYkxldmVsVmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgICAgICBxdWFudGl0eT17cXVhbnRpdHl9XG4gICAgICAgICAgICAgIHZhcmlhdGlvbnM9e3ZhcmlhdGlvbnN9XG4gICAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtoYXNHcm91cHMgJiYgam9iTGV2ZWxWYXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktc3RhbmRhbG9uZSc+XG4gICAgICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XG4gICAgICAgICAgICBPcmRlciBJbmZvcm1hdGlvblxuICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgICAgcXVhbnRpdHk9e3F1YW50aXR5fVxuICAgICAgICAgICAgdmFyaWF0aW9ucz17dmFyaWF0aW9uc31cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyFpc1Jlc2VsbCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10b3RhbCc+XG4gICAgICAgICAge3RvdGFsUXVhbnRpdHkgPiAwICYmIChcbiAgICAgICAgICAgIDxTdW1tYXJ5QW1vdW50Um93XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtcXVhbnRpdHknXG4gICAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBRdWFudGl0eSdcbiAgICAgICAgICAgICAgYW1vdW50PXt0b3RhbFF1YW50aXR5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoYXNHcm91cHMgJiYgaGFzU2V0dXBQcmljZSAmJiAhc2V0dXBQZXJHcm91cCAmJiAoXG4gICAgICAgICAgICA8U3VtbWFyeUFtb3VudFJvd1xuICAgICAgICAgICAgICBsYWJlbD0nU2V0dXAnXG4gICAgICAgICAgICAgIGFtb3VudD17Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdC5zZXR1cFByaWNlKSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFN1bW1hcnlBbW91bnRSb3dcbiAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBPcmRlciBDb3N0J1xuICAgICAgICAgICAgbGFiZWxFeHRyYT17XG4gICAgICAgICAgICAgIG5lZWRzU2hpcHBpbmcgPyAoXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtbm90ZSc+IGV4IFNoaXBtZW50PC9zbWFsbD5cbiAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW1vdW50PXt0b3RhbENvc3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyEhKGlzUmVzZWxsICYmICFoYXNHcm91cHMpICYmIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCc+XG4gICAgICAgICAgICB7aXNSZXNlbGwgPyAnQXBwcm94aW1hdGUgVW5pdCcgOiAnVG90YWwnfSBDb3N0XG4gICAgICAgICAgPC9zdHJvbmc+eycgJ31cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCBkLWJsb2NrJz57dG90YWxDb3N0fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQUMsU0FBQUEsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFSLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxDQUFBLEdBQUFBLENBQUEsQ0FBQWtCLElBQUEsQ0FBQXBCLENBQUEsTUFBQVksQ0FBQSxXQUFBQSxFQUFBLFFBQUFaLENBQUEsR0FBQUUsQ0FBQSxDQUFBbUIsSUFBQSxXQUFBSCxDQUFBLEdBQUFsQixDQUFBLENBQUFhLElBQUEsRUFBQWIsQ0FBQSxLQUFBQyxDQUFBLFdBQUFBLEVBQUFELENBQUEsSUFBQW1CLENBQUEsT0FBQUYsQ0FBQSxHQUFBakIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUcsQ0FBQSxZQUFBaEIsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBaUIsQ0FBQSxRQUFBRixDQUFBO0FBQUEsU0FBQUssZUFBQXRCLENBQUEsRUFBQUMsQ0FBQSxXQUFBc0IsZUFBQSxDQUFBdkIsQ0FBQSxLQUFBd0IscUJBQUEsQ0FBQXhCLENBQUEsRUFBQUMsQ0FBQSxLQUFBTSwyQkFBQSxDQUFBUCxDQUFBLEVBQUFDLENBQUEsS0FBQXdCLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQVQsU0FBQTtBQUFBLFNBQUFULDRCQUFBUCxDQUFBLEVBQUFrQixDQUFBLFFBQUFsQixDQUFBLDJCQUFBQSxDQUFBLFNBQUEwQixpQkFBQSxDQUFBMUIsQ0FBQSxFQUFBa0IsQ0FBQSxPQUFBaEIsQ0FBQSxNQUFBeUIsUUFBQSxDQUFBUCxJQUFBLENBQUFwQixDQUFBLEVBQUE0QixLQUFBLDZCQUFBMUIsQ0FBQSxJQUFBRixDQUFBLENBQUE2QixXQUFBLEtBQUEzQixDQUFBLEdBQUFGLENBQUEsQ0FBQTZCLFdBQUEsQ0FBQUMsSUFBQSxhQUFBNUIsQ0FBQSxjQUFBQSxDQUFBLEdBQUFHLEtBQUEsQ0FBQTBCLElBQUEsQ0FBQS9CLENBQUEsb0JBQUFFLENBQUEsK0NBQUE4QixJQUFBLENBQUE5QixDQUFBLElBQUF3QixpQkFBQSxDQUFBMUIsQ0FBQSxFQUFBa0IsQ0FBQTtBQUFBLFNBQUFRLGtCQUFBMUIsQ0FBQSxFQUFBa0IsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxNQUFBVSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsWUFBQVAsQ0FBQSxNQUFBVyxDQUFBLEdBQUFQLEtBQUEsQ0FBQWEsQ0FBQSxHQUFBakIsQ0FBQSxHQUFBaUIsQ0FBQSxFQUFBakIsQ0FBQSxJQUFBVyxDQUFBLENBQUFYLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFXLENBQUE7QUFBQSxTQUFBWSxzQkFBQXhCLENBQUEsRUFBQWlDLENBQUEsUUFBQS9CLENBQUEsV0FBQUYsQ0FBQSxnQ0FBQUcsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLDRCQUFBRSxDQUFBLFFBQUFELENBQUEsRUFBQVcsQ0FBQSxFQUFBc0IsQ0FBQSxFQUFBZixDQUFBLEVBQUFELENBQUEsT0FBQUgsQ0FBQSxPQUFBRSxDQUFBLGlCQUFBaUIsQ0FBQSxJQUFBaEMsQ0FBQSxHQUFBQSxDQUFBLENBQUFrQixJQUFBLENBQUFwQixDQUFBLEdBQUFxQixJQUFBLFFBQUFZLENBQUEsUUFBQUUsTUFBQSxDQUFBakMsQ0FBQSxNQUFBQSxDQUFBLFVBQUFhLENBQUEsdUJBQUFBLENBQUEsSUFBQWQsQ0FBQSxHQUFBaUMsQ0FBQSxDQUFBZCxJQUFBLENBQUFsQixDQUFBLEdBQUFXLElBQUEsTUFBQUssQ0FBQSxDQUFBa0IsSUFBQSxDQUFBbkMsQ0FBQSxDQUFBYSxLQUFBLEdBQUFJLENBQUEsQ0FBQVYsTUFBQSxLQUFBeUIsQ0FBQSxHQUFBbEIsQ0FBQSxpQkFBQWYsQ0FBQSxJQUFBaUIsQ0FBQSxPQUFBTCxDQUFBLEdBQUFaLENBQUEseUJBQUFlLENBQUEsWUFBQWIsQ0FBQSxlQUFBaUIsQ0FBQSxHQUFBakIsQ0FBQSxjQUFBaUMsTUFBQSxDQUFBaEIsQ0FBQSxNQUFBQSxDQUFBLDJCQUFBRixDQUFBLFFBQUFMLENBQUEsYUFBQU0sQ0FBQTtBQUFBLFNBQUFLLGdCQUFBdkIsQ0FBQSxRQUFBSyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxVQUFBQSxDQUFBO0FBQ2IsT0FBT3FDLEtBQUssSUFBSUMsUUFBUSxRQUFRLE9BQU87QUFDdkMsU0FBU0MsU0FBUyxFQUFFQyxVQUFVLFFBQVEsZ0JBQWdCO0FBQ3RELFNBQVNDLGNBQWMsRUFBRUMsMkJBQTJCLFFBQVEsWUFBWTtBQUN4RSxTQUNFQyxrQkFBa0IsRUFDbEJDLG9CQUFvQixFQUNwQkMsWUFBWSxFQUNaQyxTQUFTLFFBQ0osVUFBVTtBQUNqQixTQUNFQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMscUJBQXFCLFFBQ2hCLFNBQVM7QUFDaEIsU0FBU0MseUJBQXlCLFFBQVEsMEJBQTBCO0FBQ3BFLFNBQ0VDLGdCQUFnQixFQUNoQkMsZUFBZSxRQUNWLHlCQUF5QjtBQUFDLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBRWpDLFNBQVNDLFVBQVVBLENBQUNDLE9BQVksRUFBRUMsSUFBWSxFQUFFO0VBQzlDLElBQU1DLFFBQVEsR0FBR0YsT0FBTyxDQUFDRSxRQUFRLEdBQUdGLE9BQU8sQ0FBQ0UsUUFBUSxHQUFHLEtBQUs7RUFDNUQsT0FBT3JCLGNBQWMsQ0FBQ29CLElBQUksRUFBRTtJQUMxQkMsUUFBUSxFQUFSQSxRQUFRO0lBQ1JDLGtCQUFrQixFQUFFO0VBQ3RCLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0MsZUFBZUEsQ0FBQ2xELEtBQVUsRUFBVTtFQUMzQyxJQUFNbUQsTUFBTSxHQUFHQyxVQUFVLENBQUNwRCxLQUFLLENBQUM7RUFDaEMsT0FBT3FELE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxNQUFNLENBQUMsSUFBSUEsTUFBTSxHQUFHLENBQUMsR0FBR0EsTUFBTSxHQUFHLENBQUM7QUFDM0Q7O0FBRUE7QUFDQSxTQUFTSSwyQkFBMkJBLENBQ2xDVCxPQUFZLEVBQ1pVLFdBQWdCLEVBQ2hCQyxRQUFhLEVBQ2I7RUFDQSxJQUFNVCxRQUFRLEdBQUcsQ0FBQUYsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVFLFFBQVEsS0FBSSxLQUFLO0VBQzNDLElBQU1VLEtBQWUsR0FBRyxFQUFFO0VBQzFCLElBQU1DLE9BQU8sR0FBR1QsZUFBZSxDQUFDTSxXQUFXLENBQUM7RUFDNUMsSUFBTUksSUFBSSxHQUFHVixlQUFlLENBQUNPLFFBQVEsQ0FBQztFQUN0QyxJQUFJRSxPQUFPLEVBQUU7SUFDWEQsS0FBSyxDQUFDcEMsSUFBSSxPQUFBdUMsTUFBQSxDQUNGbEMsY0FBYyxDQUFDZ0MsT0FBTyxFQUFFO01BQUVYLFFBQVEsRUFBUkEsUUFBUTtNQUFFQyxrQkFBa0IsRUFBRTtJQUFNLENBQUMsQ0FBQyxjQUN4RSxDQUFDO0VBQ0g7RUFDQSxJQUFJVyxJQUFJLEVBQUU7SUFDUkYsS0FBSyxDQUFDcEMsSUFBSSxPQUFBdUMsTUFBQSxDQUNGbEMsY0FBYyxDQUFDaUMsSUFBSSxFQUFFO01BQUVaLFFBQVEsRUFBUkEsUUFBUTtNQUFFQyxrQkFBa0IsRUFBRTtJQUFNLENBQUMsQ0FBQyxjQUNyRSxDQUFDO0VBQ0g7RUFDQSxPQUFPUyxLQUFLLENBQUNJLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdkI7QUFFQSxTQUFTQyxhQUFhQSxDQUFDQyxNQUFXLEVBQVU7RUFDMUMsT0FDRWQsZUFBZSxDQUFDYyxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRVIsV0FBVyxDQUFDLElBQ3BDTixlQUFlLENBQUNjLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFQyxhQUFhLENBQUMsSUFDdEMsQ0FBQztBQUVMO0FBRUEsU0FBU0MsVUFBVUEsQ0FBQ0YsTUFBVyxFQUFVO0VBQ3ZDLE9BQ0VkLGVBQWUsQ0FBQ2MsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVQLFFBQVEsQ0FBQyxJQUNqQ1AsZUFBZSxDQUFDYyxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRUcsaUJBQWlCLENBQUMsSUFDMUMsQ0FBQztBQUVMOztBQUVBO0FBQ0EsU0FBU0Msa0JBQWtCQSxDQUFDdEIsT0FBWSxFQUFFO0VBQ3hDLElBQU11QixVQUFVLEdBQUdoQixNQUFNLENBQUNQLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFdUIsVUFBVSxDQUFDO0VBQzlDLElBQUksQ0FBQ0EsVUFBVSxFQUFFLE9BQU8sRUFBRTtFQUMxQixJQUFNQyxLQUFLLEdBQUd4QixPQUFPLENBQUN5QixhQUFhLEdBQUcsaUJBQWlCLEdBQUcsT0FBTztFQUNqRSxhQUFBVixNQUFBLENBQWFoQixVQUFVLENBQUNDLE9BQU8sRUFBRXVCLFVBQVUsQ0FBQyxPQUFBUixNQUFBLENBQUlTLEtBQUs7QUFDdkQ7QUFFQSxTQUFTRSx3QkFBd0JBLENBQUMxQixPQUFZLEVBQUU7RUFDOUMsVUFBQWUsTUFBQSxDQUFVaEIsVUFBVSxDQUFDQyxPQUFPLEVBQUVPLE1BQU0sQ0FBQ1AsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUyQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQVosTUFBQSxDQUFHTyxrQkFBa0IsQ0FBQ3RCLE9BQU8sQ0FBQztBQUM5RjtBQUVBLFNBQVM0QixLQUFLQSxDQUFDQyxJQUFTLEVBQUU7RUFDeEIsSUFBTUMsUUFBUSxHQUFHLENBQUFELElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFQyxRQUFRLEtBQUksRUFBRTtFQUNyQyxPQUFPQSxRQUFRLEtBQUssaUJBQWlCLElBQUlBLFFBQVEsS0FBSyxtQkFBbUI7QUFDM0U7QUFFQSxTQUFTQyxXQUFXQSxDQUFDRixJQUFTLEVBQUU7RUFDOUIsSUFBTUMsUUFBUSxHQUFHLENBQUFELElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFQyxRQUFRLEtBQUksRUFBRTtFQUNyQyxJQUFJQSxRQUFRLENBQUNFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDOUMsSUFBTTlELElBQUksR0FBRyxDQUFDLENBQUEyRCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRTNELElBQUksS0FBSSxFQUFFLEVBQUUrRCxXQUFXLENBQUMsQ0FBQztFQUM3QyxPQUFPLGlDQUFpQyxDQUFDN0QsSUFBSSxDQUFDRixJQUFJLENBQUM7QUFDckQ7QUFFQSxTQUFTZ0UsaUJBQWlCQSxDQUFDQyxHQUFXLEVBQUVDLE1BQWUsRUFBRTtFQUN2RCxJQUFNQyxHQUFHLEdBQUcsQ0FBQ0YsR0FBRyxJQUFJLEVBQUUsRUFBRUcsSUFBSSxDQUFDLENBQUM7RUFDOUIsSUFBSSxDQUFDRCxHQUFHLElBQUlBLEdBQUcsS0FBSyxXQUFXLElBQUlBLEdBQUcsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFO0VBQzVELElBQUkseUJBQXlCLENBQUNqRSxJQUFJLENBQUNpRSxHQUFHLENBQUMsRUFBRSxPQUFPQSxHQUFHO0VBQ25ELElBQUksQ0FBQ0QsTUFBTSxFQUFFLE9BQU9DLEdBQUc7RUFDdkIsSUFBSTtJQUNGLElBQU1FLElBQUksR0FBRyxJQUFJQyxHQUFHLENBQUNKLE1BQU0sQ0FBQztJQUM1QixPQUFPLElBQUlJLEdBQUcsQ0FBQ0gsR0FBRyxLQUFBdEIsTUFBQSxDQUFLd0IsSUFBSSxDQUFDRSxNQUFNLE1BQUcsQ0FBQyxDQUFDQyxJQUFJO0VBQzdDLENBQUMsQ0FBQyxPQUFBQyxPQUFBLEVBQU07SUFDTixPQUFPTixHQUFHO0VBQ1o7QUFDRjtBQUVBLFNBQVNPLGNBQWNBLENBQUNmLElBQVMsRUFBRU8sTUFBZSxFQUFFO0VBQ2xELE9BQU9GLGlCQUFpQixDQUN0QixDQUFBTCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRWdCLE9BQU8sTUFBSWhCLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFaUIsV0FBVyxLQUFJLEVBQUUsRUFDeENWLE1BQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU1csY0FBY0EsQ0FBQzdCLE1BQVcsRUFBRWtCLE1BQWUsRUFBRTtFQUFBLElBQUFZLGtCQUFBLEVBQUFDLG1CQUFBO0VBQ3BELE9BQU9mLGlCQUFpQixDQUN0QixDQUFBaEIsTUFBTSxhQUFOQSxNQUFNLGdCQUFBOEIsa0JBQUEsR0FBTjlCLE1BQU0sQ0FBRWdDLFVBQVUsY0FBQUYsa0JBQUEsdUJBQWxCQSxrQkFBQSxDQUFvQkgsT0FBTyxNQUFJM0IsTUFBTSxhQUFOQSxNQUFNLGdCQUFBK0IsbUJBQUEsR0FBTi9CLE1BQU0sQ0FBRWdDLFVBQVUsY0FBQUQsbUJBQUEsdUJBQWxCQSxtQkFBQSxDQUFvQkgsV0FBVyxLQUFJLEVBQUUsRUFDcEVWLE1BQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU2Usa0JBQWtCQSxDQUFDakMsTUFBVyxFQUF1QjtFQUFBLElBQXJCa0MsT0FBYyxHQUFBQyxTQUFBLENBQUF6RyxNQUFBLFFBQUF5RyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFDMUQsT0FBT0QsT0FBTyxDQUFDRyxJQUFJLENBQUMsVUFBQ2xHLENBQUM7SUFBQSxPQUFLbUcsTUFBTSxDQUFDbkcsQ0FBQyxDQUFDb0csUUFBUSxDQUFDLEtBQUtELE1BQU0sQ0FBQ3RDLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFdUMsUUFBUSxDQUFDO0VBQUEsRUFBQztBQUM3RTtBQUVBLFNBQVNDLG1CQUFtQkEsQ0FDMUJ4QyxNQUFXLEVBR1g7RUFBQSxJQUFBeUMsY0FBQSxFQUFBQyxtQkFBQSxFQUFBQyxvQkFBQTtFQUFBLElBRkFDLGlCQUF3QixHQUFBVCxTQUFBLENBQUF6RyxNQUFBLFFBQUF5RyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUM3QlUsWUFBbUIsR0FBQVYsU0FBQSxDQUFBekcsTUFBQSxRQUFBeUcsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxFQUFFO0VBRXhCLElBQU1XLE1BQU0sR0FBRzlDLE1BQU0sYUFBTkEsTUFBTSxnQkFBQXlDLGNBQUEsR0FBTnpDLE1BQU0sQ0FBRStDLE1BQU0sY0FBQU4sY0FBQSx1QkFBZEEsY0FBQSxDQUFnQnJCLElBQUksQ0FBQyxDQUFDO0VBQ3JDLElBQUkwQixNQUFNLEVBQUUsT0FBT0EsTUFBTTtFQUN6QixJQUFNRSxjQUFjLElBQUFOLG1CQUFBLEdBQUdULGtCQUFrQixDQUFDakMsTUFBTSxFQUFFNEMsaUJBQWlCLENBQUMsY0FBQUYsbUJBQUEsZ0JBQUFBLG1CQUFBLEdBQTdDQSxtQkFBQSxDQUErQ0ssTUFBTSxjQUFBTCxtQkFBQSx1QkFBckRBLG1CQUFBLENBQXVEdEIsSUFBSSxDQUFDLENBQUM7RUFDcEYsSUFBSTRCLGNBQWMsRUFBRSxPQUFPQSxjQUFjO0VBQ3pDLE9BQU8sRUFBQUwsb0JBQUEsR0FBQVYsa0JBQWtCLENBQUNqQyxNQUFNLEVBQUU2QyxZQUFZLENBQUMsY0FBQUYsb0JBQUEsZ0JBQUFBLG9CQUFBLEdBQXhDQSxvQkFBQSxDQUEwQ0ksTUFBTSxjQUFBSixvQkFBQSx1QkFBaERBLG9CQUFBLENBQWtEdkIsSUFBSSxDQUFDLENBQUMsS0FBSSxFQUFFO0FBQ3ZFO0FBRUEsU0FBUzZCLHFCQUFxQkEsQ0FDNUJqRCxNQUFXLEVBSVg7RUFBQSxJQUhBNEMsaUJBQXdCLEdBQUFULFNBQUEsQ0FBQXpHLE1BQUEsUUFBQXlHLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsRUFBRTtFQUFBLElBQzdCVSxZQUFtQixHQUFBVixTQUFBLENBQUF6RyxNQUFBLFFBQUF5RyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUN4QmpCLE1BQWUsR0FBQWlCLFNBQUEsQ0FBQXpHLE1BQUEsT0FBQXlHLFNBQUEsTUFBQUMsU0FBQTtFQUVmLElBQU1VLE1BQU0sR0FBR2pCLGNBQWMsQ0FBQzdCLE1BQU0sRUFBRWtCLE1BQU0sQ0FBQztFQUM3QyxJQUFJNEIsTUFBTSxFQUFFLE9BQU9BLE1BQU07RUFDekIsSUFBTUUsY0FBYyxHQUFHbkIsY0FBYyxDQUNuQ0ksa0JBQWtCLENBQUNqQyxNQUFNLEVBQUU0QyxpQkFBaUIsQ0FBQyxFQUM3QzFCLE1BQ0YsQ0FBQztFQUNELElBQUk4QixjQUFjLEVBQUUsT0FBT0EsY0FBYztFQUN6QyxPQUFPbkIsY0FBYyxDQUFDSSxrQkFBa0IsQ0FBQ2pDLE1BQU0sRUFBRTZDLFlBQVksQ0FBQyxFQUFFM0IsTUFBTSxDQUFDO0FBQ3pFO0FBRUEsU0FBU2dDLGdCQUFnQkEsQ0FDdkJwRSxPQUFZLEVBQ1prQixNQUFXLEVBQ1htRCxxQkFBOEIsRUFDOUI7RUFDQSxJQUFJQSxxQkFBcUIsSUFBSSxDQUFDbkQsTUFBTSxFQUFFLE9BQU8sSUFBSTtFQUNqRCxJQUFNb0QsV0FBVyxHQUFHN0QsMkJBQTJCLENBQzdDVCxPQUFPLEVBQ1BpQixhQUFhLENBQUNDLE1BQU0sQ0FBQyxFQUNyQkUsVUFBVSxDQUFDRixNQUFNLENBQ25CLENBQUM7RUFDRCxJQUFJb0QsV0FBVyxFQUFFLE9BQU9BLFdBQVc7RUFDbkMsSUFBSXBELE1BQU0sQ0FBQ3FELFNBQVMsRUFBRTtJQUNwQixhQUFBeEQsTUFBQSxDQUFhaEIsVUFBVSxDQUFDQyxPQUFPLEVBQUVrQixNQUFNLENBQUNxRCxTQUFTLENBQUM7RUFDcEQ7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVBLFNBQVNDLG1CQUFtQkEsQ0FDMUJ4RSxPQUFZLEVBQ1p5RSxTQUFjLEVBQ2RKLHFCQUE4QixFQVE5QjtFQUFBLElBQUFLLHFCQUFBLEVBQUFDLG1CQUFBO0VBQUEsSUFBQUMsSUFBQSxHQUFBdkIsU0FBQSxDQUFBekcsTUFBQSxRQUFBeUcsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFESSxDQUFDLENBQUM7SUFBQXdCLHFCQUFBLEdBQUFELElBQUEsQ0FMSkUsMEJBQTBCO0lBQTFCQSwwQkFBMEIsR0FBQUQscUJBQUEsY0FBRyxJQUFJLEdBQUFBLHFCQUFBO0lBQUFFLG1CQUFBLEdBQUFILElBQUEsQ0FDakNJLGNBQWM7SUFBZEEsY0FBYyxHQUFBRCxtQkFBQSxjQUFHLEtBQUssR0FBQUEsbUJBQUE7RUFNeEIsSUFBSVYscUJBQXFCLEVBQUUsT0FBTyxFQUFFO0VBRXBDLElBQU1ZLEtBQUssR0FBRyxDQUFBUixTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRVMsY0FBYyxLQUFJLENBQUMsQ0FBQztFQUM3QyxJQUFNQyxTQUFTLEdBQUc1RSxNQUFNLENBQUMwRSxLQUFLLENBQUNFLFNBQVMsQ0FBQztFQUV6QyxJQUFJQSxTQUFTLEtBQUtqRyxTQUFTLENBQUNrRyxJQUFJLEVBQUU7SUFDaEMsSUFBTUMsU0FBUyxHQUFHbEcsaUJBQWlCLENBQUM4RixLQUFLLEVBQUVSLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFdkgsS0FBSyxDQUFDO0lBQzVELElBQUltSSxTQUFTLEVBQUU7TUFDYixPQUFPNUUsMkJBQTJCLENBQ2hDVCxPQUFPLEVBQ1BxRixTQUFTLENBQUMzRSxXQUFXLEVBQ3JCMkUsU0FBUyxDQUFDMUUsUUFDWixDQUFDO0lBQ0g7RUFDRjtFQUVBLElBQUlxRSxjQUFjLEVBQUU7SUFDbEIsT0FBT3ZFLDJCQUEyQixDQUNoQ1QsT0FBTyxFQUNQaUYsS0FBSyxDQUFDOUQsYUFBYSxFQUNuQjhELEtBQUssQ0FBQzVELGlCQUNSLENBQUM7RUFDSDtFQUVBLElBQU1pRSxRQUFRLEdBQUc3SSxLQUFLLENBQUNDLE9BQU8sQ0FBQytILFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFYyxlQUFlLENBQUMsR0FDdERkLFNBQVMsQ0FBQ2MsZUFBZSxHQUN6QixFQUFFO0VBQ04sSUFBSVQsMEJBQTBCLElBQUlRLFFBQVEsQ0FBQzFJLE1BQU0sRUFBRTtJQUNqRCxJQUFNNEksU0FBUyxHQUNiTCxTQUFTLEtBQUtqRyxTQUFTLENBQUN1RyxjQUFjLEdBQ2xDckYsZUFBZSxDQUFDNkUsS0FBSyxDQUFDOUQsYUFBYSxDQUFDLEdBQ3BDLENBQUM7SUFDUCxJQUFNdUUsU0FBUyxHQUNiUCxTQUFTLEtBQUtqRyxTQUFTLENBQUN1RyxjQUFjLEdBQ2xDckYsZUFBZSxDQUFDNkUsS0FBSyxDQUFDNUQsaUJBQWlCLENBQUMsR0FDeEMsQ0FBQztJQUNQLE9BQU9aLDJCQUEyQixDQUNoQ1QsT0FBTyxFQUNQd0YsU0FBUyxHQUNQRixRQUFRLENBQUNLLE1BQU0sQ0FDYixVQUFDQyxHQUFXLEVBQUUxRSxNQUFXO01BQUEsT0FBSzBFLEdBQUcsR0FBRzNFLGFBQWEsQ0FBQ0MsTUFBTSxDQUFDO0lBQUEsR0FDekQsQ0FDRixDQUFDLEVBQ0h3RSxTQUFTLEdBQ1BKLFFBQVEsQ0FBQ0ssTUFBTSxDQUNiLFVBQUNDLEdBQVcsRUFBRTFFLE1BQVc7TUFBQSxPQUFLMEUsR0FBRyxHQUFHeEUsVUFBVSxDQUFDRixNQUFNLENBQUM7SUFBQSxHQUN0RCxDQUNGLENBQ0osQ0FBQztFQUNIO0VBRUEsSUFBTW9ELFdBQVcsR0FBRzdELDJCQUEyQixDQUM3Q1QsT0FBTyxHQUFBMEUscUJBQUEsR0FDUEQsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUUvRCxXQUFXLGNBQUFnRSxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJTyxLQUFLLENBQUM5RCxhQUFhLEdBQUF3RCxtQkFBQSxHQUM3Q0YsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUU5RCxRQUFRLGNBQUFnRSxtQkFBQSxjQUFBQSxtQkFBQSxHQUFJTSxLQUFLLENBQUM1RCxpQkFDL0IsQ0FBQztFQUNELElBQUlpRCxXQUFXLEVBQUUsT0FBT0EsV0FBVztFQUNuQyxJQUFJRyxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFFeEUsSUFBSSxFQUFFO0lBQ25CLGFBQUFjLE1BQUEsQ0FBYWhCLFVBQVUsQ0FBQ0MsT0FBTyxFQUFFeUUsU0FBUyxDQUFDeEUsSUFBSSxDQUFDO0VBQ2xEO0VBQ0EsT0FBTyxFQUFFO0FBQ1g7QUFFQSxTQUFTNEYsb0JBQW9CQSxDQUFBQyxLQUFBLEVBTTFCO0VBQUEsSUFMRGpFLElBQUksR0FBQWlFLEtBQUEsQ0FBSmpFLElBQUk7SUFDSk8sTUFBTSxHQUFBMEQsS0FBQSxDQUFOMUQsTUFBTTtFQUtOLElBQU0yRCxPQUFPLEdBQUduRCxjQUFjLENBQUNmLElBQUksRUFBRU8sTUFBTSxDQUFDO0VBQzVDLElBQU00RCxRQUFRLEdBQUcsQ0FBQW5FLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFM0QsSUFBSSxLQUFJLE1BQU07RUFDckMsSUFBQStILFNBQUEsR0FBc0N2SCxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUF3SCxVQUFBLEdBQUF4SSxjQUFBLENBQUF1SSxTQUFBO0lBQTlDRSxXQUFXLEdBQUFELFVBQUE7SUFBRUUsY0FBYyxHQUFBRixVQUFBO0VBRWxDLElBQUl0RSxLQUFLLENBQUNDLElBQUksQ0FBQyxFQUFFO0lBQ2Ysb0JBQ0VqQyxLQUFBO01BQ0V5RyxTQUFTLEVBQUMsbUNBQW1DO01BQzdDM0QsSUFBSSxFQUFFcUQsT0FBTyxJQUFJekMsU0FBVTtNQUMzQmdELE1BQU0sRUFBQyxRQUFRO01BQ2ZDLEdBQUcsRUFBQyxxQkFBcUI7TUFDekJDLEtBQUssRUFBRVIsUUFBUztNQUFBUyxRQUFBLGdCQUVoQi9HLElBQUEsQ0FBQ2YsU0FBUztRQUFDO01BQVcsQ0FBRSxDQUFDLGVBQ3pCZSxJQUFBO1FBQUErRyxRQUFBLEVBQU9UO01BQVEsQ0FBTyxDQUFDO0lBQUEsQ0FDdEIsQ0FBQztFQUVSO0VBRUEsSUFBSWpFLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDLElBQUlrRSxPQUFPLElBQUksQ0FBQ0ksV0FBVyxFQUFFO0lBQ2hELG9CQUNFekcsSUFBQTtNQUNFMkcsU0FBUyxFQUFDLDRDQUE0QztNQUN0REssR0FBRyxFQUFFWCxPQUFRO01BQ2JZLEdBQUcsRUFBRVgsUUFBUztNQUNkUSxLQUFLLEVBQUVSLFFBQVM7TUFDaEJZLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUVIsY0FBYyxDQUFDLElBQUksQ0FBQztNQUFBO0lBQUMsQ0FDckMsQ0FBQztFQUVOO0VBRUEsSUFBSXJFLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDLEVBQUU7SUFDckIsb0JBQ0VqQyxLQUFBO01BQ0V5RyxTQUFTLEVBQUMsdUNBQXVDO01BQ2pERyxLQUFLLEVBQUVSLFFBQVM7TUFBQVMsUUFBQSxnQkFFaEIvRyxJQUFBLENBQUNkLFVBQVU7UUFBQztNQUFXLENBQUUsQ0FBQyxlQUMxQmMsSUFBQTtRQUFBK0csUUFBQSxFQUFPVDtNQUFRLENBQU8sQ0FBQztJQUFBLENBQ25CLENBQUM7RUFFWDtFQUVBLElBQUlELE9BQU8sRUFBRTtJQUNYLG9CQUNFckcsSUFBQTtNQUNFMkcsU0FBUyxFQUFDLG1DQUFtQztNQUM3QzNELElBQUksRUFBRXFELE9BQVE7TUFDZE8sTUFBTSxFQUFDLFFBQVE7TUFDZkMsR0FBRyxFQUFDLHFCQUFxQjtNQUN6QkMsS0FBSyxFQUFFUixRQUFTO01BQUFTLFFBQUEsRUFFZlQ7SUFBUSxDQUNSLENBQUM7RUFFUjtFQUVBLG9CQUFPdEcsSUFBQTtJQUFBK0csUUFBQSxFQUFPVDtFQUFRLENBQU8sQ0FBQztBQUNoQztBQUVBLFNBQVNhLGlCQUFpQkEsQ0FBQUMsS0FBQSxFQVFsQjtFQUFBLElBUE5DLFVBQVUsR0FBQUQsS0FBQSxDQUFWQyxVQUFVO0lBQ1Y3SSxJQUFJLEdBQUE0SSxLQUFBLENBQUo1SSxJQUFJO0lBQ0o4QixPQUFPLEdBQUE4RyxLQUFBLENBQVA5RyxPQUFPO0lBQ1A5QyxLQUFLLEdBQUE0SixLQUFBLENBQUw1SixLQUFLO0lBQ0w4SixLQUFLLEdBQUFGLEtBQUEsQ0FBTEUsS0FBSztJQUNMQyxJQUFJLEdBQUFILEtBQUEsQ0FBSkcsSUFBSTtJQUNKN0UsTUFBTSxHQUFBMEUsS0FBQSxDQUFOMUUsTUFBTTtFQUVOLElBQU04RSxjQUFjLEdBQUdELElBQUksS0FBSy9ILFNBQVMsQ0FBQ2lJLGFBQWE7RUFDdkQsSUFBTUMsWUFBWSxHQUNoQkgsSUFBSSxLQUFLL0gsU0FBUyxDQUFDbUksV0FBVyxJQUFJSixJQUFJLEtBQUsvSCxTQUFTLENBQUN1RyxjQUFjO0VBQ3JFLElBQU02QixRQUFRLEdBQUdDLE9BQU8sQ0FBQ1AsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVwSyxNQUFNLENBQUM7RUFDdkMsSUFBTTRLLFlBQVksR0FBR04sY0FBYyxJQUFLRSxZQUFZLElBQUlFLFFBQVMsR0FBRyxJQUFJLEdBQUdwSyxLQUFLO0VBRWhGLG9CQUNFMEMsS0FBQTtJQUFLeUcsU0FBUyxFQUFDLHVDQUF1QztJQUFBSSxRQUFBLGdCQUNwRC9HLElBQUE7TUFBSzJHLFNBQVMsRUFBQyx5Q0FBeUM7TUFBQUksUUFBQSxFQUFFdkk7SUFBSSxDQUFNLENBQUMsZUFDckUwQixLQUFBO01BQUt5RyxTQUFTLEVBQUMseUNBQXlDO01BQUFJLFFBQUEsR0FDckRhLFFBQVEsaUJBQ1A1SCxJQUFBO1FBQUsyRyxTQUFTLEVBQUMsdUNBQXVDO1FBQUFJLFFBQUEsRUFDbkRPLEtBQUssQ0FBQ1MsR0FBRyxDQUFDLFVBQUM1RixJQUFTLEVBQUU2RixLQUFhO1VBQUEsb0JBQ2xDaEksSUFBQSxDQUFDbUcsb0JBQW9CO1lBRW5CaEUsSUFBSSxFQUFFQSxJQUFLO1lBQ1hPLE1BQU0sRUFBRUE7VUFBTyxHQUZWUCxJQUFJLENBQUNnQixPQUFPLElBQUloQixJQUFJLENBQUM4RixFQUFFLE9BQUE1RyxNQUFBLENBQU83QyxJQUFJLFlBQUE2QyxNQUFBLENBQVMyRyxLQUFLLENBR3RELENBQUM7UUFBQSxDQUNIO01BQUMsQ0FDQyxDQUNOLEVBQ0FSLGNBQWMsSUFBSWhLLEtBQUssaUJBQ3RCMEMsS0FBQTtRQUFLeUcsU0FBUyxFQUFDLHNDQUFzQztRQUFBSSxRQUFBLGdCQUNuRC9HLElBQUE7VUFDRWtJLEtBQUssRUFBRTtZQUFFQyxlQUFlLEVBQUUzSztVQUFNLENBQUU7VUFDbENtSixTQUFTLEVBQUM7UUFBaUIsQ0FDNUIsQ0FBQyxlQUNGM0csSUFBQTtVQUFBK0csUUFBQSxFQUFPdko7UUFBSyxDQUFPLENBQUM7TUFBQSxDQUNqQixDQUNOLEVBQ0FzSyxZQUFZLElBQUlBLFlBQVksRUFDNUJULFVBQVUsSUFBSSxFQUFFLEVBQ2hCLENBQUNPLFFBQVEsSUFBSSxDQUFDcEssS0FBSyxJQUFJLENBQUM2SixVQUFVLElBQUksR0FBRztJQUFBLENBQ3ZDLENBQUM7RUFBQSxDQUNILENBQUM7QUFFVjtBQUVBLFNBQVNlLGFBQWFBLENBQUFDLEtBQUEsRUFBOEI7RUFBQSxJQUEzQi9ILE9BQU8sR0FBQStILEtBQUEsQ0FBUC9ILE9BQU87SUFBRXlFLFNBQVMsR0FBQXNELEtBQUEsQ0FBVHRELFNBQVM7RUFDekMsSUFBQXVELHFCQUFBLEdBQW1CMUkseUJBQXlCLENBQUMsQ0FBQztJQUF0QzhDLE1BQU0sR0FBQTRGLHFCQUFBLENBQU41RixNQUFNO0VBQ2QsSUFBUThDLGNBQWMsR0FBd0NULFNBQVMsQ0FBL0RTLGNBQWM7SUFBRStDLGNBQWMsR0FBd0J4RCxTQUFTLENBQS9Dd0QsY0FBYztJQUFFbkUsaUJBQWlCLEdBQUtXLFNBQVMsQ0FBL0JYLGlCQUFpQjtFQUN6RCxJQUFRcUIsU0FBUyxHQUNmRCxjQUFjLENBRFJDLFNBQVM7SUFBRWQscUJBQXFCLEdBQ3RDYSxjQUFjLENBREdiLHFCQUFxQjtJQUFBNkQscUJBQUEsR0FDdENoRCxjQUFjLENBRDBCOUIsT0FBTztJQUFFVyxZQUFZLEdBQUFtRSxxQkFBQSxjQUFHLEVBQUUsR0FBQUEscUJBQUE7RUFFcEUsSUFBTUMscUJBQXFCLEdBQUdsSixZQUFZLENBQUNrRyxTQUFTLENBQUM7RUFDckQsSUFBTWlELGdCQUFnQixHQUFHakQsU0FBUyxLQUFLakcsU0FBUyxDQUFDbUosZUFBZTtFQUNoRSxJQUFNQyxlQUFlLEdBQUduRCxTQUFTLEtBQUtqRyxTQUFTLENBQUN1RyxjQUFjO0VBQzlELElBQU1yQyxPQUFPLEdBQUdtRixnQ0FBZ0MsQ0FDOUM5RCxTQUFTLEVBQ1RYLGlCQUFpQixFQUNqQkMsWUFDRixDQUFDO0VBQ0QsSUFBTXlFLG9CQUFvQixHQUN4QkwscUJBQXFCLEtBQ3BCWixPQUFPLENBQUNuRSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXhHLE1BQU0sQ0FBQyxJQUFLd0wsZ0JBQWdCLElBQUkzRCxTQUFTLENBQUN2SCxLQUFNLENBQUM7RUFDckUsb0JBQ0V3QyxJQUFBO0lBQUsyRyxTQUFTLEVBQUMsbUNBQW1DO0lBQUFJLFFBQUEsRUFDL0M2QixlQUFlLGdCQUNkMUksS0FBQSxDQUFBRSxTQUFBO01BQUEyRyxRQUFBLGdCQUNFL0csSUFBQSxDQUFDbUgsaUJBQWlCO1FBQ2hCM0ksSUFBSSxFQUFFZ0gsY0FBYyxDQUFDaEgsSUFBSztRQUMxQitJLElBQUksRUFBRTlCLFNBQVU7UUFDaEJqSSxLQUFLLEVBQUUsSUFBSztRQUNaOEosS0FBSyxFQUFFaUIsY0FBZTtRQUN0QmpJLE9BQU8sRUFBRUEsT0FBUTtRQUNqQm9DLE1BQU0sRUFBRUEsTUFBTztRQUNmMkUsVUFBVSxFQUFFdkMsbUJBQW1CLENBQzdCeEUsT0FBTyxFQUNQeUUsU0FBUyxFQUNUSixxQkFBcUI7UUFDckI7UUFDQWpCLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV4RyxNQUFNLEdBQ1g7VUFBRW9JLGNBQWMsRUFBRTtRQUFLLENBQUMsR0FDeEI7VUFBRUYsMEJBQTBCLEVBQUU7UUFBTSxDQUMxQztNQUFFLENBQ0gsQ0FBQyxFQUNEMUIsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRXhHLE1BQU0sZ0JBQ2Q4QyxJQUFBLENBQUMrSSx3QkFBd0I7UUFDdkJ2SyxJQUFJLEtBQUE2QyxNQUFBLENBQUttRSxjQUFjLENBQUNoSCxJQUFJLGFBQVc7UUFDdkNpSCxTQUFTLEVBQUVBLFNBQVU7UUFDckJqSSxLQUFLLEVBQUV1SCxTQUFTLENBQUN2SCxLQUFNO1FBQ3ZCOEMsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCdUYsZUFBZSxFQUFFbkMsT0FBUTtRQUN6QnFCLFNBQVMsRUFBRUEsU0FBVTtRQUNyQlgsaUJBQWlCLEVBQUVBLGlCQUFrQjtRQUNyQ0MsWUFBWSxFQUFFQSxZQUFhO1FBQzNCTSxxQkFBcUIsRUFBRUE7TUFBc0IsQ0FDOUMsQ0FBQyxHQUNBLElBQUk7SUFBQSxDQUNSLENBQUMsR0FDRG1FLG9CQUFvQixnQkFDdEI5SSxJQUFBLENBQUMrSSx3QkFBd0I7TUFDdkJ2SyxJQUFJLEVBQUVnSCxjQUFjLENBQUNoSCxJQUFLO01BQzFCaUgsU0FBUyxFQUFFQSxTQUFVO01BQ3JCakksS0FBSyxFQUFFdUgsU0FBUyxDQUFDdkgsS0FBTTtNQUN2QjhDLE9BQU8sRUFBRUEsT0FBUTtNQUNqQmdILEtBQUssRUFBRWlCLGNBQWU7TUFDdEIxQyxlQUFlLEVBQUVuQyxPQUFRO01BQ3pCcUIsU0FBUyxFQUFFQSxTQUFVO01BQ3JCWCxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDQyxZQUFZLEVBQUVBLFlBQWE7TUFDM0JNLHFCQUFxQixFQUFFQTtJQUFzQixDQUM5QyxDQUFDLGdCQUVGM0UsSUFBQSxDQUFDbUgsaUJBQWlCO01BQ2hCM0ksSUFBSSxFQUFFZ0gsY0FBYyxDQUFDaEgsSUFBSztNQUMxQitJLElBQUksRUFBRS9CLGNBQWMsQ0FBQ0MsU0FBVTtNQUMvQmpJLEtBQUssRUFDSGlJLFNBQVMsS0FBS2pHLFNBQVMsQ0FBQ2tHLElBQUksSUFBSVgsU0FBUyxDQUFDdkgsS0FBSyxHQUMzQ2tDLGlCQUFpQixDQUNmcUYsU0FBUyxDQUFDdkgsS0FBSyxFQUNmbUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxRQUFRLEVBQy9DNkYsY0FBYyxDQUFDd0QsUUFBUSxJQUFJLElBQzdCLENBQUMsSUFBSWpFLFNBQVMsQ0FBQ3ZILEtBQUssR0FDcEJ1SCxTQUFTLENBQUN2SCxLQUNmO01BQ0Q4SixLQUFLLEVBQUVpQixjQUFlO01BQ3RCakksT0FBTyxFQUFFQSxPQUFRO01BQ2pCb0MsTUFBTSxFQUFFQSxNQUFPO01BQ2YyRSxVQUFVLEVBQUV2QyxtQkFBbUIsQ0FDN0J4RSxPQUFPLEVBQ1B5RSxTQUFTLEVBQ1RKLHFCQUFxQixFQUNyQjtRQUFFUywwQkFBMEIsRUFBRTtNQUFNLENBQ3RDO0lBQUUsQ0FDSDtFQUNGLENBQ0UsQ0FBQztBQUVWO0FBRUEsU0FBUzZELGtCQUFrQkEsQ0FBQUMsS0FBQSxFQVl4QjtFQUFBLElBQUFDLGFBQUE7RUFBQSxJQVhEM0gsTUFBTSxHQUFBMEgsS0FBQSxDQUFOMUgsTUFBTTtJQUNONEMsaUJBQWlCLEdBQUE4RSxLQUFBLENBQWpCOUUsaUJBQWlCO0lBQ2pCQyxZQUFZLEdBQUE2RSxLQUFBLENBQVo3RSxZQUFZO0lBQ1ovRCxPQUFPLEdBQUE0SSxLQUFBLENBQVA1SSxPQUFPO0lBQ1BxRSxxQkFBcUIsR0FBQXVFLEtBQUEsQ0FBckJ2RSxxQkFBcUI7RUFRckIsSUFBTTdDLEtBQUssR0FBRyxDQUFBTixNQUFNLGFBQU5BLE1BQU0sZ0JBQUEySCxhQUFBLEdBQU4zSCxNQUFNLENBQUVoRSxLQUFLLGNBQUEyTCxhQUFBLHVCQUFiQSxhQUFBLENBQWV2RyxJQUFJLENBQUMsQ0FBQyxLQUFJLEVBQUU7RUFDekMsSUFBTXdHLEdBQUcsR0FBR3BGLG1CQUFtQixDQUFDeEMsTUFBTSxFQUFFNEMsaUJBQWlCLEVBQUVDLFlBQVksQ0FBQztFQUN4RSxJQUFNOUQsSUFBSSxHQUFHbUUsZ0JBQWdCLENBQzNCcEUsT0FBTyxFQUNQa0IsTUFBTSxFQUNOcUcsT0FBTyxDQUFDbEQscUJBQXFCLENBQy9CLENBQUM7RUFDRCxvQkFDRXpFLEtBQUE7SUFBTXlHLFNBQVMsRUFBQyx1Q0FBdUM7SUFBQUksUUFBQSxHQUNwRHFDLEdBQUcsaUJBQ0ZwSixJQUFBO01BQ0VrSSxLQUFLLEVBQUU7UUFBRUMsZUFBZSxFQUFFaUI7TUFBSSxDQUFFO01BQ2hDekMsU0FBUyxFQUFDO0lBQWlCLENBQzVCLENBQ0YsZUFDRHpHLEtBQUE7TUFBQTZHLFFBQUEsR0FDR2pGLEtBQUssSUFBSXNILEdBQUcsSUFBSSxHQUFHLEVBQ25CN0ksSUFBSSxJQUFJLEVBQUU7SUFBQSxDQUNQLENBQUM7RUFBQSxDQUNILENBQUM7QUFFWDtBQUVBLFNBQVM4SSxpQkFBaUJBLENBQUFDLEtBQUEsRUFZdkI7RUFBQSxJQUFBQyxjQUFBO0VBQUEsSUFYRC9ILE1BQU0sR0FBQThILEtBQUEsQ0FBTjlILE1BQU07SUFDTjRDLGlCQUFpQixHQUFBa0YsS0FBQSxDQUFqQmxGLGlCQUFpQjtJQUNqQkMsWUFBWSxHQUFBaUYsS0FBQSxDQUFaakYsWUFBWTtJQUNaL0QsT0FBTyxHQUFBZ0osS0FBQSxDQUFQaEosT0FBTztJQUNQcUUscUJBQXFCLEdBQUEyRSxLQUFBLENBQXJCM0UscUJBQXFCO0VBUXJCLElBQUE2RSxzQkFBQSxHQUFtQjVKLHlCQUF5QixDQUFDLENBQUM7SUFBdEM4QyxNQUFNLEdBQUE4RyxzQkFBQSxDQUFOOUcsTUFBTTtFQUNkLElBQU0rRyxRQUFRLEdBQUdoRixxQkFBcUIsQ0FDcENqRCxNQUFNLEVBQ040QyxpQkFBaUIsRUFDakJDLFlBQVksRUFDWjNCLE1BQ0YsQ0FBQztFQUNELElBQU1aLEtBQUssR0FBRyxDQUFBTixNQUFNLGFBQU5BLE1BQU0sZ0JBQUErSCxjQUFBLEdBQU4vSCxNQUFNLENBQUVoRSxLQUFLLGNBQUErTCxjQUFBLHVCQUFiQSxjQUFBLENBQWUzRyxJQUFJLENBQUMsQ0FBQyxLQUFJLEVBQUU7RUFDekMsSUFBTXJDLElBQUksR0FBR21FLGdCQUFnQixDQUFDcEUsT0FBTyxFQUFFa0IsTUFBTSxFQUFFbUQscUJBQXFCLENBQUM7RUFDckUsSUFBQStFLFVBQUEsR0FBc0MxSyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUEySyxVQUFBLEdBQUEzTCxjQUFBLENBQUEwTCxVQUFBO0lBQTlDakQsV0FBVyxHQUFBa0QsVUFBQTtJQUFFakQsY0FBYyxHQUFBaUQsVUFBQTtFQUVsQyxvQkFDRXpKLEtBQUE7SUFBTXlHLFNBQVMsRUFBQyw2Q0FBNkM7SUFBQUksUUFBQSxHQUMxRDBDLFFBQVEsSUFBSSxDQUFDaEQsV0FBVyxnQkFDdkJ6RyxJQUFBO01BQ0UyRyxTQUFTLEVBQUMsNENBQTRDO01BQ3RESyxHQUFHLEVBQUV5QyxRQUFTO01BQ2R4QyxHQUFHLEVBQUVuRixLQUFLLElBQUksaUJBQWtCO01BQ2hDZ0YsS0FBSyxFQUFFaEYsS0FBSyxJQUFJOEIsU0FBVTtNQUMxQnNELE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUVIsY0FBYyxDQUFDLElBQUksQ0FBQztNQUFBO0lBQUMsQ0FDckMsQ0FBQyxHQUNBLElBQUksZUFDUnhHLEtBQUE7TUFBQTZHLFFBQUEsR0FDR2pGLEtBQUssSUFBSSxHQUFHLEVBQ1p2QixJQUFJLElBQUksRUFBRTtJQUFBLENBQ1AsQ0FBQztFQUFBLENBQ0gsQ0FBQztBQUVYO0FBRUEsU0FBU3FKLFdBQVdBLENBQUNwSSxNQUFXLEVBQUU7RUFBQSxJQUFBcUksZ0JBQUE7RUFDaEMsUUFBQUEsZ0JBQUEsR0FBT3JJLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFdUMsUUFBUSxjQUFBOEYsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSXJJLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFeUcsRUFBRTtBQUN2QztBQUVBLFNBQVM2QixzQkFBc0JBLENBQUN0TSxLQUFVLEVBQVk7RUFDcEQsSUFBSVQsS0FBSyxDQUFDQyxPQUFPLENBQUNRLEtBQUssQ0FBQyxFQUFFO0lBQ3hCLE9BQU9BLEtBQUssQ0FBQ3VLLEdBQUcsQ0FBQ2pFLE1BQU0sQ0FBQyxDQUFDaUcsTUFBTSxDQUFDbEMsT0FBTyxDQUFDO0VBQzFDO0VBQ0EsSUFBSXJLLEtBQUssSUFBSSxJQUFJLElBQUlBLEtBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFO0VBQzVDLE9BQU9zRyxNQUFNLENBQUN0RyxLQUFLLENBQUMsQ0FDakJ3TSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1ZqQyxHQUFHLENBQUMsVUFBQ2tDLElBQUk7SUFBQSxPQUFLQSxJQUFJLENBQUNySCxJQUFJLENBQUMsQ0FBQztFQUFBLEVBQUMsQ0FDMUJtSCxNQUFNLENBQUNsQyxPQUFPLENBQUM7QUFDcEI7QUFFQSxTQUFTZ0IsZ0NBQWdDQSxDQUN2QzlELFNBQWMsRUFHUDtFQUFBLElBQUFtRixxQkFBQTtFQUFBLElBRlA5RixpQkFBd0IsR0FBQVQsU0FBQSxDQUFBekcsTUFBQSxRQUFBeUcsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDN0JVLFlBQW1CLEdBQUFWLFNBQUEsQ0FBQXpHLE1BQUEsUUFBQXlHLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsRUFBRTtFQUV4QixJQUFNOEIsU0FBUyxHQUFHVixTQUFTLGFBQVRBLFNBQVMsZ0JBQUFtRixxQkFBQSxHQUFUbkYsU0FBUyxDQUFFUyxjQUFjLGNBQUEwRSxxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCekUsU0FBUztFQUN0RCxJQUFJQSxTQUFTLEtBQUtqRyxTQUFTLENBQUN1RyxjQUFjLEVBQUU7SUFDMUMsT0FBTyxDQUFBaEIsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVjLGVBQWUsS0FBSSxFQUFFO0VBQ3pDO0VBRUEsSUFBTXNFLFdBQVcsR0FBR0wsc0JBQXNCLENBQUMvRSxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRXZILEtBQUssQ0FBQztFQUM1RCxJQUFJMk0sV0FBVyxDQUFDak4sTUFBTSxHQUFHLENBQUMsRUFBRTtJQUMxQixJQUFNa04sS0FBSyxHQUFHLENBQUNoRyxpQkFBaUIsRUFBRUMsWUFBWSxDQUFDO0lBQy9DLElBQU1nRyxRQUFlLEdBQUcsRUFBRTtJQUFDLElBQUFDLFNBQUEsR0FBQTdOLDBCQUFBLENBQ1YwTixXQUFXO01BQUFJLEtBQUE7SUFBQTtNQUFBLElBQUFDLEtBQUEsWUFBQUEsTUFBQSxFQUFFO1FBQUEsSUFBbkJ2QyxFQUFFLEdBQUFzQyxLQUFBLENBQUEvTSxLQUFBO1FBQ1gsU0FBQWlOLEVBQUEsTUFBQUMsTUFBQSxHQUFtQk4sS0FBSyxFQUFBSyxFQUFBLEdBQUFDLE1BQUEsQ0FBQXhOLE1BQUEsRUFBQXVOLEVBQUEsSUFBRTtVQUFyQixJQUFNRSxJQUFJLEdBQUFELE1BQUEsQ0FBQUQsRUFBQTtVQUNiLElBQU1HLEtBQUssR0FBR0QsSUFBSSxDQUFDOUcsSUFBSSxDQUFDLFVBQUNyQyxNQUFXO1lBQUEsT0FBS3NDLE1BQU0sQ0FBQzhGLFdBQVcsQ0FBQ3BJLE1BQU0sQ0FBQyxDQUFDLEtBQUt5RyxFQUFFO1VBQUEsRUFBQztVQUM1RSxJQUFJMkMsS0FBSyxFQUFFO1lBQ1RQLFFBQVEsQ0FBQ3ZMLElBQUksQ0FBQzhMLEtBQUssQ0FBQztZQUNwQjtVQUNGO1FBQ0Y7TUFDRixDQUFDO01BUkQsS0FBQU4sU0FBQSxDQUFBak4sQ0FBQSxNQUFBa04sS0FBQSxHQUFBRCxTQUFBLENBQUFoTixDQUFBLElBQUFDLElBQUE7UUFBQWlOLEtBQUE7TUFBQTtJQVFDLFNBQUFLLEdBQUE7TUFBQVAsU0FBQSxDQUFBM04sQ0FBQSxDQUFBa08sR0FBQTtJQUFBO01BQUFQLFNBQUEsQ0FBQTdNLENBQUE7SUFBQTtJQUNELElBQUk0TSxRQUFRLENBQUNuTixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3ZCLE9BQU9tTixRQUFRO0lBQ2pCO0VBQ0Y7RUFFQSxPQUFPLENBQUF0RixTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRWMsZUFBZSxLQUFJLEVBQUU7QUFDekM7QUFFQSxTQUFTaUYsK0JBQStCQSxDQUN0Qy9GLFNBQWMsRUFHZDtFQUFBLElBRkFYLGlCQUF3QixHQUFBVCxTQUFBLENBQUF6RyxNQUFBLFFBQUF5RyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUM3QlUsWUFBbUIsR0FBQVYsU0FBQSxDQUFBekcsTUFBQSxRQUFBeUcsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxFQUFFO0VBRXhCLElBQU0wRyxRQUFRLEdBQUd4QixnQ0FBZ0MsQ0FDL0M5RCxTQUFTLEVBQ1RYLGlCQUFpQixFQUNqQkMsWUFDRixDQUFDO0VBQ0QsSUFBSWdHLFFBQVEsQ0FBQ25OLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDdkIsT0FBT21OLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDcEI7RUFFQSxJQUFNVSxRQUFRLEdBQ1osQ0FBQWhHLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFdkgsS0FBSyxLQUFJLElBQUksSUFBSSxDQUFBdUgsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUV2SCxLQUFLLE1BQUssRUFBRSxHQUMvQ3NHLE1BQU0sQ0FBQ2lCLFNBQVMsQ0FBQ3ZILEtBQUssQ0FBQyxDQUFDb0YsSUFBSSxDQUFDLENBQUMsR0FDOUIsRUFBRTtFQUNSLElBQUksQ0FBQ21JLFFBQVEsRUFBRSxPQUFPLElBQUk7RUFFMUIsSUFBTVgsS0FBSyxHQUFHLENBQUNoRyxpQkFBaUIsRUFBRUMsWUFBWSxDQUFDO0VBQy9DLFNBQUEyRyxHQUFBLE1BQUFDLE9BQUEsR0FBbUJiLEtBQUssRUFBQVksR0FBQSxHQUFBQyxPQUFBLENBQUEvTixNQUFBLEVBQUE4TixHQUFBLElBQUU7SUFBckIsSUFBTUwsSUFBSSxHQUFBTSxPQUFBLENBQUFELEdBQUE7SUFDYixJQUFNRSxPQUFPLEdBQUdQLElBQUksQ0FBQzlHLElBQUksQ0FDdkIsVUFBQ3JDLE1BQVc7TUFBQSxJQUFBMkosY0FBQTtNQUFBLE9BQUtySCxNQUFNLEVBQUFxSCxjQUFBLEdBQUMzSixNQUFNLENBQUNoRSxLQUFLLGNBQUEyTixjQUFBLGNBQUFBLGNBQUEsR0FBSSxFQUFFLENBQUMsS0FBS0osUUFBUTtJQUFBLENBQzFELENBQUM7SUFDRCxJQUFJRyxPQUFPLEVBQUUsT0FBT0EsT0FBTztFQUM3QjtFQUNBLE9BQU8sSUFBSTtBQUNiO0FBRUEsU0FBU0Usd0JBQXdCQSxDQUFDQyxZQUFpQixFQUFFO0VBQ25ELElBQUksQ0FBQ0EsWUFBWSxFQUFFLE9BQU8sSUFBSTtFQUM5QixJQUFNQyxPQUFPLEdBQUd6SyxNQUFNLENBQUN3SyxZQUFZLENBQUM7RUFDcEMsSUFBSSxDQUFDeEssTUFBTSxDQUFDQyxRQUFRLENBQUN3SyxPQUFPLENBQUMsSUFBSUEsT0FBTyxJQUFJLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDMUQsT0FBTyxJQUFJQyxJQUFJLENBQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQ0Usa0JBQWtCLENBQUMsT0FBTyxFQUFFO0lBQzFEQyxPQUFPLEVBQUUsTUFBTTtJQUNmQyxJQUFJLEVBQUUsU0FBUztJQUNmQyxLQUFLLEVBQUUsTUFBTTtJQUNiQyxHQUFHLEVBQUU7RUFDUCxDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNDLHFCQUFxQkEsQ0FBQUMsS0FBQSxFQVUzQjtFQUFBLElBQUFDLGNBQUEsRUFBQUMsY0FBQTtFQUFBLElBVER4SyxNQUFNLEdBQUFzSyxLQUFBLENBQU50SyxNQUFNO0lBQ05nRSxjQUFjLEdBQUFzRyxLQUFBLENBQWR0RyxjQUFjO0lBQ2RsRixPQUFPLEdBQUF3TCxLQUFBLENBQVB4TCxPQUFPO0lBQ1BxRSxxQkFBcUIsR0FBQW1ILEtBQUEsQ0FBckJuSCxxQkFBcUI7RUFPckIsSUFBTXNILElBQUksR0FBR0MsUUFBUSxDQUFDcEksTUFBTSxFQUFBaUksY0FBQSxHQUFDdkssTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVoRSxLQUFLLGNBQUF1TyxjQUFBLGNBQUFBLGNBQUEsR0FBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNELElBQU1JLFFBQVEsR0FBR2Ysd0JBQXdCLENBQUM1SixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTZKLFlBQVksQ0FBQztFQUMvRCxJQUFNZSxvQkFBb0IsR0FBR3ZFLE9BQU8sQ0FBQ3JDLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFNEcsb0JBQW9CLENBQUM7RUFDMUUsSUFBTUMsYUFBYSxHQUFHRCxvQkFBb0IsR0FBRyxhQUFhLEdBQUcsYUFBYTtFQUMxRSxJQUFNN0wsSUFBSSxHQUFHbUUsZ0JBQWdCLENBQUNwRSxPQUFPLEVBQUVrQixNQUFNLEVBQUVtRCxxQkFBcUIsQ0FBQztFQUVyRSxvQkFDRXpFLEtBQUE7SUFBTXlHLFNBQVMsRUFBQywwQ0FBMEM7SUFBQUksUUFBQSxnQkFDeEQvRyxJQUFBO01BQU0yRyxTQUFTLEVBQUMseUNBQXlDO01BQUFJLFFBQUEsRUFDdERrRixJQUFJLEdBQUcsQ0FBQyxNQUFBNUssTUFBQSxDQUNGNEssSUFBSSxtQkFBQTVLLE1BQUEsQ0FBZ0I0SyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQzNDLENBQUF6SyxNQUFNLGFBQU5BLE1BQU0sZ0JBQUF3SyxjQUFBLEdBQU54SyxNQUFNLENBQUVoRSxLQUFLLGNBQUF3TyxjQUFBLHVCQUFiQSxjQUFBLENBQWVwSixJQUFJLENBQUMsQ0FBQyxLQUFJO0lBQUksQ0FDOUIsQ0FBQyxFQUNOdUosUUFBUSxpQkFDUGpNLEtBQUE7TUFBTXlHLFNBQVMsRUFBQyw2Q0FBNkM7TUFBQUksUUFBQSxHQUMxRHNGLGFBQWEsRUFBQyxHQUFDLEVBQUNGLFFBQVE7SUFBQSxDQUNyQixDQUNQLEVBQ0E1TCxJQUFJLElBQUksRUFBRTtFQUFBLENBQ1AsQ0FBQztBQUVYO0FBRUEsU0FBU3dJLHdCQUF3QkEsQ0FBQXVELEtBQUEsRUFTekI7RUFBQSxJQUFBQyxzQkFBQTtFQUFBLElBUk4vTixJQUFJLEdBQUE4TixLQUFBLENBQUo5TixJQUFJO0lBQ0pxSCxlQUFlLEdBQUF5RyxLQUFBLENBQWZ6RyxlQUFlO0lBQ2ZsQixxQkFBcUIsR0FBQTJILEtBQUEsQ0FBckIzSCxxQkFBcUI7SUFDckJyRSxPQUFPLEdBQUFnTSxLQUFBLENBQVBoTSxPQUFPO0lBQ1BtRixTQUFTLEdBQUE2RyxLQUFBLENBQVQ3RyxTQUFTO0lBQ1RWLFNBQVMsR0FBQXVILEtBQUEsQ0FBVHZILFNBQVM7SUFBQXlILHFCQUFBLEdBQUFGLEtBQUEsQ0FDVGxJLGlCQUFpQjtJQUFqQkEsaUJBQWlCLEdBQUFvSSxxQkFBQSxjQUFHLEVBQUUsR0FBQUEscUJBQUE7SUFBQUMsa0JBQUEsR0FBQUgsS0FBQSxDQUN0QmpJLFlBQVk7SUFBWkEsWUFBWSxHQUFBb0ksa0JBQUEsY0FBRyxFQUFFLEdBQUFBLGtCQUFBO0VBRWpCLElBQU0vRCxnQkFBZ0IsR0FBR2pELFNBQVMsS0FBS2pHLFNBQVMsQ0FBQ21KLGVBQWU7RUFDaEUsSUFBTStELFdBQVcsR0FBR2hFLGdCQUFnQixHQUNoQ29DLCtCQUErQixDQUM3QjtJQUFFakYsZUFBZSxFQUFmQSxlQUFlO0lBQUVySSxLQUFLLEVBQUV1SCxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRXZIO0VBQU0sQ0FBQyxFQUM1QzRHLGlCQUFpQixFQUNqQkMsWUFDRixDQUFDLEdBQ0R3QixlQUFlLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLElBQU04RyxjQUFjLEdBQ2xCbEgsU0FBUyxLQUFLakcsU0FBUyxDQUFDb04sYUFBYSxJQUNyQ25ILFNBQVMsS0FBS2pHLFNBQVMsQ0FBQ3VHLGNBQWM7RUFDeEMsSUFBTThHLGFBQWEsR0FBR3BILFNBQVMsS0FBS2pHLFNBQVMsQ0FBQ3NOLFlBQVk7RUFDMUQsSUFBTXRILGNBQWMsSUFBQStHLHNCQUFBLEdBQUd4SCxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRVMsY0FBYyxjQUFBK0csc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxDQUFDLENBQUM7RUFFdEQsU0FBU1EsaUJBQWlCQSxDQUFDcFAsQ0FBTSxFQUFFO0lBQUEsSUFBQXFQLFFBQUE7SUFDakMsSUFBSXRFLGdCQUFnQixFQUFFO01BQ3BCLG9CQUNFMUksSUFBQSxDQUFDNkwscUJBQXFCO1FBQ3BCckssTUFBTSxFQUFFN0QsQ0FBRTtRQUNWNkgsY0FBYyxFQUFFQSxjQUFlO1FBQy9CbEYsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCcUUscUJBQXFCLEVBQUVBO01BQXNCLENBQzlDLENBQUM7SUFFTjtJQUNBLElBQUlnSSxjQUFjLEVBQUU7TUFDbEIsb0JBQ0UzTSxJQUFBLENBQUNpSixrQkFBa0I7UUFDakJ6SCxNQUFNLEVBQUU3RCxDQUFFO1FBQ1Z5RyxpQkFBaUIsRUFBRUEsaUJBQWtCO1FBQ3JDQyxZQUFZLEVBQUVBLFlBQWE7UUFDM0IvRCxPQUFPLEVBQUVBLE9BQVE7UUFDakJxRSxxQkFBcUIsRUFBRUE7TUFBc0IsQ0FDOUMsQ0FBQztJQUVOO0lBQ0EsSUFBSWtJLGFBQWEsRUFBRTtNQUNqQixvQkFDRTdNLElBQUEsQ0FBQ3FKLGlCQUFpQjtRQUNoQjdILE1BQU0sRUFBRTdELENBQUU7UUFDVnlHLGlCQUFpQixFQUFFQSxpQkFBa0I7UUFDckNDLFlBQVksRUFBRUEsWUFBYTtRQUMzQi9ELE9BQU8sRUFBRUEsT0FBUTtRQUNqQnFFLHFCQUFxQixFQUFFQTtNQUFzQixDQUM5QyxDQUFDO0lBRU47SUFDQSxvQkFDRXpFLEtBQUEsQ0FBQUUsU0FBQTtNQUFBMkcsUUFBQSxHQUNHLEVBQUFpRyxRQUFBLEdBQUFyUCxDQUFDLENBQUNILEtBQUssY0FBQXdQLFFBQUEsdUJBQVBBLFFBQUEsQ0FBU3BLLElBQUksQ0FBQyxDQUFDLEtBQUksR0FBRyxFQUN0QjhCLGdCQUFnQixDQUFDcEUsT0FBTyxFQUFFM0MsQ0FBQyxFQUFFZ0gscUJBQXFCLENBQUMsSUFBSSxFQUFFO0lBQUEsQ0FDMUQsQ0FBQztFQUVQO0VBRUEsb0JBQ0UzRSxJQUFBLENBQUFJLFNBQUE7SUFBQTJHLFFBQUEsRUFDR2xCLGVBQWUsQ0FBQzNJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQ3dMLGdCQUFnQixnQkFDOUN4SSxLQUFBO01BQUt5RyxTQUFTLEVBQUMsdUNBQXVDO01BQUFJLFFBQUEsZ0JBQ3BEL0csSUFBQTtRQUFLMkcsU0FBUyxFQUFDLHlDQUF5QztRQUFBSSxRQUFBLEVBQUV2STtNQUFJLENBQU0sQ0FBQyxlQUNyRXdCLElBQUE7UUFBSTJHLFNBQVMsRUFBQywyREFBMkQ7UUFBQUksUUFBQSxFQUN0RWxCLGVBQWUsQ0FBQ2tDLEdBQUcsQ0FBQyxVQUFDcEssQ0FBTSxFQUFFaUIsQ0FBUztVQUFBLElBQUFxTyxXQUFBO1VBQUEsb0JBQ3JDak4sSUFBQTtZQUFBK0csUUFBQSxFQUNHZ0csaUJBQWlCLENBQUNwUCxDQUFDO1VBQUMsTUFBQTBELE1BQUEsQ0FEWHpDLENBQUMsa0JBQUF5QyxNQUFBLEVBQUE0TCxXQUFBLEdBQWV0UCxDQUFDLENBQUNvRyxRQUFRLGNBQUFrSixXQUFBLGNBQUFBLFdBQUEsR0FBSXJPLENBQUMsQ0FFdkMsQ0FBQztRQUFBLENBQ047TUFBQyxDQUNBLENBQUM7SUFBQSxDQUNGLENBQUMsR0FDSjhOLFdBQVcsZ0JBQ2J4TSxLQUFBO01BQUt5RyxTQUFTLEVBQUMsdUNBQXVDO01BQUFJLFFBQUEsZ0JBQ3BEL0csSUFBQTtRQUFLMkcsU0FBUyxFQUFDLHlDQUF5QztRQUFBSSxRQUFBLEVBQUV2STtNQUFJLENBQU0sQ0FBQyxlQUNyRXdCLElBQUE7UUFBSzJHLFNBQVMsRUFBQyx5Q0FBeUM7UUFBQUksUUFBQSxFQUNyRGdHLGlCQUFpQixDQUFDTCxXQUFXO01BQUMsQ0FDNUIsQ0FBQztJQUFBLENBQ0gsQ0FBQyxnQkFFTnhNLEtBQUE7TUFBS3lHLFNBQVMsRUFBQyx1Q0FBdUM7TUFBQUksUUFBQSxnQkFDcEQvRyxJQUFBO1FBQUsyRyxTQUFTLEVBQUMseUNBQXlDO1FBQUFJLFFBQUEsRUFBRXZJO01BQUksQ0FBTSxDQUFDLGVBQ3JFd0IsSUFBQTtRQUFLMkcsU0FBUyxFQUFDLHlDQUF5QztRQUFBSSxRQUFBLEVBQUM7TUFBQyxDQUFLLENBQUM7SUFBQSxDQUM3RDtFQUNOLENBQ0QsQ0FBQztBQUVQO0FBRUEsU0FBU21HLGNBQWNBLENBQUFDLEtBQUEsRUFBOEM7RUFBQSxJQUEzQzdNLE9BQU8sR0FBQTZNLEtBQUEsQ0FBUDdNLE9BQU87SUFBRThNLFFBQVEsR0FBQUQsS0FBQSxDQUFSQyxRQUFRO0lBQUFDLGdCQUFBLEdBQUFGLEtBQUEsQ0FBRUcsVUFBVTtJQUFWQSxVQUFVLEdBQUFELGdCQUFBLGNBQUcsRUFBRSxHQUFBQSxnQkFBQTtFQUMxRCxvQkFDRXJOLElBQUE7SUFBSzJHLFNBQVMsRUFBQyxvQ0FBb0M7SUFBQUksUUFBQSxFQUNoRHVHLFVBQVUsQ0FBQ3ZGLEdBQUcsQ0FBQyxVQUFDd0YsQ0FBTSxFQUFFM08sQ0FBUztNQUFBLE9BQ2hDLENBQUNTLGtCQUFrQixDQUFDa08sQ0FBQyxDQUFDL0gsY0FBYyxDQUFDQyxTQUFTLENBQUMsZ0JBQzdDekYsSUFBQSxDQUFDb0ksYUFBYTtRQUNaZ0YsUUFBUSxFQUFFQSxRQUFTO1FBQ25CckksU0FBUyxFQUFFd0ksQ0FBRTtRQUNiak4sT0FBTyxFQUFFQTtNQUFRLEdBQ1oxQixDQUNOLENBQUMsR0FDQSxJQUFJO0lBQUEsQ0FDVjtFQUFDLENBQ0UsQ0FBQztBQUVWO0FBRUEsU0FBUzRPLGtCQUFrQkEsQ0FBQUMsS0FBQSxFQUtuQjtFQUFBLElBSk5DLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO0lBQ0wxRixLQUFLLEdBQUF5RixLQUFBLENBQUx6RixLQUFLO0lBQ0wxSCxPQUFPLEdBQUFtTixLQUFBLENBQVBuTixPQUFPO0lBQ1BxTixvQkFBb0IsR0FBQUYsS0FBQSxDQUFwQkUsb0JBQW9CO0VBRXBCLElBQU1DLFFBQVEsR0FBR3RPLG9CQUFvQixDQUFDZ0IsT0FBTyxDQUFDO0VBQzlDLElBQVE4TSxRQUFRLEdBQWlCTSxLQUFLLENBQTlCTixRQUFRO0lBQUVFLFVBQVUsR0FBS0ksS0FBSyxDQUFwQkosVUFBVTtFQUM1QixJQUFNTyxpQkFBaUIsR0FBRyxDQUFDUCxVQUFVLGFBQVZBLFVBQVUsY0FBVkEsVUFBVSxHQUFJLEVBQUUsRUFBRXZELE1BQU0sQ0FDakQsVUFBQ3dELENBQU07SUFBQSxJQUFBTyxpQkFBQTtJQUFBLE9BQUssQ0FBQ3pPLGtCQUFrQixDQUFDa08sQ0FBQyxhQUFEQSxDQUFDLGdCQUFBTyxpQkFBQSxHQUFEUCxDQUFDLENBQUUvSCxjQUFjLGNBQUFzSSxpQkFBQSx1QkFBakJBLGlCQUFBLENBQW1CckksU0FBUyxDQUFDO0VBQUEsQ0FDL0QsQ0FBQztFQUNELElBQU1zSSxTQUFTLEdBQUdILFFBQVEsR0FBRyxXQUFXLEdBQUcsWUFBWTtFQUN2RCxJQUFNSSxjQUFjLEdBQUdMLG9CQUFvQixHQUN2QzNMLHdCQUF3QixDQUFDMUIsT0FBTyxDQUFDLEdBQ2pDRCxVQUFVLENBQUNDLE9BQU8sRUFBRU8sTUFBTSxDQUFDUCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTJCLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUV4RCxvQkFDRS9CLEtBQUE7SUFBU3lHLFNBQVMsRUFBQywrQkFBK0I7SUFBQUksUUFBQSxnQkFDaEQ3RyxLQUFBO01BQVF5RyxTQUFTLEVBQUMsNENBQTRDO01BQUFJLFFBQUEsR0FBQyxRQUN2RCxFQUFDaUIsS0FBSyxHQUFHLENBQUMsRUFBQyxjQUNuQjtJQUFBLENBQVEsQ0FBQyxFQUNSLENBQUM0RixRQUFRLElBQUlSLFFBQVEsR0FBRyxDQUFDLGlCQUN4QnBOLElBQUEsQ0FBQ0YsZUFBZTtNQUFDZ0MsS0FBSyxFQUFDLFVBQVU7TUFBQ3RFLEtBQUssRUFBRTRQO0lBQVMsQ0FBRSxDQUNyRCxlQUNEcE4sSUFBQSxDQUFDRixlQUFlO01BQUNnQyxLQUFLLEVBQUMsWUFBWTtNQUFDdEUsS0FBSyxFQUFFd1E7SUFBZSxDQUFFLENBQUMsRUFDNURILGlCQUFpQixDQUFDM1EsTUFBTSxHQUFHLENBQUMsaUJBQzNCOEMsSUFBQSxDQUFDa04sY0FBYztNQUNiRSxRQUFRLEVBQUVBLFFBQVM7TUFDbkJFLFVBQVUsRUFBRUEsVUFBVztNQUN2QmhOLE9BQU8sRUFBRUE7SUFBUSxDQUNsQixDQUNGLGVBQ0RKLEtBQUE7TUFBUXlHLFNBQVMsRUFBQyxvQ0FBb0M7TUFBQUksUUFBQSxHQUNuRGdILFNBQVMsRUFBQyxJQUFFLEVBQUMxTixVQUFVLENBQUNDLE9BQU8sRUFBRW9OLEtBQUssQ0FBQ08sU0FBUyxDQUFDO0lBQUEsQ0FDNUMsQ0FBQztFQUFBLENBQ0YsQ0FBQztBQUVkO0FBRUEsZUFBZSxTQUFTQyxjQUFjQSxDQUFBLEVBQUc7RUFDdkMsSUFBQUMsc0JBQUEsR0FBZ0J2Tyx5QkFBeUIsQ0FBQyxDQUFDO0lBQW5Dd08sR0FBRyxHQUFBRCxzQkFBQSxDQUFIQyxHQUFHO0VBQ1gsSUFBUTlOLE9BQU8sR0FBMkQ4TixHQUFHLENBQXJFOU4sT0FBTztJQUFBK04sYUFBQSxHQUEyREQsR0FBRyxDQUE1RGhCLFFBQVE7SUFBUkEsUUFBUSxHQUFBaUIsYUFBQSxjQUFHLENBQUMsR0FBQUEsYUFBQTtJQUFBQyxlQUFBLEdBQTZDRixHQUFHLENBQTlDZCxVQUFVO0lBQVZBLFVBQVUsR0FBQWdCLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7SUFBQUMscUJBQUEsR0FBNEJILEdBQUcsQ0FBN0JJLGdCQUFnQjtJQUFoQkEsZ0JBQWdCLEdBQUFELHFCQUFBLGNBQUcsRUFBRSxHQUFBQSxxQkFBQTtFQUNyRSxJQUFRRSxhQUFhLEdBQUtuTyxPQUFPLENBQXpCbU8sYUFBYTtFQUNyQixJQUFNNUosU0FBUyxHQUFHekYsMkJBQTJCLENBQUNnUCxHQUFHLENBQUM7RUFDbEQsSUFBTVIsUUFBUSxHQUFHdE8sb0JBQW9CLENBQUNnQixPQUFPLENBQUM7RUFDOUMsSUFBTW9PLFNBQVMsR0FBR0YsZ0JBQWdCLENBQUN0UixNQUFNLEdBQUcsQ0FBQztFQUM3QyxJQUFNeVIsa0JBQWtCLEdBQUcsQ0FBQ3JCLFVBQVUsYUFBVkEsVUFBVSxjQUFWQSxVQUFVLEdBQUksRUFBRSxFQUFFdkQsTUFBTSxDQUNsRCxVQUFDd0QsQ0FBTTtJQUFBLElBQUFxQixrQkFBQTtJQUFBLE9BQUssQ0FBQ3ZQLGtCQUFrQixDQUFDa08sQ0FBQyxhQUFEQSxDQUFDLGdCQUFBcUIsa0JBQUEsR0FBRHJCLENBQUMsQ0FBRS9ILGNBQWMsY0FBQW9KLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJuSixTQUFTLENBQUM7RUFBQSxDQUMvRCxDQUFDO0VBQ0QsSUFBTW9KLGFBQWEsR0FBR0gsU0FBUyxHQUMzQkYsZ0JBQWdCLENBQUN2SSxNQUFNLENBQ3JCLFVBQUNDLEdBQVcsRUFBRTRJLENBQU07SUFBQSxPQUFLNUksR0FBRyxJQUFJckYsTUFBTSxDQUFDaU8sQ0FBQyxDQUFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQUEsR0FDeEQsQ0FDRixDQUFDLEdBQ0R2TSxNQUFNLENBQUN1TSxRQUFRLENBQUMsSUFBSSxDQUFDO0VBQ3pCLElBQU1yTCxhQUFhLEdBQUc4RixPQUFPLENBQUN2SCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXlCLGFBQWEsQ0FBQztFQUNyRCxJQUFNZ04sYUFBYSxHQUFHbE8sTUFBTSxDQUFDUCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXVCLFVBQVUsQ0FBQyxHQUFHLENBQUM7RUFFckQsb0JBQ0UzQixLQUFBO0lBQUt5RyxTQUFTLEVBQUMsZ0VBQWdFO0lBQUFJLFFBQUEsZ0JBQzdFL0csSUFBQTtNQUFLMkcsU0FBUyxFQUFDLHVDQUF1QztNQUFBSSxRQUFBLEVBQUV6RyxPQUFPLENBQUM5QjtJQUFJLENBQU0sQ0FBQyxFQUMxRWtRLFNBQVMsaUJBQ1IxTyxJQUFBO01BQUsyRyxTQUFTLEVBQUMsZ0NBQWdDO01BQUFJLFFBQUEsRUFDNUN5SCxnQkFBZ0IsQ0FBQ3pHLEdBQUcsQ0FBQyxVQUFDK0csQ0FBTSxFQUFFbFEsQ0FBUztRQUFBLE9BQ3RDa1EsQ0FBQyxDQUFDMUIsUUFBUSxnQkFDUnBOLElBQUEsQ0FBQ3dOLGtCQUFrQjtVQUNqQkUsS0FBSyxFQUFFb0IsQ0FBRTtVQUVUOUcsS0FBSyxFQUFFcEosQ0FBRTtVQUNUMEIsT0FBTyxFQUFFQSxPQUFRO1VBQ2pCcU4sb0JBQW9CLEVBQUU1TDtRQUFjLE1BQUFWLE1BQUEsQ0FINUJ6QyxDQUFDLHNCQUlWLENBQUMsR0FDQSxJQUFJO01BQUEsQ0FDVjtJQUFDLENBQ0UsQ0FDTixFQUNBLENBQUM4UCxTQUFTLGlCQUNUeE8sS0FBQTtNQUFLeUcsU0FBUyxFQUFDLG9DQUFvQztNQUFBSSxRQUFBLGdCQUNqRC9HLElBQUE7UUFBUTJHLFNBQVMsRUFBQyw0Q0FBNEM7UUFBQUksUUFBQSxFQUFDO01BRS9ELENBQVEsQ0FBQyxFQUNScUcsUUFBUSxHQUFHLENBQUMsaUJBQ1hwTixJQUFBLENBQUNGLGVBQWU7UUFBQ2dDLEtBQUssRUFBQyxVQUFVO1FBQUN0RSxLQUFLLEVBQUU0UDtNQUFTLENBQUUsQ0FDckQsZUFDRHBOLElBQUEsQ0FBQ0YsZUFBZTtRQUNkZ0MsS0FBSyxFQUFDLFlBQVk7UUFDbEJ0RSxLQUFLLEVBQUV3RSx3QkFBd0IsQ0FBQzFCLE9BQU87TUFBRSxDQUMxQyxDQUFDLEVBQ0RxTyxrQkFBa0IsQ0FBQ3pSLE1BQU0sR0FBRyxDQUFDLGlCQUM1QjhDLElBQUEsQ0FBQ2tOLGNBQWM7UUFDYkUsUUFBUSxFQUFFQSxRQUFTO1FBQ25CRSxVQUFVLEVBQUVBLFVBQVc7UUFDdkJoTixPQUFPLEVBQUVBO01BQVEsQ0FDbEIsQ0FDRjtJQUFBLENBQ0UsQ0FDTixFQUNBb08sU0FBUyxJQUFJQyxrQkFBa0IsQ0FBQ3pSLE1BQU0sR0FBRyxDQUFDLGlCQUN6Q2dELEtBQUE7TUFBS3lHLFNBQVMsRUFBQyxvQ0FBb0M7TUFBQUksUUFBQSxnQkFDakQvRyxJQUFBO1FBQVEyRyxTQUFTLEVBQUMsNENBQTRDO1FBQUFJLFFBQUEsRUFBQztNQUUvRCxDQUFRLENBQUMsZUFDVC9HLElBQUEsQ0FBQ2tOLGNBQWM7UUFDYkUsUUFBUSxFQUFFQSxRQUFTO1FBQ25CRSxVQUFVLEVBQUVBLFVBQVc7UUFDdkJoTixPQUFPLEVBQUVBO01BQVEsQ0FDbEIsQ0FBQztJQUFBLENBQ0MsQ0FDTixFQUNBLENBQUNzTixRQUFRLGlCQUNSMU4sS0FBQTtNQUFLeUcsU0FBUyxFQUFDLCtCQUErQjtNQUFBSSxRQUFBLEdBQzNDOEgsYUFBYSxHQUFHLENBQUMsaUJBQ2hCN08sSUFBQSxDQUFDSCxnQkFBZ0I7UUFDZjhHLFNBQVMsRUFBQyx3Q0FBd0M7UUFDbEQ3RSxLQUFLLEVBQUMsZ0JBQWdCO1FBQ3RCbkIsTUFBTSxFQUFFa087TUFBYyxDQUN2QixDQUNGLEVBQ0FILFNBQVMsSUFBSUssYUFBYSxJQUFJLENBQUNoTixhQUFhLGlCQUMzQy9CLElBQUEsQ0FBQ0gsZ0JBQWdCO1FBQ2ZpQyxLQUFLLEVBQUMsT0FBTztRQUNibkIsTUFBTSxFQUFFTixVQUFVLENBQUNDLE9BQU8sRUFBRU8sTUFBTSxDQUFDUCxPQUFPLENBQUN1QixVQUFVLENBQUM7TUFBRSxDQUN6RCxDQUNGLGVBQ0Q3QixJQUFBLENBQUNILGdCQUFnQjtRQUNmaUMsS0FBSyxFQUFDLGtCQUFrQjtRQUN4QmtOLFVBQVUsRUFDUlAsYUFBYSxnQkFDWHpPLElBQUE7VUFBTzJHLFNBQVMsRUFBQyxvQ0FBb0M7VUFBQUksUUFBQSxFQUFDO1FBQVksQ0FBTyxDQUFDLEdBQ3hFbkQsU0FDTDtRQUNEakQsTUFBTSxFQUFFa0U7TUFBVSxDQUNuQixDQUFDO0lBQUEsQ0FDQyxDQUNOLEVBQ0EsQ0FBQyxFQUFFK0ksUUFBUSxJQUFJLENBQUNjLFNBQVMsQ0FBQyxpQkFDekJ4TyxLQUFBO01BQUE2RyxRQUFBLGdCQUNFN0csS0FBQTtRQUFReUcsU0FBUyxFQUFDLE1BQU07UUFBQUksUUFBQSxHQUNyQjZHLFFBQVEsR0FBRyxrQkFBa0IsR0FBRyxPQUFPLEVBQUMsT0FDM0M7TUFBQSxDQUFRLENBQUMsRUFBQyxHQUFHLGVBQ2I1TixJQUFBO1FBQVEyRyxTQUFTLEVBQUMsY0FBYztRQUFBSSxRQUFBLEVBQUVsQztNQUFTLENBQVMsQ0FBQztJQUFBLENBQ2xELENBQ047RUFBQSxDQUNFLENBQUM7QUFFViIsImlnbm9yZUxpc3QiOltdfQ==
|